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.

Did you have any feedback?

Michael


2023-01-13 03:33:07

by Bough Chen

[permalink] [raw]
Subject: RE: NXP imx6ull nonalignment buffer question

> -----Original Message-----
> From: Michael Nazzareno Trimarchi <[email protected]>
> Sent: 2023年1月9日 21:02
> To: Bough Chen <[email protected]>; Shawn Guo <[email protected]>;
> Fabio Estevam <[email protected]>; LKML <[email protected]>
> Cc: linux-arm-kernel <[email protected]>;
> [email protected]; Ulf Hansson <[email protected]>
> 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

Subject: Re: NXP imx6ull nonalignment buffer question

Hi

On Fri, Jan 13, 2023 at 4:30 AM Bough Chen <[email protected]> wrote:
>
> > -----Original Message-----
> > From: Michael Nazzareno Trimarchi <[email protected]>
> > Sent: 2023年1月9日 21:02
> > To: Bough Chen <[email protected]>; Shawn Guo <[email protected]>;
> > Fabio Estevam <[email protected]>; LKML <[email protected]>
> > Cc: linux-arm-kernel <[email protected]>;
> > [email protected]; Ulf Hansson <[email protected]>
> > 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.
>

Ok. My specific problem is that this seems not working on imx6ulz, I
found the problem working on a wifi chipset, if the request gets split
for no-alignment
of the data in two dma descriptors, the chipset does not reply to me.
Anyway, I will retest it with the upstream kernel again. I will check
better and I will follow up if any more question

Thank you

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

Subject: Re: NXP imx6ull nonalignment buffer question

Hi Bough

On Fri, Jan 13, 2023 at 8:19 AM Michael Nazzareno Trimarchi
<[email protected]> wrote:
>
> Hi
>
> On Fri, Jan 13, 2023 at 4:30 AM Bough Chen <[email protected]> wrote:
> >
> > > -----Original Message-----
> > > From: Michael Nazzareno Trimarchi <[email protected]>
> > > Sent: 2023年1月9日 21:02
> > > To: Bough Chen <[email protected]>; Shawn Guo <[email protected]>;
> > > Fabio Estevam <[email protected]>; LKML <[email protected]>
> > > Cc: linux-arm-kernel <[email protected]>;
> > > [email protected]; Ulf Hansson <[email protected]>
> > > 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.
> >
>
> Ok. My specific problem is that this seems not working on imx6ulz, I
> found the problem working on a wifi chipset, if the request gets split
> for no-alignment
> of the data in two dma descriptors, the chipset does not reply to me.
> Anyway, I will retest it with the upstream kernel again. I will check
> better and I will follow up if any more question
>

I have done some tests and I need this quirk
SDHCI_QUIRK_32BIT_ADMA_SIZE on imx6ulz cpu and I think that it applies
even on imx6ull.
Wifi can work only if the data on the sdio are aligned or we use
interrupt mode for no-alignment data. I did not find an errata and I
can not add as a quirk without a confirmation

Michael

2023-02-28 07:25:16

by Bough Chen

[permalink] [raw]
Subject: RE: NXP imx6ull nonalignment buffer question

> -----Original Message-----
> From: Michael Nazzareno Trimarchi <[email protected]>
> Sent: 2023年2月27日 19:22
> To: Bough Chen <[email protected]>
> Cc: Shawn Guo <[email protected]>; Fabio Estevam
> <[email protected]>; LKML <[email protected]>;
> linux-arm-kernel <[email protected]>;
> [email protected]; Ulf Hansson <[email protected]>
> Subject: Re: NXP imx6ull nonalignment buffer question
>
> Hi Bough
>
> On Fri, Jan 13, 2023 at 8:19 AM Michael Nazzareno Trimarchi
> <[email protected]> wrote:
> >
> > Hi
> >
> > On Fri, Jan 13, 2023 at 4:30 AM Bough Chen <[email protected]> wrote:
> > >
> > > > -----Original Message-----
> > > > From: Michael Nazzareno Trimarchi <[email protected]>
> > > > Sent: 2023年1月9日 21:02
> > > > To: Bough Chen <[email protected]>; Shawn Guo
> > > > <[email protected]>; Fabio Estevam <[email protected]>; LKML
> > > > <[email protected]>
> > > > Cc: linux-arm-kernel <[email protected]>;
> > > > [email protected]; Ulf Hansson <[email protected]>
> > > > 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.
> > >
> >
> > Ok. My specific problem is that this seems not working on imx6ulz, I
> > found the problem working on a wifi chipset, if the request gets split
> > for no-alignment of the data in two dma descriptors, the chipset does
> > not reply to me.
> > Anyway, I will retest it with the upstream kernel again. I will check
> > better and I will follow up if any more question
> >
>
> I have done some tests and I need this quirk SDHCI_QUIRK_32BIT_ADMA_SIZE
> on imx6ulz cpu and I think that it applies even on imx6ull.
> Wifi can work only if the data on the sdio are aligned or we use interrupt mode
> for no-alignment data. I did not find an errata and I can not add as a quirk
> without a confirmation
>

Hi Michael,

If use the quirk SDHCI_QUIRK_32BIT_ADMA_SIZE, for the length no-alignment data, it will
change to use PIO mode.

Here, can you give some more details about this issue? When the dma descriptor contain the
no-alignment length of data, is there any register dump on the console? Or meet any timeout? Or there any
ADMA length mismatch happen?

Besides, did you try DMA mode instead of the ADMA mode? Can DMA mode work for your case?

Best Regards
Haibo Chen

> Michael

Subject: Re: NXP imx6ull nonalignment buffer question

Hi

On Tue, Feb 28, 2023 at 8:25 AM Bough Chen <[email protected]> wrote:
>
> > -----Original Message-----
> > From: Michael Nazzareno Trimarchi <[email protected]>
> > Sent: 2023年2月27日 19:22
> > To: Bough Chen <[email protected]>
> > Cc: Shawn Guo <[email protected]>; Fabio Estevam
> > <[email protected]>; LKML <[email protected]>;
> > linux-arm-kernel <[email protected]>;
> > [email protected]; Ulf Hansson <[email protected]>
> > Subject: Re: NXP imx6ull nonalignment buffer question
> >
> > Hi Bough
> >
> > On Fri, Jan 13, 2023 at 8:19 AM Michael Nazzareno Trimarchi
> > <[email protected]> wrote:
> > >
> > > Hi
> > >
> > > On Fri, Jan 13, 2023 at 4:30 AM Bough Chen <[email protected]> wrote:
> > > >
> > > > > -----Original Message-----
> > > > > From: Michael Nazzareno Trimarchi <[email protected]>
> > > > > Sent: 2023年1月9日 21:02
> > > > > To: Bough Chen <[email protected]>; Shawn Guo
> > > > > <[email protected]>; Fabio Estevam <[email protected]>; LKML
> > > > > <[email protected]>
> > > > > Cc: linux-arm-kernel <[email protected]>;
> > > > > [email protected]; Ulf Hansson <[email protected]>
> > > > > 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.
> > > >
> > >
> > > Ok. My specific problem is that this seems not working on imx6ulz, I
> > > found the problem working on a wifi chipset, if the request gets split
> > > for no-alignment of the data in two dma descriptors, the chipset does
> > > not reply to me.
> > > Anyway, I will retest it with the upstream kernel again. I will check
> > > better and I will follow up if any more question
> > >
> >
> > I have done some tests and I need this quirk SDHCI_QUIRK_32BIT_ADMA_SIZE
> > on imx6ulz cpu and I think that it applies even on imx6ull.
> > Wifi can work only if the data on the sdio are aligned or we use interrupt mode
> > for no-alignment data. I did not find an errata and I can not add as a quirk
> > without a confirmation
> >
>
> Hi Michael,
>
> If use the quirk SDHCI_QUIRK_32BIT_ADMA_SIZE, for the length no-alignment data, it will
> change to use PIO mode.
>
> Here, can you give some more details about this issue? When the dma descriptor contain the
> no-alignment length of data, is there any register dump on the console? Or meet any timeout? Or there any
> ADMA length mismatch happen?

I don't have a logic analyzer or oscilloscope but from the point of
view of the wifi, the data does not arrive or
the transaction is not complete. Anyway I will check back again on 6.2

diff --git a/drivers/net/wireless/ti/wl18xx/wl18xx.h
b/drivers/net/wireless/ti/wl18xx/wl18xx.h
index b642e0c437bb..97cd41a75762 100644
--- a/drivers/net/wireless/ti/wl18xx/wl18xx.h
+++ b/drivers/net/wireless/ti/wl18xx/wl18xx.h
@@ -32,14 +32,14 @@
#define WL18XX_MAX_LINKS 16

struct wl18xx_priv {
- /* buffer for sending commands to FW */
- u8 cmd_buf[WL18XX_CMD_MAX_SIZE];
-
struct wl18xx_priv_conf conf;

/* Index of last released Tx desc in FW */
u8 last_fw_rls_idx;

+ /* buffer for sending commands to FW */
+ u8 cmd_buf[WL18XX_CMD_MAX_SIZE];
+
/* number of keys requiring extra spare mem-blocks */
int extra_spare_key_count;
};

One way to try on some wifi is to move this buffer. As the code is
done this section is kmalloc and data is copied to the buffer from cmd
side.
After I retest I will send an RFC patch

Michael


>
> Besides, did you try DMA mode instead of the ADMA mode? Can DMA mode work for your case?
>
> Best Regards
> Haibo Chen
>
> > Michael



--
Michael Nazzareno Trimarchi
Co-Founder & Chief Executive Officer
M. +39 347 913 2170
[email protected]
__________________________________

Amarula Solutions BV
Joop Geesinkweg 125, 1114 AB, Amsterdam, NL
T. +31 (0)85 111 9172
[email protected]
http://www.amarulasolutions.com

2023-02-28 09:15:57

by Bough Chen

[permalink] [raw]
Subject: RE: NXP imx6ull nonalignment buffer question

> -----Original Message-----
> From: Michael Nazzareno Trimarchi <[email protected]>
> Sent: 2023年2月28日 15:43
> To: Bough Chen <[email protected]>
> Cc: Shawn Guo <[email protected]>; Fabio Estevam
> <[email protected]>; LKML <[email protected]>;
> linux-arm-kernel <[email protected]>;
> [email protected]; Ulf Hansson <[email protected]>
> Subject: Re: NXP imx6ull nonalignment buffer question
>
> Hi
>
> On Tue, Feb 28, 2023 at 8:25 AM Bough Chen <[email protected]> wrote:
> >
> > > -----Original Message-----
> > > From: Michael Nazzareno Trimarchi <[email protected]>
> > > Sent: 2023年2月27日 19:22
> > > To: Bough Chen <[email protected]>
> > > Cc: Shawn Guo <[email protected]>; Fabio Estevam
> > > <[email protected]>; LKML <[email protected]>;
> > > linux-arm-kernel <[email protected]>;
> > > [email protected]; Ulf Hansson <[email protected]>
> > > Subject: Re: NXP imx6ull nonalignment buffer question
> > >
> > > Hi Bough
> > >
> > > On Fri, Jan 13, 2023 at 8:19 AM Michael Nazzareno Trimarchi
> > > <[email protected]> wrote:
> > > >
> > > > Hi
> > > >
> > > > On Fri, Jan 13, 2023 at 4:30 AM Bough Chen <[email protected]>
> wrote:
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Michael Nazzareno Trimarchi
> > > > > > <[email protected]>
> > > > > > Sent: 2023年1月9日 21:02
> > > > > > To: Bough Chen <[email protected]>; Shawn Guo
> > > > > > <[email protected]>; Fabio Estevam <[email protected]>;
> > > > > > LKML <[email protected]>
> > > > > > Cc: linux-arm-kernel <[email protected]>;
> > > > > > [email protected]; Ulf Hansson
> > > > > > <[email protected]>
> > > > > > 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.
> > > > >
> > > >
> > > > Ok. My specific problem is that this seems not working on imx6ulz,
> > > > I found the problem working on a wifi chipset, if the request gets
> > > > split for no-alignment of the data in two dma descriptors, the
> > > > chipset does not reply to me.
> > > > Anyway, I will retest it with the upstream kernel again. I will
> > > > check better and I will follow up if any more question
> > > >
> > >
> > > I have done some tests and I need this quirk
> > > SDHCI_QUIRK_32BIT_ADMA_SIZE on imx6ulz cpu and I think that it applies
> even on imx6ull.
> > > Wifi can work only if the data on the sdio are aligned or we use
> > > interrupt mode for no-alignment data. I did not find an errata and I
> > > can not add as a quirk without a confirmation
> > >
> >
> > Hi Michael,
> >
> > If use the quirk SDHCI_QUIRK_32BIT_ADMA_SIZE, for the length
> > no-alignment data, it will change to use PIO mode.
> >
> > Here, can you give some more details about this issue? When the dma
> > descriptor contain the no-alignment length of data, is there any
> > register dump on the console? Or meet any timeout? Or there any ADMA
> length mismatch happen?
>
> I don't have a logic analyzer or oscilloscope but from the point of view of the wifi,
> the data does not arrive or the transaction is not complete. Anyway I will check
> back again on 6.2
>
> diff --git a/drivers/net/wireless/ti/wl18xx/wl18xx.h
> b/drivers/net/wireless/ti/wl18xx/wl18xx.h
> index b642e0c437bb..97cd41a75762 100644
> --- a/drivers/net/wireless/ti/wl18xx/wl18xx.h
> +++ b/drivers/net/wireless/ti/wl18xx/wl18xx.h
> @@ -32,14 +32,14 @@
> #define WL18XX_MAX_LINKS 16
>
> struct wl18xx_priv {
> - /* buffer for sending commands to FW */
> - u8 cmd_buf[WL18XX_CMD_MAX_SIZE];
> -
> struct wl18xx_priv_conf conf;
>
> /* Index of last released Tx desc in FW */
> u8 last_fw_rls_idx;
>
> + /* buffer for sending commands to FW */
> + u8 cmd_buf[WL18XX_CMD_MAX_SIZE];
> +
> /* number of keys requiring extra spare mem-blocks */
> int extra_spare_key_count;
> };
>
> One way to try on some wifi is to move this buffer. As the code is done this
> section is kmalloc and data is copied to the buffer from cmd side.
> After I retest I will send an RFC patch
>
> Michael

Hi Michael,

Can you add the following change and test again? This change only use DMA mode, disable ADMA mode.

diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
index 58f042fdd4f4..95dfbb6cb3d5 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -282,7 +282,7 @@ static const struct esdhc_soc_data usdhc_imx6sx_data = {
static const struct esdhc_soc_data usdhc_imx6ull_data = {
.flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_STD_TUNING
| ESDHC_FLAG_HAVE_CAP1 | ESDHC_FLAG_HS200
- | ESDHC_FLAG_ERR010450
+ | ESDHC_FLAG_ERR010450 | ESDHC_FLAG_ERR004536
| ESDHC_FLAG_STATE_LOST_IN_LPMODE,
};

Haibo Chen
>
>
> >
> > Besides, did you try DMA mode instead of the ADMA mode? Can DMA mode
> work for your case?
> >
> > Best Regards
> > Haibo Chen
> >
> > > Michael
>
>
>
> --
> Michael Nazzareno Trimarchi
> Co-Founder & Chief Executive Officer
> M. +39 347 913 2170
> [email protected]
> __________________________________
>
> Amarula Solutions BV
> Joop Geesinkweg 125, 1114 AB, Amsterdam, NL T. +31 (0)85 111 9172
> [email protected]
> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.ama
> rulasolutions.com%2F&data=05%7C01%7Chaibo.chen%40nxp.com%7C50cbd90
> 99dcf4b4931fe08db195f6cdd%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%
> 7C0%7C638131669856911217%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wL
> jAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7
> C%7C&sdata=YaqpFLQzTZn%2Fgo%2BNOCsTedJFq7%2F%2F2YGwQxvxJsI4Wyc%
> 3D&reserved=0