Commit d175d699 authored by Anup Patel's avatar Anup Patel Committed by Palmer Dabbelt

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: default avatarAnup Patel <anup.patel@wdc.com>
Reviewed-by: default avatarAtish Patra <atish.patra@wdc.com>
Reviewed-by: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
Acked-by: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
Signed-off-by: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
Signed-off-by: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
parent 5cf998ba
...@@ -75,6 +75,7 @@ static inline void wait_for_interrupt(void) ...@@ -75,6 +75,7 @@ static inline void wait_for_interrupt(void)
struct device_node; struct device_node;
int riscv_of_processor_hartid(struct device_node *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); extern void riscv_fill_hwcap(void);
......
...@@ -44,6 +44,22 @@ int riscv_of_processor_hartid(struct device_node *node) ...@@ -44,6 +44,22 @@ int riscv_of_processor_hartid(struct device_node *node)
return hart; 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 #ifdef CONFIG_PROC_FS
static void print_isa(struct seq_file *f, const char *isa) static void print_isa(struct seq_file *f, const char *isa)
......
...@@ -240,20 +240,6 @@ static void plic_handle_irq(struct pt_regs *regs) ...@@ -240,20 +240,6 @@ static void plic_handle_irq(struct pt_regs *regs)
csr_set(CSR_IE, IE_EIE); 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) static void plic_set_threshold(struct plic_handler *handler, u32 threshold)
{ {
/* priority must be > threshold to trigger an interrupt */ /* priority must be > threshold to trigger an interrupt */
...@@ -330,7 +316,7 @@ static int __init plic_init(struct device_node *node, ...@@ -330,7 +316,7 @@ static int __init plic_init(struct device_node *node,
if (parent.args[0] != RV_IRQ_EXT) if (parent.args[0] != RV_IRQ_EXT)
continue; continue;
hartid = plic_find_hart_id(parent.np); hartid = riscv_of_parent_hartid(parent.np);
if (hartid < 0) { if (hartid < 0) {
pr_warn("failed to parse hart ID for context %d.\n", i); pr_warn("failed to parse hart ID for context %d.\n", i);
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment