soc: qcom: core_hang: Separate sysfs entry for silver and gold cluster

Silver and gold cluster use different PMU_EVENT and may need to have
different threshold values.

This patch creates different sysfs entries for silver and gold cluster.

CRs-Fixed: 1004392
Change-Id: I88cdf5110cadb44a81c0c700d5188bf639bb2129
Signed-off-by: Runmin Wang <runminw@codeaurora.org>
This commit is contained in:
Runmin Wang 2016-05-03 13:13:26 -07:00
parent 1fac7f53bd
commit 90c2d5300e
3 changed files with 33 additions and 8 deletions

View file

@ -25,6 +25,7 @@ The device tree parameters for the core hang detection are:
Required properties:
- compatible : "qcom,core-hang-detect"
- label: unique name used to created sysfs entry
- qcom,threshold-arr :
Array of APCS_ALIAS*_CORE_HANG_THRESHOLD register address
for each core.

View file

@ -1135,13 +1135,21 @@
qcom,firmware-name = "ipa_fws";
};
qcom,chd {
qcom,chd_silver {
compatible = "qcom,core-hang-detect";
label = "silver";
qcom,threshold-arr = <0x179880b0 0x179980b0
0x179a80b0 0x179b80b0 0x178880b0 0x178980b0
0x178a80b0 0x178b80b0>;
0x179a80b0 0x179b80b0>;
qcom,config-arr = <0x179880b8 0x179980b8
0x179a80b8 0x179b80b8 0x178880b8 0x178980b8
0x179a80b8 0x179b80b8>;
};
qcom,chd_gold {
compatible = "qcom,core-hang-detect";
label = "gold";
qcom,threshold-arr = <0x178880b0 0x178980b0
0x178a80b0 0x178b80b0>;
qcom,config-arr = <0x178880b8 0x178980b8
0x178a80b8 0x178b80b8>;
};

View file

@ -245,7 +245,9 @@ static int msm_hang_detect_probe(struct platform_device *pdev)
struct device_node *node = pdev->dev.of_node;
struct hang_detect *hang_det = NULL;
int cpu, ret, cpu_count = 0;
u32 treg[NR_CPUS], creg[NR_CPUS];
const char *name;
u32 treg[NR_CPUS] = {0}, creg[NR_CPUS] = {0};
u32 num_reg = 0;
if (!pdev->dev.of_node || !enable)
return -ENODEV;
@ -258,15 +260,28 @@ static int msm_hang_detect_probe(struct platform_device *pdev)
return -ENOMEM;
}
name = of_get_property(node, "label", NULL);
if (!name) {
pr_err("Can't get label property\n");
return -EINVAL;
}
num_reg = of_property_count_u32_elems(node,
"qcom,threshold-arr");
if (num_reg < 0) {
pr_err("Can't get threshold-arr property\n");
return -EINVAL;
}
ret = of_property_read_u32_array(node, "qcom,threshold-arr",
treg, num_possible_cpus());
treg, num_reg);
if (ret) {
pr_err("Can't get threshold-arr property\n");
return -EINVAL;
}
ret = of_property_read_u32_array(node, "qcom,config-arr",
creg, num_possible_cpus());
creg, num_reg);
if (ret) {
pr_err("Can't get config-arr property\n");
return -EINVAL;
@ -289,7 +304,8 @@ static int msm_hang_detect_probe(struct platform_device *pdev)
}
ret = kobject_init_and_add(&hang_det->kobj, &core_ktype,
&cpu_subsys.dev_root->kobj, "%s", "hang_detect");
&cpu_subsys.dev_root->kobj, "%s_%s",
"hang_detect", name);
if (ret) {
pr_err("%s:Error in creation kobject_add\n", __func__);
goto out_put_kobj;