Overview
This project is closed and read-only.
问题:
低端芯片搭配博通的WiFi,比如RK312X/RK3036/RK3188 + broadcom,驱动异常报错:
CMD53 TIMEOUT并有如下DMA错误:
dma-pl330 20078000.pdma: fill_queue:2452 Bad Desc(5838)
dma-pl330 20078000.pdma: fill_queue:2452 Bad Desc(5839)
分析:
broadcom WiFi有使用dma sg模式(可以让多个不连续的内存块通过一次cmd53发出),但是
必须有个要求:每个块的数据长度必须是32字节对齐,低端芯片目前配置的64,所以有异常;
两种改法:
改sdio驱动:
+++ b/drivers/mmc/host/rk_sdmmc.c @@ -629,7 +629,9 @@ static int dw_mci_edmac_start_dma(struct dw_mci *host, unsigned int sg_len) else burst_limit = 16; + if (host->mmc->restrict_caps & RESTRICT_CARD_TYPE_SDIO) + burst_limit = 8; + if (mburst > burst_limit) { mburst = burst_limit; idx = (ilog2(mburst) > 0) ? (ilog2(mburst) - 1) : 0;
改broadcom驱动:
可以在dhd_config.c裡面修改為如下紅色部份即可。 int dhd_conf_preinit(dhd_pub_t *dhd) { … conf->txglom_mode = SDPCM_TXGLOM_CPY;