lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4dc784eb3c00a9805141148732476838@codeaurora.org>
Date:   Mon, 22 Mar 2021 18:50:47 +0530
From:   skakit@...eaurora.org
To:     Matthias Kaehlcke <mka@...omium.org>
Cc:     Rob Herring <robh+dt@...nel.org>, Andy Gross <agross@...nel.org>,
        Bjorn Andersson <bjorn.andersson@...aro.org>,
        linux-arm-msm@...r.kernel.org, linux-kernel@...r.kernel.org,
        devicetree@...r.kernel.org, kgunda@...eaurora.org
Subject: Re: [PATCH] arm64: dts: qcom: sc7280: Add PMIC peripherals for SC7280

Hi Matthias,

On 2021-03-13 02:10, Matthias Kaehlcke wrote:
> Hi Satya,
> 
> On Thu, Mar 11, 2021 at 04:10:29PM +0530, satya priya wrote:
>> Add PM7325/PM8350C/PMK8350/PMR735A peripherals such as PON,
>> GPIOs, RTC and other PMIC infra modules for SC7280.
>> 
>> Signed-off-by: satya priya <skakit@...eaurora.org>
>> ---
>> This patch depends on base DT and board files for SC7280 to merge 
>> first
>> https://lore.kernel.org/patchwork/project/lkml/list/?series=487403
>> 
>>  arch/arm64/boot/dts/qcom/pm7325.dtsi  |  60 ++++++++++++++++++++
>>  arch/arm64/boot/dts/qcom/pm8350c.dtsi |  60 ++++++++++++++++++++
>>  arch/arm64/boot/dts/qcom/pmk8350.dtsi | 104 
>> ++++++++++++++++++++++++++++++++++
>>  arch/arm64/boot/dts/qcom/pmr735a.dtsi |  60 ++++++++++++++++++++
>>  arch/arm64/boot/dts/qcom/sc7280.dtsi  |   8 +++
>>  5 files changed, 292 insertions(+)
>>  create mode 100644 arch/arm64/boot/dts/qcom/pm7325.dtsi
>>  create mode 100644 arch/arm64/boot/dts/qcom/pm8350c.dtsi
>>  create mode 100644 arch/arm64/boot/dts/qcom/pmk8350.dtsi
>>  create mode 100644 arch/arm64/boot/dts/qcom/pmr735a.dtsi
>> 
>> diff --git a/arch/arm64/boot/dts/qcom/pm7325.dtsi 
>> b/arch/arm64/boot/dts/qcom/pm7325.dtsi
>> new file mode 100644
>> index 0000000..393b256
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/qcom/pm7325.dtsi
>> @@ -0,0 +1,60 @@
>> +// SPDX-License-Identifier: BSD-3-Clause
>> +// Copyright (c) 2021, The Linux Foundation. All rights reserved.
>> +
>> +#include <dt-bindings/interrupt-controller/irq.h>
>> +#include <dt-bindings/spmi/spmi.h>
>> +
>> +&spmi_bus {
>> +	pm7325: pmic@1 {
>> +		compatible = "qcom,pm7325", "qcom,spmi-pmic";
>> +		reg = <0x1 SPMI_USID>;
>> +		#address-cells = <1>;
>> +		#size-cells = <0>;
>> +
>> +		pm7325_tz: temp-alarm@a00 {
> 
> The _tz suffix suggests this is a thermal zone, which isn't the case.
> Call it 'pm7325_temp_alarm' or similar.
> 

Okay.

>> +			compatible = "qcom,spmi-temp-alarm";
>> +			reg = <0xa00>;
>> +			interrupts = <0x1 0xa 0x0 IRQ_TYPE_EDGE_BOTH>;
>> +			#thermal-sensor-cells = <0>;
>> +		};
>> +
>> +		pm7325_gpios: gpios@...0 {
>> +			compatible = "qcom,pm7325-gpio", "qcom,spmi-gpio";
>> +			reg = <0x8800>;
>> +			gpio-controller;
>> +			gpio-ranges = <&pm7325_gpios 0 0 10>;
>> +			#gpio-cells = <2>;
>> +			interrupt-controller;
>> +			#interrupt-cells = <2>;
>> +		};
>> +	};
>> +};
>> +
>> +&thermal_zones {
>> +	pm7325_temp_alarm: pm7325_tz {
> 
> The temperature corresponds to the PM7325 on-die temperature, the temp 
> alarm
> is a feature to monitor it. Also many QCA SoCs name the thermal zones
> <whatever>-thermal, so it seems good to follow this convention. My 
> suggestion
> is:
> 	pm7325_thermal: pm7325-thermal {
> 

Okay, will change it.

> 
>> +		polling-delay-passive = <100>;
>> +		polling-delay = <0>;
> 
> Are you sure that no polling delay is needed? How does the thermal 
> framework
> detect that the temperatures is >= the passive trip point and that it 
> should
> start polling at 'polling-delay-passive' rate?
> 

As the temp-alarm has interrupt support, whenever preconfigured 
threshold violates it notifies thermal framework, so I think the polling 
delay is not needed here.

>> +		thermal-governor = "step_wise";
> 
> This property is not supported upstream.
> 
> In any case, this thermal zone doesn't have cooling devices, what is
> any thermal governor supposed to do with this thermal zone?
> 
> I understand that the zone is generally useful to configure the
> over-temperature protection of the PMIC and to allow the kernel
> to shut down (or reboot) when a critical trip point is reached,
> but the specific governor is irrelevant as far as I understand.
> 

Yeah, this is not required here will remove it.

>> +		thermal-sensors = <&pm7325_tz>;
>> +
>> +		trips {
>> +			pm7325_trip0: trip0 {
>> +				temperature = <95000>;
>> +				hysteresis = <0>;
>> +				type = "passive";
>> +			};
>> +
>> +			pm7325_trip1: trip1 {
>> +				temperature = <115000>;
>> +				hysteresis = <0>;
>> +				type = "critical";
>> +			};
>> +
>> +			pm7325_trip2: trip2 {
>> +				temperature = <145000>;
>> +				hysteresis = <0>;
>> +				type = "critical";
>> +			};
> 
> Why are there two critical trip points? The system should shut down
> when the first trip point is reached, the second one is irrelevant.
> As far as I recall from implementing f1599f9e4cd6 ("thermal:
> qcom-spmi: Use PMIC thermal stage 2 for critical trip points")
> earlier PMIC versions have 3 stages for the over-temperature
> protection. When the stage 3 threshold (trip2) is hit the PMIC
> performs and automated shutdown. Unless this has changed for the
> PM7325 the second critical trip point should not be needed. The
> second critical trip point could even lead to a misconfiguration
> of the PMIC threshold, since the driver interprets the temperature
> of a critical trip point as the stage3 temperature.
> 

yes I agree, the system will shutdown when we hit the 1st critical, 2nd 
critical point is not needed. Probably this got carried from old change 
propagation, will remove it.

>> +		};
>> +	};
>> +};
>> diff --git a/arch/arm64/boot/dts/qcom/pm8350c.dtsi 
>> b/arch/arm64/boot/dts/qcom/pm8350c.dtsi
>> new file mode 100644
>> index 0000000..dffa79d
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/qcom/pm8350c.dtsi
>> @@ -0,0 +1,60 @@
>> +// SPDX-License-Identifier: BSD-3-Clause
>> +// Copyright (c) 2021, The Linux Foundation. All rights reserved.
>> +
>> +#include <dt-bindings/interrupt-controller/irq.h>
>> +#include <dt-bindings/spmi/spmi.h>
>> +
>> +&spmi_bus {
>> +	pm8350: pmic@2 {
> 
> pm8350c ?
> 

Ok.

>> +		compatible = "qcom,pm8350c", "qcom,spmi-pmic";
>> +		reg = <0x2 SPMI_USID>;
>> +		#address-cells = <1>;
>> +		#size-cells = <0>;
>> +
>> +		pm8350c_tz: temp-alarm@a00 {
> 
> same as for pm7325
> 

Ok.

>> +			compatible = "qcom,spmi-temp-alarm";
>> +			reg = <0xa00>;
>> +			interrupts = <0x2 0xa 0x0 IRQ_TYPE_EDGE_BOTH>;
>> +			#thermal-sensor-cells = <0>;
>> +		};
>> +
>> +		pm8350c_gpios: gpios@...0 {
>> +			compatible = "qcom,pm8350c-gpio", "qcom,spmi-gpio";
>> +			reg = <0x8800>;
>> +			gpio-controller;
>> +			gpio-ranges = <&pm8350c_gpios 0 0 9>;
>> +			#gpio-cells = <2>;
>> +			interrupt-controller;
>> +			#interrupt-cells = <2>;
>> +		};
>> +	};
>> +};
>> +
>> +&thermal_zones {
>> +	pm8350c_temp_alarm: pm8350c_tz {
>> +		polling-delay-passive = <100>;
>> +		polling-delay = <0>;
>> +		thermal-governor = "step_wise";
>> +		thermal-sensors = <&pm8350c_tz>;
> 
> 
> same as for pm7325
> 
>> +
>> +		trips {
>> +			pm8350c_trip0: trip0 {
>> +				temperature = <95000>;
>> +				hysteresis = <0>;
>> +				type = "passive";
>> +			};
>> +
>> +			pm8350c_trip1: trip1 {
>> +				temperature = <115000>;
>> +				hysteresis = <0>;
>> +				type = "critical";
>> +			};
>> +
>> +			pm8350c_trip2: trip2 {
>> +				temperature = <145000>;
>> +				hysteresis = <0>;
>> +				type = "critical";
>> +			};
> 
> same as for pm7325
> 
>> +		};
>> +	};
>> +};
>> diff --git a/arch/arm64/boot/dts/qcom/pmk8350.dtsi 
>> b/arch/arm64/boot/dts/qcom/pmk8350.dtsi
>> new file mode 100644
>> index 0000000..9749484
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/qcom/pmk8350.dtsi
>> @@ -0,0 +1,104 @@
>> +// SPDX-License-Identifier: BSD-3-Clause
>> +// Copyright (c) 2021, The Linux Foundation. All rights reserved.
>> +
>> +#include <dt-bindings/input/input.h>
>> +#include <dt-bindings/input/linux-event-codes.h>
>> +#include <dt-bindings/interrupt-controller/irq.h>
>> +#include <dt-bindings/spmi/spmi.h>
>> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
>> +#include <dt-bindings/iio/qcom,spmi-adc7-pmk8350.h>
>> +#include <dt-bindings/iio/qcom,spmi-adc7-pmr735a.h>
>> +#include <dt-bindings/iio/qcom,spmi-adc7-pmr735b.h>
>> +
>> +&spmi_bus {
>> +	pmk8350: pmic@0 {
>> +		compatible = "qcom,pmk8350", "qcom,spmi-pmic";
>> +		reg = <0x0 SPMI_USID>;
>> +		#address-cells = <1>;
>> +		#size-cells = <0>;
>> +
>> +		pmk8350_pon: pon_hlos@...0 {
> 
> just pon@...0 for consistency? That's also the namingMK8350 Channel 
> nodes */

ok.

>> +			pmk8350_die_temp {
>> +				reg = <PMK8350_ADC7_DIE_TEMP>;
>> +				label = "pmk8350_die_temp";
>> +				qcom,pre-scaling = <1 1>;
>> +			};
>> +
>> +			/* PM8350 Channel nodes */
> 
> This comment and the ones below don't seem particularly useful,
> the naming of the nodes should provide enough context.
> 

Ok, will remove.

>> +			pm8350_die_temp {
>> +				reg = <PM8350_ADC7_DIE_TEMP>;
>> +				label = "pm8350_die_temp";
>> +				qcom,pre-scaling = <1 1>;
>> +			};
>> +
>> +			/* PMR735a Channel nodes */
>> +			pmr735a_die_temp {
>> +				reg = <PMR735A_ADC7_DIE_TEMP>;
>> +				label = "pmr735a_die_temp";
>> +				qcom,pre-scaling = <1 1>;
>> +			};
>> +
>> +			/* PMR735b Channel nodes */
>> +			pmr735b_die_temp {
>> +				reg = <PMR735B_ADC7_DIE_TEMP>;
>> +				label = "pmr735b_die_temp";
>> +				qcom,pre-scaling = <1 1>;
>> +			};
>> +		};
>> +
>> +		pmk8350_adc_tm: adc_tm@...0 {
>> +			compatible = "qcom,adc-tm7";
>> +			reg = <0x3400>;
>> +			interrupts = <0x0 0x34 0x0 IRQ_TYPE_EDGE_RISING>;
>> +			interrupt-names = "threshold";
>> +			#address-cells = <1>;
>> +			#size-cells = <0>;
>> +			#thermal-sensor-cells = <1>;
>> +			status = "disabled";
>> +		};
>> +
>> +		pmk8350_gpios: gpios@...0 {
>> +			compatible = "qcom,pmk8350-gpio", "qcom,spmi-gpio";
>> +			reg = <0xb000>;
>> +			gpio-controller;
>> +			gpio-ranges = <&pmk8350_gpios 0 0 4>;
>> +			#gpio-cells = <2>;
>> +			interrupt-controller;
>> +			#interrupt-cells = <2>;
>> +		};
>> +
>> +		pmk8350_rtc: rtc@...0 {
>> +			compatible = "qcom,pmk8350-rtc";
>> +			reg = <0x6100>, <0x6200>;
>> +			reg-names = "rtc", "alarm";
>> +			interrupts = <0x0 0x62 0x1 IRQ_TYPE_EDGE_RISING>;
>> +		};
>> +	};
>> +};
>> diff --git a/arch/arm64/boot/dts/qcom/pmr735a.dtsi 
>> b/arch/arm64/boot/dts/qcom/pmr735a.dtsi
>> new file mode 100644
>> index 0000000..e1d2356
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/qcom/pmr735a.dtsi
>> @@ -0,0 +1,60 @@
>> +// SPDX-License-Identifier: BSD-3-Clause
>> +// Copyright (c) 2021, The Linux Foundation. All rights reserved.
>> +
>> +#include <dt-bindings/interrupt-controller/irq.h>
>> +#include <dt-bindings/spmi/spmi.h>
>> +
>> +&spmi_bus {
>> +	pmr735a: pmic@4 {
>> +		compatible = "qcom,pmr735a", "qcom,spmi-pmic";
>> +		reg = <0x4 SPMI_USID>;
>> +		#address-cells = <1>;
>> +		#size-cells = <0>;
>> +
>> +		pmr735a_tz: temp-alarm@a00 {
> 
> same as for pm7325
> 

Ok.

>> +			compatible = "qcom,spmi-temp-alarm";
>> +			reg = <0xa00>;
>> +			interrupts = <0x4 0xa 0x0 IRQ_TYPE_EDGE_BOTH>;
>> +			#thermal-sensor-cells = <0>;
>> +		};
>> +
>> +		pmr735a_gpios: gpios@...0 {
>> +			compatible = "qcom,pmr735a-gpio", "qcom,spmi-gpio";
>> +			reg = <0x8800>;
>> +			gpio-controller;
>> +			gpio-ranges = <&pmr735a_gpios 0 0 4>;
>> +			#gpio-cells = <2>;
>> +			interrupt-controller;
>> +			#interrupt-cells = <2>;
>> +		};
>> +	};
>> +};
>> +
>> +&thermal_zones {
>> +	pmr735a_temp_alarm: pmr735a_tz {
> 
> same as for pm7325
> 
>> +		polling-delay-passive = <100>;
>> +		polling-delay = <0>;
>> +		thermal-governor = "step_wise";
>> +		thermal-sensors = <&pmr735a_tz>;
> 
> same as for pm7325
> 
>> +
>> +		trips {
>> +			pmr735a_trip0: trip0 {
>> +				temperature = <95000>;
>> +				hysteresis = <0>;
>> +				type = "passive";
>> +			};
>> +
>> +			pmr735a_trip1: trip1 {
>> +				temperature = <115000>;
>> +				hysteresis = <0>;
>> +				type = "critical";
>> +			};
>> +
>> +			pmr735a_trip2: trip2 {
>> +				temperature = <145000>;
>> +				hysteresis = <0>;
>> +				type = "critical";
>> +			};
> 
> same as for pm7325
> 
>> +		};
>> +	};
>> +};
>> diff --git a/arch/arm64/boot/dts/qcom/sc7280.dtsi 
>> b/arch/arm64/boot/dts/qcom/sc7280.dtsi
>> index 8af6d77..25402d4 100644
>> --- a/arch/arm64/boot/dts/qcom/sc7280.dtsi
>> +++ b/arch/arm64/boot/dts/qcom/sc7280.dtsi
>> @@ -606,4 +606,12 @@
>>  			     <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
>>  			     <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
>>  	};
>> +
>> +	thermal_zones: thermal-zones {
>> +	};
>>  };
>> +
>> +#include "pm7325.dtsi"
>> +#include "pm8350c.dtsi"
>> +#include "pmk8350.dtsi"
>> +#include "pmr735a.dtsi"

Thanks,
Satya Priya

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ