From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5731D38837E for ; Wed, 17 Jun 2026 21:51:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781733064; cv=none; b=Vx4aiLx56fuRuXMbLkSAESjCVXawMlyhG6VZXmDv7/RYrvq2FnLAzmlmT9yPjufleS2ABq2NYOdubybsDoqjuNSY8u/oC3aIBirrDP7+CHr4FB9PuHGkodrltMWwE2+ASTn9zFm7rfr5eX9zvj3E1657VGlT/WD1d3xb+sa6GSo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781733064; c=relaxed/simple; bh=7KG/wr3tZB65o52rm7arzniCaqAwjs39uLo3ORSiD2M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=monlw0n6SoOafuAU8m/4hU7YqOS3AFwoQSliHJEEcO2LozuIuwHjjher5AGQ8q3Zfn/Seo5PsxOmhyUT7MyVmvZiNbCUpeduwB/RZR5rbB8b5wKlY1BDcsBtGpldyA3udylp/GYiitPp62tPFLmmmA3x9isAhbRPOt+SO84i1mw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=U2uvY41y; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="U2uvY41y" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7EF831F00A3E; Wed, 17 Jun 2026 21:51:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781733063; bh=Ht63qIu/Z7J/kvsDmov21713vkHOPWmBEvLttnJU1cA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=U2uvY41yJxQ1ju3s1xLrdvDXiZgdYhugb5tGxNl7YCgHk9q0emIyL20c6cJGyjb57 KY9aruTnM/xK5xsj9bjEn5etyMJEMz6BVSkrFBKHq1z3IA6XDHK/fca8ifm2Ky2uHS ysl8P4oNvA6pDbULFv3M3IYFocCNpXKJvYzxTpPtWwp1t9M8vDQeLA8U7htxrLuxek siEFHjWyF2FI54wVama6NpwwAGFxJTItExg0Bshf1CF9hQg3ksLXTShxBQGod4Oidn tUgM2iqAY/oYqdNhRbBImOI43y2bjm2nTUTiC00QOSK+FKC+faoihtDxBSArUgJW7F eLgLbJjHGbv3Q== From: Sasha Levin To: stable@vger.kernel.org Cc: Bjorn Andersson , Mukesh Ojha , Srinivas Kandagatla , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.15.y 4/4] slimbus: qcom-ngd-ctrl: Register callbacks after creating the ngd Date: Wed, 17 Jun 2026 17:50:58 -0400 Message-ID: <20260617215058.418058-4-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617215058.418058-1-sashal@kernel.org> References: <2026061509-identical-efficient-87fe@gregkh> <20260617215058.418058-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Bjorn Andersson [ Upstream commit 2a9d50e9ea406e0c8735938484adc20515ef1b47 ] When the remoteproc starts in parallel with the NGD driver being probed, or the remoteproc is already up when the PDR lookup is being registered, or in the theoretical event that we get an interrupt from the hardware, these callbacks will operate on uninitialized data. This result in issues to boot the affected boards. One such example can be seen in the following fault, where qcom_slim_ngd_ssr_pdr_notify() schedules work on the NULL ngd_up_work. [ 21.858578] ------------[ cut here ]------------ [ 21.858745] WARNING: kernel/workqueue.c:2338 at __queue_work+0x5e0/0x790, CPU#2: kworker/2:2/116 ... [ 21.859251] Call trace: [ 21.859255] __queue_work+0x5e0/0x790 (P) [ 21.859265] queue_work_on+0x6c/0xf0 [ 21.859273] qcom_slim_ngd_ssr_pdr_notify+0x110/0x150 [slim_qcom_ngd_ctrl] [ 21.859304] qcom_slim_ngd_ssr_notify+0x24/0x40 [slim_qcom_ngd_ctrl] [ 21.859318] notifier_call_chain+0xa4/0x230 [ 21.859329] srcu_notifier_call_chain+0x64/0xb8 [ 21.859338] ssr_notify_start+0x40/0x78 [qcom_common] [ 21.859355] rproc_start+0x130/0x230 [ 21.859367] rproc_boot+0x3d4/0x518 ... Move the enablement of interrupts, and the registration of SSR and PDR until after the NGD device has been registered. This could be further refined by moving initialization to the control driver probe and by removing the platform driver model from the picture. Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver") Cc: stable@vger.kernel.org Reviewed-by: Mukesh Ojha Signed-off-by: Bjorn Andersson Signed-off-by: Srinivas Kandagatla Link: https://patch.msgid.link/20260530204421.116824-6-srini@kernel.org Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/slimbus/qcom-ngd-ctrl.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctrl.c index 0d118998f00ab8..9584303c5518fb 100644 --- a/drivers/slimbus/qcom-ngd-ctrl.c +++ b/drivers/slimbus/qcom-ngd-ctrl.c @@ -1545,17 +1545,13 @@ static int qcom_slim_ngd_ctrl_probe(struct platform_device *pdev) } ret = devm_request_irq(dev, res->start, qcom_slim_ngd_interrupt, - IRQF_TRIGGER_HIGH, "slim-ngd", ctrl); + IRQF_TRIGGER_HIGH | IRQF_NO_AUTOEN, "slim-ngd", + ctrl); if (ret) { dev_err(&pdev->dev, "request IRQ failed\n"); return ret; } - ctrl->nb.notifier_call = qcom_slim_ngd_ssr_notify; - ctrl->notifier = qcom_register_ssr_notifier("lpass", &ctrl->nb); - if (IS_ERR(ctrl->notifier)) - return PTR_ERR(ctrl->notifier); - ctrl->dev = dev; ctrl->framer.rootfreq = SLIM_ROOT_FREQ >> 3; ctrl->framer.superfreq = @@ -1579,23 +1575,35 @@ static int qcom_slim_ngd_ctrl_probe(struct platform_device *pdev) ctrl->pdr = pdr_handle_alloc(slim_pd_status, ctrl); if (IS_ERR(ctrl->pdr)) { dev_err(dev, "Failed to init PDR handle\n"); - ret = PTR_ERR(ctrl->pdr); - goto err_unregister_ssr; + return PTR_ERR(ctrl->pdr); } + ret = of_qcom_slim_ngd_register(dev, ctrl); + if (ret) + goto err_pdr_release; + pds = pdr_add_lookup(ctrl->pdr, "avs/audio", "msm/adsp/audio_pd"); if (IS_ERR(pds) && PTR_ERR(pds) != -EALREADY) { ret = PTR_ERR(pds); dev_err(dev, "pdr add lookup failed: %d\n", ret); - goto err_pdr_release; + goto err_unregister_ngd; } - return of_qcom_slim_ngd_register(dev, ctrl); + ctrl->nb.notifier_call = qcom_slim_ngd_ssr_notify; + ctrl->notifier = qcom_register_ssr_notifier("lpass", &ctrl->nb); + if (IS_ERR(ctrl->notifier)) { + ret = PTR_ERR(ctrl->notifier); + goto err_unregister_ngd; + } + enable_irq(res->start); + + return 0; + +err_unregister_ngd: + qcom_slim_ngd_unregister(ctrl); err_pdr_release: pdr_handle_release(ctrl->pdr); -err_unregister_ssr: - qcom_unregister_ssr_notifier(ctrl->notifier, &ctrl->nb); return ret; } -- 2.53.0