mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-12 08:45:39 -05:00
Merge tag 'powerpc-6.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull powerpc fixes from Madhavan Srinivasan: - Fix for kexec warning due to SMT disable or partial SMT enabled - Handle font bitmap pointer with reloc_offset to fix boot crash - Fix to enable cpuidle state for Power11 - Couple of misc fixes Thanks to Aboorva Devarajan, Aditya Bodkhe, Cedar Maxwell, Christian Zigotzky, Christophe Leroy, Christophe Leroy (CS GROUP), Finn Thain, Gopi Krishna Menon, Guenter Roeck, Jan Stancek, Joe Lawrence, Josh Poimboeuf, Justin M. Forbes, Madadi Vineeth Reddy, Naveen N Rao (AMD), Nysal Jan K.A., Sachin P Bappalige, Samir M, Sourabh Jain, Srikar Dronamraju, and Stan Johnson * tag 'powerpc-6.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: powerpc/32: Restore disabling of interrupts at interrupt/syscall exit powerpc/powernv: Enable cpuidle state detection for POWER11 powerpc: Add reloc_offset() to font bitmap pointer used for bootx_printf() powerpc/tools: drop `-o pipefail` in gcc check scripts selftests/powerpc/pmu/: Add check_extended_reg_test to .gitignore powerpc/kexec: Enable SMT before waking offline CPUs
This commit is contained in:
@@ -90,7 +90,7 @@ static inline void __hard_EE_RI_disable(void)
|
||||
if (IS_ENABLED(CONFIG_BOOKE))
|
||||
wrtee(0);
|
||||
else if (IS_ENABLED(CONFIG_PPC_8xx))
|
||||
wrtspr(SPRN_NRI);
|
||||
wrtspr_sync(SPRN_NRI);
|
||||
else if (IS_ENABLED(CONFIG_PPC_BOOK3S_64))
|
||||
__mtmsrd(0, 1);
|
||||
else
|
||||
|
||||
@@ -1400,6 +1400,7 @@ static inline void mtmsr_isync(unsigned long val)
|
||||
: "r" ((unsigned long)(v)) \
|
||||
: "memory")
|
||||
#define wrtspr(rn) asm volatile("mtspr " __stringify(rn) ",2" : : : "memory")
|
||||
#define wrtspr_sync(rn) asm volatile("mtspr " __stringify(rn) ",2; sync" : : : "memory")
|
||||
|
||||
static inline void wrtee(unsigned long val)
|
||||
{
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <asm/io.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/udbg.h>
|
||||
#include <asm/setup.h>
|
||||
|
||||
#define NO_SCROLL
|
||||
|
||||
@@ -463,7 +464,7 @@ static noinline void draw_byte(unsigned char c, long locX, long locY)
|
||||
{
|
||||
unsigned char *base = calc_base(locX << 3, locY << 4);
|
||||
unsigned int font_index = c * 16;
|
||||
const unsigned char *font = font_sun_8x16.data + font_index;
|
||||
const unsigned char *font = PTRRELOC(font_sun_8x16.data) + font_index;
|
||||
int rb = dispDeviceRowBytes;
|
||||
|
||||
rmci_maybe_on();
|
||||
|
||||
@@ -101,17 +101,6 @@ SYM_FUNC_END(__kuep_unlock)
|
||||
.endm
|
||||
#endif
|
||||
|
||||
.macro clr_ri trash
|
||||
#ifndef CONFIG_BOOKE
|
||||
#ifdef CONFIG_PPC_8xx
|
||||
mtspr SPRN_NRI, \trash
|
||||
#else
|
||||
li \trash, MSR_KERNEL & ~MSR_RI
|
||||
mtmsr \trash
|
||||
#endif
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.globl transfer_to_syscall
|
||||
transfer_to_syscall:
|
||||
stw r3, ORIG_GPR3(r1)
|
||||
@@ -160,7 +149,6 @@ ret_from_syscall:
|
||||
cmpwi r3,0
|
||||
REST_GPR(3, r1)
|
||||
syscall_exit_finish:
|
||||
clr_ri r4
|
||||
mtspr SPRN_SRR0,r7
|
||||
mtspr SPRN_SRR1,r8
|
||||
|
||||
@@ -237,7 +225,6 @@ fast_exception_return:
|
||||
/* Clear the exception marker on the stack to avoid confusing stacktrace */
|
||||
li r10, 0
|
||||
stw r10, 8(r11)
|
||||
clr_ri r10
|
||||
mtspr SPRN_SRR1,r9
|
||||
mtspr SPRN_SRR0,r12
|
||||
REST_GPR(9, r11)
|
||||
@@ -270,7 +257,6 @@ interrupt_return:
|
||||
.Lfast_user_interrupt_return:
|
||||
lwz r11,_NIP(r1)
|
||||
lwz r12,_MSR(r1)
|
||||
clr_ri r4
|
||||
mtspr SPRN_SRR0,r11
|
||||
mtspr SPRN_SRR1,r12
|
||||
|
||||
@@ -313,7 +299,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRED_STWCX)
|
||||
cmpwi cr1,r3,0
|
||||
lwz r11,_NIP(r1)
|
||||
lwz r12,_MSR(r1)
|
||||
clr_ri r4
|
||||
mtspr SPRN_SRR0,r11
|
||||
mtspr SPRN_SRR1,r12
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ static inline bool exit_must_hard_disable(void)
|
||||
#else
|
||||
static inline bool exit_must_hard_disable(void)
|
||||
{
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -443,6 +443,9 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs)
|
||||
|
||||
if (unlikely(stack_store))
|
||||
__hard_EE_RI_disable();
|
||||
#else
|
||||
} else {
|
||||
__hard_EE_RI_disable();
|
||||
#endif /* CONFIG_PPC64 */
|
||||
}
|
||||
|
||||
|
||||
@@ -202,6 +202,23 @@ static void kexec_prepare_cpus_wait(int wait_state)
|
||||
mb();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* The add_cpu() call in wake_offline_cpus() can fail as cpu_bootable()
|
||||
* returns false for CPUs that fail the cpu_smt_thread_allowed() check
|
||||
* or non primary threads if SMT is disabled. Re-enable SMT and set the
|
||||
* number of SMT threads to threads per core.
|
||||
*/
|
||||
static void kexec_smt_reenable(void)
|
||||
{
|
||||
#if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT)
|
||||
lock_device_hotplug();
|
||||
cpu_smt_num_threads = threads_per_core;
|
||||
cpu_smt_control = CPU_SMT_ENABLED;
|
||||
unlock_device_hotplug();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* We need to make sure each present CPU is online. The next kernel will scan
|
||||
* the device tree and assume primary threads are online and query secondary
|
||||
@@ -216,6 +233,8 @@ static void wake_offline_cpus(void)
|
||||
{
|
||||
int cpu = 0;
|
||||
|
||||
kexec_smt_reenable();
|
||||
|
||||
for_each_present_cpu(cpu) {
|
||||
if (!cpu_online(cpu)) {
|
||||
printk(KERN_INFO "kexec: Waking offline cpu %d.\n",
|
||||
|
||||
@@ -1171,8 +1171,9 @@ static void __init pnv_arch300_idle_init(void)
|
||||
u64 max_residency_ns = 0;
|
||||
int i;
|
||||
|
||||
/* stop is not really architected, we only have p9,p10 drivers */
|
||||
if (!pvr_version_is(PVR_POWER10) && !pvr_version_is(PVR_POWER9))
|
||||
/* stop is not really architected, we only have p9,p10 and p11 drivers */
|
||||
if (!pvr_version_is(PVR_POWER9) && !pvr_version_is(PVR_POWER10) &&
|
||||
!pvr_version_is(PVR_POWER11))
|
||||
return;
|
||||
|
||||
/*
|
||||
@@ -1189,8 +1190,8 @@ static void __init pnv_arch300_idle_init(void)
|
||||
struct pnv_idle_states_t *state = &pnv_idle_states[i];
|
||||
u64 psscr_rl = state->psscr_val & PSSCR_RL_MASK;
|
||||
|
||||
/* No deep loss driver implemented for POWER10 yet */
|
||||
if (pvr_version_is(PVR_POWER10) &&
|
||||
/* No deep loss driver implemented for POWER10 and POWER11 yet */
|
||||
if ((pvr_version_is(PVR_POWER10) || pvr_version_is(PVR_POWER11)) &&
|
||||
state->flags & (OPAL_PM_TIMEBASE_STOP|OPAL_PM_LOSE_FULL_CONTEXT))
|
||||
continue;
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
# To debug, uncomment the following line
|
||||
# set -x
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
# To debug, uncomment the following line
|
||||
# set -x
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
bhrb_filter_map_test
|
||||
bhrb_no_crash_wo_pmu_test
|
||||
check_extended_reg_test
|
||||
intr_regs_no_crash_wo_pmu_test
|
||||
mmcr0_cc56run_test
|
||||
mmcr0_exceptionbits_test
|
||||
|
||||
Reference in New Issue
Block a user