linux/drivers/i2c/busses
Tam Nguyen 385f438b58 i2c: designware: Handle invalid SMBus block data response length value
commit 69f035c480 upstream.

In the I2C_FUNC_SMBUS_BLOCK_DATA case, the invalid length byte value
(outside of 1-32) of the SMBus block data response from the Slave device
is not correctly handled by the I2C Designware driver.

In case IC_EMPTYFIFO_HOLD_MASTER_EN==1, which cannot be detected
from the registers, the Master can be disabled only if the STOP bit
is set. Without STOP bit set, the Master remains active, holding the bus
until receiving a block data response length. This hangs the bus and
is unrecoverable.

Avoid this by issuing another dump read to reach the stop condition when
an invalid length byte is received.

Cc: stable@vger.kernel.org
Signed-off-by: Tam Nguyen <tamnguyenchi@os.amperecomputing.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Link: https://lore.kernel.org/r/20230726080001.337353-3-tamnguyenchi@os.amperecomputing.com
Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2023-08-23 17:32:39 +02:00
..
i2c-acorn.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
i2c-ali15x3.c i2c: Use separate MODULE_AUTHOR() statements for multiple authors 2020-07-04 08:25:13 +02:00
i2c-ali1535.c i2c: ali1535: mention that the device should not be disabled 2021-07-02 09:14:46 +02:00
i2c-ali1563.c i2c: busses: i2c-ali1563: File headers are not good candidates for kernel-doc 2021-05-27 21:29:26 +02:00
i2c-altera.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-amd-mp2-pci.c i2c: amd-mp2: use msix/msi if the hardware supports 2022-11-01 13:41:22 +01:00
i2c-amd-mp2-plat.c i2c: amd-mp2-plat: Refactor _UID handling to use acpi_dev_uid_to_integer() 2022-09-19 18:34:42 +02:00
i2c-amd-mp2.h i2c: amd-mp2: use msix/msi if the hardware supports 2022-11-01 13:41:22 +01:00
i2c-amd756-s4882.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-amd756.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-amd8111.c i2c: amd8111: Fix coding style issues 2021-04-15 22:24:11 +02:00
i2c-aspeed.c i2c: aspeed: Use devm_platform_get_and_ioremap_resource() 2023-01-20 10:29:10 +01:00
i2c-at91-core.c i2c: at91: mark PM ops as __maybe unused 2021-08-11 15:54:01 +02:00
i2c-at91-master.c i2c: at91: Initialize dma_buf in at91_twi_xfer() 2022-05-14 15:41:16 +02:00
i2c-at91-slave.c i2c: at91: added slave mode support 2019-03-24 22:41:51 +01:00
i2c-at91.h i2c: at91: remove legacy DMA left overs 2020-11-03 21:34:40 +01:00
i2c-au1550.c i2c: au1550: Use devm_platform_get_and_ioremap_resource() 2023-01-20 10:32:55 +01:00
i2c-axxia.c i2c: axxia: use 'struct' for kernel-doc notation 2023-01-20 10:18:16 +01:00
i2c-bcm-iproc.c i2c: bcm-iproc: Fix bcm_iproc_i2c_isr deadlock issue 2023-08-23 17:32:36 +02:00
i2c-bcm-kona.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-bcm2835.c i2c: bcm2835: Use devm_platform_get_and_ioremap_resource() 2023-01-20 10:29:59 +01:00
i2c-brcmstb.c i2c: brcmstb: use devm_platform_ioremap_resource_byname() 2023-03-29 21:19:13 +02:00
i2c-cadence.c Merge branch 'i2c/for-current' into i2c/for-mergewindow 2023-04-24 12:50:20 +02:00
i2c-cbus-gpio.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-ccgx-ucsi.c i2c: Introduce common module to instantiate CCGx UCSI 2022-02-15 10:04:53 +01:00
i2c-ccgx-ucsi.h i2c: Introduce common module to instantiate CCGx UCSI 2022-02-15 10:04:53 +01:00
i2c-cht-wc.c i2c: cht-wc: Add charger-chip info for the Lenovo Yoga Tab 3 YT3-X90F 2023-02-04 13:04:50 +00:00
i2c-cp2615.c i2c: cp2615: check for allocation failure in cp2615_i2c_recv() 2021-06-20 23:13:34 +02:00
i2c-cpm.c i2c: cpm: Fix i2c_ram structure 2020-09-27 15:14:16 +02:00
i2c-cros-ec-tunnel.c i2c: cros-ec-tunnel: Mark ACPI and OF related data as maybe unused 2023-03-16 20:55:16 +01:00
i2c-davinci.c i2c: davinci: remove dead code in probe 2023-03-16 20:51:02 +01:00
i2c-designware-amdpsp.c i2c: designware: Add doorbell support for Mendocino 2023-04-20 18:20:05 +08:00
i2c-designware-baytrail.c i2c: designware: Add AMD PSP I2C bus support 2022-02-11 15:38:23 +01:00
i2c-designware-common.c I2C for 6.3: 2023-02-24 17:12:23 -08:00
i2c-designware-core.h i2c: designware: fix idx_write_cnt in read loop 2023-06-05 11:58:20 +02:00
i2c-designware-master.c i2c: designware: Handle invalid SMBus block data response length value 2023-08-23 17:32:39 +02:00
i2c-designware-pcidrv.c usb: typec: ucsi: Mark dGPUs as DEVICE scope 2023-07-19 16:36:55 +02:00
i2c-designware-platdrv.c i2c: designware: Use PCI PSP driver for communication 2023-04-20 18:20:05 +08:00
i2c-designware-slave.c i2c: designware: fix idx_write_cnt in read loop 2023-06-05 11:58:20 +02:00
i2c-digicolor.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-diolan-u2c.c i2c: drivers: Use generic definitions for bus frequencies 2020-03-24 22:36:59 +01:00
i2c-dln2.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 372 2019-06-05 17:37:10 +02:00
i2c-eg20t.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-elektor.c Merge branch 'i2c/for-5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2021-02-22 09:02:24 -08:00
i2c-emev2.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-exynos5.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-fsi.c i2c: fsi: Prevent adding adapters for ports without dts nodes 2020-07-24 21:31:33 +02:00
i2c-gpio.c i2c: gpio: support write-only sda/scl w/o pull-up 2023-01-23 23:18:54 +01:00
i2c-gxp.c i2c: gxp: fix build failure without CONFIG_I2C_SLAVE 2023-05-03 17:27:29 +02:00
i2c-highlander.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-hisi.c i2c: hisi: Only handle the interrupt of the driver's transfer 2023-08-23 17:32:36 +02:00
i2c-hix5hd2.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-hydra.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-i801.c i2c: i801: Call i801_check_post() from i801_access() 2023-02-17 22:12:00 +01:00
i2c-ibm_iic.c i2c: Delete error messages for failed memory allocations 2023-08-03 10:25:43 +02:00
i2c-ibm_iic.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
i2c-icy.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-img-scb.c i2c: img-scb: Fix spelling mistake "innacurate" -> "inaccurate" 2023-06-05 10:39:11 +02:00
i2c-imx-lpi2c.c i2c: imx-lpi2c: fix type char overflow issue when calculating the clock cycle 2023-06-23 12:58:24 +02:00
i2c-imx.c i2c: imx: Simplify using devm_clk_get_enabled() 2023-03-16 21:07:49 +01:00
i2c-iop3xx.c i2c: iop3xx: fix deferred probing 2021-08-19 19:18:17 +02:00
i2c-iop3xx.h Merge branch 'i2c/for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2019-07-15 21:10:39 -07:00
i2c-isch.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
i2c-ismt.c i2c: ismt: Fix an out-of-bounds bug in ismt_access() 2022-12-07 21:27:08 +01:00
i2c-jz4780.c Merge branch 'i2c/for-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2021-04-30 13:01:02 -07:00
i2c-kempld.c i2c: kempld: Support ACPI I2C device declaration 2022-08-11 23:02:51 +02:00
i2c-lpc2k.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-ls2x.c i2c: ls2x: Add driver for Loongson-2K/LS7A I2C controller 2023-02-02 22:23:59 +01:00
i2c-mchp-pci1xxxx.c i2c: mchp-pci1xxxx: Avoid cast to incompatible function type 2023-06-05 10:43:45 +02:00
i2c-meson.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-microchip-corei2c.c i2c: microchip-corei2c: fix erroneous late ack send 2022-08-11 14:28:56 +02:00
i2c-mlxbf.c i2c: mlxbf: depend on ACPI; clean away ifdeffage 2022-10-21 07:59:35 +02:00
i2c-mlxcpld.c i2c: fix spelling typos in comments 2022-10-20 23:09:10 +02:00
i2c-mpc.c i2c: mpc: Use i2c-scl-clk-low-timeout-us i2c property 2023-03-29 21:08:34 +02:00
i2c-mt65xx.c i2c: mediatek: add support for MT7981 SoC 2023-04-13 18:40:36 +02:00
i2c-mt7621.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-mv64xxx.c i2c: mv64xxx: Fix reading invalid status value in atomic mode 2023-06-05 12:22:30 +02:00
i2c-mxs.c i2c: mxs: ensure that DMA buffers are safe for DMA 2023-03-16 20:47:32 +01:00
i2c-nforce2-s4985.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-nforce2.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-nomadik.c i2c: nomadik: Remove a useless call in the remove function 2023-08-03 10:25:44 +02:00
i2c-npcm7xx.c Core got a new helper 'i2c_client_get_device_id', designware got some 2022-12-15 14:47:10 -08:00
i2c-nvidia-gpu.c usb: typec: ucsi: Mark dGPUs as DEVICE scope 2023-07-19 16:36:55 +02:00
i2c-ocores.c i2c: ocores: generate stop condition after timeout in polling mode 2023-04-13 18:29:29 +02:00
i2c-octeon-core.c i2c: octeon: check correct size of maximum RECV_LEN packet 2021-01-17 12:26:55 +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: convert to devm_platform_ioremap_resource 2020-04-15 12:09:09 +02:00
i2c-omap.c i2c: omap: Fix standard mode false ACK readings 2023-05-03 17:27:21 +02:00
i2c-opal.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-owl.c i2c: owl: drop of_match_ptr for ID table 2023-03-16 20:54:30 +01:00
i2c-parport.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-pasemi-core.c i2c: /pasemi: PASemi I2C controller IRQ enablement 2022-11-12 21:30:16 +01:00
i2c-pasemi-core.h i2c: /pasemi: PASemi I2C controller IRQ enablement 2022-11-12 21:30:16 +01:00
i2c-pasemi-pci.c i2c: pasemi: Drop I2C classes from platform driver variant 2022-02-15 10:28:34 +01:00
i2c-pasemi-platform.c i2c: /pasemi: PASemi I2C controller IRQ enablement 2022-11-12 21:30:16 +01:00
i2c-pca-isa.c isa: Make the remove callback for isa drivers return void 2021-01-26 07:42:27 +01:00
i2c-pca-platform.c i2c: pca-platform: drop two members from driver data that are assigned to only 2020-12-02 21:29:31 +01:00
i2c-piix4.c i2c: piix4: Fix adapter not be removed in piix4_remove() 2022-11-01 13:09:33 +01:00
i2c-pnx.c i2c: busses: i2c-pnx: Provide descriptions for 'alg_data' data structure 2021-05-27 21:34:08 +02:00
i2c-powermac.c of: Rename of_modalias_node() 2023-04-05 19:41:10 +02:00
i2c-pxa-pci.c i2c: pxa-pci: fix missing pci_disable_device() on error in ce4100_i2c_probe 2022-12-05 11:00:34 +01:00
i2c-pxa.c i2c: Use of_property_read_bool() for boolean properties 2023-03-16 20:20:00 +01:00
i2c-qcom-cci.c i2c: qcom-cci: Deprecate duplicated compatibles 2023-01-09 12:57:07 +01:00
i2c-qcom-geni.c I2C for 6.3: 2023-02-24 17:12:23 -08:00
i2c-qup.c i2c: qup: Add missing unwind goto in qup_i2c_probe() 2023-06-23 12:58:24 +02:00
i2c-rcar.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-riic.c i2c: riic: Use devm_platform_ioremap_resource() 2022-09-17 20:35:34 +02:00
i2c-rk3x.c i2c: rk3x: fix a bunch of kernel-doc warnings 2023-01-20 10:18:51 +01:00
i2c-robotfuzz-osif.c i2c: robotfuzz-osif: fix control-request directions 2021-06-24 22:08:00 +02:00
i2c-rzv2m.c i2c: Add Renesas RZ/V2M controller 2022-07-22 18:46:41 +02:00
i2c-s3c2410.c ARM: s3c: remove s3c24xx specific hacks 2023-01-16 09:26:05 +01:00
i2c-scmi.c i2c: scmi: Convert to be a platform driver 2022-09-16 20:44:08 +01:00
i2c-sh7760.c i2c: Improve size determinations 2023-08-03 10:25:43 +02:00
i2c-sh_mobile.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-sibyte.c i2c: Use separate MODULE_AUTHOR() statements for multiple authors 2020-07-04 08:25:13 +02:00
i2c-simtec.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-sis96x.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-sis630.c i2c: fix spelling typos in comments 2022-10-20 23:09:10 +02:00
i2c-sis5595.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-sprd.c i2c: sprd: Delete i2c adapter in .remove's error path 2023-06-07 12:29:58 +02:00
i2c-st.c i2c: st: use pm_sleep_ptr to avoid ifdef CONFIG_PM_SLEEP 2023-02-12 22:06:49 +01:00
i2c-stm32.c i2c: stm32: Simplify with dev_err_probe() 2020-09-21 11:45:43 +02:00
i2c-stm32.h i2c: stm32: Use the correct style for SPDX License Identifier 2019-08-14 14:56:54 +02:00
i2c-stm32f4.c i2c: busses: i2c-stm32f4: Remove incorrectly placed ' ' from function name 2021-05-27 21:39:57 +02:00
i2c-stm32f7.c i2c: stm32: add support for the STM32MP13 soc 2022-07-16 14:24:41 +02:00
i2c-sun6i-p2wi.c i2c: sun6i-pw2i: Prefer strscpy over strlcpy 2021-08-17 21:37:40 +02:00
i2c-synquacer.c i2c: synquacer: mark OF related data as maybe unused 2023-03-29 20:54:28 +02:00
i2c-taos-evm.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-tegra-bpmp.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-tegra.c i2c: tegra: Fix i2c-tegra DMA config option processing 2023-08-23 17:32:36 +02:00
i2c-thunderx-pcidrv.c drivers: i2c: thunderx: Allow driver to work with ACPI defined TWSI controllers 2022-05-21 13:41:28 +02:00
i2c-tiny-usb.c i2c: Delete error messages for failed memory allocations 2023-08-03 10:25:43 +02:00
i2c-uniphier-f.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-uniphier.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-versatile.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-via.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-viapro.c i2c: busses: Use fallthrough pseudo-keyword 2020-07-23 22:04:08 +02:00
i2c-viperboard.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
i2c-virtio.c virtio: wrap config->reset calls 2022-01-14 18:50:52 -05:00
i2c-wmt.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-xgene-slimpro.c i2c: xgene-slimpro: Fix out-of-bounds bug in xgene_slimpro_i2c_xfer() 2023-03-16 21:15:43 +01:00
i2c-xiic.c i2c: xiic: Don't try to handle more interrupt events after error 2023-07-19 16:36:50 +02:00
i2c-xlp9xx.c i2c: Remove Netlogic XLP variant 2021-11-23 10:00:12 +01:00
Kconfig Mostly fixes for DTs or DT handling this time. And a few driver 2023-04-27 11:15:36 -07:00
Makefile i2c: Add GXP SoC I2C Controller 2023-02-17 23:18:20 +01:00
scx200_acb.c i2c: busses: Use fallthrough pseudo-keyword 2020-07-23 22:04:08 +02:00