lib: sbi: Fix coding style issues

This fixes various coding style issues found in the SBI codes.
No functional changes.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Anup Patel <anup.patel@wdc.com>
This commit is contained in:
Bin Meng 2020-03-08 20:52:41 -07:00 committed by Anup Patel
parent 6e87507db6
commit 650c0e525c
19 changed files with 113 additions and 103 deletions

View file

@ -28,9 +28,9 @@
#error "Unexpected __riscv_xlen" #error "Unexpected __riscv_xlen"
#endif #endif
#define PAGE_SHIFT (12) #define PAGE_SHIFT (12)
#define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE - 1)) #define PAGE_MASK (~(PAGE_SIZE - 1))
#define REG_L __REG_SEL(ld, lw) #define REG_L __REG_SEL(ld, lw)
#define REG_S __REG_SEL(sd, sw) #define REG_S __REG_SEL(sd, sw)

View file

@ -215,20 +215,20 @@ static inline unsigned long __fls(unsigned long word)
(bit) = find_next_zero_bit((addr), (size), (bit) + 1)) (bit) = find_next_zero_bit((addr), (size), (bit) + 1))
unsigned long find_first_bit(const unsigned long *addr, unsigned long find_first_bit(const unsigned long *addr,
unsigned long size); unsigned long size);
unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long find_first_zero_bit(const unsigned long *addr,
unsigned long size); unsigned long size);
unsigned long find_last_bit(const unsigned long *addr, unsigned long find_last_bit(const unsigned long *addr,
unsigned long size); unsigned long size);
unsigned long find_next_bit(const unsigned long *addr, unsigned long find_next_bit(const unsigned long *addr,
unsigned long size, unsigned long offset); unsigned long size, unsigned long offset);
unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long find_next_zero_bit(const unsigned long *addr,
unsigned long size, unsigned long size,
unsigned long offset); unsigned long offset);
/** /**
* __set_bit - Set a bit in memory * __set_bit - Set a bit in memory
@ -242,7 +242,7 @@ static inline void __set_bit(int nr, volatile unsigned long *addr)
unsigned long mask = BIT_MASK(nr); unsigned long mask = BIT_MASK(nr);
unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
*p |= mask; *p |= mask;
} }
/** /**

View file

@ -10,7 +10,8 @@
#ifndef __SBI_CONST_H__ #ifndef __SBI_CONST_H__
#define __SBI_CONST_H__ #define __SBI_CONST_H__
/* Some constant macros are used in both assembler and /*
* Some constant macros are used in both assembler and
* C code. Therefore we cannot annotate them always with * C code. Therefore we cannot annotate them always with
* 'UL' and other type specifiers unilaterally. We * 'UL' and other type specifiers unilaterally. We
* use the following macros to deal with this. * use the following macros to deal with this.
@ -39,8 +40,8 @@
#define UL(x) (_UL(x)) #define UL(x) (_UL(x))
#define ULL(x) (_ULL(x)) #define ULL(x) (_ULL(x))
#define __STR(s) #s #define __STR(s) #s
#define STRINGIFY(s) __STR(s) #define STRINGIFY(s) __STR(s)
/* clang-format on */ /* clang-format on */

View file

@ -31,11 +31,11 @@
/* SBI function IDs for BASE extension*/ /* SBI function IDs for BASE extension*/
#define SBI_EXT_BASE_GET_SPEC_VERSION 0x0 #define SBI_EXT_BASE_GET_SPEC_VERSION 0x0
#define SBI_EXT_BASE_GET_IMP_ID 0x1 #define SBI_EXT_BASE_GET_IMP_ID 0x1
#define SBI_EXT_BASE_GET_IMP_VERSION 0x2 #define SBI_EXT_BASE_GET_IMP_VERSION 0x2
#define SBI_EXT_BASE_PROBE_EXT 0x3 #define SBI_EXT_BASE_PROBE_EXT 0x3
#define SBI_EXT_BASE_GET_MVENDORID 0x4 #define SBI_EXT_BASE_GET_MVENDORID 0x4
#define SBI_EXT_BASE_GET_MARCHID 0x5 #define SBI_EXT_BASE_GET_MARCHID 0x5
#define SBI_EXT_BASE_GET_MIMPID 0x6 #define SBI_EXT_BASE_GET_MIMPID 0x6
/* SBI function IDs for TIME extension*/ /* SBI function IDs for TIME extension*/
#define SBI_EXT_TIME_SET_TIMER 0x0 #define SBI_EXT_TIME_SET_TIMER 0x0
@ -44,7 +44,7 @@
#define SBI_EXT_IPI_SEND_IPI 0x0 #define SBI_EXT_IPI_SEND_IPI 0x0
/* SBI function IDs for RFENCE extension*/ /* SBI function IDs for RFENCE extension*/
#define SBI_EXT_RFENCE_REMOTE_FENCE_I 0x0 #define SBI_EXT_RFENCE_REMOTE_FENCE_I 0x0
#define SBI_EXT_RFENCE_REMOTE_SFENCE_VMA 0x1 #define SBI_EXT_RFENCE_REMOTE_SFENCE_VMA 0x1
#define SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID 0x2 #define SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID 0x2
#define SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA 0x3 #define SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA 0x3
@ -62,11 +62,11 @@
#define SBI_HSM_HART_STATUS_START_PENDING 0x2 #define SBI_HSM_HART_STATUS_START_PENDING 0x2
#define SBI_HSM_HART_STATUS_STOP_PENDING 0x3 #define SBI_HSM_HART_STATUS_STOP_PENDING 0x3
#define SBI_SPEC_VERSION_MAJOR_OFFSET 24 #define SBI_SPEC_VERSION_MAJOR_OFFSET 24
#define SBI_SPEC_VERSION_MAJOR_MASK 0x7f #define SBI_SPEC_VERSION_MAJOR_MASK 0x7f
#define SBI_SPEC_VERSION_MINOR_MASK 0xffffff #define SBI_SPEC_VERSION_MINOR_MASK 0xffffff
#define SBI_EXT_VENDOR_START 0x09000000 #define SBI_EXT_VENDOR_START 0x09000000
#define SBI_EXT_VENDOR_END 0x09FFFFFF #define SBI_EXT_VENDOR_END 0x09FFFFFF
/* clang-format on */ /* clang-format on */
#endif #endif

View file

@ -12,22 +12,22 @@
/* clang-format off */ /* clang-format off */
#define SBI_OK 0 #define SBI_OK 0
#define SBI_EFAIL -1 #define SBI_EFAIL -1
#define SBI_ENOTSUPP -2 #define SBI_ENOTSUPP -2
#define SBI_EINVAL -3 #define SBI_EINVAL -3
#define SBI_DENIED -4 #define SBI_DENIED -4
#define SBI_INVALID_ADDR -5 #define SBI_INVALID_ADDR -5
#define SBI_ENODEV -6 #define SBI_ENODEV -6
#define SBI_ENOSYS -7 #define SBI_ENOSYS -7
#define SBI_ETIMEDOUT -8 #define SBI_ETIMEDOUT -8
#define SBI_EIO -9 #define SBI_EIO -9
#define SBI_EILL -10 #define SBI_EILL -10
#define SBI_ENOSPC -11 #define SBI_ENOSPC -11
#define SBI_ENOMEM -12 #define SBI_ENOMEM -12
#define SBI_ETRAP -13 #define SBI_ETRAP -13
#define SBI_EUNKNOWN -14 #define SBI_EUNKNOWN -14
#define SBI_ENOENT -15 #define SBI_ENOENT -15
#define SBI_EALREADY_STARTED -16 #define SBI_EALREADY_STARTED -16
/* clang-format on */ /* clang-format on */

View file

@ -22,7 +22,7 @@ int sbi_hsm_init(struct sbi_scratch *scratch, u32 hartid, bool cold_boot);
void __noreturn sbi_hsm_exit(struct sbi_scratch *scratch); void __noreturn sbi_hsm_exit(struct sbi_scratch *scratch);
int sbi_hsm_hart_start(struct sbi_scratch *scratch, u32 hartid, int sbi_hsm_hart_start(struct sbi_scratch *scratch, u32 hartid,
ulong saddr, ulong priv); ulong saddr, ulong priv);
int sbi_hsm_hart_stop(struct sbi_scratch *scratch, bool exitnow); int sbi_hsm_hart_stop(struct sbi_scratch *scratch, bool exitnow);
int sbi_hsm_hart_get_state(struct sbi_scratch *scratch, u32 hartid); int sbi_hsm_hart_get_state(struct sbi_scratch *scratch, u32 hartid);
int sbi_hsm_hart_state_to_status(int state); int sbi_hsm_hart_state_to_status(int state);

View file

@ -25,23 +25,26 @@ struct sbi_ipi_event_ops {
/** Name of the IPI event operations */ /** Name of the IPI event operations */
char name[32]; char name[32];
/** Update callback to save/enqueue data for remote HART /**
* Note: This is an optional callback and it is called just before * Update callback to save/enqueue data for remote HART
* triggering IPI to remote HART. * Note: This is an optional callback and it is called just before
* triggering IPI to remote HART.
*/ */
int (* update)(struct sbi_scratch *scratch, int (* update)(struct sbi_scratch *scratch,
struct sbi_scratch *remote_scratch, struct sbi_scratch *remote_scratch,
u32 remote_hartid, void *data); u32 remote_hartid, void *data);
/** Sync callback to wait for remote HART /**
* Note: This is an optional callback and it is called just after * Sync callback to wait for remote HART
* triggering IPI to remote HART. * Note: This is an optional callback and it is called just after
* triggering IPI to remote HART.
*/ */
void (* sync)(struct sbi_scratch *scratch); void (* sync)(struct sbi_scratch *scratch);
/** Process callback to handle IPI event /**
* Note: This is a mandatory callback and it is called on the * Process callback to handle IPI event
* remote HART after IPI is triggered. * Note: This is a mandatory callback and it is called on the
* remote HART after IPI is triggered.
*/ */
void (* process)(struct sbi_scratch *scratch); void (* process)(struct sbi_scratch *scratch);
}; };

View file

@ -10,9 +10,10 @@
#ifndef __SBI_PLATFORM_H__ #ifndef __SBI_PLATFORM_H__
#define __SBI_PLATFORM_H__ #define __SBI_PLATFORM_H__
/** OpenSBI 32-bit platform version with: /**
* 1. upper 16-bits as major number * OpenSBI 32-bit platform version with:
* 2. lower 16-bits as minor number * 1. upper 16-bits as major number
* 2. lower 16-bits as minor number
*/ */
#define SBI_PLATFORM_VERSION(Major, Minor) ((Major << 16) | Minor) #define SBI_PLATFORM_VERSION(Major, Minor) ((Major << 16) | Minor)
@ -81,12 +82,14 @@ struct sbi_platform_operations {
/** Platform final exit */ /** Platform final exit */
void (*final_exit)(void); void (*final_exit)(void);
/** For platforms that do not implement misa, non-standard /**
* For platforms that do not implement misa, non-standard
* methods are needed to determine cpu extension. * methods are needed to determine cpu extension.
*/ */
int (*misa_check_extension)(char ext); int (*misa_check_extension)(char ext);
/** For platforms that do not implement misa, non-standard /**
* For platforms that do not implement misa, non-standard
* methods are needed to get MXL field of misa. * methods are needed to get MXL field of misa.
*/ */
int (*misa_get_xlen)(void); int (*misa_get_xlen)(void);
@ -138,8 +141,8 @@ struct sbi_platform_operations {
/** Bringup the given hart from previous stage **/ /** Bringup the given hart from previous stage **/
int (*hart_start)(u32 hartid, ulong saddr, ulong priv); int (*hart_start)(u32 hartid, ulong saddr, ulong priv);
/** /**
* Stop the current hart from running. This call doesn't expect to * Stop the current hart from running. This call doesn't expect to
* return if success. * return if success.
*/ */
int (*hart_stop)(void); int (*hart_stop)(void);

View file

@ -85,7 +85,8 @@ enum sbi_scratch_options {
#define sbi_scratch_thishart_arg1_ptr() \ #define sbi_scratch_thishart_arg1_ptr() \
((void *)(sbi_scratch_thishart_ptr()->next_arg1)) ((void *)(sbi_scratch_thishart_ptr()->next_arg1))
/** Allocate from extra space in sbi_scratch /**
* Allocate from extra space in sbi_scratch
* *
* @return zero on failure and non-zero (>= SBI_SCRATCH_EXTRA_SPACE_OFFSET) * @return zero on failure and non-zero (>= SBI_SCRATCH_EXTRA_SPACE_OFFSET)
* on success * on success

View file

@ -89,7 +89,8 @@ typedef unsigned long physical_size_t;
/* clang-format on */ /* clang-format on */
#else #else
/* OPENSBI_EXTERNAL_SBI_TYPES could be defined in CFLAGS for using the /*
* OPENSBI_EXTERNAL_SBI_TYPES could be defined in CFLAGS for using the
* external definitions of data types and common macros. * external definitions of data types and common macros.
* OPENSBI_EXTERNAL_SBI_TYPES is the file name to external header file, * OPENSBI_EXTERNAL_SBI_TYPES is the file name to external header file,
* the external build system should address the additional include * the external build system should address the additional include

View file

@ -14,9 +14,9 @@
#define OPENSBI_VERSION_MINOR 6 #define OPENSBI_VERSION_MINOR 6
/** /**
* OpenSBI 32-bit version with: * OpenSBI 32-bit version with:
* 1. upper 16-bits as major number * 1. upper 16-bits as major number
* 2. lower 16-bits as minor number * 2. lower 16-bits as minor number
*/ */
#define OPENSBI_VERSION ((OPENSBI_VERSION_MAJOR << 16) | \ #define OPENSBI_VERSION ((OPENSBI_VERSION_MAJOR << 16) | \
(OPENSBI_VERSION_MINOR)) (OPENSBI_VERSION_MINOR))

View file

@ -207,7 +207,7 @@ int pmp_set(unsigned int n, unsigned long prot, unsigned long addr,
if (n >= PMP_COUNT || log2len > __riscv_xlen || log2len < PMP_SHIFT) if (n >= PMP_COUNT || log2len > __riscv_xlen || log2len < PMP_SHIFT)
return SBI_EINVAL; return SBI_EINVAL;
/* calculate PMP register and offset */ /* calculate PMP register and offset */
#if __riscv_xlen == 32 #if __riscv_xlen == 32
pmpcfg_csr = CSR_PMPCFG0 + (n >> 2); pmpcfg_csr = CSR_PMPCFG0 + (n >> 2);
pmpcfg_shift = (n & 3) << 3; pmpcfg_shift = (n & 3) << 3;

View file

@ -49,7 +49,7 @@ long atomic_sub_return(atomic_t *atom, long value)
return ret - value; return ret - value;
} }
#define __axchg(ptr, new, size) \ #define __axchg(ptr, new, size) \
({ \ ({ \
__typeof__(ptr) __ptr = (ptr); \ __typeof__(ptr) __ptr = (ptr); \
__typeof__(new) __new = (new); \ __typeof__(new) __new = (new); \
@ -70,12 +70,12 @@ long atomic_sub_return(atomic_t *atom, long value)
: "memory"); \ : "memory"); \
break; \ break; \
default: \ default: \
break; \ break; \
} \ } \
__ret; \ __ret; \
}) })
#define axchg(ptr, x) \ #define axchg(ptr, x) \
({ \ ({ \
__typeof__(*(ptr)) _x_ = (x); \ __typeof__(*(ptr)) _x_ = (x); \
(__typeof__(*(ptr))) __axchg((ptr), _x_, sizeof(*(ptr))); \ (__typeof__(*(ptr))) __axchg((ptr), _x_, sizeof(*(ptr))); \
@ -90,20 +90,20 @@ long atomic_sub_return(atomic_t *atom, long value)
register unsigned int __rc; \ register unsigned int __rc; \
switch (size) { \ switch (size) { \
case 4: \ case 4: \
__asm__ __volatile__("0: lr.w %0, %2\n" \ __asm__ __volatile__("0: lr.w %0, %2\n" \
" sc.w.rl %1, %z3, %2\n" \ " sc.w.rl %1, %z3, %2\n" \
" bnez %1, 0b\n" \ " bnez %1, 0b\n" \
" fence rw, rw\n" \ " fence rw, rw\n" \
: "=&r"(__ret), "=&r"(__rc), \ : "=&r"(__ret), "=&r"(__rc), \
"+A"(*__ptr) \ "+A"(*__ptr) \
: "rJ"(__new) \ : "rJ"(__new) \
: "memory"); \ : "memory"); \
break; \ break; \
case 8: \ case 8: \
__asm__ __volatile__("0: lr.d %0, %2\n" \ __asm__ __volatile__("0: lr.d %0, %2\n" \
" sc.d.rl %1, %z3, %2\n" \ " sc.d.rl %1, %z3, %2\n" \
" bnez %1, 0b\n" \ " bnez %1, 0b\n" \
" fence rw, rw\n" \ " fence rw, rw\n" \
: "=&r"(__ret), "=&r"(__rc), \ : "=&r"(__ret), "=&r"(__rc), \
"+A"(*__ptr) \ "+A"(*__ptr) \
: "rJ"(__new) \ : "rJ"(__new) \
@ -130,11 +130,11 @@ long atomic_sub_return(atomic_t *atom, long value)
register unsigned int __rc; \ register unsigned int __rc; \
switch (size) { \ switch (size) { \
case 4: \ case 4: \
__asm__ __volatile__("0: lr.w %0, %2\n" \ __asm__ __volatile__("0: lr.w %0, %2\n" \
" bne %0, %z3, 1f\n" \ " bne %0, %z3, 1f\n" \
" sc.w.rl %1, %z4, %2\n" \ " sc.w.rl %1, %z4, %2\n" \
" bnez %1, 0b\n" \ " bnez %1, 0b\n" \
" fence rw, rw\n" \ " fence rw, rw\n" \
"1:\n" \ "1:\n" \
: "=&r"(__ret), "=&r"(__rc), \ : "=&r"(__ret), "=&r"(__rc), \
"+A"(*__ptr) \ "+A"(*__ptr) \
@ -142,11 +142,11 @@ long atomic_sub_return(atomic_t *atom, long value)
: "memory"); \ : "memory"); \
break; \ break; \
case 8: \ case 8: \
__asm__ __volatile__("0: lr.d %0, %2\n" \ __asm__ __volatile__("0: lr.d %0, %2\n" \
" bne %0, %z3, 1f\n" \ " bne %0, %z3, 1f\n" \
" sc.d.rl %1, %z4, %2\n" \ " sc.d.rl %1, %z4, %2\n" \
" bnez %1, 0b\n" \ " bnez %1, 0b\n" \
" fence rw, rw\n" \ " fence rw, rw\n" \
"1:\n" \ "1:\n" \
: "=&r"(__ret), "=&r"(__rc), \ : "=&r"(__ret), "=&r"(__rc), \
"+A"(*__ptr) \ "+A"(*__ptr) \

View file

@ -20,7 +20,7 @@
* Returns the bit number of the first set bit. * Returns the bit number of the first set bit.
*/ */
unsigned long find_first_bit(const unsigned long *addr, unsigned long find_first_bit(const unsigned long *addr,
unsigned long size) unsigned long size)
{ {
const unsigned long *p = addr; const unsigned long *p = addr;
unsigned long result = 0; unsigned long result = 0;
@ -50,7 +50,7 @@ found:
* Returns the bit number of the first cleared bit. * Returns the bit number of the first cleared bit.
*/ */
unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long find_first_zero_bit(const unsigned long *addr,
unsigned long size) unsigned long size)
{ {
const unsigned long *p = addr; const unsigned long *p = addr;
unsigned long result = 0; unsigned long result = 0;
@ -80,7 +80,7 @@ found:
* Returns the bit number of the first set bit, or size. * Returns the bit number of the first set bit, or size.
*/ */
unsigned long find_last_bit(const unsigned long *addr, unsigned long find_last_bit(const unsigned long *addr,
unsigned long size) unsigned long size)
{ {
unsigned long words; unsigned long words;
unsigned long tmp; unsigned long tmp;
@ -115,7 +115,7 @@ found:
* @size: The bitmap size in bits * @size: The bitmap size in bits
*/ */
unsigned long find_next_bit(const unsigned long *addr, unsigned long find_next_bit(const unsigned long *addr,
unsigned long size, unsigned long offset) unsigned long size, unsigned long offset)
{ {
const unsigned long *p = addr + BITOP_WORD(offset); const unsigned long *p = addr + BITOP_WORD(offset);
unsigned long result = offset & ~(BITS_PER_LONG-1); unsigned long result = offset & ~(BITS_PER_LONG-1);
@ -160,8 +160,8 @@ found_middle:
* @size: The bitmap size in bits * @size: The bitmap size in bits
*/ */
unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long find_next_zero_bit(const unsigned long *addr,
unsigned long size, unsigned long size,
unsigned long offset) unsigned long offset)
{ {
const unsigned long *p = addr + BITOP_WORD(offset); const unsigned long *p = addr + BITOP_WORD(offset);
unsigned long result = offset & ~(BITS_PER_LONG-1); unsigned long result = offset & ~(BITS_PER_LONG-1);

View file

@ -105,7 +105,8 @@ int sbi_ecall_handler(u32 hartid, ulong mcause, struct sbi_trap_regs *regs,
trap.epc = regs->mepc; trap.epc = regs->mepc;
sbi_trap_redirect(regs, &trap, scratch); sbi_trap_redirect(regs, &trap, scratch);
} else { } else {
/* This function should return non-zero value only in case of /*
* This function should return non-zero value only in case of
* fatal error. However, there is no good way to distinguish * fatal error. However, there is no good way to distinguish
* between a fatal and non-fatal errors yet. That's why we treat * between a fatal and non-fatal errors yet. That's why we treat
* every return value except ETRAP as non-fatal and just return * every return value except ETRAP as non-fatal and just return

View file

@ -75,7 +75,7 @@ static int delegate_traps(struct sbi_scratch *scratch, u32 hartid)
unsigned long interrupts, exceptions; unsigned long interrupts, exceptions;
if (!misa_extension('S')) if (!misa_extension('S'))
/* No delegation possible as mideleg does not exist*/ /* No delegation possible as mideleg does not exist */
return 0; return 0;
/* Send M-mode interrupts and most exceptions to S-mode */ /* Send M-mode interrupts and most exceptions to S-mode */
@ -342,7 +342,7 @@ sbi_hart_switch_mode(unsigned long arg0, unsigned long arg1,
__builtin_unreachable(); __builtin_unreachable();
} }
static spinlock_t avail_hart_mask_lock = SPIN_LOCK_INITIALIZER; static spinlock_t avail_hart_mask_lock = SPIN_LOCK_INITIALIZER;
static volatile unsigned long avail_hart_mask = 0; static volatile unsigned long avail_hart_mask = 0;
void sbi_hart_mark_available(u32 hartid) void sbi_hart_mark_available(u32 hartid)

View file

@ -81,7 +81,7 @@ void sbi_hsm_prepare_next_jump(struct sbi_scratch *scratch, u32 hartid)
{ {
u32 oldstate; u32 oldstate;
struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch, struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch,
hart_data_offset); hart_data_offset);
oldstate = arch_atomic_cmpxchg(&hdata->state, SBI_HART_STARTING, oldstate = arch_atomic_cmpxchg(&hdata->state, SBI_HART_STARTING,
SBI_HART_STARTED); SBI_HART_STARTED);
@ -94,7 +94,7 @@ static void sbi_hsm_hart_wait(struct sbi_scratch *scratch, u32 hartid)
unsigned long saved_mie; unsigned long saved_mie;
const struct sbi_platform *plat = sbi_platform_ptr(scratch); const struct sbi_platform *plat = sbi_platform_ptr(scratch);
struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch, struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch,
hart_data_offset); hart_data_offset);
/* Save MIE CSR */ /* Save MIE CSR */
saved_mie = csr_read(CSR_MIE); saved_mie = csr_read(CSR_MIE);
@ -122,7 +122,7 @@ int sbi_hsm_init(struct sbi_scratch *scratch, u32 hartid, bool cold_boot)
if (cold_boot) { if (cold_boot) {
hart_data_offset = sbi_scratch_alloc_offset(sizeof(*hdata), hart_data_offset = sbi_scratch_alloc_offset(sizeof(*hdata),
"HART_DATA"); "HART_DATA");
if (!hart_data_offset) if (!hart_data_offset)
return SBI_ENOMEM; return SBI_ENOMEM;
hart_count = sbi_platform_hart_count(plat); hart_count = sbi_platform_hart_count(plat);
@ -147,7 +147,7 @@ void __noreturn sbi_hsm_exit(struct sbi_scratch *scratch)
u32 hstate; u32 hstate;
const struct sbi_platform *plat = sbi_platform_ptr(scratch); const struct sbi_platform *plat = sbi_platform_ptr(scratch);
struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch, struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch,
hart_data_offset); hart_data_offset);
void (*jump_warmboot)(void) = (void (*)(void))scratch->warmboot_addr; void (*jump_warmboot)(void) = (void (*)(void))scratch->warmboot_addr;
hstate = arch_atomic_cmpxchg(&hdata->state, SBI_HART_STOPPING, hstate = arch_atomic_cmpxchg(&hdata->state, SBI_HART_STOPPING,
@ -183,7 +183,7 @@ int sbi_hsm_hart_start(struct sbi_scratch *scratch, u32 hartid,
const struct sbi_platform *plat = sbi_platform_ptr(scratch); const struct sbi_platform *plat = sbi_platform_ptr(scratch);
struct sbi_scratch *rscratch = sbi_hart_id_to_scratch(scratch, hartid); struct sbi_scratch *rscratch = sbi_hart_id_to_scratch(scratch, hartid);
struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(rscratch, struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(rscratch,
hart_data_offset); hart_data_offset);
if (sbi_platform_hart_disabled(plat, hartid)) if (sbi_platform_hart_disabled(plat, hartid))
return SBI_EINVAL; return SBI_EINVAL;
@ -225,14 +225,14 @@ int sbi_hsm_hart_stop(struct sbi_scratch *scratch, bool exitnow)
u32 hartid = sbi_current_hartid(); u32 hartid = sbi_current_hartid();
const struct sbi_platform *plat = sbi_platform_ptr(scratch); const struct sbi_platform *plat = sbi_platform_ptr(scratch);
struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch, struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch,
hart_data_offset); hart_data_offset);
if (sbi_platform_hart_disabled(plat, hartid) || if (sbi_platform_hart_disabled(plat, hartid) ||
!sbi_hsm_hart_started(scratch, hartid)) !sbi_hsm_hart_started(scratch, hartid))
return SBI_EINVAL; return SBI_EINVAL;
oldstate = arch_atomic_cmpxchg(&hdata->state, SBI_HART_STARTED, oldstate = arch_atomic_cmpxchg(&hdata->state, SBI_HART_STARTED,
SBI_HART_STOPPING); SBI_HART_STOPPING);
if (oldstate != SBI_HART_STARTED) { if (oldstate != SBI_HART_STARTED) {
sbi_printf("%s: ERR: The hart is in invalid state [%u]\n", sbi_printf("%s: ERR: The hart is in invalid state [%u]\n",
__func__, oldstate); __func__, oldstate);

View file

@ -392,11 +392,11 @@ int sbi_tlb_init(struct sbi_scratch *scratch, bool cold_boot)
if (cold_boot) { if (cold_boot) {
tlb_sync_off = sbi_scratch_alloc_offset(sizeof(*tlb_sync), tlb_sync_off = sbi_scratch_alloc_offset(sizeof(*tlb_sync),
"IPI_TLB_SYNC"); "IPI_TLB_SYNC");
if (!tlb_sync_off) if (!tlb_sync_off)
return SBI_ENOMEM; return SBI_ENOMEM;
tlb_fifo_off = sbi_scratch_alloc_offset(sizeof(*tlb_q), tlb_fifo_off = sbi_scratch_alloc_offset(sizeof(*tlb_q),
"IPI_TLB_FIFO"); "IPI_TLB_FIFO");
if (!tlb_fifo_off) { if (!tlb_fifo_off) {
sbi_scratch_free_offset(tlb_sync_off); sbi_scratch_free_offset(tlb_sync_off);
return SBI_ENOMEM; return SBI_ENOMEM;

View file

@ -178,7 +178,7 @@ int sbi_trap_redirect(struct sbi_trap_regs *regs,
regs->mstatus &= ~MSTATUS_MPP; regs->mstatus &= ~MSTATUS_MPP;
regs->mstatus |= (PRV_S << MSTATUS_MPP_SHIFT); regs->mstatus |= (PRV_S << MSTATUS_MPP_SHIFT);
/* Set SPP for S-mode*/ /* Set SPP for S-mode */
regs->mstatus &= ~MSTATUS_SPP; regs->mstatus &= ~MSTATUS_SPP;
if (prev_mode == PRV_S) if (prev_mode == PRV_S)
regs->mstatus |= (1UL << MSTATUS_SPP_SHIFT); regs->mstatus |= (1UL << MSTATUS_SPP_SHIFT);