From e636c8d336489bf3eed5878299e6cc045bbad077 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Tue, 20 Feb 2024 01:17:29 +0000 Subject: [PATCH] debug lk --- kernel/drivers/remoteproc/qcom_q6v5.c | 55 +++++++++++++++++++++++++------------------------------ 1 files changed, 25 insertions(+), 30 deletions(-) diff --git a/kernel/drivers/remoteproc/qcom_q6v5.c b/kernel/drivers/remoteproc/qcom_q6v5.c index ef61cb7..fd6fd36 100644 --- a/kernel/drivers/remoteproc/qcom_q6v5.c +++ b/kernel/drivers/remoteproc/qcom_q6v5.c @@ -15,6 +15,8 @@ #include <linux/remoteproc.h> #include "qcom_q6v5.h" +#define Q6V5_PANIC_DELAY_MS 200 + /** * qcom_q6v5_prepare() - reinitialize the qcom_q6v5 context before start * @q6v5: reference to qcom_q6v5 context to be reinitialized @@ -165,6 +167,24 @@ EXPORT_SYMBOL_GPL(qcom_q6v5_request_stop); /** + * qcom_q6v5_panic() - panic handler to invoke a stop on the remote + * @q6v5: reference to qcom_q6v5 context + * + * Set the stop bit and sleep in order to allow the remote processor to flush + * its caches etc for post mortem debugging. + * + * Return: 200ms + */ +unsigned long qcom_q6v5_panic(struct qcom_q6v5 *q6v5) +{ + qcom_smem_state_update_bits(q6v5->state, + BIT(q6v5->stop_bit), BIT(q6v5->stop_bit)); + + return Q6V5_PANIC_DELAY_MS; +} +EXPORT_SYMBOL_GPL(qcom_q6v5_panic); + +/** * qcom_q6v5_init() - initializer of the q6v5 common struct * @q6v5: handle to be initialized * @pdev: platform_device reference for acquiring resources @@ -189,13 +209,8 @@ 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); + if (q6v5->wdog_irq < 0) return q6v5->wdog_irq; - } ret = devm_request_threaded_irq(&pdev->dev, q6v5->wdog_irq, NULL, q6v5_wdog_interrupt, @@ -207,13 +222,8 @@ } q6v5->fatal_irq = platform_get_irq_byname(pdev, "fatal"); - 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); + if (q6v5->fatal_irq < 0) return q6v5->fatal_irq; - } ret = devm_request_threaded_irq(&pdev->dev, q6v5->fatal_irq, NULL, q6v5_fatal_interrupt, @@ -225,13 +235,8 @@ } q6v5->ready_irq = platform_get_irq_byname(pdev, "ready"); - 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); + if (q6v5->ready_irq < 0) return q6v5->ready_irq; - } ret = devm_request_threaded_irq(&pdev->dev, q6v5->ready_irq, NULL, q6v5_ready_interrupt, @@ -243,13 +248,8 @@ } q6v5->handover_irq = platform_get_irq_byname(pdev, "handover"); - 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); + if (q6v5->handover_irq < 0) return q6v5->handover_irq; - } ret = devm_request_threaded_irq(&pdev->dev, q6v5->handover_irq, NULL, q6v5_handover_interrupt, @@ -262,13 +262,8 @@ disable_irq(q6v5->handover_irq); q6v5->stop_irq = platform_get_irq_byname(pdev, "stop-ack"); - 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); + if (q6v5->stop_irq < 0) return q6v5->stop_irq; - } ret = devm_request_threaded_irq(&pdev->dev, q6v5->stop_irq, NULL, q6v5_stop_interrupt, -- Gitblit v1.6.2