msm: thermal: Make boot-up mitigation optional

For the targets with the LMH DCVSh mitigation, HLOS boot-up
mitigation is not required. So make the devicetree properties
related to boot-up mitigation as optional.

CRs-Fixed: 1010111
Change-Id: I7f254f579182effbc1f1a3d49c3c917d3c7af162
Signed-off-by: Ram Chandrasekar <rkumbako@codeaurora.org>
This commit is contained in:
Ram Chandrasekar 2016-04-29 09:51:33 -06:00 committed by Jeevan Shriram
parent a492546c1c
commit 77bcd51608
2 changed files with 50 additions and 49 deletions

View file

@ -18,13 +18,13 @@ Required properties
- 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
- reg: Physical address for uio mapping
- 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.
- 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

View file

@ -166,6 +166,7 @@ static bool psm_enabled;
static bool psm_nodes_called;
static bool psm_probed;
static bool freq_mitigation_enabled;
static bool boot_freq_mitig_enabled;
static bool ocr_enabled;
static bool ocr_nodes_called;
static bool ocr_probed;
@ -3520,6 +3521,8 @@ static void do_freq_control(int temp)
uint32_t cpu = 0;
uint32_t max_freq = cpus[cpu].limited_max_freq;
if (!boot_freq_mitig_enabled)
return;
if (core_ptr)
return do_cluster_freq_ctrl(temp);
if (!freq_table_get)
@ -5318,8 +5321,10 @@ int msm_thermal_init(struct msm_thermal_data *pdata)
if (ret)
pr_err("cannot register cpufreq notifier. err:%d\n", ret);
register_reboot_notifier(&msm_thermal_reboot_notifier);
pm_notifier(msm_thermal_suspend_callback, 0);
if (!lmh_dcvs_available) {
register_reboot_notifier(&msm_thermal_reboot_notifier);
pm_notifier(msm_thermal_suspend_callback, 0);
}
INIT_DELAYED_WORK(&retry_hotplug_work, retry_hotplug);
if (num_possible_cpus() > 1) {
@ -6201,6 +6206,18 @@ static int fetch_cpu_mitigaiton_info(struct msm_thermal_data *data,
int _cpu = 0, err = 0;
struct device_node *cpu_node = NULL, *limits = NULL, *tsens = NULL;
char *key = NULL;
struct device_node *node = pdev->dev.of_node;
key = "qcom,sensor-id";
err = of_property_read_u32(node, key, &data->sensor_id);
if (err)
goto fetch_mitig_exit;
key = "qcom,poll-ms";
err = of_property_read_u32(node, key, &data->poll_ms);
if (err)
goto fetch_mitig_exit;
for_each_possible_cpu(_cpu) {
const char *sensor_name = NULL;
@ -6542,6 +6559,12 @@ static int probe_cc(struct device_node *node, struct msm_thermal_data *data,
hotplug_enabled = 1;
}
key = "qcom,online-hotplug-core";
if (of_property_read_bool(node, key))
online_core = true;
else
online_core = false;
key = "qcom,core-limit-temp";
ret = of_property_read_u32(node, key, &data->core_limit_temp_degC);
if (ret)
@ -6810,6 +6833,22 @@ static int probe_freq_mitigation(struct device_node *node,
char *key = NULL;
int ret = 0;
key = "qcom,limit-temp";
ret = of_property_read_u32(node, key, &data->limit_temp_degC);
if (ret)
goto PROBE_FREQ_EXIT;
key = "qcom,temp-hysteresis";
ret = of_property_read_u32(node, key, &data->temp_hysteresis_degC);
if (ret)
goto PROBE_FREQ_EXIT;
key = "qcom,freq-step";
ret = of_property_read_u32(node, key, &data->bootup_freq_step);
if (ret)
goto PROBE_FREQ_EXIT;
boot_freq_mitig_enabled = true;
key = "qcom,freq-mitigation-temp";
ret = of_property_read_u32(node, key, &data->freq_mitig_temp_degc);
if (ret)
@ -7202,7 +7241,6 @@ static int probe_deferrable_properties(struct device_node *node,
static int msm_thermal_dev_probe(struct platform_device *pdev)
{
int ret = 0;
char *key = NULL;
struct device_node *node = pdev->dev.of_node;
struct msm_thermal_data data;
@ -7215,50 +7253,18 @@ static int msm_thermal_dev_probe(struct platform_device *pdev)
ret = msm_thermal_pre_init(&pdev->dev);
if (ret) {
pr_err("thermal pre init failed. err:%d\n", ret);
goto fail;
goto probe_exit;
}
key = "qcom,sensor-id";
ret = of_property_read_u32(node, key, &data.sensor_id);
if (ret)
goto fail;
key = "qcom,poll-ms";
ret = of_property_read_u32(node, key, &data.poll_ms);
if (ret)
goto fail;
key = "qcom,limit-temp";
ret = of_property_read_u32(node, key, &data.limit_temp_degC);
if (ret)
goto fail;
key = "qcom,temp-hysteresis";
ret = of_property_read_u32(node, key, &data.temp_hysteresis_degC);
if (ret)
goto fail;
key = "qcom,freq-step";
ret = of_property_read_u32(node, key, &data.bootup_freq_step);
if (ret)
goto fail;
key = "qcom,online-hotplug-core";
if (of_property_read_bool(node, key))
online_core = true;
else
online_core = false;
ret = probe_deferrable_properties(node, &data, pdev);
if (ret)
goto probe_exit;
probe_sensor_info(node, &data, pdev);
ret = probe_cc(node, &data, pdev);
ret = probe_freq_mitigation(node, &data, pdev);
ret = probe_cx_phase_ctrl(node, &data, pdev);
ret = probe_gfx_phase_ctrl(node, &data, pdev);
ret = probe_therm_reset(node, &data, pdev);
probe_cc(node, &data, pdev);
probe_freq_mitigation(node, &data, pdev);
probe_cx_phase_ctrl(node, &data, pdev);
probe_gfx_phase_ctrl(node, &data, pdev);
probe_therm_reset(node, &data, pdev);
update_cpu_topology(&pdev->dev);
ret = fetch_cpu_mitigaiton_info(&data, pdev);
if (ret) {
@ -7272,11 +7278,6 @@ static int msm_thermal_dev_probe(struct platform_device *pdev)
goto probe_exit;
msm_thermal_probed = true;
return ret;
fail:
if (ret)
pr_err("Failed reading node=%s, key=%s. err:%d\n",
node->full_name, key, ret);
probe_exit:
return ret;
}