On Power9, CIABR is lost after idle. This means that instruction
breakpoints set by xmon which use CIABR do not work. Fix this by
restoring CIABR after idle.

Signed-off-by: Jordan Niethe <jniet...@gmail.com>
---
 arch/powerpc/platforms/powernv/idle.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/powerpc/platforms/powernv/idle.c 
b/arch/powerpc/platforms/powernv/idle.c
index 1ed7c5286487..e6f461812856 100644
--- a/arch/powerpc/platforms/powernv/idle.c
+++ b/arch/powerpc/platforms/powernv/idle.c
@@ -589,6 +589,7 @@ struct p9_sprs {
        u64 spurr;
        u64 dscr;
        u64 wort;
+       u64 ciabr;
 
        u64 mmcra;
        u32 mmcr0;
@@ -668,6 +669,7 @@ static unsigned long power9_idle_stop(unsigned long psscr, 
bool mmu_on)
                sprs.spurr      = mfspr(SPRN_SPURR);
                sprs.dscr       = mfspr(SPRN_DSCR);
                sprs.wort       = mfspr(SPRN_WORT);
+               sprs.ciabr      = mfspr(SPRN_CIABR);
 
                sprs.mmcra      = mfspr(SPRN_MMCRA);
                sprs.mmcr0      = mfspr(SPRN_MMCR0);
@@ -785,6 +787,7 @@ static unsigned long power9_idle_stop(unsigned long psscr, 
bool mmu_on)
        mtspr(SPRN_SPURR,       sprs.spurr);
        mtspr(SPRN_DSCR,        sprs.dscr);
        mtspr(SPRN_WORT,        sprs.wort);
+       mtspr(SPRN_CIABR,       sprs.ciabr);
 
        mtspr(SPRN_MMCRA,       sprs.mmcra);
        mtspr(SPRN_MMCR0,       sprs.mmcr0);
-- 
2.17.1

Reply via email to