RISC-V: Remove CLINT related code from timer and arch
Right now the RISC-V timer driver is convoluted to support: 1. Linux RISC-V S-mode (with MMU) where it will use TIME CSR for clocksource and SBI timer calls for clockevent device. 2. Linux RISC-V M-mode (without MMU) where it will use CLINT MMIO counter register for clocksource and CLINT MMIO compare register for clockevent device. We now have a separate CLINT timer driver which also provide CLINT based IPI operations so let's remove CLINT MMIO related code from arch/riscv directory and RISC-V timer driver. Signed-off-by: Anup Patel <anup.patel@wdc.com> Tested-by: Emil Renner Berhing <kernel@esmil.dk> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> Reviewed-by: Atish Patra <atish.patra@wdc.com> Reviewed-by: Palmer Dabbelt <palmerdabbelt@google.com> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
This commit is contained in:

committed by
Palmer Dabbelt

parent
2ac6795fcc
commit
2bc3fc877a
@@ -31,7 +31,7 @@ obj-y += cacheinfo.o
|
||||
obj-y += patch.o
|
||||
obj-$(CONFIG_MMU) += vdso.o vdso/
|
||||
|
||||
obj-$(CONFIG_RISCV_M_MODE) += clint.o traps_misaligned.o
|
||||
obj-$(CONFIG_RISCV_M_MODE) += traps_misaligned.o
|
||||
obj-$(CONFIG_FPU) += fpu.o
|
||||
obj-$(CONFIG_SMP) += smpboot.o
|
||||
obj-$(CONFIG_SMP) += smp.o
|
||||
|
@@ -1,63 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (c) 2019 Christoph Hellwig.
|
||||
*/
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/types.h>
|
||||
#include <asm/clint.h>
|
||||
#include <asm/csr.h>
|
||||
#include <asm/timex.h>
|
||||
|
||||
/*
|
||||
* This is the layout used by the SiFive clint, which is also shared by the qemu
|
||||
* virt platform, and the Kendryte KD210 at least.
|
||||
*/
|
||||
#define CLINT_IPI_OFF 0
|
||||
#define CLINT_TIME_CMP_OFF 0x4000
|
||||
#define CLINT_TIME_VAL_OFF 0xbff8
|
||||
|
||||
u32 __iomem *clint_ipi_base;
|
||||
|
||||
static void clint_send_ipi(const struct cpumask *target)
|
||||
{
|
||||
unsigned int cpu;
|
||||
|
||||
for_each_cpu(cpu, target)
|
||||
writel(1, clint_ipi_base + cpuid_to_hartid_map(cpu));
|
||||
}
|
||||
|
||||
static void clint_clear_ipi(void)
|
||||
{
|
||||
writel(0, clint_ipi_base + cpuid_to_hartid_map(smp_processor_id()));
|
||||
}
|
||||
|
||||
static struct riscv_ipi_ops clint_ipi_ops = {
|
||||
.ipi_inject = clint_send_ipi,
|
||||
.ipi_clear = clint_clear_ipi,
|
||||
};
|
||||
|
||||
void clint_init_boot_cpu(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
void __iomem *base;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "riscv,clint0");
|
||||
if (!np) {
|
||||
panic("clint not found");
|
||||
return;
|
||||
}
|
||||
|
||||
base = of_iomap(np, 0);
|
||||
if (!base)
|
||||
panic("could not map CLINT");
|
||||
|
||||
clint_ipi_base = base + CLINT_IPI_OFF;
|
||||
riscv_time_cmp = base + CLINT_TIME_CMP_OFF;
|
||||
riscv_time_val = base + CLINT_TIME_VAL_OFF;
|
||||
|
||||
clint_clear_ipi();
|
||||
riscv_set_ipi_ops(&clint_ipi_ops);
|
||||
}
|
@@ -18,7 +18,6 @@
|
||||
#include <linux/swiotlb.h>
|
||||
#include <linux/smp.h>
|
||||
|
||||
#include <asm/clint.h>
|
||||
#include <asm/cpu_ops.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/sections.h>
|
||||
@@ -79,7 +78,6 @@ void __init setup_arch(char **cmdline_p)
|
||||
#else
|
||||
unflatten_device_tree();
|
||||
#endif
|
||||
clint_init_boot_cpu();
|
||||
|
||||
#ifdef CONFIG_SWIOTLB
|
||||
swiotlb_init(1);
|
||||
|
@@ -18,7 +18,6 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/irq_work.h>
|
||||
|
||||
#include <asm/clint.h>
|
||||
#include <asm/sbi.h>
|
||||
#include <asm/tlbflush.h>
|
||||
#include <asm/cacheflush.h>
|
||||
|
@@ -24,7 +24,6 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/sched/task_stack.h>
|
||||
#include <linux/sched/mm.h>
|
||||
#include <asm/clint.h>
|
||||
#include <asm/cpu_ops.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mmu_context.h>
|
||||
|
Reference in New Issue
Block a user