From nobody Sat Jul 25 05:29:19 2026 Received: from flow-b8-smtp.messagingengine.com (flow-b8-smtp.messagingengine.com [202.12.124.143]) (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 04B1A2F8E9E; Fri, 17 Jul 2026 08:52:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278378; cv=none; b=uWykIiwdP6COQLIX66IcuLPrAt5zUzdn6xCOvMUweOeUHJL5ooi3IthQh75lCW5Tqa0rdCNPtosdVhgDVm/1gq4JMP7arFfFGy157C1wU6yAUnWPKLrIBiqtBiVMqkY0cesElCNXghOLqqTb5xzYLIyU5I8WfFyW2kW4aDStvto= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278378; c=relaxed/simple; bh=3hmQwi5CLbuGAcazcePiREkww0em2ryjBUjCW/OwpFI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LxuXzTqwpfGipVajbKTc6brPJF3u1awJPdWSiR5n1XfLKsiWIugxLeuRZ1ID8+qxphsL8dMM7lcatafoZpVn98CLRcn2zLkCYYKgNX2l8cJyufgqL9mEAY66U2R37dnnC0ofwUU4IW62COXGxRhxMBF613lc3yq5QVVoAeGkxek= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com; spf=pass smtp.mailfrom=gahingwoo.com; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b=EV3Uv/Za; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=e0rPuvGY; arc=none smtp.client-ip=202.12.124.143 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b="EV3Uv/Za"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="e0rPuvGY" Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailflow.stl.internal (Postfix) with ESMTP id E7F6D13002AA; Fri, 17 Jul 2026 04:52:55 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Fri, 17 Jul 2026 04:52:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gahingwoo.com; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784278375; x= 1784281975; bh=LFrLmXfIbuifi2fq9urlAuWTT2eNH/ystm/PsWX4Rsw=; b=E V3Uv/ZaXaDIR0evVbL2ZKAAyiBWjjBDsEks1MC/sAcg31yvfdW84P+aIHVpKvLE2 5WQgOiPBVBAW8MVXndJlSy+QFbf9TvQGSyY0z4CnEw1s1p94TJer+Yv6sVvRkdOz R/OkzU3SvuJW8+RtF4sU1miYzRjyEMN5rptyTTvcrSBq7Ike+1QXy5Iocflxrqq0 nD7dYD3ofv2tlaIglX48Mkq+tZMrMlzsr5IXVwprnNzZ/thnQ+u3YTGK0JdjoMsW 8iqjiWZs7Bbl3ZIpipI0j7IJf2QBLiL25zgO0P9bUDQoI/fCjznHVB17WoGLI85q 5MWf6+uK5gg90MrXkCSrg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784278375; x=1784281975; bh=L FrLmXfIbuifi2fq9urlAuWTT2eNH/ystm/PsWX4Rsw=; b=e0rPuvGYlrksLwfdl jy/96FW8ma3v8AHKR1eXHmnAIZEKt6Vk9OAYOkfbblwUugQw0urxlHVNXwTSutlu anGPIckB+OFzpjA9qOAR3IYwx9ddkvY3oCV67mCNXtqSSFBNLDsrBLOwj/gOmIMy oO5s2m1Txoife8SnCq03c8MsKBOGeHiEo4Yw73DXAjYcXWfIfmGIbxleyhdhoidW RMqF6G6ODTrLyrmXAJHmARnTpm0GNPwbCudXcW4vzDdsCxLje/mkyQz+Q6SyTQXS iqXR8HKmpxTkH+/vBKPu8dL03WQJ9zig1y9ZTAW2dSO83RxMkgJc5nLP6z5J2piF xATxA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFKgLZg3eiKsItrAZog+DFhH3PPGLnzSnarCUeNKzO8IlnkZCjNB3sgT8GthLC1Xg IvJQkADwqDptr+dTHsfASZ9bA9wWe6sAoTiHGLBbDiihg2eC/DPK2ZHSML9NDLc2O58opm CO6H5WnAZOuDssEHAPojH8O3zZqDBaVxFzE2kFvvabx5f4bBwDbLFpZQczL6I/+mzdU8bo ZVSoTIA7NlZXOmB47dpGcyMee9KDWKTuVBnimx6RlmicnM3hpX6uzk/z/B24Lcj1RBpaDS l4u9/GT6IMgnzHKW4PFFlEOcllaPmqnYFWQrwgvgk5NV8FQsar8tOlZDrFX/HzosSN71Zw gquTW+mRuJCPCb/HoYnfYc+lVw5vZjOMFsVkf2QGtzOtzkP0kW3N7kInZudhFok6gvvyu7 G6bWB9XjeBc9lWnGDGoFPxRFkzCZnipvlchYNzXCQk/HJ0zsbbchLCU1FPs0/xJ/Uj3emd tbSfvW59LNC64zEVg49ugpPqJdowz1RFoiQljUecHEUzKTTiNXiq6xsDIJ7MDDLkKDR+69 vcNOBgAvo43QhGaaJ7DrJmKAONAONCw7PvTw52/I3+usBUzAekrmHMSvEabvdC/keNyUEW 3abDD63U9qULL85uK8uaedmXJBaLR5WA4P8uyCydn4HP7/SpAnHA2RKaVtcA X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 17 Jul 2026 04:52:49 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, iommu@lists.linux.dev, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: [RFC PATCH 1/9] dt-bindings: npu: rockchip: add rockchip,rk3576-rknn-core Date: Fri, 17 Jul 2026 20:50:39 +1200 Message-ID: <20260717085220.3212274-2-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260717085220.3212274-1-gahing@gahingwoo.com> References: <20260717085220.3212274-1-gahing@gahingwoo.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Document the RK3576 NPU core: add rockchip,rk3576-rknn-core to the compatible enum and drop sram-supply from required (RK3576 has no NPU SRAM supply). Signed-off-by: Jiaxing Hu --- .../devicetree/bindings/npu/rockchip,rk3588-rknn-core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/npu/rockchip,rk3588-rknn-cor= e.yaml b/Documentation/devicetree/bindings/npu/rockchip,rk3588-rknn-core.ya= ml index caca2a490..d904db3bf 100644 --- a/Documentation/devicetree/bindings/npu/rockchip,rk3588-rknn-core.yaml +++ b/Documentation/devicetree/bindings/npu/rockchip,rk3588-rknn-core.yaml @@ -21,6 +21,7 @@ properties: =20 compatible: enum: + - rockchip,rk3576-rknn-core - rockchip,rk3588-rknn-core =20 reg: @@ -75,7 +76,6 @@ required: - resets - reset-names - npu-supply - - sram-supply =20 additionalProperties: false =20 --=20 2.43.0 From nobody Sat Jul 25 05:29:19 2026 Received: from flow-b8-smtp.messagingengine.com (flow-b8-smtp.messagingengine.com [202.12.124.143]) (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 3A874376BEF; Fri, 17 Jul 2026 08:53:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278399; cv=none; b=XzsARZxnSHlU0ekQqu0EswU22GjYpq9fjDeS242bbMMLHZgc6l84XIAqhw8AW/atB3vhZET1LKeNKVtjz+oJ94oCpl6WMIIgIbVgkIWa+d8IM5RnlbRJWZ/K62H//Mv6+pYW2TGApBcAqvgL+CsmOoqR8Rp/XZqVjZ4QmyCCJhI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278399; c=relaxed/simple; bh=taecRovNMmTTM6gLwgWpEaHTa4pE0pHZP0lhZbmrF+k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bA6ahRltXe+pQC3B2D/hSqTyn73Hs8Xb0/Wzm/GYXJEkfK/OpRBn2O5ki+tTP/KTsSzV2Tajs6cGSUg7NwIdaICHwXf2Mxyvm80ZjpOAo//khkmeG6DVXrxr7bSeRPmn8t8K3RxH/u/PUntyyVB4iZF5nxhXCD9BdRt8p4Vve2o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com; spf=pass smtp.mailfrom=gahingwoo.com; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b=TRagtDUS; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=GdCMXrAB; arc=none smtp.client-ip=202.12.124.143 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b="TRagtDUS"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="GdCMXrAB" Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailflow.stl.internal (Postfix) with ESMTP id 3162C13002B6; Fri, 17 Jul 2026 04:53:17 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Fri, 17 Jul 2026 04:53:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gahingwoo.com; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784278397; x= 1784281997; bh=wXvq1c4qizRzzY1hTlhX58r8EY1LF4K2+vKFMFHqhy0=; b=T RagtDUSUeUPQre/8I1sDc8VWHkrxSvEFA4F/ZI/QbgY2D3gl7QU19W/Ji/+poel0 37jFDCYrmgkHriwMl9nxI0UhFnysRL+O+baSLvKctz86N/ya2QJeF06/RUxS6sy2 5LHoL+idL1cvl/aDLLKcsgZ65y5zEZnXnm5ppRykrHQYZdlev6zqId8EwicGCOwG ADM+sEkGCVGkcZk1Ufq57FX1H4xfa4rBCK/eMF5k73u0487718JIhAUqHzct8mQb SkdCz5OFiWwN2nOLuVdP0omOsK13xA7/0vf+z4t9rZH/DuXLg0q7G45dk4edR7jF 0Dn1t+tK9Zm8gAcE5EW7A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784278397; x=1784281997; bh=w Xvq1c4qizRzzY1hTlhX58r8EY1LF4K2+vKFMFHqhy0=; b=GdCMXrABS7a/9BKEa 7kWeh8VeAZTV4XoiqnD+186ZbuAVkn8LAv4ykLmPMDa9I54XNUcSYZyv31ogpjb4 Vk7SPCPoPb75NsP6D3Ai+MsudFkdKWkNyhEYaQ3tF6b6CgIKxKT2T0uwyG9n6Ag0 JVKdMbBoyiLpCHHNe716h07i3gHZchw28ChszIZJc1OnJswr1nsI9ZgptoTLLPIT wrodD6Jc5u6ewl4cCnd+4WrkTUynf4MH50o/8MeUNxPPKAhlAo+qrW0Qs5EN+U26 nhDtTpWtnHEi+YDXELEhBFzybpSnKJR+MQZJT5ev3mXAWz8vNCAHgSoje3ZyVAkN 8BwBg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTG16mKV94tZPvKsg+wPyPbpns4AHanTkNBYO5Ham9g0s2KCPd/AQbQlnJWsv8rFsU x0B5kDLRFWMrpIoCTawm5+fWdymCJG66EACayyvKZ8t7ETpdXAjykbi7Ep5TEu4b14/WMe BGMFOJX3RtCigXWJ3iA64sUC22dsLNtIqxF3R+iE8n5Usvm0JKu22WmUN+I0FI3QiO03EO kA4A29l52nNb+rlPotr+Uofb1AURlU4GE9cJ70aJXqGjwmP+F6dkiqiMbPVNZVe3dblSOV jij6t+VXs0YJYSv4g+8uYKwnr7PUgBHjYqyHkeqCYxGc2wks7xm53FWYu50I0/g2y1SxQz Ue2OKCz3PQeAISfebD0h21DtDEo2WwbQ3Y9DEVsIQfcAu1f29kVzErW7W3f98VepYNEw/F K//IU/yNpvWZ7FNC2m5taTcEQsN4N3gQ2NqItVsNb2MELCDv6yZ3oOASAnMS52J1ZIehgq RN1E0SH3my7K6hV1GSPzgbqdEXwSNGv+El8RRrBKvGfF02YkrC7wnGtydb9BINaQUvSgR8 DytcuOvkmhxSxXrTQbAfMJJKJUMPGY25HzL/kv8UEIi6Uir9QPnDigIz1BS07bjkUVJduf 9Hyk3PnwbjTmIO/FrimSY4eo06vOq42fIoL2ndVInMdSGJTPfpaAOdm7FIOA X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 17 Jul 2026 04:53:11 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, iommu@lists.linux.dev, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: [RFC PATCH 2/9] pmdomain/rockchip: add optional per-domain power-on settle delay Date: Fri, 17 Jul 2026 20:50:40 +1200 Message-ID: <20260717085220.3212274-3-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260717085220.3212274-1-gahing@gahingwoo.com> References: <20260717085220.3212274-1-gahing@gahingwoo.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The RK3576 NPU domains need a short settle time after the idle request is released before the QoS registers behind the domain are written: restoring QoS immediately after de-idle can raise an SError on the register access while the NoC is still settling (observed on ROCK 4D as a panic inside rockchip_pd_power() during NPU runtime-PM cycling). The vendor kernel handles this with a per-domain delay_us field applied between the de-idle request and the QoS restore, carrying 15us for the RK3576 NPUTOP domain. Mirror that: add delay_us to rockchip_domain_info, honor it in rockchip_pd_power() right before rockchip_pmu_restore_qos(), and set 15us for NPUTOP, NPU0 and NPU1 (the two core domains power-cycle constantly under runtime PM and showed the same symptom during bring-up). All other domains keep 0, so nothing changes for them. Signed-off-by: Jiaxing Hu --- drivers/pmdomain/rockchip/pm-domains.c | 51 ++++++++++++++------------ 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rock= chip/pm-domains.c index 490bbb1d1..1787f62ba 100644 --- a/drivers/pmdomain/rockchip/pm-domains.c +++ b/drivers/pmdomain/rockchip/pm-domains.c @@ -59,6 +59,7 @@ struct rockchip_domain_info { u32 pwr_offset; u32 mem_offset; u32 req_offset; + u32 delay_us; }; =20 struct rockchip_pmu_info { @@ -185,7 +186,7 @@ struct rockchip_pmu { .need_regulator =3D regulator, \ } =20 -#define DOMAIN_M_O_R_G(_name, p_offset, pwr, status, m_offset, m_status, r= _status, r_offset, req, idle, ack, g_mask, wakeup) \ +#define DOMAIN_M_O_R_G(_name, p_offset, pwr, status, m_offset, m_status, r= _status, r_offset, req, idle, ack, g_mask, delay, wakeup) \ { \ .name =3D _name, \ .pwr_offset =3D p_offset, \ @@ -200,6 +201,7 @@ struct rockchip_pmu { .req_mask =3D (req), \ .idle_mask =3D (idle), \ .clk_ungate_mask =3D (g_mask), \ + .delay_us =3D (delay), \ .ack_mask =3D (ack), \ .active_wakeup =3D wakeup, \ } @@ -244,8 +246,8 @@ struct rockchip_pmu { #define DOMAIN_RK3568(name, pwr, req, wakeup) \ DOMAIN_M(name, pwr, pwr, req, req, req, wakeup) =20 -#define DOMAIN_RK3576(name, p_offset, pwr, status, r_status, r_offset, req= , idle, g_mask, wakeup) \ - DOMAIN_M_O_R_G(name, p_offset, pwr, status, 0, r_status, r_status, r_offs= et, req, idle, idle, g_mask, wakeup) +#define DOMAIN_RK3576(name, p_offset, pwr, status, r_status, r_offset, req= , idle, g_mask, delay, wakeup) \ + DOMAIN_M_O_R_G(name, p_offset, pwr, status, 0, r_status, r_status, r_offs= et, req, idle, idle, g_mask, delay, wakeup) =20 /* * Dynamic Memory Controller may need to coordinate with us -- see @@ -612,7 +614,6 @@ static int rockchip_do_pmu_set_power_domain(struct rock= chip_pm_domain *pd, return ret; } =20 - ret =3D readx_poll_timeout_atomic(rockchip_pmu_domain_is_on, pd, is_on, is_on =3D=3D on, 0, 10000); if (ret) { @@ -667,6 +668,9 @@ static int rockchip_pd_power(struct rockchip_pm_domain = *pd, bool power_on) if (ret < 0) goto out; =20 + if (pd->info->delay_us) + udelay(pd->info->delay_us); + rockchip_pmu_restore_qos(pd); } =20 @@ -1286,25 +1290,26 @@ static const struct rockchip_domain_info rk3568_pm_= domains[] =3D { }; =20 static const struct rockchip_domain_info rk3576_pm_domains[] =3D { - [RK3576_PD_NPU] =3D DOMAIN_RK3576("npu", 0x0, BIT(0), BIT(0), 0, = 0x0, 0, 0, 0, false), - [RK3576_PD_NVM] =3D DOMAIN_RK3576("nvm", 0x0, BIT(6), 0, BIT(6)= , 0x4, BIT(2), BIT(18), BIT(2), false), - [RK3576_PD_SDGMAC] =3D DOMAIN_RK3576("sdgmac", 0x0, BIT(7), 0, BIT(= 7), 0x4, BIT(1), BIT(17), 0x6, false), - [RK3576_PD_AUDIO] =3D DOMAIN_RK3576("audio", 0x0, BIT(8), 0, BIT(8= ), 0x4, BIT(0), BIT(16), BIT(0), false), - [RK3576_PD_PHP] =3D DOMAIN_RK3576("php", 0x0, BIT(9), 0, BIT(9)= , 0x0, BIT(15), BIT(15), BIT(15), false), - [RK3576_PD_SUBPHP] =3D DOMAIN_RK3576("subphp", 0x0, BIT(10), 0, BIT(= 10), 0x0, 0, 0, 0, false), - [RK3576_PD_VOP] =3D DOMAIN_RK3576("vop", 0x0, BIT(11), 0, BIT(11= ), 0x0, 0x6000, 0x6000, 0x6000, false), - [RK3576_PD_VO1] =3D DOMAIN_RK3576("vo1", 0x0, BIT(14), 0, BIT(14= ), 0x0, BIT(12), BIT(12), 0x7000, false), - [RK3576_PD_VO0] =3D DOMAIN_RK3576("vo0", 0x0, BIT(15), 0, BIT(15= ), 0x0, BIT(11), BIT(11), 0x6800, false), - [RK3576_PD_USB] =3D DOMAIN_RK3576("usb", 0x4, BIT(0), 0, BIT(16= ), 0x0, BIT(10), BIT(10), 0x6400, true), - [RK3576_PD_VI] =3D DOMAIN_RK3576("vi", 0x4, BIT(1), 0, BIT(17)= , 0x0, BIT(9), BIT(9), BIT(9), false), - [RK3576_PD_VEPU0] =3D DOMAIN_RK3576("vepu0", 0x4, BIT(2), 0, BIT(1= 8), 0x0, BIT(7), BIT(7), 0x280, false), - [RK3576_PD_VEPU1] =3D DOMAIN_RK3576("vepu1", 0x4, BIT(3), 0, BIT(1= 9), 0x0, BIT(8), BIT(8), BIT(8), false), - [RK3576_PD_VDEC] =3D DOMAIN_RK3576("vdec", 0x4, BIT(4), 0, BIT(20= ), 0x0, BIT(6), BIT(6), BIT(6), false), - [RK3576_PD_VPU] =3D DOMAIN_RK3576("vpu", 0x4, BIT(5), 0, BIT(21= ), 0x0, BIT(5), BIT(5), BIT(5), false), - [RK3576_PD_NPUTOP] =3D DOMAIN_RK3576("nputop", 0x4, BIT(6), 0, BIT(= 22), 0x0, 0x18, 0x18, 0x18, false), - [RK3576_PD_NPU0] =3D DOMAIN_RK3576("npu0", 0x4, BIT(7), 0, BIT(23= ), 0x0, BIT(1), BIT(1), 0x1a, false), - [RK3576_PD_NPU1] =3D DOMAIN_RK3576("npu1", 0x4, BIT(8), 0, BIT(24= ), 0x0, BIT(2), BIT(2), 0x1c, false), - [RK3576_PD_GPU] =3D DOMAIN_RK3576("gpu", 0x4, BIT(9), 0, BIT(25= ), 0x0, BIT(0), BIT(0), BIT(0), false), + /* name p_offset pwr = status r_status r_offset req idle g_mask delay wakeup */ + [RK3576_PD_NPU] =3D DOMAIN_RK3576("npu", 0x0, BIT(0), BIT(0), 0, = 0x0, 0, 0, 0, 0, false), + [RK3576_PD_NVM] =3D DOMAIN_RK3576("nvm", 0x0, BIT(6), 0, BIT(6)= , 0x4, BIT(2), BIT(18), BIT(2), 0, false), + [RK3576_PD_SDGMAC] =3D DOMAIN_RK3576("sdgmac", 0x0, BIT(7), 0, BIT(= 7), 0x4, BIT(1), BIT(17), 0x6, 0, false), + [RK3576_PD_AUDIO] =3D DOMAIN_RK3576("audio", 0x0, BIT(8), 0, BIT(8= ), 0x4, BIT(0), BIT(16), BIT(0), 0, false), + [RK3576_PD_PHP] =3D DOMAIN_RK3576("php", 0x0, BIT(9), 0, BIT(9)= , 0x0, BIT(15), BIT(15), BIT(15), 0, false), + [RK3576_PD_SUBPHP] =3D DOMAIN_RK3576("subphp", 0x0, BIT(10), 0, BIT(= 10), 0x0, 0, 0, 0, 0, false), + [RK3576_PD_VOP] =3D DOMAIN_RK3576("vop", 0x0, BIT(11), 0, BIT(11= ), 0x0, 0x6000, 0x6000, 0x6000, 0, false), + [RK3576_PD_VO1] =3D DOMAIN_RK3576("vo1", 0x0, BIT(14), 0, BIT(14= ), 0x0, BIT(12), BIT(12), 0x7000, 0, false), + [RK3576_PD_VO0] =3D DOMAIN_RK3576("vo0", 0x0, BIT(15), 0, BIT(15= ), 0x0, BIT(11), BIT(11), 0x6800, 0, false), + [RK3576_PD_USB] =3D DOMAIN_RK3576("usb", 0x4, BIT(0), 0, BIT(16= ), 0x0, BIT(10), BIT(10), 0x6400, 0, true), + [RK3576_PD_VI] =3D DOMAIN_RK3576("vi", 0x4, BIT(1), 0, BIT(17)= , 0x0, BIT(9), BIT(9), BIT(9), 0, false), + [RK3576_PD_VEPU0] =3D DOMAIN_RK3576("vepu0", 0x4, BIT(2), 0, BIT(1= 8), 0x0, BIT(7), BIT(7), 0x280, 0, false), + [RK3576_PD_VEPU1] =3D DOMAIN_RK3576("vepu1", 0x4, BIT(3), 0, BIT(1= 9), 0x0, BIT(8), BIT(8), BIT(8), 0, false), + [RK3576_PD_VDEC] =3D DOMAIN_RK3576("vdec", 0x4, BIT(4), 0, BIT(20= ), 0x0, BIT(6), BIT(6), BIT(6), 0, false), + [RK3576_PD_VPU] =3D DOMAIN_RK3576("vpu", 0x4, BIT(5), 0, BIT(21= ), 0x0, BIT(5), BIT(5), BIT(5), 0, false), + [RK3576_PD_NPUTOP] =3D DOMAIN_RK3576("nputop", 0x4, BIT(6), 0, BIT(= 22), 0x0, 0x18, 0x18, 0x18, 15, false), + [RK3576_PD_NPU0] =3D DOMAIN_RK3576("npu0", 0x4, BIT(7), 0, BIT(23= ), 0x0, BIT(1), BIT(1), 0x1a, 15, false), + [RK3576_PD_NPU1] =3D DOMAIN_RK3576("npu1", 0x4, BIT(8), 0, BIT(24= ), 0x0, BIT(2), BIT(2), 0x1c, 15, false), + [RK3576_PD_GPU] =3D DOMAIN_RK3576("gpu", 0x4, BIT(9), 0, BIT(25= ), 0x0, BIT(0), BIT(0), BIT(0), 0, false), }; =20 static const struct rockchip_domain_info rk3588_pm_domains[] =3D { --=20 2.43.0 From nobody Sat Jul 25 05:29:19 2026 Received: from flow-b8-smtp.messagingengine.com (flow-b8-smtp.messagingengine.com [202.12.124.143]) (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 AFA52309EF9; Fri, 17 Jul 2026 08:53:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278414; cv=none; b=g54qBWguvbdmdxQwdLu6RXPm/xgm+t6FQ5GmVpU5vVhPeT1Xq7sqeeXoIr5DyishNJLVnPsgexmYuo2AQzhTn6PpzakepAJidyMovM2Glx2PYkT0Xe0DIU6jY98eAXow6B7bcS9wYm6J73Lk0uVw1Az6BbHjGvrH1OwOHSAI+sE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278414; c=relaxed/simple; bh=fLSd+zt4DZ4evgsfiiB3do4LVSvo9mBxXt9pYKpfRFw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=j3GIEW20RLgT40lxvJGWktYVuz2qOFLieGRX/B3epCv7pnx+kIoF+qKA6Bto5ASHV/vqitzeI5Wxm9K4uM89VvE0cE4A25U4/53Bb9nKcUbZ3A/AC8V9AX1ZmghIlpByxJ8GHRtZSdoxdEbDQrBUX9opXLk7UQxBQqQoAy8ADVc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com; spf=pass smtp.mailfrom=gahingwoo.com; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b=jxGb+KhS; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=KKMD18PM; arc=none smtp.client-ip=202.12.124.143 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b="jxGb+KhS"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="KKMD18PM" Received: from phl-compute-06.internal (phl-compute-06.internal [10.202.2.46]) by mailflow.stl.internal (Postfix) with ESMTP id AD4BF13002C3; Fri, 17 Jul 2026 04:53:31 -0400 (EDT) Received: from phl-frontend-03 ([10.202.2.162]) by phl-compute-06.internal (MEProxy); Fri, 17 Jul 2026 04:53:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gahingwoo.com; h=cc:cc:content-transfer-encoding:content-type:content-type :date:date:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:subject:subject:to:to; s=fm1; t=1784278411; x=1784282011; bh=0x9jBiJblCUlvn6m2+9uKBjaVBVp8SOY B0MqJMXPUZw=; b=jxGb+KhSHiNimmWMckEuBsaXcfGUD29/BEj6GvBTLPFzA4qQ BsHIe9N1BKRTp75eHy/g3i4RXq7nf5F774hp7giWVYgitnuZ77eaC0/dz+SC7rXE M3vFuIr2YdrDkod4lWEp/2JWAAyRcrZ9U8cAFYHr1HvfZ6R4DwwF6zG44t2T4ute 3tCCRfE7HNPPzfPvQ1I6nKseT3+Efr+GBtzGOUADEAt6F4RRC+LlPgCPSYdOUM9z mdoq4DXa3hY+1111F9p+4vZHpgQH4ZKVmxikFpUfqkKdyjSctLpHrduyKmRRjlX1 DbQkTTlJFrsX4zPMrTW3Iw3t/zhVudAmHWHJdw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1784278411; x= 1784282011; bh=0x9jBiJblCUlvn6m2+9uKBjaVBVp8SOYB0MqJMXPUZw=; b=K KMD18PMb46CWoixpdw7k4Iv9BwN2XIdhMfPe/0SjAPvwm72L/LXG5F9ex9c3in8o spTYG1xcMfLbzr84Nk27vrA70fMzeSCazplQeW+9Wg8NGF0Sx4EHsFMfemLuf/LX 5MkkPb6CCvt+//Dir80KJlpYNATBHGvaLdydRUbQC6UcR+cCp77TMkba3jOhEO7X 8A5YWrjxXJFoGu6kaOuOMEfPzGxpPkPSSvxCvu941YZp3mq3L3jJ8Cjm0XYGFSyI +ZGVadMSoMO2UsMjbhtHgabYuwP9M74ynbOTWa2JxOF0Jte9bfeO6A2w2355WLVX fEiWZVIHJYoj7l5FHyqKg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFlqYOQDR3j98mEg55zUTBRGJoyYi0LNYqpxPFUij1eeuOTNhPKEq7aaRJQxFcRRK Qe+rnmyYP/2AYKqjSPt6DmVKl9pFcjlTfz975oGBl5Ayy790RMcDXxZVGd5MobgrZ5sJ5N ZppcnGayfzsQ4x7JcCuA8tWmlRxVvKCLDl4TR6oihVYV3SoUulACa/g1A4zhFAszisSGMj u4Ui6WKABbGiuHbVQbDt8uT4F124PFqAYsOpAjuFkew0bhukYMl5KvFireeUYxIc7I6Kwy 6tBTZ10j5fYXecnDucl6C4ODV8HSIytp1MMpvREV+JeOyBx8/LnU+PdEGxWXC1sad6S4tp kz2+qaSG0vo/Y/IO4dbxJAJz0ivuedzjhuArWXS+hqjSlTD2f5RMATmXwWgla1J5heT7Uy ZKMiflWP1lEI8j4il1GCU3JYFAcfZvUKNZtaY6AIkebergvW6KdM34T3DGUPJZE2cPZpBq jxJ3TeXKWyxzsBRP9vPshTExHefxU9zn9UugseBV5lYrh2zlO9RBeXzEpmNyOY7rmwP/kY NUAyrToihkVAor87yw96DkTUf0wADe7s9tgC2gp0m8l4kr1Bb9Dy/z2eHDJUQz8rsk+loO RAzNIgmOUMXDRa4PJ3VJMmqCfPFDWVATf8nn82FdP9aR84ZO6QIsWjf+kYdQ X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 17 Jul 2026 04:53:25 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, iommu@lists.linux.dev, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: [RFC PATCH 3/9] pmdomain/rockchip: cycle optional power-domain resets on power-on Date: Fri, 17 Jul 2026 20:50:41 +1200 Message-ID: <20260717085220.3212274-4-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260717085220.3212274-1-gahing@gahingwoo.com> References: <20260717085220.3212274-1-gahing@gahingwoo.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Some power domains contain hardware bus interfaces that require an explicit assert/deassert edge on their reset line after the domain is powered on. The CRU preserves reset state across power cycles (stays deasserted), so the hardware never sees the edge it needs to initialize unless the driver pulses it explicitly. Add an optional resets property to rockchip_pm_domain. When present, the resets are asserted and deasserted (with a 10 =C2=B5s hold) inside rockchip_pd_power() after the idle bits are cleared and the delay_us settling time has elapsed, but before any device in the domain resumes. This ordering guarantees the bus is fully initialized before any device driver accesses registers. Signed-off-by: Jiaxing Hu --- drivers/pmdomain/rockchip/pm-domains.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rock= chip/pm-domains.c index 1787f62ba..7a88a9149 100644 --- a/drivers/pmdomain/rockchip/pm-domains.c +++ b/drivers/pmdomain/rockchip/pm-domains.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -102,6 +103,7 @@ struct rockchip_pm_domain { struct clk_bulk_data *clks; struct device_node *node; struct regulator *supply; + struct reset_control *resets; }; =20 struct rockchip_pmu { @@ -671,6 +673,12 @@ static int rockchip_pd_power(struct rockchip_pm_domain= *pd, bool power_on) if (pd->info->delay_us) udelay(pd->info->delay_us); =20 + if (pd->resets) { + reset_control_assert(pd->resets); + udelay(10); + reset_control_deassert(pd->resets); + } + rockchip_pmu_restore_qos(pd); } =20 @@ -840,6 +848,14 @@ static int rockchip_pm_add_one_domain(struct rockchip_= pmu *pmu, if (error) goto err_put_clocks; =20 + pd->resets =3D of_reset_control_array_get_optional_exclusive(node); + if (IS_ERR(pd->resets)) { + error =3D PTR_ERR(pd->resets); + dev_err(pmu->dev, "%pOFn: failed to get resets: %d\n", node, error); + pd->resets =3D NULL; + goto err_unprepare_clocks; + } + pd->num_qos =3D of_count_phandle_with_args(node, "pm_qos", NULL); =20 @@ -910,6 +926,7 @@ static int rockchip_pm_add_one_domain(struct rockchip_p= mu *pmu, clk_bulk_unprepare(pd->num_clks, pd->clks); err_put_clocks: clk_bulk_put(pd->num_clks, pd->clks); + reset_control_put(pd->resets); return error; } =20 --=20 2.43.0 From nobody Sat Jul 25 05:29:19 2026 Received: from flow-b8-smtp.messagingengine.com (flow-b8-smtp.messagingengine.com [202.12.124.143]) (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 14A9A390230; Fri, 17 Jul 2026 08:53:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278432; cv=none; b=Eu0/TPP6FziVSJ9Nmj0ptPu3sbNjtsYhPDc34tE6lJ00YeTJRV0PGaWBy3zmhNMuSknK96MqiE4GF82MtLHFgdaUJsDkuP7gk+O67lkkc+3XNhejBxyHdpnVxv7pzXEap/DESdNMr7QL9jdLWTt+c00dHtqZdsVdHNuQEp6h6S8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278432; c=relaxed/simple; bh=+bbg46wfGkzqiu482nwVnPCOTNTLyVR4vqij2UJwx0c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fy9U3lODJXSEiTACxcIgu1/iOkDR/dZsA/8txj2f++fQJqbd+F6UMrND/KLTiS1B7WS8LerKyzbjrYq02j01AsXkl7lcNBusa1ReRu/syr9rJJUVjVqoROMK96gReFn2cL3jJ+KhsG8aehKqoSZeYlqZH3UDsk3/73vPKCrw4dc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com; spf=pass smtp.mailfrom=gahingwoo.com; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b=v0Ev9U20; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=kIXOAQwc; arc=none smtp.client-ip=202.12.124.143 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b="v0Ev9U20"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="kIXOAQwc" Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailflow.stl.internal (Postfix) with ESMTP id EF81913002C9; Fri, 17 Jul 2026 04:53:49 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Fri, 17 Jul 2026 04:53:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gahingwoo.com; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784278429; x= 1784282029; bh=zinUu7usH8QT+lRBkTaKjglbcOcyqsNJ7aGjhR0dVuc=; b=v 0Ev9U20tBJWMVb1EmdXdnSoUf6IwfEDDfeQWAomsNPlGcq2M/dSHHugtLYyProcf tUVfpYEHMEHgmAjoGtKW/NI6ybmC/hJ40dbu0DfaTNeFkBzKoK5y2Ttn5g/N5qPU Njt+qeuAo4vUGll42ky+E5WPiNds2bcTINQw6y9DKPVlb0LLxk6uj06aJPi/deFg J0rkKLXlMpE/E0q/vq4y4v1gh0M+47BYIW8e74q2/r5vgYY6sMgWw7NCpFVLd4l2 1yzkrAEcYerdljozyw9D39M/XbkYEeqia8nAIIjzW/AAos4VG9U+WDp1zCP/SqrV G8DgZF+vTuOxDN1wS0sTw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784278429; x=1784282029; bh=z inUu7usH8QT+lRBkTaKjglbcOcyqsNJ7aGjhR0dVuc=; b=kIXOAQwc18Lq5X7qC /HflxDnJPI2DhuHg4+4a85wMJz48k+2uNgkIP9e90PCXiWUyhW50tuKDfJ4wR3EP O1ZUJX5GjW2tWzA6H5K8aQ0AFBYYHajgtImlXnY169Hc0tE/9kYbQWYYkI/a1rO7 0TMeHvhqj4aGueHYaJeVtkHWdpIz8g2ZiCoKZPVYIp2sIXSmnpiJ00wqFup26Bxc m+jHudN8HkXb1dsOGsreNjXC0HNRlFO2yPi4zdElahDcUjseEHNDvjn4O68LGcM1 dTG4oF68ggSxy5Khe7anEofBtl8eH6GdUCz5iLalW86UQB6rYJYjrvUV2GsZ+dg/ 5wnsA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFS7GW/vS+PGg3aNaRtXNWwH13wr4t6a3PsYvzLEfoa0d1tCLQMk4kuPOyqJxWYg8 zWRgYifu3Q3qEvL/I6D+A7sONbehMF6Fzv0Jx15W8Bp0zPI2L6EoHnTvsn7KCzlmdcjq5Z AMiUX8pm/4UU/5q2rly/ctUYuGrpfv6aggolOMe4+7cw+YQgQv04wJ8otXu77hR4cT4fFc rauulgYGXJAH/ttinZ2FdpHwYOQghdgc8wZDZhtrydZHcBfVIkqxRabCZivPsjLLb49//R HUixI1q1RTZqMytwufV0grN2inkZxcvjyE8RnYSpDV3z9U1hNPWgMeNXqfzcYN3TNROTjP DJWBxCI5LG07PpCtrDGQylNVLAXiJDOw8Zv7N+umyJqbcz5h42OyiWTfA9CJmLIVWk/eBR 7Oln6Gq6e+F9e84h2z6cwCDpiPcYcwApw7eCgr9txIBNNq+fRM3OTF3EQHFoPNbSxFAkpU 5ELogvMw16Wd+Vy6XMRw9A/UtwpPyLICJuTXAYYhH4xpDkDzMpb3HsHGpDAc1aQPOHAVKz djVrFxTql8z755ghlxCYAAPcAYjK1U21pj1mw/oRDOjRT+w19y4qp358reb4GFc2oAgB4C J/ZOdnLoEh/CfXkF+vAx7BUzlua9nEu49XoFr0DIyWHCNBHuc6tRzL6mAn4Q X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 17 Jul 2026 04:53:44 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, iommu@lists.linux.dev, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: [RFC PATCH 4/9] iommu/rockchip: skip orphaned-fault banks in rk_iommu_is_stall_active Date: Fri, 17 Jul 2026 20:50:42 +1200 Message-ID: <20260717085220.3212274-5-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260717085220.3212274-1-gahing@gahingwoo.com> References: <20260717085220.3212274-1-gahing@gahingwoo.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Boot firmware can leave a PAGE_FAULT_ACTIVE condition in an IOMMU bank before the driver has configured paging. Such a bank shows: PAGE_FAULT_ACTIVE=3D1 STALL_ACTIVE=3D0 IDLE=3D1 rk_iommu_is_stall_active() sees STALL_ACTIVE=3D0 and reports the whole IOMMU as "not stalled", so any subsequent readx_poll_timeout() loop waiting for the stall to complete never sees a passing result even after the other banks have correctly entered stall mode. Detect the orphaned-fault pattern (PAGE_FAULT_ACTIVE & !STALL_ACTIVE & IDLE) and skip those banks in the stall check. They have no in-flight transaction, so they are already quiescent. Signed-off-by: Jiaxing Hu --- drivers/iommu/rockchip-iommu.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index 0013cf196..f42ffcafb 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -378,9 +378,23 @@ static bool rk_iommu_is_stall_active(struct rk_iommu *= iommu) bool active =3D true; int i; =20 - for (i =3D 0; i < iommu->num_mmu; i++) - active &=3D !!(rk_iommu_read(iommu->bases[i], RK_MMU_STATUS) & - RK_MMU_STATUS_STALL_ACTIVE); + for (i =3D 0; i < iommu->num_mmu; i++) { + u32 status =3D rk_iommu_read(iommu->bases[i], RK_MMU_STATUS); + + /* + * A bank stuck with PAGE_FAULT_ACTIVE but without STALL_ACTIVE + * and with IDLE set has an orphaned fault left by firmware before + * paging was configured. It cannot enter stall mode but has no + * transaction in flight, so it is already quiescent. Skip it + * rather than treating it as "not stalled." + */ + if ((status & RK_MMU_STATUS_PAGE_FAULT_ACTIVE) && + !(status & RK_MMU_STATUS_STALL_ACTIVE) && + (status & RK_MMU_STATUS_IDLE)) + continue; + + active &=3D !!(status & RK_MMU_STATUS_STALL_ACTIVE); + } =20 return active; } --=20 2.43.0 From nobody Sat Jul 25 05:29:19 2026 Received: from flow-b8-smtp.messagingengine.com (flow-b8-smtp.messagingengine.com [202.12.124.143]) (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 1DE1D3E0C4C; Fri, 17 Jul 2026 08:54:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278451; cv=none; b=jJdM/mM+IX0mu5/ZJEfkAj4AlKgAoy26Jj4887sNeqa+8UPBogJL0Cc0C6RYvWGOIl7Dn1dE5YoPVvOoCMIC85FsAfvEOTFvEwxqUca1xIou+Cn0FO/GljmvS/SRE+vJ3QqrIfJ1meGWkPkLG8XdNtKG+WjC+widxbsEtdV80LQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278451; c=relaxed/simple; bh=yLeEgXdUBNIR4HbnwnydG2IqAiO6ulWCbhx/Rrf2MNE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cDe2QznEvS9jEa8cx1yRjbLkTvNHdoFka+2+sGFTX1dE2uEvAZIw9vsriMFnBQI8hyITRKp73wDljH1YoYrumr/XkbTNJG/FW2gGxcvuNYegu3m2dP9dt6RD1q2Bet3hJjHKDb4/o6J59/mDRZeBr/AGVgcSdVOOvhmxJ9B+t4g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com; spf=pass smtp.mailfrom=gahingwoo.com; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b=JPzIasAd; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=H7W/vmW6; arc=none smtp.client-ip=202.12.124.143 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b="JPzIasAd"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="H7W/vmW6" Received: from phl-compute-06.internal (phl-compute-06.internal [10.202.2.46]) by mailflow.stl.internal (Postfix) with ESMTP id B9F2713002D1; Fri, 17 Jul 2026 04:54:07 -0400 (EDT) Received: from phl-frontend-03 ([10.202.2.162]) by phl-compute-06.internal (MEProxy); Fri, 17 Jul 2026 04:54:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gahingwoo.com; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784278447; x= 1784282047; bh=jciNOVcjwfiY3K3wYHnk65hT9aC3kb+UF6ZOUQUxjM8=; b=J PzIasAd6Mb6g7wy0iH/sn+0Kb3n2neTY7MweFeYOMeRpSKHilodGjTevSk2jz5uq B0eaCEC7IAQfosLdHvgSEMbWinrs3YRoTjYRtOVHm8QOslnV8BBoYodbsfeTjDAx Kgv16jaiL8+Z7PTHM/K+1kCGazQmCzLz6v4PJxxskqHMB+r1N1NsmAl/pv+cK/Vo FZsvDmFXR0ycmax9X/mpjdPIy7T5MPgx68VHcKkAMUWV4qXRpzrJcWKJl+xZ6YwR rLxu111lysgwyo9evNk6O7sB3porLBVyfTNJ7HxDjQUBNJN9RldVqi5qouaVLf+O TMzuAnwQwYmg/wtm5T2ew== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784278447; x=1784282047; bh=j ciNOVcjwfiY3K3wYHnk65hT9aC3kb+UF6ZOUQUxjM8=; b=H7W/vmW6cHn0f589T sSBacdcq7Qsa2d7y8rFh7a8EHSfPVSKHFuYp9nWa7Be7BKEnyWNJvsftoD9D0iHH FLkgMTp/1Kh1DbUUuHhT3Tzro1DBFvM6PM77PIcOeXUF3V6qoev9bBSCVipi3FtJ nNxfb7dfnJCHQzHHOJFvNGcIlL1zcnJU8GC5LXwBJiGEKBnQuLbyCG74fa/+77/3 pduidBSi64I4BSTb8mIUEoQsyOYku2RDaqQklvPf5MwgXgLi/zPcUhU1LTYsvQUp fram4giHOUdTgu2HUBWN51sk8xgG2Qd3qLoct4/xrxBi3Tt62dgr+bRvlUVTeci7 MA1Og== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFS7GW/vS+PGg3aNaRtXNWwH13wr4t6a3PsYvzLEfoa0d1tCLQMk4kuPOyqJxWYg8 zWRgYifu3Q3qEvL/I6D+A7sONbehMF6Fzv0Jx15W8Bp0zPI2L6EoHnTvsn7KCzlmdcjq5Z AMiUX8pm/4UU/5q2rly/ctUYuGrpfv6aggolOMe4+7cw+YQgQv04wJ8otXu77hR4cT4fFc rauulgYGXJAH/ttinZ2FdpHwYOQghdgc8wZDZhtrydZHcBfVIkqxRabCZivPsjLLb49//R HUixI1q1RTZqMytwufV0grN2inkZxcvjyE8RnYSpDV3z9U1hNPWgMeNXqfzcYN3TNROTmR RgdzuH7DU+5N1oY8M3ODw+67ns+HFGVOSMGhx5XQjWxx/E68KouXSoOpv/PUcY/YDeVRSP WK+GWEwQ7/prMm45XSJrsMeNKFxlTq1W4xqfm1rBdumM4pobMDS8xA4z5/fcup0LpFYmpx K/Yc3mOP4uOBFn+05OiOMmoDIXkNoQocZjQ3SG5OHVADrnlhqCsft8JbTumD+zChibYASt cM9nB9U5jUKCu6Z5+WfbcR6r7qq/eXvtnwaVVTqMW6bLVF5AS2NjuMsNlbltTaDEzr/tVg Z0HabB9G2gzJuq7f61cGRWOsPSvYZHlsefSmgZ0whRvkfasj+XJljWCYJ4rw X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 17 Jul 2026 04:54:01 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, iommu@lists.linux.dev, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: [RFC PATCH 5/9] iommu/rockchip: skip orphaned-fault banks in CMD_ENABLE_STALL dispatch Date: Fri, 17 Jul 2026 20:50:43 +1200 Message-ID: <20260717085220.3212274-6-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260717085220.3212274-1-gahing@gahingwoo.com> References: <20260717085220.3212274-1-gahing@gahingwoo.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Sending CMD_ENABLE_STALL to a bank that carries an orphaned firmware fault (PAGE_FAULT_ACTIVE & !STALL_ACTIVE & IDLE) causes the command to be silently dropped by that bank. The dropped command also interferes with the other banks' stall transition, delaying them past the poll timeout even though they would otherwise stall within a few microseconds. Skip such banks when issuing CMD_ENABLE_STALL, matching the skip condition already used in rk_iommu_is_stall_active(). Signed-off-by: Jiaxing Hu --- drivers/iommu/rockchip-iommu.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index f42ffcafb..ce586919b 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -434,7 +434,21 @@ static int rk_iommu_enable_stall(struct rk_iommu *iomm= u) if (!rk_iommu_is_paging_enabled(iommu)) return 0; =20 - rk_iommu_command(iommu, RK_MMU_CMD_ENABLE_STALL); + /* + * Do not send CMD_ENABLE_STALL to orphaned-fault banks + * (PAGE_FAULT_ACTIVE & !STALL_ACTIVE & IDLE): the command is ignored + * by such a bank but its presence on the shared bus delays the other + * banks from reaching STALL_ACTIVE within the poll timeout. + */ + for (i =3D 0; i < iommu->num_mmu; i++) { + u32 status =3D rk_iommu_read(iommu->bases[i], RK_MMU_STATUS); + + if ((status & RK_MMU_STATUS_PAGE_FAULT_ACTIVE) && + !(status & RK_MMU_STATUS_STALL_ACTIVE) && + (status & RK_MMU_STATUS_IDLE)) + continue; + writel(RK_MMU_CMD_ENABLE_STALL, iommu->bases[i] + RK_MMU_COMMAND); + } =20 ret =3D readx_poll_timeout(rk_iommu_is_stall_active, iommu, val, val, RK_MMU_POLL_PERIOD_US, --=20 2.43.0 From nobody Sat Jul 25 05:29:19 2026 Received: from flow-b8-smtp.messagingengine.com (flow-b8-smtp.messagingengine.com [202.12.124.143]) (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 4284D31ED7D; Fri, 17 Jul 2026 08:54:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278465; cv=none; b=PqOm7QWPxhSsSzmmTBFvuJMV0QuUt/PdzQfkU5mV7hD1Vh7ihGNOnp/Fxj3t6zmpnN0GFlTY7N3HRio8d40tM0H6Z9QHUIzumaYm78lD608Bd+u49ttClwWNEMCTB6rtnZDIkWXQD/TXzOIFnwd27PJUGWVJ1cyqPzho7IjlqB0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278465; c=relaxed/simple; bh=kJHcdmHDqZeKHovE6edqXhmNqbX6XA/FMdKtix8/rWc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rKSLZJWR15EN48NTAj7lqw8LhnxV0udPF0mJcumpC2OA2K8zkv1s0kT1nztDVloRLz92nt7yRR0MNA1WDxt/YPKLl8PUQqP7nSqlvxofh04DKBcOz4vtYJTAxBzTpSgUMQ1EWr39J71bmBXVHb7Ye/HPEVLskxZGo+fr4jhrMCk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com; spf=pass smtp.mailfrom=gahingwoo.com; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b=sA2LY6St; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=gCC3gjV+; arc=none smtp.client-ip=202.12.124.143 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b="sA2LY6St"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="gCC3gjV+" Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailflow.stl.internal (Postfix) with ESMTP id 2EB5713002D8; Fri, 17 Jul 2026 04:54:23 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Fri, 17 Jul 2026 04:54:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gahingwoo.com; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784278463; x= 1784282063; bh=seSFgE6LbXWJo7YCW4g2AAwmvQGJEAvcWH4KkhFCsJM=; b=s A2LY6StLVISCxwAPHXQfXhUiCfRml/tnFOSnuWFekpdGRECODNqylKed2UDPgpEQ R4u7uDgza8Ms/c4m06TJxTQhv6VenVyWeBBiGJ9iD6ZrdcWKi+3nh07Fylb8QakG wmz8FthpQTstXFd0h/FsSyUn8S25N6lmqkyV5vsZhPqQn9Bswrt9Y/2x4Xcq7c6p Tg5Gf7CqiQVFhDLAvReBTdxWz7EnR+hD0RviocZO2nJJTfX7FJXVm1gxw9qtKMoF T4ekSJQEx0mE1TJK2LT1myLeJcNGXF3TSx2B9tGyhj8s/BqUoF0mi/RhoFEk75xW oBRoTJ1u+AFfv1R60ohTQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784278463; x=1784282063; bh=s eSFgE6LbXWJo7YCW4g2AAwmvQGJEAvcWH4KkhFCsJM=; b=gCC3gjV+EdZTBq4bq DDafDwV+5Z3DwA4HaL8O9Etuph+yJ4/tEFfphuKZYoYXrLQIVVDyiQ+JAwq01upD IcCb0hkTe47tEUIDOo5xxdRAheM4HoMeeYv36/l/6Pc2bbUypWf8hz1vsl8CiTNj wSP818hJgF/MFIv1Lji6MnkbtTXzNe983BwI28BLwkeMYsGbUwVng+045QoK5kGc RsEiffiLD0B1SWQYn8L/Ei7MeprA0K2Q+cuZDRpDRrfzvZaMOchnABAmNbiW0dbS PPAINcY+cOYEY3j+AVOxqPDWZ1exB7iGP9VfZGpcs7Vk7wOM1zON+fZVX/GVMNEi PV+YQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFS7GW/vS+PGg3aNaRtXNWwH13wr4t6a3PsYvzLEfoa0d1tCLQMk4kuPOyqJxWYg8 zWRgYifu3Q3qEvL/I6D+A7sONbehMF6Fzv0Jx15W8Bp0zPI2L6EoHnTvsn7KCzlmdcjq5Z AMiUX8pm/4UU/5q2rly/ctUYuGrpfv6aggolOMe4+7cw+YQgQv04wJ8otXu77hR4cT4fFc rauulgYGXJAH/ttinZ2FdpHwYOQghdgc8wZDZhtrydZHcBfVIkqxRabCZivPsjLLb49//R HUixI1q1RTZqMytwufV0grN2inkZxcvjyE8RnYSpDV3z9U1hNPWgMeNXqfzcYN3TNROTr7 GhS8KrsazkGH+zkMmhFLe3IdUu0u3+BEObGJscKE+FletVLXmM3B/fQEURP4CTEW7qnPaE yjSppUj3XwD/XHmxEA3F2rZS06Vive3UE8t8mrDi1iTnX1qIGvYraTJNz9Hgo0d5QJJsCq 997OIktKiWGBO8CyF6vsT4A+xqrByJkBpQ3CTV51agGvPysSXOvVk+XDGi1rNMBS1y2nEH PQAV3ZZaEAAKBio9dilm37IvEKROB2cU2YyK9nPacFJS6VC3FLKmPxl49flgDLVkLJVRJn dMG0EOfIE2rbZimUmbckSkZcLeRA7uAupals/u0dwJhPkxNHV3uBzEpkvvQw X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 17 Jul 2026 04:54:17 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, iommu@lists.linux.dev, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: [RFC PATCH 6/9] iommu/rockchip: take all DT clocks Date: Fri, 17 Jul 2026 20:50:44 +1200 Message-ID: <20260717085220.3212274-7-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260717085220.3212274-1-gahing@gahingwoo.com> References: <20260717085220.3212274-1-gahing@gahingwoo.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" rk_iommu only enabled a fixed {aclk,iface} pair. On the RK3576 NPU the MMU sits behind the CBUF/DSU gates, so writes to DTE_ADDR are silently dropped until those clocks run too (reads work, writes need more clocks). Take every clock described in the DT for the IOMMU instead of a fixed pair, so a platform can list the full set it needs. Signed-off-by: Jiaxing Hu --- drivers/iommu/rockchip-iommu.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index ce586919b..49c841095 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -93,11 +93,6 @@ struct rk_iommu_domain { struct iommu_domain domain; }; =20 -/* list of clocks required by IOMMU */ -static const char * const rk_iommu_clocks[] =3D { - "aclk", "iface", -}; - struct rk_iommu_ops { phys_addr_t (*pt_address)(u32 dte); u32 (*mk_dtentries)(dma_addr_t pt_dma); @@ -1274,25 +1269,20 @@ static int rk_iommu_probe(struct platform_device *p= dev) iommu->reset_disabled =3D device_property_read_bool(dev, "rockchip,disable-mmu-reset"); =20 - iommu->num_clocks =3D ARRAY_SIZE(rk_iommu_clocks); - iommu->clocks =3D devm_kcalloc(iommu->dev, iommu->num_clocks, - sizeof(*iommu->clocks), GFP_KERNEL); - if (!iommu->clocks) - return -ENOMEM; - - for (i =3D 0; i < iommu->num_clocks; ++i) - iommu->clocks[i].id =3D rk_iommu_clocks[i]; - /* - * iommu clocks should be present for all new devices and devicetrees - * but there are older devicetrees without clocks out in the wild. - * So clocks as optional for the time being. + * Take every clock the devicetree provides. Most IOMMU instances + * need exactly "aclk" + "iface", but e.g. the RK3576 NPU IOMMUs sit + * behind additional gates (CBUF/DSU) whose clocks must be running + * for register writes to land. Clocks stay optional because there + * are older devicetrees without clocks out in the wild. */ - err =3D devm_clk_bulk_get(iommu->dev, iommu->num_clocks, iommu->clocks); - if (err =3D=3D -ENOENT) + err =3D devm_clk_bulk_get_all(iommu->dev, &iommu->clocks); + if (err =3D=3D -ENOENT || err =3D=3D 0) iommu->num_clocks =3D 0; - else if (err) + else if (err < 0) return err; + else + iommu->num_clocks =3D err; =20 err =3D clk_bulk_prepare(iommu->num_clocks, iommu->clocks); if (err) --=20 2.43.0 From nobody Sat Jul 25 05:29:19 2026 Received: from flow-b8-smtp.messagingengine.com (flow-b8-smtp.messagingengine.com [202.12.124.143]) (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 A59DF3E3DBB; Fri, 17 Jul 2026 08:54:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278486; cv=none; b=BQrHeDxX42g9Y92r9T2oGHSkHTU2OH1c4KdZM1xa24KsKfNsnw5A0nU9dwWcpkcaJUEJanKuhm32nJ40zfQNSDqTvyeHxVIh9qDidweiCcoSHlVeObjLsZlRT/qNqGohhhdGo0Yg/yet1hKm+49gEt+VnhBLN26k8Rg9UNTJ6ko= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278486; c=relaxed/simple; bh=8iX6cTaNp0FQHB/p0FL0uD22EZolwoVtojcJw3Sgm+8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SFvlowO0Fv5ghcG9VRbz3sK/7ixqbwwA1XZOUIMpD//lfrRFbUily4+l9jUQV276bauD3SgLAuFaczaU5gbbYLN6mR32Y0y4OQEn9z8mLBZVQ+eLLsvVH/dEepEF6ydWKoTdMyrw0h5lcEYKIj9QOtNERxEIC78QcKHcDCdgvm0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com; spf=pass smtp.mailfrom=gahingwoo.com; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b=KSaP4sxU; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=Kgor+RGi; arc=none smtp.client-ip=202.12.124.143 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b="KSaP4sxU"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="Kgor+RGi" Received: from phl-compute-01.internal (phl-compute-01.internal [10.202.2.41]) by mailflow.stl.internal (Postfix) with ESMTP id 6B43313002DB; Fri, 17 Jul 2026 04:54:42 -0400 (EDT) Received: from phl-frontend-03 ([10.202.2.162]) by phl-compute-01.internal (MEProxy); Fri, 17 Jul 2026 04:54:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gahingwoo.com; h=cc:cc:content-transfer-encoding:content-type:content-type :date:date:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:subject:subject:to:to; s=fm1; t=1784278482; x=1784282082; bh=E0K+hUVV5f6NfyAYttCx4Ck/mF4yHBte glIqFGWOZTs=; b=KSaP4sxUQHDZi5bADJa5UAt4G5iBqkSz6KcNxZGWXEWY/U8g n/cWpXW4ZdWwLocbSxGIeBpwyhob5GsERpLTZT6WoeRbwgz3KpotjEWeAlgRqtEZ jRHo7/TArkNaK9y56WkhTmNPtZkqEqcuoF65t2G2jIY3szDrBjf7mQIBvUZgt4i1 t9QLjCv0mxmqolUl+BHDnaQJQ+J0lMe6daLY4IlIUviOlv0mYYzSZQ2fHTEYjFfP 7h6EV7ptLqwe2BCNdKdDPiRj++5LqC/NMykxQ/P23K94+Xr0Yj5//0oOYfhUEZbL v18moyh6TKaHUuxF42oLn+81nLLkgYPDs0r1RQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1784278482; x= 1784282082; bh=E0K+hUVV5f6NfyAYttCx4Ck/mF4yHBteglIqFGWOZTs=; b=K gor+RGikhIIPAoYfAsvcs2xsZVuCMJSyHPabT6IKbrnHTIzxGR3Dx6FDqFdTxmsl ySeNvlzpOdTUb/5m5DmFKAcPFUwQz07clbQxofRg7allEVTljZIKReio0X2OO8uI cbjS/xDby+fX60FuiV8UfjhXBKFx2XpkKG2v8nYIB+nyeH23QQIf4zKCZzHpWocv PMmb77qn2G2M1b87Nrx+2Yxycv07xO2M+GH0VVrG4blxSNE4EHBJmUUVJPVHr4mW glgSD14NDZh9XIPAdHPoq7w2c3ocPH+m+4S+GyM7y1nr9UG0j+uOY4iEdzi0rAPQ WSQHc0zFk9GOdBTwoFmeA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFlqYOQDR3j98mEg55zUTBRGJoyYi0LNYqpxPFUij1eeuOTNhPKEq7aaRJQxFcRRK Qe+rnmyYP/2AYKqjSPt6DmVKl9pFcjlTfz975oGBl5Ayy790RMcDXxZVGd5MobgrZ5sJ5N ZppcnGayfzsQ4x7JcCuA8tWmlRxVvKCLDl4TR6oihVYV3SoUulACa/g1A4zhFAszisSGMj u4Ui6WKABbGiuHbVQbDt8uT4F124PFqAYsOpAjuFkew0bhukYMl5KvFireeUYxIc7I6Kwy 6tBTZ10j5fYXecnDucl6C4ODV8HSIytp1MMpvREV+JeOyBx8/LnU+PdEGxWXC1sad6S4FO nogCCV8dFScqOHo8C5/ACownohQeqzHNB7QNCwekwJkJLo2sNcyErrB//ZteD3oj1pin1S epHefwgLEf5HEVTIgJMpk9sE5SgmCcbYwQAwjXi9eT7xa8+Ww8xuaAR2hwoNWLHnKdulEL mkOJU3cgCEd6dyIFNNlwC6iz+FhjNv5nezJURt6D1Hnb1jicpC2rBcEJ1aeiaBxGSKE8N2 GsxTKSYIWS1sTsHhcbKmkD7XJGp+OveurLosfVlIkEyfy5mb8+qShkX+biuKh61msVaVpR PGiiify0D7MdcjqO/8Bt+mGwXM29k8U9bRXKqMSNNKzorjRw5lRKYnsq4ddQ X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 17 Jul 2026 04:54:35 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, iommu@lists.linux.dev, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: [RFC PATCH 7/9] accel/rocket: add RK3576 NPU (RKNN) support Date: Fri, 17 Jul 2026 20:50:45 +1200 Message-ID: <20260717085220.3212274-8-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260717085220.3212274-1-gahing@gahingwoo.com> References: <20260717085220.3212274-1-gahing@gahingwoo.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add RK3576 support to the rocket DRM accelerator driver (used with the Mesa Teflon TFLite delegate). - match rockchip,rk3576-rknn-core; iterate its nodes at probe - add named clock IDs (aclk/hclk/npu/pclk) and the CBUF clock domain (ACLK/HCLK_RKNN_CBUF); the CNA fills the CBUF and CORE reads from it, so the compute path stalls if those clocks are not held for a job - guard rocket_job_timedout() MMIO behind pm_runtime_active() - hrtimer completion poll: OP_EN never clears on RK3576 (unlike RK3588), so poll INTERRUPT_RAW_STATUS PC_DONE bits instead - map the DPU (0x4000) and DPU_RDMA (0x5000) blocks and pre-arm them - attach both NPU power domains (PD_NPU0 + PD_NPU1): the CBUF->CMAC read path is only fully powered with NPU1 up Tested on a Radxa ROCK 4D: the NPU probes, powers on, brings up its IOMMUs and runs submitted jobs to completion. Full multi-layer inference is not yet correct on this SoC (only the first operation per power session produces valid output); see the cover letter. Signed-off-by: Jiaxing Hu --- drivers/accel/rocket/rocket_core.c | 43 +++++++- drivers/accel/rocket/rocket_core.h | 22 +++- drivers/accel/rocket/rocket_device.c | 4 + drivers/accel/rocket/rocket_drv.c | 1 + drivers/accel/rocket/rocket_job.c | 154 +++++++++++++++++++++------ 5 files changed, 187 insertions(+), 37 deletions(-) diff --git a/drivers/accel/rocket/rocket_core.c b/drivers/accel/rocket/rock= et_core.c index b3b2fa9ba..7b0c48e4d 100644 --- a/drivers/accel/rocket/rocket_core.c +++ b/drivers/accel/rocket/rocket_core.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include =20 @@ -22,12 +23,23 @@ int rocket_core_init(struct rocket_core *core) int err =3D 0; =20 core->resets[0].id =3D "srst_a"; - core->resets[1].id =3D "srst_h"; err =3D devm_reset_control_bulk_get_exclusive(&pdev->dev, ARRAY_SIZE(core= ->resets), core->resets); if (err) return dev_err_probe(dev, err, "failed to get resets for core %d\n", cor= e->index); =20 + core->clks[0].id =3D "aclk"; + core->clks[1].id =3D "hclk"; + core->clks[2].id =3D "npu"; + core->clks[3].id =3D "pclk"; + /* + * RK3576: the CBUF (convolution buffer) has its own clock domain. The CNA + * fills the CBUF and CORE reads from it; without these the compute path + * stalls after loading one slice (RDMA, which bypasses the CBUF, still + * runs). The vendor keeps all NPU clocks on whenever powered. + */ + core->clks[4].id =3D "aclk_cbuf"; + core->clks[5].id =3D "hclk_cbuf"; err =3D devm_clk_bulk_get(dev, ARRAY_SIZE(core->clks), core->clks); if (err) return dev_err_probe(dev, err, "failed to get clocks for core %d\n", cor= e->index); @@ -50,6 +62,18 @@ int rocket_core_init(struct rocket_core *core) return PTR_ERR(core->core_iomem); } =20 + core->dpu_iomem =3D devm_platform_ioremap_resource_byname(pdev, "dpu"); + if (IS_ERR(core->dpu_iomem)) { + dev_warn(dev, "no DPU registers; DPU S_POINTER won't be pre-armed\n"); + core->dpu_iomem =3D NULL; + } + + core->dpu_rdma_iomem =3D devm_platform_ioremap_resource_byname(pdev, "dpu= _rdma"); + if (IS_ERR(core->dpu_rdma_iomem)) { + dev_warn(dev, "no DPU_RDMA registers; DPU_RDMA S_POINTER won't be pre-ar= med\n"); + core->dpu_rdma_iomem =3D NULL; + } + dma_set_max_seg_size(dev, UINT_MAX); =20 err =3D dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40)); @@ -65,6 +89,23 @@ int rocket_core_init(struct rocket_core *core) return err; } =20 + /* + * RK3576: the NPU spans TWO power domains (PD_NPU0 + PD_NPU1). The vendor + * powers BOTH from its single NPU node even when computing on one core -- + * the CBUF->CMAC read path only works fully with NPU1 powered. The board= DT + * lists both power-domains on rknn_core_0; a multi-PD device skips the + * driver-core single-PD auto-attach, so attach the list explicitly. With + * one PD in DT this is a no-op (returns 1) and behaves as before. + */ + { + struct dev_pm_domain_list *pd_list; + + err =3D devm_pm_domain_attach_list(dev, NULL, &pd_list); + if (err < 0) + return dev_err_probe(dev, err, + "failed to attach NPU power domains\n"); + } + pm_runtime_use_autosuspend(dev); =20 /* diff --git a/drivers/accel/rocket/rocket_core.h b/drivers/accel/rocket/rock= et_core.h index f6d738285..e959b26dd 100644 --- a/drivers/accel/rocket/rocket_core.h +++ b/drivers/accel/rocket/rocket_core.h @@ -6,6 +6,7 @@ =20 #include #include +#include #include #include #include @@ -27,6 +28,16 @@ #define rocket_core_writel(core, reg, value) \ writel(value, (core)->core_iomem + (REG_CORE_##reg) - REG_CORE_S_STATUS) =20 +#define rocket_dpu_readl(core, reg) \ + readl((core)->dpu_iomem + (REG_DPU_##reg) - REG_DPU_S_STATUS) +#define rocket_dpu_writel(core, reg, value) \ + writel(value, (core)->dpu_iomem + (REG_DPU_##reg) - REG_DPU_S_STATUS) + +#define rocket_dpu_rdma_readl(core, reg) \ + readl((core)->dpu_rdma_iomem + (REG_DPU_RDMA_##reg) - REG_DPU_RDMA_RDMA_S= _STATUS) +#define rocket_dpu_rdma_writel(core, reg, value) \ + writel(value, (core)->dpu_rdma_iomem + (REG_DPU_RDMA_##reg) - REG_DPU_RDM= A_RDMA_S_STATUS) + struct rocket_core { struct device *dev; struct rocket_device *rdev; @@ -36,8 +47,10 @@ struct rocket_core { void __iomem *pc_iomem; void __iomem *cna_iomem; void __iomem *core_iomem; - struct clk_bulk_data clks[4]; - struct reset_control_bulk_data resets[2]; + void __iomem *dpu_iomem; + void __iomem *dpu_rdma_iomem; + struct clk_bulk_data clks[6]; + struct reset_control_bulk_data resets[1]; =20 struct iommu_group *iommu_group; =20 @@ -52,6 +65,11 @@ struct rocket_core { atomic_t pending; } reset; =20 + /* RK3576 has no completion IRQ; poll for PC_DONE via hrtimer. */ + struct hrtimer poll_timer; + struct work_struct poll_work; + atomic_t poll_active; + struct drm_gpu_scheduler sched; u64 fence_context; u64 emit_seqno; diff --git a/drivers/accel/rocket/rocket_device.c b/drivers/accel/rocket/ro= cket_device.c index 46e6ee1e7..bfb00f967 100644 --- a/drivers/accel/rocket/rocket_device.c +++ b/drivers/accel/rocket/rocket_device.c @@ -31,6 +31,10 @@ struct rocket_device *rocket_device_init(struct platform= _device *pdev, if (of_device_is_available(core_node)) num_cores++; =20 + for_each_compatible_node(core_node, NULL, "rockchip,rk3576-rknn-core") + if (of_device_is_available(core_node)) + num_cores++; + rdev->cores =3D devm_kcalloc(dev, num_cores, sizeof(*rdev->cores), GFP_KE= RNEL); if (!rdev->cores) return ERR_PTR(-ENOMEM); diff --git a/drivers/accel/rocket/rocket_drv.c b/drivers/accel/rocket/rocke= t_drv.c index 8bbbce594..8f6a02d50 100644 --- a/drivers/accel/rocket/rocket_drv.c +++ b/drivers/accel/rocket/rocket_drv.c @@ -215,6 +215,7 @@ static void rocket_remove(struct platform_device *pdev) =20 static const struct of_device_id dt_match[] =3D { { .compatible =3D "rockchip,rk3588-rknn-core" }, + { .compatible =3D "rockchip,rk3576-rknn-core" }, {} }; MODULE_DEVICE_TABLE(of, dt_match); diff --git a/drivers/accel/rocket/rocket_job.c b/drivers/accel/rocket/rocke= t_job.c index 2f1861f96..94461bf71 100644 --- a/drivers/accel/rocket/rocket_job.c +++ b/drivers/accel/rocket/rocket_job.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -20,6 +21,16 @@ =20 #define JOB_TIMEOUT_MS 500 =20 +/* + * RK3576: INTERRUPT_MASK bits 28-29 are read-only (hardware rejects the w= rite), + * so the PC_DONE completion signal cannot be routed to the GIC via the no= rmal + * interrupt-mask path. We poll OPERATION_ENABLE every RK3576_POLL_INTERV= AL_NS + * instead of waiting for a completion IRQ. + */ +#define PC_INTERRUPT_MASK_RK3576_PC_DONE_0 0x10000000u +#define PC_INTERRUPT_MASK_RK3576_PC_DONE_1 0x20000000u +#define RK3576_POLL_INTERVAL_NS 1000000LL /* 1 ms */ + static struct rocket_job * to_rocket_job(struct drm_sched_job *sched_job) { @@ -137,8 +148,21 @@ static void rocket_job_hw_submit(struct rocket_core *c= ore, struct rocket_job *jo rocket_pc_writel(core, REGISTER_AMOUNTS, PC_REGISTER_AMOUNTS_PC_DATA_AMOUNT((task->regcmd_count + 1) / 2 - 1)); =20 - rocket_pc_writel(core, INTERRUPT_MASK, PC_INTERRUPT_MASK_DPU_0 | PC_INTER= RUPT_MASK_DPU_1); - rocket_pc_writel(core, INTERRUPT_CLEAR, PC_INTERRUPT_CLEAR_DPU_0 | PC_INT= ERRUPT_CLEAR_DPU_1); + /* Enable DMA-error interrupts; PC_DONE (bits 28-29) is polled, see above= . */ + rocket_pc_writel(core, INTERRUPT_MASK, + PC_INTERRUPT_MASK_DPU_0 | PC_INTERRUPT_MASK_DPU_1 | + PC_INTERRUPT_MASK_CORE_0 | PC_INTERRUPT_MASK_CORE_1 | + PC_INTERRUPT_MASK_PPU_0 | PC_INTERRUPT_MASK_PPU_1 | + PC_INTERRUPT_MASK_CNA_CSC_0 | PC_INTERRUPT_MASK_CNA_CSC_1 | + PC_INTERRUPT_MASK_DMA_READ_ERROR | + PC_INTERRUPT_MASK_DMA_WRITE_ERROR); + rocket_pc_writel(core, INTERRUPT_CLEAR, + PC_INTERRUPT_CLEAR_DPU_0 | PC_INTERRUPT_CLEAR_DPU_1 | + PC_INTERRUPT_CLEAR_CORE_0 | PC_INTERRUPT_CLEAR_CORE_1 | + PC_INTERRUPT_CLEAR_PPU_0 | PC_INTERRUPT_CLEAR_PPU_1 | + PC_INTERRUPT_CLEAR_CNA_CSC_0 | PC_INTERRUPT_CLEAR_CNA_CSC_1 | + PC_INTERRUPT_MASK_RK3576_PC_DONE_0 | + PC_INTERRUPT_MASK_RK3576_PC_DONE_1); =20 rocket_pc_writel(core, TASK_CON, PC_TASK_CON_RESERVED_0(1) | PC_TASK_CON_TASK_COUNT_CLEAR(1) | @@ -149,7 +173,9 @@ static void rocket_job_hw_submit(struct rocket_core *co= re, struct rocket_job *jo =20 rocket_pc_writel(core, OPERATION_ENABLE, PC_OPERATION_ENABLE_OP_EN(1)); =20 - dev_dbg(core->dev, "Submitted regcmd at 0x%llx to core %d", task->regcmd,= core->index); + atomic_set(&core->poll_active, 1); + hrtimer_start(&core->poll_timer, ns_to_ktime(RK3576_POLL_INTERVAL_NS), + HRTIMER_MODE_REL); } =20 static int rocket_acquire_object_fences(struct drm_gem_object **bos, @@ -326,56 +352,99 @@ static struct dma_fence *rocket_job_run(struct drm_sc= hed_job *sched_job) return fence; } =20 +static void rocket_job_handle_irq(struct rocket_core *core); + +static enum hrtimer_restart rocket_poll_timer_fn(struct hrtimer *timer) +{ + struct rocket_core *core =3D container_of(timer, struct rocket_core, poll= _timer); + + if (!atomic_read(&core->poll_active)) + return HRTIMER_NORESTART; + + /* + * On RK3576, OPERATION_ENABLE is not cleared by hardware on completion; + * check INTERRUPT_RAW_STATUS bits 28-29 (PC_DONE_0/1) instead. + */ + if (rocket_pc_readl(core, OPERATION_ENABLE) =3D=3D 0 || + (rocket_pc_readl(core, INTERRUPT_RAW_STATUS) & + (PC_INTERRUPT_MASK_RK3576_PC_DONE_0 | + PC_INTERRUPT_MASK_RK3576_PC_DONE_1))) { + atomic_set(&core->poll_active, 0); + schedule_work(&core->poll_work); + return HRTIMER_NORESTART; + } + + hrtimer_forward_now(timer, ns_to_ktime(RK3576_POLL_INTERVAL_NS)); + return HRTIMER_RESTART; +} + +static void rocket_poll_work_fn(struct work_struct *work) +{ + struct rocket_core *core =3D container_of(work, struct rocket_core, poll_= work); + + rocket_job_handle_irq(core); +} + static void rocket_job_handle_irq(struct rocket_core *core) { + struct rocket_job *job; + + /* Stop the completion poll =E2=80=94 we're handling it now. */ + atomic_set(&core->poll_active, 0); + hrtimer_cancel(&core->poll_timer); + pm_runtime_mark_last_busy(core->dev); =20 rocket_pc_writel(core, OPERATION_ENABLE, 0x0); - rocket_pc_writel(core, INTERRUPT_CLEAR, 0x1ffff); - - scoped_guard(mutex, &core->job_lock) - if (core->in_flight_job) { - if (core->in_flight_job->next_task_idx < core->in_flight_job->task_coun= t) { - rocket_job_hw_submit(core, core->in_flight_job); - return; - } - - iommu_detach_group(NULL, iommu_group_get(core->dev)); - dma_fence_signal(core->in_flight_job->done_fence); - pm_runtime_put_autosuspend(core->dev); - core->in_flight_job =3D NULL; + rocket_pc_writel(core, INTERRUPT_CLEAR, + 0x1ffff | + PC_INTERRUPT_MASK_RK3576_PC_DONE_0 | + PC_INTERRUPT_MASK_RK3576_PC_DONE_1); + + scoped_guard(mutex, &core->job_lock) { + job =3D core->in_flight_job; + if (!job) + return; + + if (job->next_task_idx < job->task_count) { + rocket_job_hw_submit(core, job); + return; } + + iommu_detach_group(job->domain->domain, core->iommu_group); + dma_fence_signal(job->done_fence); + pm_runtime_put_autosuspend(core->dev); + core->in_flight_job =3D NULL; + } } =20 static void rocket_reset(struct rocket_core *core, struct drm_sched_job *bad) { + struct rocket_job *job; + if (!atomic_read(&core->reset.pending)) return; =20 + atomic_set(&core->poll_active, 0); + hrtimer_cancel(&core->poll_timer); + cancel_work(&core->poll_work); + drm_sched_stop(&core->sched, bad); =20 - /* - * Remaining interrupts have been handled, but we might still have - * stuck jobs. Let's make sure the PM counters stay balanced by - * manually calling pm_runtime_put_noidle(). - */ scoped_guard(mutex, &core->job_lock) { - if (core->in_flight_job) + job =3D core->in_flight_job; + if (job) { pm_runtime_put_noidle(core->dev); - - iommu_detach_group(NULL, core->iommu_group); - - core->in_flight_job =3D NULL; + iommu_detach_group(job->domain->domain, core->iommu_group); + core->in_flight_job =3D NULL; + } } =20 - /* Proceed with reset now. */ rocket_core_reset(core); =20 - /* NPU has been reset, we can clear the reset pending bit. */ atomic_set(&core->reset.pending, 0); =20 - /* Restart the scheduler */ drm_sched_start(&core->sched, 0); } =20 @@ -385,7 +454,14 @@ static enum drm_gpu_sched_stat rocket_job_timedout(str= uct drm_sched_job *sched_j struct rocket_device *rdev =3D job->rdev; struct rocket_core *core =3D sched_to_core(rdev, sched_job->sched); =20 - dev_err(core->dev, "NPU job timed out"); + if (pm_runtime_active(core->dev)) + dev_err(core->dev, + "NPU job timed out: RAW_STATUS=3D0x%08x MASK=3D0x%08x OP_EN=3D0x%08x\n", + rocket_pc_readl(core, INTERRUPT_RAW_STATUS), + rocket_pc_readl(core, INTERRUPT_MASK), + rocket_pc_readl(core, OPERATION_ENABLE)); + else + dev_err(core->dev, "NPU job timed out (device not active)\n"); =20 atomic_set(&core->reset.pending, 1); rocket_reset(core, sched_job); @@ -420,14 +496,16 @@ static irqreturn_t rocket_job_irq_handler(int irq, vo= id *data) { struct rocket_core *core =3D data; u32 raw_status =3D rocket_pc_readl(core, INTERRUPT_RAW_STATUS); + /* Only bits 0-13 (DMA errors) can raise this IRQ; PC_DONE is polled. */ + u32 active =3D raw_status & 0x3fff; + + if (!active) + return IRQ_NONE; =20 WARN_ON(raw_status & PC_INTERRUPT_RAW_STATUS_DMA_READ_ERROR); WARN_ON(raw_status & PC_INTERRUPT_RAW_STATUS_DMA_WRITE_ERROR); =20 - if (!(raw_status & PC_INTERRUPT_RAW_STATUS_DPU_0 || - raw_status & PC_INTERRUPT_RAW_STATUS_DPU_1)) - return IRQ_NONE; - + rocket_pc_writel(core, INTERRUPT_CLEAR, active); rocket_pc_writel(core, INTERRUPT_MASK, 0x0); =20 return IRQ_WAKE_THREAD; @@ -445,6 +523,10 @@ int rocket_job_init(struct rocket_core *core) int ret; =20 INIT_WORK(&core->reset.work, rocket_reset_work); + INIT_WORK(&core->poll_work, rocket_poll_work_fn); + hrtimer_setup(&core->poll_timer, rocket_poll_timer_fn, CLOCK_MONOTONIC, + HRTIMER_MODE_REL); + atomic_set(&core->poll_active, 0); spin_lock_init(&core->fence_lock); mutex_init(&core->job_lock); =20 @@ -486,6 +568,10 @@ int rocket_job_init(struct rocket_core *core) =20 void rocket_job_fini(struct rocket_core *core) { + atomic_set(&core->poll_active, 0); + hrtimer_cancel(&core->poll_timer); + cancel_work_sync(&core->poll_work); + drm_sched_fini(&core->sched); =20 cancel_work_sync(&core->reset.work); --=20 2.43.0 From nobody Sat Jul 25 05:29:19 2026 Received: from flow-b8-smtp.messagingengine.com (flow-b8-smtp.messagingengine.com [202.12.124.143]) (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 C06103E51D2; Fri, 17 Jul 2026 08:55:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278504; cv=none; b=WqFMOWIbUxQ1l6NWd7caZBBRymoqIimyTOjyAgsNsbx9MzStGbjVjTCAINWJt4O/V+qZNycx7BUmpcgz41nx+qrjcUHEBhiZRzWGSg1a+V/LtMj67GIDIgi6l3btLXmfZ/VipAtpZ+zCYFRo2/ZCWEF4wa5y24rbvqDdZUNJ2w0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278504; c=relaxed/simple; bh=AugLiOZZpf43n382xKWhWhjP3bM2FaMd0KmVHw7e7Z8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OuOq1DuZliB+4tRXYP3hTdtZDF14dHvJakQioRX7rXHidmDB6ZxDiEix0F2dkebdsYG7Fs4ddC+Q0enqw6dzwNU+ppGO26WZKk2A7Owe5DPnfajvJA7jZQhAIswzrjcG7Pwf8gluFbM6+cN4stBLK/tC3IYX3JpA24vJ6k7+wHc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com; spf=pass smtp.mailfrom=gahingwoo.com; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b=Q8I9FTk/; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=aDYxsq8t; arc=none smtp.client-ip=202.12.124.143 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b="Q8I9FTk/"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="aDYxsq8t" Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailflow.stl.internal (Postfix) with ESMTP id AB8BB13002E3; Fri, 17 Jul 2026 04:55:01 -0400 (EDT) Received: from phl-frontend-03 ([10.202.2.162]) by phl-compute-04.internal (MEProxy); Fri, 17 Jul 2026 04:55:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gahingwoo.com; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784278501; x= 1784282101; bh=RGge6AXelYw4CHxTjY9ZAudHE/paAHJpZ+SOWdc+8nE=; b=Q 8I9FTk/YSI557MXnaI3wellQZxcA7TFXnEyTBnvAA0O62HEtytKGJY18Pa6QDzeP 4QWMMIKUa8+ZsUO8hgk2npNjtLEzRIbKOBAGjXkHgSAAuUzVAbPaKDukGSC/a7+x EqvBbhuHTzgIg+lGVbCIZNPl1W5cyP4m+437QKvbHAcPck1ylMRnPaX3vEQsD/oY Y6SqpoEzWWSb/6uWmUXCF5GMGeczfJpjuIxUibKqGt9uB5WmRbPhaUTnuR/zGgfB zj5uVO1EbsbIGqLcv4Wlqku5iM3zAbRjbp6ceXFFdae8FSRHHT0O0nTmg+j3yGPl pW5IDLIX6DBpl6V26WZng== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784278501; x=1784282101; bh=R Gge6AXelYw4CHxTjY9ZAudHE/paAHJpZ+SOWdc+8nE=; b=aDYxsq8tbe8PRw2WR dH8FI+FnghlkI/goafbeHb/wj83s/04JuqApB5WAL6UFfmqQW2fG3jUI7awwuaKQ 5K735JsL5Kb8MDWrmfW50F7yiBrjrKtscK44nO3lBwtDan7g6/6093PgJiqaLFId qLxqbw0Pz2bdLCWkNm8qQ4Evyq56NGEVT3dVDvHskq8Qr9ihJ3MZVgXpUjOwL6am gXFXAW+Jd07xsXA/uhNu3PkQt7ifQUSKMZyhKI8wya787EUfRZWXpXNKMZPl6jzI zsvJ7eYb1+ndqT08XikyxTxRnwJLm6JijYgGLb7oz/YppxqV609tyi7pQoQqZTSb Q2P4A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFS7GW/vS+PGg3aNaRtXNWwH13wr4t6a3PsYvzLEfoa0d1tCLQMk4kuPOyqJxWYg8 zWRgYifu3Q3qEvL/I6D+A7sONbehMF6Fzv0Jx15W8Bp0zPI2L6EoHnTvsn7KCzlmdcjq5Z AMiUX8pm/4UU/5q2rly/ctUYuGrpfv6aggolOMe4+7cw+YQgQv04wJ8otXu77hR4cT4fFc rauulgYGXJAH/ttinZ2FdpHwYOQghdgc8wZDZhtrydZHcBfVIkqxRabCZivPsjLLb49//R HUixI1q1RTZqMytwufV0grN2inkZxcvjyE8RnYSpDV3z9U1hNPWgMeNXqfzcYN3TNROTO3 m2XgDeRL8h/bOgSUAAZ2VtgJ4DeG3rEfL6GsQJybJ1AFKI2GRQdxSQSwiVJhthZHSptJyZ BQvWLmIrmOq8N6mDQ6gyKaBMsJ9dYxxwlFNCP7T4KFOsjTr2ACESPR4nDDZOxM/whFn9Sn 3PFxQdr1+3IDjohIXLZlXCKNwqORzJaP3UR18PanRRk+mVXMAr3Xp1TlEhl8ZWSUYbF9QL fx89mNcd8gYaO2N2IuBr5sF4dNqVOgM+PCDei2f7An6h1m1UGRA/giV+VV3keAHiujraiP syJS/ZjtPZehGqF6eVFNlCw6u2RqORzsz79OKqO65fj3pHM81dE6xK8Mkf0A X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 17 Jul 2026 04:54:55 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, iommu@lists.linux.dev, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: [RFC PATCH 8/9] arm64: dts: rockchip: rk3576: add NPU (RKNN) nodes Date: Fri, 17 Jul 2026 20:50:46 +1200 Message-ID: <20260717085220.3212274-9-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260717085220.3212274-1-gahing@gahingwoo.com> References: <20260717085220.3212274-1-gahing@gahingwoo.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add the RK3576 NPU: rknn_core_0/1 and rknn_mmu_0/1, with register addresses, GIC_SPI 247/248 interrupts, clocks, resets and power-domains. Run the full RKNN clock set (CLK_RKNN_DSU0, ACLK_RKNN0/1, HCLK_RKNN_ROOT, ACLK/HCLK_RKNN_CBUF) during the NPU0/NPU1 power transitions and on the MMU nodes; without the functional and CBUF clocks the block powers on but its registers (including the IOMMU banks) read back dead. Drive the RKNN BIU reset (SRST_A_RKNN0/1_BIU) from the power domain so it fires before the IOMMU resumes. Signed-off-by: Jiaxing Hu --- arch/arm64/boot/dts/rockchip/rk3576.dtsi | 78 +++++++++++++++++++++++- 1 file changed, 76 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3576.dtsi b/arch/arm64/boot/dts= /rockchip/rk3576.dtsi index e12a2a0cf..5033f7628 100644 --- a/arch/arm64/boot/dts/rockchip/rk3576.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3576.dtsi @@ -1070,14 +1070,22 @@ power-domain@RK3576_PD_NPUTOP { power-domain@RK3576_PD_NPU0 { reg =3D ; clocks =3D <&cru HCLK_RKNN_ROOT>, - <&cru ACLK_RKNN0>; + <&cru ACLK_RKNN0>, + <&cru CLK_RKNN_DSU0>, + <&cru ACLK_RKNN_CBUF>, + <&cru HCLK_RKNN_CBUF>; + resets =3D <&cru SRST_A_RKNN0_BIU>; pm_qos =3D <&qos_npu_m0>; #power-domain-cells =3D <0>; }; power-domain@RK3576_PD_NPU1 { reg =3D ; clocks =3D <&cru HCLK_RKNN_ROOT>, - <&cru ACLK_RKNN1>; + <&cru ACLK_RKNN1>, + <&cru CLK_RKNN_DSU0>, + <&cru ACLK_RKNN_CBUF>, + <&cru HCLK_RKNN_CBUF>; + resets =3D <&cru SRST_A_RKNN1_BIU>; pm_qos =3D <&qos_npu_m1>; #power-domain-cells =3D <0>; }; @@ -1804,6 +1812,72 @@ qos_npu_m1ro: qos@27f22100 { reg =3D <0x0 0x27f22100 0x0 0x20>; }; =20 + rknn_core_0: npu@27700000 { + compatible =3D "rockchip,rk3576-rknn-core"; + reg =3D <0x0 0x27700000 0x0 0x1000>, + <0x0 0x27701000 0x0 0x1000>, + <0x0 0x27703000 0x0 0x1000>, + <0x0 0x27704000 0x0 0x1000>, + <0x0 0x27705000 0x0 0x1000>; + reg-names =3D "pc", "cna", "core", "dpu", "dpu_rdma"; + interrupts =3D ; + clocks =3D <&cru ACLK_RKNN0>, <&cru HCLK_RKNN_ROOT>, + <&cru CLK_RKNN_DSU0>, <&cru PCLK_NPUTOP_ROOT>, + <&cru ACLK_RKNN_CBUF>, <&cru HCLK_RKNN_CBUF>; + clock-names =3D "aclk", "hclk", "npu", "pclk", + "aclk_cbuf", "hclk_cbuf"; + resets =3D <&cru SRST_A_RKNN0>; + reset-names =3D "srst_a"; + power-domains =3D <&power RK3576_PD_NPU0>; + iommus =3D <&rknn_mmu_0>; + status =3D "disabled"; + }; + + rknn_mmu_0: iommu@27702000 { + compatible =3D "rockchip,rk3576-iommu", "rockchip,rk3568-iommu"; + reg =3D <0x0 0x27702000 0x0 0x100>, + <0x0 0x27702100 0x0 0x100>; + interrupts =3D ; + clocks =3D <&cru ACLK_RKNN0>, <&cru HCLK_RKNN_ROOT>, + <&cru CLK_RKNN_DSU0>, <&cru ACLK_RKNN_CBUF>, + <&cru HCLK_RKNN_CBUF>; + #iommu-cells =3D <0>; + power-domains =3D <&power RK3576_PD_NPU0>; + status =3D "disabled"; + }; + + rknn_core_1: npu@27710000 { + compatible =3D "rockchip,rk3576-rknn-core"; + reg =3D <0x0 0x27710000 0x0 0x1000>, + <0x0 0x27711000 0x0 0x1000>, + <0x0 0x27713000 0x0 0x1000>, + <0x0 0x27714000 0x0 0x1000>, + <0x0 0x27715000 0x0 0x1000>; + reg-names =3D "pc", "cna", "core", "dpu", "dpu_rdma"; + interrupts =3D ; + clocks =3D <&cru ACLK_RKNN1>, <&cru HCLK_RKNN_ROOT>, + <&cru CLK_RKNN_DSU0>, <&cru PCLK_NPUTOP_ROOT>; + clock-names =3D "aclk", "hclk", "npu", "pclk"; + resets =3D <&cru SRST_A_RKNN1>; + reset-names =3D "srst_a"; + power-domains =3D <&power RK3576_PD_NPU1>; + iommus =3D <&rknn_mmu_1>; + status =3D "disabled"; + }; + + rknn_mmu_1: iommu@2770a000 { + compatible =3D "rockchip,rk3576-iommu", "rockchip,rk3568-iommu"; + reg =3D <0x0 0x2770a000 0x0 0x100>, + <0x0 0x2770a100 0x0 0x100>; + interrupts =3D ; + clocks =3D <&cru ACLK_RKNN1>, <&cru HCLK_RKNN_ROOT>, + <&cru CLK_RKNN_DSU0>, <&cru ACLK_RKNN_CBUF>, + <&cru HCLK_RKNN_CBUF>; + #iommu-cells =3D <0>; + power-domains =3D <&power RK3576_PD_NPU1>; + status =3D "disabled"; + }; + gmac0: ethernet@2a220000 { compatible =3D "rockchip,rk3576-gmac", "snps,dwmac-4.20a"; reg =3D <0x0 0x2a220000 0x0 0x10000>; --=20 2.43.0 From nobody Sat Jul 25 05:29:19 2026 Received: from flow-b8-smtp.messagingengine.com (flow-b8-smtp.messagingengine.com [202.12.124.143]) (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 88B003E44F3; Fri, 17 Jul 2026 08:55:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278523; cv=none; b=nR3WcGzUqaHw3t5no5ZzzjWPn2NuBhgth7YwXJKcO8zDbPbUGYIqVq5JgIH0CQCgiWONAqQShi22jvfd/Ups/U8EXSGjPjVGcsT2rFm94RubGZfmwI6vRTdoV4hM/5+2xOj2umqAlSJ3OO5382i1jBw8Nn7N693eq1F2OOatTeI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784278523; c=relaxed/simple; bh=xwyTtf8+JfQD1dpFKE+tIj/qERhLNymFR9/Nw9qnYNI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RQotDr7BpEHILhrXI9omEz7Cc0MTQnPn9kpQ46ezMxW8xgMZjp7+KmD8GWo4Q3HL6yFGsmBgjx5w7Vgqp0Aiuu/RMZLDHKcuv4GSDsWdq7FC37q1LMiLqlITd85n/JiUg1n5ZA57vUjdXYwtuNZsjSTB4Q3FeadnR19Vgjs4Bhc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com; spf=pass smtp.mailfrom=gahingwoo.com; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b=EgKc7488; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=c2N3OeLE; arc=none smtp.client-ip=202.12.124.143 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gahingwoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gahingwoo.com header.i=@gahingwoo.com header.b="EgKc7488"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="c2N3OeLE" Received: from phl-compute-10.internal (phl-compute-10.internal [10.202.2.50]) by mailflow.stl.internal (Postfix) with ESMTP id 999A013002E9; Fri, 17 Jul 2026 04:55:21 -0400 (EDT) Received: from phl-frontend-03 ([10.202.2.162]) by phl-compute-10.internal (MEProxy); Fri, 17 Jul 2026 04:55:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gahingwoo.com; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784278521; x= 1784282121; bh=Zvd1osMYewGqon41SsFYB9MFb6slH1HcdKHtX5RAEpk=; b=E gKc7488I5Z9VTl7QMWXAF/psMQGuTz+k6DzFkDtAGftumnkGTZfPk2hkAncjLENy 3lhd+L/wvAV+XUcWtlBqrHwn+s0Ptx3qMEb6EBdCH2cIee+3P6sk/vOURW+EgVq9 UB41pWP9mMx4qIiuvzzglXlEyCdQnFKwtbCnfnoG9hX+JHHAnWgGHy38UYsPmYyl w2FFb1uX313jG54k9GbVvswxVZDI6FqJ3B/oOwQIAwYhYKNcDJETZHF/1Mh5RuLj C6ETziDGp6s+mtmZo9GMsnX4xv1sA5kJdPq0bri+aR2EkdYFiIJitjBE2Tv0RN1K HBvKSWRdbBfLKrgyBb15Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784278521; x=1784282121; bh=Z vd1osMYewGqon41SsFYB9MFb6slH1HcdKHtX5RAEpk=; b=c2N3OeLEOynyxMYUC uxfQfjDMA5BKinX4c5noX8w1esmnWz6udH74WmYHNk6ijpjIyYSUC6JeJ3heqsW8 +X9qarILtjVfgUKbDdG6OZFZO95Ompz1vYt97/hBxxEJkHxjhMojT8GRDwqjaBbX p347mov/v+8CGtA8l4iE6+ayXlg3ZPf7SutFipH9kxejEBPVJQPYCb2/h2Akb5L7 NKY78pA4xhlGqQXpH3twO+qDTPXjme8bEFlgPFBRx1FfNi+p47b0LcUlsweUwaz4 qPxi/VXQA3ZIBWfGG7nyDmVZhxTK7aVaGXBPX7xX2lldUDzvLPXBiOk7PXjaNqHF tCtUQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFS7GW/vS+PGg3aNaRtXNWwH13wr4t6a3PsYvzLEfoa0d1tCLQMk4kuPOyqJxWYg8 zWRgYifu3Q3qEvL/I6D+A7sONbehMF6Fzv0Jx15W8Bp0zPI2L6EoHnTvsn7KCzlmdcjq5Z AMiUX8pm/4UU/5q2rly/ctUYuGrpfv6aggolOMe4+7cw+YQgQv04wJ8otXu77hR4cT4fFc rauulgYGXJAH/ttinZ2FdpHwYOQghdgc8wZDZhtrydZHcBfVIkqxRabCZivPsjLLb49//R HUixI1q1RTZqMytwufV0grN2inkZxcvjyE8RnYSpDV3z9U1hNPWgMeNXqfzcYN3TNROTMi g6lcYmPvi0ApJCuAabf56PdATqWvLMqqCJcKwwqf0txVfcxEFd+NU5gwyCeb3MzCwQHT4s EYXLpjKzizp+/UuGKB61wzx+QKsc4bJ+eA7Tcughh+f+oX0EK2E+8ajqxfHbtGhkgMdraU j2th4GtLuUd00xhVbvRlL17mbuXgmQPIe9KShH84oXetiVFix/VxRfbJKcEiu+tPu/4qAy 6LzMCGZJzCC1rlQBrFP+2s18jy5eOZIAJrxhuQdL/iREbdthHA9uD4/9o++C0Vyo1Cw8lp 6h4ZTMPnLU/gcmGCjyf19X1ADFp+MT0enTqyJ9/FtLX4vM858uFBQaTmIZkg X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 17 Jul 2026 04:55:15 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, iommu@lists.linux.dev, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: [RFC PATCH 9/9] arm64: dts: rockchip: rk3576-rock-4d: enable NPU Date: Fri, 17 Jul 2026 20:50:47 +1200 Message-ID: <20260717085220.3212274-10-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260717085220.3212274-1-gahing@gahingwoo.com> References: <20260717085220.3212274-1-gahing@gahingwoo.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Enable rknn_core_0 and rknn_mmu_0 on the Radxa ROCK 4D. Supply the NPU rail (vdd_npu_s0) via npu-supply; it is marked regulator-always-on for now because the NPU power sequencing is still being brought up (see the cover letter) -- happy to switch to proper runtime control once the compute path is sorted. Signed-off-by: Jiaxing Hu --- arch/arm64/boot/dts/rockchip/rk3576-rock-4d.dts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3576-rock-4d.dts b/arch/arm64/b= oot/dts/rockchip/rk3576-rock-4d.dts index 272af1012..09d2fc98b 100644 --- a/arch/arm64/boot/dts/rockchip/rk3576-rock-4d.dts +++ b/arch/arm64/boot/dts/rockchip/rk3576-rock-4d.dts @@ -442,6 +442,7 @@ regulator-state-mem { }; =20 vdd_npu_s0: dcdc-reg2 { + regulator-always-on; regulator-boot-on; regulator-enable-ramp-delay =3D <400>; regulator-min-microvolt =3D <550000>; @@ -869,3 +870,18 @@ vp0_out_hdmi: endpoint@ROCKCHIP_VOP2_EP_HDMI0 { remote-endpoint =3D <&hdmi_in_vp0>; }; }; + +&rknn_core_0 { + npu-supply =3D <&vdd_npu_s0>; + /* + * Power BOTH NPU domains (NPU0 + NPU1) like the vendor's single NPU node, + * even though rocket computes only on core 0: the CBUF->CMAC read path is + * only fully powered with NPU1 up. rocket attaches the multi-PD list. + */ + power-domains =3D <&power RK3576_PD_NPU0>, <&power RK3576_PD_NPU1>; + status =3D "okay"; +}; + +&rknn_mmu_0 { + status =3D "okay"; +}; --=20 2.43.0