Commit a0620156b05f2e1b77801e8bca724d0ed650974d
Committed by
Paul Mackerras
1 parent
a7faa8dc95
Exists in
master
and in
4 other branches
[POWERPC] PS3: Fix reading pm interval in logical performance monitor
ps3_read_pm (pm_interval) should return an actual HW register value because the pm_interval register is a counter register. This removes the shadow pm_interval register. Signed-off-by: Takashi Yamamoto <TakashiA.Yamamoto@jp.sony.com> Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
Showing 1 changed file with 10 additions and 8 deletions Side-by-side Diff
drivers/ps3/ps3-lpm.c
... | ... | @@ -76,7 +76,6 @@ |
76 | 76 | * |
77 | 77 | * @pm_control: Shadow of the processor's pm_control register. |
78 | 78 | * @pm_start_stop: Shadow of the processor's pm_start_stop register. |
79 | - * @pm_interval: Shadow of the processor's pm_interval register. | |
80 | 79 | * @group_control: Shadow of the processor's group_control register. |
81 | 80 | * @debug_bus_control: Shadow of the processor's debug_bus_control register. |
82 | 81 | * |
... | ... | @@ -91,7 +90,6 @@ |
91 | 90 | struct ps3_lpm_shadow_regs { |
92 | 91 | u64 pm_control; |
93 | 92 | u64 pm_start_stop; |
94 | - u64 pm_interval; | |
95 | 93 | u64 group_control; |
96 | 94 | u64 debug_bus_control; |
97 | 95 | }; |
... | ... | @@ -408,7 +406,14 @@ |
408 | 406 | case pm_start_stop: |
409 | 407 | return lpm_priv->shadow.pm_start_stop; |
410 | 408 | case pm_interval: |
411 | - return lpm_priv->shadow.pm_interval; | |
409 | + result = lv1_set_lpm_interval(lpm_priv->lpm_id, 0, 0, &val); | |
410 | + if (result) { | |
411 | + val = 0; | |
412 | + dev_dbg(sbd_core(), "%s:%u: lv1 set_inteval failed: " | |
413 | + "reg %u, %s\n", __func__, __LINE__, reg, | |
414 | + ps3_result(result)); | |
415 | + } | |
416 | + return (u32)val; | |
412 | 417 | case group_control: |
413 | 418 | return lpm_priv->shadow.group_control; |
414 | 419 | case debug_bus_control: |
... | ... | @@ -475,10 +480,8 @@ |
475 | 480 | lpm_priv->shadow.pm_control = val; |
476 | 481 | break; |
477 | 482 | case pm_interval: |
478 | - if (val != lpm_priv->shadow.pm_interval) | |
479 | - result = lv1_set_lpm_interval(lpm_priv->lpm_id, val, | |
480 | - PS3_WRITE_PM_MASK, &dummy); | |
481 | - lpm_priv->shadow.pm_interval = val; | |
483 | + result = lv1_set_lpm_interval(lpm_priv->lpm_id, val, | |
484 | + PS3_WRITE_PM_MASK, &dummy); | |
482 | 485 | break; |
483 | 486 | case pm_start_stop: |
484 | 487 | if (val != lpm_priv->shadow.pm_start_stop) |
... | ... | @@ -1140,7 +1143,6 @@ |
1140 | 1143 | |
1141 | 1144 | lpm_priv->shadow.pm_control = PS3_LPM_SHADOW_REG_INIT; |
1142 | 1145 | lpm_priv->shadow.pm_start_stop = PS3_LPM_SHADOW_REG_INIT; |
1143 | - lpm_priv->shadow.pm_interval = PS3_LPM_SHADOW_REG_INIT; | |
1144 | 1146 | lpm_priv->shadow.group_control = PS3_LPM_SHADOW_REG_INIT; |
1145 | 1147 | lpm_priv->shadow.debug_bus_control = PS3_LPM_SHADOW_REG_INIT; |
1146 | 1148 |