e3981: SDHC: ADMA fails when data length in the last descriptor is less or equal to 4
bytes
Errata type: Errata
Description: A possible data corruption or incorrect bus transactions on the internal AHB bus, causing
possible system corruption or a stall, can occur under the combination of the following
conditions:
1. ADMA2 or ADMA1 type descriptor
2. TRANS descriptor with END flag
3. Data length is less than or equal to 4 bytes (the length field of the corresponding descriptor
is set to 1, 2, 3, or 4) and the ADMA transfers one 32-bit word on the bus
4. Block Count Enable mode
Workaround: The software should avoid setting ADMA type last descriptor (TRANS descriptor with END
flag) to data length less than or equal to 4 bytes. In ADMA1 mode, if needed, a last NOP
descriptor can be appended to the descriptors list. In ADMA2 mode this workaround is not
feasible due to ERR003983.
e3982: SDHC: ADMA transfer error when the block size is not a multiple of four
Errata type: Errata
Description: Issue in eSDHC ADMA mode operation. The eSDHC read transfer is not completed when
block size is not a multiple of 4 in transfer mode ADMA1 or ADMA2. The eSDHC DMA
controller is stuck waiting for the IRQSTAT[TC] bit in the interrupt status register.
The following examples trigger this issue:
1. Working with an SD card while setting ADMA1 mode in the eSDHC
2. Performing partial block read
3. Writing one block of length 0x200
4. Reading two blocks of length 0x22 each. Reading from the address where the write
operation is performed. Start address is 0x512 aligned. Watermark is set as one word during
read. This read is performed using only one ADMA1 descriptor in which the total size of the
transfer is programmed as 0x44 (2 blocks of 0x22).
Workaround: When the ADMA1 or ADMA2 mode is used and the block size is not a multiple of 4, the block
size should be rounded to the next multiple of 4 bytes via software. In case of write, the
software should add the corresponding number of bytes at each block end, before the write is
initialized. In case of read, the software should remove the dummy bytes after the read is
completed.
For example, if the original block length is 22 bytes, and there are several blocks to transfer,
the software should set the block size to 24. The following data is written/stored in the external
memory:
4 Bytes valid data
4 Bytes valid data
4 Bytes valid data
4 Bytes valid data
Mask Set Errata for Mask 5N22D, Rev 19 DEC 2013
8 Freescale Semiconductor, Inc.