[PATCH 1/1] lib: sbi: relax scoldboot_lock spinlock
Heinrich Schuchardt
xypron.glpk at gmx.de
Thu Aug 13 18:52:39 EDT 2020
On 14.08.20 00:25, Atish Patra wrote:
>>> Probably, the hart executing warmboot invokes sbi_platform_ipi_clear
>>> even before sbi_ipi_init is being called from the hart running coldboot.
>> There are two calls to sbi_ipi_init(). Is only the one in coldboot relevant?
>>
> Yes. That actually setups the clint base address.
>
>> Do you mean something like:
>>
> No. I meant like this.
>
> +#define UART_BASE 0x38000000ULL
> +static void sbi_print_early(char ch) {
> + int32_t r;
> + do {
> + __asm__ __volatile__ (
> + "amoor.w %0, %2, %1\n"
> + : "=r" (r), "+A" (*(uint32_t*)(UART_BASE))
> + : "r" (ch));
> + } while (r < 0);
> +}
> +
> static void sbi_boot_prints(struct sbi_scratch *scratch, u32 hartid)
> {
> int xlen;
> @@ -112,6 +123,8 @@ static void wait_for_coldboot(struct sbi_scratch
> *scratch, u32 hartid)
> wfi();
> cmip = csr_read(CSR_MIP);
> } while (!(cmip & MIP_MSIP));
> + sbi_print_early('T');
> + sbi_printf("mip value %lx\n", cmip);
> spin_lock(&coldboot_lock);
> };
>
>
> Note: sbi_printf may not work if sbi_console_init from the cold boot
> path is not invoked.
> That's why I added a "sbi_print_early". If sbi_printf doesn't work,
> please remove it.
>
> Thanks for your time in figuring out the issue with Kendryte.
> Unfortunately, I can't test these changes as I don't have
> a kendryte board at home.
>
>
This now booted to U-Boot. The extra time for printing was enough to
break the livelock:
TTTTTTTTTT
OpenSBI v0.8-11-g749e10e
mip value 8
T ____ _____ ____ _____
/ __ \ / ____| _ \_ _|
| | | |_ __ ___ _ __ | (___ | |_) || |
| | | | '_ \ / _ \ '_ \ \___ \| _ < | |
| |__| | |_) | __/ | | |____) | |_) || |_
\____/| .__/ \___|_| |_|_____/|____/_____|
| |
|_|
mip value 8
Tlatform Name : Kendryte K210
mip value 8
Tlatform Features : timer
mip value 8
Tlatform HART Count : 2
Boot HART ID : 0
mip value 8
Toot HART ISA : rv64imafdcsu
mip value 8
TOOT HART Features : none
mip value 8
TOOT HART PMP Count : 0
mip value 8
Tirmware Base : 0x80000000
mip value 8
Tirmware Size : 72 KB
mip value 8
TTuntime SBI Version : 0.2
mip value 8
T
mip value 8
TIDELEG : 0x0000000000000222
mip value 8
TEDELEG : 0x0000000000000109
mip value 8
U-Boot 2020.10-rc2-00127-g795d62af44-dirty (Aug 13 2020 - 22:00:56 +0200)
DRAM: 8 MiB
In: serial at 38000000
Out: serial at 38000000
Err: serial at 38000000
=>
Best regards
Heinrich
More information about the opensbi
mailing list