• Linus Walleij's avatar
    mmc: mmci: Support any block sizes for ux500v2 and qcom variant · 2253ed4b
    Linus Walleij authored
    For the ux500v2 variant of the PL18x block, any block sizes
    are supported. This is necessary to support some SDIO
    transfers. This also affects the QCOM MMCI variant and the
    ST micro variant.
    
    For Ux500 an additional quirk only allowing DMA on blocks
    that are a power of two is needed. This might be a bug in
    the DMA engine (DMA40) or the MMCI or in the interconnect,
    but the most likely is the MMCI, as transfers of these
    sizes work fine for other devices using the same DMA
    engine. DMA works fine also with SDIO as long as the
    blocksize is a power of 2.
    
    This patch has proven necessary for enabling SDIO for WLAN on
    PostmarketOS-based Ux500 platforms.
    
    What we managed to test in practice is Broadcom WiFi over
    SDIO on the Ux500 based Samsung GT-I8190 and GT-S7710.
    This WiFi chip, BCM4334 works fine after the patch.
    
    Before this patch:
    
    brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac4334-sdio
    	  for chip BCM4334/3
    mmci-pl18x 80118000.sdi1_per2: unsupported block size (60 bytes)
    brcmfmac: brcmf_sdiod_ramrw: membytes transfer failed
    brcmfmac: brcmf_sdio_download_code_file: error -22 on writing
    	  434236 membytes at 0x00000000
    brcmfmac: brcmf_sdio_download_firmware: dongle image file download
    	  failed
    
    After this patch:
    
    brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4334/3 wl0:
    	  Nov 21 2012 00:21:28 version 6.10.58.813 (B2) FWID 01-0
    
    Bringing up networks, discovering networks with "iw dev wlan0 scan"
    and connecting works fine from this point.
    
    This patch is inspired by Ulf Hansson's patch
    http://www.spinics.net/lists/linux-mmc/msg12160.html
    
    As the DMA engines on these platforms may now get block sizes
    they were not used to before, make sure to also respect if
    the DMA engine says "no" to a transfer.
    
    Make a drive-by fix for datactrl_blocksz, misspelled.
    
    Cc: Ludovic Barre <ludovic.barre@st.com>
    Cc: Brian Masney <masneyb@onstation.org>
    Cc: Stephan Gerhold <stephan@gerhold.net>
    Cc: Niklas Cassel <niklas.cassel@linaro.org>
    Cc: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Tested-by: default avatarStephan Gerhold <stephan@gerhold.net>
    Link: https://lore.kernel.org/r/20191217143952.2885-1-linus.walleij@linaro.org
    2253ed4b
mmci.h 15.8 KB