Add platform support for LSI AXM55xx
Subsystems (7)
cover Add platform support for LSI AXM55xx
Hi,
This set of patches introduces basic platform support for the LSI AXM5516 SoC. This is another 16 core machine (4x4 cluster config). Please review and provide feedback.
Regards,
Anders
Anders Berg (5):
ARM: Add platform support for LSI AXM55xx SoC
ARM: dts: Device tree for AXM55xx.
ARM: axxia: Adding defconfig for AXM55xx
power: reset: Add Axxia system reset driver
ARM: dts: axxia: Add reset controller
Documentation/devicetree/bindings/arm/axxia.txt | 12 + .../devicetree/bindings/clock/clk-axxia.txt | 88 ++++++ .../bindings/power_supply/axxia-reset.txt | 20 ++ arch/arm/Kconfig | 2 + arch/arm/Makefile | 2 + arch/arm/boot/dts/Makefile | 1 + arch/arm/boot/dts/axm5516-amarillo.dts | 51 ++++ arch/arm/boot/dts/axm5516-cpus.dtsi | 204 ++++++++++++++ arch/arm/boot/dts/axm55xx.dtsi | 311 +++++++++++++++++++++ arch/arm/configs/axm55xx_defconfig | 248 ++++++++++++++++ arch/arm/mach-axxia/Kconfig | 19 ++ arch/arm/mach-axxia/Makefile | 2 + arch/arm/mach-axxia/Makefile.boot | 2 + arch/arm/mach-axxia/axxia.c | 117 ++++++++ arch/arm/mach-axxia/axxia.h | 42 +++ arch/arm/mach-axxia/headsmp.S | 44 +++ arch/arm/mach-axxia/platsmp.c | 183 ++++++++++++ drivers/clk/Makefile | 1 + drivers/clk/clk-axxia.c | 281 +++++++++++++++++++ drivers/power/reset/Kconfig | 8 + drivers/power/reset/Makefile | 1 + drivers/power/reset/axxia-reset.c | 97 +++++++ 22 files changed, 1736 insertions(+) create mode 100644 Documentation/devicetree/bindings/arm/axxia.txt create mode 100644 Documentation/devicetree/bindings/clock/clk-axxia.txt create mode 100644 Documentation/devicetree/bindings/power_supply/axxia-reset.txt create mode 100644 arch/arm/boot/dts/axm5516-amarillo.dts create mode 100644 arch/arm/boot/dts/axm5516-cpus.dtsi create mode 100644 arch/arm/boot/dts/axm55xx.dtsi create mode 100644 arch/arm/configs/axm55xx_defconfig create mode 100644 arch/arm/mach-axxia/Kconfig create mode 100644 arch/arm/mach-axxia/Makefile create mode 100644 arch/arm/mach-axxia/Makefile.boot create mode 100644 arch/arm/mach-axxia/axxia.c create mode 100644 arch/arm/mach-axxia/axxia.h create mode 100644 arch/arm/mach-axxia/headsmp.S create mode 100644 arch/arm/mach-axxia/platsmp.c create mode 100644 drivers/clk/clk-axxia.c create mode 100644 drivers/power/reset/axxia-reset.c
Signature · 1 line
1.8.3.2
PATCH 1/5 ARM: Add platform support for LSI AXM55xx SoC
The AXM55xx family consists of devices that may contain up to 16 ARM Cortex-A15 cores (in a 4x4 cluster configuration). The cores within each cluster share an L2 cache, and the clusters are connected to each other via a CCN-504 cache coherent interconnect.
This machine requires CONFIG_ARM_LPAE enabled as all peripherals are located above 4GB in the memory map.
--- Documentation/devicetree/bindings/arm/axxia.txt | 12 + .../devicetree/bindings/clock/clk-axxia.txt | 88 +++++++ arch/arm/Kconfig | 2 + arch/arm/Makefile | 2 + arch/arm/mach-axxia/Kconfig | 19 ++ arch/arm/mach-axxia/Makefile | 2 + arch/arm/mach-axxia/Makefile.boot | 2 + arch/arm/mach-axxia/axxia.c | 117 +++++++++ arch/arm/mach-axxia/axxia.h | 42 +++ arch/arm/mach-axxia/headsmp.S | 44 ++++ arch/arm/mach-axxia/platsmp.c | 183 ++++++++++++++ drivers/clk/Makefile | 1 + drivers/clk/clk-axxia.c | 281 +++++++++++++++++++++ 13 files changed, 795 insertions(+) create mode 100644 Documentation/devicetree/bindings/arm/axxia.txt create mode 100644 Documentation/devicetree/bindings/clock/clk-axxia.txt create mode 100644 arch/arm/mach-axxia/Kconfig create mode 100644 arch/arm/mach-axxia/Makefile create mode 100644 arch/arm/mach-axxia/Makefile.boot create mode 100644 arch/arm/mach-axxia/axxia.c create mode 100644 arch/arm/mach-axxia/axxia.h create mode 100644 arch/arm/mach-axxia/headsmp.S create mode 100644 arch/arm/mach-axxia/platsmp.c create mode 100644 drivers/clk/clk-axxia.c
Documentation/devicetree/bindings/arm/axxia.txt new file +12 -0
@@ -0,0 +1,12 @@ +Axxia AXM55xx device tree bindings + +Boards using the AXM55xx SoC need to have the following properties: + +Required root node property: + + - compatible = "lsi,axm5516" + +Boards: + + LSI AXM5516 Validation board (Amarillo) + compatible = "lsi,axm5516-amarillo", "lsi,axm5516"
Documentation/devicetree/bindings/clock/clk-axxia.txt new file +88 -0
88 lines not on this page · raw message
arch/arm/Kconfig +2 -0
@@ -934,6 +934,8 @@ source "arch/arm/mach-mvebu/Kconfig" source "arch/arm/mach-at91/Kconfig" +source "arch/arm/mach-axxia/Kconfig" + source "arch/arm/mach-bcm/Kconfig" source "arch/arm/mach-bcm2835/Kconfig"
arch/arm/Makefile +2 -0
@@ -138,10 +138,12 @@ endif textofs-$(CONFIG_ARCH_MSM7X30) := 0x00208000 textofs-$(CONFIG_ARCH_MSM8X60) := 0x00208000 textofs-$(CONFIG_ARCH_MSM8960) := 0x00208000 +textofs-$(CONFIG_ARCH_AXXIA) := 0x00308000 # Machine directory name. This list is sorted alphanumerically # by CONFIG_* macro name. machine-$(CONFIG_ARCH_AT91) += at91 +machine-$(CONFIG_ARCH_AXXIA) += axxia machine-$(CONFIG_ARCH_BCM) += bcm machine-$(CONFIG_ARCH_BCM2835) += bcm2835 machine-$(CONFIG_ARCH_BERLIN) += berlin
arch/arm/mach-axxia/Kconfig new file +19 -0
@@ -0,0 +1,19 @@ +config ARCH_AXXIA + bool "LSI Axxia platforms" if (ARCH_MULTI_V7 && ARM_LPAE) + select ARM_GIC + select HAVE_SMP + select MFD_SYSCON + select ARM_AMBA + select ARCH_WANT_OPTIONAL_GPIOLIB + select HAVE_ARM_ARCH_TIMER + select ARM_TIMER_SP804 + select ZONE_DMA + select ARCH_DMA_ADDR_T_64BIT + select ARCH_SUPPORTS_BIG_ENDIAN + select MIGHT_HAVE_PCI + select PCI_DOMAINS if PCI + help + This enables support for the LSI Axxia devices. + + The LSI Axxia platforms require a Flattened Device Tree to be passed + to the kernel.
arch/arm/mach-axxia/Makefile new file +2 -0
@@ -0,0 +1,2 @@ +obj-y += axxia.o +obj-$(CONFIG_SMP) += platsmp.o headsmp.o
arch/arm/mach-axxia/Makefile.boot new file +2 -0
@@ -0,0 +1,2 @@ + zreladdr-y += 0x00308000 +params_phys-y := 0x00300100
arch/arm/mach-axxia/axxia.c new file +117 -0
117 lines not on this page · raw message
arch/arm/mach-axxia/axxia.h new file +42 -0
42 lines not on this page · raw message
arch/arm/mach-axxia/headsmp.S new file +44 -0
44 lines not on this page · raw message
arch/arm/mach-axxia/platsmp.c new file +183 -0
183 lines not on this page · raw message
drivers/clk/Makefile +1 -0
@@ -12,6 +12,7 @@ obj-$(CONFIG_COMMON_CLK) += clk-composite.o # hardware specific clock types # please keep this section sorted lexicographically by file/directory path name obj-$(CONFIG_COMMON_CLK_AXI_CLKGEN) += clk-axi-clkgen.o +obj-$(CONFIG_ARCH_AXXIA) += clk-axxia.o obj-$(CONFIG_ARCH_BCM2835) += clk-bcm2835.o obj-$(CONFIG_ARCH_EFM32) += clk-efm32gg.o obj-$(CONFIG_ARCH_HIGHBANK) += clk-highbank.o
drivers/clk/clk-axxia.c new file +281 -0
281 lines not on this page · raw message
Signature · 1 line
1.8.3.2
Arnd Bergmann
maintainerRe: [PATCH 1/5] ARM: Add platform support for LSI AXM55xx SoC
Quoted 10 lines · On Tuesday 15 April 2014 14:06:10 Anders Berg wrote:
arch/arm/mach-axxia/Kconfig new file +4
-0@@ -0,0 +1,19 @@ +config ARCH_AXXIA + bool "LSI Axxia platforms" if (ARCH_MULTI_V7 && ARM_LPAE) + select ARM_GIC + select HAVE_SMP
arch/arm/mach-axxia/Kconfig line 14
Quoted 10 lines
arch/arm/mach-axxia/Kconfig new file +10
-0+ select MFD_SYSCON + select ARM_AMBA + select ARCH_WANT_OPTIONAL_GPIOLIB + select HAVE_ARM_ARCH_TIMER + select ARM_TIMER_SP804 + select ZONE_DMA + select ARCH_DMA_ADDR_T_64BIT + select ARCH_SUPPORTS_BIG_ENDIAN + select MIGHT_HAVE_PCI + select PCI_DOMAINS if PCI
No need to select HAVE_SMP or ARCH_WANT_OPTIONAL_GPIOLIB any more.
We should rethink the ARCH_SUPPORTS_BIG_ENDIAN option I guess. It makes little sense to select that from one platform in a multiplatform build if other platforms don't support it.
arch/arm/mach-axxia/Makefile.boot line 2
Quoted 5 lines
arch/arm/mach-axxia/Makefile.boot new file +2
-0@@ -0,0 +1,2 @@ + zreladdr-y += 0x00308000 +params_phys-y := 0x00300100
This won't be used, since AUTO_ZRELADDR is set by ARCH_MULTIPLATFORM.
Quoted 66 lines
arch/arm/mach-axxia/axxia.c new file +60
-0@@ -0,0 +1,117 @@ +/* +* Support for the LSI Axxia SoC devices based on ARM cores. +* +* Copyright (C) 2012 LSI +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include <linux/amba/bus.h> +#include <linux/device.h> +#include <linux/dma-mapping.h> +#include <linux/init.h> +#include <linux/io.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <linux/of_platform.h> +#include <linux/sizes.h> +#include <asm/mach/arch.h> +#include <asm/pmu.h> +#include "axxia.h" + +/* +* The PMU IRQ lines of four cores are wired together into a single interrupt. +* Bounce the interrupt to other cores if it's not ours. +*/ +static irqreturn_t axxia_pmu_handler (int irq,void *dev,irq_handler_t handler) +{ +irqreturn_t ret =handler (irq, dev); + +if (ret ==IRQ_NONE ) { +int cpu =smp_processor_id (); +int cluster = cpu /CORES_PER_CLUSTER ; +int other; + +/* Look until we find another cpu that's online. */ +do { + other = (++cpu %CORES_PER_CLUSTER ) + + (cluster *CORES_PER_CLUSTER ); + }while (!cpu_online (other)); + +irq_set_affinity (irq,cpumask_of (other)); + } + +/* +* We should be able to get away with the amount of IRQ_NONEs we give, +* while still having the spurious IRQ detection code kick in if the +* interrupt really starts hitting spuriously. +*/ +return ret;
arch/arm/mach-axxia/axxia.c line 70
Quoted 10 lines
arch/arm/mach-axxia/axxia.c new file +10
-0+} + +static struct arm_pmu_platdata pmu_pdata = { + .handle_irq = axxia_pmu_handler, +}; + +static struct of_dev_auxdata axxia_auxdata_lookup[]__initdata = { +OF_DEV_AUXDATA ("arm,cortex-a15-pmu" ,0 ,"pmu" , &pmu_pdata), + {} +};
This looks similar to what we have in mach-ux500 as db8500_pmu_handler.
To avoid duplication, I'd prefer moving support for this into the perf_event code itself, and get rid of the auxdata.
Quoted 13 lines
arch/arm/mach-axxia/axxia.c new file +13
-0+static int +axxia_bus_notifier (struct notifier_block *nb,unsigned long event,void *obj) +{ +struct device *dev = obj; + +if (event !=BUS_NOTIFY_ADD_DEVICE ) +return NOTIFY_DONE ; + +if (!of_property_read_bool (dev->of_node,"dma-coherent" )) +return NOTIFY_DONE ; + +set_dma_ops (dev, &arm_coherent_dma_ops); +
arch/arm/mach-axxia/axxia.c line 95
Quoted 10 lines
arch/arm/mach-axxia/axxia.c new file +10
-0+return NOTIFY_OK ; +} + +static struct notifier_block axxia_platform_nb = { + .notifier_call = axxia_bus_notifier, +}; + +static struct notifier_block axxia_amba_nb = { + .notifier_call = axxia_bus_notifier, +};
And we definitely want to do this in a generic fashion. That should not be in platform specific code.
arch/arm/mach-axxia/axxia.c line 111
Quoted 6 lines
arch/arm/mach-axxia/axxia.c new file +6
-0+static const char *axxia_dt_match[]__initconst = { +"lsi,axm55xx" , +"lsi,axm55xx-sim" , +"lsi,axm55xx-emu" , +NULL +};
Please no 'xx' in compatible strings. You can list all the relevant model numbers here, or require that machines list a specific model as compatible, e.g.
compatible = "lsi,axm5510-sim", "lsi,axm5510", "lsi,axm5502";
arch/arm/mach-axxia/axxia.c line 117
Quoted 6 lines
arch/arm/mach-axxia/axxia.c new file +6
-0+ +DT_MACHINE_START (AXXIA_DT ,"LSI Axxia AXM55XX" ) + .dt_compat = axxia_dt_match, + .smp = smp_ops(axxia_smp_ops), + .init_machine = axxia_dt_init, +MACHINE_END
Please have a look at how smp ops are hooked up in mach-qcom and see if you can do it that way as well.
Quoted 20 lines
arch/arm/mach-axxia/axxia.h new file +14
-0@@ -0,0 +1,42 @@ +/* +* Prototypes for platform functions. +* +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +*
arch/arm/mach-axxia/axxia.h line 24
Quoted 10 lines
arch/arm/mach-axxia/axxia.h new file +10
-0+* You should have received a copy of the GNU General Public License +* along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef __AXXIA_H +#define __AXXIA_H + +#define CORES_PER_CLUSTER 4 + +#define AXXIA_PERIPH_PHYS 0x2000000000ULL +#define AXXIA_SYSCON_PHYS 0x2010030000ULL
Remove these -- they have to come from DT.
arch/arm/mach-axxia/axxia.h line 36
Quoted 11 lines
arch/arm/mach-axxia/axxia.h new file +11
-0+#if 0 +#define AXXIA_UART0_PHYS 0x2010080000ULL +#define AXXIA_UART1_PHYS 0x2010081000ULL +#define AXXIA_UART2_PHYS 0x2010082000ULL +#define AXXIA_UART3_PHYS 0x2010083000ULL + +#ifdef CONFIG_DEBUG_LL +#define AXXIA_DEBUG_UART_VIRT 0xf0080000 +#define AXXIA_DEBUG_UART_PHYS AXXIA_UART0_PHYS +#endif +#endif
You can put these constants directly into debug code.
Quoted 6 lines
arch/arm/mach-axxia/platsmp.c new file +0
-0
arch/arm/mach-axxia/platsmp.c line 8
Quoted 8 lines
arch/arm/mach-axxia/platsmp.c new file +8
-0@@ -0,0 +1,183 @@ +/* +* linux/arch/arm/mach-axxia/platsmp.c +* +* Copyright (C) 2012 LSI Corporation +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation.
Have you considered using PSCI to bring up the secondary CPUs?
Quoted 13 lines
arch/arm/mach-axxia/platsmp.c new file +13
-0+static int axxia_boot_secondary (unsigned int cpu, +struct task_struct *idle) +{ +unsigned long timeout; + +/* Release the specified core */ +write_pen_release (cpu_logical_map (cpu)); + +/* Send a wakeup event to get the idled cpu out of WFE state */ +dsb_sev (); + +/* Wait for so long, then give up if nothing happens ... */ + timeout = jiffies + (1 *HZ );
arch/arm/mach-axxia/platsmp.c line 116
Quoted 10 lines
arch/arm/mach-axxia/platsmp.c new file +10
-0+while (time_before (jiffies, timeout)) { +/* Make sure stores to pen_release have completed */ +smp_rmb (); +if (pen_release ==-1 ) +break ; +udelay (1 ); + } + +return pen_release !=-1 ? -ENOSYS :0 ; +}
This is pretty sad. No hardware support for waking up CPUs?
arch/arm/mach-axxia/platsmp.c line 128
Quoted 11 lines
arch/arm/mach-axxia/platsmp.c new file +11
-0+static void __init axxia_smp_prepare_cpus (unsigned int max_cpus) +{ +void __iomem *syscon; +int cpu_count =0 ; +int cpu; + + syscon =ioremap (AXXIA_SYSCON_PHYS ,SZ_64K ); +if (WARN_ON (!syscon)) +return ; + +check_fixup_sev (syscon);
Please use the syscon driver and regmap. That driver might need a little help to get syscon_node_to_regmap() to work before driver initialization, but other people need the same thing, and we should just implement it.
drivers/clk/clk-axxia.c line 2
Quoted 8 lines
drivers/clk/clk-axxia.c new file +2
-0@@ -0,0 +1,281 @@ +/* +* arch/arm/mach-axxia/clock.c
This should be a separate patch, and get merged by the clk maintainer.
Arnd
Re: [PATCH 1/5] ARM: Add platform support for LSI AXM55xx SoC
Quoted 16 lines · Arnd Bergmann
Quoted 14 lines · On Tuesday 15 April 2014 14:06:10 Anders Berg wrote:
arch/arm/mach-axxia/Kconfig new file +8
-0@@ -0,0 +1,19 @@ +config ARCH_AXXIA + bool "LSI Axxia platforms" if (ARCH_MULTI_V7 && ARM_LPAE) + select ARM_GIC + select HAVE_SMP + select MFD_SYSCON + select ARM_AMBA + select ARCH_WANT_OPTIONAL_GPIOLIB + select HAVE_ARM_ARCH_TIMER
Quoted 8 lines
arch/arm/mach-axxia/Kconfig line 14
Quoted 6 lines
arch/arm/mach-axxia/Kconfig new file +6
-0+ select ARM_TIMER_SP804 + select ZONE_DMA + select ARCH_DMA_ADDR_T_64BIT + select ARCH_SUPPORTS_BIG_ENDIAN + select MIGHT_HAVE_PCI + select PCI_DOMAINS if PCINo need to select
HAVE_SMPorARCH_WANT_OPTIONAL_GPIOLIBany more.
OK.
Quoted 5 lines
We should rethink the
ARCH_SUPPORTS_BIG_ENDIANoption I guess. It makes little sense to select that from one platform in a multiplatform build if other platforms don't support it.
Quoted 7 lines
arch/arm/mach-axxia/Makefile.boot line 2
Quoted 5 lines
arch/arm/mach-axxia/Makefile.boot new file +2
-0@@ -0,0 +1,2 @@ + zreladdr-y += 0x00308000 +params_phys-y := 0x00300100This won't be used, since
AUTO_ZRELADDRis set byARCH_MULTIPLATFORM.
OK.
Quoted 80 lines
Quoted 67 lines
arch/arm/mach-axxia/axxia.c new file +60
-0@@ -0,0 +1,117 @@ +/* +* Support for the LSI Axxia SoC devices based on ARM cores. +* +* Copyright (C) 2012 LSI +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include <linux/amba/bus.h> +#include <linux/device.h> +#include <linux/dma-mapping.h> +#include <linux/init.h> +#include <linux/io.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <linux/of_platform.h> +#include <linux/sizes.h> +#include <asm/mach/arch.h> +#include <asm/pmu.h> +#include "axxia.h" + +/* +* The PMU IRQ lines of four cores are wired together into a single interrupt. +* Bounce the interrupt to other cores if it's not ours. +*/ +static irqreturn_t axxia_pmu_handler (int irq,void *dev,irq_handler_t handler) +{ +irqreturn_t ret =handler (irq, dev); + +if (ret ==IRQ_NONE ) { +int cpu =smp_processor_id (); +int cluster = cpu /CORES_PER_CLUSTER ; +int other; + +/* Look until we find another cpu that's online. */ +do { + other = (++cpu %CORES_PER_CLUSTER ) + + (cluster *CORES_PER_CLUSTER ); + }while (!cpu_online (other)); + +irq_set_affinity (irq,cpumask_of (other)); + } + +/* +* We should be able to get away with the amount of IRQ_NONEs we give, +* while still having the spurious IRQ detection code kick in if the +* interrupt really starts hitting spuriously. +*/ +return ret;arch/arm/mach-axxia/axxia.c line 70
Quoted 10 lines
arch/arm/mach-axxia/axxia.c new file +10
-0+} + +static struct arm_pmu_platdata pmu_pdata = { + .handle_irq = axxia_pmu_handler, +}; + +static struct of_dev_auxdata axxia_auxdata_lookup[]__initdata = { +OF_DEV_AUXDATA ("arm,cortex-a15-pmu" ,0 ,"pmu" , &pmu_pdata), + {} +};This looks similar to what we have in mach-ux500 as
db8500_pmu_handler.
Quoted 3 lines
To avoid duplication, I'd prefer moving support for this into the
perf_eventcode itself, and get rid of the auxdata.
I'll drop it fow now.
Quoted 18 lines
Quoted 18 lines
arch/arm/mach-axxia/axxia.c new file +18
-0+static int +axxia_bus_notifier (struct notifier_block *nb,unsigned long event,void *obj) +{ +struct device *dev = obj; + +if (event !=BUS_NOTIFY_ADD_DEVICE ) +return NOTIFY_DONE ; + +if (!of_property_read_bool (dev->of_node,"dma-coherent" )) +return NOTIFY_DONE ; + +set_dma_ops (dev, &arm_coherent_dma_ops); + +return NOTIFY_OK ; +} + +static struct notifier_block axxia_platform_nb = { + .notifier_call = axxia_bus_notifier,
Quoted 8 lines
arch/arm/mach-axxia/axxia.c line 95
Quoted 5 lines
arch/arm/mach-axxia/axxia.c new file +5
-0+}; + +static struct notifier_block axxia_amba_nb = { + .notifier_call = axxia_bus_notifier, +};And we definitely want to do this in a generic fashion. That should not be in platform specific code.
I'll drop this too. I saw there was some work in progress on this.
Quoted 12 lines
arch/arm/mach-axxia/axxia.c line 111
Quoted 7 lines
arch/arm/mach-axxia/axxia.c new file +6
-0+static const char *axxia_dt_match[]__initconst = { +"lsi,axm55xx" , +"lsi,axm55xx-sim" , +"lsi,axm55xx-emu" , +NULL +};Please no 'xx' in compatible strings. You can list all the relevant model numbers here, or require that machines list a specific model as compatible, e.g.
Quoted 2 lines
compatible = "lsi,axm5510-sim", "lsi,axm5510", "lsi,axm5502";
Got that. I'll use lsi,axm5516 as the complatible model number.
Quoted 10 lines
arch/arm/mach-axxia/axxia.c line 117
Quoted 6 lines
arch/arm/mach-axxia/axxia.c new file +6
-0+ +DT_MACHINE_START (AXXIA_DT ,"LSI Axxia AXM55XX" ) + .dt_compat = axxia_dt_match, + .smp = smp_ops(axxia_smp_ops), + .init_machine = axxia_dt_init, +MACHINE_END Please have a look at how smp ops are hooked up in mach-qcom and see if you can do it that way as well.
Yes, that will work nicely.
Quoted 33 lines
Quoted 20 lines
arch/arm/mach-axxia/axxia.h new file +14
-0@@ -0,0 +1,42 @@ +/* +* Prototypes for platform functions. +* +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* arch/arm/mach-axxia/axxia.h line 24
Quoted 10 lines
arch/arm/mach-axxia/axxia.h new file +10
-0+* You should have received a copy of the GNU General Public License +* along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef __AXXIA_H +#define __AXXIA_H + +#define CORES_PER_CLUSTER 4 + +#define AXXIA_PERIPH_PHYS 0x2000000000ULL +#define AXXIA_SYSCON_PHYS 0x2010030000ULLRemove these -- they have to come from DT.
Quoted 14 lines
arch/arm/mach-axxia/axxia.h line 36
Quoted 11 lines
arch/arm/mach-axxia/axxia.h new file +11
-0+#if 0 +#define AXXIA_UART0_PHYS 0x2010080000ULL +#define AXXIA_UART1_PHYS 0x2010081000ULL +#define AXXIA_UART2_PHYS 0x2010082000ULL +#define AXXIA_UART3_PHYS 0x2010083000ULL + +#ifdef CONFIG_DEBUG_LL +#define AXXIA_DEBUG_UART_VIRT 0xf0080000 +#define AXXIA_DEBUG_UART_PHYS AXXIA_UART0_PHYS +#endif +#endif You can put these constants directly into debug code.
Ok.
Quoted 18 lines
Quoted 7 lines
arch/arm/mach-axxia/platsmp.c new file +0
-0arch/arm/mach-axxia/platsmp.c line 8
Quoted 8 lines
arch/arm/mach-axxia/platsmp.c new file +8
-0@@ -0,0 +1,183 @@ +/* +* linux/arch/arm/mach-axxia/platsmp.c +* +* Copyright (C) 2012 LSI Corporation +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. Have you considered using PSCI to bring up the secondary CPUs?
The current u-boot is a bit dated... But I agree. I'll push for an update to this.
Quoted 17 lines
Quoted 17 lines
arch/arm/mach-axxia/platsmp.c new file +17
-0+static int axxia_boot_secondary (unsigned int cpu, +struct task_struct *idle) +{ +unsigned long timeout; + +/* Release the specified core */ +write_pen_release (cpu_logical_map (cpu)); + +/* Send a wakeup event to get the idled cpu out of WFE state */ +dsb_sev (); + +/* Wait for so long, then give up if nothing happens ... */ + timeout = jiffies + (1 *HZ ); +while (time_before (jiffies, timeout)) { +/* Make sure stores to pen_release have completed */ +smp_rmb (); +if (pen_release ==-1 )
Quoted 9 lines
arch/arm/mach-axxia/platsmp.c line 116
Quoted 6 lines
arch/arm/mach-axxia/platsmp.c new file +6
-0+break ; +udelay (1 ); + } + +return pen_release !=-1 ? -ENOSYS :0 ; +}This is pretty sad. No hardware support for waking up CPUs?
I'll rework this. There are sw control of the resets to individual cores. And the holding pen is not needed (too much other platsmp implementations), I will have the secondary cores released directly into secondary_startup.
Quoted 7 lines
Quoted 7 lines
arch/arm/mach-axxia/platsmp.c new file +7
-0+static void __init axxia_smp_prepare_cpus (unsigned int max_cpus) +{ +void __iomem *syscon; +int cpu_count =0 ; +int cpu; + + syscon =ioremap (AXXIA_SYSCON_PHYS ,SZ_64K );
Quoted 8 lines
arch/arm/mach-axxia/platsmp.c line 128
Quoted 4 lines
arch/arm/mach-axxia/platsmp.c new file +4
-0+if (WARN_ON (!syscon)) +return ; + +check_fixup_sev (syscon);Please use the syscon driver and regmap. That driver might need a little help to get
syscon_node_to_regmap()to work before driver initialization, but other people need the same thing, and we should just implement it.
Ok, until then... I'll drop the hardcoded address and get the address from the syscon node.
Quoted 11 lines
drivers/clk/clk-axxia.c line 2
Quoted 9 lines
drivers/clk/clk-axxia.c new file +2
-0@@ -0,0 +1,281 @@ +/* +* arch/arm/mach-axxia/clock.c This should be a separate patch, and get merged by the clk maintainer.
Ok.
I'll submit a v2 with the corrections.
/Anders
Quoted 4 lines
Arnd
Re: [PATCH 1/5] ARM: Add platform support for LSI AXM55xx SoC
In reply to Anders BergQuoted 8 lines · Anders Berg
arch/arm/mach-axxia/headsmp.S new file +8
-0+ adr r4, 2f + ldmia r4, {r5, r6} + sub r4, r4, r5 + add r6, r6, r4 +1: ldr r7, [r6] + cmp r7, r0 + wfene + bne 1b
...
Quoted 3 lines
+2: .long .
arch/arm/mach-axxia/headsmp.S new file +1
-0+ .long pen_releasearch/arm/mach-axxia/platsmp.c +0
-0
...
arch/arm/mach-axxia/platsmp.c line 67
Quoted 12 lines
arch/arm/mach-axxia/platsmp.c +12
-0+/* +* Write pen_release in a way that is guaranteed to be visible to all +* observers, irrespective of whether they're taking part in coherency +* or not. This is necessary for the hotplug code to work reliably. +*/ +static void write_pen_release (int val) +{ + pen_release = val; +/* Make sure this store is visible to other CPUs */ +smp_wmb (); +__cpuc_flush_dcache_area ((void *)&pen_release,sizeof (pen_release)); +}
Do you /really/ need to do this pen_release thing on your platform?
Quoted 2 lines
arch/arm/mach-axxia/platsmp.c +2
-0+static void __init axxia_smp_prepare_cpus (unsigned int max_cpus) +{
...
Quoted 5 lines
arch/arm/mach-axxia/platsmp.c +5
-0+/* +* Release all physical cpus when not in hyp mode since we +* might want to bring them online later. +* +* Also we need to get the execution into kernel code (it's
arch/arm/mach-axxia/platsmp.c line 159
Quoted 10 lines
arch/arm/mach-axxia/platsmp.c +10
-0+* currently executing in u-boot). u-boot releases the cores +* from reset in hyp mode. +*/ +if (!is_hyp_mode_available ()) { +if (cpu !=0 ) { +u32 tmp =readl (syscon +0x1010 ); +writel (0xab , syscon +0x1000 ); + tmp &= ~(1 << cpu); +writel (tmp, syscon +0x1010 ); + }
As this implies that you can control the release of each CPU from u-boot individually.
Signature · 2 lines
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly improving, and getting towards what was expected from it.
PATCH 2/5 ARM: dts: Device tree for AXM55xx.
In reply to Anders BergAdd device tree for the Amarillo validation board with an AXM5516 SoC.
--- arch/arm/boot/dts/Makefile | 1 + arch/arm/boot/dts/axm5516-amarillo.dts | 51 ++++++ arch/arm/boot/dts/axm5516-cpus.dtsi | 204 ++++++++++++++++++++++ arch/arm/boot/dts/axm55xx.dtsi | 306 +++++++++++++++++++++++++++++++++ 4 files changed, 562 insertions(+) create mode 100644 arch/arm/boot/dts/axm5516-amarillo.dts create mode 100644 arch/arm/boot/dts/axm5516-cpus.dtsi create mode 100644 arch/arm/boot/dts/axm55xx.dtsi
arch/arm/boot/dts/Makefile +1 -0
@@ -46,6 +46,7 @@ dtb-$(CONFIG_ARCH_AT91) += sama5d35ek.dtb dtb-$(CONFIG_ARCH_AT91) += sama5d36ek.dtb dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb +dtb-$(CONFIG_ARCH_AXXIA) += axm5516-amarillo.dtb dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb dtb-$(CONFIG_ARCH_BCM_MOBILE) += bcm11351-brt.dtb \ bcm28155-ap.dtb
arch/arm/boot/dts/axm5516-amarillo.dts new file +51 -0
51 lines not on this page · raw message
arch/arm/boot/dts/axm5516-cpus.dtsi new file +204 -0
204 lines not on this page · raw message
arch/arm/boot/dts/axm55xx.dtsi new file +306 -0
306 lines not on this page · raw message
Signature · 1 line
1.8.3.2
Re: [PATCH 2/5] ARM: dts: Device tree for AXM55xx.
Hi Anders,
Quoted 13 lines · Anders Berg
Add device tree for the Amarillo validation board with an AXM5516 SoC.
Signed-off-by Anders Berg <[email protected]>--- arch/arm/boot/dts/Makefile | 1 + arch/arm/boot/dts/axm5516-amarillo.dts | 51 ++++++ arch/arm/boot/dts/axm5516-cpus.dtsi | 204 ++++++++++++++++++++++ arch/arm/boot/dts/axm55xx.dtsi | 306 +++++++++++++++++++++++++++++++++ 4 files changed, 562 insertions(+) create mode 100644 arch/arm/boot/dts/axm5516-amarillo.dts create mode 100644 arch/arm/boot/dts/axm5516-cpus.dtsi create mode 100644 arch/arm/boot/dts/axm55xx.dtsi
[...]
arch/arm/boot/dts/axm55xx.dtsi line 177
Quoted 12 lines
arch/arm/boot/dts/axm55xx.dtsi new file +12
-0+ gic: interrupt-controller at 2001001000 { + compatible = "arm,cortex-a15-gic"; + #interrupt-cells = <3>; + #address-cells = <0>; + interrupt-controller; + reg = <0x20 0x01001000 0 0x1000>, + <0x20 0x01002000 0 0x1000>, + <0x20 0x01004000 0 0x2000>, + <0x20 0x01006000 0 0x2000>; + interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | + IRQ_TYPE_LEVEL_HIGH)>; + };
Given how many CPUs this system has, what's the catch regarding the GIC? Is there a second one shadowing this one at the same address for another set of 8 CPUs? Is there an additional mechanism to IPI the other CPUs?
Thanks,
M.
Signature · 1 line
Jazz is not dead. It just smells funny...
Re: [PATCH 2/5] ARM: dts: Device tree for AXM55xx.
Quoted 32 lines · Marc Zyngier
Hi Anders,
Quoted 13 lines · Anders Berg
Add device tree for the Amarillo validation board with an AXM5516 SoC.
Signed-off-by Anders Berg <[email protected]>--- arch/arm/boot/dts/Makefile | 1 + arch/arm/boot/dts/axm5516-amarillo.dts | 51 ++++++ arch/arm/boot/dts/axm5516-cpus.dtsi | 204 ++++++++++++++++++++++ arch/arm/boot/dts/axm55xx.dtsi | 306 +++++++++++++++++++++++++++++++++ 4 files changed, 562 insertions(+) create mode 100644 arch/arm/boot/dts/axm5516-amarillo.dts create mode 100644 arch/arm/boot/dts/axm5516-cpus.dtsi create mode 100644 arch/arm/boot/dts/axm55xx.dtsi[...]
arch/arm/boot/dts/axm55xx.dtsi line 177
Quoted 12 lines
arch/arm/boot/dts/axm55xx.dtsi new file +12
-0+ gic: interrupt-controller at 2001001000 { + compatible = "arm,cortex-a15-gic"; + #interrupt-cells = <3>; + #address-cells = <0>; + interrupt-controller; + reg = <0x20 0x01001000 0 0x1000>, + <0x20 0x01002000 0 0x1000>, + <0x20 0x01004000 0 0x2000>, + <0x20 0x01006000 0 0x2000>; + interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | + IRQ_TYPE_LEVEL_HIGH)>; + };
Quoted 4 lines
Given how many CPUs this system has, what's the catch regarding the GIC? Is there a second one shadowing this one at the same address for another set of 8 CPUs? Is there an additional mechanism to IPI the other CPUs?
There is actually one GIC per cluster and SPIs are used to hook the clusters together for use as IPIs, so with this patch one cluster may be booted (using the standard SGIs still works within each cluster).
Have a modified GIC driver to run all clusters, but this patch is a bit to invasive to submit at the moment...
/Anders
Arnd Bergmann
maintainerRe: [PATCH 2/5] ARM: dts: Device tree for AXM55xx.
In reply to Anders BergQuoted 6 lines · On Tuesday 15 April 2014 14:06:11 Anders Berg wrote:
arch/arm/boot/dts/axm5516-amarillo.dts new file +0
-0
arch/arm/boot/dts/axm5516-amarillo.dts line 10
Quoted 10 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +10
-0@@ -0,0 +1,51 @@ +/* + * arch/arm/boot/dts/axm5516-amarillo.dts + * + * Copyright (C) 2013 LSI + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */
It's better to use a permissive license such as the BSD license for dts files, so they can be shared with other OSs.
The situation with the clocks is still very strange: either the bindings are all in need of update, or you got all devices wrong:
arch/arm/boot/dts/axm5516-amarillo.dts line 18
Quoted 8 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +8
-0+ serial0: uart at 2010080000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x20 0x10080000 0 0x1000>; + interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk_per>, <&clk_per>; + clock-names = "uartclk", "apb_pclk"; + status = "disabled"; + };
"uartclk" is not a valid string for pl011, as per binding:
| - clocks: When present, must refer to exactly one clock named
| "apb_pclk"
I do see that a lot of platforms do the same thing you have here, not sure who is wrong.
Quoted 4 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +4
-0+ timer0: timer at 2010091000 { + compatible = "arm,sp804", "arm,primecell"; + reg = <0x20 0x10091000 0 0x1000>; + interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,
arch/arm/boot/dts/axm5516-amarillo.dts line 32
Quoted 10 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +10
-0+ <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk_per>, <&clk_per>; + clock-names = "timclken1", "apb_pclk";
Citing the binding:
| - clocks: clocks driving the dual timer hardware. This list should be 1 or 3 | clocks. With 3 clocks, the order is timer0 clock, timer1 clock, | apb_pclk. A single clock can also be specified if the same clock is | used for all clock inputs.
I think you only want to have one clock here and make that the "apb_pclk".
Quoted 6 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +6
-0+ gpio0: gpio at 2010092000 { + #gpio-cells = <2>; + compatible = "arm,pl061", "arm,primecell"; + gpio-controller; + reg = <0x20 0x10092000 0x00 0x1000>; + interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
arch/arm/boot/dts/axm5516-amarillo.dts line 48
Quoted 10 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +10
-0+ <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk_per>; + clock-names = "apb_pclk"; + status = "disabled";
The pl061 binding does not specify any clocks at all. Do we need to update that?
Arnd
Re: [PATCH 2/5] ARM: dts: Device tree for AXM55xx.
Quoted 12 lines · Arnd Bergmann
Quoted 11 lines · On Tuesday 15 April 2014 14:06:11 Anders Berg wrote:
arch/arm/boot/dts/axm5516-amarillo.dts new file +5
-0@@ -0,0 +1,51 @@ +/* + * arch/arm/boot/dts/axm5516-amarillo.dts + * + * Copyright (C) 2013 LSI + *
Quoted 8 lines
arch/arm/boot/dts/axm5516-amarillo.dts line 10
Quoted 5 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +5
-0+ * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */It's better to use a permissive license such as the BSD license for dts files, so they can be shared with other OSs.
Ok.
Quoted 15 lines
The situation with the clocks is still very strange: either the bindings are all in need of update, or you got all devices wrong:
arch/arm/boot/dts/axm5516-amarillo.dts line 18
Quoted 8 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +8
-0+ serial0: uart at 2010080000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x20 0x10080000 0 0x1000>; + interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk_per>, <&clk_per>; + clock-names = "uartclk", "apb_pclk"; + status = "disabled"; + };"uartclk" is not a valid string for pl011, as per binding:
Quoted 5 lines
| - clocks: When present, must refer to exactly one clock named
| "apb_pclk"I do see that a lot of platforms do the same thing you have here, not sure who is wrong.
The docs are probably correct. I used some vexpress dtsi as a reference, hence the uartclk reference. It's gone now.
Quoted 18 lines
Quoted 5 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +4
-0+ timer0: timer at 2010091000 { + compatible = "arm,sp804", "arm,primecell"; + reg = <0x20 0x10091000 0 0x1000>; + interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,arch/arm/boot/dts/axm5516-amarillo.dts line 32
Quoted 10 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +10
-0+ <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk_per>, <&clk_per>; + clock-names = "timclken1", "apb_pclk";Citing the binding:
Quoted 6 lines
| - clocks: clocks driving the dual timer hardware. This list should be 1 or 3 | clocks. With 3 clocks, the order is timer0 clock, timer1 clock, | apb_pclk. A single clock can also be specified if the same clock is | used for all clock inputs.I think you only want to have one clock here and make that the "
apb_pclk".
Yepp, will be fixed.
Quoted 12 lines
Quoted 12 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +11
-0+ gpio0: gpio at 2010092000 { + #gpio-cells = <2>; + compatible = "arm,pl061", "arm,primecell"; + gpio-controller; + reg = <0x20 0x10092000 0x00 0x1000>; + interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
Quoted 8 lines
arch/arm/boot/dts/axm5516-amarillo.dts line 48
Quoted 5 lines
arch/arm/boot/dts/axm5516-amarillo.dts new file +5
-0+ <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk_per>; + clock-names = "apb_pclk"; + status = "disabled";The pl061 binding does not specify any clocks at all. Do we need to update that?
Doesn't all AMBA devices need at least one apb_pclk since the bus driver does clk_get(...,"apb_pclk") before calling probe()?
/Anders
Arnd Bergmann
maintainerRe: [PATCH 2/5] ARM: dts: Device tree for AXM55xx.
Quoted 17 lines · On Tuesday 15 April 2014 17:20:47 Anders Berg wrote:
Quoted 17 lines
Quoted 16 lines
arch/arm/boot/dts/axm55xx.dtsi new file +16
-0+ gpio0: gpio at 2010092000 { + #gpio-cells = <2>; + compatible = "arm,pl061", "arm,primecell"; + gpio-controller; + reg = <0x20 0x10092000 0x00 0x1000>; + interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk_per>; + clock-names = "apb_pclk"; + status = "disabled";
Quoted 5 lines
Quoted 2 lines
The pl061 binding does not specify any clocks at all. Do we need to update that?
Doesn't all AMBA devices need at least one
apb_pclksince the bus driver doesclk_get(...,"apb_pclk")before callingprobe()?
Yes, I was mostly wondering whether we had a policy about whether this clock should also be listed in the binding or not. My feeling is that it's better to make that explicit.
Arnd
Re: [PATCH 2/5] ARM: dts: Device tree for AXM55xx.
Quoted 21 lines · Arnd Bergmann
Quoted 20 lines · On Tuesday 15 April 2014 17:20:47 Anders Berg wrote:
Quoted 19 lines
Quoted 6 lines
arch/arm/boot/dts/axm55xx.dtsi new file +6
-0+ gpio0: gpio at 2010092000 { + #gpio-cells = <2>; + compatible = "arm,pl061", "arm,primecell"; + gpio-controller; + reg = <0x20 0x10092000 0x00 0x1000>; + interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,arch/arm/boot/dts/axm55xx.dtsi line 285
Quoted 10 lines
arch/arm/boot/dts/axm55xx.dtsi new file +10
-0+ <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk_per>; + clock-names = "apb_pclk"; + status = "disabled";The pl061 binding does not specify any clocks at all. Do we need to update that?
Quoted 6 lines
Quoted 2 lines
Doesn't all AMBA devices need at least one
apb_pclksince the bus driver doesclk_get(...,"apb_pclk")before callingprobe()?Yes, I was mostly wondering whether we had a policy about whether this clock should also be listed in the binding or not. My feeling is that it's better to make that explicit.
A separate patch to the GPIO maintainer for this will be accepted. :-)
Yours,
Linus Walleij
Re: [PATCH 2/5] ARM: dts: Device tree for AXM55xx.
In reply to Arnd BergmannQuoted 11 lines · Arnd Bergmann
arch/arm/boot/dts/axm55xx.dtsi line 224
Quoted 8 lines · On Tuesday 15 April 2014 14:06:11 Anders Berg wrote:
arch/arm/boot/dts/axm55xx.dtsi new file +8
-0+ serial0: uart at 2010080000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x20 0x10080000 0 0x1000>; + interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk_per>, <&clk_per>; + clock-names = "uartclk", "apb_pclk"; + status = "disabled"; + };
Quoted 7 lines
"uartclk" is not a valid string for pl011, as per binding:
| - clocks: When present, must refer to exactly one clock named
| "apb_pclk"I do see that a lot of platforms do the same thing you have here, not sure who is wrong.
OK the PL011 is tricksier. It has two clocks, the APB clock driving the logic and another clock input that is divided down to generate the external data clock (baud rate).
The bus will do:pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk");
The driver will do:uap->clk = devm_clk_get(&dev->dev, NULL);
So the driver relies on the anonymous clock being "first" in a clock retrieveal operation, and it's a bit fragile indeed. That leads to that either you give this clock a sensible name or you list the empty string, as you have to have clock-names there to name the last entry so the bus can retrieve it.
This clock is *indeed* named "UARTCLK" (capital letters) in the TRM for PL011. So I think this is perfectly reasonable.
The situation is the same as with the PL022 SPI driver we have discussed before, it also retrieves the anonymous clock but we consistently named it "SSPCLK" in commits:dfc9832ca3f7a10d573e29e46d6ba03a54fbe580 80fbe30f63c9ba2ab62eb2c1f7ef607ce0721a95
As everyone else was using that. And it was the name from the TRM.
Yours,
Linus Walleij
Re: [PATCH 2/5] ARM: dts: Device tree for AXM55xx.
In reply to Arnd BergmannQuoted 4 lines · Arnd Bergmann
"uartclk" is not a valid string for pl011, as per binding:
| - clocks: When present, must refer to exactly one clock named
| "apb_pclk"
The binding document is basically *wrong*.
Signature · 2 lines
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly improving, and getting towards what was expected from it.
PATCH 3/5 ARM: axxia: Adding defconfig for AXM55xx
In reply to Anders BergAdd a defconfig file for the LSI Axxia family of devices (CONFIG_ARCH_AXXIA).
--- arch/arm/configs/axm55xx_defconfig | 248 +++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 arch/arm/configs/axm55xx_defconfig
arch/arm/configs/axm55xx_defconfig new file +248 -0
@@ -0,0 +1,248 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_FHANDLE=y +CONFIG_AUDIT=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=16 +CONFIG_NAMESPACES=y +# CONFIG_UTS_NS is not set +# CONFIG_IPC_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_NET_NS is not set +CONFIG_SCHED_AUTOGROUP=y +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_EMBEDDED=y +# CONFIG_COMPAT_BRK is not set +CONFIG_PROFILING=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_ARCH_AXXIA=y +CONFIG_GPIO_PCA953X=y +CONFIG_ARM_LPAE=y +CONFIG_ARM_THUMBEE=y +CONFIG_ARM_ERRATA_430973=y +CONFIG_ARM_ERRATA_643719=y +CONFIG_ARM_ERRATA_720789=y +CONFIG_ARM_ERRATA_754322=y +CONFIG_ARM_ERRATA_754327=y +CONFIG_ARM_ERRATA_764369=y +CONFIG_ARM_ERRATA_775420=y +CONFIG_ARM_ERRATA_798181=y +CONFIG_PCI=y +CONFIG_PCI_MSI=y +CONFIG_PCIE_AXXIA=y +CONFIG_SMP=y +CONFIG_NR_CPUS=16 +CONFIG_HOTPLUG_CPU=y +CONFIG_PREEMPT=y +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +CONFIG_HIGHMEM=y +CONFIG_KSM=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_ARM_APPENDED_DTB=y +CONFIG_ARM_ATAG_DTB_COMPAT=y +CONFIG_VFP=y +CONFIG_NEON=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_BINFMT_MISC=y +# CONFIG_SUSPEND is not set +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM_USER=y +CONFIG_XFRM_SUB_POLICY=y +CONFIG_XFRM_MIGRATE=y +CONFIG_XFRM_STATISTICS=y +CONFIG_NET_KEY=y +CONFIG_INET=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_INET_AH=y +CONFIG_INET_ESP=y +CONFIG_INET_IPCOMP=y +# CONFIG_INET_LRO is not set +# CONFIG_IPV6 is not set +CONFIG_NETWORK_PHY_TIMESTAMPING=y +CONFIG_BRIDGE=y +# CONFIG_WIRELESS is not set +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_AFS_PARTS=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_CFI_STAA=y +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_OF=y +CONFIG_MTD_M25P80=y +CONFIG_PROC_DEVICETREE=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_EEPROM_AT24=y +CONFIG_EEPROM_AT25=y +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_SG=y +CONFIG_ATA=y +CONFIG_PATA_PLATFORM=y +CONFIG_PATA_OF_PLATFORM=y +CONFIG_MD=y +CONFIG_BLK_DEV_DM=y +CONFIG_DM_UEVENT=y +CONFIG_NETDEVICES=y +CONFIG_TUN=y +CONFIG_VETH=y +CONFIG_VIRTIO_NET=y +# CONFIG_NET_CADENCE is not set +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_CIRRUS is not set +# CONFIG_NET_VENDOR_FARADAY is not set +# CONFIG_NET_VENDOR_INTEL is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_VIA is not set +# CONFIG_NET_VENDOR_WIZNET is not set +CONFIG_BROADCOM_PHY=y +# CONFIG_WLAN is not set +# CONFIG_MOUSE_PS2_ALPS is not set +# CONFIG_MOUSE_PS2_LOGIPS2PP is not set +# CONFIG_MOUSE_PS2_SYNAPTICS is not set +# CONFIG_MOUSE_PS2_TRACKPOINT is not set +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_AMBAKMI=y +CONFIG_LEGACY_PTY_COUNT=16 +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_VIRTIO_CONSOLE=y +# CONFIG_HW_RANDOM is not set +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y +CONFIG_I2C_AXXIA=y +CONFIG_SPI=y +CONFIG_SPI_PL022=y +CONFIG_DP83640_PHY=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_PL061=y +CONFIG_POWER_SUPPLY=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_AXXIA=y +CONFIG_SENSORS_ADT7475=y +CONFIG_SENSORS_JC42=y +CONFIG_SENSORS_LM75=y +CONFIG_PMBUS=y +CONFIG_SENSORS_LTC2978=y +CONFIG_WATCHDOG=y +CONFIG_ARM_SP805_WATCHDOG=y +CONFIG_FB=y +CONFIG_FB_ARMCLCD=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_HID_A4TECH=y +CONFIG_HID_APPLE=y +CONFIG_HID_BELKIN=y +CONFIG_HID_CHERRY=y +CONFIG_HID_CHICONY=y +CONFIG_HID_CYPRESS=y +CONFIG_HID_DRAGONRISE=y +CONFIG_HID_EZKEY=y +CONFIG_HID_KYE=y +CONFIG_HID_GYRATION=y +CONFIG_HID_TWINHAN=y +CONFIG_HID_KENSINGTON=y +CONFIG_HID_LOGITECH=y +CONFIG_HID_MICROSOFT=y +CONFIG_HID_MONTEREY=y +CONFIG_HID_NTRIG=y +CONFIG_HID_ORTEK=y +CONFIG_HID_PANTHERLORD=y +CONFIG_HID_PETALYNX=y +CONFIG_HID_SAMSUNG=y +CONFIG_HID_SUNPLUS=y +CONFIG_HID_GREENASIA=y +CONFIG_HID_SMARTJOYPLUS=y +CONFIG_HID_TOPSEED=y +CONFIG_HID_THRUSTMASTER=y +CONFIG_HID_ZEROPLUS=y +CONFIG_USB=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_EHCI_HCD=y +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +CONFIG_USB_EHCI_HCD_AXXIA=y +CONFIG_USB_STORAGE=y +CONFIG_MMC=y +CONFIG_MMC_ARMMMCI=y +CONFIG_DMADEVICES=y +CONFIG_PL330_DMA=y +CONFIG_VIRT_DRIVERS=y +CONFIG_VIRTIO_MMIO=y +CONFIG_MAILBOX=y +CONFIG_PL320_MBOX=y +# CONFIG_IOMMU_SUPPORT is not set +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +CONFIG_EXT4_FS=y +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=y +CONFIG_CUSE=y +CONFIG_FSCACHE=y +CONFIG_FSCACHE_STATS=y +CONFIG_FSCACHE_HISTOGRAM=y +CONFIG_FSCACHE_DEBUG=y +CONFIG_FSCACHE_OBJECT_LIST=y +CONFIG_CACHEFILES=y +CONFIG_CACHEFILES_HISTOGRAM=y +CONFIG_ISO9660_FS=y +CONFIG_UDF_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_NTFS_FS=y +CONFIG_TMPFS=y +CONFIG_JFFS2_FS=y +CONFIG_CRAMFS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V4=y +CONFIG_ROOT_NFS=y +CONFIG_NFS_FSCACHE=y +CONFIG_SUNRPC_DEBUG=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_PRINTK_TIME=y +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_FS=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_SCHED_DEBUG is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +# CONFIG_FTRACE is not set +CONFIG_DEBUG_USER=y +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_XCBC=y +CONFIG_CRYPTO_SHA256=y +# CONFIG_CRYPTO_ANSI_CPRNG is not set +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=y
Signature · 1 line
1.8.3.2
PATCH 4/5 power: reset: Add Axxia system reset driver
In reply to Anders BergAdd Axxia (AXM55xx) SoC system reset driver. This driver handles only system reboot (and not power-off).
--- .../bindings/power_supply/axxia-reset.txt | 20 +++++ drivers/power/reset/Kconfig | 8 ++ drivers/power/reset/Makefile | 1 + drivers/power/reset/axxia-reset.c | 97 ++++++++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 Documentation/devicetree/bindings/power_supply/axxia-reset.txt create mode 100644 drivers/power/reset/axxia-reset.c
Documentation/devicetree/bindings/power_supply/axxia-reset.txt new file +20 -0
@@ -0,0 +1,20 @@ +Axxia Restart Driver + +This driver can do reset of the Axxia SoC. It uses the registers in the syscon +block to initiate a chip reset. + +Required Properties: + -compatible: "lsi,axm55xx-reset" + -syscon: phandle to the syscon node. + +Example: + + syscon: syscon at 2010030000 { + compatible = "lsi,axxia-syscon", "syscon"; + reg = <0x20 0x10030000 0 0x2000>; + }; + + reset: reset at 2010031000 { + compatible = "lsi,axm55xx-reset"; + syscon = <&syscon>; + };
drivers/power/reset/Kconfig +8 -0
@@ -12,6 +12,14 @@ config POWER_RESET_AS3722 help This driver supports turning off board via a ams AS3722 power-off. +config POWER_RESET_AXXIA + bool "LSI Axxia reset driver" + depends on POWER_RESET && ARCH_AXXIA + help + This driver supports restart for Axxia SoC. + + Say Y if you have an Axxia family SoC. + config POWER_RESET_GPIO bool "GPIO power-off driver" depends on OF_GPIO && POWER_RESET
drivers/power/reset/Makefile +1 -0
@@ -1,4 +1,5 @@ obj-$(CONFIG_POWER_RESET_AS3722) += as3722-poweroff.o +obj-$(CONFIG_POWER_RESET_AXXIA) += axxia-reset.o obj-$(CONFIG_POWER_RESET_GPIO) += gpio-poweroff.o obj-$(CONFIG_POWER_RESET_MSM) += msm-poweroff.o obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o
drivers/power/reset/axxia-reset.c new file +97 -0
97 lines not on this page · raw message
Signature · 1 line
1.8.3.2
PATCH 5/5 ARM: dts: axxia: Add reset controller
In reply to Anders BergAdd the reset controller to the AXM5xx device tree.
--- arch/arm/boot/dts/axm55xx.dtsi | 5 +++++ 1 file changed, 5 insertions(+)
arch/arm/boot/dts/axm55xx.dtsi +5 -0
@@ -208,6 +208,11 @@ reg = <0x20 0x10030000 0 0x2000>; }; + reset: reset at 2010031000 { + compatible = "lsi,axm55xx-reset"; + syscon = <&syscon>; + }; + amba { compatible = "arm,amba-bus"; #address-cells = <2>;
Signature · 1 line
1.8.3.2