[PATCH 2/5] at91sam9263ek: add DT file from Linux kernel v4.14-rc4
Andrey Smirnov
andrew.smirnov at gmail.com
Fri Dec 29 18:13:24 PST 2017
On Wed, Dec 27, 2017 at 1:18 PM, Sam Ravnborg <sam at ravnborg.org> wrote:
> Include the at91sam9263ek.dts file from
> linux kernel v4.14-rc4 and wire it up in the build.
>
> Prepare at91sam9263ek lowlevel_init.c to use DT.
>
> Signed-off-by: Sam Ravnborg <sam at ravnborg.org>
> ---
> arch/arm/boards/at91sam9263ek/lowlevel_init.c | 22 ++-
> arch/arm/dts/Makefile | 2 +-
> arch/arm/dts/at91sam9263ek.dts | 246 ++++++++++++++++++++++++++
> arch/arm/mach-at91/Kconfig | 7 +
> 4 files changed, 273 insertions(+), 4 deletions(-)
> create mode 100644 arch/arm/dts/at91sam9263ek.dts
>
> diff --git a/arch/arm/boards/at91sam9263ek/lowlevel_init.c b/arch/arm/boards/at91sam9263ek/lowlevel_init.c
> index 3138bc7ca..86d7a79e9 100644
> --- a/arch/arm/boards/at91sam9263ek/lowlevel_init.c
> +++ b/arch/arm/boards/at91sam9263ek/lowlevel_init.c
> @@ -99,7 +99,7 @@ static void __bare_init at91sam9263ek_board_config(struct at91sam926x_board_cfg
> AT91_RSTC_RSTTYP_WATCHDOG;
> }
>
> -static void __bare_init at91sam9263ek_init(void)
> +static void __bare_init at91sam9263ek_init(void *fdt)
> {
> struct at91sam926x_board_cfg cfg;
>
> @@ -112,14 +112,30 @@ static void __bare_init at91sam9263ek_init(void)
> at91sam926x_board_init(&cfg);
>
> barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc),
> - NULL);
> + fdt);
> }
>
> +#ifdef CONFIG_MACH_AT91SAM9263EK_DT
> +extern char __dtb_at91sam9263ek_start[];
> +
> +ENTRY_FUNCTION(start_at91sam9263ek, r0, r1, r2)
> +{
> + void *fdt;
> +
> + arm_cpu_lowlevel_init();
> +
> + arm_setup_stack(AT91SAM9263_SRAM0_BASE + AT91SAM9263_SRAM0_SIZE - 16);
> + fdt = __dtb_at91sam9263ek_start - get_runtime_offset();
> +
> + at91sam9263ek_init(fdt);
> +}
> +#else
> ENTRY_FUNCTION(start_at91sam9263ek, r0, r1, r2)
> {
> arm_cpu_lowlevel_init();
>
> arm_setup_stack(AT91SAM9263_SRAM0_BASE + AT91SAM9263_SRAM0_SIZE - 16);
>
> - at91sam9263ek_init();
> + at91sam9263ek_init(NULL);
> }
> +#endif
I think you can get away with defining this function once if you do:
if (IS_ENABLED(CONFIG_MACH_AT91SAM9263EK_DT))
fdt = __dtb_at91sam9263ek_start - get_runtime_offset();
else
fdt = NULL;
at91sam9263ek_init(fdt);
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index 4f13d4e37..0526a6f40 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -104,7 +104,7 @@ pbl-dtb-$(CONFIG_MACH_ZII_VF610_DEV) += \
> vf610-zii-cfu1-rev-a.dtb.o \
> vf610-zii-spu3-rev-a.dtb.o \
> vf610-zii-scu4-aib-rev-c.dtb.o
> -
> +pbl-dtb-$(CONFIG_MACH_AT91SAM9263EK_DT) += at91sam9263ek.dtb.o
> pbl-dtb-$(CONFIG_MACH_AT91SAM9X5EK) += at91sam9x5ek.dtb.o
>
> clean-files := *.dtb *.dtb.S .*.dtc .*.pre .*.dts *.dtb.lzo
> diff --git a/arch/arm/dts/at91sam9263ek.dts b/arch/arm/dts/at91sam9263ek.dts
> new file mode 100644
> index 000000000..224748ecc
> --- /dev/null
> +++ b/arch/arm/dts/at91sam9263ek.dts
> @@ -0,0 +1,246 @@
> +/*
> + * at91sam9263ek.dts - Device Tree file for Atmel at91sam9263 reference board
> + *
> + * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
> + *
> + * Licensed under GPLv2 only
> + */
> +/dts-v1/;
> +#include "arm/at91sam9263.dtsi"
> +
AFAIU you are including this from the "dts/" directory, so you may as
well use angle brackets to indicate that, e.g. #include
<arm/at91sam9263.dtsi>.
But more importantly, is there a way you can use <arm/at91sam9263.dts>
and avoid bringing all of the code below in? The only reason I didn't
do that for 9x5ek was because the kernel doesn't have a generic
9x5ek.dts and instead it has specific files for every value of "x", so
to speak (9g45ek, 9g15ek, etc).
E.g. something like this:
https://git.pengutronix.de/cgit/barebox/tree/arch/arm/dts/vf610-zii-dev-rev-c.dts?h=next
> +/ {
> + model = "Atmel at91sam9263ek";
> + compatible = "atmel,at91sam9263ek", "atmel,at91sam9263", "atmel,at91sam9";
> +
> + chosen {
> + bootargs = "mem=64M root=/dev/mtdblock5 rw rootfstype=ubifs";
> + stdout-path = "serial0:115200n8";
> + };
> +
> + memory {
> + reg = <0x20000000 0x4000000>;
> + };
> +
> + clocks {
> + slow_xtal {
> + clock-frequency = <32768>;
> + };
> +
> + main_xtal {
> + clock-frequency = <16367660>;
> + };
> + };
> +
> + ahb {
> + apb {
> + dbgu: serial at ffffee00 {
> + status = "okay";
> + };
> +
> + usart0: serial at fff8c000 {
> + pinctrl-0 = <
> + &pinctrl_usart0
> + &pinctrl_usart0_rts
> + &pinctrl_usart0_cts>;
> + status = "okay";
> + };
> +
> + macb0: ethernet at fffbc000 {
> + phy-mode = "rmii";
> + status = "okay";
> + };
> +
> + usb1: gadget at fff78000 {
> + atmel,vbus-gpio = <&pioA 25 GPIO_ACTIVE_HIGH>;
> + status = "okay";
> + };
> +
> + mmc0: mmc at fff80000 {
> + pinctrl-0 = <
> + &pinctrl_board_mmc0
> + &pinctrl_mmc0_clk
> + &pinctrl_mmc0_slot0_cmd_dat0
> + &pinctrl_mmc0_slot0_dat1_3>;
> + status = "okay";
> + slot at 0 {
> + reg = <0>;
> + bus-width = <4>;
> + cd-gpios = <&pioE 18 GPIO_ACTIVE_HIGH>;
> + wp-gpios = <&pioE 19 GPIO_ACTIVE_HIGH>;
> + };
> + };
> +
> + pinctrl at fffff200 {
> + mmc0 {
> + pinctrl_board_mmc0: mmc0-board {
> + atmel,pins =
> + <AT91_PIOE 18 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH /* PE18 gpio CD pin pull up and deglitch */
> + AT91_PIOE 19 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>; /* PE19 gpio WP pin pull up */
> + };
> + };
> + };
> +
> + spi0: spi at fffa4000 {
> + status = "okay";
> + cs-gpios = <&pioA 5 0>, <0>, <0>, <0>;
> + mtd_dataflash at 0 {
> + compatible = "atmel,at45", "atmel,dataflash";
> + spi-max-frequency = <50000000>;
> + reg = <0>;
> + };
> + };
> +
> + watchdog at fffffd40 {
> + status = "okay";
> + };
> + };
> +
> + fb0: fb at 0x00700000 {
> + display = <&display0>;
> + status = "okay";
> +
> + display0: display {
> + bits-per-pixel = <16>;
> + atmel,lcdcon-backlight;
> + atmel,dmacon = <0x1>;
> + atmel,lcdcon2 = <0x80008002>;
> + atmel,guard-time = <1>;
> +
> + display-timings {
> + native-mode = <&timing0>;
> + timing0: timing0 {
> + clock-frequency = <4965000>;
> + hactive = <240>;
> + vactive = <320>;
> + hback-porch = <1>;
> + hfront-porch = <33>;
> + vback-porch = <1>;
> + vfront-porch = <0>;
> + hsync-len = <5>;
> + vsync-len = <1>;
> + hsync-active = <1>;
> + vsync-active = <1>;
> + };
> + };
> + };
> + };
> +
> + ebi0: ebi at 10000000 {
> + status = "okay";
> +
> + nand_controller: nand-controller {
> + status = "okay";
> + pinctrl-0 = <&pinctrl_nand_cs &pinctrl_nand_rb>;
> + pinctrl-names = "default";
> +
> + nand at 3 {
> + reg = <0x3 0x0 0x800000>;
> + rb-gpios = <&pioA 22 GPIO_ACTIVE_HIGH>;
> + cs-gpios = <&pioA 15 GPIO_ACTIVE_HIGH>;
> + nand-bus-width = <8>;
> + nand-ecc-mode = "soft";
> + nand-on-flash-bbt;
> + label = "atmel_nand";
> +
> + partitions {
> + compatible = "fixed-partitions";
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + at91bootstrap at 0 {
> + label = "at91bootstrap";
> + reg = <0x0 0x20000>;
> + };
> +
> + barebox at 20000 {
> + label = "barebox";
> + reg = <0x20000 0x40000>;
> + };
> +
> + bareboxenv at 60000 {
> + label = "bareboxenv";
> + reg = <0x60000 0x20000>;
> + };
> +
> + bareboxenv2 at 80000 {
> + label = "bareboxenv2";
> + reg = <0x80000 0x20000>;
> + };
> +
> + oftree at 80000 {
> + label = "oftree";
> + reg = <0xa0000 0x20000>;
> + };
> +
> + kernel at a0000 {
> + label = "kernel";
> + reg = <0xc0000 0x400000>;
> + };
> +
> + rootfs at 4a0000 {
> + label = "rootfs";
> + reg = <0x4c0000 0x7800000>;
> + };
> +
> + data at 7ca0000 {
> + label = "data";
> + reg = <0x7cc0000 0x8340000>;
> + };
> + };
> + };
> + };
> + };
> +
> + usb0: ohci at 00a00000 {
> + num-ports = <2>;
> + status = "okay";
> + atmel,vbus-gpio = <&pioA 24 GPIO_ACTIVE_HIGH
> + &pioA 21 GPIO_ACTIVE_HIGH
> + >;
> + };
> + };
> +
> + leds {
> + compatible = "gpio-leds";
> +
> + d3 {
> + label = "d3";
> + gpios = <&pioB 7 GPIO_ACTIVE_HIGH>;
> + linux,default-trigger = "heartbeat";
> + };
> +
> + d2 {
> + label = "d2";
> + gpios = <&pioC 29 GPIO_ACTIVE_LOW>;
> + linux,default-trigger = "nand-disk";
> + };
> + };
> +
> + gpio_keys {
> + compatible = "gpio-keys";
> +
> + left_click {
> + label = "left_click";
> + gpios = <&pioC 5 GPIO_ACTIVE_LOW>;
> + linux,code = <272>;
> + wakeup-source;
> + };
> +
> + right_click {
> + label = "right_click";
> + gpios = <&pioC 4 GPIO_ACTIVE_LOW>;
> + linux,code = <273>;
> + wakeup-source;
> + };
> + };
> +
> + i2c-gpio-0 {
> + status = "okay";
> +
> + 24c512 at 50 {
> + compatible = "24c512";
> + reg = <0x50>;
> + pagesize = <128>;
> + };
> + };
> +};
> diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
> index f5160ade1..5e9c575cc 100644
> --- a/arch/arm/mach-at91/Kconfig
> +++ b/arch/arm/mach-at91/Kconfig
> @@ -20,6 +20,13 @@ config COMMON_CLK_AT91
> select COMMON_CLK
> select MFD_SYSCON
>
> +config MACH_AT91SAM9263EK_DT
> + def_bool y
> + depends on MACH_AT91SAM9263EK && OFDEVICE
> + help
> + Enabled for at91sam9263ek - evaluation kit.
> + But only if we need the device tree (bootstrap do not use DT)
> +
> config HAVE_AT91_SMD
> bool
>
> --
> 2.12.0
>
>
> _______________________________________________
> barebox mailing list
> barebox at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
More information about the barebox
mailing list