kernel_samsung_a53x/drivers/i2c/busses
Jan Bottorff b37eb32be9 i2c: designware: Fix corrupted memory seen in the ISR
[ Upstream commit f726eaa787e9f9bc858c902d18a09af6bcbfcdaf ]

When running on a many core ARM64 server, errors were
happening in the ISR that looked like corrupted memory. These
corruptions would fix themselves if small delays were inserted
in the ISR. Errors reported by the driver included "i2c_designware
APMC0D0F:00: i2c_dw_xfer_msg: invalid target address" and
"i2c_designware APMC0D0F:00:controller timed out" during
in-band IPMI SSIF stress tests.

The problem was determined to be memory writes in the driver were not
becoming visible to all cores when execution rapidly shifted between
cores, like when a register write immediately triggers an ISR.
Processors with weak memory ordering, like ARM64, make no
guarantees about the order normal memory writes become globally
visible, unless barrier instructions are used to control ordering.

To solve this, regmap accessor functions configured by this driver
were changed to use non-relaxed forms of the low-level register
access functions, which include a barrier on platforms that require
it. This assures memory writes before a controller register access are
visible to all cores. The community concluded defaulting to correct
operation outweighed defaulting to the small performance gains from
using relaxed access functions. Being a low speed device added weight to
this choice of default register access behavior.

Signed-off-by: Jan Bottorff <janb@os.amperecomputing.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Tested-by: Serge Semin <fancer.lancer@gmail.com>
Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-18 12:11:18 +01:00
..
acpm-mfd-bus.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-acorn.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-ali15x3.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-ali1535.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-ali1563.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-altera.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-amd-mp2-pci.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-amd-mp2-plat.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-amd-mp2.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-amd756-s4882.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-amd756.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-amd8111.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-aspeed.c i2c: aspeed: Fix i2c bus hang in slave read 2024-11-18 10:58:31 +01:00
i2c-at91-core.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-at91-master.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-at91-slave.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-at91.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-au1550.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-axxia.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-bcm-iproc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-bcm-kona.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-bcm2835.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-brcmstb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-cadence.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-cbus-gpio.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-cht-wc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-cpm.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-cros-ec-tunnel.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-davinci.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-designware-baytrail.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-designware-common.c i2c: designware: Fix corrupted memory seen in the ISR 2024-11-18 12:11:18 +01:00
i2c-designware-core.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-designware-master.c i2c: designware: Disable TX_EMPTY irq while waiting for block length byte 2024-11-18 11:43:30 +01:00
i2c-designware-pcidrv.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-designware-platdrv.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-designware-slave.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-digicolor.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-diolan-u2c.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-dln2.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-efm32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-eg20t.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-elektor.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-emev2.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-exynos5.c i2c: exynos5: Silence noisy error and info logs 2024-11-17 17:45:37 +01:00
i2c-exynos5.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-fsi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-gpio.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-highlander.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-hix5hd2.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-hydra.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-i801.c i2c: i801: fix potential race in i801_block_transaction_byte_by_byte 2024-11-18 11:43:30 +01:00
i2c-ibm_iic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-ibm_iic.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-icy.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-img-scb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-imx-lpi2c.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-imx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-iop3xx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-iop3xx.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-isch.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-ismt.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-jz4780.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-kempld.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-lpc2k.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-meson.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-mlxbf.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-mlxcpld.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-mpc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-mt65xx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-mt7621.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-mv64xxx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-mxs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-nforce2-s4985.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-nforce2.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-nomadik.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-npcm7xx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-nvidia-gpu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-ocores.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-octeon-core.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-octeon-core.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-octeon-platdrv.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-omap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-opal.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-owl.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-parport.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-pasemi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-pca-isa.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-pca-platform.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-piix4.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-pmcmsp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-pnx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-powermac.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-pxa-pci.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-pxa.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-qcom-cci.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-qcom-geni.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-qup.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-rcar.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-riic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-rk3x.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-robotfuzz-osif.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-s3c2410.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-scmi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-sh7760.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-sh_mobile.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-sibyte.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-simtec.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-sirf.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-sis96x.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-sis630.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-sis5595.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-sprd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-st.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-stm32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-stm32.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-stm32f4.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-stm32f7.c i2c: stm32f7: Fix PEC handling in case of SMBUS transfers 2024-11-18 10:58:31 +01:00
i2c-stu300.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-sun6i-p2wi.c i2c: sun6i-p2wi: Prevent potential division by zero 2024-11-18 11:43:14 +01:00
i2c-synquacer.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-taos-evm.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-tegra-bpmp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-tegra.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-thunderx-pcidrv.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-tiny-usb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-uniphier-f.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-uniphier.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-versatile.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-via.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-viapro.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-viperboard.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-wmt.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-xgene-slimpro.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-xiic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-xlp9xx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-xlr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-zx2967.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scx200_acb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00