powerpc/64s: Remove idle workaround code from restore_cpu_cpufeatures
authorNicholas Piggin <npiggin@gmail.com>
Thu, 11 Jul 2019 02:24:04 +0000 (12:24 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 10 Dec 2020 12:13:26 +0000 (23:13 +1100)
Idle code no longer uses the .cpu_restore CPU operation to restore
SPRs, so this workaround is no longer required.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20190711022404.18132-2-npiggin@gmail.com
arch/powerpc/kernel/dt_cpu_ftrs.c

index bd8faa2..b5478b7 100644 (file)
@@ -69,7 +69,6 @@ static int hv_mode;
 
 static struct {
        u64     lpcr;
-       u64     lpcr_clear;
        u64     hfscr;
        u64     fscr;
        u64     pcr;
@@ -79,24 +78,7 @@ static void (*init_pmu_registers)(void);
 
 static void __restore_cpu_cpufeatures(void)
 {
-       u64 lpcr;
-
-       /*
-        * LPCR is restored by the power on engine already. It can be changed
-        * after early init e.g., by radix enable, and we have no unified API
-        * for saving and restoring such SPRs.
-        *
-        * This ->restore hook should really be removed from idle and register
-        * restore moved directly into the idle restore code, because this code
-        * doesn't know how idle is implemented or what it needs restored here.
-        *
-        * The best we can do to accommodate secondary boot and idle restore
-        * for now is "or" LPCR with existing.
-        */
-       lpcr = mfspr(SPRN_LPCR);
-       lpcr |= system_registers.lpcr;
-       lpcr &= ~system_registers.lpcr_clear;
-       mtspr(SPRN_LPCR, lpcr);
+       mtspr(SPRN_LPCR, system_registers.lpcr);
        if (hv_mode) {
                mtspr(SPRN_LPID, 0);
                mtspr(SPRN_HFSCR, system_registers.hfscr);
@@ -310,7 +292,6 @@ static int __init feat_enable_mmu_hash_v3(struct dt_cpu_feature *f)
 {
        u64 lpcr;
 
-       system_registers.lpcr_clear |= (LPCR_ISL | LPCR_UPRT | LPCR_HR);
        lpcr = mfspr(SPRN_LPCR);
        lpcr &= ~(LPCR_ISL | LPCR_UPRT | LPCR_HR);
        mtspr(SPRN_LPCR, lpcr);