[U-Boot] [PATCH 0/5 v3] Add DT based ethernet driver for SMDK5250

This patch series enables the DT support on SMDK5250. Ethernet is the first driver whose discovery is based on DT node. More DT based drivers to be added subsequently
Changes since v1: - Renamed the smdk5250.h file to exynos5250-dt.h to create a common configuration file which can be used by all the boards based on exynos5250 using Device Tree. - Created a new smdk5250.h file specifying the dts file specific to SMDK5250 - Incorporated minor nit (removal of blank lines) Changes since v2: - Rebased the "Add DT node definition for SROM and SMSC9215" patch on u-boot-samsung.git
Hatim Ali (5): EXYNOS5: FDT: add initial dts file for EXYNOS5250, SMDK5250 fdt: exynos5: Add DT node definition for SROM and SMSC9215 exynos5: Add DT based driver for SMC911X ethernet exynos5: config: Rename the smdk5250.h to exynos5250-dt.h SMDK5250: config: Add configuration file for SMDK5250 board
arch/arm/dts/exynos5250.dtsi | 31 ++++ arch/arm/include/asm/arch-exynos/sromc.h | 18 ++ board/samsung/dts/exynos5250-smdk5250.dts | 29 +++ board/samsung/smdk5250/smdk5250.c | 115 +++++++++---- include/configs/exynos5250-dt.h | 267 +++++++++++++++++++++++++++++ include/configs/smdk5250.h | 245 +------------------------- include/fdtdec.h | 2 + lib/fdtdec.c | 2 + 8 files changed, 442 insertions(+), 267 deletions(-) create mode 100644 arch/arm/dts/exynos5250.dtsi create mode 100644 board/samsung/dts/exynos5250-smdk5250.dts create mode 100644 include/configs/exynos5250-dt.h

This patch adds initial dts file for EXYNOS5250 SoC. This dts file currently include only ethernet devices and properties. More devices to be added in subsequent patches. Also add the dts file for SMDK5250 board which uses the EXYNOS5250 dts file.
Signed-off-by: Hatim Ali hatim.rv@samsung.com Acked-by: Simon Glass sjg@chromium.org --- Changes since v1: - Added Acked-by Simon Glass Changes since v2: - No Change
arch/arm/dts/exynos5250.dtsi | 31 +++++++++++++++++++++++++++++ board/samsung/dts/exynos5250-smdk5250.dts | 29 +++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 0 deletions(-) create mode 100644 arch/arm/dts/exynos5250.dtsi create mode 100644 board/samsung/dts/exynos5250-smdk5250.dts
diff --git a/arch/arm/dts/exynos5250.dtsi b/arch/arm/dts/exynos5250.dtsi new file mode 100644 index 0000000..fa4d498 --- /dev/null +++ b/arch/arm/dts/exynos5250.dtsi @@ -0,0 +1,31 @@ +/* + * SAMSUNG EXYNOS5250 SoC device tree source + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. + * http://www.samsung.com + * + * SAMSUNG EXYNOS5250 SoC device nodes are listed in this file. + * EXYNOS5250 based board files can include this file and provide + * values for board specfic bindings. + * + * Note: This file does not include device nodes for all the controllers in + * EXYNOS5250 SoC. As device tree coverage for EXYNOS5250 increases, + * additional nodes can be added to this file. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. +*/ + +/include/ "skeleton.dtsi" + +/ { + compatible = "samsung,exynos5250"; + + sromc@12250000 { + compatible = "samsung,exynos-sromc"; + reg = <0x12250000 0x20>; + #address-cells = <1>; + #size-cells = <0>; + }; +}; diff --git a/board/samsung/dts/exynos5250-smdk5250.dts b/board/samsung/dts/exynos5250-smdk5250.dts new file mode 100644 index 0000000..b6fbb67 --- /dev/null +++ b/board/samsung/dts/exynos5250-smdk5250.dts @@ -0,0 +1,29 @@ +/* + * SAMSUNG SMDK5250 board device tree source + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. + * http://www.samsung.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. +*/ + +/dts-v1/; +/include/ ARCH_CPU_DTS + +/ { + model = "SAMSUNG SMDK5250 board based on EXYNOS5250"; + compatible = "samsung,smdk5250", "samsung,exynos5250"; + + sromc@12250000 { + bank = <1>; + srom-timing = <1 9 12 1 6 1 1>; + width = <2>; + lan@5000000 { + compatible = "smsc,lan9215", "smsc,lan"; + reg = <0x5000000 0x100>; + phy-mode = "mii"; + }; + }; +};

Add the compatibility string and constant for the ethernet driver so the device tree parsing code can recognize it.
Signed-off-by: Hatim Ali hatim.rv@samsung.com Acked-by: Simon Glass sjg@chromium.org --- Changes since v1: - Removed extra blank line before COMPAT_SMSC_LAN9215 - Added Acked-by: Simon Glass Changes since v2: - Rebased on u-boot-samsung
include/fdtdec.h | 2 ++ lib/fdtdec.c | 2 ++ 2 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/include/fdtdec.h b/include/fdtdec.h index 64e5cff..da3c85f 100644 --- a/include/fdtdec.h +++ b/include/fdtdec.h @@ -68,6 +68,8 @@ enum fdt_compat_id { COMPAT_NVIDIA_TEGRA20_NAND, /* Tegra2 NAND controller */ COMPAT_NVIDIA_TEGRA20_PWM, /* Tegra 2 PWM controller */ COMPAT_NVIDIA_TEGRA20_DC, /* Tegra 2 Display controller */ + COMPAT_SMSC_LAN9215, /* SMSC 10/100 Ethernet LAN9215 */ + COMPAT_SAMSUNG_EXYNOS5_SROMC, /* Exynos5 SROMC */
COMPAT_COUNT, }; diff --git a/lib/fdtdec.c b/lib/fdtdec.c index 23e0205..85e733c 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -45,6 +45,8 @@ static const char * const compat_names[COMPAT_COUNT] = { COMPAT(NVIDIA_TEGRA20_NAND, "nvidia,tegra20-nand"), COMPAT(NVIDIA_TEGRA20_PWM, "nvidia,tegra20-pwm"), COMPAT(NVIDIA_TEGRA20_DC, "nvidia,tegra20-dc"), + COMPAT(SMSC_LAN9215, "smsc,lan9215"), + COMPAT(SAMSUNG_EXYNOS5_SROMC, "samsung,exynos-sromc"), };
const char *fdtdec_get_compatible(enum fdt_compat_id id)

Add device tree based ethernet driver for SMC911X controller on SMDK5250 boards.
Signed-off-by: Hatim Ali hatim.rv@samsung.com Acked-by: Simon Glass sjg@chromium.org --- Changes since v1: - Added Acked-by Simon Glass Changes since v2: - No Change
arch/arm/include/asm/arch-exynos/sromc.h | 18 +++++ board/samsung/smdk5250/smdk5250.c | 115 ++++++++++++++++++++++-------- 2 files changed, 103 insertions(+), 30 deletions(-)
diff --git a/arch/arm/include/asm/arch-exynos/sromc.h b/arch/arm/include/asm/arch-exynos/sromc.h index f616bcb..dc6aae2 100644 --- a/arch/arm/include/asm/arch-exynos/sromc.h +++ b/arch/arm/include/asm/arch-exynos/sromc.h @@ -48,4 +48,22 @@ struct s5p_sromc { /* Configure the Band Width and Bank Control Regs for required SROMC Bank */ void s5p_config_sromc(u32 srom_bank, u32 srom_bw_conf, u32 srom_bc_conf);
+enum { + FDT_SROM_PMC, + FDT_SROM_TACP, + FDT_SROM_TAH, + FDT_SROM_TCOH, + FDT_SROM_TACC, + FDT_SROM_TCOS, + FDT_SROM_TACS, + + FDT_SROM_TIMING_COUNT, +}; + +struct fdt_sromc { + u8 bank; /* srom bank number */ + u8 width; /* bus width in bytes */ + unsigned int timing[FDT_SROM_TIMING_COUNT]; /* timing parameters */ +}; + #endif /* __ASM_ARCH_SROMC_H_ */ diff --git a/board/samsung/smdk5250/smdk5250.c b/board/samsung/smdk5250/smdk5250.c index 4c50342..ac7346d 100644 --- a/board/samsung/smdk5250/smdk5250.c +++ b/board/samsung/smdk5250/smdk5250.c @@ -21,6 +21,7 @@ */
#include <common.h> +#include <fdtdec.h> #include <asm/io.h> #include <i2c.h> #include <netdev.h> @@ -34,34 +35,6 @@
DECLARE_GLOBAL_DATA_PTR;
-#ifdef CONFIG_SMC911X -static int smc9115_pre_init(void) -{ - u32 smc_bw_conf, smc_bc_conf; - int err; - - /* Ethernet needs data bus width of 16 bits */ - smc_bw_conf = SROMC_DATA16_WIDTH(CONFIG_ENV_SROM_BANK) - | SROMC_BYTE_ENABLE(CONFIG_ENV_SROM_BANK); - - smc_bc_conf = SROMC_BC_TACS(0x01) | SROMC_BC_TCOS(0x01) - | SROMC_BC_TACC(0x06) | SROMC_BC_TCOH(0x01) - | SROMC_BC_TAH(0x0C) | SROMC_BC_TACP(0x09) - | SROMC_BC_PMC(0x01); - - /* Select and configure the SROMC bank */ - err = exynos_pinmux_config(PERIPH_ID_SROMC, - CONFIG_ENV_SROM_BANK | PINMUX_FLAG_16BIT); - if (err) { - debug("SROMC not configured\n"); - return err; - } - - s5p_config_sromc(CONFIG_ENV_SROM_BANK, smc_bw_conf, smc_bc_conf); - return 0; -} -#endif - int board_init(void) { gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL); @@ -115,12 +88,94 @@ void dram_init_banksize(void) PHYS_SDRAM_8_SIZE); }
+#ifdef CONFIG_OF_CONTROL +static int decode_sromc(const void *blob, struct fdt_sromc *config) +{ + int err; + int node; + + node = fdtdec_next_compatible(blob, 0, COMPAT_SAMSUNG_EXYNOS5_SROMC); + if (node < 0) { + debug("Could not find SROMC node\n"); + return node; + } + + config->bank = fdtdec_get_int(blob, node, "bank", 0); + config->width = fdtdec_get_int(blob, node, "width", 2); + + err = fdtdec_get_int_array(blob, node, "srom-timing", config->timing, + FDT_SROM_TIMING_COUNT); + if (err < 0) { + debug("Could not decode SROMC configuration\n"); + return -FDT_ERR_NOTFOUND; + } + + return 0; +} +#endif + int board_eth_init(bd_t *bis) { #ifdef CONFIG_SMC911X - if (smc9115_pre_init()) + u32 smc_bw_conf, smc_bc_conf; + struct fdt_sromc config; + fdt_addr_t base_addr; + int node; + +#ifdef CONFIG_OF_CONTROL + node = decode_sromc(gd->fdt_blob, &config); + if (node < 0) { + debug("%s: Could not find sromc configuration\n", __func__); + return 0; + } + node = fdtdec_next_compatible(gd->fdt_blob, node, COMPAT_SMSC_LAN9215); + if (node < 0) { + debug("%s: Could not find lan9215 configuration\n", __func__); + return 0; + } + + /* We now have a node, so any problems from now on are errors */ + base_addr = fdtdec_get_addr(gd->fdt_blob, node, "reg"); + if (base_addr == FDT_ADDR_T_NONE) { + debug("%s: Could not find lan9215 address\n", __func__); return -1; - return smc911x_initialize(0, CONFIG_SMC911X_BASE); + } +#else + /* Non-FDT configuration - bank number and timing parameters*/ + config.bank = CONFIG_ENV_SROM_BANK; + config.width = 2; + + config.timing[FDT_SROM_TACS] = 0x01; + config.timing[FDT_SROM_TCOS] = 0x01; + config.timing[FDT_SROM_TACC] = 0x06; + config.timing[FDT_SROM_TCOH] = 0x01; + config.timing[FDT_SROM_TAH] = 0x0C; + config.timing[FDT_SROM_TACP] = 0x09; + config.timing[FDT_SROM_PMC] = 0x01; + base_addr = CONFIG_SMC911X_BASE; +#endif + + /* Ethernet needs data bus width of 16 bits */ + if (config.width != 2) { + debug("%s: Unsupported bus width %d\n", __func__, + config.width); + return -1; + } + smc_bw_conf = SROMC_DATA16_WIDTH(config.bank) + | SROMC_BYTE_ENABLE(config.bank); + + smc_bc_conf = SROMC_BC_TACS(config.timing[FDT_SROM_TACS]) |\ + SROMC_BC_TCOS(config.timing[FDT_SROM_TCOS]) |\ + SROMC_BC_TACC(config.timing[FDT_SROM_TACC]) |\ + SROMC_BC_TCOH(config.timing[FDT_SROM_TCOH]) |\ + SROMC_BC_TAH(config.timing[FDT_SROM_TAH]) |\ + SROMC_BC_TACP(config.timing[FDT_SROM_TACP]) |\ + SROMC_BC_PMC(config.timing[FDT_SROM_PMC]); + + /* Select and configure the SROMC bank */ + exynos_pinmux_config(PERIPH_ID_SROMC, config.bank); + s5p_config_sromc(config.bank, smc_bw_conf, smc_bc_conf); + return smc911x_initialize(0, base_addr); #endif return 0; }

Create a common configuration file for all exynos5250 based boards. Going forward we will be using DT based driver discovery for all the boards based on Exynos5. The different boards added will have there own config.h files which internally will include this file and specify their specific DT files.
Signed-off-by: Hatim Ali hatim.rv@samsung.com --- Changes since v2: - No Change
include/configs/{smdk5250.h => exynos5250-dt.h} | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) rename include/configs/{smdk5250.h => exynos5250-dt.h} (96%)
diff --git a/include/configs/smdk5250.h b/include/configs/exynos5250-dt.h similarity index 96% rename from include/configs/smdk5250.h rename to include/configs/exynos5250-dt.h index e412da8..12f555c 100644 --- a/include/configs/smdk5250.h +++ b/include/configs/exynos5250-dt.h @@ -1,7 +1,7 @@ /* - * Copyright (C) 2011 Samsung Electronics + * Copyright (C) 2012 Samsung Electronics * - * Configuration settings for the SAMSUNG SMDK5250 (EXYNOS5250) board. + * Configuration settings for the SAMSUNG EXYNOS5250 board. * * See file CREDITS for list of people who contributed to this * project. @@ -37,6 +37,11 @@ #define CONFIG_DISPLAY_CPUINFO #define CONFIG_DISPLAY_BOARDINFO
+/* Enable fdt support for Exynos5250 */ +#define CONFIG_ARCH_DEVICE_TREE exynos5250 +#define CONFIG_OF_CONTROL +#define CONFIG_OF_SEPARATE + /* Keep L2 Cache Disabled */ #define CONFIG_SYS_DCACHE_OFF

Hi Hatim,
On Tue, Dec 11, 2012 at 2:52 AM, Hatim Ali hatim.rv@samsung.com wrote:
Create a common configuration file for all exynos5250 based boards. Going forward we will be using DT based driver discovery for all the boards based on Exynos5. The different boards added will have there own config.h files which internally will include this file and specify their specific DT files.
Signed-off-by: Hatim Ali hatim.rv@samsung.com
Acked-by: Simon Glass sjg@chromium.org
I'm very pleased to see this - I was going to suggest it too.
Regards, Simon
Changes since v2: - No Change
include/configs/{smdk5250.h => exynos5250-dt.h} | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) rename include/configs/{smdk5250.h => exynos5250-dt.h} (96%)
diff --git a/include/configs/smdk5250.h b/include/configs/exynos5250-dt.h similarity index 96% rename from include/configs/smdk5250.h rename to include/configs/exynos5250-dt.h index e412da8..12f555c 100644 --- a/include/configs/smdk5250.h +++ b/include/configs/exynos5250-dt.h @@ -1,7 +1,7 @@ /*
- Copyright (C) 2011 Samsung Electronics
- Copyright (C) 2012 Samsung Electronics
- Configuration settings for the SAMSUNG SMDK5250 (EXYNOS5250) board.
- Configuration settings for the SAMSUNG EXYNOS5250 board.
- See file CREDITS for list of people who contributed to this
- project.
@@ -37,6 +37,11 @@ #define CONFIG_DISPLAY_CPUINFO #define CONFIG_DISPLAY_BOARDINFO
+/* Enable fdt support for Exynos5250 */ +#define CONFIG_ARCH_DEVICE_TREE exynos5250 +#define CONFIG_OF_CONTROL +#define CONFIG_OF_SEPARATE
/* Keep L2 Cache Disabled */ #define CONFIG_SYS_DCACHE_OFF
-- 1.7.2.3

Add the configuration file for exynos5250 based SMDK5250 board.
Signed-off-by: Hatim Ali hatim.rv@samsung.com --- Changes since v2: - No Change
include/configs/smdk5250.h | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+), 0 deletions(-) create mode 100644 include/configs/smdk5250.h
diff --git a/include/configs/smdk5250.h b/include/configs/smdk5250.h new file mode 100644 index 0000000..81f83a8 --- /dev/null +++ b/include/configs/smdk5250.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2012 Samsung Electronics + * + * Configuration settings for the SAMSUNG SMDK5250 board. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef __CONFIG_SMDK_H +#define __CONFIG_SMDK_H + +#include <configs/exynos5250-dt.h> + +#undef CONFIG_DEFAULT_DEVICE_TREE +#define CONFIG_DEFAULT_DEVICE_TREE exynos5250-smdk5250 + +#endif /* __CONFIG_SMDK_H */

On Tue, Dec 11, 2012 at 2:52 AM, Hatim Ali hatim.rv@samsung.com wrote:
Add the configuration file for exynos5250 based SMDK5250 board.
Signed-off-by: Hatim Ali hatim.rv@samsung.com
Acked-by: Simon Glass sjg@chromium.org
Changes since v2: - No Change
include/configs/smdk5250.h | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+), 0 deletions(-) create mode 100644 include/configs/smdk5250.h
diff --git a/include/configs/smdk5250.h b/include/configs/smdk5250.h new file mode 100644 index 0000000..81f83a8 --- /dev/null +++ b/include/configs/smdk5250.h @@ -0,0 +1,33 @@ +/*
- Copyright (C) 2012 Samsung Electronics
- Configuration settings for the SAMSUNG SMDK5250 board.
- See file CREDITS for list of people who contributed to this
- project.
- 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.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- MA 02111-1307 USA
- */
+#ifndef __CONFIG_SMDK_H +#define __CONFIG_SMDK_H
+#include <configs/exynos5250-dt.h>
+#undef CONFIG_DEFAULT_DEVICE_TREE +#define CONFIG_DEFAULT_DEVICE_TREE exynos5250-smdk5250
+#endif /* __CONFIG_SMDK_H */
1.7.2.3
Regards, Simon

On 11/12/12 19:52, Hatim Ali wrote:
This patch series enables the DT support on SMDK5250. Ethernet is the first driver whose discovery is based on DT node. More DT based drivers to be added subsequently
Changes since v1:
- Renamed the smdk5250.h file to exynos5250-dt.h to create a common configuration file which can be used by all the boards based on exynos5250 using Device Tree.
- Created a new smdk5250.h file specifying the dts file specific to SMDK5250
- Incorporated minor nit (removal of blank lines)
Changes since v2:
- Rebased the "Add DT node definition for SROM and SMSC9215" patch on u-boot-samsung.git
Hatim Ali (5): EXYNOS5: FDT: add initial dts file for EXYNOS5250, SMDK5250 fdt: exynos5: Add DT node definition for SROM and SMSC9215 exynos5: Add DT based driver for SMC911X ethernet exynos5: config: Rename the smdk5250.h to exynos5250-dt.h SMDK5250: config: Add configuration file for SMDK5250 board
arch/arm/dts/exynos5250.dtsi | 31 ++++ arch/arm/include/asm/arch-exynos/sromc.h | 18 ++ board/samsung/dts/exynos5250-smdk5250.dts | 29 +++ board/samsung/smdk5250/smdk5250.c | 115 +++++++++---- include/configs/exynos5250-dt.h | 267 +++++++++++++++++++++++++++++ include/configs/smdk5250.h | 245 +------------------------- include/fdtdec.h | 2 + lib/fdtdec.c | 2 + 8 files changed, 442 insertions(+), 267 deletions(-) create mode 100644 arch/arm/dts/exynos5250.dtsi create mode 100644 board/samsung/dts/exynos5250-smdk5250.dts create mode 100644 include/configs/exynos5250-dt.h
applied to u-boot-samsung/master.
Thanks, Minkyu Kang.
participants (3)
-
Hatim Ali
-
Minkyu Kang
-
Simon Glass