Patch "mmc: dw_mmc: use resource_size_t to store physical address" has been added to the 4.4-stable tree
This is a note to let you know that I've just added the patch titled
mmc: dw_mmc: use resource_size_t to store physical address
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mmc-dw_mmc-use-resource_size_t-to-store-physical-address.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
260b31643691e8a58683a4ccc3bdf7abfd86f54aMon Sep 17 00:00:00 2001
From: Arnd Bergmann <[email protected]>
Date: Thu, 12 Nov 2015 15:14:23 +0100
Subject: mmc: dw_mmc: use resource_size_t to store physical address
From: Arnd Bergmann <[email protected]>
commit 260b31643691e8a58683a4ccc3bdf7abfd86f54a upstream.
The dw_mmc driver stores the physical address of the MMIO registers in a pointer, which requires the use of type casts, and is actually broken if anyone ever has this device on a 32-bit SoC in registers above 4GB. Gcc warns about this possibility when the driver is built with ARM LPAE enabled:
mmc/host/dw_mmc.c: In function 'dw_mci_edmac_start_dma':mmc/host/dw_mmc.c:702:17: warning: cast from pointer to integer of different size
cfg.dst_addr = (dma_addr_t)(host->phy_regs + fifo_offset);
^mmc/host/dw_mmc-pltfm.c: In function 'dw_mci_pltfm_register':mmc/host/dw_mmc-pltfm.c:63:19: warning: cast to pointer from integer of different size
host->phy_regs = (void *)(regs->start);
This changes the code to use resource_size_t, which gets rid of the warning, the bug and the useless casts.
--- drivers/mmc/host/dw_mmc-pltfm.c | 2 +- drivers/mmc/host/dw_mmc.c | 2 +- include/linux/mmc/dw_mmc.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)
drivers/mmc/host/dw_mmc-pltfm.c +1 -1
@@ -60,7 +60,7 @@ int dw_mci_pltfm_register(struct platfor regs =platform_get_resource (pdev,IORESOURCE_MEM ,0 );/* Get registers' physical base address */ - host->phy_regs = (void *)(regs->start); + host->phy_regs = regs->start; host->regs =devm_ioremap_resource (&pdev->dev, regs);if (IS_ERR (host->regs))return PTR_ERR (host->regs);
drivers/mmc/host/dw_mmc.c +1 -1
@@ -699,7 +699,7 @@ static int dw_mci_edmac_start_dma(structint ret =0 ;/* Set external dma config: burst size, burst width */ - cfg.dst_addr = (dma_addr_t)(host->phy_regs + fifo_offset); + cfg.dst_addr = host->phy_regs + fifo_offset; cfg.src_addr = cfg.dst_addr; cfg.dst_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; cfg.src_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ;
include/linux/mmc/dw_mmc.h +1 -1
@@ -172,7 +172,7 @@ struct dw_mci {/* For edmac */ struct dw_mci_dma_slave *dms;/* Registers's physical base address */ -void *phy_regs; +resource_size_t phy_regs;u32 cmd_status;u32 data_status;
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/mmc-dw_mmc-use-resource_size_t-to-store-physical-address.patch queue-4.4/net-simplify-napi_synchronize-to-avoid-warnings.patch queue-4.4/soc-qcom-spm-shut-up-uninitialized-variable-warning.patch queue-4.4/kconfig-tinyconfig-provide-whole-choice-blocks-to-avoid-warnings.patch queue-4.4/pinctrl-at91-pio4-use-pr-format-string-for-resource.patch