On Sat, Jan 09, 2021 at 07:49:58PM +0800, Kevin Hao wrote: > For the OCTEON boards, it need to patch the built-in DTB before using > it. Previously it judges if it is a built-in DTB by checking > fw_passed_dtb. But after commit 37e5c69ffd41 ("MIPS: head.S: Init > fw_passed_dtb to builtin DTB", the fw_passed_dtb is initialized even > when using built-in DTB. This causes the OCTEON boards boot broken due > to an unpatched built-in DTB is used. Add more checks to judge if we > really use built-in DTB or not. > > Fixed: 37e5c69ffd41 ("MIPS: head.S: Init fw_passed_dtb to builtin DTB") > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Kevin Hao <haokexin@xxxxxxxxx> > --- > arch/mips/cavium-octeon/setup.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c > index 982826ba0ef7..41d9c80e9666 100644 > --- a/arch/mips/cavium-octeon/setup.c > +++ b/arch/mips/cavium-octeon/setup.c > @@ -1149,7 +1149,8 @@ void __init device_tree_init(void) > bool do_prune; > bool fill_mac; > > - if (fw_passed_dtb) { > + if (fw_passed_dtb && (fw_passed_dtb != (ulong)&__dtb_octeon_68xx_begin) && > + (fw_passed_dtb != (ulong)&__dtb_octeon_3xxx_begin)) { well, if someone add a third dtb do the builtin DTBs, this might fail again. Let's fix it for real... > fdt = (void *)fw_passed_dtb; > do_prune = false; > fill_mac = true; .... IMHO the real bug is d9df9fb901d2 MIPS: Octeon: Remove special handling of CONFIG_MIPS_ELF_APPENDED_DTB=y. I'm tending to simply revert that commit. A different option would be to not place the two __dtb_octeon dtbs into the builtin dtb section, which looks like more work for not much gain... Thomas. -- Crap can work. Given enough thrust pigs will fly, but it's not necessarily a good idea. [ RFC1925, 2.3 ]