X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Fbrcm2708%2Fpatches-4.19%2F950-0428-usb-dwc_otg-Clean-up-interrupt-claiming-code.patch;fp=target%2Flinux%2Fbrcm2708%2Fpatches-4.19%2F950-0428-usb-dwc_otg-Clean-up-interrupt-claiming-code.patch;h=0000000000000000000000000000000000000000;hb=7d7aa2fd924c27829ec25f825481554dd81bce97;hp=ba021f1e228fdec8bdf217fc4649f5becaa319aa;hpb=e7bfda2c243e66a75ff966ba04c28b1590b5d24c;p=openwrt%2Fstaging%2Fdedeckeh.git diff --git a/target/linux/brcm2708/patches-4.19/950-0428-usb-dwc_otg-Clean-up-interrupt-claiming-code.patch b/target/linux/brcm2708/patches-4.19/950-0428-usb-dwc_otg-Clean-up-interrupt-claiming-code.patch deleted file mode 100644 index ba021f1e22..0000000000 --- a/target/linux/brcm2708/patches-4.19/950-0428-usb-dwc_otg-Clean-up-interrupt-claiming-code.patch +++ /dev/null @@ -1,157 +0,0 @@ -From efb54d0f0445f3d279a7eae7395b566c96d080de Mon Sep 17 00:00:00 2001 -From: Phil Elwell -Date: Tue, 7 May 2019 17:23:41 +0100 -Subject: [PATCH] usb: dwc_otg: Clean up interrupt claiming code - -The FIQ/IRQ interrupt number identification code is scattered through -the dwc_otg driver. Rationalise it, simplifying the code and solving -an existing issue. - -See: https://github.com/raspberrypi/linux/issues/2612 - -Signed-off-by: Phil Elwell ---- - drivers/usb/host/dwc_otg/dwc_otg_driver.c | 18 +++++++++----- - drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c | 10 +++----- - drivers/usb/host/dwc_otg/dwc_otg_os_dep.h | 6 +++++ - drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c | 26 +++----------------- - 4 files changed, 25 insertions(+), 35 deletions(-) - ---- a/drivers/usb/host/dwc_otg/dwc_otg_driver.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_driver.c -@@ -624,11 +624,7 @@ static int dwc_otg_driver_remove( - * Free the IRQ - */ - if (otg_dev->common_irq_installed) { --#ifdef PLATFORM_INTERFACE -- free_irq(platform_get_irq(_dev, 0), otg_dev); --#else -- free_irq(_dev->irq, otg_dev); --#endif -+ free_irq(otg_dev->os_dep.irq_num, otg_dev); - } else { - DWC_DEBUGPL(DBG_ANY, "%s: There is no installed irq!\n", __func__); - return REM_RETVAL(-ENXIO); -@@ -905,7 +901,9 @@ static int dwc_otg_driver_probe( - */ - - #if defined(PLATFORM_INTERFACE) -- devirq = platform_get_irq(_dev, fiq_enable ? 0 : 1); -+ devirq = platform_get_irq_byname(_dev, fiq_enable ? "soft" : "usb"); -+ if (devirq < 0) -+ devirq = platform_get_irq(_dev, fiq_enable ? 0 : 1); - #else - devirq = _dev->irq; - #endif -@@ -922,6 +920,14 @@ static int dwc_otg_driver_probe( - } else { - dwc_otg_device->common_irq_installed = 1; - } -+ dwc_otg_device->os_dep.irq_num = devirq; -+ dwc_otg_device->os_dep.fiq_num = -EINVAL; -+ if (fiq_enable) { -+ int devfiq = platform_get_irq_byname(_dev, "usb"); -+ if (devfiq < 0) -+ devfiq = platform_get_irq(_dev, 1); -+ dwc_otg_device->os_dep.fiq_num = devfiq; -+ } - - #ifndef IRQF_TRIGGER_LOW - #if defined(LM_INTERFACE) || defined(PLATFORM_INTERFACE) ---- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c -@@ -492,7 +492,7 @@ static void hcd_init_fiq(void *cookie) - #endif - // Enable FIQ interrupt from USB peripheral - #ifdef CONFIG_ARM64 -- irq = platform_get_irq(otg_dev->os_dep.platformdev, 1); -+ irq = otg_dev->os_dep.fiq_num; - - if (irq < 0) { - DWC_ERROR("Can't get SIM-FIQ irq"); -@@ -509,7 +509,7 @@ static void hcd_init_fiq(void *cookie) - simfiq_irq = irq; - #else - #ifdef CONFIG_GENERIC_IRQ_MULTI_HANDLER -- irq = platform_get_irq(otg_dev->os_dep.platformdev, 1); -+ irq = otg_dev->os_dep.fiq_num; - #else - irq = INTERRUPT_VC_USB; - #endif -@@ -626,11 +626,7 @@ int hcd_init(dwc_bus_dev_t *_dev) - * allocates the DMA buffer pool, registers the USB bus, requests the - * IRQ line, and calls hcd_start method. - */ --#ifdef PLATFORM_INTERFACE -- retval = usb_add_hcd(hcd, platform_get_irq(_dev, fiq_enable ? 0 : 1), IRQF_SHARED); --#else -- retval = usb_add_hcd(hcd, _dev->irq, IRQF_SHARED); --#endif -+ retval = usb_add_hcd(hcd, otg_dev->os_dep.irq_num, IRQF_SHARED); - if (retval < 0) { - goto error2; - } ---- a/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h -+++ b/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h -@@ -102,6 +102,12 @@ typedef struct os_dependent { - /** Base address for MPHI peripheral */ - void *mphi_base; - -+ /** IRQ number (<0 if not valid) */ -+ int irq_num; -+ -+ /** FIQ number (<0 if not valid) */ -+ int fiq_num; -+ - #ifdef LM_INTERFACE - struct lm_device *lmdev; - #elif defined(PCI_INTERFACE) ---- a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c -@@ -1224,30 +1224,16 @@ int pcd_init(dwc_bus_dev_t *_dev) - /* - * Setup interupt handler - */ --#ifdef PLATFORM_INTERFACE - DWC_DEBUGPL(DBG_ANY, "registering handler for irq%d\n", -- platform_get_irq(_dev, fiq_enable ? 0 : 1)); -- retval = request_irq(platform_get_irq(_dev, fiq_enable ? 0 : 1), dwc_otg_pcd_irq, -+ otg_dev->os_dep.irq_num); -+ retval = request_irq(otg_dev->os_dep.irq_num, dwc_otg_pcd_irq, - IRQF_SHARED, gadget_wrapper->gadget.name, - otg_dev->pcd); - if (retval != 0) { -- DWC_ERROR("request of irq%d failed\n", -- platform_get_irq(_dev, fiq_enable ? 0 : 1)); -+ DWC_ERROR("request of irq%d failed\n", otg_dev->os_dep.irq_num); - free_wrapper(gadget_wrapper); - return -EBUSY; - } --#else -- DWC_DEBUGPL(DBG_ANY, "registering handler for irq%d\n", -- _dev->irq); -- retval = request_irq(_dev->irq, dwc_otg_pcd_irq, -- IRQF_SHARED | IRQF_DISABLED, -- gadget_wrapper->gadget.name, otg_dev->pcd); -- if (retval != 0) { -- DWC_ERROR("request of irq%d failed\n", _dev->irq); -- free_wrapper(gadget_wrapper); -- return -EBUSY; -- } --#endif - - dwc_otg_pcd_start(gadget_wrapper->pcd, &fops); - -@@ -1267,11 +1253,7 @@ void pcd_remove(dwc_bus_dev_t *_dev) - /* - * Free the IRQ - */ --#ifdef PLATFORM_INTERFACE -- free_irq(platform_get_irq(_dev, 0), pcd); --#else -- free_irq(_dev->irq, pcd); --#endif -+ free_irq(otg_dev->os_dep.irq_num, pcd); - dwc_otg_pcd_remove(otg_dev->pcd); - free_wrapper(gadget_wrapper); - otg_dev->pcd = 0;