diff options
author | Tom Rini <trini@konsulko.com> | 2023-09-05 09:04:49 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2023-09-05 09:04:49 -0400 |
commit | e7b7dca28f57e9331388550597c0687d3bfaded0 (patch) | |
tree | dba6f74cca2f0eb5726d838795b08fe87c7276bd /drivers | |
parent | 493fd3363f6da6a784514657d689c7cda0f390d5 (diff) | |
parent | dfe08374943c0e898fcfaf7327f69e0fb56b7d23 (diff) | |
download | u-boot-e7b7dca28f57e9331388550597c0687d3bfaded0.tar.gz u-boot-e7b7dca28f57e9331388550597c0687d3bfaded0.tar.bz2 u-boot-e7b7dca28f57e9331388550597c0687d3bfaded0.zip |
Merge https://source.denx.de/u-boot/custodians/u-boot-riscv
+ Implement OpenSBI DBCN extension for early debug console
+ Fixes for VisionFive2 board
+ Fix timer missing
+ Fix L2 LIM issue
+ Enable PCIE auto enumeration to support USB and NVMe by default
+ Set eth0 mac address properly
+ Add __noreturn attribute to spl_invoke_opensbi
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/serial/Kconfig | 5 | ||||
-rw-r--r-- | drivers/serial/serial_sbi.c | 20 | ||||
-rw-r--r-- | drivers/timer/riscv_timer.c | 28 |
3 files changed, 50 insertions, 3 deletions
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index a1e089962a..8c54bc9c47 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -218,6 +218,7 @@ config DEBUG_UART choice prompt "Select which UART will provide the debug UART" depends on DEBUG_UART + default DEBUG_SBI_CONSOLE if RISCV_SMODE default DEBUG_UART_NS16550 config DEBUG_UART_ALTERA_JTAGUART @@ -289,11 +290,13 @@ config DEBUG_EFI_CONSOLE config DEBUG_SBI_CONSOLE bool "SBI" - depends on SBI_V01 + depends on RISCV_SMODE help Select this to enable a debug console which calls back to SBI to output to the console. This can be useful for early debugging of U-Boot when running on top of SBI (Supervisor Binary Interface). + This implementation of the debug UART is not available while in + M-mode (e.g. during SPL). config DEBUG_UART_S5P bool "Samsung S5P" diff --git a/drivers/serial/serial_sbi.c b/drivers/serial/serial_sbi.c index b9f35ed36e..a51a96c1ef 100644 --- a/drivers/serial/serial_sbi.c +++ b/drivers/serial/serial_sbi.c @@ -3,6 +3,8 @@ #include <debug_uart.h> #include <asm/sbi.h> +#ifdef CONFIG_SBI_V01 + static inline void _debug_uart_init(void) { } @@ -13,4 +15,22 @@ static inline void _debug_uart_putc(int c) sbi_console_putchar(c); } +#else + +static int sbi_dbcn_available; + +static inline void _debug_uart_init(void) +{ + if (CONFIG_IS_ENABLED(RISCV_SMODE)) + sbi_dbcn_available = sbi_probe_extension(SBI_EXT_DBCN); +} + +static inline void _debug_uart_putc(int ch) +{ + if (CONFIG_IS_ENABLED(RISCV_SMODE) && sbi_dbcn_available) + sbi_dbcn_write_byte(ch); +} + +#endif + DEBUG_UART_FUNCS diff --git a/drivers/timer/riscv_timer.c b/drivers/timer/riscv_timer.c index 3627ed79b8..28a6a6870b 100644 --- a/drivers/timer/riscv_timer.c +++ b/drivers/timer/riscv_timer.c @@ -13,6 +13,7 @@ #include <common.h> #include <dm.h> #include <errno.h> +#include <fdt_support.h> #include <timer.h> #include <asm/csr.h> @@ -53,9 +54,26 @@ u64 notrace timer_early_get_count(void) static int riscv_timer_probe(struct udevice *dev) { struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev); + u32 rate; - /* clock frequency was passed from the cpu driver as driver data */ - uc_priv->clock_rate = dev->driver_data; + /* When this function was called from the CPU driver, clock + * frequency is passed as driver data. + */ + rate = dev->driver_data; + + /* When called from an FDT match, the rate needs to be looked up. */ + if (!rate && gd->fdt_blob) { + rate = fdt_getprop_u32_default(gd->fdt_blob, + "/cpus", "timebase-frequency", 0); + } + + uc_priv->clock_rate = rate; + + /* With rate==0, timer uclass post_probe might later fail with -EINVAL. + * Give a hint at the cause for debugging. + */ + if (!rate) + log_err("riscv_timer_probe with invalid clock rate 0!\n"); return 0; } @@ -64,9 +82,15 @@ static const struct timer_ops riscv_timer_ops = { .get_count = riscv_timer_get_count, }; +static const struct udevice_id riscv_timer_ids[] = { + { .compatible = "riscv,timer", }, + { } +}; + U_BOOT_DRIVER(riscv_timer) = { .name = "riscv_timer", .id = UCLASS_TIMER, + .of_match = of_match_ptr(riscv_timer_ids), .probe = riscv_timer_probe, .ops = &riscv_timer_ops, .flags = DM_FLAG_PRE_RELOC, |