From 13ee78907418872cc2c7943e3a82183af8229e8a Mon Sep 17 00:00:00 2001 From: Heiko Schocher Date: Wed, 25 May 2016 07:23:47 +0200 Subject: [PATCH] arm: at91: smartweb: add DM and DTS support MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Heiko Schocher Reviewed-by: Andreas Bießmann [rebased on current ToT] Signed-off-by: Andreas Bießmann --- arch/arm/dts/Makefile | 3 +- arch/arm/dts/at91sam9260-smartweb.dts | 110 ++++++++++++++++++++++++++ arch/arm/mach-at91/Kconfig | 4 + board/siemens/smartweb/smartweb.c | 32 ++++++-- configs/smartweb_defconfig | 7 +- include/configs/smartweb.h | 6 +- 6 files changed, 149 insertions(+), 13 deletions(-) create mode 100644 arch/arm/dts/at91sam9260-smartweb.dts diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 5338a39bba..63b86f1ef1 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -2,7 +2,8 @@ # SPDX-License-Identifier: GPL-2.0+ # -dtb-$(CONFIG_AT91FAMILY) += at91sam9g45-corvus.dtb \ +dtb-$(CONFIG_AT91FAMILY) += at91sam9260-smartweb.dtb \ + at91sam9g45-corvus.dtb \ at91sam9g45-gurnard.dtb dtb-$(CONFIG_S5PC100) += s5pc1xx-smdkc100.dtb diff --git a/arch/arm/dts/at91sam9260-smartweb.dts b/arch/arm/dts/at91sam9260-smartweb.dts new file mode 100644 index 0000000000..faed763e43 --- /dev/null +++ b/arch/arm/dts/at91sam9260-smartweb.dts @@ -0,0 +1,110 @@ +/* + * at91sam9260-smartweb.dts + * (C) Copyright 2016 + * Heiko Schocher, DENX Software Engineering, hs@denx.de. + * + * Based on: + * at91sam9g20ek.dts - Device Tree file for Atmel at91sam9g20ek board + * + * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD + * + * Licensed under GPLv2. + */ +/dts-v1/; +#include "at91sam9260.dtsi" + +/ { + model = "Siemens smartweb"; + compatible = "atmel,at91sam9260", "atmel,at91sam9"; + + chosen { + stdout-path = &dbgu; + }; + + memory { + reg = <0x20000000 0x4000000>; + }; + + clocks { + slow_xtal { + clock-frequency = <32768>; + }; + + main_xtal { + clock-frequency = <18432000>; + }; + }; + + ahb { + apb { + pinctrl@fffff400 { + board { + pinctrl_pck0_as_mck: pck0_as_mck { + atmel,pins = + ; /* PC1 periph B */ + }; + + }; + }; + + dbgu: serial@fffff200 { + status = "okay"; + }; + + usart0: serial@fffb0000 { + pinctrl-0 = + <&pinctrl_usart0 + &pinctrl_usart0_rts + &pinctrl_usart0_cts + &pinctrl_usart0_dtr_dsr + &pinctrl_usart0_dcd + &pinctrl_usart0_ri>; + status = "okay"; + }; + + usart1: serial@fffb4000 { + status = "okay"; + }; + + macb0: ethernet@fffc4000 { + phy-mode = "rmii"; + status = "okay"; + }; + + usb1: gadget@fffa4000 { + atmel,vbus-gpio = <&pioC 5 GPIO_ACTIVE_HIGH>; + status = "okay"; + }; + + ssc0: ssc@fffbc000 { + status = "okay"; + pinctrl-0 = <&pinctrl_ssc0_tx>; + }; + + rtc@fffffd20 { + atmel,rtt-rtc-time-reg = <&gpbr 0x0>; + status = "okay"; + }; + + watchdog@fffffd40 { + status = "okay"; + }; + + gpbr: syscon@fffffd50 { + status = "okay"; + }; + }; + + nand0: nand@40000000 { + nand-bus-width = <8>; + nand-ecc-mode = "soft"; + nand-on-flash-bbt; + status = "okay"; + }; + + usb0: ohci@00500000 { + num-ports = <2>; + status = "okay"; + }; + }; +}; diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 0ff0d1d82d..3adfe7eb35 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig @@ -136,6 +136,10 @@ config TARGET_SMARTWEB bool "Support smartweb" select CPU_ARM926EJS select SUPPORT_SPL + select DM + select DM_SERIAL + select DM_GPIO + select DM_ETH config TARGET_VINCO bool "Support VINCO" diff --git a/board/siemens/smartweb/smartweb.c b/board/siemens/smartweb/smartweb.c index 47a60a72ac..78a7946836 100644 --- a/board/siemens/smartweb/smartweb.c +++ b/board/siemens/smartweb/smartweb.c @@ -17,23 +17,33 @@ */ #include +#include #include #include #include #include #include +#include #include #include #include #include +#include #include -#ifdef CONFIG_MACB # include +#ifndef CONFIG_DM_ETH # include #endif DECLARE_GLOBAL_DATA_PTR; +static void smartweb_request_gpio(void) +{ + gpio_request(CONFIG_SYS_NAND_ENABLE_PIN, "nand ena"); + gpio_request(CONFIG_SYS_NAND_READY_PIN, "nand rdy"); + gpio_request(AT91_PIN_PA26, "ena PHY"); +} + static void smartweb_nand_hw_init(void) { struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; @@ -65,7 +75,6 @@ static void smartweb_nand_hw_init(void) at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); } -#ifdef CONFIG_MACB static void smartweb_macb_hw_init(void) { struct at91_port *pioa = (struct at91_port *)ATMEL_BASE_PIOA; @@ -108,7 +117,6 @@ static void smartweb_macb_hw_init(void) /* Initialize EMAC=MACB hardware */ at91_macb_hw_init(); } -#endif /* CONFIG_MACB */ #ifdef CONFIG_USB_GADGET_AT91 #include @@ -133,11 +141,13 @@ int board_early_init_f(void) { /* enable this here, as we have SPL without serial support */ at91_seriald_hw_init(); + smartweb_request_gpio(); return 0; } int board_init(void) { + smartweb_request_gpio(); /* power LED red */ at91_set_gpio_output(AT91_PIN_PC6, 0); at91_set_gpio_output(AT91_PIN_PC7, 1); @@ -157,9 +167,7 @@ int board_init(void) gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; smartweb_nand_hw_init(); -#ifdef CONFIG_MACB smartweb_macb_hw_init(); -#endif return 0; } @@ -171,12 +179,14 @@ int dram_init(void) return 0; } +#ifndef CONFIG_DM_ETH #ifdef CONFIG_MACB int board_eth_init(bd_t *bis) { return macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC0, 0x00); } #endif /* CONFIG_MACB */ +#endif #if defined(CONFIG_SPL_BUILD) #include @@ -192,8 +202,9 @@ void matrix_init(void) &mat->scfg[3]); } -void spl_board_init(void) +void at91_spl_board_init(void) { + smartweb_request_gpio(); /* power LED orange */ at91_set_gpio_output(AT91_PIN_PC6, 1); at91_set_gpio_output(AT91_PIN_PC7, 1); @@ -245,3 +256,12 @@ void mem_init(void) sdramc_initialize(ATMEL_BASE_CS1, &setting); } #endif + +static struct atmel_serial_platdata at91sam9260_serial_plat = { + .base_addr = ATMEL_BASE_DBGU, +}; + +U_BOOT_DEVICE(at91sam9260_serial) = { + .name = "serial_atmel", + .platdata = &at91sam9260_serial_plat, +}; diff --git a/configs/smartweb_defconfig b/configs/smartweb_defconfig index 1c29a290c0..cf8bff6da0 100644 --- a/configs/smartweb_defconfig +++ b/configs/smartweb_defconfig @@ -1,6 +1,7 @@ CONFIG_ARM=y CONFIG_ARCH_AT91=y CONFIG_TARGET_SMARTWEB=y +CONFIG_DEFAULT_DEVICE_TREE="at91sam9260-smartweb" CONFIG_SPL=y CONFIG_FIT=y CONFIG_SYS_EXTRA_OPTIONS="AT91SAM9260" @@ -16,13 +17,17 @@ CONFIG_AUTOBOOT_STOP_STR="\x1b\x1b" CONFIG_CMD_USB=y CONFIG_CMD_DFU=y # CONFIG_CMD_FPGA is not set +# CONFIG_CMD_SOURCE is not set CONFIG_CMD_DHCP=y CONFIG_CMD_PING=y CONFIG_CMD_FAT=y +CONFIG_OF_CONTROL=y +CONFIG_OF_EMBED=y CONFIG_USB=y +CONFIG_DM_USB=y CONFIG_USB_GADGET=y CONFIG_USB_GADGET_DOWNLOAD=y CONFIG_G_DNL_MANUFACTURER="Siemens AG" CONFIG_G_DNL_VENDOR_NUM=0x0908 CONFIG_G_DNL_PRODUCT_NUM=0x02d2 -CONFIG_OF_LIBFDT=y +# CONFIG_EFI_LOADER is not set diff --git a/include/configs/smartweb.h b/include/configs/smartweb.h index fc4153aba8..6add3916fa 100644 --- a/include/configs/smartweb.h +++ b/include/configs/smartweb.h @@ -45,7 +45,7 @@ #define CONFIG_CMDLINE_TAG /* pass commandline to Kernel */ #define CONFIG_SETUP_MEMORY_TAGS /* pass memory defs to kernel */ #define CONFIG_INITRD_TAG /* pass initrd param to kernel */ -#define CONFIG_SKIP_LOWLEVEL_INIT /* U-Boot is loaded by a bootloader */ +#define CONFIG_SKIP_LOWLEVEL_INIT_ONLY /* U-Boot is loaded by a bootloader */ #define CONFIG_BOARD_EARLY_INIT_F /* call board_early_init_f() */ #define CONFIG_DISPLAY_CPUINFO /* display CPU Info at startup */ @@ -157,10 +157,6 @@ #define CONFIG_SYS_USB_OHCI_SLOT_NAME "at91sam9260" #define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 2 -#define CONFIG_USB_HOST_ETHER -#define CONFIG_USB_ETHER_ASIX -#define CONFIG_USB_ETHER_MCS7830 - /* USB DFU support */ #define CONFIG_CMD_MTDPARTS #define CONFIG_MTD_DEVICE -- 2.30.2