Message ID | 1404291772-2644-5-git-send-email-jingchang.lu@freescale.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Jul 02, 2014 at 10:02:51AM +0100, Jingchang Lu wrote: > From: Jingchang Lu <b35083@freescale.com> > > The LS1021A SoC is a dual-core Cortex-A7 based processor, > this add the initial support for it. > > Signed-off-by: Jingchang Lu <b35083@freescale.com> > --- > arch/arm/mach-imx/Kconfig | 17 ++++++++++++++ > arch/arm/mach-imx/Makefile | 2 ++ > arch/arm/mach-imx/mach-ls1021a.c | 49 ++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 68 insertions(+) > create mode 100644 arch/arm/mach-imx/mach-ls1021a.c > > diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig > index bdfe276..7f24892 100644 > --- a/arch/arm/mach-imx/Kconfig > +++ b/arch/arm/mach-imx/Kconfig > @@ -762,6 +762,23 @@ config SOC_VF610 > help > This enable support for Freescale Vybrid VF610 processor. > > +config FSL_SOC > + bool > + > +config SOC_LS1021A > + bool "Freescale LS1021A support" > + select CPU_V7 > + select ARM_GIC > + select CLKSRC_OF > + select HAVE_ARM_ARCH_TIMER > + select HAVE_SMP > + select FSL_SOC > + select MIGHT_HAVE_PCI > + select PCI_DOMAINS if PCI > + > + help > + This enable support for Freescale LS1021A processor. > + > endif > > source "arch/arm/mach-imx/devices/Kconfig" > diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile > index a364e20..f49cbdb 100644 > --- a/arch/arm/mach-imx/Makefile > +++ b/arch/arm/mach-imx/Makefile > @@ -114,4 +114,6 @@ obj-$(CONFIG_SOC_IMX53) += mach-imx53.o > > obj-$(CONFIG_SOC_VF610) += clk-vf610.o mach-vf610.o > > +obj-$(CONFIG_SOC_LS1021A) += mach-ls1021a.o > + > obj-y += devices/ > diff --git a/arch/arm/mach-imx/mach-ls1021a.c b/arch/arm/mach-imx/mach-ls1021a.c > new file mode 100644 > index 0000000..d1a9bb9 > --- /dev/null > +++ b/arch/arm/mach-imx/mach-ls1021a.c > @@ -0,0 +1,49 @@ > +/* > + * Copyright 2013-2014 Freescale Semiconductor, Inc. > + * > + * 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. > + */ > + > +#include <linux/of_platform.h> > +#include <asm/mach/arch.h> > + > +#include "common.h" > + > +static const struct of_device_id of_ls1021a_match_table[] = { > + { > + .compatible = "simple-bus", > + }, > + { > + .compatible = "fsl,ifc", > + }, > + { > + .compatible = "fsl,fpga-qixis", > + }, > + { > + .compatible = "fsl,qe", > + }, > + {} > +}; Are any of thse not always-on (or default-on) MMIO busses? Is there any reason for not giving them their own drivers? > + > +static void __init ls1021a_init_machine(void) > +{ > + mxc_arch_reset_init_dt(); This looks to only be used to set up a watchdog timer. Is there any reason this logic can't be moved to the watchdog timer driver? > + of_platform_populate(NULL, of_ls1021a_match_table, NULL, NULL); > +} > + > +static const char *ls1021a_dt_compat[] __initdata = { > + "fsl,ls1021a", > + NULL, > +}; > + > +DT_MACHINE_START(LS1021A, "Freescale LS1021A") > +#ifdef CONFIG_ZONE_DMA > + .dma_zone_size = SZ_128M, > +#endif > + .init_machine = ls1021a_init_machine, > + .dt_compat = ls1021a_dt_compat, > + .restart = mxc_restart, AFAICT, that jsut uses the WDT for restart. Why can't the watchdog driver register itself as a restart device? That would bring us close to an empty machine descriptor, and enable reuse of the WDT and those busses. Thanks, Mark.
>-----Original Message----- >From: Mark Rutland [mailto:mark.rutland@arm.com] >Sent: Wednesday, July 02, 2014 7:21 PM >To: Lu Jingchang-B35083 >Cc: shawn.guo@linaro.org; linux-arm-kernel@lists.infradead.org; >devicetree@vger.kernel.org; Lu Jingchang-B35083 >Subject: Re: [PATCH 4/5] ARM: imx: Add initial support for Freescale >LS1021A > >On Wed, Jul 02, 2014 at 10:02:51AM +0100, Jingchang Lu wrote: >> From: Jingchang Lu <b35083@freescale.com> >> >> diff --git a/arch/arm/mach-imx/mach-ls1021a.c >> b/arch/arm/mach-imx/mach-ls1021a.c >> new file mode 100644 >> index 0000000..d1a9bb9 >> --- /dev/null >> +++ b/arch/arm/mach-imx/mach-ls1021a.c >> @@ -0,0 +1,49 @@ >> +/* >> + * Copyright 2013-2014 Freescale Semiconductor, Inc. >> + * >> + * 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. >> + */ >> + >> +#include <linux/of_platform.h> >> +#include <asm/mach/arch.h> >> + >> +#include "common.h" >> + >> +static const struct of_device_id of_ls1021a_match_table[] = { >> + { >> + .compatible = "simple-bus", >> + }, >> + { >> + .compatible = "fsl,ifc", >> + }, >> + { >> + .compatible = "fsl,fpga-qixis", >> + }, >> + { >> + .compatible = "fsl,qe", >> + }, >> + {} >> +}; > >Are any of thse not always-on (or default-on) MMIO busses? > >Is there any reason for not giving them their own drivers? > Normally these are always-on. The child nodes are handled by different drivers, so to make the devices being added by the of system, they are claimed here. Thanks. >> + >> +static void __init ls1021a_init_machine(void) { >> + mxc_arch_reset_init_dt(); > >This looks to only be used to set up a watchdog timer. Is there any reason >this logic can't be moved to the watchdog timer driver? > >> + >> +DT_MACHINE_START(LS1021A, "Freescale LS1021A") #ifdef CONFIG_ZONE_DMA >> + .dma_zone_size = SZ_128M, >> +#endif >> + .init_machine = ls1021a_init_machine, >> + .dt_compat = ls1021a_dt_compat, >> + .restart = mxc_restart, > >AFAICT, that jsut uses the WDT for restart. Why can't the watchdog driver >register itself as a restart device? > >That would bring us close to an empty machine descriptor, and enable reuse >of the WDT and those busses. > >Thanks, >Mark. Yes, we use the watchdog timer for restart, just as i.MX and Vybrid, the WDT as a common driver it is still work for watchdog. Thanks.
On Thu, Jul 03, 2014 at 11:17:12AM +0100, Jingchang Lu wrote: > >-----Original Message----- > >From: Mark Rutland [mailto:mark.rutland@arm.com] > >Sent: Wednesday, July 02, 2014 7:21 PM > >To: Lu Jingchang-B35083 > >Cc: shawn.guo@linaro.org; linux-arm-kernel@lists.infradead.org; > >devicetree@vger.kernel.org; Lu Jingchang-B35083 > >Subject: Re: [PATCH 4/5] ARM: imx: Add initial support for Freescale > >LS1021A > > > >On Wed, Jul 02, 2014 at 10:02:51AM +0100, Jingchang Lu wrote: > >> From: Jingchang Lu <b35083@freescale.com> > >> > >> diff --git a/arch/arm/mach-imx/mach-ls1021a.c > >> b/arch/arm/mach-imx/mach-ls1021a.c > >> new file mode 100644 > >> index 0000000..d1a9bb9 > >> --- /dev/null > >> +++ b/arch/arm/mach-imx/mach-ls1021a.c > >> @@ -0,0 +1,49 @@ > >> +/* > >> + * Copyright 2013-2014 Freescale Semiconductor, Inc. > >> + * > >> + * 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. > >> + */ > >> + > >> +#include <linux/of_platform.h> > >> +#include <asm/mach/arch.h> > >> + > >> +#include "common.h" > >> + > >> +static const struct of_device_id of_ls1021a_match_table[] = { > >> + { > >> + .compatible = "simple-bus", > >> + }, > >> + { > >> + .compatible = "fsl,ifc", > >> + }, > >> + { > >> + .compatible = "fsl,fpga-qixis", > >> + }, > >> + { > >> + .compatible = "fsl,qe", > >> + }, > >> + {} > >> +}; > > > >Are any of thse not always-on (or default-on) MMIO busses? > > > >Is there any reason for not giving them their own drivers? > > > Normally these are always-on. The child nodes are handled by different drivers, > so to make the devices being added by the of system, they are claimed here. > Thanks. If these are always-on MMIO busses, is there any reason these can't have "simple-bus" as a fallback in their compatible lists in the DT? They would seemd to be compatible with it given they are in the table above... That way we don't need the table at all, and we can always add drivers for them later if we need them... > >> + > >> +static void __init ls1021a_init_machine(void) { > >> + mxc_arch_reset_init_dt(); > > > >This looks to only be used to set up a watchdog timer. Is there any reason > >this logic can't be moved to the watchdog timer driver? > > > >> + > >> +DT_MACHINE_START(LS1021A, "Freescale LS1021A") #ifdef CONFIG_ZONE_DMA > >> + .dma_zone_size = SZ_128M, > >> +#endif > >> + .init_machine = ls1021a_init_machine, > >> + .dt_compat = ls1021a_dt_compat, > >> + .restart = mxc_restart, > > > >AFAICT, that jsut uses the WDT for restart. Why can't the watchdog driver > >register itself as a restart device? > > > >That would bring us close to an empty machine descriptor, and enable reuse > >of the WDT and those busses. > > > >Thanks, > >Mark. > Yes, we use the watchdog timer for restart, just as i.MX and Vybrid, the WDT as a > common driver it is still work for watchdog. Thanks. That doesn't answer the question of why the restart code (and registration thereof) can't live in the WDT driver. Thanks, Mark.
>-----Original Message----- >From: Mark Rutland [mailto:mark.rutland@arm.com] >Sent: Thursday, July 03, 2014 11:12 PM >To: Lu Jingchang-B35083 >Cc: Guo Shawn-R65073; shawn.guo@linaro.org; linux-arm- >kernel@lists.infradead.org; devicetree@vger.kernel.org >Subject: Re: [PATCH 4/5] ARM: imx: Add initial support for Freescale >LS1021A > >On Thu, Jul 03, 2014 at 11:17:12AM +0100, Jingchang Lu wrote: >> >-----Original Message----- >> >From: Mark Rutland [mailto:mark.rutland@arm.com] >> >Sent: Wednesday, July 02, 2014 7:21 PM >> >To: Lu Jingchang-B35083 >> >Cc: shawn.guo@linaro.org; linux-arm-kernel@lists.infradead.org; >> >devicetree@vger.kernel.org; Lu Jingchang-B35083 >> >Subject: Re: [PATCH 4/5] ARM: imx: Add initial support for Freescale >> >LS1021A >> > >> >On Wed, Jul 02, 2014 at 10:02:51AM +0100, Jingchang Lu wrote: >> >> From: Jingchang Lu <b35083@freescale.com> >> >> >> >> diff --git a/arch/arm/mach-imx/mach-ls1021a.c >> >> b/arch/arm/mach-imx/mach-ls1021a.c >> >> new file mode 100644 >> >> index 0000000..d1a9bb9 >> >> --- /dev/null >> >> +++ b/arch/arm/mach-imx/mach-ls1021a.c >> >> @@ -0,0 +1,49 @@ >> >> +/* >> >> + * Copyright 2013-2014 Freescale Semiconductor, Inc. >> >> + * >> >> + * 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. >> >> + */ >> >> + >> >> +#include <linux/of_platform.h> >> >> +#include <asm/mach/arch.h> >> >> + >> >> +#include "common.h" >> >> + >> >> +static const struct of_device_id of_ls1021a_match_table[] = { >> >> + { >> >> + .compatible = "simple-bus", >> >> + }, >> >> + { >> >> + .compatible = "fsl,ifc", >> >> + }, >> >> + { >> >> + .compatible = "fsl,fpga-qixis", >> >> + }, >> >> + { >> >> + .compatible = "fsl,qe", >> >> + }, >> >> + {} >> >> +}; >> > >> >Are any of thse not always-on (or default-on) MMIO busses? >> > >> >Is there any reason for not giving them their own drivers? >> > >> Normally these are always-on. The child nodes are handled by different >> drivers, so to make the devices being added by the of system, they are >claimed here. >> Thanks. > >If these are always-on MMIO busses, is there any reason these can't have >"simple-bus" as a fallback in their compatible lists in the DT? They would >seemd to be compatible with it given they are in the table above... > >That way we don't need the table at all, and we can always add drivers for >them later if we need them... Yes, if they can work well with the default "simple-bus", I will change to it, I will try this. Thanks. > >> >> + >> >> +static void __init ls1021a_init_machine(void) { >> >> + mxc_arch_reset_init_dt(); >> > >> >This looks to only be used to set up a watchdog timer. Is there any >> >reason this logic can't be moved to the watchdog timer driver? >> > >> >> + >> >> +DT_MACHINE_START(LS1021A, "Freescale LS1021A") #ifdef >CONFIG_ZONE_DMA >> >> + .dma_zone_size = SZ_128M, >> >> +#endif >> >> + .init_machine = ls1021a_init_machine, >> >> + .dt_compat = ls1021a_dt_compat, >> >> + .restart = mxc_restart, >> > >> >AFAICT, that jsut uses the WDT for restart. Why can't the watchdog >> >driver register itself as a restart device? >> > >> >That would bring us close to an empty machine descriptor, and enable >> >reuse of the WDT and those busses. >> > >> >Thanks, >> >Mark. >> Yes, we use the watchdog timer for restart, just as i.MX and Vybrid, >> the WDT as a common driver it is still work for watchdog. Thanks. > >That doesn't answer the question of why the restart code (and registration >thereof) can't live in the WDT driver. > >Thanks, >Mark. Several i.MX SoCs have used this mxc_restart currently, and the watchdog driver is shared between them, if here move it to the driver layer, all others needs changes accordingly. So I think if that is preferred, we can move it together some times later. And BTW, what's the preferred restart register manner in the driver, just assign to the arm_pm_restart? Thanks. Best Regards, Jingchang
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index bdfe276..7f24892 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -762,6 +762,23 @@ config SOC_VF610 help This enable support for Freescale Vybrid VF610 processor. +config FSL_SOC + bool + +config SOC_LS1021A + bool "Freescale LS1021A support" + select CPU_V7 + select ARM_GIC + select CLKSRC_OF + select HAVE_ARM_ARCH_TIMER + select HAVE_SMP + select FSL_SOC + select MIGHT_HAVE_PCI + select PCI_DOMAINS if PCI + + help + This enable support for Freescale LS1021A processor. + endif source "arch/arm/mach-imx/devices/Kconfig" diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index a364e20..f49cbdb 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile @@ -114,4 +114,6 @@ obj-$(CONFIG_SOC_IMX53) += mach-imx53.o obj-$(CONFIG_SOC_VF610) += clk-vf610.o mach-vf610.o +obj-$(CONFIG_SOC_LS1021A) += mach-ls1021a.o + obj-y += devices/ diff --git a/arch/arm/mach-imx/mach-ls1021a.c b/arch/arm/mach-imx/mach-ls1021a.c new file mode 100644 index 0000000..d1a9bb9 --- /dev/null +++ b/arch/arm/mach-imx/mach-ls1021a.c @@ -0,0 +1,49 @@ +/* + * Copyright 2013-2014 Freescale Semiconductor, Inc. + * + * 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. + */ + +#include <linux/of_platform.h> +#include <asm/mach/arch.h> + +#include "common.h" + +static const struct of_device_id of_ls1021a_match_table[] = { + { + .compatible = "simple-bus", + }, + { + .compatible = "fsl,ifc", + }, + { + .compatible = "fsl,fpga-qixis", + }, + { + .compatible = "fsl,qe", + }, + {} +}; + +static void __init ls1021a_init_machine(void) +{ + mxc_arch_reset_init_dt(); + of_platform_populate(NULL, of_ls1021a_match_table, NULL, NULL); +} + +static const char *ls1021a_dt_compat[] __initdata = { + "fsl,ls1021a", + NULL, +}; + +DT_MACHINE_START(LS1021A, "Freescale LS1021A") +#ifdef CONFIG_ZONE_DMA + .dma_zone_size = SZ_128M, +#endif + .init_machine = ls1021a_init_machine, + .dt_compat = ls1021a_dt_compat, + .restart = mxc_restart, +MACHINE_END