Message ID | 20240130-rk-dts-additions-v2-2-c6222c4c78df@gmail.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel+bounces-45095-ouuuleilei=gmail.com@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1415419dyb; Tue, 30 Jan 2024 10:27:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IGnH1utSj4IwhtTSLfgwLt3qwK1y/q0Ud5L+ICOJMSfMDSJUpEuml/md/9CcHeFGyzfDE5n X-Received: by 2002:a05:6e02:f46:b0:363:812d:d6a3 with SMTP id y6-20020a056e020f4600b00363812dd6a3mr5087271ilj.20.1706639221274; Tue, 30 Jan 2024 10:27:01 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706639221; cv=pass; d=google.com; s=arc-20160816; b=JJSbsYUMdMaNU5REhvQZA5aop5YFD6MewutUd7oGYYjwFjZIpPqXedfeWJyolQ/M6v wW8Ak7eUVsF0MIdylahJ0rB+aBlJUkV80j7Y738XGci3WX+LAhhGo7rnX9kR2HGjM4ZS ZoiBKD6qs3USm+HJ6CAlc6pdV/PdlGMzCUmKuWrfY/py7ewfbl4RapGy7qsYfrpJ3ivY wVVMvHgKvRlfZUJZSLqgi6iwd3KKpKFBGJWQatl5qhtI76PM2yk0tMzMbuGSZO6k0+vs KBfKQlyfLBKLN4nl5VSnOYzJP/KsbcFAXfvNg7y6eWQxxrDBs1JNWGXrm0r9wO2uYCGY Mj8g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=q2U4TAbafybXjGIReik+c+16abvnMXxD9lt1dnQ2x+0=; fh=XK0AUezlgss4FoypvEHwH/4LHEJFphnJupQdN7vLqrA=; b=thjuSTs451GsVK1vKmO7A2fDm0jYm1k/6D2KbPWrWEf4BNfAKBF57gAI2+WDtYUQD3 xdKhp0bJzZKxgn36DegvAxwm7Rif+WRX40GvfYkDehbow0PixSD9yAALjDYN0yze7D4Q nRc3lkzqTVgrAHIWvzqT5hXJm6W0Q1Fh+TiQqB+l07POmeloSAxBWbFz7FlBSsEA8y1B Wq267mw+Axqobit/DJj4+Pn/eI7GzAeScP9/VZUoX0lEZjDOGY8EdRDJOzqd3NFCF/6L NRwKTTOcNdWjqQnxfjoHoatMSEj05aTnl5NU4qgG1OJC6z2kl3qwM6cwPAOBCd+f0npT NPXQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=AKZCZtX+; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-45095-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-45095-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id l11-20020a633e0b000000b005ce0b70d2b0si7721477pga.102.2024.01.30.10.27.00 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 10:27:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-45095-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=AKZCZtX+; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-45095-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-45095-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id E1E3BB25345 for <ouuuleilei@gmail.com>; Tue, 30 Jan 2024 18:23:06 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 95D7815A48D; Tue, 30 Jan 2024 18:21:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AKZCZtX+" Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1158A1586E6; Tue, 30 Jan 2024 18:21:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706638901; cv=none; b=DQnVXxqooL6zyac/2gvwYQcx6qso45z1JGBS/5AdvmnqcUu3P25s0A7dSYG9e89/m9q3FnmjBk7LA+Tgt+DGFfri5MgDeEq/0k/OUv8dalXBHxr2a+NA074wIrs2AIpLqPq3gZHUdOpMYVHqMUSJ02wHhB+4xpHE20MFGVTZXgI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706638901; c=relaxed/simple; bh=HGDpyfKI2RDyGPXzCZEZxUOoyZ5xEWyQzEQkIW49rB8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TBrPncbT6+XEyqaLXLaY7ZMBSErfgsFsWYBo/9wgB1zQ5VgRVZYCchK64+x/CkCFMorEqs1hL/34FWLMKWerC6eVgGQpuWSBFczcX7kfSWre0MJJr5f03jtPnvKaN3I8Ru0b77cvA4+sGN+s+LzHtLwL3Rs1mpGYZ8hkePLR9nk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AKZCZtX+; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-33ae42033e2so2539620f8f.1; Tue, 30 Jan 2024 10:21:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706638898; x=1707243698; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=q2U4TAbafybXjGIReik+c+16abvnMXxD9lt1dnQ2x+0=; b=AKZCZtX+tGhMkICgE6x05b3YYPhRf+g8aiT8WCmcSM+JuACwpqHE2bYwAo6TTpPvU4 pFHPqxpqxrQ1HmLFWIJ5IvgP6v4EbxV6wrI9I8uUu3pnumfpnrt0tF6Vl7pc0nxIVqGG 1sXnAqC7ENoI+aRUREsCjQZkB8USOysorYyPBqOnIKo4YRO4XZtkY4QJywrxZjLp8SNB ZWcXrQo/um5UXo5vsITdiSGqnVPOtcDjCvp1Y8hgmMNMasCMq3ndHud8mw7Ko0Rm1A/K InbQZE+jYp6P6d89XPWqcjkeNPkweAK1TE9ca4+M/4g9Zhyp5AJJdCtS83Zm6xik0Vdi MRVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706638898; x=1707243698; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=q2U4TAbafybXjGIReik+c+16abvnMXxD9lt1dnQ2x+0=; b=oDX3Mt5kkSbQKS8wZtK3JUN8QcCbk4vpDflpyoKu5H0983YLeV4Z2oyWW+3u3d2wOP YPqs3NJU8ZQ5op/Va4+0nJ+H2cM1LVjCvHAVYrv9LzMVme9VZeowaP7pZuCHh5hz8HRB d6R8/spmzOxsSjFbht3iBIamsaPLNofwr0ZHZloAdfgX0m+iv6Mz9NDDHEhscMHhnJYk bVvtz8dBf4WP5Sm/RWrry0GAIVePhTEz83SiHreihlGeq1BYSalNGtxptS/uLknIvSYG +lpqlU9AQuaWveN5RwNMf+5pahi/U+Dhm1MY1sht/QrcM8SgJjTm5er1D3GVzZHLZE+B ITTQ== X-Gm-Message-State: AOJu0YywpFNkkELfLb2/YOFzcH1NRAJvzsHZeu7gTVb4BNW8CWmaBpyT cHAIprLibDu6l54zGqD/PJfZfoP28UYotscxJeM5NHPKIXzuf8YfCKKcFn2fcfiSiw== X-Received: by 2002:a5d:648e:0:b0:33a:f0cf:3d5d with SMTP id o14-20020a5d648e000000b0033af0cf3d5dmr4379648wri.23.1706638897973; Tue, 30 Jan 2024 10:21:37 -0800 (PST) Received: from [172.30.32.188] ([2001:8f8:183b:50fb::d35]) by smtp.gmail.com with ESMTPSA id u18-20020a5d4352000000b003392b1ebf5csm11374254wrr.59.2024.01.30.10.21.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 10:21:37 -0800 (PST) From: Alexey Charkov <alchark@gmail.com> Date: Tue, 30 Jan 2024 22:21:14 +0400 Subject: [PATCH v2 2/4] arm64: dts: rockchip: enable temperature driven fan control on Rock 5B Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20240130-rk-dts-additions-v2-2-c6222c4c78df@gmail.com> References: <20240130-rk-dts-additions-v2-0-c6222c4c78df@gmail.com> In-Reply-To: <20240130-rk-dts-additions-v2-0-c6222c4c78df@gmail.com> To: Rob Herring <robh+dt@kernel.org>, Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>, Conor Dooley <conor+dt@kernel.org>, Heiko Stuebner <heiko@sntech.de> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>, Dragan Simic <dsimic@manjaro.org>, Viresh Kumar <viresh.kumar@linaro.org>, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, Alexey Charkov <alchark@gmail.com> X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1706638888; l=1891; i=alchark@gmail.com; s=20240125; h=from:subject:message-id; bh=HGDpyfKI2RDyGPXzCZEZxUOoyZ5xEWyQzEQkIW49rB8=; b=SYlXApX3kBczLS+c6uzRjnh8soVjqGOy2sCKbiM9vFvUCq7QzrBgjPc4X6RD1zHn7x6nI6c5T NphLweK5PuFB48PdHMzbxOCZQm/mH4l0jyf+QEWD/Ieb4W7jpHn3xIr X-Developer-Key: i=alchark@gmail.com; a=ed25519; pk=xRO8VeD3J5jhwe0za0aHt2LDumQr8cm0Ls7Jz3YGimk= X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789540927647558896 X-GMAIL-MSGID: 1789540927647558896 |
Series |
None
|
|
Commit Message
Alexey Charkov
Jan. 30, 2024, 6:21 p.m. UTC
This enables thermal monitoring on Radxa Rock 5B and links the PWM fan as an active cooling device managed automatically by the thermal subsystem, with a target SoC temperature of 65C and a minimum-spin interval from 55C to 65C to ensure airflow when the system gets warm Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> Signed-off-by: Alexey Charkov <alchark@gmail.com> --- arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 34 ++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)
Comments
Hello Alexey, Some notes below, please have a look. On 2024-01-30 19:21, Alexey Charkov wrote: > This enables thermal monitoring on Radxa Rock 5B and links the PWM > fan as an active cooling device managed automatically by the thermal > subsystem, with a target SoC temperature of 65C and a minimum-spin > interval from 55C to 65C to ensure airflow when the system gets warm I'd suggest that you replace "temperature driven fan control" with "active cooling" in the patch subject. More concise and reads better. > Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> > Signed-off-by: Alexey Charkov <alchark@gmail.com> > --- > arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 34 > ++++++++++++++++++++++++- > 1 file changed, 33 insertions(+), 1 deletion(-) > > diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > index a0e303c3a1dc..b485edeef876 100644 > --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > @@ -52,7 +52,7 @@ led_rgb_b { > > fan: pwm-fan { > compatible = "pwm-fan"; > - cooling-levels = <0 95 145 195 255>; > + cooling-levels = <0 120 150 180 210 240 255>; > fan-supply = <&vcc5v0_sys>; > pwms = <&pwm1 0 50000 0>; > #cooling-cells = <2>; > @@ -173,6 +173,34 @@ &cpu_l3 { > cpu-supply = <&vdd_cpu_lit_s0>; > }; > > +&package_thermal { > + polling-delay = <1000>; > + > + trips { > + package_fan0: package-fan0 { > + temperature = <55000>; > + hysteresis = <2000>; > + type = "active"; > + }; > + package_fan1: package-fan1 { > + temperature = <65000>; > + hysteresis = <2000>; > + type = "active"; > + }; > + }; > + > + cooling-maps { > + map0 { Should be "map1" instead of "map0". There's already "map0" defined for "package_thermal" in the RK3588(s) dtsi file. > + trip = <&package_fan0>; > + cooling-device = <&fan THERMAL_NO_LIMIT 1>; > + }; > + map1 { Should be "map2" instead of "map1". > + trip = <&package_fan1>; > + cooling-device = <&fan 1 THERMAL_NO_LIMIT>; Should be "cooling-device = <&fan 2 THERMAL_NO_LIMIT>;" (i.e., "2 THERMAL_NO_LIMIT" instead of "1 THERMAL_NO_LIMIT"). The first fan speed is already covered by the first cooling map. The second cooling map takes over from the second fan speed. > + }; > + }; > +}; > + > &i2c0 { > pinctrl-names = "default"; > pinctrl-0 = <&i2c0m2_xfer>; > @@ -731,6 +759,10 @@ regulator-state-mem { > }; > }; > > +&tsadc { > + status = "okay"; > +}; > + > &uart2 { > pinctrl-0 = <&uart2m0_xfer>; > status = "okay";
On Wed, Jan 31, 2024 at 9:08 AM Dragan Simic <dsimic@manjaro.org> wrote: > > Hello Alexey, > > Some notes below, please have a look. > > On 2024-01-30 19:21, Alexey Charkov wrote: > > This enables thermal monitoring on Radxa Rock 5B and links the PWM > > fan as an active cooling device managed automatically by the thermal > > subsystem, with a target SoC temperature of 65C and a minimum-spin > > interval from 55C to 65C to ensure airflow when the system gets warm > > I'd suggest that you replace "temperature driven fan control" with > "active cooling" in the patch subject. More concise and reads better. Agreed, thanks! > > Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> > > Signed-off-by: Alexey Charkov <alchark@gmail.com> > > --- > > arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 34 > > ++++++++++++++++++++++++- > > 1 file changed, 33 insertions(+), 1 deletion(-) > > > > diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > > b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > > index a0e303c3a1dc..b485edeef876 100644 > > --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > > +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > > @@ -52,7 +52,7 @@ led_rgb_b { > > > > fan: pwm-fan { > > compatible = "pwm-fan"; > > - cooling-levels = <0 95 145 195 255>; > > + cooling-levels = <0 120 150 180 210 240 255>; > > fan-supply = <&vcc5v0_sys>; > > pwms = <&pwm1 0 50000 0>; > > #cooling-cells = <2>; > > @@ -173,6 +173,34 @@ &cpu_l3 { > > cpu-supply = <&vdd_cpu_lit_s0>; > > }; > > > > +&package_thermal { > > + polling-delay = <1000>; > > + > > + trips { > > + package_fan0: package-fan0 { > > + temperature = <55000>; > > + hysteresis = <2000>; > > + type = "active"; > > + }; > > + package_fan1: package-fan1 { > > + temperature = <65000>; > > + hysteresis = <2000>; > > + type = "active"; > > + }; > > + }; > > + > > + cooling-maps { > > + map0 { > > Should be "map1" instead of "map0". There's already "map0" > defined for "package_thermal" in the RK3588(s) dtsi file. Indeed. I got overzealous renaming everything to be zero-based. > > + trip = <&package_fan0>; > > + cooling-device = <&fan THERMAL_NO_LIMIT 1>; > > + }; > > + map1 { > > Should be "map2" instead of "map1". Noted, thanks! > > + trip = <&package_fan1>; > > + cooling-device = <&fan 1 THERMAL_NO_LIMIT>; > > Should be "cooling-device = <&fan 2 THERMAL_NO_LIMIT>;" > (i.e., "2 THERMAL_NO_LIMIT" instead of "1 THERMAL_NO_LIMIT"). > > The first fan speed is already covered by the first cooling map. > The second cooling map takes over from the second fan speed. Makes sense, will adjust, thank you! Best regards, Alexey
On Wed, Jan 31, 2024 at 2:22 AM Alexey Charkov <alchark@gmail.com> wrote: > > This enables thermal monitoring on Radxa Rock 5B and links the PWM > fan as an active cooling device managed automatically by the thermal > subsystem, with a target SoC temperature of 65C and a minimum-spin > interval from 55C to 65C to ensure airflow when the system gets warm > > Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> > Signed-off-by: Alexey Charkov <alchark@gmail.com> > --- > arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 34 ++++++++++++++++++++++++- > 1 file changed, 33 insertions(+), 1 deletion(-) > > diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > index a0e303c3a1dc..b485edeef876 100644 > --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > @@ -52,7 +52,7 @@ led_rgb_b { > > fan: pwm-fan { > compatible = "pwm-fan"; > - cooling-levels = <0 95 145 195 255>; > + cooling-levels = <0 120 150 180 210 240 255>; > fan-supply = <&vcc5v0_sys>; > pwms = <&pwm1 0 50000 0>; > #cooling-cells = <2>; > @@ -173,6 +173,34 @@ &cpu_l3 { > cpu-supply = <&vdd_cpu_lit_s0>; > }; > > +&package_thermal { > + polling-delay = <1000>; > + > + trips { > + package_fan0: package-fan0 { > + temperature = <55000>; > + hysteresis = <2000>; > + type = "active"; > + }; > + package_fan1: package-fan1 { > + temperature = <65000>; > + hysteresis = <2000>; > + type = "active"; > + }; > + }; > + > + cooling-maps { > + map0 { > + trip = <&package_fan0>; > + cooling-device = <&fan THERMAL_NO_LIMIT 1>; > + }; > + map1 { > + trip = <&package_fan1>; > + cooling-device = <&fan 1 THERMAL_NO_LIMIT>; > + }; > + }; > +}; > + > &i2c0 { > pinctrl-names = "default"; > pinctrl-0 = <&i2c0m2_xfer>; > @@ -731,6 +759,10 @@ regulator-state-mem { > }; > }; > > +&tsadc { > + status = "okay"; > +}; > + Is there any reason this can't be enabled by default in the .dtsi file? The thermal sensor doesn't depend on anything external, so there should be no reason to push this down to the board level. ChenYu > &uart2 { > pinctrl-0 = <&uart2m0_xfer>; > status = "okay"; > > -- > 2.43.0 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hello Chen-Yu, On 2024-02-01 15:26, Chen-Yu Tsai wrote: > On Wed, Jan 31, 2024 at 2:22 AM Alexey Charkov <alchark@gmail.com> > wrote: >> >> This enables thermal monitoring on Radxa Rock 5B and links the PWM >> fan as an active cooling device managed automatically by the thermal >> subsystem, with a target SoC temperature of 65C and a minimum-spin >> interval from 55C to 65C to ensure airflow when the system gets warm >> >> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> >> Signed-off-by: Alexey Charkov <alchark@gmail.com> >> --- >> arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 34 >> ++++++++++++++++++++++++- >> 1 file changed, 33 insertions(+), 1 deletion(-) >> >> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >> b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >> index a0e303c3a1dc..b485edeef876 100644 >> --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >> +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >> @@ -52,7 +52,7 @@ led_rgb_b { >> >> fan: pwm-fan { >> compatible = "pwm-fan"; >> - cooling-levels = <0 95 145 195 255>; >> + cooling-levels = <0 120 150 180 210 240 255>; >> fan-supply = <&vcc5v0_sys>; >> pwms = <&pwm1 0 50000 0>; >> #cooling-cells = <2>; >> @@ -173,6 +173,34 @@ &cpu_l3 { >> cpu-supply = <&vdd_cpu_lit_s0>; >> }; >> >> +&package_thermal { >> + polling-delay = <1000>; >> + >> + trips { >> + package_fan0: package-fan0 { >> + temperature = <55000>; >> + hysteresis = <2000>; >> + type = "active"; >> + }; >> + package_fan1: package-fan1 { >> + temperature = <65000>; >> + hysteresis = <2000>; >> + type = "active"; >> + }; >> + }; >> + >> + cooling-maps { >> + map0 { >> + trip = <&package_fan0>; >> + cooling-device = <&fan THERMAL_NO_LIMIT 1>; >> + }; >> + map1 { >> + trip = <&package_fan1>; >> + cooling-device = <&fan 1 THERMAL_NO_LIMIT>; >> + }; >> + }; >> +}; >> + >> &i2c0 { >> pinctrl-names = "default"; >> pinctrl-0 = <&i2c0m2_xfer>; >> @@ -731,6 +759,10 @@ regulator-state-mem { >> }; >> }; >> >> +&tsadc { >> + status = "okay"; >> +}; >> + > > Is there any reason this can't be enabled by default in the .dtsi file? > The thermal sensor doesn't depend on anything external, so there should > be no reason to push this down to the board level. Actually, there is a reason. Different boards can handle the critical overheating differently, by letting the CRU or the PMIC handle it. This was also the case for the RK3399. Please, have a look at the following DT properties, which are consumed by drivers/thermal/rockchip_thermal.c: - "rockchip,hw-tshut-mode" - "rockchip,hw-tshut-polarity" See also page 1,372 of the RK3588 TRM v1.0. This has also reminded me to check how is the Rock 5B actually wired, just to make sure. We actually need to provide the two DT properties listed above, at least to avoid emitting the warnings. >> &uart2 { >> pinctrl-0 = <&uart2m0_xfer>; >> status = "okay"; >> >> -- >> 2.43.0
On Thu, Feb 1, 2024 at 9:34 PM Dragan Simic <dsimic@manjaro.org> wrote: > > Hello Chen-Yu, > > On 2024-02-01 15:26, Chen-Yu Tsai wrote: > > On Wed, Jan 31, 2024 at 2:22 AM Alexey Charkov <alchark@gmail.com> > > wrote: > >> > >> This enables thermal monitoring on Radxa Rock 5B and links the PWM > >> fan as an active cooling device managed automatically by the thermal > >> subsystem, with a target SoC temperature of 65C and a minimum-spin > >> interval from 55C to 65C to ensure airflow when the system gets warm > >> > >> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> > >> Signed-off-by: Alexey Charkov <alchark@gmail.com> > >> --- > >> arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 34 > >> ++++++++++++++++++++++++- > >> 1 file changed, 33 insertions(+), 1 deletion(-) > >> > >> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > >> b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > >> index a0e303c3a1dc..b485edeef876 100644 > >> --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > >> +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > >> @@ -52,7 +52,7 @@ led_rgb_b { > >> > >> fan: pwm-fan { > >> compatible = "pwm-fan"; > >> - cooling-levels = <0 95 145 195 255>; > >> + cooling-levels = <0 120 150 180 210 240 255>; > >> fan-supply = <&vcc5v0_sys>; > >> pwms = <&pwm1 0 50000 0>; > >> #cooling-cells = <2>; > >> @@ -173,6 +173,34 @@ &cpu_l3 { > >> cpu-supply = <&vdd_cpu_lit_s0>; > >> }; > >> > >> +&package_thermal { > >> + polling-delay = <1000>; > >> + > >> + trips { > >> + package_fan0: package-fan0 { > >> + temperature = <55000>; > >> + hysteresis = <2000>; > >> + type = "active"; > >> + }; > >> + package_fan1: package-fan1 { > >> + temperature = <65000>; > >> + hysteresis = <2000>; > >> + type = "active"; > >> + }; > >> + }; > >> + > >> + cooling-maps { > >> + map0 { > >> + trip = <&package_fan0>; > >> + cooling-device = <&fan THERMAL_NO_LIMIT 1>; > >> + }; > >> + map1 { > >> + trip = <&package_fan1>; > >> + cooling-device = <&fan 1 THERMAL_NO_LIMIT>; > >> + }; > >> + }; > >> +}; > >> + > >> &i2c0 { > >> pinctrl-names = "default"; > >> pinctrl-0 = <&i2c0m2_xfer>; > >> @@ -731,6 +759,10 @@ regulator-state-mem { > >> }; > >> }; > >> > >> +&tsadc { > >> + status = "okay"; > >> +}; > >> + > > > > Is there any reason this can't be enabled by default in the .dtsi file? > > The thermal sensor doesn't depend on anything external, so there should > > be no reason to push this down to the board level. > > Actually, there is a reason. Different boards can handle the critical > overheating differently, by letting the CRU or the PMIC handle it. This > was also the case for the RK3399. > > Please, have a look at the following DT properties, which are consumed > by drivers/thermal/rockchip_thermal.c: > - "rockchip,hw-tshut-mode" > - "rockchip,hw-tshut-polarity" > > See also page 1,372 of the RK3588 TRM v1.0. > > This has also reminded me to check how is the Rock 5B actually wired, > just to make sure. We actually need to provide the two DT properties > listed above, at least to avoid emitting the warnings. Well the defaults are already provided in rk3588s.dtsi, so there won't be any warnings (see lines 2222-2223 in Linus' master version), and according to the vendor kernel those are also what Rock 5B uses. This made me think however: what if a board doesn't enable TSADC, but has OPPs in place for higher voltage and frequency states? There won't be any throttling (as there won't be any thermal monitoring) and there might not be a critical shutdown at all if it heats up - possibly even causing hardware damage. In this case it seems that having TSADC enabled by default would at least trigger passive cooling, hopefully avoiding the critical shutdown altogether and making those properties irrelevant in 99% cases. Best regards, Alexey
On 2024-02-01 20:15, Alexey Charkov wrote: > On Thu, Feb 1, 2024 at 9:34 PM Dragan Simic <dsimic@manjaro.org> wrote: >> On 2024-02-01 15:26, Chen-Yu Tsai wrote: >> > On Wed, Jan 31, 2024 at 2:22 AM Alexey Charkov <alchark@gmail.com> >> > wrote: >> >> >> >> This enables thermal monitoring on Radxa Rock 5B and links the PWM >> >> fan as an active cooling device managed automatically by the thermal >> >> subsystem, with a target SoC temperature of 65C and a minimum-spin >> >> interval from 55C to 65C to ensure airflow when the system gets warm >> >> >> >> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> >> >> Signed-off-by: Alexey Charkov <alchark@gmail.com> >> >> --- >> >> arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 34 >> >> ++++++++++++++++++++++++- >> >> 1 file changed, 33 insertions(+), 1 deletion(-) >> >> >> >> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >> >> b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >> >> index a0e303c3a1dc..b485edeef876 100644 >> >> --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >> >> +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >> >> @@ -52,7 +52,7 @@ led_rgb_b { >> >> >> >> fan: pwm-fan { >> >> compatible = "pwm-fan"; >> >> - cooling-levels = <0 95 145 195 255>; >> >> + cooling-levels = <0 120 150 180 210 240 255>; >> >> fan-supply = <&vcc5v0_sys>; >> >> pwms = <&pwm1 0 50000 0>; >> >> #cooling-cells = <2>; >> >> @@ -173,6 +173,34 @@ &cpu_l3 { >> >> cpu-supply = <&vdd_cpu_lit_s0>; >> >> }; >> >> >> >> +&package_thermal { >> >> + polling-delay = <1000>; >> >> + >> >> + trips { >> >> + package_fan0: package-fan0 { >> >> + temperature = <55000>; >> >> + hysteresis = <2000>; >> >> + type = "active"; >> >> + }; >> >> + package_fan1: package-fan1 { >> >> + temperature = <65000>; >> >> + hysteresis = <2000>; >> >> + type = "active"; >> >> + }; >> >> + }; >> >> + >> >> + cooling-maps { >> >> + map0 { >> >> + trip = <&package_fan0>; >> >> + cooling-device = <&fan THERMAL_NO_LIMIT 1>; >> >> + }; >> >> + map1 { >> >> + trip = <&package_fan1>; >> >> + cooling-device = <&fan 1 THERMAL_NO_LIMIT>; >> >> + }; >> >> + }; >> >> +}; >> >> + >> >> &i2c0 { >> >> pinctrl-names = "default"; >> >> pinctrl-0 = <&i2c0m2_xfer>; >> >> @@ -731,6 +759,10 @@ regulator-state-mem { >> >> }; >> >> }; >> >> >> >> +&tsadc { >> >> + status = "okay"; >> >> +}; >> >> + >> > >> > Is there any reason this can't be enabled by default in the .dtsi file? >> > The thermal sensor doesn't depend on anything external, so there should >> > be no reason to push this down to the board level. >> >> Actually, there is a reason. Different boards can handle the critical >> overheating differently, by letting the CRU or the PMIC handle it. >> This >> was also the case for the RK3399. >> >> Please, have a look at the following DT properties, which are consumed >> by drivers/thermal/rockchip_thermal.c: >> - "rockchip,hw-tshut-mode" >> - "rockchip,hw-tshut-polarity" >> >> See also page 1,372 of the RK3588 TRM v1.0. >> >> This has also reminded me to check how is the Rock 5B actually wired, >> just to make sure. We actually need to provide the two DT properties >> listed above, at least to avoid emitting the warnings. > > Well the defaults are already provided in rk3588s.dtsi, so there won't > be any warnings (see lines 2222-2223 in Linus' master version), and > according to the vendor kernel those are also what Rock 5B uses. Yes, I noticed the same a couple of minutes after sending my last message, but didn't want to make more noise about it. :) I would've mentioned it in my next message, of course. > This made me think however: what if a board doesn't enable TSADC, but > has OPPs in place for higher voltage and frequency states? There won't > be any throttling (as there won't be any thermal monitoring) and there > might not be a critical shutdown at all if it heats up - possibly even > causing hardware damage. In this case it seems that having TSADC > enabled by default would at least trigger passive cooling, hopefully > avoiding the critical shutdown altogether and making those properties > irrelevant in 99% cases. Those are very good questions. Thumbs up! The trouble is that the boards can use different wiring to handle the thermal runaways, by expecting the PMIC to handle it or not. Thus, it's IMHO better to simply leave that to be tested and enabled on a board-by-board basis, whenever a new RK3588(s)-based board is added. Thus, the only right way at this point would be to merge the addition of the OPPs and the enabling of the TSADC for all currently supported RK3588(s)-based boards at once, instead of just for the Rock 5B. I can handle the required changes for the QuartzPro64 dts file. For other supported RK3588(s)-based boards, if there are no people having access to them and willing to perform the dts changes and the testing, I'd be willing to go through the board schematics, to enable the TSADC for them as well.
On 2024-02-01 20:31, Dragan Simic wrote: > On 2024-02-01 20:15, Alexey Charkov wrote: >> On Thu, Feb 1, 2024 at 9:34 PM Dragan Simic <dsimic@manjaro.org> >> wrote: >>> On 2024-02-01 15:26, Chen-Yu Tsai wrote: >>> > On Wed, Jan 31, 2024 at 2:22 AM Alexey Charkov <alchark@gmail.com> >>> > wrote: >>> >> >>> >> This enables thermal monitoring on Radxa Rock 5B and links the PWM >>> >> fan as an active cooling device managed automatically by the thermal >>> >> subsystem, with a target SoC temperature of 65C and a minimum-spin >>> >> interval from 55C to 65C to ensure airflow when the system gets warm >>> >> >>> >> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> >>> >> Signed-off-by: Alexey Charkov <alchark@gmail.com> >>> >> --- >>> >> arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 34 >>> >> ++++++++++++++++++++++++- >>> >> 1 file changed, 33 insertions(+), 1 deletion(-) >>> >> >>> >> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >>> >> b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >>> >> index a0e303c3a1dc..b485edeef876 100644 >>> >> --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >>> >> +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts >>> >> @@ -52,7 +52,7 @@ led_rgb_b { >>> >> >>> >> fan: pwm-fan { >>> >> compatible = "pwm-fan"; >>> >> - cooling-levels = <0 95 145 195 255>; >>> >> + cooling-levels = <0 120 150 180 210 240 255>; >>> >> fan-supply = <&vcc5v0_sys>; >>> >> pwms = <&pwm1 0 50000 0>; >>> >> #cooling-cells = <2>; >>> >> @@ -173,6 +173,34 @@ &cpu_l3 { >>> >> cpu-supply = <&vdd_cpu_lit_s0>; >>> >> }; >>> >> >>> >> +&package_thermal { >>> >> + polling-delay = <1000>; >>> >> + >>> >> + trips { >>> >> + package_fan0: package-fan0 { >>> >> + temperature = <55000>; >>> >> + hysteresis = <2000>; >>> >> + type = "active"; >>> >> + }; >>> >> + package_fan1: package-fan1 { >>> >> + temperature = <65000>; >>> >> + hysteresis = <2000>; >>> >> + type = "active"; >>> >> + }; >>> >> + }; >>> >> + >>> >> + cooling-maps { >>> >> + map0 { >>> >> + trip = <&package_fan0>; >>> >> + cooling-device = <&fan THERMAL_NO_LIMIT 1>; >>> >> + }; >>> >> + map1 { >>> >> + trip = <&package_fan1>; >>> >> + cooling-device = <&fan 1 THERMAL_NO_LIMIT>; >>> >> + }; >>> >> + }; >>> >> +}; >>> >> + >>> >> &i2c0 { >>> >> pinctrl-names = "default"; >>> >> pinctrl-0 = <&i2c0m2_xfer>; >>> >> @@ -731,6 +759,10 @@ regulator-state-mem { >>> >> }; >>> >> }; >>> >> >>> >> +&tsadc { >>> >> + status = "okay"; >>> >> +}; >>> >> + >>> > >>> > Is there any reason this can't be enabled by default in the .dtsi file? >>> > The thermal sensor doesn't depend on anything external, so there should >>> > be no reason to push this down to the board level. >>> >>> Actually, there is a reason. Different boards can handle the >>> critical >>> overheating differently, by letting the CRU or the PMIC handle it. >>> This >>> was also the case for the RK3399. >>> >>> Please, have a look at the following DT properties, which are >>> consumed >>> by drivers/thermal/rockchip_thermal.c: >>> - "rockchip,hw-tshut-mode" >>> - "rockchip,hw-tshut-polarity" >>> >>> See also page 1,372 of the RK3588 TRM v1.0. >>> >>> This has also reminded me to check how is the Rock 5B actually wired, >>> just to make sure. We actually need to provide the two DT properties >>> listed above, at least to avoid emitting the warnings. >> >> Well the defaults are already provided in rk3588s.dtsi, so there won't >> be any warnings (see lines 2222-2223 in Linus' master version), and >> according to the vendor kernel those are also what Rock 5B uses. > > Yes, I noticed the same a couple of minutes after sending my last > message, but didn't want to make more noise about it. :) I would've > mentioned it in my next message, of course. Just checked the Rock 5B schematic and it expects the CRU to be used to perform the hardware reset in case of a thermal runaway, so the defaults in the RK3588s dtsi are fine. I had to double-check it. :) However, now I have some open questions related to interrupt-driven operation. I'll research it further and come back with an update. >> This made me think however: what if a board doesn't enable TSADC, but >> has OPPs in place for higher voltage and frequency states? There won't >> be any throttling (as there won't be any thermal monitoring) and there >> might not be a critical shutdown at all if it heats up - possibly even >> causing hardware damage. In this case it seems that having TSADC >> enabled by default would at least trigger passive cooling, hopefully >> avoiding the critical shutdown altogether and making those properties >> irrelevant in 99% cases. > > Those are very good questions. Thumbs up! > > The trouble is that the boards can use different wiring to handle the > thermal runaways, by expecting the PMIC to handle it or not. Thus, > it's IMHO better to simply leave that to be tested and enabled on a > board-by-board basis, whenever a new RK3588(s)-based board is added. > > Thus, the only right way at this point would be to merge the addition > of the OPPs and the enabling of the TSADC for all currently supported > RK3588(s)-based boards at once, instead of just for the Rock 5B. > > I can handle the required changes for the QuartzPro64 dts file. For > other supported RK3588(s)-based boards, if there are no people having > access to them and willing to perform the dts changes and the testing, > I'd be willing to go through the board schematics, to enable the > TSADC for them as well. Please, let me know are you fine with the above-described approach.
On Thu, Feb 1, 2024 at 11:43 PM Dragan Simic <dsimic@manjaro.org> wrote: > > On 2024-02-01 20:31, Dragan Simic wrote: > > On 2024-02-01 20:15, Alexey Charkov wrote: > >> On Thu, Feb 1, 2024 at 9:34 PM Dragan Simic <dsimic@manjaro.org> > >> wrote: > >>> On 2024-02-01 15:26, Chen-Yu Tsai wrote: > >>> > On Wed, Jan 31, 2024 at 2:22 AM Alexey Charkov <alchark@gmail.com> > >>> > wrote: > >>> >> > >>> >> This enables thermal monitoring on Radxa Rock 5B and links the PWM > >>> >> fan as an active cooling device managed automatically by the thermal > >>> >> subsystem, with a target SoC temperature of 65C and a minimum-spin > >>> >> interval from 55C to 65C to ensure airflow when the system gets warm > >>> >> > >>> >> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> > >>> >> Signed-off-by: Alexey Charkov <alchark@gmail.com> > >>> >> --- > >>> >> arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 34 > >>> >> ++++++++++++++++++++++++- > >>> >> 1 file changed, 33 insertions(+), 1 deletion(-) > >>> >> > >>> >> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > >>> >> b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > >>> >> index a0e303c3a1dc..b485edeef876 100644 > >>> >> --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > >>> >> +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts > >>> >> @@ -52,7 +52,7 @@ led_rgb_b { > >>> >> > >>> >> fan: pwm-fan { > >>> >> compatible = "pwm-fan"; > >>> >> - cooling-levels = <0 95 145 195 255>; > >>> >> + cooling-levels = <0 120 150 180 210 240 255>; > >>> >> fan-supply = <&vcc5v0_sys>; > >>> >> pwms = <&pwm1 0 50000 0>; > >>> >> #cooling-cells = <2>; > >>> >> @@ -173,6 +173,34 @@ &cpu_l3 { > >>> >> cpu-supply = <&vdd_cpu_lit_s0>; > >>> >> }; > >>> >> > >>> >> +&package_thermal { > >>> >> + polling-delay = <1000>; > >>> >> + > >>> >> + trips { > >>> >> + package_fan0: package-fan0 { > >>> >> + temperature = <55000>; > >>> >> + hysteresis = <2000>; > >>> >> + type = "active"; > >>> >> + }; > >>> >> + package_fan1: package-fan1 { > >>> >> + temperature = <65000>; > >>> >> + hysteresis = <2000>; > >>> >> + type = "active"; > >>> >> + }; > >>> >> + }; > >>> >> + > >>> >> + cooling-maps { > >>> >> + map0 { > >>> >> + trip = <&package_fan0>; > >>> >> + cooling-device = <&fan THERMAL_NO_LIMIT 1>; > >>> >> + }; > >>> >> + map1 { > >>> >> + trip = <&package_fan1>; > >>> >> + cooling-device = <&fan 1 THERMAL_NO_LIMIT>; > >>> >> + }; > >>> >> + }; > >>> >> +}; > >>> >> + > >>> >> &i2c0 { > >>> >> pinctrl-names = "default"; > >>> >> pinctrl-0 = <&i2c0m2_xfer>; > >>> >> @@ -731,6 +759,10 @@ regulator-state-mem { > >>> >> }; > >>> >> }; > >>> >> > >>> >> +&tsadc { > >>> >> + status = "okay"; > >>> >> +}; > >>> >> + > >>> > > >>> > Is there any reason this can't be enabled by default in the .dtsi file? > >>> > The thermal sensor doesn't depend on anything external, so there should > >>> > be no reason to push this down to the board level. > >>> > >>> Actually, there is a reason. Different boards can handle the > >>> critical > >>> overheating differently, by letting the CRU or the PMIC handle it. > >>> This > >>> was also the case for the RK3399. > >>> > >>> Please, have a look at the following DT properties, which are > >>> consumed > >>> by drivers/thermal/rockchip_thermal.c: > >>> - "rockchip,hw-tshut-mode" > >>> - "rockchip,hw-tshut-polarity" > >>> > >>> See also page 1,372 of the RK3588 TRM v1.0. > >>> > >>> This has also reminded me to check how is the Rock 5B actually wired, > >>> just to make sure. We actually need to provide the two DT properties > >>> listed above, at least to avoid emitting the warnings. > >> > >> Well the defaults are already provided in rk3588s.dtsi, so there won't > >> be any warnings (see lines 2222-2223 in Linus' master version), and > >> according to the vendor kernel those are also what Rock 5B uses. > > > > Yes, I noticed the same a couple of minutes after sending my last > > message, but didn't want to make more noise about it. :) I would've > > mentioned it in my next message, of course. > > Just checked the Rock 5B schematic and it expects the CRU to be used > to perform the hardware reset in case of a thermal runaway, so the > defaults in the RK3588s dtsi are fine. I had to double-check it. :) I've just looked at Rock 5B, Rock 5A and NanoPC T6 schematics, and they all seem to have the TSADC_SHUT line connected to RESET_L. At the same time, Radxa's device tree uses the default CRU-based option. To me this seems to imply that the CRU option should always work, by the virtue of CRU being on-chip. At the same time, if the right GPIOs are wired to the PMIC reset line for a particular board, the board may also choose to use the GPIO option - or stick with CRU. If that interpretation is correct, then I suggest we enable TSADC by default in the .dtsi, and let it handle both throttling and CRU-based critical resets on all boards. Those who know what they are doing may then elect to switch their board to GPIO-PMIC based reset. What do you think? > However, now I have some open questions related to interrupt-driven > operation. I'll research it further and come back with an update. > > >> This made me think however: what if a board doesn't enable TSADC, but > >> has OPPs in place for higher voltage and frequency states? There won't > >> be any throttling (as there won't be any thermal monitoring) and there > >> might not be a critical shutdown at all if it heats up - possibly even > >> causing hardware damage. In this case it seems that having TSADC > >> enabled by default would at least trigger passive cooling, hopefully > >> avoiding the critical shutdown altogether and making those properties > >> irrelevant in 99% cases. > > > > Those are very good questions. Thumbs up! > > > > The trouble is that the boards can use different wiring to handle the > > thermal runaways, by expecting the PMIC to handle it or not. Thus, > > it's IMHO better to simply leave that to be tested and enabled on a > > board-by-board basis, whenever a new RK3588(s)-based board is added. > > > > Thus, the only right way at this point would be to merge the addition > > of the OPPs and the enabling of the TSADC for all currently supported > > RK3588(s)-based boards at once, instead of just for the Rock 5B. If we can agree on a workable 'default-on' configuration for TSADC to be included in the .dtsi I think that would be preferable, because it would enable all boards to benefit from higher OPPs and throttling. This would also save us from a scenario when OPPs get included in the default .dtsi, but TSADC is off by default, and then some poor soul tries to add a new board with a minimal .dts, forgetting to enable TSADC and having their SoC fried under high load... > > I can handle the required changes for the QuartzPro64 dts file. For > > other supported RK3588(s)-based boards, if there are no people having > > access to them and willing to perform the dts changes and the testing, > > I'd be willing to go through the board schematics, to enable the > > TSADC for them as well. > > Please, let me know are you fine with the above-described approach. I believe it's great if we can go through the schematics no matter what! Although if we agree that CRU is an always-working default option for all, then why don't we just enable TSADC for all, and leave the conversion to GPIO-PMIC resets for later and for where it's needed? Best regards, Alexey
Hello Alexey, On 2024-02-02 15:42, Alexey Charkov wrote: > On Thu, Feb 1, 2024 at 11:43 PM Dragan Simic <dsimic@manjaro.org> > wrote: >> On 2024-02-01 20:31, Dragan Simic wrote: >>> On 2024-02-01 20:15, Alexey Charkov wrote: >>>> On Thu, Feb 1, 2024 at 9:34 PM Dragan Simic <dsimic@manjaro.org> >>>> wrote: >>>>> On 2024-02-01 15:26, Chen-Yu Tsai wrote: >>>>>> Is there any reason this can't be enabled by default in the .dtsi >>>>>> file? >>>>>> The thermal sensor doesn't depend on anything external, so there >>>>>> should >>>>>> be no reason to push this down to the board level. >>>>> >>>>> Actually, there is a reason. Different boards can handle the >>>>> critical overheating differently, by letting the CRU or the PMIC >>>>> handle it. This was also the case for the RK3399. >>>>> >>>>> Please, have a look at the following DT properties, which are >>>>> consumed by drivers/thermal/rockchip_thermal.c: >>>>> - "rockchip,hw-tshut-mode" >>>>> - "rockchip,hw-tshut-polarity" >>>>> >>>>> See also page 1,372 of the RK3588 TRM v1.0. >>>>> >>>>> This has also reminded me to check how is the Rock 5B actually >>>>> wired, >>>>> just to make sure. We actually need to provide the two DT >>>>> properties >>>>> listed above, at least to avoid emitting the warnings. >>>> >>>> Well the defaults are already provided in rk3588s.dtsi, so there >>>> won't >>>> be any warnings (see lines 2222-2223 in Linus' master version), and >>>> according to the vendor kernel those are also what Rock 5B uses. >>> >>> Yes, I noticed the same a couple of minutes after sending my last >>> message, but didn't want to make more noise about it. :) I would've >>> mentioned it in my next message, of course. >> >> Just checked the Rock 5B schematic and it expects the CRU to be used >> to perform the hardware reset in case of a thermal runaway, so the >> defaults in the RK3588s dtsi are fine. I had to double-check it. :) > > I've just looked at Rock 5B, Rock 5A and NanoPC T6 schematics, and > they all seem to have the TSADC_SHUT line connected to RESET_L. Ah, I see it now in the Rock 5B schematic, thank you for the correction. I somehow managed to miss it initially; here's the link to a screenshot from the Rock 5B schematic v1.423, for future reference: https://i.imgur.com/IGAPPgl.png . > At the same time, Radxa's device tree uses the default > CRU-based option. Here's the link to a screenshot from the RK3588 Hardware Design Guide v1.0, which shows the recommended reset signal paths for RK3588 boards: https://i.imgur.com/DNqhjfP.png . As visible in the Rock 5B schematic, it expectedly follows this recommendation from Rockchip, so we should actually use GPIO-based handling for the thermal runaways on the Rock 5B, to have the PMIC reset as well. Here's the link to another screenshot from the Rock 5B schematic v1.423, for future reference: https://i.imgur.com/BdgZ30C.png . Of course, it should be tested to make sure that the thermal runaway resets work fine. It isn't uncommon for downstream DTs to sometimes contain some small mistakes that somehow remained undetected. > To me this seems to imply that the CRU option should always work, by > the virtue of CRU being on-chip. At the same time, if the right GPIOs > are wired to the PMIC reset line for a particular board, the board > may also choose to use the GPIO option - or stick with CRU. > > If that interpretation is correct, then I suggest we enable TSADC by > default in the .dtsi, and let it handle both throttling and CRU-based > critical resets on all boards. Those who know what they are doing may > then elect to switch their board to GPIO-PMIC based reset. > > What do you think? I think that, if we choose to enable CRU-based thermal runaway resets without going into too much detail for each board (but we should go into the publicly available board schematics, as also noted in my last comment in this message), we should do that in the board dts files, instead of just enabling the TSADC in the RK3588(s) SoC dtsi. That way, we would clearly indicate the TSADC to be a board- specific feature, and hopefully gain more attention from the people interested in the boards, to perform some additional testing, etc. >> However, now I have some open questions related to interrupt-driven >> operation. I'll research it further and come back with an update. >> >>>> This made me think however: what if a board doesn't enable TSADC, >>>> but >>>> has OPPs in place for higher voltage and frequency states? There >>>> won't >>>> be any throttling (as there won't be any thermal monitoring) and >>>> there >>>> might not be a critical shutdown at all if it heats up - possibly >>>> even >>>> causing hardware damage. In this case it seems that having TSADC >>>> enabled by default would at least trigger passive cooling, hopefully >>>> avoiding the critical shutdown altogether and making those >>>> properties >>>> irrelevant in 99% cases. >>> >>> Those are very good questions. Thumbs up! >>> >>> The trouble is that the boards can use different wiring to handle the >>> thermal runaways, by expecting the PMIC to handle it or not. Thus, >>> it's IMHO better to simply leave that to be tested and enabled on a >>> board-by-board basis, whenever a new RK3588(s)-based board is added. >>> >>> Thus, the only right way at this point would be to merge the addition >>> of the OPPs and the enabling of the TSADC for all currently supported >>> RK3588(s)-based boards at once, instead of just for the Rock 5B. > > If we can agree on a workable 'default-on' configuration for TSADC to > be included in the .dtsi I think that would be preferable, because it > would enable all boards to benefit from higher OPPs and throttling. Please, see my other comments. I hope we can agree on that. > This would also save us from a scenario when OPPs get included in the > default .dtsi, but TSADC is off by default, and then some poor soul > tries to add a new board with a minimal .dts, forgetting to enable > TSADC and having their SoC fried under high load... Well, those poor souls can't escape the need to know what are they doing. :) Also, I think it's much more likely that adding a new RK3588-based board would actually start by editing the board dts of some already supported RK3588 board, which the way I propose this to be handled would already have the TSADC enabled, eliminating the risks yout pointed out. Please note that the TSADC has been disabled in the RK3399 SoC dtsi and enabled on a per-RK3399-board-dtsi basis, so we'd also have some consistency by following the same approach with the RK3588(s) SoC dtsi. Consistency is good, if you agree. >>> I can handle the required changes for the QuartzPro64 dts file. For >>> other supported RK3588(s)-based boards, if there are no people having >>> access to them and willing to perform the dts changes and the >>> testing, >>> I'd be willing to go through the board schematics, to enable the >>> TSADC for them as well. >> >> Please, let me know are you fine with the above-described approach. > > I believe it's great if we can go through the schematics no matter > what! Although if we agree that CRU is an always-working default > option for all, then why don't we just enable TSADC for all, and leave > the conversion to GPIO-PMIC resets for later and for where it's > needed? Great! We can surely go through the supported RK3588(s) boards that make their schematics publicly available, and enable the TSADC in their board dts files accordingly. For the remaining RK3588(s) boards that remain "black boxes" to us, we can enable the TSADC in their board dts files with the let-the-CRU-handle-thermal-runaway defaults, and leave any future refinements to the people interested in those boards. That would be a rather clean approach, if you agree.
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts index a0e303c3a1dc..b485edeef876 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts @@ -52,7 +52,7 @@ led_rgb_b { fan: pwm-fan { compatible = "pwm-fan"; - cooling-levels = <0 95 145 195 255>; + cooling-levels = <0 120 150 180 210 240 255>; fan-supply = <&vcc5v0_sys>; pwms = <&pwm1 0 50000 0>; #cooling-cells = <2>; @@ -173,6 +173,34 @@ &cpu_l3 { cpu-supply = <&vdd_cpu_lit_s0>; }; +&package_thermal { + polling-delay = <1000>; + + trips { + package_fan0: package-fan0 { + temperature = <55000>; + hysteresis = <2000>; + type = "active"; + }; + package_fan1: package-fan1 { + temperature = <65000>; + hysteresis = <2000>; + type = "active"; + }; + }; + + cooling-maps { + map0 { + trip = <&package_fan0>; + cooling-device = <&fan THERMAL_NO_LIMIT 1>; + }; + map1 { + trip = <&package_fan1>; + cooling-device = <&fan 1 THERMAL_NO_LIMIT>; + }; + }; +}; + &i2c0 { pinctrl-names = "default"; pinctrl-0 = <&i2c0m2_xfer>; @@ -731,6 +759,10 @@ regulator-state-mem { }; }; +&tsadc { + status = "okay"; +}; + &uart2 { pinctrl-0 = <&uart2m0_xfer>; status = "okay";