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;
|
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)
|
||||||
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)
|
||||||
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,
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue