On mcf5441x, mmu enabled, using a small initramfs, the boot was recently hanging silently in the initial phase, inside arch/m68k/mm/init.c, m68k_setup_node() initrd at 0x47d2f000:0x47d82f64 overlap at 1073741889 for chunk 0 overlap at 1073746176 for chunk 0 overlap at 1073746736 for chunk 0 overlap at 1073746737 for chunk 0 overlap at 1073746738 for chunk 0 overlap at 1073746739 for chunk 0 overlap at 1073746740 for chunk 0
From some debugging, at m68k_setup_node(), the 25-bits shift value
(virt_to_node_shift) seems unset, because applied to a wrong address (address previously set from m68k_fixup). Tried some fixes, but the more low-risk and hopefully correct seems to just add a volatile inside __virt_to_node_shift(). This seems to produce correct addresses for the next fixup to work. Cannot test this on other mmu ColdFire cpu's so every test is eventually welcome. Signed-off-by: Angelo Dureghello <angelo.dureghello@xxxxxxxxxxx> --- arch/m68k/include/asm/page_mm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/m68k/include/asm/page_mm.h b/arch/m68k/include/asm/page_mm.h index e6b75992192b..1eff386cc64b 100644 --- a/arch/m68k/include/asm/page_mm.h +++ b/arch/m68k/include/asm/page_mm.h @@ -135,7 +135,7 @@ static inline __attribute_const__ int __virt_to_node_shift(void) { int shift; - asm ( + asm volatile ( "1: moveq #0,%0\n" m68k_fixup(%c1, 1b) : "=d" (shift) -- 2.26.2