2017-06-08 22:55 GMT+08:00 Andrew Fish <af...@apple.com>:
>
> On Jun 8, 2017, at 1:18 AM, Jun Nie <jun....@linaro.org> wrote:
>
> Add alignment for ECSD data for DMA access. Otherwise
> the data is corrupted on Sanechips platform.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Jun Nie <jun....@linaro.org>
> ---
> EmbeddedPkg/Universal/MmcDxe/Mmc.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/EmbeddedPkg/Universal/MmcDxe/Mmc.h
> b/EmbeddedPkg/Universal/MmcDxe/Mmc.h
> index 8a7d5a3..ca1a9d5 100644
> --- a/EmbeddedPkg/Universal/MmcDxe/Mmc.h
> +++ b/EmbeddedPkg/Universal/MmcDxe/Mmc.h
> @@ -319,7 +319,7 @@ typedef struct  {
>   OCR       OCRData;
>   CID       CIDData;
>   CSD       CSDData;
> -  ECSD      ECSDData;                         // MMC V4 extended card
> specific
> +  ECSD      ECSDData __attribute__((aligned(8)));  // MMC V4 extended card
> specific
> } CARD_INFO;
>
>
> Jun,
>
> This structure does not look portable.
> 1) CARD_TYPE is an ENUM and the size of an enum is not a standard thing in
> C. Compiler is probably picking int and it seems to work.
> 2) I don't think  __attribute__((aligned(8))) is supported by all the edk2
> compilers (VC++ for example). It is an GNU extensions to C, not standard C,
> so we normally don't use it in edk2 code.
>
> While the alignment of types is not defined by the C standard, it is defined
> in the EFI ABI to be natural alignment. So you can add padding elements to a
> structure. You can also union with a UINT64 for force 8 byte alignment.
>
> typedef struct  {
>   UINT16    RCA;
>   UINT32 CardType;   //CARD_TYPE
>   OCR       OCRData;
>   CID       CIDData;
>   CSD       CSDData;
>   UINT32    Pad;
>   ECSD      ECSDData;                         // MMC V4 extended card
> specific
> } CARD_INFO;
>
> Thanks,
>
> Andrew Fish

Thanks for showing this robust method. Will change to this way.

Jun

>
> typedef struct _MMC_HOST_INSTANCE {
> --
> 1.9.1
>
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
>
>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to