From patchwork Wed Feb 5 09:04:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiko Schocher X-Patchwork-Id: 235992 List-Id: U-Boot discussion From: hs at denx.de (Heiko Schocher) Date: Wed, 5 Feb 2020 10:04:32 +0100 Subject: dm, serial: problem with using ns16550 driver before relocation on mpc83xx Message-ID: Hello Bin, Simon, I just porting the mpc83xx based kmcoge5ne board support DTS and got problems using the serial ns16550 driver. I need the serial driver before rolcation, so I enabled "u-boot,dm-pre-reloc;" as usual in the device tree, but board does not boot ... I found the commit: commit 4687919684e0e4390b9fc20d1809ecaa9dc3cb81 Author: Bin Meng Date: Wed Oct 24 06:36:36 2018 -0700 serial: Remove DM_FLAG_PRE_RELOC flag in various drivers which added to the ns16550 serial driver: and board boots fine with the flag "u-boot,dm-pre-reloc" in DTS ... May I do something wrong here? I found in mainline for example the "arch/powerpc/dts/gdsys/gazerbeam-uboot.dtsi" board, which has the exactly same dts settings than I have now. @Dirk: Can you check, if this board boots with current mainline? Shouldn;t be the logic, that in case OF_CONTROL is enabled and if flag "u-boot,dm-pre-reloc" is set in DTS for the device, the device should be bound before relocation, and we do not need to check, if the driver sets DM_FLAG_PRE_RELOC ? But may I miss here something ... Any hints? bye, Heiko diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index 04b604fa2c..1e6fc6c668 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -487,7 +487,9 @@ U_BOOT_DRIVER(ns16550_serial) = { .priv_auto_alloc_size = sizeof(struct NS16550), .probe = ns16550_serial_probe, .ops = &ns16550_serial_ops, +#if !CONFIG_IS_ENABLED(OF_CONTROL) .flags = DM_FLAG_PRE_RELOC, +#endif }; #endif #endif /* SERIAL_PRESENT */ So, as OF_CONTROL is defined for me, the flag "u-boot,dm-pre-reloc" seems not working anymore ... Adding this back: hs at xmglap:u-boot-secu [20200205-temp] $ git diff diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index 9851663dc5..386ca9cffa 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -528,7 +528,7 @@ U_BOOT_DRIVER(ns16550_serial) = { .priv_auto_alloc_size = sizeof(struct NS16550), .probe = ns16550_serial_probe, .ops = &ns16550_serial_ops, -#if !CONFIG_IS_ENABLED(OF_CONTROL) +#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) .flags = DM_FLAG_PRE_RELOC, #endif };