|
@@ -162,10 +162,20 @@ void __init opal_sys_param_init(void)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
+ /* Some systems do not use sysparams; this is not an error */
|
|
|
+ sysparam = of_find_node_by_path("/ibm,opal/sysparams");
|
|
|
+ if (!sysparam)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ if (!of_device_is_compatible(sysparam, "ibm,opal-sysparams")) {
|
|
|
+ pr_err("SYSPARAM: Opal sysparam node not compatible\n");
|
|
|
+ goto out_node_put;
|
|
|
+ }
|
|
|
+
|
|
|
sysparam_kobj = kobject_create_and_add("sysparams", opal_kobj);
|
|
|
if (!sysparam_kobj) {
|
|
|
pr_err("SYSPARAM: Failed to create sysparam kobject\n");
|
|
|
- goto out;
|
|
|
+ goto out_node_put;
|
|
|
}
|
|
|
|
|
|
/* Allocate big enough buffer for any get/set transactions */
|
|
@@ -176,30 +186,19 @@ void __init opal_sys_param_init(void)
|
|
|
goto out_kobj_put;
|
|
|
}
|
|
|
|
|
|
- sysparam = of_find_node_by_path("/ibm,opal/sysparams");
|
|
|
- if (!sysparam) {
|
|
|
- pr_err("SYSPARAM: Opal sysparam node not found\n");
|
|
|
- goto out_param_buf;
|
|
|
- }
|
|
|
-
|
|
|
- if (!of_device_is_compatible(sysparam, "ibm,opal-sysparams")) {
|
|
|
- pr_err("SYSPARAM: Opal sysparam node not compatible\n");
|
|
|
- goto out_node_put;
|
|
|
- }
|
|
|
-
|
|
|
/* Number of parameters exposed through DT */
|
|
|
count = of_property_count_strings(sysparam, "param-name");
|
|
|
if (count < 0) {
|
|
|
pr_err("SYSPARAM: No string found of property param-name in "
|
|
|
"the node %s\n", sysparam->name);
|
|
|
- goto out_node_put;
|
|
|
+ goto out_param_buf;
|
|
|
}
|
|
|
|
|
|
id = kzalloc(sizeof(*id) * count, GFP_KERNEL);
|
|
|
if (!id) {
|
|
|
pr_err("SYSPARAM: Failed to allocate memory to read parameter "
|
|
|
"id\n");
|
|
|
- goto out_node_put;
|
|
|
+ goto out_param_buf;
|
|
|
}
|
|
|
|
|
|
size = kzalloc(sizeof(*size) * count, GFP_KERNEL);
|
|
@@ -293,12 +292,12 @@ out_free_size:
|
|
|
kfree(size);
|
|
|
out_free_id:
|
|
|
kfree(id);
|
|
|
-out_node_put:
|
|
|
- of_node_put(sysparam);
|
|
|
out_param_buf:
|
|
|
kfree(param_data_buf);
|
|
|
out_kobj_put:
|
|
|
kobject_put(sysparam_kobj);
|
|
|
+out_node_put:
|
|
|
+ of_node_put(sysparam);
|
|
|
out:
|
|
|
return;
|
|
|
}
|