From nobody Fri Oct 2 13:04:17 2026 Received: from flow-a8-smtp.messagingengine.com (flow-a8-smtp.messagingengine.com [103.168.172.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 94C28352019; Fri, 31 Jul 2026 04:35:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472527; cv=none; b=pNHv69Wpsjp0B1iy2a/zFoxayTgdAmu4FeYGq9XJn/zOkRJT07eZbVCzUa+RoILLRSKkD1bqaJKrClhYZqB0VRMX8n7V1eoe72zpWQAqE+V8KAzmryWkGjxh3x5vLG25b7JcUCyj4lcUbe/41oTdkh5h35FERoBGnTpsvnJFCj8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472527; c=relaxed/simple; bh=3ivv1mltqxjq4IGCvAiFS9StUQ0xJUEE22WqT/qpA/0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Jg3+gA+YJIzPGAzpi+RFx9eVIgohutzm9SDE45dZp6o4aWfptOjvIfuu3biZ/NpWbE3TzeTbA9q7VCghwlyyqWVr+QXCYgAVfkNLEgsgTP8LWSYIve9z+bKNwgi6Lkfyw3YoO710as7o4xj7l0JdBvIZAqRFg0f9IywXd9kfObs= 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=Ov2Nw5/Z; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=M7wJ1/Fh; arc=none smtp.client-ip=103.168.172.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="Ov2Nw5/Z"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="M7wJ1/Fh" Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailflow.phl.internal (Postfix) with ESMTP id B8EA51380308; Fri, 31 Jul 2026 00:35:24 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Fri, 31 Jul 2026 00:35:24 -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=1785472524; x= 1785476124; bh=Ou8Q2+MSVN0oE4OVVJlFXqxdMV+YjRi2MbtXNEWiRwQ=; b=O v2Nw5/ZOoSy1FFXTS/jDaGrlo8sv84qFG52z2bdplFOAHaDjxuCIRx6NQMiDX7ZM pLrb9mRn1mHd0GJselwrSvgOc6WDP0sSh59QV5WI0LNe1FHAUz9VhT1WZU1DOz3l wcmgwcx4cswFCIwwtyHaLWFMsgiqP5zXQeLrTJE/9xSFOYd1OHVDMSRyFZsGFtlQ b7z3Y1RPGrjuS9YDgOzLoWkISnSJfEp0VC9hKorgTNLz33GSp71jNenWihSP+sLQ mHy+hxIu/zM/2mz4rQSyC7OiFfqMz5d0w8ADgUrp80oj3Fy7kpcgSqzdEMfCkg7a S0DIkxs1C5ArJrU2LrrWQ== 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=1785472524; x=1785476124; bh=O u8Q2+MSVN0oE4OVVJlFXqxdMV+YjRi2MbtXNEWiRwQ=; b=M7wJ1/FhyWrXejc64 SY8nJMkE9zUP7kMFNN0M1jg+YEfWZY5THviSlcI27HjwNx0o9UBDxfk3mMvuP0BK GnH8wQJ5oMqgctMcmMedAx426jTY/Oqki37rv2Q72PygMbZTw2KqTIFZJN027vMV 8IkAwToyDwEpjWekwcSB3Nv7k7b+yue1CCUiZ5Ova5DDqS8kI21uAowuOvo/JCTQ AAxV3/cxXTOilGZaNHLt7h3Atnu/Pzj8A9Fz4MXEmXckTaVPd3kEGvTYSou1ni4+ 4tbtZyH5Zu7ZGv01QWHInvFyGmQzndHzrFNNzHEoB6WCf3vfJJlHIfhvdEL/ecY4 s3L4g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTGYT4kL28qB16BISDukPuRI13bgUTT3tZ+FwfFOi9iyRIQ4cdWQvs+qtyjYhb8aZv 7ZNLDkjsiNZpV57v6b2mii/c57NwdcNZfLGFST9tf2uM8u59dW+Prl9GdDUx4nV+E4lAra SQEwebYcIunW3qRo5j2tIFm46bFqTUlJGjqQ9G9vA9CMpIOxOxZMoG/yT+2+8464KOGHAY 8imDrR7vRedTQm5ukLhDfImc5hqq/PMdpFBDkbYJy2uWgqM9NADLHcVQwbEaQMfbuf/RMq 10+PB7Nd2itAuYvcdzVTZtUYUQ86psUPJqGvTKqOSymMowMLYjogTDdmqQ1+5Yqwyb6wit TQjBoFlwpdLyfEO/KxYemvrbcVe8G49fpWO0tOwBQ9CjV1o+UpO3LLy8+8uzI0hSqCYV4A fSihuXbNSR15Yi6RYkjvsh72W85eyZgL3YvL8Ar1y/jS5CqUmOYmlJ5s1b/dvaIpxeFKUY m5ZClbJxdZn7MNPFxSyBjB7czQHdHJb06ppeElVsuCliWH26cFvyTS3yMyrtT7XTq1AXky stOF7batlNgf0PjsvOSa9XO3+PO0v8tI3JmhP7/ggF4IQLQIT2IndGJeMkqSfG41vpcEkE yyIRrDSSeboNO72b9Bx+Ovl9VHqP8SrEi4WgDQDxowIxGAkkB2R/YzPWrcBg X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 31 Jul 2026 00:35:19 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: chaoyi.chen@rock-chips.com, alchark@flipper.net, royalnet026@gmail.com, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, 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 v3 1/6] dt-bindings: npu: rockchip: add rockchip,rk3576-rknn-core Date: Fri, 31 Jul 2026 16:35:02 +1200 Message-ID: <20260731043507.1832277-2-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260731043507.1832277-1-gahing@gahingwoo.com> References: <20260731043507.1832277-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 has two cores of the same RKNN block the RK3588 binding already describes, but no NPU SRAM supply, so sram-supply is required for rockchip,rk3588-rknn-core only and rejected otherwise. Signed-off-by: Jiaxing Hu --- .../bindings/npu/rockchip,rk3588-rknn-core.yaml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 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..0a7baac24 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,19 @@ required: - resets - reset-names - npu-supply - - sram-supply + +allOf: + - if: + properties: + compatible: + contains: + const: rockchip,rk3588-rknn-core + then: + required: + - sram-supply + else: + properties: + sram-supply: false =20 additionalProperties: false =20 --=20 2.43.0 From nobody Fri Oct 2 13:04:17 2026 Received: from flow-a8-smtp.messagingengine.com (flow-a8-smtp.messagingengine.com [103.168.172.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 64C6C33939D; Fri, 31 Jul 2026 04:35:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472535; cv=none; b=K1FF2l40u4JK/4BxYh0Borh7LNIaoB+JMpP7mOlo6P0copSqYsiuZvtEBgZnYZw7nKoNi1ckm9AXgQ52sOCel59+oBC/9/oHoO+JrdIT70TCCFreGbkDNwmef0IfYuwqurGQ7NzsnTdfcbssxRY64Zw1jEI+NL6btryxCuO2IUk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472535; c=relaxed/simple; bh=Nqr6CHpbpiWW3sfNMJPrm+iAevtY2L63F6/aYqFMSg8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=A0+VhNfm5lOkHgzAASYf2tBZPs1ciHJaE3BCaUuLTAIOJf5+AgakZUmj9Q72nv1K52N5Mh9fX7oxfyFFfd40IjepW6vm2+4P5CYgbbD4BInR55BqaMGf3LEFdLheL0B/5mHMfHqGsDtKggb5J4RyIBvpYxk+NEMZWRm9lGqKl4U= 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=ceMmo2sL; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=RFMN/OYm; arc=none smtp.client-ip=103.168.172.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="ceMmo2sL"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="RFMN/OYm" Received: from phl-compute-06.internal (phl-compute-06.internal [10.202.2.46]) by mailflow.phl.internal (Postfix) with ESMTP id 80BF21380308; Fri, 31 Jul 2026 00:35:32 -0400 (EDT) Received: from phl-frontend-03 ([10.202.2.162]) by phl-compute-06.internal (MEProxy); Fri, 31 Jul 2026 00:35:32 -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=1785472532; x= 1785476132; bh=VvFxDkgIfF4tDBD9QKpFN4dgXBjYLgU2XHjl6k+8r/M=; b=c eMmo2sLsEwi/GhXBRJSGYhUEAzazg/dydcjgnkzahm4pVaQYYHh2b5v4G4vOC56W 9W5hdnfJaoI+TTN7VMZD15LjX1CkBUPiBj34dvJJsGcLU4CGuXeTAQEtQ89RPg2j 5oDH/NQvCZHSQtEdGnt82UDQHJTps0bCx1ePQx4tUnALpU/PRDhK2rVHe8mLqVOP 6n81JU9ka1TJEcHDxU/6OMhBkWejRA74paHMWt7Npgiaa0KRkkztSTUo2/jc5aA6 22A9nViqHdgmVCniwAsya1LcP592rGPvwDrCbT2teP8IQzVCGYMleCvCtm+o5iXJ EDI6CUBq1xr0VvG43Z46A== 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=1785472532; x=1785476132; bh=V vFxDkgIfF4tDBD9QKpFN4dgXBjYLgU2XHjl6k+8r/M=; b=RFMN/OYmnr/w4gRH4 unlqSe2v+v8GYNk+ApcFiLZizmIgOjlvcLhK35k9OPKoEfkkkx0w2WliS+pV+Q5Q Ai2jIdWW+ig8HuSbKpvoqbI4O8dI0PrXMbxfPsWyGyda1vp+d8d+zb5Qq8VJe15L Z6PpmfqlSIYkl2WKhOJRCMoje/fsrnuaeKB5ZGX5gvcJG8TDK7Vv5H2nNQE7MihV GlrIZIerI3qivdL3GEu7wXdiKJFfVIDtdBOLMtkWnaeZwVi7wO5h3zVbaj9knhAu GxrzuSZJ1/kOvISZ2LPfSATRiG7y4sSqbjwY+I2RlP0YIgwcJb1IoaL9VnvFxjQ1 GwAHw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTF8sD394lmCh4bBILhIMKVCxZujkZC4HlhAlb1eGKAAio9lvVIrql9/Thjmj0PtFZ PTYJJMYJqSaWRvldah/DDdEuATX0c7SCchrtH+GXsJAjXTDng0ARkyc1L5kt71yJXQS1fz SuwQTDjUHkJ8DiAA0q5X+/cr+6kDvceTSWa2s5H+aCXGtfFDLGiRLQ7cL14b7N1WNfozUn A6eIjMU6jhefqnlUAWJMOGBErdNiW+Ohg422WiypYdl5HtAT1EhJh/zxcJ33OpVcFw4zgr VaE1u+Waf1BXL8a31jll6LvWthjXrzIH2KY2kTM++EM0QFFr+bJhvr6bS/ZD6jNnokQMLj QaWt71rTPOD7+6lVwfhlaCPwmf9E1kWv0X3TTgy3OncK7bNJKV4R323yiv+005oNPZd3OR NkoOvqkTdsacQrxIHLVeBRTF0faZFo0J+mz/Ua9LhXn9/haVDtyTJoXDZq02eRNtMKLhuf JOCPXCTU2nggYAxOucCpmf0MJvcpRUK0XnV8J/wbPlHQrHzwltxxVubziJZLpWAM8JNlrU 6zuDehiWM4gzIiQ786eVYBhbN64/ff3D4YUqsjGnUF8fjVmjp5BhNRTDGFTw8VrMQEx8WJ f5VGr/7Omo7WUAklq0Hw2xapUVl29NvFtu3iclVnEqspgRLBwtMBFF4O3tjA X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 31 Jul 2026 00:35:27 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: chaoyi.chen@rock-chips.com, alchark@flipper.net, royalnet026@gmail.com, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, 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 v3 2/6] pmdomain/rockchip: add optional per-domain power-on settle delay Date: Fri, 31 Jul 2026 16:35:03 +1200 Message-ID: <20260731043507.1832277-3-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260731043507.1832277-1-gahing@gahingwoo.com> References: <20260731043507.1832277-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 answer. Without it rockchip_pmu_restore_qos() reads back zeroes, and the NPU throws an async SError on the first cold power-on. Give rockchip_domain_info an optional delay_us and wait for it between releasing idle and restoring QoS. Rename DOMAIN_M_O_R_G to DOMAIN_M_O_R_G_W, since the suffixes name the fields the macro sets and this one now also carries a wakeup delay; RK3576 is its only user, so the old spelling is not kept around. Signed-off-by: Jiaxing Hu --- drivers/pmdomain/rockchip/pm-domains.c | 52 +++++++++++++++----------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rock= chip/pm-domains.c index ba66ae719..e1857f878 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 @@ -59,6 +60,7 @@ struct rockchip_domain_info { u32 pwr_offset; u32 mem_offset; u32 req_offset; + u32 delay_us; }; =20 struct rockchip_pmu_info { @@ -185,7 +187,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_W(_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 +202,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, \ } @@ -258,8 +261,8 @@ struct rockchip_pmu { #define DOMAIN_RK3568(name, pwr, req, wakeup, regulator) \ DOMAIN_M_R(name, pwr, pwr, req, req, req, wakeup, regulator) =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_W(name, p_offset, pwr, status, 0, r_status, r_status, r_of= fset, req, idle, idle, g_mask, delay, wakeup) =20 /* * Dynamic Memory Controller may need to coordinate with us -- see @@ -681,6 +684,10 @@ static int rockchip_pd_power(struct rockchip_pm_domain= *pd, bool power_on) if (ret < 0) goto out; =20 + /* Some domains need to settle before the QoS registers answer. */ + if (pd->info->delay_us) + udelay(pd->info->delay_us); + rockchip_pmu_restore_qos(pd); } =20 @@ -1300,25 +1307,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 s= tatus 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 Fri Oct 2 13:04:17 2026 Received: from flow-a8-smtp.messagingengine.com (flow-a8-smtp.messagingengine.com [103.168.172.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 B143233939D; Fri, 31 Jul 2026 04:35:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472543; cv=none; b=P6E5+m1sekeVAc1UD1OxrptTo6WKszJvLkDxN7NqWgTEWpjn6FNiL8f4PzYXDv5PMrGCNF5EPOunRSuFKGxmaxC2n31wOlZBCEKTqmKDVoclABU4CTzvMw1p1M/pqkExpqiGvdIKd6chaYJ8WU0MIMtI/Lh8hWdAdOIm6e/Xn7c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472543; c=relaxed/simple; bh=NYWeX1zT+UWLIEpQ6DXkvnWhzoaOxj6r57zcKYjDIXg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kZCbvMF9IdlxtHH/HNzydU9ZCpgYo5d4YBfsk/RmVQ+IV5H4AlYdVeI4NWZ5zTUgxj2wl3DfXFWLSswtHJM+MtRbgyvy9b3KNKVdovOoGM3V08qS1INtYTkDzja9V/vUULEfaMkGNqbEVI6IdIaLwKyaiDHNyfmkyJir/iiftbY= 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=LQpdNp8Q; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=CuMO39co; arc=none smtp.client-ip=103.168.172.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="LQpdNp8Q"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="CuMO39co" Received: from phl-compute-11.internal (phl-compute-11.internal [10.202.2.51]) by mailflow.phl.internal (Postfix) with ESMTP id BCDAD1380308; Fri, 31 Jul 2026 00:35:40 -0400 (EDT) Received: from phl-frontend-03 ([10.202.2.162]) by phl-compute-11.internal (MEProxy); Fri, 31 Jul 2026 00:35:40 -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=1785472540; x= 1785476140; bh=vfiH5V16AyO9stikNxuMC7UErEwVoICawUpn+9ckh+U=; b=L QpdNp8QE2ar35yEgP6yb6E4HWWAMOyaURlf2TfWLSE+weEgswKn9rengcJz3HcmH AA9MkKb1HYL1SMPduP/hSmmL0Y5348mqSVNDFNf7aS17bFh9AhwweCuLOGHkwi0U eEwCKDjBSieWoRjol0pyUGUL5H/ACCjnJ5MwcD3DQWxoU6S1GFRD+f76drHTVtWB JokOds7Gvb+r8z5fcXl1rNuLyN52PVErhFIjs0L4H1UnQPPYcqhoWvnfvmbJk6BR By6pkj/4KMM2rwBDBEDcqBhcEDWpezdyH89hp7OeCcyh4H6NIywf05Zo8cH0US6u hOfxSwFaRx3CkuJfEjyvQ== 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=1785472540; x=1785476140; bh=v fiH5V16AyO9stikNxuMC7UErEwVoICawUpn+9ckh+U=; b=CuMO39coTUAyumyaj SlaAcZC/Mymx3wM6Wfe/0iTWY3fR7Tmv+4BmtQpR1DgDGy7QiZ6cEF6thFK12gHe yHN8ZsyZOF/ICa9hxhfHvoH0odRAU4gEj66uH6h7VFIMeW4dYtApH+3GzdaPtyOE 81HxkK1xjnGSA3WBcfI5mt+ayIDzNAiN5e9JGr3UdhYzqUr3HTgMcefPOOzprzvA 1r5KVuhTPl92foC1TzJhwGAVYlq6YTg0Dn6pbL2ZQ3vW3Py/dGlTQ9T6CdMxFjOJ bae+bbkAcK6SO/4fjftJecHcANBfY8qgTMA4i1cgF3fnzkYNeCtOpt65sdPFRh+c /35Bg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTGYT4kL28qB16BISDukPuRI13bgUTT3tZ+FwfFOi9iyRIQ4cdWQvs+qtyjYhb8aZv 7ZNLDkjsiNZpV57v6b2mii/c57NwdcNZfLGFST9tf2uM8u59dW+Prl9GdDUx4nV+E4lAra SQEwebYcIunW3qRo5j2tIFm46bFqTUlJGjqQ9G9vA9CMpIOxOxZMoG/yT+2+8464KOGHAY 8imDrR7vRedTQm5ukLhDfImc5hqq/PMdpFBDkbYJy2uWgqM9NADLHcVQwbEaQMfbuf/RMq 10+PB7Nd2itAuYvcdzVTZtUYUQ86psUPJqGvTKqOSymMowMLYjogTDdmqQ1+5Yqwyb6wmf JSvlG9/5D0DLlR/pyNn3qNI9clPJUCIQPSfVrLbDEDy12Hwb2Ew02t95WcEyH8rdV+gPQ/ KAStDW8gD0OCH+yNXkUruoT7cYZT7HBChdQ60aZSQpmrpUufga0MoYA8JEajqHUNZGhL/d K3RwtxLR+63GPIWLaxadlrNg3eGp8xSfFKV6DeQxnRVL71n3/5GVEHlnDG5N/diQKeLoZi UaAZteLXnMfFHiGWmemLlJWxwSNq6z4J9uoergRTA6AxAoz4g+HzQzztTkiozDSsWMmdNT t02O46JPd2qSwhloLX6Ah5iWO20ConyGtqVtw62rNAkZ5vTmNBC4k+PGQrMA X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 31 Jul 2026 00:35:34 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: chaoyi.chen@rock-chips.com, alchark@flipper.net, royalnet026@gmail.com, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, 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 v3 3/6] pmdomain/rockchip: cycle optional power-domain resets on power-on Date: Fri, 31 Jul 2026 16:35:04 +1200 Message-ID: <20260731043507.1832277-4-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260731043507.1832277-1-gahing@gahingwoo.com> References: <20260731043507.1832277-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" Some Rockchip domains come out of power-on with their bus interface in an undefined state. On the RK3576 NPU this shows up as a hang on the first access after a cold power-on; the vendor kernel cycles the domain's resets at this point and that clears it. Take the domain node's resets if it has any, and pulse them between releasing idle and restoring QoS. The resets are optional, so domains that do not declare any behave exactly as before. Signed-off-by: Jiaxing Hu --- drivers/pmdomain/rockchip/pm-domains.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rock= chip/pm-domains.c index e1857f878..82051f600 100644 --- a/drivers/pmdomain/rockchip/pm-domains.c +++ b/drivers/pmdomain/rockchip/pm-domains.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -103,6 +104,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 { @@ -688,6 +690,13 @@ static int rockchip_pd_power(struct rockchip_pm_domain= *pd, bool power_on) if (pd->info->delay_us) udelay(pd->info->delay_us); =20 + /* Optional: some domains need their resets cycled after power-on. */ + if (pd->resets) { + reset_control_assert(pd->resets); + udelay(10); + reset_control_deassert(pd->resets); + } + rockchip_pmu_restore_qos(pd); } =20 @@ -857,6 +866,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 @@ -927,6 +944,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 @@ -945,6 +963,7 @@ static void rockchip_pm_remove_one_domain(struct rockch= ip_pm_domain *pd) =20 clk_bulk_unprepare(pd->num_clks, pd->clks); clk_bulk_put(pd->num_clks, pd->clks); + reset_control_put(pd->resets); =20 /* protect the zeroing of pm->num_clks */ mutex_lock(&pd->pmu->mutex); --=20 2.43.0 From nobody Fri Oct 2 13:04:17 2026 Received: from flow-a8-smtp.messagingengine.com (flow-a8-smtp.messagingengine.com [103.168.172.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 260DE353A77; Fri, 31 Jul 2026 04:35:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472552; cv=none; b=VxT4hZTySYTttFy9Nbn5RiS8KCqNQzupoR8BTE5K872j8nZDv0YhCf+g93xXOhGpkw+B4PuSehriHYCU1AniDeAiKsuz9sTXlXnu9C8S7Vih0UEH0QQFgX/thlB4f9x2mBnBetUcOm525fAXR8b9AMGSjZMc4pW/HyAmDpWCJpo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472552; c=relaxed/simple; bh=n3CLnSds88NJm6/p3TaqKVGEtPtwNZCEP/tfsInVyrY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gl7NixKpP1CQvfFvxrylnQb0kF2vFmOxR97/j+ILfeNVbENuM77dHV/cSQyh/6S3XD7NZyphgQkfn6YRRTCRG5PEa+9lEDyUq3OiMpBLwmhe89wsCKgncJ5/vtW32WO/5GTw34Yrx2ghr4xFTI9ZYUFI29dGd33FCYuvcXXX5/Q= 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=KNHgZSaI; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=AtvblsKs; arc=none smtp.client-ip=103.168.172.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="KNHgZSaI"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="AtvblsKs" Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailflow.phl.internal (Postfix) with ESMTP id 1286A1380308; Fri, 31 Jul 2026 00:35:49 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Fri, 31 Jul 2026 00:35:49 -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=1785472549; x= 1785476149; bh=rUWUZYWm1pFWOiIC8yyhB3QOTKEgk68LhExH2iHSy7k=; b=K NHgZSaIi13QvJY1PBYTHDe4ZKf7mZleIvv36ZhkAFmGmViXzNXkUaV9YzG/X17c3 0DIcKffM0tyg3EYe0FNz7aZoYHlyPVc+gUNc+M9uLE6CShw2dEmP23OWP1OQEBGf tWPl9qYji/6lKm4i+lXfg9sydukLWgpzH0rGTnVf0J6zi0/C22nH2g9BqU/wXCNO Jx/bptyRM6323ScDp7/PqgTso6pxK6aMgEDDGmyXlqOBQesfLdTl07PhDvRwVGV9 5wvgJY2q2k6X+I+VzTsxhmM69/Kpz7LAgCx+J82hWJWOpgq0/DJWLbrOhREpx6/Q bI/MJbuwUPFXONhbtUfNA== 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=1785472549; x=1785476149; bh=r UWUZYWm1pFWOiIC8yyhB3QOTKEgk68LhExH2iHSy7k=; b=AtvblsKsNLf/6+esF V0WCMZgZtL4nNVcBWCiRsNEalp4ETnJAJdhlLmANr2AY0GY5p4gG/GTBH1akmQDn b5D387CS/CcQVrIFIY9Z08qUAtU8kOeYovc11qQYY2U8jBaBv+jqVceu5MooioJM vu01ka+fBf+FhQpXTOrOhbqZXHDDondpL4Ab/0QM8ssOChYMiPrilujFV0Ei0TXm 4Qpbhzpn5163fWJQ76xZg1H67vzQI2cbXRKT8ucPIwR+CMMGvVx05OOTI7RsnGz1 d90Yk+OIWs1k4FDGd7qVv8DEYdHYZxz+2FQvl4wCvNUorSBhU2YSD5Li70RdrKMf FetTA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTGYT4kL28qB16BISDukPuRI13bgUTT3tZ+FwfFOi9iyRIQ4cdWQvs+qtyjYhb8aZv 7ZNLDkjsiNZpV57v6b2mii/c57NwdcNZfLGFST9tf2uM8u59dW+Prl9GdDUx4nV+E4lAra SQEwebYcIunW3qRo5j2tIFm46bFqTUlJGjqQ9G9vA9CMpIOxOxZMoG/yT+2+8464KOGHAY 8imDrR7vRedTQm5ukLhDfImc5hqq/PMdpFBDkbYJy2uWgqM9NADLHcVQwbEaQMfbuf/RMq 10+PB7Nd2itAuYvcdzVTZtUYUQ86psUPJqGvTKqOSymMowMLYjogTDdmqQ1+5Yqwyb6wHa YyWnWyqRtDcb/ih18bfpttptCqe/KWKk2RR4ZFEDIdMrAV1eCVnwERZfNb3zeItQOsAKTg JMK73pY9lPJxo0OVL8mB5TsBwdcb/dcoBWpyuf125Zn+E3KEtdjyC9V/lnztiY1gmXbZ6x mCjZC9YYweQ1SGQEiuR2wgzGmpMMiZ1libpn7IYf2HYXVs7z0iE+HqLfMlk+gvO2rPi6/u puZKWnE9JX6KQMaHHPRMpPLlOucoLwpr7fQPkrnmVvlfLWzpQ7yzuJumCmOX1rhrFI0DMd jYxXbs5a2oA2ah8uRbG5ZG8gTYyrNQs/CMFXFr0FDZh74Ui8S85y2awwObfw X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 31 Jul 2026 00:35:42 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: chaoyi.chen@rock-chips.com, alchark@flipper.net, royalnet026@gmail.com, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, 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 v3 4/6] accel/rocket: add RK3576 NPU (RKNN) support Date: Fri, 31 Jul 2026 16:35:05 +1200 Message-ID: <20260731043507.1832277-5-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260731043507.1832277-1-gahing@gahingwoo.com> References: <20260731043507.1832277-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 carries the same RKNN block as the RK3588, with two cores instead of three and a few platform differences: - the CBUF (convolution buffer) has its own clock domain, so the core needs six clocks rather than four; - the BIU reset moved into the power domain, leaving one reset here; - the NPU spans two power domains, and a device with more than one is skipped by the driver-core single-domain auto-attach, so the list has to be attached explicitly; - the DPU completion interrupt is armed exactly as on RK3588 but never reaches the GIC. The completion is visible in INTERRUPT_RAW_STATUS, so sample that from an hrtimer rather than wait for an interrupt that does not come. The interrupt stays armed, so if it ever does arrive the normal handler finalises the job first. Select all of that from of_device_id match data so the RK3588 path keeps its existing counts and behaviour unchanged. Signed-off-by: Jiaxing Hu Tested-by: Igor Paunovic --- drivers/accel/rocket/rocket_core.c | 26 ++++++++++++- drivers/accel/rocket/rocket_core.h | 17 ++++++++- drivers/accel/rocket/rocket_device.c | 4 ++ drivers/accel/rocket/rocket_drv.c | 22 +++++++++-- drivers/accel/rocket/rocket_job.c | 55 ++++++++++++++++++++++++++++ 5 files changed, 118 insertions(+), 6 deletions(-) diff --git a/drivers/accel/rocket/rocket_core.c b/drivers/accel/rocket/rock= et_core.c index b3b2fa9ba..e08288c8c 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 @@ -21,14 +22,22 @@ int rocket_core_init(struct rocket_core *core) u32 version; int err =3D 0; =20 + /* RK3576 moves the BIU reset into its power domain and takes only srst_a= . */ 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), + err =3D devm_reset_control_bulk_get_exclusive(&pdev->dev, core->soc->num_= resets, core->resets); if (err) return dev_err_probe(dev, err, "failed to get resets for core %d\n", cor= e->index); =20 - err =3D devm_clk_bulk_get(dev, ARRAY_SIZE(core->clks), core->clks); + 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 clocks the CBUF separately; the compute path stalls without the= se. */ + core->clks[4].id =3D "aclk_cbuf"; + core->clks[5].id =3D "hclk_cbuf"; + err =3D devm_clk_bulk_get(dev, core->soc->num_clks, core->clks); if (err) return dev_err_probe(dev, err, "failed to get clocks for core %d\n", cor= e->index); =20 @@ -65,6 +74,19 @@ int rocket_core_init(struct rocket_core *core) return err; } =20 + /* + * RK3576 spans two power domains, and a multi-domain device is skipped + * by the driver-core single-domain auto-attach, so attach the list here. + */ + if (core->soc->multi_power_domain) { + 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..6afb8180a 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,16 +28,25 @@ #define rocket_core_writel(core, reg, value) \ writel(value, (core)->core_iomem + (REG_CORE_##reg) - REG_CORE_S_STATUS) =20 +/* Per-SoC differences, selected by the of_device_id match data. */ +struct rocket_soc_data { + unsigned int num_clks; /* clk_bulk count: 4 base, 6 with CBUF */ + unsigned int num_resets; /* reset_bulk count: 2 base, 1 on RK3576 */ + bool multi_power_domain; /* device spans more than one PM domain */ + bool poll_completion; /* completion IRQ never reaches the GIC */ +}; + struct rocket_core { struct device *dev; struct rocket_device *rdev; + const struct rocket_soc_data *soc; unsigned int index; =20 int irq; void __iomem *pc_iomem; void __iomem *cna_iomem; void __iomem *core_iomem; - struct clk_bulk_data clks[4]; + struct clk_bulk_data clks[6]; struct reset_control_bulk_data resets[2]; =20 struct iommu_group *iommu_group; @@ -52,6 +62,11 @@ struct rocket_core { atomic_t pending; } reset; =20 + struct hrtimer poll_timer; + struct work_struct poll_work; + atomic_t poll_active; + unsigned int poll_ticks; + 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..7f7dfa374 100644 --- a/drivers/accel/rocket/rocket_drv.c +++ b/drivers/accel/rocket/rocket_drv.c @@ -176,6 +176,7 @@ static int rocket_probe(struct platform_device *pdev) =20 rdev->cores[core].rdev =3D rdev; rdev->cores[core].dev =3D &pdev->dev; + rdev->cores[core].soc =3D of_device_get_match_data(&pdev->dev); rdev->cores[core].index =3D core; =20 rdev->num_cores++; @@ -213,8 +214,23 @@ static void rocket_remove(struct platform_device *pdev) } } =20 +static const struct rocket_soc_data rk3588_soc_data =3D { + .num_clks =3D 4, + .num_resets =3D 2, + .multi_power_domain =3D false, + .poll_completion =3D false, +}; + +static const struct rocket_soc_data rk3576_soc_data =3D { + .num_clks =3D 6, + .num_resets =3D 1, + .multi_power_domain =3D true, + .poll_completion =3D true, +}; + static const struct of_device_id dt_match[] =3D { - { .compatible =3D "rockchip,rk3588-rknn-core" }, + { .compatible =3D "rockchip,rk3588-rknn-core", .data =3D &rk3588_soc_data= }, + { .compatible =3D "rockchip,rk3576-rknn-core", .data =3D &rk3576_soc_data= }, {} }; MODULE_DEVICE_TABLE(of, dt_match); @@ -240,7 +256,7 @@ static int rocket_device_runtime_resume(struct device *= dev) if (core < 0) return -ENODEV; =20 - err =3D clk_bulk_prepare_enable(ARRAY_SIZE(rdev->cores[core].clks), rdev-= >cores[core].clks); + err =3D clk_bulk_prepare_enable(rdev->cores[core].soc->num_clks, rdev->co= res[core].clks); if (err) { dev_err(dev, "failed to enable (%d) clocks for core %d\n", err, core); return err; @@ -260,7 +276,7 @@ static int rocket_device_runtime_suspend(struct device = *dev) if (!rocket_job_is_idle(&rdev->cores[core])) return -EBUSY; =20 - clk_bulk_disable_unprepare(ARRAY_SIZE(rdev->cores[core].clks), rdev->core= s[core].clks); + clk_bulk_disable_unprepare(rdev->cores[core].soc->num_clks, rdev->cores[c= ore].clks); =20 return 0; } diff --git a/drivers/accel/rocket/rocket_job.c b/drivers/accel/rocket/rocke= t_job.c index bb77b6bf0..e9103a930 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 @@ -21,6 +22,15 @@ =20 #define JOB_TIMEOUT_MS 500 =20 +/* + * RK3576 arms the same DPU completion as RK3588, but the interrupt never + * reaches the GIC. The completion itself is visible in INTERRUPT_RAW_STAT= US, + * so sample that instead. The tick cap bounds jobs that never raise it at= all, + * which is the same open problem as the wrong inference results. + */ +#define RK3576_POLL_INTERVAL_NS 1000000LL /* 1 ms */ +#define RK3576_POLL_MAX_TICKS 8 + static struct rocket_job * to_rocket_job(struct drm_sched_job *sched_job) { @@ -151,6 +161,13 @@ static void rocket_job_hw_submit(struct rocket_core *c= ore, struct rocket_job *jo =20 rocket_pc_writel(core, OPERATION_ENABLE, PC_OPERATION_ENABLE_OP_EN(1)); =20 + if (core->soc->poll_completion) { + core->poll_ticks =3D 0; + atomic_set(&core->poll_active, 1); + hrtimer_start(&core->poll_timer, ns_to_ktime(RK3576_POLL_INTERVAL_NS), + HRTIMER_MODE_REL); + } + dev_dbg(core->dev, "Submitted regcmd at 0x%llx to core %d", task->regcmd,= core->index); } =20 @@ -341,8 +358,42 @@ static struct dma_fence *rocket_job_run(struct drm_sch= ed_job *sched_job) return ERR_PTR(ret); } =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); + u32 raw; + + if (!atomic_read(&core->poll_active)) + return HRTIMER_NORESTART; + + raw =3D rocket_pc_readl(core, INTERRUPT_RAW_STATUS); + if ((raw & (PC_INTERRUPT_RAW_STATUS_DPU_0 | PC_INTERRUPT_RAW_STATUS_DPU_1= )) || + ++core->poll_ticks >=3D RK3576_POLL_MAX_TICKS) { + 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) { + if (core->soc->poll_completion) { + 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); @@ -460,6 +511,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 --=20 2.43.0 From nobody Fri Oct 2 13:04:17 2026 Received: from flow-a8-smtp.messagingengine.com (flow-a8-smtp.messagingengine.com [103.168.172.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 274633546CD; Fri, 31 Jul 2026 04:35:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472558; cv=none; b=DalpUONWQTSdNRYpMjAzOgzkdoRleXkd5MyGMp5TaYF4LPcq6C1PRQLSX4Slxhku5rMYAjvrnTsvAeREqGh0bQluB7tlLWPWf5pBOuNxxe5JFVF6+yAsLq6RQamiOcmLcNOp+nGF89+qLjl/QRnpzLXOo3poUC1HvwCvTRf9Ibc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472558; c=relaxed/simple; bh=OZOAiFUy/qhg0N1/Qf9VPTTobz1Szf3o1oDR1mXr13k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k5bhS9I3hUZc2faiUNHwYdcOlJvCrikliArsID5LEp0YGlQExOnp+UgDdznyrSRgBLYbGIVsfmVPeRBBhlHKD6VD9+hwarQPB4CTblVnSoOq2yJhu7Ne9uiniHmovj2HMV0Tl6Qj954LnkkFK7/lNv8T35Q1r7PiO8hTyKc8Ezo= 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=HBK50lY7; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=AEDeqBdW; arc=none smtp.client-ip=103.168.172.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="HBK50lY7"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="AEDeqBdW" Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailflow.phl.internal (Postfix) with ESMTP id 7BC8E138030A; Fri, 31 Jul 2026 00:35:56 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Fri, 31 Jul 2026 00:35: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=1785472556; x= 1785476156; bh=NNaQ6jyQsISQEUWTw0sK+in83QA39rZZQGzKh4nqVaE=; b=H BK50lY78p/BRkVHvrj/H3Sd8n8NtikmR8bjNb0kv91uoJxK4M4K/bjW8DsPu9iSw vQt+lhj1SY59y6Ih9PF6aT9gmcEYjfvxhr+UuHGB/x/ON3mdfQ7BxX8zAsH9ByxP 2uTAMRfIEzla/qOeCwbcmxN46KcikfZCnI/p8aru7LowX374cdqH4lTjBFusRSOL NaiTL4IjTs9e8uRvV0srejjh5dSSsAVVbi26j5+qP1xVUNCZpzW5iqU8ce4MrX0E ldoaSH/cBpSMYpMrLV95LXLompzsPnbXiz35yeGTj14Iseh/eIT+47cfPEwPJSoo ZKDvvV5Zh6Ec5FYVWh1rQ== 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=1785472556; x=1785476156; bh=N NaQ6jyQsISQEUWTw0sK+in83QA39rZZQGzKh4nqVaE=; b=AEDeqBdWeioiMkpi8 lmlz4N7YO9EdrZFcmK1Wkfo+zcQsoYuPkNRXetvtqaKt512h8aNfl9XbStWU1g8W hsCbnG1AAEx/nfOcHMCwxi7CgOQqyY7tRG6PIYrJWOLHmO4baEwJBuZlnjwlXFf+ PI8oeJESJUc+6qWtSLml5glFS4hpp/cuxiEG3zqWmwONpmjUXTYSyBsKLJhxKES+ 702MChtEcRb2s9CaKAWbA/w6w/FHzMLdzXgqCr4u8UH8anPaBH4ODzAjo+GCXffI 4NUOQcV4cblWCienzctAl7WIeo/VlHx1knsC8m2NQyoL/bhu3A8SZr2LWShcXzzD jtjDA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTE25eMdGdpb7qYxCh3/n28jyVx2OtJLeAC15DbDMbLFv+BOhkY59Q+/xTCV0SQeJ3 EKBWixYMhpIcjjWsr5BZ9koZvwL4Th1+An0NalzHT428pPOccATA4SxRizMwC/RB2aFEYK YLQl5iwrfjWzzSG+JxzTsRB5ZZjsrkxJT8KVNf7XUd66s6QYWcP0TjtLT7Ra5Of2dvXA9E N3lKtoojTG8OxFKCNOJAdsB0tR35MTIAKb4rU124lBz22DiG97J0LLMT4VFf2ewgx5FMdt N1wSbdLVoGCtkBO418k/jdA7d+F0yDQvaadK/JXNWhOLmvXl0wuceTVLmJauicvneJOLew +xeeCFBK6A0/DERWiJ/1Il6PYcmHxswJBb6CDTlgPi/41Ooe1LLTMM+3D7Z667vOluE3IF dfE0QzCeHIO23xBLnYyZlvY3bBdPRlc2KGMfBmFw1t0sCU203cxzCDpdM+z2BihFU0IqNz lLCrnzndZPLI7FemgktPFQehRaZ2dlQbvFAjdRa2Vqo3c1L06np0uQSzSsRN88W/nGmTX8 +tm9OaInMw91BNjnF35C63Xghv/E4zIz/KPuFPDH5tHONWd7mGG1kUMIqum5E+STMwJEr8 nYIZxmTyQXWDVsFKABi8TjekMv27SrwQux1ArZwlnsW+1lAajcIgvj30a0hA X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 31 Jul 2026 00:35:51 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: chaoyi.chen@rock-chips.com, alchark@flipper.net, royalnet026@gmail.com, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, 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 v3 5/6] arm64: dts: rockchip: rk3576: add NPU (RKNN) nodes Date: Fri, 31 Jul 2026 16:35:06 +1200 Message-ID: <20260731043507.1832277-6-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260731043507.1832277-1-gahing@gahingwoo.com> References: <20260731043507.1832277-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 two RKNN cores and their IOMMUs, plus the NPU power-domain resets the pmdomain driver now cycles on power-on. Both cores are disabled by default; boards enable what they wire up. 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 b0c0d3c8b..a9d85e672 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>; }; @@ -1832,6 +1840,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 Fri Oct 2 13:04:17 2026 Received: from flow-a8-smtp.messagingengine.com (flow-a8-smtp.messagingengine.com [103.168.172.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 42210353A94; Fri, 31 Jul 2026 04:36:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.143 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472566; cv=none; b=VVkDLX5tkcUZ+lYsS/0Nw2C53IDpe8WyAq9AuQ+6NP8bKFLalxJf5GOYY2icSV0ErslWhsTpwLFdaepMLfSMedumPhee82UQfDlXAXFZJki76uNGpBPxbOiPw7GsrttamkRdvKu1W1Imm5UGWcqJKhMMBNfggbfkhCvoevgQW1o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785472566; c=relaxed/simple; bh=80rNVWnmgVgjfC7J2zDD3diGWQ8fnXLxMEZEg9rkctM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Yw2UWSFSWQGatAJIB4jssxfa+jhjiilHkyHZsgWoMqltHprNXxPfJPGAMlfN9PO364rYvP05Ub9E2e2wXN5hBk2fCBn+0cWDNNn8OyHce2jM7gbInan1QRDE0YEoC5uu0UfGgupBQfbgFd+XtJoAdJpOppMSoq6srF8dL53/mfI= 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=YbRJQx46; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=nLbIKb1E; arc=none smtp.client-ip=103.168.172.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="YbRJQx46"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="nLbIKb1E" Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailflow.phl.internal (Postfix) with ESMTP id 639FB1380308; Fri, 31 Jul 2026 00:36:04 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Fri, 31 Jul 2026 00:36:04 -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=1785472564; x= 1785476164; bh=rU/iiqj1yZpMF4hepdKdfzRcPTdeuKeK8FfjQz+3zm0=; b=Y bRJQx46papGhlR97wZvzwcVLQ3C86+K/5wFJyX0aYrqg92atvOXIEr1glQjvOsZR jilwQLXzHnuSkKh1eSMzW7MtDFWD4Me69oCY2+E80H3Mw3YftMtGf3+OM+VOVElc vT1h6IxoHBJksmGkH2oZckuvc5nQ2TqT0DgLPzpd0enpG7LFrPIeTLBvf16h69Bx 4U2Es/XrcKQ7VVNEI/s2VarhupAHSI8E9xVOT/r3SzOKWWETsPAL2vIunPFTrBLl dWaqaXnlMmMEYuE13L1hLJAegg4eNE9H+wMP0MADC2dleIQ+zTKh/EIYQEH5ZF4R teZorG+jXO57m9Exvv9+Q== 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=1785472564; x=1785476164; bh=r U/iiqj1yZpMF4hepdKdfzRcPTdeuKeK8FfjQz+3zm0=; b=nLbIKb1EvQuFhk8oO PzPnf8Gfin2EiK+CU7j36Oy1OHWlnvEwh5OuqH0nbRGIMLJvd5ENXGTJ7/06N50U xP+gYfEO9OTOBffO69cY9llWYrJv7856b6UyyVQOoFE8dBh9nbSSh1VCIXRPV3Eh yxY9kx4YLtRY412GkjMCH8Ifw+HgwPayAhYXu40Bto8s7NUZdeY1rOnh5xDD3Jr0 oVQXNoShLfqy91rXGoh/xZUDcSZBtqWk//1EHEz0WoTgR++fa0oTV7wpGlMhMIUe yVTPoZWKEk1/4mRjn2S3Jl0htv3te0VwKNTAtd029+MuifPJNbqzlFY8HjgvnB6H apK3Q== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTGvOKNO9zBdHkgYlF796lTt1g6XhHLwmREClOCu9o9rkxmgV8hTnMScLLO2GDOQ8J r0CGO8ZJUneVHtCq7+dnMIm3qpNwOne25S6y+nf8Qdu2wy6dFmZ65cN6L/zJGBGzwZh6qm Wyu3epeadLOxa+zYzYvJk+kW5lq4IpFJw9WGOL4ZvDEQZlTUiza5ARf616dz3THdtIoWiN c43PlVzZwGonGEEnTWbmkj5hQwCP9V6qOpOqoFK007M45URj5BUap6bF1x5FNVYRizLOGt R0M9nrZam8Fm1iy39qcV45G7pKDxJ8SNQGstN46NIeUIIJqPAT3ZGFI9q5F1oDm6qm3xuF WWTiNTSJqw1sm4AeJiXAJvYJTHnPIzfdLqXRaQb/irMzNXCAU2uQ6c+7L9EcUlfV62wcpg q7P1MmfoXZAqAPSYgEgMD1sKVJWjGv0lh4TFdOWH/PVYkc88MNP0g7CSnzwutxll+/X73x 9116DFw/58jVReJ3K/aeQ3Y/MSr7cjqlBqacJBFaXPfxVfbKQqGb1ktl+uasx08GNHi2ZB WDCkTCKOm9ctSeKUhXVL+21Ftv+8iUsmxLTUCucLK+YkVaTT/ZZo9IiJ92Q1dUaVtpkBui PB4bhKCwlC0zMO4xlxXGggM9nrjocXsA+g/q3cacflEkEnXWU03D3ISPiVmA X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 31 Jul 2026 00:35:59 -0400 (EDT) From: Jiaxing Hu To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org Cc: chaoyi.chen@rock-chips.com, alchark@flipper.net, royalnet026@gmail.com, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, 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 v3 6/6] arm64: dts: rockchip: rk3576-rock-4d: enable NPU Date: Fri, 31 Jul 2026 16:35:07 +1200 Message-ID: <20260731043507.1832277-7-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260731043507.1832277-1-gahing@gahingwoo.com> References: <20260731043507.1832277-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 its IOMMU on the Radxa ROCK 4D and supply the core from vdd_npu_s0. The core is listed on both NPU power domains, as the vendor does from its single NPU node. 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