[PATCH v2 01/10] ARM: NUC900: Add nuc970 machine support
NUC970 is a new SoC of Nuvoton nuc900 series, this patch is to add machine file support for it. Signed-off-by: Wan Zongshun --- arch/arm/mach-w90x900/Kconfig | 20 arch/arm/mach-w90x900/Makefile | 3 +++ arch/arm/mach-w90x900/nuc900.c | 41 + 3 files changed, 64 insertions(+) create mode 100644 arch/arm/mach-w90x900/nuc900.c diff --git a/arch/arm/mach-w90x900/Kconfig b/arch/arm/mach-w90x900/Kconfig index 69bab32..80ab00c 100644 --- a/arch/arm/mach-w90x900/Kconfig +++ b/arch/arm/mach-w90x900/Kconfig @@ -15,6 +15,26 @@ config CPU_NUC960 help Support for NUCP960 of Nuvoton NUC900 CPUs. +config SOC_NUC970 + bool "Nuvoton NUC970 SoC support" + select COMMON_CLK + select GENERIC_IRQ_CHIP + select HAVE_CLK_PREPARE + select IRQ_DOMAIN + select MULTI_IRQ_HANDLER + select MFD_SYSCON + select NUC900_TIMER + select SOC_NUC900 + select USE_OF + help + Support for NUC970 of Nuvoton NUC900 SoCs. + The NUC970 series runs up to 300 MHz, with 16 KB I-cache, + 16 KB D-cache and MMU, 56KB embedded SRAM and 16 KB Internal + Boot ROM for booting from USB, NAND and SPI FLASH. + Detailed information please check the following link: + https://github.com/zswan/nuc900-document/blob/master/ + NUC970_TechnicalReferenceManual_EN_Rev1.30.pdf + menu "W90P910 Machines" config MACH_W90P910EVB diff --git a/arch/arm/mach-w90x900/Makefile b/arch/arm/mach-w90x900/Makefile index 828c032..d13ba5a 100644 --- a/arch/arm/mach-w90x900/Makefile +++ b/arch/arm/mach-w90x900/Makefile @@ -4,8 +4,10 @@ # Object file lists. +ifeq ($(CONFIG_SOC_NUC970),) obj-y := irq.o time.o mfp.o gpio.o clock.o obj-y += clksel.o dev.o cpu.o +endif # W90X900 CPU support files obj-$(CONFIG_CPU_W90P910) += nuc910.o @@ -17,3 +19,4 @@ obj-$(CONFIG_CPU_NUC960) += nuc960.o obj-$(CONFIG_MACH_W90P910EVB) += mach-nuc910evb.o obj-$(CONFIG_MACH_W90P950EVB) += mach-nuc950evb.o obj-$(CONFIG_MACH_W90N960EVB) += mach-nuc960evb.o +obj-$(CONFIG_SOC_NUC970) += nuc900.o diff --git a/arch/arm/mach-w90x900/nuc900.c b/arch/arm/mach-w90x900/nuc900.c new file mode 100644 index 000..309c332 --- /dev/null +++ b/arch/arm/mach-w90x900/nuc900.c @@ -0,0 +1,41 @@ +/* + * Copyright 2016 Wan Zongshun + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +static void __init nuc900_machine_init(void) +{ + of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); +} + +static const char *nuc900_dt_compat[] __initconst = { + "nuvoton,nuc970", + NULL, +}; + +DT_MACHINE_START(nuc900_dt, "Nuvoton NUC900 (Device Tree Support)") + .init_machine = nuc900_machine_init, + .dt_compat = nuc900_dt_compat, +MACHINE_END -- 2.7.4
Re: [PATCH v2 01/10] ARM: NUC900: Add nuc970 machine support
On Sunday, July 10, 2016 3:27:21 PM CEST Wan Zongshun wrote: > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > + > +static void __init nuc900_machine_init(void) > +{ > + of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); > +} This is the default for .init_machine, so you can leave the function undefined. > +static const char *nuc900_dt_compat[] __initconst = { > + "nuvoton,nuc970", > + NULL, > +}; > + > +DT_MACHINE_START(nuc900_dt, "Nuvoton NUC900 (Device Tree Support)") > + .init_machine = nuc900_machine_init, > + .dt_compat = nuc900_dt_compat, > +MACHINE_END > After that, you can probably remove most of the #include statements. The file is still needed for now, until you move to ARCH_MULTIPLATFORM, at which point the entire machine descriptor is redundant. Arnd
Re: [PATCH v2 01/10] ARM: NUC900: Add nuc970 machine support
On Sunday, July 10, 2016 3:27:21 PM CEST Wan Zongshun wrote: > +ifeq ($(CONFIG_SOC_NUC970),) > obj-y := irq.o time.o mfp.o gpio.o clock.o > obj-y += clksel.o dev.o cpu.o > +endif > # W90X900 CPU support files When mfp.o is disabled like this, I get a link error in two drivers using the exported interface: ERROR: "mfp_set_groupg" [drivers/spi/spi-nuc900.ko] undefined! ERROR: "mfp_set_groupi" [drivers/input/keyboard/w90p910_keypad.ko] undefined! Any idea for a better migration strategy? Arnd
Re: [PATCH v2 01/10] ARM: NUC900: Add nuc970 machine support
On 2016年07月12日 00:04, Arnd Bergmann wrote: On Sunday, July 10, 2016 3:27:21 PM CEST Wan Zongshun wrote: +ifeq ($(CONFIG_SOC_NUC970),) obj-y := irq.o time.o mfp.o gpio.o clock.o obj-y += clksel.o dev.o cpu.o +endif # W90X900 CPU support files When mfp.o is disabled like this, I get a link error in two drivers using the exported interface: ERROR: "mfp_set_groupg" [drivers/spi/spi-nuc900.ko] undefined! ERROR: "mfp_set_groupi" [drivers/input/keyboard/w90p910_keypad.ko] undefined! Why remove mfp modules? this multifunction pin driver should be used for those two drivers, if no mfp_set_groupX, I don't think driver can work. Now mfp has standard driver subsystem? Any idea for a better migration strategy? Arnd
Re: [PATCH v2 01/10] ARM: NUC900: Add nuc970 machine support
On 2016年07月12日 12:30, Wan Zongshun wrote: On 2016年07月12日 00:04, Arnd Bergmann wrote: On Sunday, July 10, 2016 3:27:21 PM CEST Wan Zongshun wrote: +ifeq ($(CONFIG_SOC_NUC970),) obj-y := irq.o time.o mfp.o gpio.o clock.o obj-y += clksel.o dev.o cpu.o +endif # W90X900 CPU support files When mfp.o is disabled like this, I get a link error in two drivers using the exported interface: ERROR: "mfp_set_groupg" [drivers/spi/spi-nuc900.ko] undefined! ERROR: "mfp_set_groupi" [drivers/input/keyboard/w90p910_keypad.ko] undefined! Why remove mfp modules? this multifunction pin driver should be used for those two drivers, if no mfp_set_groupX, I don't think driver can work. Now mfp has standard driver subsystem? Any idea for a better migration strategy? Arnd, If you still think the mfp should be removed, we can send a series patches to instead of using mfp interface quickly, and do mfp set in local driver. Do you think it is ok? Arnd ___ linux-arm-kernel mailing list linux-arm-ker...@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Re: [PATCH v2 01/10] ARM: NUC900: Add nuc970 machine support
On Tuesday, July 12, 2016 3:14:47 PM CEST Wan Zongshun wrote: > On 2016年07月12日 12:30, Wan Zongshun wrote: > > > > > > On 2016年07月12日 00:04, Arnd Bergmann wrote: > >> On Sunday, July 10, 2016 3:27:21 PM CEST Wan Zongshun wrote: > >>> +ifeq ($(CONFIG_SOC_NUC970),) > >>> obj-y := irq.o time.o mfp.o gpio.o clock.o > >>> obj-y += clksel.o dev.o cpu.o > >>> +endif > >>> # W90X900 CPU support files > >> > >> When mfp.o is disabled like this, I get a link error in two drivers > >> using the exported interface: > >> > >> ERROR: "mfp_set_groupg" [drivers/spi/spi-nuc900.ko] undefined! > >> ERROR: "mfp_set_groupi" [drivers/input/keyboard/w90p910_keypad.ko] > >> undefined! > > > > Why remove mfp modules? this multifunction pin driver should be used for > > those two drivers, if no mfp_set_groupX, I don't think driver can work. > > > > Now mfp has standard driver subsystem? > > > >> > >> Any idea for a better migration strategy? > > Arnd, If you still think the mfp should be removed, we can send a series > patches to instead of using mfp interface quickly, and do mfp set in > local driver. Do you think it is ok? I don't think setting it locally in the driver is a good idea. In the long run, this should go through the pinctrl framework, but there is no need to implement that right away. Until then, I think using the existing mfp.o code is fine, it will just need to be adapted slightly to understand the DT based device names. Arnd