FAILED: patch "[PATCH] drm/xe/i2c: Fix the interrupt handling" failed to apply to 7.2-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 7.2-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-7.2.y
git checkout FETCH_HEAD
git cherry-pick -x f43fa4b8522ba6038b77e86e5f0d94be35effcde
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026090944-turf-outthink-f4fa@gregkh' --subject-prefix 'PATCH 7.2.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From f43fa4b8522ba6038b77e86e5f0d94be35effcde Mon Sep 17 00:00:00 2001
From: Heikki Krogerus <[email protected]>
Date: Tue, 11 Aug 2026 14:10:07 +0200
Subject: [PATCH] drm/xe/i2c: Fix the interrupt handling
The platforms that support the interrupt from the I2C adapter can not handle the amount of interrupts the adapter generates because of the way the IRQ is routed in the hardware. The I2C controller driver has to be kept in polling mode because of that.
The AMC MCU can still generate critical alerts that have to be handled. The interrupt from SMBus Alert is left enabled and handled separately in the Xe. The alerts from the AMC will cause the device to be declared wedged for now.
drivers/gpu/drm/xe/Makefile +3 -1
@@ -153,7 +153,9 @@ xe-y += xe_bb.o \ xe_wait_user_fence.o \ xe_wopcm.o -xe-$(CONFIG_I2C) += xe_i2c.o +xe-$(CONFIG_I2C) += xe_i2c.o \ + xe_amc.o + xe-$(CONFIG_DRM_XE_GPUSVM) += xe_svm.o xe-$(CONFIG_DRM_GPUSVM) += xe_userptr.o
drivers/gpu/drm/xe/regs/xe_i2c_regs.h +2 -0
@@ -20,4 +20,6 @@#define I2C_CONFIG_CMD XE_REG(I2C_CONFIG_SPACE_OFFSET + PCI_COMMAND)#define I2C_CONFIG_PMCSR XE_REG(I2C_CONFIG_SPACE_OFFSET + 0x84) +#define I2C_REG (reg) XE_REG((reg) + I2C_MEM_SPACE_OFFSET) +#endif /* _XE_I2C_REGS_H_ */
drivers/gpu/drm/xe/xe_amc.c new file +197 -0
197 lines not on this page · raw message
drivers/gpu/drm/xe/xe_amc.h new file +25 -0
@@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _XE_AMC_H_ +#define _XE_AMC_H_ + +#include <linux/i2c.h> + +#include "xe_device.h" + +struct xe_i2c ; + +static inline struct xe_device *i2c_adapter_to_xe_device (struct i2c_adapter *adapter) +{ +return kdev_to_xe_device (adapter->dev.parent->parent); +} + +static inline struct xe_device *i2c_client_to_xe_device (struct i2c_client *client) +{ +return i2c_adapter_to_xe_device (client->adapter); +} + +int xe_amc_init (struct xe_i2c *i2c); +void xe_amc_exit (struct xe_i2c *i2c); +void xe_amc_handle_alert (struct xe_i2c *i2c); + +#endif /* _XE_AMC_H_ */
drivers/gpu/drm/xe/xe_i2c.c +48 -80
209 lines not on this page · raw message
drivers/gpu/drm/xe/xe_i2c.h +7 -6
@@ -11,18 +11,21 @@ struct device;struct fwnode_handle ;struct i2c_adapter ;struct i2c_client ; -struct irq_domain ;struct platform_device ; +struct xe_amc ;struct xe_device ;struct xe_mmio ; -#define XE_I2C_MAX_CLIENTS 3 -#define XE_I2C_EP_COOKIE_DEVICE 0xde/* Endpoint Capabilities */ #define XE_I2C_EP_CAP_IRQ BIT(0) +enum XE_I2C_CLIENT { +XE_I2C_CLIENT_AMC =1 , +XE_I2C_MAX_CLIENTS =3 , +}; +struct xe_i2c_endpoint {u8 cookie;u8 capabilities;
@@ -38,13 +41,11 @@ struct xe_i2c {struct notifier_block bus_notifier;struct work_struct work; -struct irq_domain *irqdomain; -int adapter_irq; -struct xe_i2c_endpoint ep;struct device *drm_dev;struct xe_mmio *mmio; +struct xe_amc *amc; };#if IS_ENABLED (CONFIG_I2C )
Sasha Levin
maintainerPATCH 1/3 accel/amdxdna: Disable device buffer exporting
From: Lizhi Hou <[email protected]>
[ Upstream commit 9480dd7ec3fcadd4217503e4bb32c16e19e4b21f ]
Device buffers are never intended to be exported. Disable exporting support explicitly.
Stable-dep-of: f43fa4b8522b ("drm/xe/i2c: Fix the interrupt handling")
--- drivers/accel/amdxdna/amdxdna_gem.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/accel/amdxdna/amdxdna_gem.c +6 -0
@@ -758,9 +758,15 @@ static int amdxdna_gem_dev_obj_vmap(struct drm_gem_object *obj, struct iosys_mapreturn 0 ; } +static struct dma_buf *amdxdna_gem_dev_obj_export (struct drm_gem_object *gobj,int flags) +{ +return ERR_PTR (-EOPNOTSUPP ); +} +static const struct drm_gem_object_funcs amdxdna_gem_dev_obj_funcs = { .free = amdxdna_gem_dev_obj_free, .vmap = amdxdna_gem_dev_obj_vmap, + .export = amdxdna_gem_dev_obj_export, };static const struct drm_gem_object_funcs amdxdna_gem_shmem_funcs = {
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/3 i2c: designware: Global register definitions
From: Heikki Krogerus <[email protected]>
[ Upstream commit 874ef9a6f2fc45d3f6021842d92fa5420fa4c825 ]
Moving the register definitions to a global header file include/linux/designware_i2c.h. That removes the need to duplicate them in the adaptation layers for this driver outside of drivers/i2c/busses/. There is at least one of those in drivers/gpu/drm/xe/xe_i2c.c.
Stable-dep-of: f43fa4b8522b ("drm/xe/i2c: Fix the interrupt handling")
--- MAINTAINERS | 1 + drivers/i2c/busses/i2c-designware-common.c | 2 + drivers/i2c/busses/i2c-designware-core.h | 85 +--------------- drivers/i2c/busses/i2c-designware-master.c | 2 + drivers/i2c/busses/i2c-designware-slave.c | 2 + include/linux/designware_i2c.h | 107 +++++++++++++++++++++ 6 files changed, 116 insertions(+), 83 deletions(-) create mode 100644 include/linux/designware_i2c.h
MAINTAINERS +1 -0
@@ -26241,6 +26241,7 @@ R: Andy Shevchenko <[email protected]> L: [email protected] S: Supported F: drivers/i2c/busses/i2c-designware-* +F: include/linux/designware_i2c.h SYNOPSYS DESIGNWARE I2C DRIVER - AMDISP M: Nirujogi Pratap <[email protected]>
drivers/i2c/busses/i2c-designware-common.c +2 -0
@@ -33,6 +33,8 @@#include <linux/types.h> #include <linux/units.h> +#include <linux/designware_i2c.h> +#include "i2c-designware-core.h" #define DW_IC_DEFAULT_BUS_CAPACITANCE_pF 100
drivers/i2c/busses/i2c-designware-core.h +2 -83
112 lines not on this page · raw message
drivers/i2c/busses/i2c-designware-master.c +2 -0
@@ -25,6 +25,8 @@#include <linux/regmap.h> #include <linux/reset.h> +#include <linux/designware_i2c.h> +#include "i2c-designware-core.h" #define AMD_TIMEOUT_MIN_US 25
drivers/i2c/busses/i2c-designware-slave.c +2 -0
@@ -19,6 +19,8 @@#include <linux/pm_runtime.h> #include <linux/regmap.h> +#include <linux/designware_i2c.h> +#include "i2c-designware-core.h" int i2c_dw_reg_slave (struct i2c_client *slave)
include/linux/designware_i2c.h new file +107 -0
107 lines not on this page · raw message
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 3/3 drm/xe/i2c: Fix the interrupt handling
In reply to Sasha LevinFrom: Heikki Krogerus <[email protected]>
[ Upstream commit f43fa4b8522ba6038b77e86e5f0d94be35effcde ]
The platforms that support the interrupt from the I2C adapter can not handle the amount of interrupts the adapter generates because of the way the IRQ is routed in the hardware. The I2C controller driver has to be kept in polling mode because of that.
The AMC MCU can still generate critical alerts that have to be handled. The interrupt from SMBus Alert is left enabled and handled separately in the Xe. The alerts from the AMC will cause the device to be declared wedged for now.
--- drivers/gpu/drm/xe/Makefile | 4 +- drivers/gpu/drm/xe/regs/xe_i2c_regs.h | 2 + drivers/gpu/drm/xe/xe_amc.c | 197 ++++++++++++++++++++++++++ drivers/gpu/drm/xe/xe_amc.h | 25 ++++ drivers/gpu/drm/xe/xe_i2c.c | 128 +++++++---------- drivers/gpu/drm/xe/xe_i2c.h | 13 +- 6 files changed, 282 insertions(+), 87 deletions(-) create mode 100644 drivers/gpu/drm/xe/xe_amc.c create mode 100644 drivers/gpu/drm/xe/xe_amc.h
drivers/gpu/drm/xe/Makefile +3 -1
@@ -152,7 +152,9 @@ xe-y += xe_bb.o \ xe_wait_user_fence.o \ xe_wopcm.o -xe-$(CONFIG_I2C) += xe_i2c.o +xe-$(CONFIG_I2C) += xe_i2c.o \ + xe_amc.o + xe-$(CONFIG_DRM_XE_GPUSVM) += xe_svm.o xe-$(CONFIG_DRM_GPUSVM) += xe_userptr.o
drivers/gpu/drm/xe/regs/xe_i2c_regs.h +2 -0
@@ -20,4 +20,6 @@#define I2C_CONFIG_CMD XE_REG(I2C_CONFIG_SPACE_OFFSET + PCI_COMMAND)#define I2C_CONFIG_PMCSR XE_REG(I2C_CONFIG_SPACE_OFFSET + 0x84) +#define I2C_REG (reg) XE_REG((reg) + I2C_MEM_SPACE_OFFSET) +#endif /* _XE_I2C_REGS_H_ */
drivers/gpu/drm/xe/xe_amc.c new file +197 -0
197 lines not on this page · raw message
drivers/gpu/drm/xe/xe_amc.h new file +25 -0
@@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _XE_AMC_H_ +#define _XE_AMC_H_ + +#include <linux/i2c.h> + +#include "xe_device.h" + +struct xe_i2c ; + +static inline struct xe_device *i2c_adapter_to_xe_device (struct i2c_adapter *adapter) +{ +return kdev_to_xe_device (adapter->dev.parent->parent); +} + +static inline struct xe_device *i2c_client_to_xe_device (struct i2c_client *client) +{ +return i2c_adapter_to_xe_device (client->adapter); +} + +int xe_amc_init (struct xe_i2c *i2c); +void xe_amc_exit (struct xe_i2c *i2c); +void xe_amc_handle_alert (struct xe_i2c *i2c); + +#endif /* _XE_AMC_H_ */
drivers/gpu/drm/xe/xe_i2c.c +48 -80
209 lines not on this page · raw message
drivers/gpu/drm/xe/xe_i2c.h +7 -6
@@ -11,18 +11,21 @@ struct device;struct fwnode_handle ;struct i2c_adapter ;struct i2c_client ; -struct irq_domain ;struct platform_device ; +struct xe_amc ;struct xe_device ;struct xe_mmio ; -#define XE_I2C_MAX_CLIENTS 3 -#define XE_I2C_EP_COOKIE_DEVICE 0xde/* Endpoint Capabilities */ #define XE_I2C_EP_CAP_IRQ BIT(0) +enum XE_I2C_CLIENT { +XE_I2C_CLIENT_AMC =1 , +XE_I2C_MAX_CLIENTS =3 , +}; +struct xe_i2c_endpoint {u8 cookie;u8 capabilities;
@@ -38,13 +41,11 @@ struct xe_i2c {struct notifier_block bus_notifier;struct work_struct work; -struct irq_domain *irqdomain; -int adapter_irq; -struct xe_i2c_endpoint ep;struct device *drm_dev;struct xe_mmio *mmio; +struct xe_amc *amc; };#if IS_ENABLED (CONFIG_I2C )
Signature · 1 line
2.53.0