RISC-V: Rename and move plic_find_hart_id() to arch directory
The plic_find_hart_id() can be useful to other interrupt controller drivers (such as RISC-V local interrupt driver) so we rename this function to riscv_of_parent_hartid() and place it in arch directory along with riscv_of_processor_hartid(). Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Atish Patra <atish.patra@wdc.com> Reviewed-by: Palmer Dabbelt <palmerdabbelt@google.com> Acked-by: Palmer Dabbelt <palmerdabbelt@google.com> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com> Reviewed-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
This commit is contained in:
parent
5cf998ba8c
commit
d175d699df
@ -75,6 +75,7 @@ static inline void wait_for_interrupt(void)
|
||||
|
||||
struct device_node;
|
||||
int riscv_of_processor_hartid(struct device_node *node);
|
||||
int riscv_of_parent_hartid(struct device_node *node);
|
||||
|
||||
extern void riscv_fill_hwcap(void);
|
||||
|
||||
|
@ -44,6 +44,22 @@ int riscv_of_processor_hartid(struct device_node *node)
|
||||
return hart;
|
||||
}
|
||||
|
||||
/*
|
||||
* Find hart ID of the CPU DT node under which given DT node falls.
|
||||
*
|
||||
* To achieve this, we walk up the DT tree until we find an active
|
||||
* RISC-V core (HART) node and extract the cpuid from it.
|
||||
*/
|
||||
int riscv_of_parent_hartid(struct device_node *node)
|
||||
{
|
||||
for (; node; node = node->parent) {
|
||||
if (of_device_is_compatible(node, "riscv"))
|
||||
return riscv_of_processor_hartid(node);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
|
||||
static void print_isa(struct seq_file *f, const char *isa)
|
||||
|
@ -240,20 +240,6 @@ static void plic_handle_irq(struct pt_regs *regs)
|
||||
csr_set(CSR_IE, IE_EIE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Walk up the DT tree until we find an active RISC-V core (HART) node and
|
||||
* extract the cpuid from it.
|
||||
*/
|
||||
static int plic_find_hart_id(struct device_node *node)
|
||||
{
|
||||
for (; node; node = node->parent) {
|
||||
if (of_device_is_compatible(node, "riscv"))
|
||||
return riscv_of_processor_hartid(node);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void plic_set_threshold(struct plic_handler *handler, u32 threshold)
|
||||
{
|
||||
/* priority must be > threshold to trigger an interrupt */
|
||||
@ -330,7 +316,7 @@ static int __init plic_init(struct device_node *node,
|
||||
if (parent.args[0] != RV_IRQ_EXT)
|
||||
continue;
|
||||
|
||||
hartid = plic_find_hart_id(parent.np);
|
||||
hartid = riscv_of_parent_hartid(parent.np);
|
||||
if (hartid < 0) {
|
||||
pr_warn("failed to parse hart ID for context %d.\n", i);
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user