Commit Graph

47 Commits

Author SHA1 Message Date
Meenakshi Aggarwal ea21f1d98d SD : Updated CMD 6 implememtation.
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.1
Signed-off-by: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>
Reviewed-by: Jun Nie <jun.nie@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2017-09-07 17:06:44 +01:00
Meenakshi Aggarwal 3d43616632 MMC : Added missing __FUNCTION__ macro.
We want to print name of the function resulted in error,
but __FUNCTION__ macro was missing.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2017-09-07 17:06:39 +01:00
Meenakshi Aggarwal 1cc0f69bbe EmbeddedPkg: MmcDxe - Recieve response was missing after CMD12
We are not recieving the response from memory card after
sending CMD 12. It was not resulting in any failure but
we should recieve response after sending a command.

Signed-off-by: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>
Reviewed-by: Jun Nie <jun.nie@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2017-09-01 11:31:42 +01:00
Jun Nie 7bb5fad566 EmbeddedPkg/MmcDxe: Align the ExtCSD buffer
ExtCSD structure may be read via DMA. So align it to
page to avoid data corruption.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jun Nie <jun.nie@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2017-07-05 16:07:54 +01:00
Jun Nie 0ad564ffe7 EmbeddedPkg/MmcDxe: Correct argument of ECSD read
The argument of CMD8 should be stuff bits according to standard
JESD84-A44.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jun Nie <jun.nie@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2017-06-29 16:54:58 +01:00
Jun Nie 44f4ff6257 EmbeddedPkg/MmcDxe: Add non-DDR timing mode support
Only DDR mode is support for 8bit mode currently. Add
non-DDR case when configuring ECSD.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jun Nie <jun.nie@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2017-06-29 16:54:37 +01:00
Haojian Zhuang 339c6e905a EmbeddedPkg/MmcDxe: expand to support multiple blocks
Make use of DMA to transfer multiple blocks at one time. It could
improve the performance on MMC/SD driver.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
Tested-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2016-11-24 16:29:04 +00:00
Haojian Zhuang e06253ba80 EmbeddedPkg/MmcDxe: set I/O speed and bus width in SD stack
Add more SD commands to support 4-bit bus width & iospeed.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
Tested-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2016-11-24 16:29:03 +00:00
Haojian Zhuang 752ae80514 EmbeddedPkg/MmcDxe: invoke SetIos() protocol method to set speed and width
Add the interface to change the bus width and speed.

By default, MMC is initialized with 1-bit mode and less than 400KHz bus
clock. It causes MMC working inefficiently.

Set I/O bus width on both MMC controller and EXTCSD. Otherwise, it may
cause unmatched failure case. And support more timing mode, high speed,
HS200 & HS400 mode.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
Tested-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2016-11-24 16:29:03 +00:00
Haojian Zhuang 653bde5462 EmbeddedPkg: MmcDxe: add SPEC_VERS field in CSD structure
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
Tested-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2016-11-14 15:45:49 +00:00
Haojian Zhuang e88fcb47c1 EmbeddedPkg: MmcDxe: declare ECSD structure
Declare fields in ECSD structure. And drop the original 128 words
arrary.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
Tested-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2016-11-14 15:45:42 +00:00
Haojian Zhuang 36bec33a99 EmbeddedPkg: MmcDxe: move ECSD into CardInfo structure
Since ECSD also describes the information of card, move it into
structure CardInfo.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
Tested-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2016-11-14 15:45:23 +00:00
Haojian Zhuang 3201075377 EmbeddedPkg: MmcDxe: wait OCR busy bit free
According to eMMC spec, OCR.PowerUp bit is also busy bit. If the busy
bit is '0', CMD1 should be sent and OCR should be fetched again. And add
a timeout counter on the repeated steps.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
Tested-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2016-11-14 15:45:08 +00:00
Ard Biesheuvel 4b335e4b76 EmbeddedPkg/MmcDxe: eliminate deprecated string function calls
Get rid of calls to unsafe string functions. These are deprecated and may
be removed in the future.

Note that this also fixes an existing issue in the code, where the buffer
may be overrun by one character when en == mLogRemainChar, in which case
the NUL terminator ends up after the end of the buffer.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2016-10-28 15:54:00 +01:00
Olivier Martin eff98cf9da EmbeddedPkg: Remove dependency on TimerLib
UEFI drivers should not depend on TimerLib. They should
use BS.Stall() instead.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
Reviewed-by: Ronald Cron <Ronald.Cron@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17343 6f19259b-4bc3-4df7-8a09-765794883524
2015-05-06 11:15:44 +00:00
Ronald Cron 3402aac7d9 ARM Packages: Removed trailing spaces
Trailing spaces create issue/warning when generating/applying patches.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Reviewed-By: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15833 6f19259b-4bc3-4df7-8a09-765794883524
2014-08-19 13:29:52 +00:00
Olivier Martin 139b577374 MmcIdentification: Don't error out for SD cards
SD cards don't respond to CMD1 immediately following CMD0.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15210 6f19259b-4bc3-4df7-8a09-765794883524
2014-02-05 12:54:46 +00:00
Olivier Martin 9b485fde02 EmbeddedPkg/MmcDxe: Fix mixed EOL
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15165 6f19259b-4bc3-4df7-8a09-765794883524
2014-01-23 00:56:29 +00:00
Olivier Martin 5c5a34d485 MmcDxe: Perform diagnostics specifically on the requested controller
In RunDiagnostics, find the controller specified by ControllerHandle and run
diagnostics only on that controller, returning EFI_UNSUPPORTED if it isn't in
the driver's pool of managed devices.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15075 6f19259b-4bc3-4df7-8a09-765794883524
2014-01-09 19:15:06 +00:00
Olivier Martin b4fdedc254 MmcDxe: Adding eMMC support
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15074 6f19259b-4bc3-4df7-8a09-765794883524
2014-01-09 19:06:25 +00:00
Olivier Martin c8af31eca6 MmcDxe Diagnostics: return EFI_UNSUPPORTED for Language other than english
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14706 6f19259b-4bc3-4df7-8a09-765794883524
2013-09-23 09:43:51 +00:00
Olivier Martin 4ca3c688a4 EmbeddedPkg/MmcDxe: Moved all the 'Print*()' functions to MmcDebug.c
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14612 6f19259b-4bc3-4df7-8a09-765794883524
2013-08-30 11:51:51 +00:00
Olivier Martin 9532373b1d EmbeddedPkg/MmcDxe: Removed redundant CMD12 calls from MMC
Command 12 - Stop transmission (ends read or write).
Normally only needed for streaming transfers or after error.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14525 6f19259b-4bc3-4df7-8a09-765794883524
2013-08-06 12:10:25 +00:00
Olivier Martin 842b02d87f EmbeddedPkg/MmcDxe: Update Mmc code to conform to coding standard
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14524 6f19259b-4bc3-4df7-8a09-765794883524
2013-08-06 12:09:33 +00:00
oliviermartin 5ab765a7ad EmbeddedPkg/MmcDxe: Make the driver more compliant with the UEFI specification
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14264 6f19259b-4bc3-4df7-8a09-765794883524
2013-04-14 09:26:28 +00:00
oliviermartin 6f711615ba ARM Packages: Fixed coding style and typos
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14179 6f19259b-4bc3-4df7-8a09-765794883524
2013-03-12 00:45:29 +00:00
oliviermartin 1e57a46299 ARM Packages: Fixed line endings
This large code change only modifies the line endings to be CRLF to be
compliant with the EDK2 coding convention document.



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14088 6f19259b-4bc3-4df7-8a09-765794883524
2013-01-25 11:28:06 +00:00
oliviermartin fc78c48e20 EmbeddedPkg/MmcDxe: Ensure MMC is in Identification Mode
This change ensure the MMC card is in Identification Mode.
The card might be in Data Transfer Mode if a pre UEFI Boot Loader
had initialized the card.
A potential optimization would be to skip the Identification Mode
in this case.

Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13872 6f19259b-4bc3-4df7-8a09-765794883524
2012-10-19 09:47:49 +00:00
oliviermartin 7cb7e2a26d EmbeddedPkg/MmcDxe: The timeout while waiting for the programming to be complete was decreased twice.
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13694 6f19259b-4bc3-4df7-8a09-765794883524
2012-08-31 16:29:23 +00:00
oliviermartin 260675b073 EmbeddedPkg/MmcDxe: Fixed typo
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13585 6f19259b-4bc3-4df7-8a09-765794883524
2012-08-02 10:23:41 +00:00
oliviermartin 699e34adeb EmbeddedPkg/MmcDxe: Avoid nanosecond delay when command succeeds
Check response just after receiving it to avoid the delay.

Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13584 6f19259b-4bc3-4df7-8a09-765794883524
2012-08-02 10:14:52 +00:00
oliviermartin 492e34a590 EmbeddedPkg/MmcDxe: Fixed MmcIdentificationMode()
The condition to check if the card is ready was not correct.

Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13583 6f19259b-4bc3-4df7-8a09-765794883524
2012-08-02 10:11:29 +00:00
oliviermartin 8f964e8d1e EmbeddedPkg/MmcDxe: Fixed XCLANG build
Move the constant array from its declaration inside the function to a global declaration.

Signed-off-by: Andrew Fish <afish@apple.com>
Reviewed-by: Olivier Martin <olivier.martin@arm.com>




git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13140 6f19259b-4bc3-4df7-8a09-765794883524
2012-03-26 12:28:05 +00:00
oliviermartin 11c20f4e06 Arm Packages: Fixed coding style/Line endings to follow EDK2 coding convention
Arm Packages: Fixed mispelling

Arm Packages: Reduced warnings all over the code




git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12407 6f19259b-4bc3-4df7-8a09-765794883524
2011-09-22 22:53:54 +00:00
oliviermartin 16d88c2d20 EmbeddedPkg/MmcDxe: Add 'This' pointer attribute to protocol function
This attribute allows the EFI_MMC_HOST_PROTOCOL interface to manage
multiple instances in one driver.


EmbeddedPkg/MmcDxe: Add Revision attribute to the EFI_MMC_HOST_PROTOCOL


Note: The ARM PL180 and Omap35xx MMC host drivers has been updated.




git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12255 6f19259b-4bc3-4df7-8a09-765794883524
2011-09-01 17:08:41 +00:00
oliviermartin 40842a5e7c EmbeddedPkg/MmcDxe: Card Presence Detect Race Condition
The MMC driver defaults to assume a card is not present.  It then starts a timer in MmcDxeInitialize to check for card presence every 200ms.

However it does not immediately check to see if a card is present so if the EFI driver connection process occurs less than 200ms after the driver load, the connection process for partition 
or filesystem drivers will fail because MediaPresent still is FALSE.  To resolve this race condition, we need to immediately perform the presence check in the Start routine.


EmbeddedPkg/MmcDxe: Media ID Handling

Initialize the MMC device on Start or when presence changes instead of doing it on the Block IO calls. This way the layered drivers can be stopped and rebuilt with new Media IDs instead of 
experiencing errors on calls to Block IO.


Proposed-by: Eugene Cohen (HP)
Reviewed-by: oliviermartin




git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12237 6f19259b-4bc3-4df7-8a09-765794883524
2011-08-30 18:02:38 +00:00
oliviermartin 151acec6e1 ArmPkg: Fix ARMGCC build
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12165 6f19259b-4bc3-4df7-8a09-765794883524
2011-08-18 11:12:39 +00:00
oliviermartin e0932788c3 EmbeddedPkg/MmcDxe: Set the BlockLength at the beginning of the BlockIo transfer
Before the SetBlockLength command was called prior to a Read or Write command.



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12133 6f19259b-4bc3-4df7-8a09-765794883524
2011-08-15 16:38:27 +00:00
oliviermartin bb0f9e9ba3 EmbeddedPkg/MmcDxe: Fix the indexes in the response array
The indexes have been reversed compare to the specification which
created confusions in some MMC responses.



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12132 6f19259b-4bc3-4df7-8a09-765794883524
2011-08-15 16:20:55 +00:00
oliviermartin 36aa561136 EmbeddedPkg/MmcDxe: Implement the correct macro to get the device size of SD 2 High Density cards
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12131 6f19259b-4bc3-4df7-8a09-765794883524
2011-08-15 16:15:58 +00:00
oliviermartin d8ad4736af EmbeddedPkg/MmcDxe: Fix the CMD3 sequence
In the former version, we were checking the card was in the new state (Standby state).
But the transition to the nez state is only visible in the response of the next command.
This commit removes the check on the MMC state.



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12130 6f19259b-4bc3-4df7-8a09-765794883524
2011-08-15 16:12:13 +00:00
oliviermartin 969ece79f1 EmbeddedPkg/MmcDxe: Improved parameters checking
Ensure the passed parameters are correct.



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12129 6f19259b-4bc3-4df7-8a09-765794883524
2011-08-15 16:06:53 +00:00
oliviermartin 3de99375d2 EmbeddedPkg/MmcDxe: Create a periodic function to check if a card is present
In the former version, the check was done for every BlockIo operation.
By using a periodical function, we check less time in consequence performance
are better.



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12128 6f19259b-4bc3-4df7-8a09-765794883524
2011-08-15 16:04:14 +00:00
oliviermartin e862cd50c6 ArmPkg: Fix warnings raised by ARMGCC
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11829 6f19259b-4bc3-4df7-8a09-765794883524
2011-06-15 19:53:15 +00:00
oliviermartin e8e95df41d EmbeddedPkg/MmcDxe: Fix coding style
Make the coding style more compliant with the EDK2 coding convention.



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11727 6f19259b-4bc3-4df7-8a09-765794883524
2011-06-03 09:10:26 +00:00
oliviermartin b9d5fe03e6 EmbeddedPkg/MmcDxe: Wait for the MMC controller to be in Transfer Mode
The MMC controller might be ready for data but not be in a 'ready' state
to send or receive commands.
This fix waits for the MMC controller to be in the correct state.



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11726 6f19259b-4bc3-4df7-8a09-765794883524
2011-06-03 09:09:18 +00:00
oliviermartin ce73d60afb EmbeddedPkg: Move Universal/MmcDxe from ArmPkg to EmbeddedPkg
The MmcDxe is not ARM architecture specific.



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11725 6f19259b-4bc3-4df7-8a09-765794883524
2011-06-03 09:07:31 +00:00