drivers/wireless/ieee80211/mmc_sdio.c: In sdio_io_rw_extended(), the behavior of the DMA setup differs, depending on the hardware capability SDIO_CAPS_DMABEFOREWRITE. If this capability is set, then the DMA setup much be done before the transfer setup. Dave Marples modified this file for the i.MXRT USDHC which does have the SDIO_CAPS_DMABEFOREWRITE (commit 970295d0fe
). Xiao Xiang reports that this change breaks the Wifi on the Photon which does not report the SDIO_CAPS_DMABEFOREWRITE and suggests reverting the change. In reality both changes are correct but must be conditioned on the DMA capability of the underlying SDIO device.
This commit is contained in:
parent
894a108743
commit
2a22a64f36
@ -227,11 +227,25 @@ int sdio_io_rw_extended(FAR struct sdio_dev_s *dev, bool write,
|
||||
if (write)
|
||||
{
|
||||
wlinfo("prep write %d %d\n", blocklen, nblocks);
|
||||
SDIO_DMASENDSETUP(dev, buf, blocklen * nblocks);
|
||||
SDIO_SENDCMD(dev, SD_ACMD53, (uint32_t)arg.value);
|
||||
|
||||
wkupevent = SDIO_EVENTWAIT(dev, SDIO_CMD53_TIMEOUT_MS);
|
||||
ret = SDIO_RECVR5(dev, SD_ACMD53, (uint32_t *)&resp);
|
||||
/* Get the capabilities of the SDIO hardware */
|
||||
|
||||
if ((SDIO_CAPABILITIES(dev) & SDIO_CAPS_DMABEFOREWRITE) != 0)
|
||||
{
|
||||
SDIO_DMASENDSETUP(dev, buf, blocklen * nblocks);
|
||||
SDIO_SENDCMD(dev, SD_ACMD53, (uint32_t)arg.value);
|
||||
|
||||
wkupevent = SDIO_EVENTWAIT(dev, SDIO_CMD53_TIMEOUT_MS);
|
||||
ret = SDIO_RECVR5(dev, SD_ACMD53, (uint32_t *)&resp);
|
||||
}
|
||||
else
|
||||
{
|
||||
sdio_sendcmdpoll(dev, SD_ACMD53, (uint32_t)arg.value);
|
||||
ret = SDIO_RECVR5(dev, SD_ACMD53, (uint32_t *)&resp);
|
||||
|
||||
SDIO_DMASENDSETUP(dev, buf, blocklen * nblocks);
|
||||
wkupevent = SDIO_EVENTWAIT(dev, SDIO_CMD53_TIMEOUT_MS);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user