Skip to contentSkip to conversation

Patch "mtd: sh_flctl: pass FIFO as physical address" has been added to the 4.4-stable tree

PATCH [email protected] 1 participant 1 message Feb 23, 2018

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

mtd: sh_flctl: pass FIFO as 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:
mtd-sh_flctl-pass-fifo-as-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 1873315fb156cbc8e46f28e8b128f17ff6c31728 Mon Sep 17 00:00:00 2001

From: Arnd Bergmann <[email protected]>
Date: Tue, 8 Dec 2015 16:38:12 +0100
Subject: mtd: sh_flctl: pass FIFO as physical address

From: Arnd Bergmann <[email protected]>

commit 1873315fb156cbc8e46f28e8b128f17ff6c31728 upstream.

By convention, the FIFO address we pass using dmaengine_slave_config is a physical address in the form that is understood by the DMA engine, as a dma_addr_t, phys_addr_t or resource_size_t.

The sh_flctl driver however passes a virtual __iomem address that gets cast to dma_addr_t in the slave driver. This happens to work on shmobile because that platform sets up an identity mapping for its MMIO regions, but such code is not portable to other platforms, and prevents us from ever changing the platform mapping or reusing the driver on other architectures like ARM64 that might not have the mapping.

We also get a warning about a type mismatch for the case that dma_addr_t is wider than a pointer, i.e. when CONFIG_LPAE is set:

drivers/mtd/nand/sh_flctl.c: In function 'flctl_setup_dma':
drivers/mtd/nand/sh_flctl.c:163:17: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
cfg.dst_addr = (dma_addr_t)FLDTFIFO(flctl);

This changes the driver to instead pass the physical address of the FIFO that is extracted from the MMIO resource, making the code more portable and avoiding the warning.

---
 drivers/mtd/nand/sh_flctl.c  |    5 +++--
 include/linux/mtd/sh_flctl.h |    1 +
 2 files changed, 4 insertions(+), 2 deletions(-)
drivers/mtd/nand/sh_flctl.c +3 -2
@@ -160,7 +160,7 @@ static void flctl_setup_dma(struct sh_fl
 
 	memset(&cfg, 0, sizeof(cfg));
 	cfg.direction = DMA_MEM_TO_DEV;
-	cfg.dst_addr = (dma_addr_t)FLDTFIFO(flctl);
+	cfg.dst_addr = flctl->fifo;
 	cfg.src_addr = 0;
 	ret = dmaengine_slave_config(flctl->chan_fifo0_tx, &cfg);
 	if (ret < 0)
@@ -176,7 +176,7 @@ static void flctl_setup_dma(struct sh_fl
 
 	cfg.direction = DMA_DEV_TO_MEM;
 	cfg.dst_addr = 0;
-	cfg.src_addr = (dma_addr_t)FLDTFIFO(flctl);
+	cfg.src_addr = flctl->fifo;
 	ret = dmaengine_slave_config(flctl->chan_fifo0_rx, &cfg);
 	if (ret < 0)
 		goto err;
@@ -1096,6 +1096,7 @@ static int flctl_probe(struct platform_d
 	flctl->reg = devm_ioremap_resource(&pdev->dev, res);
 	if (IS_ERR(flctl->reg))
 		return PTR_ERR(flctl->reg);
+	flctl->fifo = res->start + 0x24; /* FLDTFIFO */
 
 	irq = platform_get_irq(pdev, 0);
 	if (irq < 0) {
include/linux/mtd/sh_flctl.h +1 -0
@@ -148,6 +148,7 @@ struct sh_flctl {
 	struct platform_device	*pdev;
 	struct dev_pm_qos_request pm_qos;
 	void __iomem		*reg;
+	resource_size_t		fifo;
 
 	uint8_t	done_buff[2048 + 64];	/* max size 2048 + 64 */
 	int	read_bytes;

Patches currently in stable-queue which might be from [email protected] are

queue-4.4/kasan-rework-kconfig-settings.patch queue-4.4/hdpvr-hide-unused-variable.patch queue-4.4/mtd-ichxrom-maybe-uninitialized-with-gcc-4.9.patch queue-4.4/profile-hide-unused-functions-when-config_proc_fs.patch queue-4.4/perf-x86-shut-up-false-positive-wmaybe-uninitialized-warning.patch queue-4.4/hwrng-exynos-use-__maybe_unused-to-hide-pm-functions.patch queue-4.4/usb-cdc_subset-only-build-when-one-driver-is-enabled.patch queue-4.4/ipv4-ipconfig-avoid-unused-ic_proto_used-symbol.patch queue-4.4/revert-power-bq27xxx_battery-remove-unneeded-dependency-in-kconfig.patch queue-4.4/go7007-add-media_camera_support-dependency.patch queue-4.4/scsi-advansys-fix-build-warning-for-pci-n.patch queue-4.4/ssb-mark-ssb_bus_register-as-__maybe_unused.patch queue-4.4/tty-cyclades-cyz_interrupt-is-only-used-for-pci.patch queue-4.4/infiniband-cxgb4-use-pr-format-string-for-printing-resources.patch queue-4.4/video-fbdev-via-remove-possibly-unused-variables.patch queue-4.4/binfmt_elf-compat-avoid-unused-function-warning.patch queue-4.4/drm-gma500-remove-helper-function.patch queue-4.4/fbdev-s6e8ax0-avoid-unused-function-warnings.patch queue-4.4/netfilter-ipvs-avoid-unused-variable-warnings.patch queue-4.4/idle-i7300-add-pci-dependency.patch queue-4.4/b2c2-flexcop-avoid-unused-function-warnings.patch queue-4.4/fbdev-auo_k190x-avoid-unused-function-warnings.patch queue-4.4/cw1200-fix-bogus-maybe-uninitialized-warning.patch queue-4.4/x86-build-silence-the-build-with-make-s.patch queue-4.4/gpio-xgene-mark-pm-functions-as-__maybe_unused.patch queue-4.4/kvm-add-x86_local_apic-dependency.patch queue-4.4/arm-tegra-select-usb_ulpi-from-ehci-rather-than-platform.patch queue-4.4/asoc-mediatek-add-i2c-dependency.patch queue-4.4/reiserfs-avoid-a-wmaybe-uninitialized-warning.patch queue-4.4/scsi-advansys-fix-uninitialized-data-access.patch queue-4.4/mtd-sh_flctl-pass-fifo-as-physical-address.patch queue-4.4/driver-core-use-dev-argument-in-dev_dbg_ratelimited-stub.patch queue-4.4/modsign-hide-openssl-output-in-silent-builds.patch queue-4.4/net-hp100-remove-unnecessary-ifdefs.patch queue-4.4/genirq-msi-add-stubs-for-get_cached_msi_msg-pci_write_msi_msg.patch queue-4.4/asoc-intel-kconfig-fix-build-when-acpi-is-not-enabled.patch queue-4.4/asoc-ux500-add-module_license-tag.patch queue-4.4/wireless-cw1200-use-__maybe_unused-to-hide-pm-functions_.patch queue-4.4/mptfusion-hide-unused-seq_mpt_print_ioc_summary-function.patch queue-4.4/tlan-avoid-unused-label-with-pci-n.patch queue-4.4/usb-musb-ux500-remove-duplicate-check-for-dma_is_compatible.patch queue-4.4/mtd-cfi-enforce-valid-geometry-configuration.patch queue-4.4/thermal-spear-use-__maybe_unused-for-pm-functions.patch queue-4.4/x86-microcode-amd-change-load_microcode_amd-s-param-to-bool-to-fix-preemptibility-bug.patch queue-4.4/video-fbdev-mmp-add-module_license.patch queue-4.4/fbdev-sis-enforce-selection-of-at-least-one-backend.patch queue-4.4/x86-boot-avoid-warning-for-zero-filling-.bss.patch queue-4.4/power-bq27xxx_battery-mark-some-symbols-__maybe_unused.patch queue-4.4/scsi-mvumi-use-__maybe_unused-to-hide-pm-functions.patch queue-4.4/usb-phy-msm-add-regulator-dependency.patch queue-4.4/isdn-icn-remove-a-warning.patch queue-4.4/ncr5380-shut-up-gcc-indentation-warning.patch queue-4.4/arm64-dts-add-cooling-cells-to-cpu-nodes.patch queue-4.4/vmxnet3-prevent-building-with-64k-pages.patch queue-4.4/genksyms-fix-segfault-with-invalid-declarations.patch queue-4.4/x86-platform-add-pci-dependency-for-punit_atom_debug.patch queue-4.4/target-user-fix-cast-from-pointer-to-phys_addr_t.patch queue-4.4/rtlwifi-fix-gcc-6-indentation-warning.patch queue-4.4/alsa-hda-ca0132-fix-possible-null-pointer-use.patch queue-4.4/thermal-fix-intel_soc_dts_iosf_core-dependencies.patch queue-4.4/arm64-define-bug-instruction-without-config_bug.patch queue-4.4/v4l-remove-media_tuner-dependency-for-video_tuner.patch queue-4.4/tc358743-fix-register-i2c_rd-wr-functions.patch queue-4.4/scsi-fdomain-drop-fdomain_pci_tbl-when-built-in.patch queue-4.4/scsi-initio-remove-duplicate-module-device-table.patch queue-4.4/netlink-fix-nla_put_-u8-u16-u32-for-kasan.patch queue-4.4/x86-fpu-math-emu-fix-possible-uninitialized-variable-use.patch queue-4.4/asoc-rockchip-use-__maybe_unused-to-hide-st_irq_syscfg_resume.patch queue-4.4/staging-ste_rmi4-avoid-unused-function-warnings.patch queue-4.4/em28xx-only-use-mt9v011-if-camera-support-is-enabled.patch queue-4.4/pwc-hide-unused-label.patch queue-4.4/input-tca8418_keypad-hide-gcc-4.9-wmaybe-uninitialized-warning.patch queue-4.4/fbdev-sm712fb-avoid-unused-function-warnings.patch queue-4.4/isdn-sc-work-around-type-mismatch-warning.patch queue-4.4/tty-hvc_xen-hide-xen_console_remove-when-unused.patch queue-4.4/virtio_balloon-prevent-uninitialized-variable-use.patch queue-4.4/drm-nouveau-hide-gcc-4.9-wmaybe-uninitialized.patch queue-4.4/dell-wmi-dell-laptop-depends-dmi.patch queue-4.4/x86-add-multiuser-dependency-for-kvm.patch queue-4.4/md-avoid-warning-for-32-bit-sector_t.patch queue-4.4/isdn-eicon-reduce-stack-size-of-sig_ind-function.patch