On Wed, Dec 28, 2022 at 02:10:27PM +0530, Manivannan Sadhasivam wrote: > static int qcom_llcc_edac_probe(struct platform_device *pdev) > { > struct llcc_drv_data *llcc_driv_data = pdev->dev.platform_data; > @@ -355,22 +361,31 @@ static int qcom_llcc_edac_probe(struct platform_device *pdev) > edev_ctl->ctl_name = "llcc"; > edev_ctl->panic_on_ue = LLCC_ERP_PANIC_ON_UE; > > + /* Check if LLCC driver has passed ECC IRQ */ > + ecc_irq = llcc_driv_data->ecc_irq; > + if (ecc_irq > 0) { > + /* Use interrupt mode if IRQ is available */ > + edac_op_state = EDAC_OPSTATE_INT; > + } else { > + /* Fall back to polling mode otherwise */ > + edac_op_state = EDAC_OPSTATE_POLL; > + edev_ctl->poll_msec = ECC_POLL_MSEC; > + edev_ctl->edac_check = llcc_ecc_check; > + } > + > rc = edac_device_add_device(edev_ctl); > if (rc) > goto out_mem; > > platform_set_drvdata(pdev, edev_ctl); > > - /* Request for ecc irq */ > - ecc_irq = llcc_driv_data->ecc_irq; > - if (ecc_irq < 0) { > - rc = -ENODEV; > - goto out_dev; > - } > - rc = devm_request_irq(dev, ecc_irq, llcc_ecc_irq_handler, > + /* Request ECC IRQ if available */ > + if (ecc_irq > 0) { > + rc = devm_request_irq(dev, ecc_irq, llcc_ecc_irq_handler, > IRQF_TRIGGER_HIGH, "llcc_ecc", edev_ctl); You need to request the IRQ first and then set edac_op_state above. I.e., this devm_request_irq() needs to move in the if (ecc_irq > 0) branch above. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette