linux/drivers/i2c/busses
Stephen Boyd 6697576788 i2c: i2c-qcom-geni: Properly handle DMA safe buffers
We shouldn't attempt to DMA map the message buffers passed into this
driver from the i2c core unless the message we're mapping have been
properly setup for DMA. The i2c core indicates such a situation by
setting the I2C_M_DMA_SAFE flag, so check for that flag before using DMA
mode. We can also bounce the buffer if it isn't already mapped properly
by using the i2c_get_dma_safe_msg_buf() APIs, so do that when we
want to use DMA for a message.

This fixes a problem where the kernel oopses cleaning pages for a buffer
that's mapped into the vmalloc space. The pages are returned from
request_firmware() and passed down directly to the i2c master to write
to the i2c touchscreen device. Mapping vmalloc buffers with
dma_map_single() won't work reliably, causing an oops like below:

 Unable to handle kernel paging request at virtual address ffffffc01391d000
 ...

Reported-by: Philip Chen <philipchen@chromium.org>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2018-09-25 00:11:52 +02:00
..
Kconfig i2c: Add Actions Semiconductor Owl family S900 I2C driver 2018-08-04 22:56:02 +02:00
Makefile i2c: Add Actions Semiconductor Owl family S900 I2C driver 2018-08-04 22:56:02 +02:00
i2c-acorn.c i2c: acorn: remove outdated path from file header 2018-01-18 00:08:20 +01:00
i2c-ali15x3.c Annotate hardware config module parameters in drivers/i2c/ 2017-04-20 12:02:32 +01:00
i2c-ali1535.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-ali1563.c i2c: ali1563: fix checkpatch.pl issues 2014-05-22 10:09:21 +02:00
i2c-altera.c i2c: altera: Add Altera I2C Controller driver 2017-09-13 23:37:16 +02:00
i2c-amd756-s4882.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
i2c-amd756.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-amd8111.c i2c: amd8111: Mark expected switch fall-through 2018-08-08 22:28:46 +02:00
i2c-aspeed.c i2c: aspeed: Add an explicit type casting for *get_clk_reg_val 2018-08-04 23:12:31 +02:00
i2c-at91.c i2c: at91: Read all available bytes at once 2018-04-30 10:39:28 +02:00
i2c-au1550.c i2c: au1550: Convert to devm_kzalloc and devm_ioremap_resource 2015-10-23 23:31:11 +02:00
i2c-axxia.c i2c: busses: make use of i2c_8bit_addr_from_msg 2018-05-29 20:30:49 +02:00
i2c-bcm-iproc.c i2c: use dev_get_drvdata() to get private data in suspend/resume hooks 2017-07-31 17:03:32 +02:00
i2c-bcm-kona.c Merge branch 'i2c/for-4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2016-10-07 14:12:21 -07:00
i2c-bcm2835.c i2c: bcm2835: Set up the rising/falling edge delays 2018-02-22 12:11:07 +01:00
i2c-brcmstb.c i2c: remove i2c_lock_adapter and use i2c_lock_bus directly 2018-07-13 00:09:37 +02:00
i2c-cadence.c i2c: use dev_get_drvdata() to get private data in suspend/resume hooks 2017-07-31 17:03:32 +02:00
i2c-cbus-gpio.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-cht-wc.c i2c-cht-wc: Fix bq24190 supplier 2018-07-02 17:38:07 +02:00
i2c-cpm.c i2c: busses: make i2c_adapter_quirks const 2017-08-29 22:32:47 +02:00
i2c-cros-ec-tunnel.c i2c: i2c-cros-ec-tunnel: Reduce logging noise 2017-01-28 22:16:38 +01:00
i2c-davinci.c Merge branch 'i2c/for-4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2018-08-21 17:40:46 -07:00
i2c-designware-baytrail.c i2c: designware: Add SPDX license tag 2018-08-20 10:45:45 +02:00
i2c-designware-common.c i2c: designware: Add SPDX license tag 2018-08-20 10:45:45 +02:00
i2c-designware-core.h i2c: designware: Add SPDX license tag 2018-08-20 10:45:45 +02:00
i2c-designware-master.c i2c: designware: Re-init controllers with pm_disabled set on resume 2018-08-30 23:02:13 +02:00
i2c-designware-pcidrv.c i2c: designware: Add SPDX license tag 2018-08-20 10:45:45 +02:00
i2c-designware-platdrv.c i2c: designware: Re-init controllers with pm_disabled set on resume 2018-08-30 23:02:13 +02:00
i2c-designware-slave.c i2c: designware: Add SPDX license tag 2018-08-20 10:45:45 +02:00
i2c-digicolor.c i2c: digicolor: use clk_disable_unprepare instead of clk_unprepare 2016-11-18 01:48:01 +01:00
i2c-diolan-u2c.c i2c: busses: make use of i2c_8bit_addr_from_msg 2018-05-29 20:30:49 +02:00
i2c-dln2.c i2c: constify i2c_adapter_quirks structures 2016-11-18 02:05:03 +01:00
i2c-efm32.c i2c: busses: make use of i2c_8bit_addr_from_msg 2018-05-29 20:30:49 +02:00
i2c-eg20t.c i2c: busses: make use of i2c_8bit_addr_from_msg 2018-05-29 20:30:49 +02:00
i2c-elektor.c Annotate hardware config module parameters in drivers/i2c/ 2017-04-20 12:02:32 +01:00
i2c-emev2.c i2c: use SPDX identifier for Renesas drivers 2018-08-24 14:49:36 +02:00
i2c-exynos5.c i2c: exynos5: Describe the hardware variant for readability 2018-07-21 00:15:22 +02:00
i2c-fsi.c i2c: fsi: Add bus recovery 2018-07-21 00:07:09 +02:00
i2c-gpio.c Merge branch 'i2c/precise-locking-names_immutable' into i2c/for-4.19 2018-07-13 00:12:53 +02:00
i2c-highlander.c i2c: use SPDX identifier for Renesas drivers 2018-08-24 14:49:36 +02:00
i2c-hix5hd2.c i2c: busses: make use of i2c_8bit_addr_from_msg 2018-05-29 20:30:49 +02:00
i2c-hydra.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-i801.c i2c: i801: fix DNV's SMBCTRL register offset 2018-09-04 18:04:55 +02:00
i2c-ibm_iic.c i2c: ibm_iic: don't check number of messages in the driver 2018-05-24 22:05:54 +02:00
i2c-ibm_iic.h
i2c-img-scb.c i2c: img-scb: Add runtime PM 2017-10-28 14:03:45 +02:00
i2c-imx-lpi2c.c i2c: imx-lpi2c: Remove mx8dv compatible entry 2018-09-02 23:50:43 +02:00
i2c-imx.c Merge branch 'i2c/for-4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2018-08-21 17:40:46 -07:00
i2c-iop3xx.c i2c: iop3xx: use new 8 bit address helper function 2016-04-11 18:54:59 +02:00
i2c-iop3xx.h i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-isch.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-ismt.c i2c: ismt: 16-byte align the DMA buffer address 2018-01-15 21:02:43 +01:00
i2c-jz4780.c i2c: jz4780: Fix module autoload 2016-10-25 11:48:58 +02:00
i2c-kempld.c i2c: busses: make use of i2c_8bit_addr_from_msg 2018-05-29 20:30:49 +02:00
i2c-lpc2k.c i2c: use dev_get_drvdata() to get private data in suspend/resume hooks 2017-07-31 17:03:32 +02:00
i2c-meson.c i2c: meson: update doc description to fix build warnings 2018-01-26 18:33:44 +01:00
i2c-mlxcpld.c i2c: mlxcpld: Allow configurable adapter id for mlxcpld 2018-04-30 10:39:29 +02:00
i2c-mpc.c i2c: mpc: always determine I2C clock prescaler at runtime 2018-01-15 19:19:55 +01:00
i2c-mt65xx.c i2c: mediatek: use of_device_get_match_data() 2018-04-30 10:39:28 +02:00
i2c-mv64xxx.c i2c: mv64xxx: Apply errata delay only in standard mode 2018-03-17 21:20:04 +01:00
i2c-mxs.c i2c: mxs: use core to detect 'no zero length' quirk 2018-08-04 23:25:06 +02:00
i2c-nforce2-s4985.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
i2c-nforce2.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
i2c-nomadik.c i2c: busses: remove superfluous ignoring of children for RPM 2018-05-08 23:19:02 +02:00
i2c-ocores.c i2c: ocores: update my email address 2018-08-24 14:46:43 +02:00
i2c-octeon-core.c i2c: octeon: Prevent error message on bus error 2018-03-02 11:11:15 +01:00
i2c-octeon-core.h i2c: octeon: Prevent error message on bus error 2018-03-02 11:11:15 +01:00
i2c-octeon-platdrv.c i2c: busses: make i2c_adapter const 2017-08-29 22:26:08 +02:00
i2c-omap.c i2c: omap: move header to platform_data 2018-05-17 16:27:58 +02:00
i2c-opal.c i2c: opal: don't check number of messages in the driver 2018-05-24 22:06:17 +02:00
i2c-owl.c i2c: Add Actions Semiconductor Owl family S900 I2C driver 2018-08-04 22:56:02 +02:00
i2c-parport-light.c i2c: i2c-smbus: Use threaded irq for smbalert 2017-10-28 23:42:26 +02:00
i2c-parport.c i2c: i2c-smbus: Use threaded irq for smbalert 2017-10-28 23:42:26 +02:00
i2c-parport.h i2c: parport: Add VCT-jig adapter 2015-08-10 08:37:34 +02:00
i2c-pasemi.c i2c: pasemi: remove hardcoded bus numbers on smbus 2018-08-20 11:01:13 +02:00
i2c-pca-isa.c Annotate hardware config module parameters in drivers/i2c/ 2017-04-20 12:02:32 +01:00
i2c-pca-platform.c i2c: pca-platform: move header to platform_data 2018-05-17 16:27:58 +02:00
i2c-piix4.c i2c: piix4: Use request_muxed_region 2018-03-02 11:17:23 +01:00
i2c-pmcmsp.c i2c: pmcmsp: use core to detect 'no zero length' quirk 2018-08-04 23:25:06 +02:00
i2c-pnx.c i2c: pnx: move header into the driver 2018-05-17 16:27:59 +02:00
i2c-powermac.c i2c: busses: make i2c_adapter_quirks const 2017-08-29 22:32:47 +02:00
i2c-puv3.c i2c: busses: make i2c_algorithm const 2017-08-29 22:20:20 +02:00
i2c-pxa-pci.c ARM: pxa: move header file out of I2C realm 2017-11-28 22:49:30 +01:00
i2c-pxa.c ARM: pxa: move header file out of I2C realm 2017-11-28 22:49:30 +01:00
i2c-qcom-geni.c i2c: i2c-qcom-geni: Properly handle DMA safe buffers 2018-09-25 00:11:52 +02:00
i2c-qup.c Merge branch 'i2c/for-4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2018-06-14 16:21:46 +09:00
i2c-rcar.c i2c: use SPDX identifier for Renesas drivers 2018-08-24 14:49:36 +02:00
i2c-riic.c i2c: use SPDX identifier for Renesas drivers 2018-08-24 14:49:36 +02:00
i2c-rk3x.c i2c: rk3x: Don't print visible virtual mapping MMIO address 2018-05-24 22:09:05 +02:00
i2c-robotfuzz-osif.c i2c: robotfuzz-osif: drop pointless test 2018-05-24 22:13:04 +02:00
i2c-s3c2410.c i2c: remove i2c_lock_adapter and use i2c_lock_bus directly 2018-07-13 00:09:37 +02:00
i2c-scmi.c i2c: scmi: Use standard device message logging functions 2018-03-02 11:18:55 +01:00
i2c-sh7760.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-sh_mobile.c i2c: sh_mobile: fix leak when using DMA bounce buffer 2018-08-30 23:13:59 +02:00
i2c-sibyte.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-simtec.c i2c: simtec: use release_mem_region instead of release_resource 2017-08-14 21:39:21 +02:00
i2c-sirf.c i2c: busses: i2c-sirf: Fix spelling: "formular" -> "formula". 2018-02-22 12:12:35 +01:00
i2c-sis96x.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-sis630.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-sis5595.c Annotate hardware config module parameters in drivers/i2c/ 2017-04-20 12:02:32 +01:00
i2c-sprd.c i2c: remove i2c_lock_adapter and use i2c_lock_bus directly 2018-07-13 00:09:37 +02:00
i2c-st.c i2c: use dev_get_drvdata() to get private data in suspend/resume hooks 2017-07-31 17:03:32 +02:00
i2c-stm32.c i2c: i2c-stm32: Add generic DMA API 2018-04-30 10:39:27 +02:00
i2c-stm32.h i2c: i2c-stm32: Add generic DMA API 2018-04-30 10:39:27 +02:00
i2c-stm32f4.c i2c-stm32f4: remove redundant initialization of pointer reg 2018-02-27 13:51:05 +01:00
i2c-stm32f7.c i2c: stm32f7: fix documentation typo 2018-05-17 15:59:02 +02:00
i2c-stu300.c i2c: stu300: use core to detect 'no zero length' quirk 2018-08-04 23:25:07 +02:00
i2c-sun6i-p2wi.c i2c: sun6i-pw2i: explicitly request exclusive reset control 2017-08-14 21:40:21 +02:00
i2c-synquacer.c i2c: synquacer: fix fence-post error in retry loop 2018-05-17 15:40:33 +02:00
i2c-taos-evm.c i2c: taos-evm: Remove duplicate NULL check 2017-11-02 00:01:21 +01:00
i2c-tegra-bpmp.c i2c: tegra: fix spelling mistake: "contoller" -> "controller" 2017-04-21 14:04:57 +02:00
i2c-tegra.c Linux 4.18-rc5 2018-07-17 10:03:42 +02:00
i2c-thunderx-pcidrv.c i2c: thunderx: Remove duplicate NULL check 2017-11-02 00:01:31 +01:00
i2c-tiny-usb.c i2c: i2c-tiny-usb: fix buffer not being DMA capable 2017-05-22 10:33:42 +02:00
i2c-uniphier-f.c i2c: uniphier-f: issue STOP only for last message or I2C_M_STOP 2018-09-02 23:50:43 +02:00
i2c-uniphier.c i2c: uniphier: issue STOP only for last message or I2C_M_STOP 2018-09-02 23:50:43 +02:00
i2c-versatile.c i2c: versatile: Make i2c_algo_bit_data const 2017-08-29 22:34:12 +02:00
i2c-via.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-viapro.c Annotate hardware config module parameters in drivers/i2c/ 2017-04-20 12:02:32 +01:00
i2c-viperboard.c i2c: viperboard: return message count on master_xfer success 2018-05-15 09:31:26 +02:00
i2c-wmt.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-xgene-slimpro.c i2c: xgene-slimpro: Support v2 2017-11-01 23:54:53 +01:00
i2c-xiic.c i2c: xiic: Make the start and the byte count write atomic 2018-09-06 20:49:09 +02:00
i2c-xlp9xx.c i2c: xlp9xx: Fix case where SSIF read transaction completes early 2018-08-09 17:41:13 +02:00
i2c-xlr.c i2c: xlr: use core to detect 'no zero length' quirk 2018-08-04 23:25:08 +02:00
i2c-zx2967.c i2c: zx2967: always use the same device when printing errors 2017-06-27 23:21:00 +02:00
scx200_acb.c Annotate hardware config module parameters in drivers/i2c/ 2017-04-20 12:02:32 +01:00