Introduce sbi_current_hartid()
authorDamien Le Moal <damien.lemoal@wdc.com>
Fri, 21 Dec 2018 08:06:59 +0000 (17:06 +0900)
committerDamien Le Moal <damien.lemoal@wdc.com>
Fri, 21 Dec 2018 08:06:59 +0000 (17:06 +0900)
Use this helper instead of hardcoding csr_read(mhartid).

Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
include/sbi/sbi_hart.h
lib/sbi_hart.c
lib/sbi_init.c
lib/sbi_trap.c

index e369779..7041643 100644 (file)
@@ -38,4 +38,6 @@ void sbi_hart_wait_for_coldboot(struct sbi_scratch *scratch, u32 hartid);
 
 void sbi_hart_wake_coldboot_harts(struct sbi_scratch *scratch, u32 hartid);
 
+u32 sbi_current_hartid(void);
+
 #endif
index 32dcfe4..09739b9 100644 (file)
 #include <sbi/sbi_hart.h>
 #include <sbi/sbi_platform.h>
 
+/**
+ * Return HART ID of the caller.
+ */
+unsigned int sbi_current_hartid()
+{
+       return (u32)csr_read(mhartid);
+}
+
 static void mstatus_init(struct sbi_scratch *scratch, u32 hartid)
 {
        struct sbi_platform *plat = sbi_platform_ptr(scratch);
@@ -198,7 +206,7 @@ int sbi_hart_init(struct sbi_scratch *scratch, u32 hartid)
 
 void __attribute__((noreturn)) sbi_hart_hang(void)
 {
-       sbi_printf("\nHang !!\n");
+       sbi_printf("\nHART %u Hang !!\n\n", sbi_current_hartid());
 
        while (1)
                wfi();
@@ -249,7 +257,8 @@ void __attribute__((noreturn)) sbi_hart_switch_mode(unsigned long arg0,
                csr_write(uie, 0);
        }
 
-       sbi_printf("\nSwitching to %c-mode...\n\n", mode);
+       sbi_printf("HART %u switching to %c-mode...\n\n",
+                  sbi_current_hartid(), mode);
 
        register unsigned long a0 asm ("a0") = arg0;
        register unsigned long a1 asm ("a1") = arg1;
index f8451d1..da78a7e 100644 (file)
@@ -163,7 +163,7 @@ static atomic_t coldboot_lottery = ATOMIC_INITIALIZER(0);
 void __attribute__((noreturn)) sbi_init(struct sbi_scratch *scratch)
 {
        bool coldboot = FALSE;
-       u32 hartid = csr_read(mhartid);
+       u32 hartid = sbi_current_hartid();
 
        if (atomic_add_return(&coldboot_lottery, 1) == 1)
                coldboot = TRUE;
index f9c70a6..284bb74 100644 (file)
@@ -68,7 +68,7 @@ void sbi_trap_handler(struct sbi_trap_regs *regs,
 {
        int rc;
        const char *msg;
-       u32 hartid = csr_read(mhartid);
+       u32 hartid = sbi_current_hartid();
        ulong mcause = csr_read(mcause);
 
        if (mcause & (1UL << (__riscv_xlen - 1))) {