Hi Jonas, On Fri, Dec 13, 2024 at 03:06:59PM +0100, Jonas Rebmann wrote: > +static void eth_init(void) > +{ > + void __iomem *iomux = (void *)MX6_IOMUXC_BASE_ADDR; IOMEM() instead of casting to void *. > +ENTRY_FUNCTION(start_imx6dl_colibri_iris, r0, r1, r2) > +{ > + void *fdt; > + > + imx6_cpu_lowlevel_init(); > + > + if (IS_ENABLED(CONFIG_DEBUG_LL)) { > + setup_uart(); > + } > + > + fdt = __dtb_z_imx6dl_colibri_iris_start + get_runtime_offset(); > + barebox_arm_entry(0x10000000, SZ_512M, fdt); > +} Rather do a: relocate_to_current_adr(); setup_c(); Then jump to a noinline function to continue startup. Additionally to setting up the UART for _ll access you can do a pbl_set_putc(imx_uart_putc, uart1base); The advantage is that you no longer have to enable CONFIG_DEBUG_LL to get early console output, but only CONFIG_PBL_CONSOLE. You can do the UART setup unconditionally, no need to hide that behind CONFIG_DEBUG_LL. > + > +ENTRY_FUNCTION(start_imx6s_colibri_iris, r0, r1, r2) > +{ > + void *fdt; > + > + imx6_cpu_lowlevel_init(); > + > + if (IS_ENABLED(CONFIG_DEBUG_LL)) { > + setup_uart(); > + } > + > + fdt = __dtb_z_imx6dl_colibri_iris_start + get_runtime_offset(); > + barebox_arm_entry(0x10000000, SZ_256M, fdt); > +} You should be able to call imx6q_barebox_entry() instead here. This will read the amount of DRAM back from the controller. No need to distinguish between both board anymore and you can merge both images into one. Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |