mirror of https://gitee.com/openkylin/linux.git
remoteproc: qcom: q6v5: shore up resource probe handling
Commitd5269c4553
("remoteproc: qcom: q6v5: Propagate EPROBE_DEFER") fixed up our probe code to handle -EPROBE_DEFER, but it ignored one of our interrupts, and it also didn't really handle all the other error codes you might get (e.g., with a bad DT definition). Handle those all explicitly. Fixes:d5269c4553
("remoteproc: qcom: q6v5: Propagate EPROBE_DEFER") Reviewed-by: Douglas Anderson <dianders@chromium.org> Signed-off-by: Brian Norris <briannorris@chromium.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
parent
6e6b1ada0c
commit
1e2517d126
|
@ -187,6 +187,14 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
|
|||
init_completion(&q6v5->stop_done);
|
||||
|
||||
q6v5->wdog_irq = platform_get_irq_byname(pdev, "wdog");
|
||||
if (q6v5->wdog_irq < 0) {
|
||||
if (q6v5->wdog_irq != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev,
|
||||
"failed to retrieve wdog IRQ: %d\n",
|
||||
q6v5->wdog_irq);
|
||||
return q6v5->wdog_irq;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, q6v5->wdog_irq,
|
||||
NULL, q6v5_wdog_interrupt,
|
||||
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
|
||||
|
@ -197,8 +205,13 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
|
|||
}
|
||||
|
||||
q6v5->fatal_irq = platform_get_irq_byname(pdev, "fatal");
|
||||
if (q6v5->fatal_irq == -EPROBE_DEFER)
|
||||
return -EPROBE_DEFER;
|
||||
if (q6v5->fatal_irq < 0) {
|
||||
if (q6v5->fatal_irq != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev,
|
||||
"failed to retrieve fatal IRQ: %d\n",
|
||||
q6v5->fatal_irq);
|
||||
return q6v5->fatal_irq;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, q6v5->fatal_irq,
|
||||
NULL, q6v5_fatal_interrupt,
|
||||
|
@ -210,8 +223,13 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
|
|||
}
|
||||
|
||||
q6v5->ready_irq = platform_get_irq_byname(pdev, "ready");
|
||||
if (q6v5->ready_irq == -EPROBE_DEFER)
|
||||
return -EPROBE_DEFER;
|
||||
if (q6v5->ready_irq < 0) {
|
||||
if (q6v5->ready_irq != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev,
|
||||
"failed to retrieve ready IRQ: %d\n",
|
||||
q6v5->ready_irq);
|
||||
return q6v5->ready_irq;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, q6v5->ready_irq,
|
||||
NULL, q6v5_ready_interrupt,
|
||||
|
@ -223,8 +241,13 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
|
|||
}
|
||||
|
||||
q6v5->handover_irq = platform_get_irq_byname(pdev, "handover");
|
||||
if (q6v5->handover_irq == -EPROBE_DEFER)
|
||||
return -EPROBE_DEFER;
|
||||
if (q6v5->handover_irq < 0) {
|
||||
if (q6v5->handover_irq != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev,
|
||||
"failed to retrieve handover IRQ: %d\n",
|
||||
q6v5->handover_irq);
|
||||
return q6v5->handover_irq;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, q6v5->handover_irq,
|
||||
NULL, q6v5_handover_interrupt,
|
||||
|
@ -237,8 +260,13 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
|
|||
disable_irq(q6v5->handover_irq);
|
||||
|
||||
q6v5->stop_irq = platform_get_irq_byname(pdev, "stop-ack");
|
||||
if (q6v5->stop_irq == -EPROBE_DEFER)
|
||||
return -EPROBE_DEFER;
|
||||
if (q6v5->stop_irq < 0) {
|
||||
if (q6v5->stop_irq != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev,
|
||||
"failed to retrieve stop-ack IRQ: %d\n",
|
||||
q6v5->stop_irq);
|
||||
return q6v5->stop_irq;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, q6v5->stop_irq,
|
||||
NULL, q6v5_stop_interrupt,
|
||||
|
|
Loading…
Reference in New Issue