Skip to content

Commit

Permalink
powerpc/powernv: Avoid explicit endian conversions while parsing devi…
Browse files Browse the repository at this point in the history
…ce tree

We currently read the information about idle states from the device
tree, so as to find out the CPU idle states supported by the platform.

Use the of_property_read/count_xxx() APIs, which handle endian
conversions for us, and mean we don't need any endian annotations in the
code.

Signed-off-by: Preeti U Murthy <[email protected]>
Signed-off-by: Michael Ellerman <[email protected]>
  • Loading branch information
Preeti U Murthy authored and mpe committed Mar 26, 2015
1 parent 1318470 commit 605f302
Showing 1 changed file with 20 additions and 15 deletions.
35 changes: 20 additions & 15 deletions arch/powerpc/platforms/powernv/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -409,37 +409,39 @@ static int __init pnv_init_idle_states(void)
{
struct device_node *power_mgt;
int dt_idle_states;
const __be32 *idle_state_flags;
u32 len_flags, flags;
u32 *flags;
int i;

supported_cpuidle_states = 0;

if (cpuidle_disable != IDLE_NO_OVERRIDE)
return 0;
goto out;

if (!firmware_has_feature(FW_FEATURE_OPALv3))
return 0;
goto out;

power_mgt = of_find_node_by_path("/ibm,opal/power-mgt");
if (!power_mgt) {
pr_warn("opal: PowerMgmt Node not found\n");
return 0;
goto out;
}
dt_idle_states = of_property_count_u32_elems(power_mgt,
"ibm,cpu-idle-state-flags");
if (dt_idle_states < 0) {
pr_warn("cpuidle-powernv: no idle states found in the DT\n");
goto out;
}

idle_state_flags = of_get_property(power_mgt,
"ibm,cpu-idle-state-flags", &len_flags);
if (!idle_state_flags) {
pr_warn("DT-PowerMgmt: missing ibm,cpu-idle-state-flags\n");
return 0;
flags = kzalloc(sizeof(*flags) * dt_idle_states, GFP_KERNEL);
if (of_property_read_u32_array(power_mgt,
"ibm,cpu-idle-state-flags", flags, dt_idle_states)) {
pr_warn("cpuidle-powernv: missing ibm,cpu-idle-state-flags in DT\n");
goto out_free;
}

dt_idle_states = len_flags / sizeof(u32);
for (i = 0; i < dt_idle_states; i++)
supported_cpuidle_states |= flags[i];

for (i = 0; i < dt_idle_states; i++) {
flags = be32_to_cpu(idle_state_flags[i]);
supported_cpuidle_states |= flags;
}
if (!(supported_cpuidle_states & OPAL_PM_SLEEP_ENABLED_ER1)) {
patch_instruction(
(unsigned int *)pnv_fastsleep_workaround_at_entry,
Expand All @@ -449,6 +451,9 @@ static int __init pnv_init_idle_states(void)
PPC_INST_NOP);
}
pnv_alloc_idle_core_states();
out_free:
kfree(flags);
out:
return 0;
}

Expand Down

0 comments on commit 605f302

Please sign in to comment.