Message ID | 20240226163226.126288-1-heinrich.schuchardt@canonical.com |
---|---|
State | Accepted |
Commit | 25e7d4bf6445058cc9c70cb806b92efa01fa9cb5 |
Delegated to: | Andes |
Headers | show |
Series | [1/1] serial: move sbi_dbcn_available to .data section | expand |
On 2024-02-26 17:32, Heinrich Schuchardt wrote: > U-Boot SPL loads the device-tree directly behind main U-Boot overlapping > the .bss section. reserve_fdt() is called in board_init_f() to relocate the > device-tree to a safe location. > > Debug UARTs are enabled before board_init_f(). With sbi_dbcn_available in > the .bss section the device-tree is corrupted when _debug_uart_init() is > called in the SBI serial driver. Move the variable to the .data section. > > Link: https://bugs.launchpad.net/ubuntu/+source/u-boot/+bug/2054091 > Fixes: dfe08374943c ("risc-v: implement DBCN based debug console") > Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > --- > drivers/serial/serial_sbi.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/serial/serial_sbi.c b/drivers/serial/serial_sbi.c > index a51a96c1ef0..f3ecfccab43 100644 > --- a/drivers/serial/serial_sbi.c > +++ b/drivers/serial/serial_sbi.c > @@ -17,7 +17,7 @@ static inline void _debug_uart_putc(int c) > > #else > > -static int sbi_dbcn_available; > +static int sbi_dbcn_available __section(".data"); > > static inline void _debug_uart_init(void) > { Tested-by: Aurelien Jarno <aurelien@aurel32.net>
On Mon, Feb 26, 2024 at 05:32:26PM +0100, Heinrich Schuchardt wrote: > U-Boot SPL loads the device-tree directly behind main U-Boot overlapping > the .bss section. reserve_fdt() is called in board_init_f() to relocate the > device-tree to a safe location. > > Debug UARTs are enabled before board_init_f(). With sbi_dbcn_available in > the .bss section the device-tree is corrupted when _debug_uart_init() is > called in the SBI serial driver. Move the variable to the .data section. > > Link: https://bugs.launchpad.net/ubuntu/+source/u-boot/+bug/2054091 > Fixes: dfe08374943c ("risc-v: implement DBCN based debug console") > Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> This also appears to fix the inconsistent boot issues that I've been seeing since I reported: https://lore.kernel.org/u-boot/20240122-finicky-ancient-797ba048f927@spud/ Tested-by: Conor Dooley <conor.dooley@microchip.com> Thanks, Conor.
diff --git a/drivers/serial/serial_sbi.c b/drivers/serial/serial_sbi.c index a51a96c1ef0..f3ecfccab43 100644 --- a/drivers/serial/serial_sbi.c +++ b/drivers/serial/serial_sbi.c @@ -17,7 +17,7 @@ static inline void _debug_uart_putc(int c) #else -static int sbi_dbcn_available; +static int sbi_dbcn_available __section(".data"); static inline void _debug_uart_init(void) {
U-Boot SPL loads the device-tree directly behind main U-Boot overlapping the .bss section. reserve_fdt() is called in board_init_f() to relocate the device-tree to a safe location. Debug UARTs are enabled before board_init_f(). With sbi_dbcn_available in the .bss section the device-tree is corrupted when _debug_uart_init() is called in the SBI serial driver. Move the variable to the .data section. Link: https://bugs.launchpad.net/ubuntu/+source/u-boot/+bug/2054091 Fixes: dfe08374943c ("risc-v: implement DBCN based debug console") Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> --- drivers/serial/serial_sbi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)