patch "usb: typec: tcpci_rt1711h: avoid screaming irq causing boot hangs" added to usb-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
usb: typec: tcpci_rt1711h: avoid screaming irq causing boot hangs
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 302c570bf36e997d55ad0d60628a2feec76954a4 Mon Sep 17 00:00:00 2001
From: Li Jun <[email protected]>
Date: Thu, 4 Jun 2020 19:21:18 +0800
Subject: usb: typec: tcpci_rt1711h: avoid screaming irq causing boot hangs
John reported screaming irq caused by rt1711h when system boot[1], this is because irq request is done before tcpci_register_port(), so the chip->tcpci has not been setup, irq handler is entered but can't do anything, this patch is to address this by moving the irq request after tcpci_register_port().
[1] https://lore.kernel.org/linux-usb/[email protected]
--- drivers/usb/typec/tcpm/tcpci_rt1711h.c | 31 +++++++++----------------- 1 file changed, 10 insertions(+), 21 deletions(-)
drivers/usb/typec/tcpm/tcpci_rt1711h.c +10 -21
@@ -179,26 +179,6 @@ static irqreturn_t rt1711h_irq(int irq, void *dev_id)return tcpci_irq (chip->tcpci); } -static int rt1711h_init_alert (struct rt1711h_chip *chip, -struct i2c_client *client) -{ -int ret; - -/* Disable chip interrupts before requesting irq */ - ret =rt1711h_write16 (chip,TCPC_ALERT_MASK ,0 ); -if (ret <0 ) -return ret; - - ret =devm_request_threaded_irq (chip->dev, client->irq,NULL , - rt1711h_irq, -IRQF_ONESHOT |IRQF_TRIGGER_LOW , -dev_name (chip->dev), chip); -if (ret <0 ) -return ret; -enable_irq_wake (client->irq); -return 0 ; -} -static int rt1711h_sw_reset (struct rt1711h_chip *chip) {int ret;
@@ -260,7 +240,8 @@ static int rt1711h_probe(struct i2c_client *client,if (ret <0 )return ret; - ret =rt1711h_init_alert (chip, client); +/* Disable chip interrupts before requesting irq */ + ret =rt1711h_write16 (chip,TCPC_ALERT_MASK ,0 );if (ret <0 )return ret;
@@ -271,6 +252,14 @@ static int rt1711h_probe(struct i2c_client *client,if (IS_ERR_OR_NULL (chip->tcpci))return PTR_ERR (chip->tcpci); + ret =devm_request_threaded_irq (chip->dev, client->irq,NULL , + rt1711h_irq, +IRQF_ONESHOT |IRQF_TRIGGER_LOW , +dev_name (chip->dev), chip); +if (ret <0 ) +return ret; +enable_irq_wake (client->irq); +return 0 ; }
Signature · 1 line
2.27.0