All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/4] Add DT based ethernet driver for SMDK5250
@ 2012-11-05 10:18 Hatim Ali
  2012-11-05 10:18 ` [U-Boot] [PATCH 1/4] EXYNOS5: FDT: add initial dts file for EXYNOS5250, SMDK5250 Hatim Ali
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Hatim Ali @ 2012-11-05 10:18 UTC (permalink / raw)
  To: u-boot

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.

Hatim Ali (4):
  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 SMSC92xx ethernet
  exynos5: fdt: Enable FDT for exynos5 based 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/smdk5250.h                |    6 ++
 include/fdtdec.h                          |    3 +
 lib/fdtdec.c                              |    3 +
 7 files changed, 175 insertions(+), 30 deletions(-)
 create mode 100644 arch/arm/dts/exynos5250.dtsi
 create mode 100644 board/samsung/dts/exynos5250-smdk5250.dts

-- 
1.7.2.3

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/4] EXYNOS5: FDT: add initial dts file for EXYNOS5250, SMDK5250
  2012-11-05 10:18 [U-Boot] [PATCH 0/4] Add DT based ethernet driver for SMDK5250 Hatim Ali
@ 2012-11-05 10:18 ` Hatim Ali
  2012-11-06  1:40   ` Simon Glass
  2012-11-05 10:18 ` [U-Boot] [PATCH 2/4] fdt: exynos5: Add DT node definition for SROM and SMSC9215 Hatim Ali
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 11+ messages in thread
From: Hatim Ali @ 2012-11-05 10:18 UTC (permalink / raw)
  To: u-boot

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>

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 at 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 at 12250000 {
+		bank = <1>;
+		srom-timing = <1 9 12 1 6 1 1>;
+		width = <2>;
+		lan at 5000000 {
+			compatible = "smsc,lan9215", "smsc,lan";
+			reg = <0x5000000 0x100>;
+			phy-mode = "mii";
+		};
+	};
+};
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 2/4] fdt: exynos5: Add DT node definition for SROM and SMSC9215
  2012-11-05 10:18 [U-Boot] [PATCH 0/4] Add DT based ethernet driver for SMDK5250 Hatim Ali
  2012-11-05 10:18 ` [U-Boot] [PATCH 1/4] EXYNOS5: FDT: add initial dts file for EXYNOS5250, SMDK5250 Hatim Ali
@ 2012-11-05 10:18 ` Hatim Ali
  2012-11-06  1:41   ` Simon Glass
  2012-11-05 10:18 ` [U-Boot] [PATCH 3/4] exynos5: Add DT based driver for SMSC92xx ethernet Hatim Ali
  2012-11-05 10:18 ` [U-Boot] [PATCH 4/4] exynos5: fdt: Enable FDT for exynos5 based SMDK5250 board Hatim Ali
  3 siblings, 1 reply; 11+ messages in thread
From: Hatim Ali @ 2012-11-05 10:18 UTC (permalink / raw)
  To: u-boot

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>

diff --git a/include/fdtdec.h b/include/fdtdec.h
index 0b14075..e310ab4 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -67,6 +67,9 @@ enum fdt_compat_id {
 	COMPAT_NVIDIA_TEGRA20_KBC,	/* Tegra20 Keyboard */
 	COMPAT_NVIDIA_TEGRA20_NAND,	/* Tegra2 NAND 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 4c23f45..43ba41a 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -43,6 +43,9 @@ static const char * const compat_names[COMPAT_COUNT] = {
 	COMPAT(NVIDIA_TEGRA20_EMC_TABLE, "nvidia,tegra20-emc-table"),
 	COMPAT(NVIDIA_TEGRA20_KBC, "nvidia,tegra20-kbc"),
 	COMPAT(NVIDIA_TEGRA20_NAND, "nvidia,tegra20-nand"),
+
+	COMPAT(SMSC_LAN9215, "smsc,lan9215"),
+	COMPAT(SAMSUNG_EXYNOS5_SROMC, "samsung,exynos-sromc"),
 };
 
 const char *fdtdec_get_compatible(enum fdt_compat_id id)
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 3/4] exynos5: Add DT based driver for SMSC92xx ethernet
  2012-11-05 10:18 [U-Boot] [PATCH 0/4] Add DT based ethernet driver for SMDK5250 Hatim Ali
  2012-11-05 10:18 ` [U-Boot] [PATCH 1/4] EXYNOS5: FDT: add initial dts file for EXYNOS5250, SMDK5250 Hatim Ali
  2012-11-05 10:18 ` [U-Boot] [PATCH 2/4] fdt: exynos5: Add DT node definition for SROM and SMSC9215 Hatim Ali
@ 2012-11-05 10:18 ` Hatim Ali
  2012-11-06  1:42   ` Simon Glass
  2012-11-05 10:18 ` [U-Boot] [PATCH 4/4] exynos5: fdt: Enable FDT for exynos5 based SMDK5250 board Hatim Ali
  3 siblings, 1 reply; 11+ messages in thread
From: Hatim Ali @ 2012-11-05 10:18 UTC (permalink / raw)
  To: u-boot

Add device tree based ethernet driver for SMSC92xx controller on
SMDK5250 boards.

Signed-off-by: Hatim Ali <hatim.rv@samsung.com>

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;
 }
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 4/4] exynos5: fdt: Enable FDT for exynos5 based SMDK5250 board
  2012-11-05 10:18 [U-Boot] [PATCH 0/4] Add DT based ethernet driver for SMDK5250 Hatim Ali
                   ` (2 preceding siblings ...)
  2012-11-05 10:18 ` [U-Boot] [PATCH 3/4] exynos5: Add DT based driver for SMSC92xx ethernet Hatim Ali
@ 2012-11-05 10:18 ` Hatim Ali
  2012-11-06  1:43   ` Simon Glass
  3 siblings, 1 reply; 11+ messages in thread
From: Hatim Ali @ 2012-11-05 10:18 UTC (permalink / raw)
  To: u-boot

Enable device tree for exynos5.

Signed-off-by: Hatim Ali <hatim.rv@samsung.com>

diff --git a/include/configs/smdk5250.h b/include/configs/smdk5250.h
index e412da8..a04eb47 100644
--- a/include/configs/smdk5250.h
+++ b/include/configs/smdk5250.h
@@ -37,6 +37,12 @@
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO
 
+/* Enable fdt support for SMDK5250 */
+#define CONFIG_DEFAULT_DEVICE_TREE      exynos5250-smdk5250
+#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

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/4] EXYNOS5: FDT: add initial dts file for EXYNOS5250, SMDK5250
  2012-11-05 10:18 ` [U-Boot] [PATCH 1/4] EXYNOS5: FDT: add initial dts file for EXYNOS5250, SMDK5250 Hatim Ali
@ 2012-11-06  1:40   ` Simon Glass
  0 siblings, 0 replies; 11+ messages in thread
From: Simon Glass @ 2012-11-06  1:40 UTC (permalink / raw)
  To: u-boot

On Mon, Nov 5, 2012 at 2:18 AM, Hatim Ali <hatim.rv@samsung.com> wrote:
> 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>

I wonder whether you should consider creating a new config, perhaps
exynos5250-dt.h, which enables device tree. This config could support
smdk5250 and also snow, and might eventually deprecate smdk5250.h.

Regards,
Simon

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 2/4] fdt: exynos5: Add DT node definition for SROM and SMSC9215
  2012-11-05 10:18 ` [U-Boot] [PATCH 2/4] fdt: exynos5: Add DT node definition for SROM and SMSC9215 Hatim Ali
@ 2012-11-06  1:41   ` Simon Glass
  0 siblings, 0 replies; 11+ messages in thread
From: Simon Glass @ 2012-11-06  1:41 UTC (permalink / raw)
  To: u-boot

Hi Hatim,

On Mon, Nov 5, 2012 at 2:18 AM, Hatim Ali <hatim.rv@samsung.com> wrote:
> 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>
>
> diff --git a/include/fdtdec.h b/include/fdtdec.h
> index 0b14075..e310ab4 100644
> --- a/include/fdtdec.h
> +++ b/include/fdtdec.h
> @@ -67,6 +67,9 @@ enum fdt_compat_id {
>         COMPAT_NVIDIA_TEGRA20_KBC,      /* Tegra20 Keyboard */
>         COMPAT_NVIDIA_TEGRA20_NAND,     /* Tegra2 NAND controller */
>

Perhaps remove this blank line?

> +       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 4c23f45..43ba41a 100644
> --- a/lib/fdtdec.c
> +++ b/lib/fdtdec.c
> @@ -43,6 +43,9 @@ static const char * const compat_names[COMPAT_COUNT] = {
>         COMPAT(NVIDIA_TEGRA20_EMC_TABLE, "nvidia,tegra20-emc-table"),
>         COMPAT(NVIDIA_TEGRA20_KBC, "nvidia,tegra20-kbc"),
>         COMPAT(NVIDIA_TEGRA20_NAND, "nvidia,tegra20-nand"),
> +

and this one

> +       COMPAT(SMSC_LAN9215, "smsc,lan9215"),
> +       COMPAT(SAMSUNG_EXYNOS5_SROMC, "samsung,exynos-sromc"),
>  };
>
>  const char *fdtdec_get_compatible(enum fdt_compat_id id)
> --
> 1.7.2.3
>

Regards,
Simon

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 3/4] exynos5: Add DT based driver for SMSC92xx ethernet
  2012-11-05 10:18 ` [U-Boot] [PATCH 3/4] exynos5: Add DT based driver for SMSC92xx ethernet Hatim Ali
@ 2012-11-06  1:42   ` Simon Glass
  2012-11-06  4:11     ` Hatim Rv
  0 siblings, 1 reply; 11+ messages in thread
From: Simon Glass @ 2012-11-06  1:42 UTC (permalink / raw)
  To: u-boot

Hi Hatim,

On Mon, Nov 5, 2012 at 2:18 AM, Hatim Ali <hatim.rv@samsung.com> wrote:
> Add device tree based ethernet driver for SMSC92xx controller on
> SMDK5250 boards.
>
> Signed-off-by: Hatim Ali <hatim.rv@samsung.com>

Acked-by: Simon Glass <sjg@chromium.org>

but see comment below

>
> 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);

here you support 16-bit

> +
> +       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);

But from what I can see, the above function does not support setting
up a 16-bit SROMC. Perhaps the subject of a future patch?

> +       s5p_config_sromc(config.bank, smc_bw_conf, smc_bc_conf);
> +       return smc911x_initialize(0, base_addr);
>  #endif
>         return 0;
>  }
> --
> 1.7.2.3
>

Regards,
Simon

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 4/4] exynos5: fdt: Enable FDT for exynos5 based SMDK5250 board
  2012-11-05 10:18 ` [U-Boot] [PATCH 4/4] exynos5: fdt: Enable FDT for exynos5 based SMDK5250 board Hatim Ali
@ 2012-11-06  1:43   ` Simon Glass
  0 siblings, 0 replies; 11+ messages in thread
From: Simon Glass @ 2012-11-06  1:43 UTC (permalink / raw)
  To: u-boot

Hi Hatim,

On Mon, Nov 5, 2012 at 2:18 AM, Hatim Ali <hatim.rv@samsung.com> wrote:
> Enable device tree for exynos5.
>
> Signed-off-by: Hatim Ali <hatim.rv@samsung.com>

Consider the exynos5250-dt.h idea, but anyway:

Acked-by: Simon Glass <sjg@chromium.org>

>
> diff --git a/include/configs/smdk5250.h b/include/configs/smdk5250.h
> index e412da8..a04eb47 100644
> --- a/include/configs/smdk5250.h
> +++ b/include/configs/smdk5250.h
> @@ -37,6 +37,12 @@
>  #define CONFIG_DISPLAY_CPUINFO
>  #define CONFIG_DISPLAY_BOARDINFO
>
> +/* Enable fdt support for SMDK5250 */
> +#define CONFIG_DEFAULT_DEVICE_TREE      exynos5250-smdk5250
> +#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
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 3/4] exynos5: Add DT based driver for SMSC92xx ethernet
  2012-11-06  1:42   ` Simon Glass
@ 2012-11-06  4:11     ` Hatim Rv
  2012-11-06  4:38       ` Simon Glass
  0 siblings, 1 reply; 11+ messages in thread
From: Hatim Rv @ 2012-11-06  4:11 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Tue, Nov 6, 2012 at 7:12 AM, Simon Glass <sjg@chromium.org> wrote:
> Hi Hatim,
>
> On Mon, Nov 5, 2012 at 2:18 AM, Hatim Ali <hatim.rv@samsung.com> wrote:
>> Add device tree based ethernet driver for SMSC92xx controller on
>> SMDK5250 boards.
>>
>> Signed-off-by: Hatim Ali <hatim.rv@samsung.com>
>
> Acked-by: Simon Glass <sjg@chromium.org>
>
> but see comment below
>
>>
>> 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);
>
> here you support 16-bit
>
>> +
>> +       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);
>
> But from what I can see, the above function does not support setting
> up a 16-bit SROMC. Perhaps the subject of a future patch?

In the exynos_pinmux_config function, the GPIO banks GPY5 and GPY6 are
both getting configured to support the 16-bit SROM controller.

>
>> +       s5p_config_sromc(config.bank, smc_bw_conf, smc_bc_conf);
>> +       return smc911x_initialize(0, base_addr);
>>  #endif
>>         return 0;
>>  }
>> --
>> 1.7.2.3
>>
>
> Regards,
> Simon
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 3/4] exynos5: Add DT based driver for SMSC92xx ethernet
  2012-11-06  4:11     ` Hatim Rv
@ 2012-11-06  4:38       ` Simon Glass
  0 siblings, 0 replies; 11+ messages in thread
From: Simon Glass @ 2012-11-06  4:38 UTC (permalink / raw)
  To: u-boot

Hi Hatim,

On Mon, Nov 5, 2012 at 8:11 PM, Hatim Rv <rv.hatimali@gmail.com> wrote:
> Hi Simon,
>
> On Tue, Nov 6, 2012 at 7:12 AM, Simon Glass <sjg@chromium.org> wrote:
>> Hi Hatim,
>>
>> On Mon, Nov 5, 2012 at 2:18 AM, Hatim Ali <hatim.rv@samsung.com> wrote:
>>> Add device tree based ethernet driver for SMSC92xx controller on
>>> SMDK5250 boards.
>>>
>>> Signed-off-by: Hatim Ali <hatim.rv@samsung.com>
>>
>> Acked-by: Simon Glass <sjg@chromium.org>
>>
>> but see comment below
>>
>>>
[snip]
>>> +       /* Select and configure the SROMC bank */
>>> +       exynos_pinmux_config(PERIPH_ID_SROMC, config.bank);
>>
>> But from what I can see, the above function does not support setting
>> up a 16-bit SROMC. Perhaps the subject of a future patch?
>
> In the exynos_pinmux_config function, the GPIO banks GPY5 and GPY6 are
> both getting configured to support the 16-bit SROM controller.
>

OK I see, thank you.

Regards,
Simon

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2012-11-06  4:38 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-05 10:18 [U-Boot] [PATCH 0/4] Add DT based ethernet driver for SMDK5250 Hatim Ali
2012-11-05 10:18 ` [U-Boot] [PATCH 1/4] EXYNOS5: FDT: add initial dts file for EXYNOS5250, SMDK5250 Hatim Ali
2012-11-06  1:40   ` Simon Glass
2012-11-05 10:18 ` [U-Boot] [PATCH 2/4] fdt: exynos5: Add DT node definition for SROM and SMSC9215 Hatim Ali
2012-11-06  1:41   ` Simon Glass
2012-11-05 10:18 ` [U-Boot] [PATCH 3/4] exynos5: Add DT based driver for SMSC92xx ethernet Hatim Ali
2012-11-06  1:42   ` Simon Glass
2012-11-06  4:11     ` Hatim Rv
2012-11-06  4:38       ` Simon Glass
2012-11-05 10:18 ` [U-Boot] [PATCH 4/4] exynos5: fdt: Enable FDT for exynos5 based SMDK5250 board Hatim Ali
2012-11-06  1:43   ` Simon Glass

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.