mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 18:47:06 +00:00
lantiq: ltq-adsl-mei: use platform_get_irq to get irqs
This is required for linux-6.1 compatibility. IRQs are not automatically mapped from HW to virtual IRQ numbers when the IRQ domain is registered. This happens when the IRQ number is read from the device tree based on the IRQ domain from the device tree now. In kernel 5.15 it was done when the IRQ domain was registered. Signed-off-by: Martin Schiller <ms@dev.tdt.de>
This commit is contained in:
parent
faaa54161e
commit
daa109b42f
@ -61,8 +61,6 @@
|
|||||||
#define IFXMIPS_FUSE_BASE_ADDR IFX_FUSE_BASE_ADDR
|
#define IFXMIPS_FUSE_BASE_ADDR IFX_FUSE_BASE_ADDR
|
||||||
#define IFXMIPS_ICU_IM0_IER IFX_ICU_IM0_IER
|
#define IFXMIPS_ICU_IM0_IER IFX_ICU_IM0_IER
|
||||||
#define IFXMIPS_ICU_IM2_IER IFX_ICU_IM2_IER
|
#define IFXMIPS_ICU_IM2_IER IFX_ICU_IM2_IER
|
||||||
#define LTQ_MEI_INT IFX_MEI_INT
|
|
||||||
#define LTQ_MEI_DYING_GASP_INT IFX_MEI_DYING_GASP_INT
|
|
||||||
#define LTQ_MEI_BASE_ADDR IFX_MEI_SPACE_ACCESS
|
#define LTQ_MEI_BASE_ADDR IFX_MEI_SPACE_ACCESS
|
||||||
#define IFXMIPS_PMU_PWDCR IFX_PMU_PWDCR
|
#define IFXMIPS_PMU_PWDCR IFX_PMU_PWDCR
|
||||||
#define IFXMIPS_MPS_CHIPID IFX_MPS_CHIPID
|
#define IFXMIPS_MPS_CHIPID IFX_MPS_CHIPID
|
||||||
@ -86,28 +84,6 @@
|
|||||||
#define LTQ_PMU_BASE_ADDR 0x1F102000
|
#define LTQ_PMU_BASE_ADDR 0x1F102000
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_DANUBE
|
|
||||||
# define LTQ_MEI_INT (INT_NUM_IM1_IRL0 + 23)
|
|
||||||
# define LTQ_MEI_DYING_GASP_INT (INT_NUM_IM1_IRL0 + 21)
|
|
||||||
# define LTQ_USB_OC_INT (INT_NUM_IM4_IRL0 + 23)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_AMAZON_SE
|
|
||||||
# define LTQ_MEI_INT (INT_NUM_IM2_IRL0 + 9)
|
|
||||||
# define LTQ_MEI_DYING_GASP_INT (INT_NUM_IM2_IRL0 + 11)
|
|
||||||
# define LTQ_USB_OC_INT (INT_NUM_IM2_IRL0 + 20)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_AR9
|
|
||||||
# define LTQ_MEI_INT (INT_NUM_IM1_IRL0 + 23)
|
|
||||||
# define LTQ_MEI_DYING_GASP_INT (INT_NUM_IM1_IRL0 + 21)
|
|
||||||
# define LTQ_USB_OC_INT (INT_NUM_IM1_IRL0 + 28)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LTQ_MEI_INT
|
|
||||||
#error "Unknown Lantiq ARCH!"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define LTQ_RCU_RST_REQ_DFE (1 << 7)
|
#define LTQ_RCU_RST_REQ_DFE (1 << 7)
|
||||||
#define LTQ_RCU_RST_REQ_AFE (1 << 11)
|
#define LTQ_RCU_RST_REQ_AFE (1 << 11)
|
||||||
|
|
||||||
@ -1350,14 +1326,14 @@ IFX_MEI_RunAdslModem (DSL_DEV_Device_t *pDev)
|
|||||||
im2_register = (*LTQ_ICU_IM2_IER) & (1 << 20);
|
im2_register = (*LTQ_ICU_IM2_IER) & (1 << 20);
|
||||||
|
|
||||||
/* Turn off irq */
|
/* Turn off irq */
|
||||||
disable_irq (LTQ_USB_OC_INT);
|
disable_irq (pDev->nIrq[IFX_USB_OC]);
|
||||||
disable_irq (pDev->nIrq[IFX_DYING_GASP]);
|
disable_irq (pDev->nIrq[IFX_DYING_GASP]);
|
||||||
|
|
||||||
IFX_MEI_RunArc (pDev);
|
IFX_MEI_RunArc (pDev);
|
||||||
|
|
||||||
MEI_WAIT_EVENT_TIMEOUT (DSL_DEV_PRIVATE(pDev)->wait_queue_modemready, 1000);
|
MEI_WAIT_EVENT_TIMEOUT (DSL_DEV_PRIVATE(pDev)->wait_queue_modemready, 1000);
|
||||||
|
|
||||||
MEI_MASK_AND_ACK_IRQ (LTQ_USB_OC_INT);
|
MEI_MASK_AND_ACK_IRQ (pDev->nIrq[IFX_USB_OC]);
|
||||||
MEI_MASK_AND_ACK_IRQ (pDev->nIrq[IFX_DYING_GASP]);
|
MEI_MASK_AND_ACK_IRQ (pDev->nIrq[IFX_DYING_GASP]);
|
||||||
|
|
||||||
/* Re-enable irq */
|
/* Re-enable irq */
|
||||||
@ -2304,8 +2280,6 @@ IFX_MEI_InitDevice (int num)
|
|||||||
sizeof (smmu_mem_info_t) * MAX_BAR_REGISTERS);
|
sizeof (smmu_mem_info_t) * MAX_BAR_REGISTERS);
|
||||||
|
|
||||||
if (num == 0) {
|
if (num == 0) {
|
||||||
pDev->nIrq[IFX_DFEIR] = LTQ_MEI_INT;
|
|
||||||
pDev->nIrq[IFX_DYING_GASP] = LTQ_MEI_DYING_GASP_INT;
|
|
||||||
pDev->base_address = KSEG1 + LTQ_MEI_BASE_ADDR;
|
pDev->base_address = KSEG1 + LTQ_MEI_BASE_ADDR;
|
||||||
|
|
||||||
/* Power up MEI */
|
/* Power up MEI */
|
||||||
@ -2759,10 +2733,31 @@ static int ltq_mei_probe(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
static struct class *dsl_class;
|
static struct class *dsl_class;
|
||||||
|
DSL_DEV_Device_t *pDev;
|
||||||
|
|
||||||
pr_info("IFX MEI Version %ld.%02ld.%02ld\n", bsp_mei_version.major, bsp_mei_version.minor, bsp_mei_version.revision);
|
pr_info("IFX MEI Version %ld.%02ld.%02ld\n", bsp_mei_version.major, bsp_mei_version.minor, bsp_mei_version.revision);
|
||||||
|
|
||||||
for (i = 0; i < BSP_MAX_DEVICES; i++) {
|
for (i = 0; i < BSP_MAX_DEVICES; i++) {
|
||||||
|
pDev = &dsl_devices[i];
|
||||||
|
|
||||||
|
pDev->nIrq[IFX_DFEIR] = platform_get_irq(pdev, 0);
|
||||||
|
if (pDev->nIrq[IFX_DFEIR] < 0) {
|
||||||
|
IFX_MEI_EMSG("Failed to get DFEIR irq!\n");
|
||||||
|
return pDev->nIrq[IFX_DFEIR];
|
||||||
|
}
|
||||||
|
|
||||||
|
pDev->nIrq[IFX_DYING_GASP] = platform_get_irq(pdev, 1);
|
||||||
|
if (pDev->nIrq[IFX_DYING_GASP] < 0) {
|
||||||
|
IFX_MEI_EMSG("Failed to get DYING_GASP irq!\n");
|
||||||
|
return pDev->nIrq[IFX_DYING_GASP];
|
||||||
|
}
|
||||||
|
|
||||||
|
pDev->nIrq[IFX_USB_OC] = platform_get_irq(pdev, 2);
|
||||||
|
if (pDev->nIrq[IFX_USB_OC] < 0) {
|
||||||
|
IFX_MEI_EMSG("Failed to get USB_OC irq!\n");
|
||||||
|
return pDev->nIrq[IFX_USB_OC];
|
||||||
|
}
|
||||||
|
|
||||||
if (IFX_MEI_InitDevice (i) != 0) {
|
if (IFX_MEI_InitDevice (i) != 0) {
|
||||||
IFX_MEI_EMSG("Init device fail!\n");
|
IFX_MEI_EMSG("Init device fail!\n");
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
@ -515,9 +515,10 @@ typedef struct DSL_DEV_Device
|
|||||||
DSL_int_t nInUse; /* modem state, update by bsp driver, */
|
DSL_int_t nInUse; /* modem state, update by bsp driver, */
|
||||||
DSL_void_t *pPriv;
|
DSL_void_t *pPriv;
|
||||||
DSL_uint32_t base_address; /* mei base address */
|
DSL_uint32_t base_address; /* mei base address */
|
||||||
DSL_int_t nIrq[2]; /* irq number */
|
DSL_int_t nIrq[3]; /* irq number */
|
||||||
#define IFX_DFEIR 0
|
#define IFX_DFEIR 0
|
||||||
#define IFX_DYING_GASP 1
|
#define IFX_DYING_GASP 1
|
||||||
|
#define IFX_USB_OC 2
|
||||||
DSL_DEV_MeiDebug_t lop_debugwr; /* dying gasp */
|
DSL_DEV_MeiDebug_t lop_debugwr; /* dying gasp */
|
||||||
struct module *owner;
|
struct module *owner;
|
||||||
} DSL_DEV_Device_t; /* ifx_adsl_device_t */
|
} DSL_DEV_Device_t; /* ifx_adsl_device_t */
|
||||||
|
Loading…
Reference in New Issue
Block a user