Message ID | 20200521134544.816918-3-anup.patel@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Dedicated CLINT timer driver | expand |
On Thu, 21 May 2020 06:45:41 PDT (-0700), Anup Patel wrote: > We will be having separate CLINT timer driver which will also > provide CLINT based IPI operations so let's remove CLINT related > code from arch/riscv directory. This will leave the system unbootable, which breaks bisecting. > > Signed-off-by: Anup Patel <anup.patel@wdc.com> > --- > arch/riscv/include/asm/clint.h | 39 ------------------------------ > arch/riscv/kernel/Makefile | 2 +- > arch/riscv/kernel/clint.c | 44 ---------------------------------- > arch/riscv/kernel/setup.c | 2 -- > arch/riscv/kernel/smp.c | 1 - > arch/riscv/kernel/smpboot.c | 1 - > 6 files changed, 1 insertion(+), 88 deletions(-) > delete mode 100644 arch/riscv/include/asm/clint.h > delete mode 100644 arch/riscv/kernel/clint.c > > diff --git a/arch/riscv/include/asm/clint.h b/arch/riscv/include/asm/clint.h > deleted file mode 100644 > index a279b17a6aad..000000000000 > --- a/arch/riscv/include/asm/clint.h > +++ /dev/null > @@ -1,39 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 */ > -#ifndef _ASM_RISCV_CLINT_H > -#define _ASM_RISCV_CLINT_H 1 > - > -#include <linux/io.h> > -#include <linux/smp.h> > - > -#ifdef CONFIG_RISCV_M_MODE > -extern u32 __iomem *clint_ipi_base; > - > -void clint_init_boot_cpu(void); > - > -static inline void clint_send_ipi_single(unsigned long hartid) > -{ > - writel(1, clint_ipi_base + hartid); > -} > - > -static inline void clint_send_ipi_mask(const struct cpumask *mask) > -{ > - int cpu; > - > - for_each_cpu(cpu, mask) > - clint_send_ipi_single(cpuid_to_hartid_map(cpu)); > -} > - > -static inline void clint_clear_ipi(unsigned long hartid) > -{ > - writel(0, clint_ipi_base + hartid); > -} > -#else /* CONFIG_RISCV_M_MODE */ > -#define clint_init_boot_cpu() do { } while (0) > - > -/* stubs to for code is only reachable under IS_ENABLED(CONFIG_RISCV_M_MODE): */ > -void clint_send_ipi_single(unsigned long hartid); > -void clint_send_ipi_mask(const struct cpumask *hartid_mask); > -void clint_clear_ipi(unsigned long hartid); > -#endif /* CONFIG_RISCV_M_MODE */ > - > -#endif /* _ASM_RISCV_CLINT_H */ > diff --git a/arch/riscv/kernel/Makefile b/arch/riscv/kernel/Makefile > index d8bbd3207100..529cda705cfe 100644 > --- a/arch/riscv/kernel/Makefile > +++ b/arch/riscv/kernel/Makefile > @@ -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 > diff --git a/arch/riscv/kernel/clint.c b/arch/riscv/kernel/clint.c > deleted file mode 100644 > index 3647980d14c3..000000000000 > --- a/arch/riscv/kernel/clint.c > +++ /dev/null > @@ -1,44 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/* > - * Copyright (c) 2019 Christoph Hellwig. > - */ > - > -#include <linux/io.h> > -#include <linux/of_address.h> > -#include <linux/types.h> > -#include <asm/clint.h> > -#include <asm/csr.h> > -#include <asm/timex.h> > -#include <asm/smp.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; > - > -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(boot_cpu_hartid); > -} > diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c > index 145128a7e560..b07a583bf53b 100644 > --- a/arch/riscv/kernel/setup.c > +++ b/arch/riscv/kernel/setup.c > @@ -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> > @@ -76,7 +75,6 @@ void __init setup_arch(char **cmdline_p) > setup_bootmem(); > paging_init(); > unflatten_device_tree(); > - clint_init_boot_cpu(); > > #ifdef CONFIG_SWIOTLB > swiotlb_init(1); > diff --git a/arch/riscv/kernel/smp.c b/arch/riscv/kernel/smp.c > index 8375cc5970f6..8a23f1eb5400 100644 > --- a/arch/riscv/kernel/smp.c > +++ b/arch/riscv/kernel/smp.c > @@ -17,7 +17,6 @@ > #include <linux/seq_file.h> > #include <linux/delay.h> > > -#include <asm/clint.h> > #include <asm/sbi.h> > #include <asm/tlbflush.h> > #include <asm/cacheflush.h> > diff --git a/arch/riscv/kernel/smpboot.c b/arch/riscv/kernel/smpboot.c > index 5fe849791bf0..a6cfa9842d4b 100644 > --- a/arch/riscv/kernel/smpboot.c > +++ b/arch/riscv/kernel/smpboot.c > @@ -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>
On Fri, Jun 5, 2020 at 2:10 AM Palmer Dabbelt <palmer@dabbelt.com> wrote: > > On Thu, 21 May 2020 06:45:41 PDT (-0700), Anup Patel wrote: > > We will be having separate CLINT timer driver which will also > > provide CLINT based IPI operations so let's remove CLINT related > > code from arch/riscv directory. > > This will leave the system unbootable, which breaks bisecting. This only affects the NoMMU kernel where userspace FPDPIC work is still in-progress so NoMMU kernel is anyway not 100% complete without upstreamed userspace support. Are you suggesting to squash PATCH2, PATCH3, and PATCH4 for preserving bistability ? Regards, Anup > > > > > Signed-off-by: Anup Patel <anup.patel@wdc.com> > > --- > > arch/riscv/include/asm/clint.h | 39 ------------------------------ > > arch/riscv/kernel/Makefile | 2 +- > > arch/riscv/kernel/clint.c | 44 ---------------------------------- > > arch/riscv/kernel/setup.c | 2 -- > > arch/riscv/kernel/smp.c | 1 - > > arch/riscv/kernel/smpboot.c | 1 - > > 6 files changed, 1 insertion(+), 88 deletions(-) > > delete mode 100644 arch/riscv/include/asm/clint.h > > delete mode 100644 arch/riscv/kernel/clint.c > > > > diff --git a/arch/riscv/include/asm/clint.h b/arch/riscv/include/asm/clint.h > > deleted file mode 100644 > > index a279b17a6aad..000000000000 > > --- a/arch/riscv/include/asm/clint.h > > +++ /dev/null > > @@ -1,39 +0,0 @@ > > -/* SPDX-License-Identifier: GPL-2.0 */ > > -#ifndef _ASM_RISCV_CLINT_H > > -#define _ASM_RISCV_CLINT_H 1 > > - > > -#include <linux/io.h> > > -#include <linux/smp.h> > > - > > -#ifdef CONFIG_RISCV_M_MODE > > -extern u32 __iomem *clint_ipi_base; > > - > > -void clint_init_boot_cpu(void); > > - > > -static inline void clint_send_ipi_single(unsigned long hartid) > > -{ > > - writel(1, clint_ipi_base + hartid); > > -} > > - > > -static inline void clint_send_ipi_mask(const struct cpumask *mask) > > -{ > > - int cpu; > > - > > - for_each_cpu(cpu, mask) > > - clint_send_ipi_single(cpuid_to_hartid_map(cpu)); > > -} > > - > > -static inline void clint_clear_ipi(unsigned long hartid) > > -{ > > - writel(0, clint_ipi_base + hartid); > > -} > > -#else /* CONFIG_RISCV_M_MODE */ > > -#define clint_init_boot_cpu() do { } while (0) > > - > > -/* stubs to for code is only reachable under IS_ENABLED(CONFIG_RISCV_M_MODE): */ > > -void clint_send_ipi_single(unsigned long hartid); > > -void clint_send_ipi_mask(const struct cpumask *hartid_mask); > > -void clint_clear_ipi(unsigned long hartid); > > -#endif /* CONFIG_RISCV_M_MODE */ > > - > > -#endif /* _ASM_RISCV_CLINT_H */ > > diff --git a/arch/riscv/kernel/Makefile b/arch/riscv/kernel/Makefile > > index d8bbd3207100..529cda705cfe 100644 > > --- a/arch/riscv/kernel/Makefile > > +++ b/arch/riscv/kernel/Makefile > > @@ -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 > > diff --git a/arch/riscv/kernel/clint.c b/arch/riscv/kernel/clint.c > > deleted file mode 100644 > > index 3647980d14c3..000000000000 > > --- a/arch/riscv/kernel/clint.c > > +++ /dev/null > > @@ -1,44 +0,0 @@ > > -// SPDX-License-Identifier: GPL-2.0 > > -/* > > - * Copyright (c) 2019 Christoph Hellwig. > > - */ > > - > > -#include <linux/io.h> > > -#include <linux/of_address.h> > > -#include <linux/types.h> > > -#include <asm/clint.h> > > -#include <asm/csr.h> > > -#include <asm/timex.h> > > -#include <asm/smp.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; > > - > > -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(boot_cpu_hartid); > > -} > > diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c > > index 145128a7e560..b07a583bf53b 100644 > > --- a/arch/riscv/kernel/setup.c > > +++ b/arch/riscv/kernel/setup.c > > @@ -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> > > @@ -76,7 +75,6 @@ void __init setup_arch(char **cmdline_p) > > setup_bootmem(); > > paging_init(); > > unflatten_device_tree(); > > - clint_init_boot_cpu(); > > > > #ifdef CONFIG_SWIOTLB > > swiotlb_init(1); > > diff --git a/arch/riscv/kernel/smp.c b/arch/riscv/kernel/smp.c > > index 8375cc5970f6..8a23f1eb5400 100644 > > --- a/arch/riscv/kernel/smp.c > > +++ b/arch/riscv/kernel/smp.c > > @@ -17,7 +17,6 @@ > > #include <linux/seq_file.h> > > #include <linux/delay.h> > > > > -#include <asm/clint.h> > > #include <asm/sbi.h> > > #include <asm/tlbflush.h> > > #include <asm/cacheflush.h> > > diff --git a/arch/riscv/kernel/smpboot.c b/arch/riscv/kernel/smpboot.c > > index 5fe849791bf0..a6cfa9842d4b 100644 > > --- a/arch/riscv/kernel/smpboot.c > > +++ b/arch/riscv/kernel/smpboot.c > > @@ -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>
diff --git a/arch/riscv/include/asm/clint.h b/arch/riscv/include/asm/clint.h deleted file mode 100644 index a279b17a6aad..000000000000 --- a/arch/riscv/include/asm/clint.h +++ /dev/null @@ -1,39 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef _ASM_RISCV_CLINT_H -#define _ASM_RISCV_CLINT_H 1 - -#include <linux/io.h> -#include <linux/smp.h> - -#ifdef CONFIG_RISCV_M_MODE -extern u32 __iomem *clint_ipi_base; - -void clint_init_boot_cpu(void); - -static inline void clint_send_ipi_single(unsigned long hartid) -{ - writel(1, clint_ipi_base + hartid); -} - -static inline void clint_send_ipi_mask(const struct cpumask *mask) -{ - int cpu; - - for_each_cpu(cpu, mask) - clint_send_ipi_single(cpuid_to_hartid_map(cpu)); -} - -static inline void clint_clear_ipi(unsigned long hartid) -{ - writel(0, clint_ipi_base + hartid); -} -#else /* CONFIG_RISCV_M_MODE */ -#define clint_init_boot_cpu() do { } while (0) - -/* stubs to for code is only reachable under IS_ENABLED(CONFIG_RISCV_M_MODE): */ -void clint_send_ipi_single(unsigned long hartid); -void clint_send_ipi_mask(const struct cpumask *hartid_mask); -void clint_clear_ipi(unsigned long hartid); -#endif /* CONFIG_RISCV_M_MODE */ - -#endif /* _ASM_RISCV_CLINT_H */ diff --git a/arch/riscv/kernel/Makefile b/arch/riscv/kernel/Makefile index d8bbd3207100..529cda705cfe 100644 --- a/arch/riscv/kernel/Makefile +++ b/arch/riscv/kernel/Makefile @@ -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 diff --git a/arch/riscv/kernel/clint.c b/arch/riscv/kernel/clint.c deleted file mode 100644 index 3647980d14c3..000000000000 --- a/arch/riscv/kernel/clint.c +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Copyright (c) 2019 Christoph Hellwig. - */ - -#include <linux/io.h> -#include <linux/of_address.h> -#include <linux/types.h> -#include <asm/clint.h> -#include <asm/csr.h> -#include <asm/timex.h> -#include <asm/smp.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; - -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(boot_cpu_hartid); -} diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c index 145128a7e560..b07a583bf53b 100644 --- a/arch/riscv/kernel/setup.c +++ b/arch/riscv/kernel/setup.c @@ -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> @@ -76,7 +75,6 @@ void __init setup_arch(char **cmdline_p) setup_bootmem(); paging_init(); unflatten_device_tree(); - clint_init_boot_cpu(); #ifdef CONFIG_SWIOTLB swiotlb_init(1); diff --git a/arch/riscv/kernel/smp.c b/arch/riscv/kernel/smp.c index 8375cc5970f6..8a23f1eb5400 100644 --- a/arch/riscv/kernel/smp.c +++ b/arch/riscv/kernel/smp.c @@ -17,7 +17,6 @@ #include <linux/seq_file.h> #include <linux/delay.h> -#include <asm/clint.h> #include <asm/sbi.h> #include <asm/tlbflush.h> #include <asm/cacheflush.h> diff --git a/arch/riscv/kernel/smpboot.c b/arch/riscv/kernel/smpboot.c index 5fe849791bf0..a6cfa9842d4b 100644 --- a/arch/riscv/kernel/smpboot.c +++ b/arch/riscv/kernel/smpboot.c @@ -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>
We will be having separate CLINT timer driver which will also provide CLINT based IPI operations so let's remove CLINT related code from arch/riscv directory. Signed-off-by: Anup Patel <anup.patel@wdc.com> --- arch/riscv/include/asm/clint.h | 39 ------------------------------ arch/riscv/kernel/Makefile | 2 +- arch/riscv/kernel/clint.c | 44 ---------------------------------- arch/riscv/kernel/setup.c | 2 -- arch/riscv/kernel/smp.c | 1 - arch/riscv/kernel/smpboot.c | 1 - 6 files changed, 1 insertion(+), 88 deletions(-) delete mode 100644 arch/riscv/include/asm/clint.h delete mode 100644 arch/riscv/kernel/clint.c