Skip to content

Commit

Permalink
powerpc: Fix early setup to make early_ioremap() work
Browse files Browse the repository at this point in the history
The immediate problem is that after commit
0bd3f9e ("powerpc/legacy_serial: Use early_ioremap()") the kernel
silently reboots on some systems.

The reason is that early_ioremap() returns broken addresses as it uses
slot_virt[] array which initialized with offsets from FIXADDR_TOP ==
IOREMAP_END+FIXADDR_SIZE == KERN_IO_END - FIXADDR_SIZ + FIXADDR_SIZE ==
__kernel_io_end which is 0 when early_ioremap_setup() is called.
__kernel_io_end is initialized little bit later in early_init_mmu().

This fixes the initialization by swapping early_ioremap_setup() and
early_init_mmu().

Fixes: 265c349 ("powerpc: Add support for GENERIC_EARLY_IOREMAP")
Signed-off-by: Alexey Kardashevskiy <[email protected]>
Reviewed-by: Christophe Leroy <[email protected]>
[mpe: Drop unrelated cleanup & cleanup change log]
Signed-off-by: Michael Ellerman <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
  • Loading branch information
aik authored and mpe committed May 20, 2021
1 parent d07f6ca commit e2f5efd
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions arch/powerpc/kernel/setup_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -369,11 +369,11 @@ void __init early_setup(unsigned long dt_ptr)
apply_feature_fixups();
setup_feature_keys();

early_ioremap_setup();

/* Initialize the hash table or TLB handling */
early_init_mmu();

early_ioremap_setup();

/*
* After firmware and early platform setup code has set things up,
* we note the SPR values for configurable control/performance
Expand Down

0 comments on commit e2f5efd

Please sign in to comment.