From: "Gaurav Jain" <gaurav.jain@nxp.com>
To: "Loh, Tien Hock" <tien.hock.loh@intel.com>,
Ard Biesheuvel <ard.biesheuvel@arm.com>,
Leif Lindholm <leif@nuviainc.com>
Cc: "devel@edk2.groups.io" <devel@edk2.groups.io>,
Pankaj Bansal <pankaj.bansal@nxp.com>,
Haojian Zhuang <haojian.zhuang@linaro.org>
Subject: Re: [EXT] Re: [PATCH 1/1] EmbeddedPkg/MmcDxe: Added MaxBlock Transfer Limit 65535 in R/W.
Date: Tue, 21 Apr 2020 06:39:39 +0000 [thread overview]
Message-ID: <AM5PR04MB30745FD00559CCC6469714F8E7D50@AM5PR04MB3074.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <MN2PR11MB3869CEF0CB73A880CF2F2DC9BDC30@MN2PR11MB3869.namprd11.prod.outlook.com>
Hi Tien Hock
Can you help to review the patch?
Regards
Gaurav Jain
> -----Original Message-----
> From: Loh, Tien Hock <tien.hock.loh@intel.com>
> Sent: Tuesday, April 7, 2020 1:23 PM
> To: Gaurav Jain <gaurav.jain@nxp.com>; Ard Biesheuvel
> <ard.biesheuvel@arm.com>; Leif Lindholm <leif@nuviainc.com>
> Cc: devel@edk2.groups.io; Pankaj Bansal <pankaj.bansal@nxp.com>;
> Haojian Zhuang <haojian.zhuang@linaro.org>
> Subject: RE: [EXT] Re: [PATCH 1/1] EmbeddedPkg/MmcDxe: Added MaxBlock
> Transfer Limit 65535 in R/W.
>
> Caution: EXT Email
>
> Hi Leif, Gaurav,
>
> The changes look good to me, but I haven't tested it on Intel's SoCFPGA
> platform.
> I will need some time to test it as I'm working on some other tasks, maybe in
> a week or so.
>
> Thanks
>
> > -----Original Message-----
> > From: Gaurav Jain <gaurav.jain@nxp.com>
> > Sent: Tuesday, April 7, 2020 3:02 PM
> > To: Ard Biesheuvel <ard.biesheuvel@arm.com>; Leif Lindholm
> > <leif@nuviainc.com>
> > Cc: devel@edk2.groups.io; Pankaj Bansal <pankaj.bansal@nxp.com>;
> > Haojian Zhuang <haojian.zhuang@linaro.org>; Loh, Tien Hock
> > <tien.hock.loh@intel.com>
> > Subject: RE: [EXT] Re: [PATCH 1/1] EmbeddedPkg/MmcDxe: Added
> MaxBlock
> > Transfer Limit 65535 in R/W.
> >
> >
> >
> > > -----Original Message-----
> > > From: Ard Biesheuvel <ard.biesheuvel@arm.com>
> > > Sent: Monday, April 6, 2020 7:42 PM
> > > To: Leif Lindholm <leif@nuviainc.com>; Gaurav Jain
> > > <gaurav.jain@nxp.com>
> > > Cc: devel@edk2.groups.io; Pankaj Bansal <pankaj.bansal@nxp.com>;
> > > Haojian Zhuang <haojian.zhuang@linaro.org>; Loh, Tien Hock
> > > <tien.hock.loh@intel.com>
> > > Subject: [EXT] Re: [PATCH 1/1] EmbeddedPkg/MmcDxe: Added MaxBlock
> > > Transfer Limit 65535 in R/W.
> > >
> > > Caution: EXT Email
> > >
> > > On 4/6/20 4:08 PM, Leif Lindholm wrote:
> > > > Hi Gaurav,
> > > >
> > > > Haojian, Tien Hock - can you help review/test this change?
> > > >
> > > > Best Regards,
> > > >
> > > > Leif
> > > >
> > > > On Fri, Apr 03, 2020 at 14:54:07 +0530, Gaurav Jain wrote:
> > > >> Moved BlockCount calculation below BufferSize Validation checks.
> > > >> First Ensure Buffersize is Not Zero and multiple of Media BlockSize.
> > > >> then calculate BlockCount and perform Block checks.
> > > >>
> > > >> Corrected BlockCount calculation, as BufferSize is multiple of
> > > >> BlockSize, So adding (BlockSize-1) bytes to BufferSize and then
> > > >> divide by BlockSize will have no impact on BlockCount.
> > > >>
> > > >> Reading Large Images from MMC causes errors.
> > > >> As per SD Host Controller Spec version 4.20, Restriction of
> > > >> 16-bit Block Count transfer is 65535.
> > > >> Max block transfer limit in single cmd is 65535 blocks.
> > > >> Added Max Block check that can be processed is 0xFFFF.
> > > >> then Update BlockCount on the basis of MaxBlock.
> > > >>
> > > >> Signed-off-by: Gaurav Jain <gaurav.jain@nxp.com>
> > >
> > >
> > > Hello Gaurav,
> > >
> > > Could you please elaborate on the underlying need for this change?
> > > If you are considering using this driver for future NXP platforms, I
> > > should point out that this legacy driver is only kept around for
> > > existing users, and new users should use the driver stack in
> > > MdeModulePkg, which is based on the UEFI spec.
> > >
> > > --
> > > Ard.
> >
> > Hello Ard
> >
> > This change is for existing Platforms as well, that are using
> > EmbeddedPkg driver.
> > I can see Max Block Transfer Limit in MdeModulePkg also.
> > This Limit is not defined in EmbeddedPkg, which is causing errors on
> > NXP existing platform While reading Large images from MMC.
> > Block transfer limit is defined in SD spec.
> >
> > Regards
> > Gaurav Jain
> > >
> > >
> > >
> > > >> ---
> > > >> EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c | 38
> > > ++++++++++++++++++++-----------
> > > >> 1 file changed, 25 insertions(+), 13 deletions(-)
> > > >>
> > > >> diff --git a/EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c
> > > >> b/EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c
> > > >> index 17c20c0159ba..b508c466d9c5 100644
> > > >> --- a/EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c
> > > >> +++ b/EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c
> > > >> @@ -242,6 +242,8 @@ MmcIoBlocks (
> > > >> UINTN BytesRemainingToBeTransfered;
> > > >> UINTN BlockCount;
> > > >> UINTN ConsumeSize;
> > > >> + UINT32 MaxBlock;
> > > >> + UINTN RemainingBlock;
> > > >>
> > > >> BlockCount = 1;
> > > >> MmcHostInstance = MMC_HOST_INSTANCE_FROM_BLOCK_IO_THIS
> > > (This); @@
> > > >> -262,19 +264,6 @@ MmcIoBlocks (
> > > >> return EFI_NO_MEDIA;
> > > >> }
> > > >>
> > > >> - if (MMC_HOST_HAS_ISMULTIBLOCK(MmcHost) && MmcHost-
> > > >IsMultiBlock(MmcHost)) {
> > > >> - BlockCount = (BufferSize + This->Media->BlockSize - 1) / This-
> >Media-
> > > >BlockSize;
> > > >> - }
> > > >> -
> > > >> - // All blocks must be within the device
> > > >> - if ((Lba + (BufferSize / This->Media->BlockSize)) >
> > > >> (This->Media-
> > > >LastBlock + 1)) {
> > > >> - return EFI_INVALID_PARAMETER;
> > > >> - }
> > > >> -
> > > >> - if ((Transfer == MMC_IOBLOCKS_WRITE) && (This->Media-
> >ReadOnly
> > > == TRUE)) {
> > > >> - return EFI_WRITE_PROTECTED;
> > > >> - }
> > > >> -
> > > >> // Reading 0 Byte is valid
> > > >> if (BufferSize == 0) {
> > > >> return EFI_SUCCESS;
> > > >> @@ -285,14 +274,36 @@ MmcIoBlocks (
> > > >> return EFI_BAD_BUFFER_SIZE;
> > > >> }
> > > >>
> > > >> + if (MMC_HOST_HAS_ISMULTIBLOCK(MmcHost) && MmcHost-
> > > >IsMultiBlock(MmcHost)) {
> > > >> + BlockCount = BufferSize / This->Media->BlockSize; }
> > > >> +
> > > >> + // All blocks must be within the device if ((Lba +
> > > >> + (BufferSize /
> > > >> + This->Media->BlockSize)) > (This->Media->LastBlock + 1)) {
> > > >> + return EFI_INVALID_PARAMETER; }
> > > >> +
> > > >> + if ((Transfer == MMC_IOBLOCKS_WRITE) && (This->Media-
> >ReadOnly
> > > == TRUE)) {
> > > >> + return EFI_WRITE_PROTECTED;
> > > >> + }
> > > >> +
> > > >> // Check the alignment
> > > >> if ((This->Media->IoAlign > 2) && (((UINTN)Buffer &
> > > >> (This->Media-
> > > >IoAlign - 1)) != 0)) {
> > > >> return EFI_INVALID_PARAMETER;
> > > >> }
> > > >>
> > > >> + // Max block number in single cmd is 65535 blocks.
> > > >> + MaxBlock = 0xFFFF;
> > > >> + RemainingBlock = BlockCount;
> > > >> BytesRemainingToBeTransfered = BufferSize;
> > > >> while (BytesRemainingToBeTransfered > 0) {
> > > >>
> > > >> + if (RemainingBlock <= MaxBlock) {
> > > >> + BlockCount = RemainingBlock;
> > > >> + } else {
> > > >> + BlockCount = MaxBlock;
> > > >> + }
> > > >> +
> > > >> // Check if the Card is in Ready status
> > > >> CmdArg = MmcHostInstance->CardInfo.RCA << 16;
> > > >> Response[0] = 0;
> > > >> @@ -338,6 +349,7 @@ MmcIoBlocks (
> > > >> DEBUG ((EFI_D_ERROR, "%a(): Failed to transfer block and
> > > Status:%r\n", __func__, Status));
> > > >> }
> > > >>
> > > >> + RemainingBlock -= BlockCount;
> > > >> BytesRemainingToBeTransfered -= ConsumeSize;
> > > >> if (BytesRemainingToBeTransfered > 0) {
> > > >> Lba += BlockCount;
> > > >> --
> > > >> 2.7.4
> > > >>
next prev parent reply other threads:[~2020-04-21 6:39 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-03 9:24 [PATCH 1/1] EmbeddedPkg/MmcDxe: Added MaxBlock Transfer Limit 65535 in R/W Gaurav Jain
2020-04-06 14:08 ` Leif Lindholm
2020-04-06 14:12 ` Ard Biesheuvel
2020-04-07 7:01 ` [EXT] " Gaurav Jain
2020-04-07 7:52 ` Loh, Tien Hock
2020-04-21 6:39 ` Gaurav Jain [this message]
2020-04-27 2:15 ` Loh, Tien Hock
2020-04-27 6:19 ` Pankaj Bansal
2020-04-29 5:17 ` Loh, Tien Hock
2020-04-29 11:16 ` Leif Lindholm
2020-04-30 1:16 ` Loh, Tien Hock
2020-05-27 11:21 ` [EXT] " Gaurav Jain
2020-06-12 8:12 ` Ard Biesheuvel
2020-11-26 7:16 ` [edk2-devel] " Gaurav Jain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=AM5PR04MB30745FD00559CCC6469714F8E7D50@AM5PR04MB3074.eurprd04.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox