From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=RGKlEML7; spf=pass (domain: linaro.org, ip: 209.85.128.66, mailfrom: leif.lindholm@linaro.org) Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by groups.io with SMTP; Tue, 11 Jun 2019 02:08:51 -0700 Received: by mail-wm1-f66.google.com with SMTP id 207so2054942wma.1 for ; Tue, 11 Jun 2019 02:08:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=NQBR+yvuFvB13q+BeC5MdkJM2BZy1RXPjwwd6Suqy6s=; b=RGKlEML7IDup1ow0OBJctQNl+EaX2an5YlRiI6ic+1tNvdM0CtES524V3HeDZEdWbh i54isr3NNBIp7TWV9mqm2zwsaHVDVRAREIsg1+bj2RrWgxICtWhIHyYYWGoYjPjogdQm yLqjfBKjGxd9Pue5B3kx2Gf6xBNTtqCf6qVMVQcKMMbmHSNS9Bp1R4PQHEjzaFFNsUlM k3BZbWiI1NllmYGkd3YpdjVcMhOVovrAlPm68q40NjxHQdax3TFqUQGh1+YwuU1+fo+x FdsPI1gXvVCbfvwLh3FlwDIDrvYT+7+APDLrAzatVzgQp/w+Oa5GCuhQ6vxSFFU+VAGO kIlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=NQBR+yvuFvB13q+BeC5MdkJM2BZy1RXPjwwd6Suqy6s=; b=o5HDS4GEw6YjdPIvejRUIERgYpUF4Z2xCDIwnSx/2Cy8i+f0xALIJa2jwXZjXAtrCV HZMWxUkmC3dHlRTbP3KRIGIR7L0E4R9RC9DgTLqJAkbVrCrSOycNenLX8V2eLMOWenF/ jSQNjBPd/1kroEIXEUuvw9FUD4XRf1uhq9tblN6NNFlDvvpoOIn0Zg9EttPjYrPizmO2 9QTLbhPH7+IqEeriLEJMedInIrAiNeWke6AhS2l0cs+kwZwjPOUEItFUkxVsLkn81A9d q2Krz0HYPf2+dGqaV59QTwW1PtrWVGl5kZ87o1j7PZ7+9TJJIe8zsOQs6poDZsDTLmeL i1JA== X-Gm-Message-State: APjAAAUnzoHOxYJwMeJ6HQjQKJcUsv3//QdFTNVMhLYwlfkNLoB2R5Mm rNMrsCb8v7L2R0Kk7bReKHj3yA== X-Google-Smtp-Source: APXvYqxEZgssQaVZptn/U3tNDER7k08c77wLmBvPXsudBFwDnT0GQOAMmOPRDY82C4fAqfTU/yfwLQ== X-Received: by 2002:a7b:cc86:: with SMTP id p6mr15705625wma.123.1560244129658; Tue, 11 Jun 2019 02:08:49 -0700 (PDT) Return-Path: Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id o4sm1462835wmh.35.2019.06.11.02.08.48 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 11 Jun 2019 02:08:48 -0700 (PDT) Date: Tue, 11 Jun 2019 10:08:47 +0100 From: "Leif Lindholm" To: "Loh, Tien Hock" Cc: 'Haojian Zhuang' , "'devel@edk2.groups.io'" , "'thloh85@gmail.com'" , 'Ard Biesheuvel' Subject: Re: [PATCH v2 6/7] EmbeddedPkg: Fix DwEmmc SendCommand polling Message-ID: <20190611090847.lryjgzjq3y5xi5io@bivouac.eciton.net> References: <1558949428-190715-1-git-send-email-tien.hock.loh@intel.com> <1558949428-190715-7-git-send-email-tien.hock.loh@intel.com> <20190528180409.xqqigzdyk4e2oamt@bivouac.eciton.net> <20190530070553.GB18524@gmail.com> MIME-Version: 1.0 In-Reply-To: User-Agent: NeoMutt/20170113 (1.7.2) Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Tue, Jun 11, 2019 at 02:40:51AM +0000, Loh, Tien Hock wrote: > Leif, > > Since Haojian have a newer driver model that uses the > NonDiscoverableDeviceDxe, I believe we should be moving to use the > new driver. > > I'll try to test out the patches submitted by Haojian in the mean time. > Can you help review the patch? Thanks! I can have another look at the patch, but I would really appreciate if you could also review it please? My problem is that I really don't have much understanding of SD/MMC protocols. / Leif > > -----Original Message----- > > From: Loh, Tien Hock > > Sent: Thursday, May 30, 2019 3:56 PM > > To: Haojian Zhuang ; Leif Lindholm > > > > Cc: devel@edk2.groups.io; thloh85@gmail.com; Ard Biesheuvel > > > > Subject: RE: [PATCH v2 6/7] EmbeddedPkg: Fix DwEmmc SendCommand > > polling > > > > > -----Original Message----- > > > From: Haojian Zhuang > > > Sent: Thursday, May 30, 2019 3:06 PM > > > To: Leif Lindholm > > > Cc: Loh, Tien Hock ; devel@edk2.groups.io; > > > thloh85@gmail.com; Ard Biesheuvel > > > Subject: Re: [PATCH v2 6/7] EmbeddedPkg: Fix DwEmmc SendCommand > > > polling > > > > > > On Tue, May 28, 2019 at 07:04:09PM +0100, Leif Lindholm wrote: > > > > +Haojian, > > > > > > > > Haojian - since you are the original author, can you comment on the > > > > delays? Are these silicon bug workarounds (so we need to add a Pcd), > > > > or does these changes work on your platforms too? > > > > > > I'm not in the loop, so I missed the patch series. > > > > > > The patch series can't work on my platform for the eMMC. Although a > > > variable is created to identify whether it's a SD or eMMC device, it > > > doesn't identify the eMMC device by the right way. So the eMMC device > > > isn't initialized successfully on my platform. > > > > > > 1. Since MMC framework could identify whether it's eMMC device or SD > > > device, we need to make device driver gets this kind of information > > > from the MMC framework. And we need to support multiple eMMC/SD > > > instances in MMC framework. > > > > Yeah my bad I didn't read through the SD/MMC specs on that. Now I check > > the specs and you're right, the information should be read from MMC > > framework. > > > > > > > > 2. I sent a patch series to support both eMMC device and SD device before. > > > https://edk2.groups.io/g/devel/message/28572 > > > && > > > https://edk2.groups.io/g/devel/message/28615 > > > Maybe it's missed. Could you help to review that patch series? > > Leif, can you help review the patch series? Since Haojian have moved the driver to NonDiscoverableDeviceDxe, I think that would be a more appropriate driver to be used going forward. Thanks! > > > > > > > > > Best Regards > > > Haojian > > > > > > > > > > > Regards, > > > > > > > > Leif > > > > > > > > On Mon, May 27, 2019 at 05:30:27PM +0800, tien.hock.loh@intel.com > > > wrote: > > > > > From: "Tien Hock, Loh" > > > > > > > > > > Change SendCommand polling mode to remove unnecessary delay, and > > > > > check for transfer done only when block data is to be read/write. > > > > > This would also increase performance slightly. > > > > > > > > > > Signed-off-by: "Tien Hock, Loh" > > > > > Cc: Leif Lindholm > > > > > Cc: Ard Biesheuvel > > > > > --- > > > > > EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c | 43 > > > +++++++++++++++----- > > > > > 1 file changed, 33 insertions(+), 10 deletions(-) > > > > > > > > > > diff --git a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c > > > > > b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c > > > > > index c6c8e04917..b57833458f 100644 > > > > > --- a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c > > > > > +++ b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c > > > > > @@ -286,16 +286,13 @@ SendCommand ( > > > > > DWEMMC_INT_RCRC | DWEMMC_INT_RE; > > > > > ErrMask |= DWEMMC_INT_DCRC | DWEMMC_INT_DRT | > > > DWEMMC_INT_SBE; > > > > > do { > > > > > - MicroSecondDelay(500); > > > > > Data = MmioRead32 (DWEMMC_RINTSTS); > > > > > - > > > > > - if (Data & ErrMask) { > > > > > - return EFI_DEVICE_ERROR; > > > > > - } > > > > > - if (Data & DWEMMC_INT_DTO) { // Transfer Done > > > > > - break; > > > > > - } > > > > > } while (!(Data & DWEMMC_INT_CMD_DONE)); > > > > > + > > > > > + if (Data & ErrMask) { > > > > > + return EFI_DEVICE_ERROR; > > > > > + } > > > > > + > > > > > return EFI_SUCCESS; > > > > > } > > > > > > > > > > @@ -550,8 +547,9 @@ DwEmmcReadBlockData ( > > > > > ) > > > > > { > > > > > EFI_STATUS Status; > > > > > - UINT32 DescPages, CountPerPage, Count; > > > > > + UINT32 DescPages, CountPerPage, Count, ErrMask; > > > > > EFI_TPL Tpl; > > > > > + UINTN Rintsts = 0; > > > > > > > > > > Tpl = gBS->RaiseTPL (TPL_NOTIFY); > > > > > > > > > > @@ -574,6 +572,18 @@ DwEmmcReadBlockData ( > > > > > DEBUG ((DEBUG_ERROR, "Failed to read data, > > > mDwEmmcCommand:%x, mDwEmmcArgument:%x, Status:%r\n", > > mDwEmmcCommand, > > > mDwEmmcArgument, Status)); > > > > > goto out; > > > > > } > > > > > + > > > > > + while(!((MmioRead32(DWEMMC_RINTSTS) & > > (DWEMMC_INT_DTO)))) > > > { > > > > > + Rintsts = MmioRead32 (DWEMMC_RINTSTS); } ErrMask = > > > > > + DWEMMC_INT_EBE | DWEMMC_INT_HLE | DWEMMC_INT_RTO | > > > > > + DWEMMC_INT_RCRC | DWEMMC_INT_RE | > > > DWEMMC_INT_DCRC | > > > > > + DWEMMC_INT_DRT | DWEMMC_INT_SBE; > > > > > + > > > > > + if (Rintsts & ErrMask) { > > > > > + Status = EFI_DEVICE_ERROR; > > > > > + goto out; > > > > > + } > > > > > out: > > > > > // Restore Tpl > > > > > gBS->RestoreTPL (Tpl); > > > > > @@ -589,8 +599,9 @@ DwEmmcWriteBlockData ( > > > > > ) > > > > > { > > > > > EFI_STATUS Status; > > > > > - UINT32 DescPages, CountPerPage, Count; > > > > > + UINT32 DescPages, CountPerPage, Count, ErrMask; > > > > > EFI_TPL Tpl; > > > > > + UINTN Rintsts = 0; > > > > > > > > > > Tpl = gBS->RaiseTPL (TPL_NOTIFY); > > > > > > > > > > @@ -613,6 +624,18 @@ DwEmmcWriteBlockData ( > > > > > DEBUG ((DEBUG_ERROR, "Failed to write data, > > > mDwEmmcCommand:%x, mDwEmmcArgument:%x, Status:%r\n", > > mDwEmmcCommand, > > > mDwEmmcArgument, Status)); > > > > > goto out; > > > > > } > > > > > + > > > > > + while(!((MmioRead32(DWEMMC_RINTSTS) & > > (DWEMMC_INT_DTO)))) > > > { > > > > > + Rintsts = MmioRead32 (DWEMMC_RINTSTS); } ErrMask = > > > > > + DWEMMC_INT_EBE | DWEMMC_INT_HLE | DWEMMC_INT_RTO | > > > > > + DWEMMC_INT_RCRC | DWEMMC_INT_RE | > > > DWEMMC_INT_DCRC | > > > > > + DWEMMC_INT_DRT | DWEMMC_INT_SBE; > > > > > + > > > > > + if (Rintsts & ErrMask) { > > > > > + Status = EFI_DEVICE_ERROR; > > > > > + goto out; > > > > > + } > > > > > out: > > > > > // Restore Tpl > > > > > gBS->RestoreTPL (Tpl); > > > > > -- > > > > > 2.19.0 > > > > >