public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>
To: Leif Lindholm <leif.lindholm@linaro.org>
Cc: "jun.nie@linaro.org" <jun.nie@linaro.org>,
	"haojian.zhuang@linaro.org" <haojian.zhuang@linaro.org>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [PATCH v3 2/2] SD : Updated CMD 6 implememtation.
Date: Thu, 7 Sep 2017 15:19:16 +0000	[thread overview]
Message-ID: <DB5PR04MB09988DBA7A223E74C71EA20F8E940@DB5PR04MB0998.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <20170907143528.vk5irpt4nyatvl6r@bivouac.eciton.net>

Hi Leif,

I agree to contribute under TianoCore Contribution Agreement 1.1

Thanks,
Meenakshi

> -----Original Message-----
> From: Leif Lindholm [mailto:leif.lindholm@linaro.org]
> Sent: Thursday, September 07, 2017 8:05 PM
> To: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>
> Cc: jun.nie@linaro.org; haojian.zhuang@linaro.org; edk2-devel@lists.01.org
> Subject: Re: [PATCH v3 2/2] SD : Updated CMD 6 implememtation.
> 
> On Thu, Sep 07, 2017 at 07:47:53PM +0530, Meenakshi Aggarwal wrote:
> > For setting high speed in SD card,
> > First CMD 6 (Switch) is send to check if card supports High Speed and
> > Second command is send to switch card to high speed mode.
> >
> > In current inplementation, CMD 6 was sent only once to switch the card
> > into HS mode without checking if card supports HS or not, which is not
> > as per specification and also we are not setting the HS i.e. 50000000
> > but directly asking the card to switch to 26000000 which is incorrect
> > as SD card supports either 25000000 or 50000000.
> >
> > Contributed-under: TianoCore Contribution Agreement 1.0
> 
> Ok, I would say this one is good to go, but can you please confirm if you are
> happy to contribute under TianoCore Contribution Agreement 1.1, which is
> the version currently described in Contributions.txt?
> 
> If so, I can fold in this change and push.
> 
> Oh, you also appear to have left out edk2-devel@lists.01.org in this
> submission (added).
> 
> Best Regards,
> 
> Leif
> 
> > Signed-off-by: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>
> > ---
> >  EmbeddedPkg/Universal/MmcDxe/Mmc.h               |  8 ++++
> >  EmbeddedPkg/Universal/MmcDxe/MmcIdentification.c | 53
> > +++++++++++++++++++++---
> >  2 files changed, 56 insertions(+), 5 deletions(-)  mode change 100644
> > => 100755 EmbeddedPkg/Universal/MmcDxe/MmcIdentification.c
> >
> > diff --git a/EmbeddedPkg/Universal/MmcDxe/Mmc.h
> > b/EmbeddedPkg/Universal/MmcDxe/Mmc.h
> > index f3e56ff..a77ba41 100644
> > --- a/EmbeddedPkg/Universal/MmcDxe/Mmc.h
> > +++ b/EmbeddedPkg/Universal/MmcDxe/Mmc.h
> > @@ -64,6 +64,14 @@
> >  #define EMMC_CMD6_ARG_VALUE(x)              (((x) & 0xFF) << 8)
> >  #define EMMC_CMD6_ARG_CMD_SET(x)            (((x) & 0x7) << 0)
> >
> > +#define SWITCH_CMD_DATA_LENGTH              64
> > +#define SD_HIGH_SPEED_SUPPORTED             0x20000
> > +#define SD_DEFAULT_SPEED                    25000000
> > +#define SD_HIGH_SPEED                       50000000
> > +#define SWITCH_CMD_SUCCESS_MASK             0x0f000000
> > +
> > +#define BUSWIDTH_4                          4
> > +
> >  typedef enum {
> >    UNKNOWN_CARD,
> >    MMC_CARD,              //MMC card
> > diff --git a/EmbeddedPkg/Universal/MmcDxe/MmcIdentification.c
> > b/EmbeddedPkg/Universal/MmcDxe/MmcIdentification.c
> > old mode 100644
> > new mode 100755
> > index 27e4444..f661a0c
> > --- a/EmbeddedPkg/Universal/MmcDxe/MmcIdentification.c
> > +++ b/EmbeddedPkg/Universal/MmcDxe/MmcIdentification.c
> > @@ -318,6 +318,23 @@ InitializeEmmcDevice (  }
> >
> >  STATIC
> > +UINT32
> > +CreateSwitchCmdArgument (
> > +  IN  UINT32 Mode,
> > +  IN  UINT8  Group,
> > +  IN  UINT8  Value
> > +  )
> > +{
> > +  UINT32 Argument;
> > +
> > +  Argument = Mode << 31 | 0x00FFFFFF;  Argument &= ~(0xF << (Group *
> > + 4));  Argument |= Value << (Group * 4);
> > +
> > +  return Argument;
> > +}
> > +
> > +STATIC
> >  EFI_STATUS
> >  InitializeSdMmcDevice (
> >    IN  MMC_HOST_INSTANCE   *MmcHostInstance
> > @@ -326,6 +343,7 @@ InitializeSdMmcDevice (
> >    UINT32        CmdArg;
> >    UINT32        Response[4];
> >    UINT32        Buffer[128];
> > +  UINT32        Speed;
> >    UINTN         BlockSize;
> >    UINTN         CardSize;
> >    UINTN         NumBlocks;
> > @@ -334,6 +352,7 @@ InitializeSdMmcDevice (
> >    EFI_STATUS    Status;
> >    EFI_MMC_HOST_PROTOCOL     *MmcHost;
> >
> > +  Speed = SD_DEFAULT_SPEED;
> >    MmcHost = MmcHostInstance->MmcHost;
> >
> >    // Send a command to get Card specific data @@ -439,20 +458,44 @@
> > InitializeSdMmcDevice (
> >      }
> >    }
> >    if (CccSwitch) {
> > +    /* SD Switch, Mode:0, Group:0, Value:0 */
> > +    CmdArg = CreateSwitchCmdArgument(0, 0, 0);
> > +    Status = MmcHost->SendCommand (MmcHost, MMC_CMD6, CmdArg);
> > +    if (EFI_ERROR (Status)) {
> > +      DEBUG ((DEBUG_ERROR, "%a (MMC_CMD6): Error and Status = %r\n",
> __FUNCTION__, Status));
> > +       return Status;
> > +    } else {
> > +      Status = MmcHost->ReadBlockData (MmcHost, 0,
> SWITCH_CMD_DATA_LENGTH, Buffer);
> > +      if (EFI_ERROR (Status)) {
> > +        DEBUG ((DEBUG_ERROR, "%a (MMC_CMD6): ReadBlockData Error
> and Status = %r\n", __FUNCTION__, Status));
> > +        return Status;
> > +      }
> > +    }
> > +
> > +    if (!(Buffer[3] & SD_HIGH_SPEED_SUPPORTED)) {
> > +      DEBUG ((DEBUG_ERROR, "%a : High Speed not supported by Card
> %r\n", __FUNCTION__, Status));
> > +      return Status;
> > +    }
> > +
> > +    Speed = SD_HIGH_SPEED;
> > +
> >      /* SD Switch, Mode:1, Group:0, Value:1 */
> > -    CmdArg = 1 << 31 | 0x00FFFFFF;
> > -    CmdArg &= ~(0xF << (0 * 4));
> > -    CmdArg |= 1 << (0 * 4);
> > +    CmdArg = CreateSwitchCmdArgument(1, 0, 1);
> >      Status = MmcHost->SendCommand (MmcHost, MMC_CMD6, CmdArg);
> >      if (EFI_ERROR (Status)) {
> >        DEBUG ((DEBUG_ERROR, "%a (MMC_CMD6): Error and Status = %r\n",
> __FUNCTION__, Status));
> >         return Status;
> >      } else {
> > -      Status = MmcHost->ReadBlockData (MmcHost, 0, 64, Buffer);
> > +      Status = MmcHost->ReadBlockData (MmcHost, 0,
> > + SWITCH_CMD_DATA_LENGTH, Buffer);
> >        if (EFI_ERROR (Status)) {
> >          DEBUG ((DEBUG_ERROR, "%a (MMC_CMD6): ReadBlockData Error and
> Status = %r\n", __FUNCTION__, Status));
> >          return Status;
> >        }
> > +
> > +      if ((Buffer[4] & SWITCH_CMD_SUCCESS_MASK) != 0x01000000) {
> > +        DEBUG((DEBUG_ERROR, "Problem switching SD card into high-speed
> mode\n"));
> > +        return Status;
> > +      }
> >      }
> >    }
> >    if (Scr.SD_BUS_WIDTHS & SD_BUS_WIDTH_4BIT) { @@ -470,7 +513,7 @@
> > InitializeSdMmcDevice (
> >      }
> >    }
> >    if (MMC_HOST_HAS_SETIOS(MmcHost)) {
> > -    Status = MmcHost->SetIos (MmcHost, 26 * 1000 * 1000, 4,
> EMMCBACKWARD);
> > +    Status = MmcHost->SetIos (MmcHost, Speed, BUSWIDTH_4,
> > + EMMCBACKWARD);
> >      if (EFI_ERROR (Status)) {
> >        DEBUG ((DEBUG_ERROR, "%a (SetIos): Error and Status = %r\n",
> __FUNCTION__, Status));
> >        return Status;
> > --
> > 1.9.1
> >


  reply	other threads:[~2017-09-07 15:16 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1504793873-13078-1-git-send-email-meenakshi.aggarwal@nxp.com>
     [not found] ` <1504793873-13078-2-git-send-email-meenakshi.aggarwal@nxp.com>
2017-09-07 14:35   ` [PATCH v3 2/2] SD : Updated CMD 6 implememtation Leif Lindholm
2017-09-07 15:19     ` Meenakshi Aggarwal [this message]
2017-09-07 14:36 ` [PATCH v3 1/2] MMC : Added missing __FUNCTION__ macro Leif Lindholm
2017-09-07 15:19   ` Meenakshi Aggarwal
2017-09-07 16:39     ` Leif Lindholm

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=DB5PR04MB09988DBA7A223E74C71EA20F8E940@DB5PR04MB0998.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