NXP imx6ull nonalignment buffer question

Bough Chen haibo.chen at nxp.com
Thu Jan 12 19:30:21 PST 2023


> -----Original Message-----
> From: Michael Nazzareno Trimarchi <michael at amarulasolutions.com>
> Sent: 2023年1月9日 21:02
> To: Bough Chen <haibo.chen at nxp.com>; Shawn Guo <shawnguo at kernel.org>;
> Fabio Estevam <festevam at gmail.com>; LKML <linux-kernel at vger.kernel.org>
> Cc: linux-arm-kernel <linux-arm-kernel at lists.infradead.org>;
> linux-mmc at vger.kernel.org; Ulf Hansson <ulf.hansson at linaro.org>
> Subject: NXP imx6ull nonalignment buffer question
> 
> Hi Haibo
> 
> Working on imx6ulz design and found that if I send a sdio packet using the
> sdio_writesb the adma driver tries to handle it with two dma descriptors. The
> first one filled with the bytes up to 3 to cover the misalign and then another
> buffer descriptor
> 
>   offset = (SDHCI_ADMA2_ALIGN - (addr & SDHCI_ADMA2_MASK)) &
>                          SDHCI_ADMA2_MASK;
>                 if (offset) {
>                         if (data->flags & MMC_DATA_WRITE) {
>                                 buffer = sdhci_kmap_atomic(sg);
>                                 memcpy(align, buffer, offset);
>                                 sdhci_kunmap_atomic(buffer);
>                         }
> 
>                         /* tran, valid */
>                         __sdhci_adma_write_desc(host, &desc,
> align_addr,
>                                                 offset,
> ADMA2_TRAN_VALID);
> 
>                         BUG_ON(offset > 65536);
> 
>                         align += SDHCI_ADMA2_ALIGN;
>                         align_addr += SDHCI_ADMA2_ALIGN;
> 
>                         addr += offset;
>                         len -= offset;
>                 }
> 
> In 48.7.4 Data Length Setting
> For either ADMA (ADMA1 or ADMA2) transfer, the data in the data buffer must
> be word aligned, so the data length set in the descriptor must be a multiple of 4.
> I have noticed that this code does not work as expected.

Hi Michael,

My understanding is: for the sentence " the data in the data buffer must be word aligned", this means the start address of the data must be word aligned, but not limit the data length.

Best Regards
Haibo Chen
> 
> Did you have any feedback?
> 
> Michael


More information about the linux-arm-kernel mailing list