Steps to submit a new arch/arm port
Arnd Bergmann
arnd at arndb.de
Tue Sep 22 07:51:48 PDT 2015
On Tuesday 22 September 2015 16:36:48 Mason wrote:
> On 21/09/2015 17:49, Arnd Bergmann wrote:
> >
> > - As you are probably aware, please split the series into multiple patches,
> > doing one thing at a time. A lot of the patches don't have dependencies
> > on one another and can just get merged as soon as they are ready
>
> I'm supposed to use git-format-patch, right?
Yes, and follow Documentation/SubmittingPatches
> > [snip advice for drivers]
> > - no mach-types changes please
>
> The new way is DT_MACHINE_START?
Right.
> > - whatever you need in smp_twd.c will have to get merged by Russell,
> > the other patches go through the arm-soc tree.
>
> One change is a temp wart for getting twd_clk until I have proper DT.
>
> The other change is to remove CLOCK_EVT_FEAT_C3STOP for my board.
> (We discussed this in May.)
>
> Thanks for your guidance. Just to get the ball rolling, here's
> the full platform patch minus drivers.
>
> Open question:
>
> 1) arch/arm/Kconfig vs arch/arm/mach-tangox/Kconfig
> What goes in the first? What goes in the second?
The first only gets a single line to include the second.
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 1c5021002fe4..06002e552afd 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -758,6 +758,21 @@ config ARCH_OMAP1
> help
> Support for older TI OMAP1 (omap7xx, omap15xx or omap16xx)
>
> +config ARCH_TANGOX
> + bool "Sigma Designs Tango"
> + select CLKDEV_LOOKUP
> + select HAVE_CLK
> + select HAVE_SMP
> + select ARCH_REQUIRE_GPIOLIB
> + select ARCH_HAS_CPUFREQ
> + select CLKSRC_MMIO
> + select GENERIC_CLOCKEVENTS
> + select GENERIC_IRQ_CHIP
> + select ARCH_HAS_HOLES_MEMORYMODEL
> + select SPARSE_IRQ
> + help
> + Support for Sigma Designs Tango platform.
> +
> endchoice
Move this to the platform Kconfig file. Also, drop all the
'select' statements that are implied by ARCH_MULTIPLATFORM
and ARCH_MULTI_V7
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index 246473a244f6..0ac4ed7c267e 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -1,5 +1,6 @@
> ifeq ($(CONFIG_OF),y)
>
> +dtb-$(CONFIG_ARCH_TANGOX) += tango.dtb
> dtb-$(CONFIG_ARCH_ALPINE) += \
> alpine-db.dtb
Keep this sorted alphabetically.
> diff --git a/arch/arm/boot/dts/tango.dts b/arch/arm/boot/dts/tango.dts
> new file mode 100644
> index 000000000000..de3bf7ccc760
> --- /dev/null
> +++ b/arch/arm/boot/dts/tango.dts
name this after the actual board you use, put everything that is not
specific to the board into a tango4.dtsi file.
> + cpublock: cpublock {
> + compatible = "simple-bus";
> + reg = <0x60000 0x10000>;
A "simple-bus" does not have a 'reg' property normally. If you
have to program some of the registers, give it a different
compatible string that the driver for this bus can match.
> + ranges = <0x0 0x60000 0x10000>;
> + interrupt-parent = <&irqintc>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + intc: intc at e000 {
> + compatible = "sigma,tango-intc";
> + reg = <0xe000 0x1000>;
> + ranges = <0x0 0xe000 0x1000>;
> + interrupt-parent = <&gic>;
> + interrupt-controller;
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + irqintc: irq at 000 {
> + reg = <0x000 0x100>;
> + interrupt-parent = <&gic>;
> + interrupt-controller;
> + #interrupt-cells = <2>;
> + interrupts = <0 2 4>;
> + label = "IRQ";
> + };
You can probably drop the label.
> + fiqintc: fiq at 100 {
> + reg = <0x100 0x100>;
> + interrupt-parent = <&gic>;
> + interrupt-controller;
> + #interrupt-cells = <2>;
> + interrupts = <0 3 4>;
> + label = "FIQ";
> + };
> +
> + iiqintc: iiq at 300 {
> + reg = <0x300 0x100>;
> + interrupt-parent = <&gic>;
> + interrupt-controller;
> + #interrupt-cells = <2>;
> + interrupts = <0 4 4>;
> + label = "IIQ";
> + };
> + };
> + };
> +
> +};
> diff --git a/arch/arm/mach-tangox/Kconfig b/arch/arm/mach-tangox/Kconfig
> new file mode 100644
> index 000000000000..aba4eef9227c
> --- /dev/null
> +++ b/arch/arm/mach-tangox/Kconfig
> @@ -0,0 +1,48 @@
> +if ARCH_TANGOX
> +
> +config UNCOMPRESS_INCLUDE
> + string
> + default "debug/uncompress.h"
Better do this like everyone else.
> +config ARM_L1_CACHE_SHIFT
> + int
> + default 5
This conflicts with the other definition of the same symbol.
> +config MACH_TANGOX_87XX
> + bool "Sigma Designs TANGOX 87XX Board"
> + default y
> + depends on ARCH_TANGOX
> + select MIGHT_HAVE_CACHE_L2X0
> + select CPU_V7
> + select ARM_GIC
> + select VFP
> + select SMP
> + select LOCAL_TIMERS if SMP
> + select HAVE_ARM_TWD if SMP
> + select HAVE_ARM_SCU if SMP
> + select PL310_ERRATA_588369
> + select PL310_ERRATA_727915
> + select ARM_ERRATA_754322
> + select ARM_ERRATA_775420
> + select ARCH_HAS_OPP
> + select PM_OPP if PM
> + select USB_ARCH_HAS_EHCI if USB_SUPPORT
> + select ARM_CPU_SUSPEND if PM
> + select CPU_USE_DOMAINS if MMU
> + select COMMON_CLK
> + select TANGOX
Most of these are already implied by teh generic options.
> +void __init tangox_timer_init(void)
> +{
> + int err;
> +
> + clkgen_base = ioremap(CLKGEN_BASE, 0x100);
Remove all hardcoded physical memory addresses.
> + if (clkgen_base == NULL) return;
> +
> + register_current_timer_delay(&delay_timer);
> + sched_clock_register(read_sched_clock, 32, XTAL_FREQ);
> +
> + err = clocksource_register_hz(&tangox_xtal, XTAL_FREQ);
> + if (err) pi_alert("Failed to register tangox_xtal clocksource!\n");
> +
> + tangox_clock_tree_register();
> +
> + of_clk_init(NULL);
> + clocksource_of_init();
> +}
CLK_OF_DECLARE() for the clk
CLOCKSOURCE_OF_DECLARE() for the clocksource/clockevent
Make these two drivers.
> +static struct map_desc tango_map_desc[] __initdata = {
> + {
> + .virtual = TANGO_IO_START,
> + .pfn =__phys_to_pfn(0),
> + .length = TANGO_IO_SIZE,
> + .type = MT_DEVICE,
> + },
> +};
> +
> +static void __init tango_map_io(void)
> +{
> + iotable_init(tango_map_desc, ARRAY_SIZE(tango_map_desc));
> +}
What is this for? Most platforms don't need this.
> +extern void __init tangox_timer_init(void);
> +//extern struct smp_operations tangox_smp_ops;
Never put 'extern' declarations into a .c file.
> +static const char *tango_dt_compat[] = { "sigma,tango4-soc", NULL };
> +
> +MACHINE_START(TANGOX_87XX, "TANGOX_87XX")
> + .atag_offset = 0x100,
> + .init_time = tangox_timer_init,
> + .map_io = tango_map_io,
> + //.smp = &tangox_smp_ops,
> + //.restart = tango_restart, /*** REQUIRED FOR CLEAN REBOOT ***/
> + .dt_compat = tango_dt_compat,
> +MACHINE_END
All except the dt_compat can be removed here.
Arnd
More information about the linux-arm-kernel
mailing list