C-SKY(csky) Linux Kernel Driver
Subsystems (5)
v10 cover C-SKY(csky) Linux Kernel Driver
This is about 10th patchset for C-SKY linux drivers. All patches have been checked by checkpatch.pl.
Any feedback is welcome, thx for all people review my patchset.
If you finish the review for the patchset, please give a Reviewed-By / Acked-By and I'll record it in the commit-msg.
Guo Ren (8):
irqchip: add C-SKY SMP interrupt controller
dt-bindings: interrupt-controller: C-SKY SMP intc
irqchip: add C-SKY APB bus interrupt controller
dt-bindings: interrupt-controller: C-SKY APB intc
clocksource: add C-SKY SMP timer
dt-bindings: timer: C-SKY Multi-processor timer
clocksource: add gx6605s SOC system timer
dt-bindings: timer: gx6605s SOC timer
.../interrupt-controller/csky,apb-intc.txt | 62 +++++ .../bindings/interrupt-controller/csky,mpintc.txt | 40 +++ .../bindings/timer/csky,gx6605s-timer.txt | 42 ++++ .../devicetree/bindings/timer/csky,mptimer.txt | 42 ++++ drivers/clocksource/Kconfig | 18 ++ drivers/clocksource/Makefile | 2 + drivers/clocksource/timer-gx6605s.c | 154 ++++++++++++ drivers/clocksource/timer-mp-csky.c | 173 +++++++++++++ drivers/irqchip/Kconfig | 17 ++ drivers/irqchip/Makefile | 2 + drivers/irqchip/irq-csky-apb-intc.c | 274 +++++++++++++++++++++ drivers/irqchip/irq-csky-mpintc.c | 197 +++++++++++++++ include/linux/cpuhotplug.h | 1 + 13 files changed, 1024 insertions(+) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/csky,apb-intc.txt create mode 100644 Documentation/devicetree/bindings/interrupt-controller/csky,mpintc.txt create mode 100644 Documentation/devicetree/bindings/timer/csky,gx6605s-timer.txt create mode 100644 Documentation/devicetree/bindings/timer/csky,mptimer.txt create mode 100644 drivers/clocksource/timer-gx6605s.c create mode 100644 drivers/clocksource/timer-mp-csky.c create mode 100644 drivers/irqchip/irq-csky-apb-intc.c create mode 100644 drivers/irqchip/irq-csky-mpintc.c
Signature · 1 line
2.7.4
PATCH v10 1/8 irqchip: add C-SKY SMP interrupt controller
- Irq-csky-mpintc is C-SKY smp system interrupt controller and it could support 16 soft irqs, 16 private irqs, and 992 max common irqs.
Changelog:
- pass checkpatch.pl
- Move IPI_IRQ into the driver
- Remove irq_set_default_host() and use set_ipi_irq_mapping()
- Change name with upstream feed-back
- Change irq map, reserve soft_irq & private_irq space
- Add License and Copyright
- Support set_affinity for irq balance in SMP
--- drivers/irqchip/Kconfig | 9 ++ drivers/irqchip/Makefile | 1 + drivers/irqchip/irq-csky-mpintc.c | 197 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 207 insertions(+) create mode 100644 drivers/irqchip/irq-csky-mpintc.c
drivers/irqchip/Kconfig +9 -0
@@ -371,6 +371,15 @@ config QCOM_PDC Power Domain Controller driver to manage and configure wakeup IRQs for Qualcomm Technologies Inc (QTI) mobile chips. +config CSKY_MPINTC + bool "C-SKY Multi Processor Interrupt Controller" + depends on CSKY + help + Say yes here to enable C-SKY SMP interrupt controller driver used + for C-SKY SMP system. + In fact it's not mmio map in hw and it use ld/st to visit the + controller's register inside CPU. + endmenu config SIFIVE_PLIC
drivers/irqchip/Makefile +1 -0
@@ -87,4 +87,5 @@ obj-$(CONFIG_MESON_IRQ_GPIO) += irq-meson-gpio.o obj-$(CONFIG_GOLDFISH_PIC) += irq-goldfish-pic.o obj-$(CONFIG_NDS32) += irq-ativic32.o obj-$(CONFIG_QCOM_PDC) += qcom-pdc.o +obj-$(CONFIG_CSKY_MPINTC) += irq-csky-mpintc.o obj-$(CONFIG_SIFIVE_PLIC) += irq-sifive-plic.o
drivers/irqchip/irq-csky-mpintc.c new file +197 -0
197 lines not on this page · raw message
Signature · 1 line
2.7.4
Re: [PATCH V10 1/8] irqchip: add C-SKY SMP interrupt controller
Hi Guo,
Quoted 182 lines · Guo Ren
- Irq-csky-mpintc is C-SKY smp system interrupt controller and it could support 16 soft irqs, 16 private irqs, and 992 max common irqs.
Changelog:
- pass checkpatch.pl
- MoveIPI_IRQinto the driver
- Removeirq_set_default_host()and useset_ipi_irq_mapping()
- Change name with upstream feed-back
- Change irq map, reservesoft_irq&private_irqspace
- Add License and Copyright
- Supportset_affinityfor irq balance in SMPSigned-off-by Guo Ren <[email protected]>--- drivers/irqchip/Kconfig | 9 ++ drivers/irqchip/Makefile | 1 + drivers/irqchip/irq-csky-mpintc.c | 197 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 207 insertions(+)create mode 100644
drivers/irqchip/irq-csky-mpintc.cdrivers/irqchip/Kconfig +9
-0@@ -371,6 +371,15 @@ config QCOM_PDC Power Domain Controller driver to manage and configure wakeup IRQs for Qualcomm Technologies Inc (QTI) mobile chips. +config CSKY_MPINTC + bool "C-SKY Multi Processor Interrupt Controller" + depends on CSKY + help + Say yes here to enable C-SKY SMP interrupt controller driver used + for C-SKY SMP system. + In fact it's not mmio map in hw and it use ld/st to visit the + controller's register inside CPU. + endmenu config SIFIVE_PLICdrivers/irqchip/Makefile +1
-0@@ -87,4 +87,5 @@ obj-$(CONFIG_MESON_IRQ_GPIO) += irq-meson-gpio.o obj-$(CONFIG_GOLDFISH_PIC) += irq-goldfish-pic.o obj-$(CONFIG_NDS32) += irq-ativic32.o obj-$(CONFIG_QCOM_PDC) += qcom-pdc.o +obj-$(CONFIG_CSKY_MPINTC) += irq-csky-mpintc.o obj-$(CONFIG_SIFIVE_PLIC) += irq-sifive-plic.odrivers/irqchip/irq-csky-mpintc.c new file +125
-0@@ -0,0 +1,197 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/of.h> +#include <linux/of_address.h> +#include <linux/module.h> +#include <linux/irqdomain.h> +#include <linux/irqchip.h> +#include <linux/irq.h> +#include <linux/interrupt.h> +#include <linux/smp.h> +#include <linux/io.h> +#include <asm/irq.h> +#include <asm/traps.h> +#include <asm/reg_ops.h> + +static struct irq_domain *root_domain; +static void __iomem *INTCG_base; +static void __iomem *INTCL_base; + +#define IPI_IRQ 15 +#define INTC_IRQS 256 +#define COMM_IRQ_BASE 32 + +#define INTCG_SIZE 0x8000 +#define INTCL_SIZE 0x1000 + +#define INTCG_ICTLR 0x0 +#define INTCG_CICFGR 0x100 +#define INTCG_CIDSTR 0x1000 + +#define INTCL_PICTLR 0x0 +#define INTCL_SIGR 0x60 +#define INTCL_HPPIR 0x68 +#define INTCL_RDYIR 0x6c +#define INTCL_SENR 0xa0 +#define INTCL_CENR 0xa4 +#define INTCL_CACR 0xb4 + +static DEFINE_PER_CPU(void __iomem *, intcl_reg); + +static void csky_mpintc_handler (struct pt_regs *regs) +{ +void __iomem *reg_base =this_cpu_read (intcl_reg); + +do { +handle_domain_irq (root_domain, +readl_relaxed (reg_base +INTCL_RDYIR ), + regs); + }while (readl_relaxed (reg_base +INTCL_HPPIR ) &BIT (31 )); +} + +static void csky_mpintc_enable (struct irq_data *d) +{ +void __iomem *reg_base =this_cpu_read (intcl_reg); + +writel_relaxed (d->hwirq, reg_base +INTCL_SENR ); +} + +static void csky_mpintc_disable (struct irq_data *d) +{ +void __iomem *reg_base =this_cpu_read (intcl_reg); + +writel_relaxed (d->hwirq, reg_base +INTCL_CENR ); +} + +static void csky_mpintc_eoi (struct irq_data *d) +{ +void __iomem *reg_base =this_cpu_read (intcl_reg); + +writel_relaxed (d->hwirq, reg_base +INTCL_CACR ); +} + +#ifdef CONFIG_SMP +static int csky_irq_set_affinity (struct irq_data *d, +const struct cpumask *mask_val, +bool force) +{ +unsigned int cpu; +unsigned int offset =4 * (d->hwirq -COMM_IRQ_BASE ); + +if (!force) + cpu =cpumask_any_and (mask_val, cpu_online_mask); +else + cpu =cpumask_first (mask_val); + +if (cpu >= nr_cpu_ids) +return -EINVAL ; + +/* Enable interrupt destination */ + cpu |=BIT (31 ); + +writel_relaxed (cpu, INTCG_base +INTCG_CIDSTR + offset); + +irq_data_update_effective_affinity (d,cpumask_of (cpu)); + +return IRQ_SET_MASK_OK_DONE ; +} +#endif + +static struct irq_chip csky_irq_chip = { + .name ="C-SKY SMP Intc" , + .irq_eoi = csky_mpintc_eoi, + .irq_enable = csky_mpintc_enable, + .irq_disable = csky_mpintc_disable, +#ifdef CONFIG_SMP + .irq_set_affinity = csky_irq_set_affinity, +#endif +}; + +static int csky_irqdomain_map (struct irq_domain *d,unsigned int irq, +irq_hw_number_t hwirq) +{ +if (hwirq <COMM_IRQ_BASE ) { +irq_set_percpu_devid (irq); +irq_set_chip_and_handler (irq, &csky_irq_chip, + handle_percpu_irq); + }else { +irq_set_chip_and_handler (irq, &csky_irq_chip, + handle_fasteoi_irq); + } + +return 0 ;
drivers/irqchip/irq-csky-mpintc.c line 135
Quoted 10 lines
drivers/irqchip/irq-csky-mpintc.c new file +10
-0+} + +static const struct irq_domain_ops csky_irqdomain_ops = { + .map = csky_irqdomain_map, + .xlate = irq_domain_xlate_onecell, +}; + +#ifdef CONFIG_SMP +static void csky_mpintc_send_ipi (const unsigned long *mask) +{
Why isn't this a cpumask? It should be this driver's job to convert the cpumask to an interrupt-controller specific representation, and not the SMP code's.
Quoted 47 lines
drivers/irqchip/irq-csky-mpintc.c new file +47
-0+void __iomem *reg_base =this_cpu_read (intcl_reg); + +/* +* INTCL_SIGR[3:0] INTID +* INTCL_SIGR[8:15] CPUMASK +*/ +writel_relaxed ((*mask) <<8 |IPI_IRQ , reg_base +INTCL_SIGR ); +} + +static int csky_mpintc_ipi_irq_mapping (void ) +{ +return irq_create_mapping (root_domain,IPI_IRQ ); +} +#endif + +/* C-SKY multi processor interrupt controller */ +static int __init +csky_mpintc_init (struct device_node *node,struct device_node *parent) +{ +unsigned int cpu, nr_irq; +int ret; + +if (parent) +return 0 ; + + ret =of_property_read_u32 (node,"csky,num-irqs" , &nr_irq); +if (ret <0 ) + nr_irq =INTC_IRQS ; + +if (INTCG_base ==NULL ) { + INTCG_base =ioremap (mfcr ("cr<31, 14>" ), +INTCL_SIZE *nr_cpu_ids +INTCG_SIZE ); +if (INTCG_base ==NULL ) +return -EIO ; + + INTCL_base = INTCG_base +INTCG_SIZE ; + +writel_relaxed (BIT (0 ), INTCG_base +INTCG_ICTLR ); + } + + root_domain =irq_domain_add_linear (node, nr_irq, &csky_irqdomain_ops, +NULL ); +if (!root_domain) +return -ENXIO ; + +/* for every cpu */ +for_each_present_cpu (cpu) {
drivers/irqchip/irq-csky-mpintc.c line 192
Quoted 10 lines
drivers/irqchip/irq-csky-mpintc.c new file +10
-0+per_cpu (intcl_reg, cpu) = INTCL_base + (INTCL_SIZE * cpu); +writel_relaxed (BIT (0 ),per_cpu (intcl_reg, cpu) +INTCL_PICTLR ); + } + +set_handle_irq (&csky_mpintc_handler); + +#ifdef CONFIG_SMP +set_send_ipi (&csky_mpintc_send_ipi); + +set_ipi_irq_mapping (&csky_mpintc_ipi_irq_mapping);
Since you seem to be inventing a new set_send_ipi callback, why don't you define it as:
void set_send_ipi(void (*func)(const struct cpumask *),
unsigned int ipi_irq);
after having created the mapping for the IPI interrupt? It would avoid this rather pointless mapping callback.
Thanks,
M.
Signature · 1 line
Jazz is not dead. It just smells funny...
Re: [PATCH V10 1/8] irqchip: add C-SKY SMP interrupt controller
Hi Marc,
Quoted 11 lines · Marc Zyngier
Hi Guo,
Quoted 8 lines · Guo Ren
- Irq-csky-mpintc is C-SKY smp system interrupt controller and it could support 16 soft irqs, 16 private irqs, and 992 max common irqs.
Changelog:
- pass checkpatch.pl
- MoveIPI_IRQinto the driver
- Removeirq_set_default_host()and useset_ipi_irq_mapping()
[...]
Quoted 7 lines
drivers/irqchip/irq-csky-mpintc.c line 135
Quoted 3 lines
drivers/irqchip/irq-csky-mpintc.c new file +3
-0+#ifdef CONFIG_SMP +static void csky_mpintc_send_ipi (const unsigned long *mask) +{Why isn't this a cpumask? It should be this driver's job to convert the cpumask to an interrupt-controller specific representation, and not the SMP code's.
Ok, use cpumask.
[...]
Quoted 8 lines
drivers/irqchip/irq-csky-mpintc.c line 192
Quoted 4 lines
drivers/irqchip/irq-csky-mpintc.c new file +4
-0+#ifdef CONFIG_SMP +set_send_ipi (&csky_mpintc_send_ipi); + +set_ipi_irq_mapping (&csky_mpintc_ipi_irq_mapping);Since you seem to be inventing a new
set_send_ipicallback, why don't you define it as:
Quoted 4 lines
void set_send_ipi(void (*func)(const struct cpumask *),
unsigned int ipi_irq);after having created the mapping for the IPI interrupt? It would avoid this rather pointless mapping callback.
I'll define it to:
void set_send_ipi(void (*func)(const struct cpumask *));
IPI_IRQ only use software-irq-15 in mpintc driver, so arch needn't care about irq-num.
/* * INTCL_SIGR[3:0] INTID * INTCL_SIGR[8:15] CPUMASK */ writel_relaxed((*mask) << 8 | IPI_IRQ, reg_base + INTCL_SIGR);
We direct put IPI_IRQ to the hw-reg for the target core.
Best Regards
Guo Ren
Re: [PATCH V10 1/8] irqchip: add C-SKY SMP interrupt controller
Quoted 41 lines · Guo Ren
Hi Marc,
Quoted 11 lines · Marc Zyngier
Hi Guo,
Quoted 8 lines · Guo Ren
- Irq-csky-mpintc is C-SKY smp system interrupt controller and it could support 16 soft irqs, 16 private irqs, and 992 max common irqs.
Changelog:
- pass checkpatch.pl
- MoveIPI_IRQinto the driver
- Removeirq_set_default_host()and useset_ipi_irq_mapping()[...]
Quoted 7 lines
drivers/irqchip/irq-csky-mpintc.c line 135
Quoted 3 lines
drivers/irqchip/irq-csky-mpintc.c new file +3
-0+#ifdef CONFIG_SMP +static void csky_mpintc_send_ipi (const unsigned long *mask) +{Why isn't this a cpumask? It should be this driver's job to convert the cpumask to an interrupt-controller specific representation, and not the SMP code's.
Ok, use cpumask.
[...]
Quoted 8 lines
drivers/irqchip/irq-csky-mpintc.c line 192
Quoted 4 lines
drivers/irqchip/irq-csky-mpintc.c new file +4
-0+#ifdef CONFIG_SMP +set_send_ipi (&csky_mpintc_send_ipi); + +set_ipi_irq_mapping (&csky_mpintc_ipi_irq_mapping);Since you seem to be inventing a new
set_send_ipicallback, why don't you define it as:Quoted 4 lines
void set_send_ipi(void (*func)(const struct cpumask *),
unsigned int ipi_irq);after having created the mapping for the IPI interrupt? It would avoid this rather pointless mapping callback.
Quoted 6 lines
I'll define it to:
void
set_send_ipi(void (*func)(const struct cpumask *));
IPI_IRQonly use software-irq-15 in mpintc driver, so arch needn't care about irq-num.
Except that your SMP code does a request_irq on the result of create_mapping. Who is going to do that if you don't pass the Linux irq around?
Quoted 8 lines
/* * INTCL_SIGR[3:0] INTID * INTCL_SIGR[8:15] CPUMASK */ writel_relaxed((*mask) << 8 | IPI_IRQ, reg_base + INTCL_SIGR);We direct put
IPI_IRQto the hw-reg for the target core.
I can see that, but that doesn't solve the issue outlined above.
Thanks,
M.
Signature · 1 line
Jazz is not dead. It just smells funny...
Re: [PATCH V10 1/8] irqchip: add C-SKY SMP interrupt controller
Hi, Marc,
Quoted 15 lines · Marc Zyngier
Quoted 15 lines
Quoted 8 lines
drivers/irqchip/irq-csky-mpintc.c line 192
Quoted 4 lines
drivers/irqchip/irq-csky-mpintc.c new file +4
-0+#ifdef CONFIG_SMP +set_send_ipi (&csky_mpintc_send_ipi); + +set_ipi_irq_mapping (&csky_mpintc_ipi_irq_mapping);Since you seem to be inventing a new
set_send_ipicallback, why don't you define it as:Quoted 4 lines
void set_send_ipi(void (*func)(const struct cpumask *),
unsigned int ipi_irq);after having created the mapping for the IPI interrupt? It would avoid this rather pointless mapping callback.
I'll define it to:
Quoted 8 lines
Quoted 4 lines
void
set_send_ipi(void (*func)(const struct cpumask *));
IPI_IRQonly use software-irq-15 in mpintc driver, so arch needn't care about irq-num.Except that your SMP code does a
request_irqon the result ofcreate_mapping. Who is going to do that if you don't pass the Linux irq around?
Yes, My SMP code does a request_irq on the result of create_mapping. Here is my smp.c code and it use a result of create_mapping by arch_ipi_irq_mapping() callback in irq-csky-mpintc.c
void __init setup_smp_ipi(void)
{
int rc;
ipi_irq = arch_ipi_irq_mapping();
if (ipi_irq == 0)
panic("%s IRQ mapping failed\n", __func__);
rc = request_percpu_irq(ipi_irq, handle_ipi, "IPI Interrupt",
&ipi_dummy_dev);
if (rc)
panic("%s IRQ request failed\n", __func__);
enable_smp_ipi();
}Best Regards
Guo Ren
PATCH v10 2/8 dt-bindings: interrupt-controller: C-SKY SMP intc
In reply to Guo RenDt-bindings doc about C-SKY Multi-processors interrupt controller.
Changelog:
- Should be: '#interrupt-cells' not 'interrupt-cells'
--- .../bindings/interrupt-controller/csky,mpintc.txt | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/csky,mpintc.txt
Documentation/devicetree/bindings/interrupt-controller/csky,mpintc.txt new file +40 -0
@@ -0,0 +1,40 @@ +=========================================== +C-SKY Multi-processors Interrupt Controller +=========================================== + +C-SKY Multi-processors Interrupt Controller is designed for ck807/ck810/ck860 +SMP soc, and it also could be used in non-SMP system. + +Interrupt number definition: + + 0-15 : software irq, and we use 15 as our IPI_IRQ. + 16-31 : private irq, and we use 16 as the co-processor timer. + 31-1024: common irq for soc ip. + +============================= +intc node bindings definition +============================= + + Description: Describes SMP interrupt controller + + PROPERTIES + + - compatible + Usage: required + Value type: <string> + Definition: must be "csky,mpintc" + - #interrupt-cells + Usage: required + Value type: <u32> + Definition: must be <1> + - interrupt-controller: + Usage: required + +Examples: +--------- + + intc: interrupt-controller { + compatible = "csky,mpintc"; + #interrupt-cells = <1>; + interrupt-controller; + };
Signature · 1 line
2.7.4
Re: [PATCH V10 2/8] dt-bindings: interrupt-controller: C-SKY SMP intc
Quoted 11 lines · Guo Ren
Dt-bindings doc about C-SKY Multi-processors interrupt controller.
Changelog:
- Should be: '#interrupt-cells' not 'interrupt-cells'Signed-off-by Guo Ren <[email protected]>--- .../bindings/interrupt-controller/csky,mpintc.txt | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/csky,mpintc.txt
PATCH v10 3/8 irqchip: add C-SKY APB bus interrupt controller
In reply to Guo Ren- irq-csky-apb-intc is a simple SOC interrupt controller which is used in a lot of C-SKY CPU SOC products.
Changelog:
- pass checkpatch.pl.
- use "bool ret" instead of "int ret"
- add support-pulse-signal in irq-csky-apb-intc.c
- change name with upstream feed-back
- add INTC_IFR to clear irq-pending
- remove CSKY_VECIRQ_LEGENCY
- change to generic irq chip framework
- add License and Copyright
- use irq_domain_add_linear instead of leagcy
--- drivers/irqchip/Kconfig | 8 ++ drivers/irqchip/Makefile | 1 + drivers/irqchip/irq-csky-apb-intc.c | 274 ++++++++++++++++++++++++++++++++++++ 3 files changed, 283 insertions(+) create mode 100644 drivers/irqchip/irq-csky-apb-intc.c
drivers/irqchip/Kconfig +8 -0
@@ -380,6 +380,14 @@ config CSKY_MPINTC In fact it's not mmio map in hw and it use ld/st to visit the controller's register inside CPU. +config CSKY_APB_INTC + bool "C-SKY APB Interrupt Controller" + depends on CSKY + help + Say yes here to enable C-SKY APB interrupt controller driver used + by C-SKY single core SOC system. It use mmio map apb-bus to visit + the controller's register. + endmenu config SIFIVE_PLIC
drivers/irqchip/Makefile +1 -0
@@ -88,4 +88,5 @@ obj-$(CONFIG_GOLDFISH_PIC) += irq-goldfish-pic.o obj-$(CONFIG_NDS32) += irq-ativic32.o obj-$(CONFIG_QCOM_PDC) += qcom-pdc.o obj-$(CONFIG_CSKY_MPINTC) += irq-csky-mpintc.o +obj-$(CONFIG_CSKY_APB_INTC) += irq-csky-apb-intc.o obj-$(CONFIG_SIFIVE_PLIC) += irq-sifive-plic.o
drivers/irqchip/irq-csky-apb-intc.c new file +274 -0
274 lines not on this page · raw message
Signature · 1 line
2.7.4
PATCH v10 4/8 dt-bindings: interrupt-controller: C-SKY APB intc
In reply to Guo Ren- Dt-bindings doc about C-SKY apb bus interrupt controller.
--- .../interrupt-controller/csky,apb-intc.txt | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/csky,apb-intc.txt
Documentation/devicetree/bindings/interrupt-controller/csky,apb-intc.txt new file +62 -0
@@ -0,0 +1,62 @@ +============================== +C-SKY APB Interrupt Controller +============================== + +C-SKY APB Interrupt Controller is a simple soc interrupt controller +on the apb bus and we only use it as root irq controller. + + - csky,apb-intc is used in a lot of csky fpgas and socs, it support 64 irq nums. + - csky,dual-apb-intc consists of 2 apb-intc and 128 irq nums supported. + - csky,gx6605s-intc is gx6605s soc internal irq interrupt controller, 64 irq nums. + +============================= +intc node bindings definition +============================= + + Description: Describes APB interrupt controller + + PROPERTIES + + - compatible + Usage: required + Value type: <string> + Definition: must be "csky,apb-intc" + "csky,dual-apb-intc" + "csky,gx6605s-intc" + - #interrupt-cells + Usage: required + Value type: <u32> + Definition: must be <1> + - reg + Usage: required + Value type: <u32 u32> + Definition: <phyaddr size> in soc from cpu view + - interrupt-controller: + Usage: required + - csky,support-pulse-signal: + Usage: select + Description: to support pulse signal flag + +Examples: +--------- + + intc: interrupt-controller@500000 { + compatible = "csky,apb-intc"; + #interrupt-cells = <1>; + reg = <0x00500000 0x400>; + interrupt-controller; + }; + + intc: interrupt-controller@500000 { + compatible = "csky,dual-apb-intc"; + #interrupt-cells = <1>; + reg = <0x00500000 0x400>; + interrupt-controller; + }; + + intc: interrupt-controller@500000 { + compatible = "csky,gx6605s-intc"; + #interrupt-cells = <1>; + reg = <0x00500000 0x400>; + interrupt-controller; + };
Signature · 1 line
2.7.4
PATCH v10 5/8 clocksource: add C-SKY SMP timer
In reply to Guo RenThis timer is used by SMP system and use mfcr/mtcr instruction to access the regs.
Changelog:
- Add rollback for timer_of_cleanup.
- Use request_percpu_irq separate from time_of.
- Remove #define CPUHP_AP_CSKY_TIMER_STARTING.
- Add CPUHP_AP_CSKY_TIMER_STARTING in cpuhotplug.h.
- Support csky mp timer alpha version.
- Just use low-counter with 32bit width as clocksource.
- Coding convention with upstream feed-back.
--- drivers/clocksource/Kconfig | 10 +++ drivers/clocksource/Makefile | 1 + drivers/clocksource/timer-mp-csky.c | 173 ++++++++++++++++++++++++++++++++++++ include/linux/cpuhotplug.h | 1 + 4 files changed, 185 insertions(+) create mode 100644 drivers/clocksource/timer-mp-csky.c
drivers/clocksource/Kconfig +10 -0
@@ -620,4 +620,14 @@ config RISCV_TIMER is accessed via both the SBI and the rdcycle instruction. This is required for all RISC-V systems. +config CSKY_MP_TIMER + bool "SMP Timer for the C-SKY platform" + depends on CSKY + select TIMER_OF + help + Say yes here to enable C-SKY SMP timer driver used for C-SKY SMP + system. + csky,mptimer is not only used in SMP system, it also could be used + single core system. It's not a mmio reg and it use mtcr/mfcr instruction. + endmenu
drivers/clocksource/Makefile +1 -0
@@ -79,3 +79,4 @@ obj-$(CONFIG_CLKSRC_ST_LPC) += clksrc_st_lpc.o obj-$(CONFIG_X86_NUMACHIP) += numachip.o obj-$(CONFIG_ATCPIT100_TIMER) += timer-atcpit100.o obj-$(CONFIG_RISCV_TIMER) += riscv_timer.o +obj-$(CONFIG_CSKY_MP_TIMER) += timer-mp-csky.o
drivers/clocksource/timer-mp-csky.c new file +173 -0
173 lines not on this page · raw message
include/linux/cpuhotplug.h +1 -0
@@ -126,6 +126,7 @@ enum cpuhp_state {CPUHP_AP_MIPS_GIC_TIMER_STARTING ,CPUHP_AP_ARC_TIMER_STARTING ,CPUHP_AP_RISCV_TIMER_STARTING , +CPUHP_AP_CSKY_TIMER_STARTING ,CPUHP_AP_KVM_STARTING ,CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING , CPUHP_AP_KVM_ARM_VGIC_STARTING,
Signature · 1 line
2.7.4
Re: [PATCH V10 5/8] clocksource: add C-SKY SMP timer
Quoted 28 lines · Guo Ren
This timer is used by SMP system and use mfcr/mtcr instruction to access the regs.
Changelog:
- Add rollback fortimer_of_cleanup.
- Userequest_percpu_irqseparate fromtime_of.
- Remove #defineCPUHP_AP_CSKY_TIMER_STARTING.
- AddCPUHP_AP_CSKY_TIMER_STARTINGincpuhotplug.h.
- Support csky mp timer alpha version.
- Just use low-counter with 32bit width as clocksource.
- Coding convention with upstream feed-back.Signed-off-by Guo Ren <[email protected]>--- drivers/clocksource/Kconfig | 10 +++ drivers/clocksource/Makefile | 1 + drivers/clocksource/timer-mp-csky.c | 173 ++++++++++++++++++++++++++++++++++++ include/linux/cpuhotplug.h | 1 + 4 files changed, 185 insertions(+) create mode 100644 drivers/clocksource/timer-mp-csky.cdrivers/clocksource/Kconfig +0
-0@@ -620,4 +620,14 @@ config RISCV_TIMER is accessed via both the SBI and the rdcycle instruction. This is required for all RISC-V systems.
drivers/clocksource/Kconfig config RISCV_TIMER · line 631
Quoted 10 lines
drivers/clocksource/Kconfig +9
-0+config CSKY_MP_TIMER + bool "SMP Timer for the C-SKY platform" + depends on CSKY + select TIMER_OF + help + Say yes here to enable C-SKY SMP timer driver used for C-SKY SMP + system. + csky,mptimer is not only used in SMP system, it also could be used + single core system. It's not a mmio reg and it use mtcr/mfcr instruction.
... COMPILE_TEST :)
Signature · 5 lines
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog
Re: [PATCH V10 5/8] clocksource: add C-SKY SMP timer
Hi Daniel,
Quoted 30 lines · Daniel Lezcano
Quoted 29 lines · Guo Ren
This timer is used by SMP system and use mfcr/mtcr instruction to access the regs.
Changelog:
- Add rollback fortimer_of_cleanup.
- Userequest_percpu_irqseparate fromtime_of.
- Remove #defineCPUHP_AP_CSKY_TIMER_STARTING.
- AddCPUHP_AP_CSKY_TIMER_STARTINGincpuhotplug.h.
- Support csky mp timer alpha version.
- Just use low-counter with 32bit width as clocksource.
- Coding convention with upstream feed-back.Signed-off-by Guo Ren <[email protected]>--- drivers/clocksource/Kconfig | 10 +++ drivers/clocksource/Makefile | 1 + drivers/clocksource/timer-mp-csky.c | 173 ++++++++++++++++++++++++++++++++++++ include/linux/cpuhotplug.h | 1 + 4 files changed, 185 insertions(+) create mode 100644 drivers/clocksource/timer-mp-csky.cdrivers/clocksource/Kconfig +0
-0@@ -620,4 +620,14 @@ config RISCV_TIMER is accessed via both the SBI and the rdcycle instruction. This is required for all RISC-V systems.
Quoted 12 lines
drivers/clocksource/Kconfig config RISCV_TIMER · line 631
Quoted 9 lines
drivers/clocksource/Kconfig +9
-0+config CSKY_MP_TIMER + bool "SMP Timer for the C-SKY platform" + depends on CSKY + select TIMER_OF + help + Say yes here to enable C-SKY SMP timer driver used for C-SKY SMP + system. + csky,mptimer is not only used in SMP system, it also could be used + single core system. It's not a mmio reg and it use mtcr/mfcr instruction....
COMPILE_TEST:)
Ops... I forgot it, should be:
bool "SMP Timer for the C-SKY platform" if COMPILE_TEST
Thx for remind and any other review is welcome.
Best Regards
Guo Ren
PATCH v10 6/8 dt-bindings: timer: C-SKY Multi-processor timer
In reply to Guo RenDt-bingdings doc for C-SKY SMP system setting.
Changelog:
- Drop the interrupt-parent.
--- .../devicetree/bindings/timer/csky,mptimer.txt | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Documentation/devicetree/bindings/timer/csky,mptimer.txt
Documentation/devicetree/bindings/timer/csky,mptimer.txt new file +42 -0
@@ -0,0 +1,42 @@ +============================ +C-SKY Multi-processors Timer +============================ + +C-SKY multi-processors timer is designed for C-SKY SMP system and the +regs is accessed by cpu co-processor 4 registers with mtcr/mfcr. + + - PTIM_CTLR "cr<0, 14>" Control reg to start reset timer. + - PTIM_TSR "cr<1, 14>" Interrupt cleanup status reg. + - PTIM_CCVR "cr<3, 14>" Current counter value reg. + - PTIM_LVR "cr<6, 14>" Window value reg to triger next event. + +============================== +timer node bindings definition +============================== + + Description: Describes SMP timer + + PROPERTIES + + - compatible + Usage: required + Value type: <string> + Definition: must be "csky,mptimer" + - clocks + Usage: required + Value type: <node> + Definition: must be input clk node + - interrupts + Usage: required + Value type: <u32> + Definition: must be timer irq num defined by soc + +Examples: +--------- + + timer: timer { + compatible = "csky,mptimer"; + clocks = <&dummy_apb_clk>; + interrupts = <16>; + interrupt-parent = <&intc>; + };
Signature · 1 line
2.7.4
Re: [PATCH V10 6/8] dt-bindings: timer: C-SKY Multi-processor timer
Quoted 11 lines · Guo Ren
Dt-bingdings doc for C-SKY SMP system setting.
Changelog:
- Drop the interrupt-parent.Signed-off-by Guo Ren <[email protected]>--- .../devicetree/bindings/timer/csky,mptimer.txt | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Documentation/devicetree/bindings/timer/csky,mptimer.txt
PATCH v10 7/8 clocksource: add gx6605s SOC system timer
In reply to Guo RenChangelog:
- pass checkpatch.pl
- Add COMIPLE_TEST in Kconfig
- no cast is needed for "struct clock_event_device *ce = dev"
- remove: extra space after (u64)
- Add License and Copyright
- Use timer-of framework
- Change name with upstream feedback
- Use clksource_mmio framework
--- drivers/clocksource/Kconfig | 8 ++ drivers/clocksource/Makefile | 1 + drivers/clocksource/timer-gx6605s.c | 154 ++++++++++++++++++++++++++++++++++++ 3 files changed, 163 insertions(+) create mode 100644 drivers/clocksource/timer-gx6605s.c
drivers/clocksource/Kconfig +8 -0
@@ -630,4 +630,12 @@ config CSKY_MP_TIMER csky,mptimer is not only used in SMP system, it also could be used single core system. It's not a mmio reg and it use mtcr/mfcr instruction. +config GX6605S_TIMER + bool "Gx6605s SOC system timer driver" if COMPILE_TEST + depends on CSKY + select CLKSRC_MMIO + select TIMER_OF + help + This option enables support for gx6605s SOC's timer. + endmenu
drivers/clocksource/Makefile +1 -0
@@ -80,3 +80,4 @@ obj-$(CONFIG_X86_NUMACHIP) += numachip.o obj-$(CONFIG_ATCPIT100_TIMER) += timer-atcpit100.o obj-$(CONFIG_RISCV_TIMER) += riscv_timer.o obj-$(CONFIG_CSKY_MP_TIMER) += timer-mp-csky.o +obj-$(CONFIG_GX6605S_TIMER) += timer-gx6605s.o
drivers/clocksource/timer-gx6605s.c new file +154 -0
154 lines not on this page · raw message
Signature · 1 line
2.7.4
PATCH v10 8/8 dt-bindings: timer: gx6605s SOC timer
In reply to Guo RenDt-bindings doc for gx6605s SOC's system timer.
--- .../bindings/timer/csky,gx6605s-timer.txt | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Documentation/devicetree/bindings/timer/csky,gx6605s-timer.txt
Documentation/devicetree/bindings/timer/csky,gx6605s-timer.txt new file +42 -0
@@ -0,0 +1,42 @@ +================= +gx6605s SOC Timer +================= + +The timer is used in gx6605s soc as system timer and the driver +contain clk event and clk source. + +============================== +timer node bindings definition +============================== + + Description: Describes gx6605s SOC timer + + PROPERTIES + + - compatible + Usage: required + Value type: <string> + Definition: must be "csky,gx6605s-timer" + - reg + Usage: required + Value type: <u32 u32> + Definition: <phyaddr size> in soc from cpu view + - clocks + Usage: required + Value type: phandle + clock specifier cells + Definition: must be input clk node + - interrupt + Usage: required + Value type: <u32> + Definition: must be timer irq num defined by soc + +Examples: +--------- + + timer0: timer@20a000 { + compatible = "csky,gx6605s-timer"; + reg = <0x0020a000 0x400>; + clocks = <&dummy_apb_clk>; + interrupts = <10>; + interrupt-parent = <&intc>; + };
Signature · 1 line
2.7.4
Rob Herring
maintainerRe: [PATCH V10 8/8] dt-bindings: timer: gx6605s SOC timer
Quoted 7 lines · Guo Ren
Dt-bindings doc for gx6605s SOC's system timer.
Signed-off-by Guo Ren <[email protected]>--- .../bindings/timer/csky,gx6605s-timer.txt | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Documentation/devicetree/bindings/timer/csky,gx6605s-timer.txt
Please add acks/reviewed-by's when posting new versions.
Rob
Guo Ren
Reviewed-by Rob HerringRe: [PATCH V10 8/8] dt-bindings: timer: gx6605s SOC timer
Hi Rob,
Thx for the review.
Quoted 10 lines · Rob Herring
Quoted 7 lines · Guo Ren
Dt-bindings doc for gx6605s SOC's system timer.
Signed-off-by Guo Ren <[email protected]>--- .../bindings/timer/csky,gx6605s-timer.txt | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Documentation/devicetree/bindings/timer/csky,gx6605s-timer.txtPlease add acks/reviewed-by's when posting new versions.
Add:
OK?
Best Regards
Guo Ren