Message ID | 5660C870.9030607@wwwdotorg.org |
---|---|
State | RFC |
Headers | show |
Hi Stephen, On 2015年12月04日 06:55, Stephen Warren wrote: > The patch below appears to solve the problem. Any ideas how to fix this > cleanly? I don't think we want to introduce a CONFIG_SPL_xxx for every > CONFIG_xxx, yet CONFIG_IS_ENABLED() (e.g. used around > arch/arm/mach-tegra/board.c's U_BOOT_DEVICE(ns16550_com1) definition) > seems to require this. > > Unfortunately, the patch doesn't revert cleanly, or at least would > require other more recent patches to be reverted first. > > Also, while debugging this I found that U-Boot force-probes any device > referenced by /chosen/stdout-path even if the DT node is disabled; yet > more fundamental incorrect DT processing:-( That's why the patch below > only affects SPL. More fixes to actually enable the serial port in DT > should be required. > > diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig > index fbfb204e6ec8..15609e7dc773 100644 > --- a/arch/arm/mach-tegra/Kconfig > +++ b/arch/arm/mach-tegra/Kconfig > @@ -1,5 +1,8 @@ > if TEGRA > > +config SPL_DM_SERIAL > + bool "Fix build" > + > config TEGRA_COMMON > bool "Tegra common options" > select DM > @@ -12,6 +15,7 @@ config TEGRA_COMMON > select DM_SPI > select DM_SPI_FLASH > select OF_CONTROL > + select SPL_DM_SERIAL > But all serial drivers should be converted to driver model by the end of Jan, 2016. The DM_SERIAL should be removed then. As SPL might not use OF_CONTROL. We might need better logic in tegra board.c like, SPL_BUILD ? SPL_OF_CONTROL : OF_CONTROL > config TEGRA_ARMV7_COMMON > bool "Tegra 32-bit common options" > diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c > index 166deabcd436..256c7eafd76e 100644 > --- a/drivers/serial/ns16550.c > +++ b/drivers/serial/ns16550.c > @@ -451,5 +451,6 @@ U_BOOT_DRIVER(ns16550_serial) = { > .priv_auto_alloc_size = sizeof(struct NS16550), > .probe = ns16550_serial_probe, > .ops = &ns16550_serial_ops, > + .flags = DM_FLAG_PRE_RELOC, Yes, this pre-reloc flag should be added. > }; > #endif /* CONFIG_DM_SERIAL */ > Best regards, Thomas
On Fri, Dec 4, 2015 at 2:59 PM, Thomas Chou <thomas@wytron.com.tw> wrote: > Hi Stephen, > > > On 2015年12月04日 06:55, Stephen Warren wrote: >> >> The patch below appears to solve the problem. Any ideas how to fix this >> cleanly? I don't think we want to introduce a CONFIG_SPL_xxx for every >> CONFIG_xxx, yet CONFIG_IS_ENABLED() (e.g. used around >> arch/arm/mach-tegra/board.c's U_BOOT_DEVICE(ns16550_com1) definition) >> seems to require this. >> >> Unfortunately, the patch doesn't revert cleanly, or at least would >> require other more recent patches to be reverted first. >> >> Also, while debugging this I found that U-Boot force-probes any device >> referenced by /chosen/stdout-path even if the DT node is disabled; yet >> more fundamental incorrect DT processing:-( That's why the patch below >> only affects SPL. More fixes to actually enable the serial port in DT >> should be required. >> >> diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig >> index fbfb204e6ec8..15609e7dc773 100644 >> --- a/arch/arm/mach-tegra/Kconfig >> +++ b/arch/arm/mach-tegra/Kconfig >> @@ -1,5 +1,8 @@ >> if TEGRA >> >> +config SPL_DM_SERIAL >> + bool "Fix build" >> + >> config TEGRA_COMMON >> bool "Tegra common options" >> select DM >> @@ -12,6 +15,7 @@ config TEGRA_COMMON >> select DM_SPI >> select DM_SPI_FLASH >> select OF_CONTROL >> + select SPL_DM_SERIAL >> > > But all serial drivers should be converted to driver model by the end of > Jan, 2016. The DM_SERIAL should be removed then. > > As SPL might not use OF_CONTROL. We might need better logic in tegra board.c > like, > SPL_BUILD ? SPL_OF_CONTROL : OF_CONTROL > > >> config TEGRA_ARMV7_COMMON >> bool "Tegra 32-bit common options" >> diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c >> index 166deabcd436..256c7eafd76e 100644 >> --- a/drivers/serial/ns16550.c >> +++ b/drivers/serial/ns16550.c >> @@ -451,5 +451,6 @@ U_BOOT_DRIVER(ns16550_serial) = { >> .priv_auto_alloc_size = sizeof(struct NS16550), >> .probe = ns16550_serial_probe, >> .ops = &ns16550_serial_ops, >> + .flags = DM_FLAG_PRE_RELOC, > > > Yes, this pre-reloc flag should be added. > >> }; >> #endif /* CONFIG_DM_SERIAL */ Have the same issue with am335x boards (http://lists.denx.de/pipermail/u-boot/2015-December/236615.html). Yegor
On Fri, Dec 04, 2015 at 03:10:14PM +0100, Yegor Yefremov wrote: > On Fri, Dec 4, 2015 at 2:59 PM, Thomas Chou <thomas@wytron.com.tw> wrote: > > Hi Stephen, > > > > > > On 2015年12月04日 06:55, Stephen Warren wrote: > >> > >> The patch below appears to solve the problem. Any ideas how to fix this > >> cleanly? I don't think we want to introduce a CONFIG_SPL_xxx for every > >> CONFIG_xxx, yet CONFIG_IS_ENABLED() (e.g. used around > >> arch/arm/mach-tegra/board.c's U_BOOT_DEVICE(ns16550_com1) definition) > >> seems to require this. > >> > >> Unfortunately, the patch doesn't revert cleanly, or at least would > >> require other more recent patches to be reverted first. > >> > >> Also, while debugging this I found that U-Boot force-probes any device > >> referenced by /chosen/stdout-path even if the DT node is disabled; yet > >> more fundamental incorrect DT processing:-( That's why the patch below > >> only affects SPL. More fixes to actually enable the serial port in DT > >> should be required. > >> > >> diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig > >> index fbfb204e6ec8..15609e7dc773 100644 > >> --- a/arch/arm/mach-tegra/Kconfig > >> +++ b/arch/arm/mach-tegra/Kconfig > >> @@ -1,5 +1,8 @@ > >> if TEGRA > >> > >> +config SPL_DM_SERIAL > >> + bool "Fix build" > >> + > >> config TEGRA_COMMON > >> bool "Tegra common options" > >> select DM > >> @@ -12,6 +15,7 @@ config TEGRA_COMMON > >> select DM_SPI > >> select DM_SPI_FLASH > >> select OF_CONTROL > >> + select SPL_DM_SERIAL > >> > > > > But all serial drivers should be converted to driver model by the end of > > Jan, 2016. The DM_SERIAL should be removed then. > > > > As SPL might not use OF_CONTROL. We might need better logic in tegra board.c > > like, > > SPL_BUILD ? SPL_OF_CONTROL : OF_CONTROL > > > > > >> config TEGRA_ARMV7_COMMON > >> bool "Tegra 32-bit common options" > >> diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c > >> index 166deabcd436..256c7eafd76e 100644 > >> --- a/drivers/serial/ns16550.c > >> +++ b/drivers/serial/ns16550.c > >> @@ -451,5 +451,6 @@ U_BOOT_DRIVER(ns16550_serial) = { > >> .priv_auto_alloc_size = sizeof(struct NS16550), > >> .probe = ns16550_serial_probe, > >> .ops = &ns16550_serial_ops, > >> + .flags = DM_FLAG_PRE_RELOC, > > > > > > Yes, this pre-reloc flag should be added. > > > >> }; > >> #endif /* CONFIG_DM_SERIAL */ > > Have the same issue with am335x boards > (http://lists.denx.de/pipermail/u-boot/2015-December/236615.html). Bah. I tested this on omap4_panda where I didn't see a problem..
Hi, On 4 December 2015 at 07:09, Tom Rini <trini@konsulko.com> wrote: > On Fri, Dec 04, 2015 at 03:10:14PM +0100, Yegor Yefremov wrote: >> On Fri, Dec 4, 2015 at 2:59 PM, Thomas Chou <thomas@wytron.com.tw> wrote: >> > Hi Stephen, >> > >> > >> > On 2015年12月04日 06:55, Stephen Warren wrote: >> >> >> >> The patch below appears to solve the problem. Any ideas how to fix this >> >> cleanly? I don't think we want to introduce a CONFIG_SPL_xxx for every >> >> CONFIG_xxx, yet CONFIG_IS_ENABLED() (e.g. used around >> >> arch/arm/mach-tegra/board.c's U_BOOT_DEVICE(ns16550_com1) definition) >> >> seems to require this. >> >> >> >> Unfortunately, the patch doesn't revert cleanly, or at least would >> >> require other more recent patches to be reverted first. >> >> >> >> Also, while debugging this I found that U-Boot force-probes any device >> >> referenced by /chosen/stdout-path even if the DT node is disabled; yet >> >> more fundamental incorrect DT processing:-( That's why the patch below >> >> only affects SPL. More fixes to actually enable the serial port in DT >> >> should be required. >> >> >> >> diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig >> >> index fbfb204e6ec8..15609e7dc773 100644 >> >> --- a/arch/arm/mach-tegra/Kconfig >> >> +++ b/arch/arm/mach-tegra/Kconfig >> >> @@ -1,5 +1,8 @@ >> >> if TEGRA >> >> >> >> +config SPL_DM_SERIAL >> >> + bool "Fix build" >> >> + >> >> config TEGRA_COMMON >> >> bool "Tegra common options" >> >> select DM >> >> @@ -12,6 +15,7 @@ config TEGRA_COMMON >> >> select DM_SPI >> >> select DM_SPI_FLASH >> >> select OF_CONTROL >> >> + select SPL_DM_SERIAL >> >> >> > >> > But all serial drivers should be converted to driver model by the end of >> > Jan, 2016. The DM_SERIAL should be removed then. >> > >> > As SPL might not use OF_CONTROL. We might need better logic in tegra board.c >> > like, >> > SPL_BUILD ? SPL_OF_CONTROL : OF_CONTROL >> > >> > >> >> config TEGRA_ARMV7_COMMON >> >> bool "Tegra 32-bit common options" >> >> diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c >> >> index 166deabcd436..256c7eafd76e 100644 >> >> --- a/drivers/serial/ns16550.c >> >> +++ b/drivers/serial/ns16550.c >> >> @@ -451,5 +451,6 @@ U_BOOT_DRIVER(ns16550_serial) = { >> >> .priv_auto_alloc_size = sizeof(struct NS16550), >> >> .probe = ns16550_serial_probe, >> >> .ops = &ns16550_serial_ops, >> >> + .flags = DM_FLAG_PRE_RELOC, >> > >> > >> > Yes, this pre-reloc flag should be added. >> > >> >> }; >> >> #endif /* CONFIG_DM_SERIAL */ >> >> Have the same issue with am335x boards >> (http://lists.denx.de/pipermail/u-boot/2015-December/236615.html). > > Bah. I tested this on omap4_panda where I didn't see a problem.. I found someone on beaglebone black so will send a patch. Regards, Simon
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index fbfb204e6ec8..15609e7dc773 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig @@ -1,5 +1,8 @@ if TEGRA +config SPL_DM_SERIAL + bool "Fix build" + config TEGRA_COMMON bool "Tegra common options" select DM @@ -12,6 +15,7 @@ config TEGRA_COMMON select DM_SPI select DM_SPI_FLASH select OF_CONTROL + select SPL_DM_SERIAL config TEGRA_ARMV7_COMMON bool "Tegra 32-bit common options" diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index 166deabcd436..256c7eafd76e 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -451,5 +451,6 @@ U_BOOT_DRIVER(ns16550_serial) = { .priv_auto_alloc_size = sizeof(struct NS16550), .probe = ns16550_serial_probe, .ops = &ns16550_serial_ops, + .flags = DM_FLAG_PRE_RELOC, }; #endif /* CONFIG_DM_SERIAL */