123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- MSM thermal driver (MSM_THERMAL)
- MSM_THERMAL is a kernel platform driver which regulates thermal conditions
- on the device during kernel boot. The goal of MSM_THERMAL is to prevent the
- temperature of the system from exceeding a thermal limit at which it cannot
- operate. Examples are CPU junction thermal limit, or POP memory thermal limit.
- The MSM_THERMAL driver polls the TSENS sensor hardware during boot, and
- reduces the maximum CPU frequency allowed in steps, to limit power/thermal
- output when a threshold temperature is crossed. It restores the maximum CPU
- frequency allowed in the same stepwise fashion when the threshold temperature
- (with hysteresis gap) is cleared.
- The devicetree representation of the MSM_THERMAL block should be:
- Required properties
- - compatible: "qcom,msm-thermal"
- - qcom,sensor-id: The id of the TSENS sensor polled for temperature.
- Typically the sensor closest to CPU0.
- - qcom,poll-ms: Sampling interval to read sensor, in ms.
- - qcom,limit-temp: Threshold temperature to start stepping CPU down, in degC.
- - qcom,temp-hysteresis: Degrees C below threshold temperature to step CPU up.
- - qcom,freq-step: Number of frequency steps to take on each CPU mitigation.
- Optional properties
- - qcom,freq-control-mask: The cpu mask that will be used to determine if a
- core can be used for freq control.
- - qcom,core-limit-temp: Threshold temperature to start shutting down cores
- in degC
- - qcom,core-temp-hysteresis: Degrees C below which the cores will be brought
- online in sequence.
- - qcom,core-control-mask: The cpu mask that will be used to determine if a
- core can be controlled or not. A mask of 0 indicates
- the feature is disabled.
- - qcom,hotplug-temp: Threshold temperature to start shutting down cores
- in degC. This will be used when polling based
- core control is disabled. The difference between hotplug-temp
- and core-limit-temp is that core-limit-temp is used during
- early boot prior to thermal_sys being available for hotplug.
- - qcom,hotplug-temp-hysteresis: Degrees C below which thermal will not force the
- cores to be offlined. Cores can be brought online if needed.
- - qcpm,cpu-sensors: List of type names in thermal zone device struct which maps
- to cpu0, cpu1, cpu2, cpu3 in sequence depending on how many
- cpus there are.
- - qcom,freq-mitigation-temp: Threshold temperature to mitigate
- the CPU max frequency in degC. This will be
- used when polling based frequency control is disabled.
- The difference between freq-mitigation-temp
- and limit-temp is that limit-temp is used during
- early boot prior to thermal_sys being available for registering
- temperature thresholds. Also, this emergency frequency
- mitigation is a single step frequency mitigation to a predefined value
- as opposed to the step by step frequency mitigation during boot-up.
- - qcom,freq-mitigation-temp-hysteresis: Degrees C below which thermal will not mitigate the
- cpu max frequency.
- - qcom,freq-mitigation-value: The frequency value (in kHz) to which the thermal
- should mitigate the CPU, when the freq-mitigation-temp
- threshold is reached.
- - qcom,freq-mitigation-control-mask: The frequency mitigation bitmask that will be
- used to determine if KTM should do emergency frequency
- mitigation for a core or not. A mask of 0x00 indicates the
- mitigation is disabled for all the cores and a mask of 0x05
- indicates this mitigation is enabled for cpu-0 and cpu-2.
- Note: For KTM's frequency mitigation to work, the data for all the
- above four properties (qcom,freq-mitigation-temp; qcom,
- freq-mitigation-temp-hysteresis; qcom,freq-mitigation-value and
- qcom,freq-mitigation-control-mask) should be populated.
- - qcom,vdd-restriction-temp: When temperature is below this threshold, will
- enable vdd restriction which will set higher voltage on
- key voltage rails, in degC.
- - qcom,vdd-restriction-temp-hysteresis: When temperature is above this threshold
- will disable vdd restriction on key rails, in degC.
- - qcom,pmic-sw-mode-temp: Threshold temperature to disable auto mode on the
- rail, in degC. If this property exists,
- qcom,pmic-sw-mode-temp-hysteresis and
- qcom,pmic-sw-mode-regs need to exist, otherwise return error.
- - qcom,pmic-sw-mode-temp-hysteresis: Degree below threshold temperature to
- enable auto mode on the rail, in degC. If this property exists,
- qcom,pmic-sw-mode-temp and qcom,pmic-sw-mode-regs need to
- exist, otherwise return error.
- - qcom,pmic-sw-mode-regs: Array of the regulator names that will want to
- disable/enable automode based on the threshold. If this
- property exists, qcom,pmic-sw-mode-temp and
- qcom,pmic-sw-mode-temp-hysteresis need to exist, otherwise
- return error. Also, if this property is defined, will have to
- define <consumer_supply_name>-supply = <&phandle_of_regulator>
- - <consumer_supply_name>-supply = <&phandle_of_regulator>: consumer_supply_name
- is the name that's defined in thermal driver.
- phandle_of_regulator is defined by reuglator device tree.
- - qcom,default-temp: Default cpu temperature limit for SoC. It is an optional
- property. Not defining this property requires a full truth
- table for qcom,efuse temperature map and valid efuse info for
- qcom,efuse-data otherwise feature will be disabled.
- - qcom,efuse-data: Efuse data for getting device parts info for cpu temperature
- limit recommendation for SoC. It expects below data in order to
- read target parts, efuse address, efuse size, row number to be
- read, starting bit number of the row for identifying device parts
- and number of bits to read from start bit as bit mask.
- - qcom,efuse-temperature-map: Truth table of efuse value temperature value pair for
- different parts. if qcom,default temp is defined, then it can
- specify only pairs which deviate from default temperature.
- - qcom,therm-reset-temp: Degree above which the KTM will initiate a secure watchdog reset.
- When this property is defined, KTM will monitor all the tsens from
- boot time and will initiate a secure watchdog reset if any of the
- tsens temperature reaches this threshold. This reset helps in
- generating more informative crash dumps opposed to the crash dump
- generated by the hardware reset.
- Optional child nodes
- - qti,pmic-opt-curr-temp: Threshold temperature for requesting optimum current (request
- dual phase) for rails with PMIC, in degC. If this property exists,
- then the properties, qti,pmic-opt-curr-temp-hysteresis and
- qti,pmic-opt-curr-regs should also be defined to enable this
- feature.
- - qti,pmic-opt-curr-temp-hysteresis: Degree below the threshold to disable the optimum
- current request for a rail, in degC. If this property exists,
- then the properties, qti,pmic-opt-curr-temp and
- qti,pmic-opt-curr-regs should also be defined to enable
- this feature.
- - qti,pmic-opt-curr-regs: Name of the rails for which the optimum current should be
- requested. If this property exists, then the properties,
- qti,pmic-opt-curr-temp and qti,pmic-opt-curr-temp-hysteresis
- should also be defined to enable this feature.
- - qcom,<vdd restriction child node name>: Define the name of the child node.
- If this property exisits, qcom,vdd-rstr-reg, qcom,levels
- need to exist. qcom,min-level is optional if qcom,freq-req
- exists, otherwise it's required.
- - qcom,vdd-rstr-reg: Name of the rail
- - qcom,levels: Array of the level values. Unit is corner voltage for voltage request
- or kHz for frequency request.
- - qcom,min-level: Request this level as minimum level when disabling voltage
- restriction. Unit is corner voltage for voltage request.
- This will not be required if qcom,freq-req exists.
- - qcom,freq-req: Flag to determine if we should restrict frequency on this rail
- instead of voltage.
- Example:
- qcom,msm-thermal {
- compatible = "qcom,msm-thermal";
- qcom,sensor-id = <0>;
- qcom,poll-ms = <250>;
- qcom,limit-temp = <60>;
- qcom,temp-hysteresis = <10>;
- qcom,freq-step = <2>;
- qcom,freq-control-mask = <0xf>
- qcom,therm-reset-temp = <115>;
- qcom,core-limit-temp = <90>;
- qcom,core-temp-hysteresis = <10>;
- qcom,core-control-mask = <7>;
- qcom,hotplug-temp = <110>;
- qcom,hotplug-temp-hysteresis = <20>;
- qcom,cpu-sensors = "tsens_tz_sensor5", "tsens_tz_sensor6",
- "tsens_tz_sensor7", "tsens_tz_sensor8";
- qcom,freq-mitigation-temp = <110>;
- qcom,freq-mitigation-temp-hysteresis = <20>;
- qcom,freq-mitigation-value = <960000>;
- qcom,freq-mitigation-control-mask = <0x01>;
- qcom,pmic-sw-mode-temp = <90>;
- qcom,pmic-sw-mode-temp-hysteresis = <80>;
- qcom,pmic-sw-mode-regs = "vdd-dig";
- qcom,vdd-restriction-temp = <5>;
- qcom,vdd-restriction-temp-hysteresis = <10>;
- qti,pmic-opt-curr-temp = <85>;
- qti,pmic-opt-curr-temp-hysteresis = <10>;
- qti,pmic-opt-curr-regs = "vdd-dig";
- vdd-dig-supply=<&pm8841_s2_floor_corner>
- qcom,default-temp = <80>;
- qcom,efuse-data = <0xfc4b8000 0x1000 23 30 0x3>;
- qcom,efuse-temperature-map = <0x0 80>, <0x1 70>, <0x2 80>, <0x3 80>;
- qcom,vdd-dig-rstr{
- qcom,vdd-rstr-reg = "vdd-dig";
- qcom,levels = <5 7 7>; /* Nominal, Super Turbo, Super Turbo */
- qcom,min-level = <1>; /* No Request */
- };
- qcom,vdd-apps-rstr{
- qcom,vdd-rstr-reg = "vdd-apps";
- qcom,levels = <1881600 1958400 2265600>;
- qcom,freq-req;
- };
- };
|