From mboxrd@z Thu Jan 1 00:00:00 1970 From: Angelo Dureghello Date: Sat, 14 May 2016 12:59:21 +0200 Subject: [U-Boot] RFC, dm: devices and device_info platdata manual relocation Message-ID: <57370509.8050402@sysam.it> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi all, i have seen, updating u-boot in NOR parallel flash, that the U_BOOT_DEVICE structure "platdata" ptr is still pointing to flash, so the update (rewriting flash) die silently and fails. I have found a workaround using misc_init_r that works in my board.c, as below, but i don't like too much the solution: ... #include ... DECLARE_GLOBAL_DATA_PTR; .... int misc_init_r(void) { /* * FIXME: relocation seems not working properly on m68k, * so relocating manually */ struct udevice *dev; int retval; printf("misc_init_r(): entering\n"); retval = uclass_find_device(UCLASS_SERIAL, 0, &dev); if (!retval) { printf("misc_init_r(): relocating serial device\n"); dev->platdata += gd->reloc_off; } return 0; } static struct coldfire_serial_platdata mcf5307_serial_plat = { .base = CONFIG_SYS_UART_BASE, .port = 0, .baudrate = CONFIG_BAUDRATE, }; U_BOOT_DEVICE(coldfire_serial) = { .name = "serial_coldfire", .platdata = &mcf5307_serial_plat, }; So, i can keep this changes in my board, but, i am wondering if manual-reloc of devices structures is maybe responsibility of drivers/core/root.c, something like int dm_init(void) { ..... #if defined(CONFIG_NEEDS_MANUAL_RELOC) fix_drivers(); fix_uclass(); fix_devices(); <------------- #endif ..... Every comment is welcome. Regards, Angelo Dureghello