Commit a0620156b05f2e1b77801e8bca724d0ed650974d

Authored by Takashi Yamamoto
Committed by Paul Mackerras
1 parent a7faa8dc95

[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