public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model
@ 2015-10-18  1:41 Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 01/14] fdt: Add a function to look up a /chosen property Simon Glass
                   ` (15 more replies)
  0 siblings, 16 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

This series updates the Zynq serial driver to use driver model. Along the
way several problems are fixed:

- Support for /chosen/stdout-path using an alias
- Fix to fdtgrep which is currently breaking alias building
- Avoid building u-boot-spl-dtb.bin when it is not requested
- Deal with boards which have BSS in SDRAM

For zynq this series makes a few changes:
- Use the new SPL init procedure, which just involves a few tweaks for zynq
- Add debug UART support
- Move to using a separate device tree instead of embedded

Only zybo has been tested. Testing on other zynq boards is welcome. They are
all set up roughly the same so I expect only minor problems.

This serial includes Michal's zynqmp device tree patch.

Changes in v2:
- Extend list of compatible strings with cadence compatible string.

Michal Simek (1):
  ARM: zynqmp: Enable DM and OF binding

Simon Glass (13):
  fdt: Add a function to look up a /chosen property
  fdt: Correct handling of alias regions
  fdtgrep: Simplify the alias generation code
  dm: serial: Deal with stdout-path with an alias
  dm: spl: Generate u-boot-spl-dtb.bin only when enabled
  dm: spl: Support device tree when BSS is in a different section
  arm: zynq: Use separate device tree instead of embedded
  arm: zynq: Drop unnecessary code in SPL board_init_f()
  arm: zynq: Support the debug UART
  dm: arm: zynq: Enable device tree control in SPL
  arm: zynq: dts: Add U-Boot device tree additions
  arm: zynq: serial: Drop non-device-tree serial driver portions
  arm: zynq: Move serial driver to driver model

 Kconfig                            |  10 +
 arch/arm/Kconfig                   |   7 +
 arch/arm/dts/Makefile              |   2 +-
 arch/arm/dts/zynq-7000.dtsi        |   1 +
 arch/arm/dts/zynq-microzed.dts     |   5 +
 arch/arm/dts/zynq-picozed.dts      |   5 +
 arch/arm/dts/zynq-zc702.dts        |   1 +
 arch/arm/dts/zynq-zc706.dts        |   1 +
 arch/arm/dts/zynq-zc770-xm010.dts  |   1 +
 arch/arm/dts/zynq-zc770-xm011.dts  |   1 +
 arch/arm/dts/zynq-zc770-xm012.dts  |   1 +
 arch/arm/dts/zynq-zc770-xm013.dts  |   1 +
 arch/arm/dts/zynq-zed.dts          |   1 +
 arch/arm/dts/zynq-zybo.dts         |   1 +
 arch/arm/dts/zynqmp-ep108.dts      | 164 ++++++++++++++++
 arch/arm/dts/zynqmp.dtsi           | 385 +++++++++++++++++++++++++++++++++++++
 arch/arm/mach-zynq/spl.c           |  12 +-
 arch/arm/mach-zynq/u-boot-spl.lds  |  10 +-
 configs/xilinx_zynqmp_ep_defconfig |   3 +-
 configs/zynq_microzed_defconfig    |   2 +-
 configs/zynq_picozed_defconfig     |   2 +-
 configs/zynq_zc702_defconfig       |   2 +-
 configs/zynq_zc706_defconfig       |   2 +-
 configs/zynq_zc70x_defconfig       |   2 +-
 configs/zynq_zc770_xm010_defconfig |   2 +-
 configs/zynq_zc770_xm011_defconfig |   2 +-
 configs/zynq_zc770_xm012_defconfig |   2 +-
 configs/zynq_zc770_xm013_defconfig |   2 +-
 configs/zynq_zed_defconfig         |   2 +-
 configs/zynq_zybo_defconfig        |   6 +-
 drivers/serial/Kconfig             |   7 +
 drivers/serial/serial-uclass.c     |  30 ++-
 drivers/serial/serial_zynq.c       | 203 ++++++++++---------
 include/asm-generic/sections.h     |   1 +
 include/configs/xilinx_zynqmp.h    |   4 +-
 include/configs/xilinx_zynqmp_ep.h |   1 -
 include/configs/zynq-common.h      |   6 +-
 include/configs/zynq_microzed.h    |   1 -
 include/configs/zynq_picozed.h     |   1 -
 include/configs/zynq_zc70x.h       |   1 -
 include/configs/zynq_zc770.h       |   6 -
 include/configs/zynq_zed.h         |   1 -
 include/configs/zynq_zybo.h        |   1 -
 include/fdtdec.h                   |  11 +-
 lib/fdtdec.c                       |  22 ++-
 lib/libfdt/fdt_region.c            |   2 +-
 scripts/Makefile.spl               |   2 +
 tools/fdtgrep.c                    |  32 +--
 48 files changed, 796 insertions(+), 174 deletions(-)
 create mode 100644 arch/arm/dts/zynqmp-ep108.dts
 create mode 100644 arch/arm/dts/zynqmp.dtsi

-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 01/14] fdt: Add a function to look up a /chosen property
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 02/14] fdt: Correct handling of alias regions Simon Glass
                   ` (14 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

It is sometimes useful to find a property in the chosen node. Add a function
for this.

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

Changes in v2: None

 include/fdtdec.h | 11 ++++++++++-
 lib/fdtdec.c     | 15 ++++++++++-----
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/include/fdtdec.h b/include/fdtdec.h
index 2de6dda..9fcc7a1 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -628,7 +628,16 @@ int fdtdec_get_alias_seq(const void *blob, const char *base, int node,
 			 int *seqp);
 
 /**
- * Get the offset of the given chosen node
+ * Get a property from the /chosen node
+ *
+ * @param blob		Device tree blob (if NULL, then NULL is returned)
+ * @param name		Property name to look up
+ * @return Value of property, or NULL if it does not exist
+ */
+const char *fdtdec_get_chosen_prop(const void *blob, const char *name);
+
+/**
+ * Get the offset of the given /chosen node
  *
  * This looks up a property in /chosen containing the path to another node,
  * then finds the offset of that node.
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 1a86369..1749468 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -601,16 +601,21 @@ int fdtdec_get_alias_seq(const void *blob, const char *base, int offset,
 	return -ENOENT;
 }
 
-int fdtdec_get_chosen_node(const void *blob, const char *name)
+const char *fdtdec_get_chosen_prop(const void *blob, const char *name)
 {
-	const char *prop;
 	int chosen_node;
-	int len;
 
 	if (!blob)
-		return -FDT_ERR_NOTFOUND;
+		return NULL;
 	chosen_node = fdt_path_offset(blob, "/chosen");
-	prop = fdt_getprop(blob, chosen_node, name, &len);
+	return fdt_getprop(blob, chosen_node, name, NULL);
+}
+
+int fdtdec_get_chosen_node(const void *blob, const char *name)
+{
+	const char *prop;
+
+	prop = fdtdec_get_chosen_prop(blob, name);
 	if (!prop)
 		return -FDT_ERR_NOTFOUND;
 	return fdt_path_offset(blob, prop);
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 02/14] fdt: Correct handling of alias regions
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 01/14] fdt: Add a function to look up a /chosen property Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 03/14] fdtgrep: Simplify the alias generation code Simon Glass
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

At present the last four bytes of the alias region are dropped in
the case where the last alias is included. This results in a corrupted
device tree. Fix this.

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

Changes in v2: None

 lib/libfdt/fdt_region.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/libfdt/fdt_region.c b/lib/libfdt/fdt_region.c
index 9fea775..747d8bb 100644
--- a/lib/libfdt/fdt_region.c
+++ b/lib/libfdt/fdt_region.c
@@ -101,7 +101,7 @@ int fdt_add_alias_regions(const void *fdt, struct fdt_region *region, int count,
 			continue;
 		next = fdt_next_property_offset(fdt, offset);
 		if (next < 0)
-			next = node_end - sizeof(fdt32_t);
+			next = node_end;
 
 		if (!did_alias_header) {
 			fdt_add_region(info, base + node, 12);
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 03/14] fdtgrep: Simplify the alias generation code
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 01/14] fdt: Add a function to look up a /chosen property Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 02/14] fdt: Correct handling of alias regions Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 04/14] dm: serial: Deal with stdout-path with an alias Simon Glass
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

We don't need to allocate a new region list when we run out of space.
The outer function can take care of this for us.

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

Changes in v2: None

 tools/fdtgrep.c | 32 ++++++++++----------------------
 1 file changed, 10 insertions(+), 22 deletions(-)

diff --git a/tools/fdtgrep.c b/tools/fdtgrep.c
index caaf600..67aa41a 100644
--- a/tools/fdtgrep.c
+++ b/tools/fdtgrep.c
@@ -667,28 +667,16 @@ static int fdtgrep_find_regions(const void *fdt,
 
 		new_count = fdt_add_alias_regions(fdt, region, count,
 						  max_regions, &state);
-		if (new_count > max_regions) {
-			region = malloc(new_count * sizeof(struct fdt_region));
-			if (!region) {
-				fprintf(stderr,
-					"Out of memory for %d regions\n",
-					count);
-				return -1;
-			}
-			memcpy(region, state.region,
-			       count * sizeof(struct fdt_region));
-			free(state.region);
-			new_count = fdt_add_alias_regions(fdt, region, count,
-							  max_regions, &state);
+		if (new_count <= max_regions) {
+			/*
+			* The alias regions will now be at the end of the list.
+			* Sort the regions by offset to get things into the
+			* right order
+			*/
+			count = new_count;
+			qsort(region, count, sizeof(struct fdt_region),
+			      h_cmp_region);
 		}
-
-		/*
-		 * The alias regions will now be@the end of the list. Sort
-		 * the regions by offset to get things into the right order
-		 */
-		qsort(region, new_count, sizeof(struct fdt_region),
-		      h_cmp_region);
-		count = new_count;
 	}
 
 	if (ret != -FDT_ERR_NOTFOUND)
@@ -805,7 +793,7 @@ static int do_fdtgrep(struct display_info *disp, const char *filename)
 	 * The first pass will count the regions, but if it is too many,
 	 * we do another pass to actually record them.
 	 */
-	for (i = 0; i < 2; i++) {
+	for (i = 0; i < 3; i++) {
 		region = malloc(count * sizeof(struct fdt_region));
 		if (!region) {
 			fprintf(stderr, "Out of memory for %d regions\n",
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 04/14] dm: serial: Deal with stdout-path with an alias
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (2 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 03/14] fdtgrep: Simplify the alias generation code Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 05/14] dm: spl: Generate u-boot-spl-dtb.bin only when enabled Simon Glass
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

Sometimes stdout-path contains a UART alias along with speed, etc. For
example:

	stdout-path = "serial0:115200n8";

Add support for decoding this.

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

Changes in v2: None

 drivers/serial/serial-uclass.c | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c
index 55011cc..842f78b 100644
--- a/drivers/serial/serial-uclass.c
+++ b/drivers/serial/serial-uclass.c
@@ -29,14 +29,34 @@ static const unsigned long baudrate_table[] = CONFIG_SYS_BAUDRATE_TABLE;
 
 static void serial_find_console_or_panic(void)
 {
+	const void *blob = gd->fdt_blob;
 	struct udevice *dev;
 	int node;
 
-	if (CONFIG_IS_ENABLED(OF_CONTROL) && gd->fdt_blob) {
+	if (CONFIG_IS_ENABLED(OF_CONTROL) && blob) {
 		/* Check for a chosen console */
-		node = fdtdec_get_chosen_node(gd->fdt_blob, "stdout-path");
+		node = fdtdec_get_chosen_node(blob, "stdout-path");
+		if (node < 0) {
+			const char *str, *p, *name;
+
+			/*
+			 * Deal with things like
+			 *	stdout-path = "serial0:115200n8";
+			 *
+			 * We need to look up the alias and then follow it to
+			 * the correct node.
+			 */
+			str = fdtdec_get_chosen_prop(blob, "stdout-path");
+			if (str) {
+				p = strchr(str, ':');
+				name = fdt_get_alias_namelen(blob, str,
+						p ? p - str : strlen(str));
+				if (name)
+					node = fdt_path_offset(blob, name);
+			}
+		}
 		if (node < 0)
-			node = fdt_path_offset(gd->fdt_blob, "console");
+			node = fdt_path_offset(blob, "console");
 		if (!uclass_get_device_by_of_offset(UCLASS_SERIAL, node,
 						    &dev)) {
 			gd->cur_serial_dev = dev;
@@ -48,14 +68,14 @@ static void serial_find_console_or_panic(void)
 		* bind it anyway.
 		*/
 		if (node > 0 &&
-		    !lists_bind_fdt(gd->dm_root, gd->fdt_blob, node, &dev)) {
+		    !lists_bind_fdt(gd->dm_root, blob, node, &dev)) {
 			if (!device_probe(dev)) {
 				gd->cur_serial_dev = dev;
 				return;
 			}
 		}
 	}
-	if (!SPL_BUILD || !CONFIG_IS_ENABLED(OF_CONTROL) || !gd->fdt_blob) {
+	if (!SPL_BUILD || !CONFIG_IS_ENABLED(OF_CONTROL) || !blob) {
 		/*
 		* Try to use CONFIG_CONS_INDEX if available (it is numbered
 		* from 1!).
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 05/14] dm: spl: Generate u-boot-spl-dtb.bin only when enabled
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (3 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 04/14] dm: serial: Deal with stdout-path with an alias Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 06/14] dm: spl: Support device tree when BSS is in a different section Simon Glass
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

At present this file is generated even when device tree is not enabled in
SPL. Avoid this, since this file serves no purpose in that case.

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

Changes in v2: None

 scripts/Makefile.spl | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl
index 2df93c8..dd235b9 100644
--- a/scripts/Makefile.spl
+++ b/scripts/Makefile.spl
@@ -129,7 +129,9 @@ boot.bin: $(obj)/u-boot-spl.bin
 
 ALL-y	+= $(obj)/$(SPL_BIN).bin $(obj)/$(SPL_BIN).cfg
 
+ifdef CONFIG_SPL_OF_CONTROL
 ALL-$(CONFIG_OF_SEPARATE) += $(obj)/$(SPL_BIN)-pad.bin $(obj)/$(SPL_BIN)-dtb.bin
+endif
 
 ifdef CONFIG_SAMSUNG
 ALL-y	+= $(obj)/$(BOARD)-spl.bin
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 06/14] dm: spl: Support device tree when BSS is in a different section
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (4 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 05/14] dm: spl: Generate u-boot-spl-dtb.bin only when enabled Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 07/14] arm: zynq: Use separate device tree instead of embedded Simon Glass
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

At present in SPL we place the device tree immediately after BSS. This
avoids needing to copy it out of the way before BSS can be used. However on
some boards BSS is not placed with the image - e.g. it can be in RAM if
available.

Add an option to tell U-Boot that the device tree should be placed at the
end of the image binary (_image_binary_end) instead of at the end of BSS.

Note: A common reason to place BSS in RAM is to support the FAT filesystem.
We should update the code so that it does not use so much BSS.

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

Changes in v2: None

 Kconfig                        | 10 ++++++++++
 include/asm-generic/sections.h |  1 +
 lib/fdtdec.c                   |  7 +++++--
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/Kconfig b/Kconfig
index f364a7a..01c6977 100644
--- a/Kconfig
+++ b/Kconfig
@@ -132,6 +132,16 @@ config SPL_STACK_R_ADDR
 	  Specify the address in SDRAM for the SPL stack. This will be set up
 	  before board_init_r() is called.
 
+config SPL_SEPARATE_BSS
+	depends on SPL
+	bool "BSS section is in a different memory region from text"
+	help
+	  Some platforms need a large BSS region in SPL and can provide this
+	  because RAM is already set up. In this case BSS can be moved to RAM.
+	  This option should then be enabled so that the correct device tree
+	  location is used. Normally we put the device tree at the end of BSS
+	  but with this option enabled, it goes at _image_binary_end.
+
 config TPL
 	bool
 	depends on SPL && SUPPORT_TPL
diff --git a/include/asm-generic/sections.h b/include/asm-generic/sections.h
index 458952f..328bc62 100644
--- a/include/asm-generic/sections.h
+++ b/include/asm-generic/sections.h
@@ -71,6 +71,7 @@ extern char __bss_start[];
 extern char __bss_end[];
 extern char __image_copy_start[];
 extern char __image_copy_end[];
+extern char _image_binary_end[];
 extern char __rel_dyn_start[];
 extern char __rel_dyn_end[];
 
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 1749468..4684496 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -1222,8 +1222,11 @@ int fdtdec_setup(void)
 	gd->fdt_blob = __dtb_dt_begin;
 # elif defined CONFIG_OF_SEPARATE
 #  ifdef CONFIG_SPL_BUILD
-	/* FDT is at end of BSS */
-	gd->fdt_blob = (ulong *)&__bss_end;
+	/* FDT is at end of BSS unless it is in a different memory region */
+	if (IS_ENABLED(CONFIG_SPL_SEPARATE_BSS))
+		gd->fdt_blob = (ulong *)&_image_binary_end;
+	else
+		gd->fdt_blob = (ulong *)&__bss_end;
 #  else
 	/* FDT is at end of image */
 	gd->fdt_blob = (ulong *)&_end;
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 07/14] arm: zynq: Use separate device tree instead of embedded
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (5 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 06/14] dm: spl: Support device tree when BSS is in a different section Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 08/14] arm: zynq: Drop unnecessary code in SPL board_init_f() Simon Glass
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

Production boards should not use CONFIG_OF_EMBED. Fix this for the Zybo
boards.

The image to use now becomes u-boot-dtb.bin.

For example, the .bif file should contain a line like:

  [load = 0x04000000,startup=0x04000000]/path/to/u-boot-dtb.bin

instead of:

  [load = 0x04000000,startup=0x04000000]/path/to/u-boot.bin

When device tree is enabled we need to load u-boot-dtb.img. Change the
settings so that SPL does the right thing.

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

Changes in v2: None

 configs/zynq_microzed_defconfig    | 2 +-
 configs/zynq_picozed_defconfig     | 2 +-
 configs/zynq_zc702_defconfig       | 2 +-
 configs/zynq_zc706_defconfig       | 2 +-
 configs/zynq_zc70x_defconfig       | 2 +-
 configs/zynq_zc770_xm010_defconfig | 2 +-
 configs/zynq_zc770_xm011_defconfig | 2 +-
 configs/zynq_zc770_xm012_defconfig | 2 +-
 configs/zynq_zc770_xm013_defconfig | 2 +-
 configs/zynq_zed_defconfig         | 2 +-
 configs/zynq_zybo_defconfig        | 2 +-
 include/configs/zynq-common.h      | 6 +++++-
 12 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/configs/zynq_microzed_defconfig b/configs/zynq_microzed_defconfig
index e9c3209..9d51540 100644
--- a/configs/zynq_microzed_defconfig
+++ b/configs/zynq_microzed_defconfig
@@ -9,5 +9,5 @@ CONFIG_FIT_SIGNATURE=y
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_OF_EMBED=y
+CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/configs/zynq_picozed_defconfig b/configs/zynq_picozed_defconfig
index f2b71e9..3a42efb 100644
--- a/configs/zynq_picozed_defconfig
+++ b/configs/zynq_picozed_defconfig
@@ -6,5 +6,5 @@ CONFIG_SPL=y
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_OF_EMBED=y
+CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/configs/zynq_zc702_defconfig b/configs/zynq_zc702_defconfig
index 0abb7a8..6faf928 100644
--- a/configs/zynq_zc702_defconfig
+++ b/configs/zynq_zc702_defconfig
@@ -8,5 +8,5 @@ CONFIG_FIT_SIGNATURE=y
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_OF_EMBED=y
+CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/configs/zynq_zc706_defconfig b/configs/zynq_zc706_defconfig
index d67f507..d6559b5 100644
--- a/configs/zynq_zc706_defconfig
+++ b/configs/zynq_zc706_defconfig
@@ -9,5 +9,5 @@ CONFIG_FIT_SIGNATURE=y
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_OF_EMBED=y
+CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/configs/zynq_zc70x_defconfig b/configs/zynq_zc70x_defconfig
index 37c249f..49c987a 100644
--- a/configs/zynq_zc70x_defconfig
+++ b/configs/zynq_zc70x_defconfig
@@ -9,5 +9,5 @@ CONFIG_FIT_SIGNATURE=y
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_OF_EMBED=y
+CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/configs/zynq_zc770_xm010_defconfig b/configs/zynq_zc770_xm010_defconfig
index 0e826bb..4bfb9cc 100644
--- a/configs/zynq_zc770_xm010_defconfig
+++ b/configs/zynq_zc770_xm010_defconfig
@@ -10,6 +10,6 @@ CONFIG_SYS_EXTRA_OPTIONS="ZC770_XM010"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_OF_EMBED=y
+CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_SPI_FLASH=y
diff --git a/configs/zynq_zc770_xm011_defconfig b/configs/zynq_zc770_xm011_defconfig
index 46d043b..2a61fe3 100644
--- a/configs/zynq_zc770_xm011_defconfig
+++ b/configs/zynq_zc770_xm011_defconfig
@@ -10,5 +10,5 @@ CONFIG_SYS_EXTRA_OPTIONS="ZC770_XM011"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_OF_EMBED=y
+CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/configs/zynq_zc770_xm012_defconfig b/configs/zynq_zc770_xm012_defconfig
index 34d479f..eb98a39 100644
--- a/configs/zynq_zc770_xm012_defconfig
+++ b/configs/zynq_zc770_xm012_defconfig
@@ -8,5 +8,5 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_FIT_SIGNATURE=y
 CONFIG_SYS_EXTRA_OPTIONS="ZC770_XM012"
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_OF_EMBED=y
+CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/configs/zynq_zc770_xm013_defconfig b/configs/zynq_zc770_xm013_defconfig
index c59599f..8d65c05 100644
--- a/configs/zynq_zc770_xm013_defconfig
+++ b/configs/zynq_zc770_xm013_defconfig
@@ -10,5 +10,5 @@ CONFIG_SYS_EXTRA_OPTIONS="ZC770_XM013"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_OF_EMBED=y
+CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/configs/zynq_zed_defconfig b/configs/zynq_zed_defconfig
index 886b4a5..13bef36 100644
--- a/configs/zynq_zed_defconfig
+++ b/configs/zynq_zed_defconfig
@@ -9,5 +9,5 @@ CONFIG_FIT_SIGNATURE=y
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_OF_EMBED=y
+CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/configs/zynq_zybo_defconfig b/configs/zynq_zybo_defconfig
index 77b9409..fc251dc 100644
--- a/configs/zynq_zybo_defconfig
+++ b/configs/zynq_zybo_defconfig
@@ -9,5 +9,5 @@ CONFIG_FIT_SIGNATURE=y
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_OF_EMBED=y
+CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/include/configs/zynq-common.h b/include/configs/zynq-common.h
index e7ab50a..aa4785f 100644
--- a/include/configs/zynq-common.h
+++ b/include/configs/zynq-common.h
@@ -319,7 +319,11 @@
 #define CONFIG_SYS_MMCSD_FS_BOOT_PARTITION     1
 #define CONFIG_SPL_LIBDISK_SUPPORT
 #define CONFIG_SPL_FAT_SUPPORT
-#define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME     "u-boot.img"
+#ifdef CONFIG_OF_CONTROL
+# define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME     "u-boot-dtb.img"
+#else
+# define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME     "u-boot.img"
+#endif
 #endif
 
 /* Disable dcache for SPL just for sure */
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 08/14] arm: zynq: Drop unnecessary code in SPL board_init_f()
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (6 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 07/14] arm: zynq: Use separate device tree instead of embedded Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 09/14] arm: zynq: Support the debug UART Simon Glass
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

Move to the new way of starting up SPL. Clearing of BSS and calling
board_init_r() is now handled by crt0.S.

Also tidy up the header include order.

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

Changes in v2: None

 arch/arm/mach-zynq/spl.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/arch/arm/mach-zynq/spl.c b/arch/arm/mach-zynq/spl.c
index 7bdac3b..1805455 100644
--- a/arch/arm/mach-zynq/spl.c
+++ b/arch/arm/mach-zynq/spl.c
@@ -7,8 +7,8 @@
 #include <spl.h>
 
 #include <asm/io.h>
-#include <asm/arch/hardware.h>
 #include <asm/spl.h>
+#include <asm/arch/hardware.h>
 #include <asm/arch/sys_proto.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -17,11 +17,7 @@ void board_init_f(ulong dummy)
 {
 	ps7_init();
 
-	/* Clear the BSS. */
-	memset(__bss_start, 0, __bss_end - __bss_start);
-
 	arch_cpu_init();
-	board_init_r(NULL, 0);
 }
 
 #ifdef CONFIG_SPL_BOARD_INIT
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 09/14] arm: zynq: Support the debug UART
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (7 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 08/14] arm: zynq: Drop unnecessary code in SPL board_init_f() Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 10/14] dm: arm: zynq: Enable device tree control in SPL Simon Glass
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

Add support for the debug UART to assist with early debugging. Enable it
for Zybo as an example.

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

Changes in v2: None

 arch/arm/mach-zynq/spl.c     |  6 ++++
 configs/zynq_zybo_defconfig  |  4 +++
 drivers/serial/Kconfig       |  7 ++++
 drivers/serial/serial_zynq.c | 77 +++++++++++++++++++++++++++++++++++---------
 4 files changed, 78 insertions(+), 16 deletions(-)

diff --git a/arch/arm/mach-zynq/spl.c b/arch/arm/mach-zynq/spl.c
index 1805455..723019d 100644
--- a/arch/arm/mach-zynq/spl.c
+++ b/arch/arm/mach-zynq/spl.c
@@ -4,6 +4,7 @@
  * SPDX-License-Identifier:	GPL-2.0+
  */
 #include <common.h>
+#include <debug_uart.h>
 #include <spl.h>
 
 #include <asm/io.h>
@@ -18,6 +19,11 @@ void board_init_f(ulong dummy)
 	ps7_init();
 
 	arch_cpu_init();
+	/*
+	 * The debug UART can be used from this point:
+	 * debug_uart_init();
+	 * printch('x');
+	 */
 }
 
 #ifdef CONFIG_SPL_BOARD_INIT
diff --git a/configs/zynq_zybo_defconfig b/configs/zynq_zybo_defconfig
index fc251dc..b7531d6 100644
--- a/configs/zynq_zybo_defconfig
+++ b/configs/zynq_zybo_defconfig
@@ -11,3 +11,7 @@ CONFIG_FIT_SIGNATURE=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_SEPARATE=y
 CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_DEBUG_UART=y
+CONFIG_DEBUG_UART_ZYNQ=y
+CONFIG_DEBUG_UART_BASE=0xe0001000
+CONFIG_DEBUG_UART_CLOCK=50000000
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index ddb725d..6f2a1b1 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -77,6 +77,13 @@ config DEBUG_UART_S5P
 	  will need to provide parameters to make this work. The driver will
 	  be available until the real driver-model serial is running.
 
+config DEBUG_UART_ZYNQ
+	bool "Xilinx Zynq"
+	help
+	  Select this to enable a debug UART using the serial_s5p driver. You
+	  will need to provide parameters to make this work. The driver will
+	  be available until the real driver-model serial is running.
+
 endchoice
 
 config DEBUG_UART_BASE
diff --git a/drivers/serial/serial_zynq.c b/drivers/serial/serial_zynq.c
index 9d84290..c4304dd 100644
--- a/drivers/serial/serial_zynq.c
+++ b/drivers/serial/serial_zynq.c
@@ -6,6 +6,7 @@
  */
 
 #include <common.h>
+#include <errno.h>
 #include <fdtdec.h>
 #include <watchdog.h>
 #include <asm/io.h>
@@ -43,20 +44,16 @@ static struct uart_zynq *uart_zynq_ports[2] = {
 };
 
 /* Set up the baud rate in gd struct */
-static void uart_zynq_serial_setbrg(const int port)
+static void _uart_zynq_serial_setbrg(struct uart_zynq *regs,
+				     unsigned long clock, unsigned long baud)
 {
 	/* Calculation results. */
 	unsigned int calc_bauderror, bdiv, bgen;
 	unsigned long calc_baud = 0;
-	unsigned long baud;
-	unsigned long clock = get_uart_clk(port);
-	struct uart_zynq *regs = uart_zynq_ports[port];
 
 	/* Covering case where input clock is so slow */
-	if (clock < 1000000 && gd->baudrate > 4800)
-		gd->baudrate = 4800;
-
-	baud = gd->baudrate;
+	if (clock < 1000000 && baud > 4800)
+		baud = 4800;
 
 	/*                master clock
 	 * Baud rate = ------------------
@@ -87,36 +84,59 @@ static void uart_zynq_serial_setbrg(const int port)
 	writel(bgen, &regs->baud_rate_gen);
 }
 
-/* Initialize the UART, with...some settings. */
-static int uart_zynq_serial_init(const int port)
+/* Set up the baud rate in gd struct */
+static void uart_zynq_serial_setbrg(const int port)
 {
+	unsigned long clock = get_uart_clk(port);
 	struct uart_zynq *regs = uart_zynq_ports[port];
 
-	if (!regs)
-		return -1;
+	return _uart_zynq_serial_setbrg(regs, clock, gd->baudrate);
+}
 
+/* Initialize the UART, with...some settings. */
+static void _uart_zynq_serial_init(struct uart_zynq *regs)
+{
 	/* RX/TX enabled & reset */
 	writel(ZYNQ_UART_CR_TX_EN | ZYNQ_UART_CR_RX_EN | ZYNQ_UART_CR_TXRST | \
 					ZYNQ_UART_CR_RXRST, &regs->control);
 	writel(ZYNQ_UART_MR_PARITY_NONE, &regs->mode); /* 8 bit, no parity */
+}
+
+/* Initialize the UART, with...some settings. */
+static int uart_zynq_serial_init(const int port)
+{
+	struct uart_zynq *regs = uart_zynq_ports[port];
+
+	if (!regs)
+		return -1;
+
+	_uart_zynq_serial_init(regs);
 	uart_zynq_serial_setbrg(port);
 
 	return 0;
 }
 
+static int _uart_zynq_serial_putc(struct uart_zynq *regs, const char c)
+{
+	if (readl(&regs->channel_sts) & ZYNQ_UART_SR_TXFULL)
+		return -EAGAIN;
+
+	writel(c, &regs->tx_rx_fifo);
+
+	return 0;
+}
+
 static void uart_zynq_serial_putc(const char c, const int port)
 {
 	struct uart_zynq *regs = uart_zynq_ports[port];
 
-	while ((readl(&regs->channel_sts) & ZYNQ_UART_SR_TXFULL) != 0)
+	while (_uart_zynq_serial_putc(regs, c) == -EAGAIN)
 		WATCHDOG_RESET();
 
 	if (c == '\n') {
-		writel('\r', &regs->tx_rx_fifo);
-		while ((readl(&regs->channel_sts) & ZYNQ_UART_SR_TXFULL) != 0)
+		while (_uart_zynq_serial_putc(regs, '\r') == -EAGAIN)
 			WATCHDOG_RESET();
 	}
-	writel(c, &regs->tx_rx_fifo);
 }
 
 static void uart_zynq_serial_puts(const char *s, const int port)
@@ -218,3 +238,28 @@ void zynq_serial_initialize(void)
 	serial_register(&uart_zynq_serial0_device);
 	serial_register(&uart_zynq_serial1_device);
 }
+
+#ifdef CONFIG_DEBUG_UART_ZYNQ
+
+#include <debug_uart.h>
+
+void debug_uart_init(void)
+{
+	struct uart_zynq *regs = (struct uart_zynq *)CONFIG_DEBUG_UART_BASE;
+
+	_uart_zynq_serial_init(regs);
+	_uart_zynq_serial_setbrg(regs, CONFIG_DEBUG_UART_CLOCK,
+				 CONFIG_BAUDRATE);
+}
+
+static inline void _debug_uart_putc(int ch)
+{
+	struct uart_zynq *regs = (struct uart_zynq *)CONFIG_DEBUG_UART_BASE;
+
+	while (_uart_zynq_serial_putc(regs, ch) == -EAGAIN)
+		WATCHDOG_RESET();
+}
+
+DEBUG_UART_FUNCS
+
+#endif
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 10/14] dm: arm: zynq: Enable device tree control in SPL
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (8 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 09/14] arm: zynq: Support the debug UART Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 11/14] arm: zynq: dts: Add U-Boot device tree additions Simon Glass
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

Move to using device tree control in SPL so that we can use the same driver
code in both SPL and U-Boot proper.

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

Changes in v2: None

 arch/arm/Kconfig                  |  3 +++
 arch/arm/mach-zynq/u-boot-spl.lds | 10 +++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 7981355..1d85240 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -547,9 +547,12 @@ config ARCH_ZYNQ
 	select CPU_V7
 	select SUPPORT_SPL
 	select OF_CONTROL
+	select SPL_OF_CONTROL
 	select DM
+	select SPL_DM
 	select DM_SPI
 	select DM_SPI_FLASH
+	select SPL_SEPARATE_BSS
 
 config ARCH_ZYNQMP
 	bool "Support Xilinx ZynqMP Platform"
diff --git a/arch/arm/mach-zynq/u-boot-spl.lds b/arch/arm/mach-zynq/u-boot-spl.lds
index 0f2f756..ecdf6a0 100644
--- a/arch/arm/mach-zynq/u-boot-spl.lds
+++ b/arch/arm/mach-zynq/u-boot-spl.lds
@@ -38,10 +38,18 @@ SECTIONS
 	} > .sram
 
 	. = ALIGN(4);
+#ifdef CONFIG_SPL_DM
+	.u_boot_list : {
+		KEEP(*(SORT(.u_boot_list_*_driver_*)));
+		KEEP(*(SORT(.u_boot_list_*_uclass_*)));
+	} > .sram
+
+	. = ALIGN(4);
+#endif
 
 	. = .;
 
-	__image_copy_end = .;
+	_image_binary_end = .;
 
 	_end = .;
 
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 11/14] arm: zynq: dts: Add U-Boot device tree additions
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (9 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 10/14] dm: arm: zynq: Enable device tree control in SPL Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 12/14] ARM: zynqmp: Enable DM and OF binding Simon Glass
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

We need to mark some device tree nodes so that they are available before
relocation. This enables driver model to find these automatically. In the
case of SPL it ensures that these nodes will be retained in SPL.

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

Changes in v2: None

 arch/arm/dts/zynq-7000.dtsi       | 1 +
 arch/arm/dts/zynq-microzed.dts    | 5 +++++
 arch/arm/dts/zynq-picozed.dts     | 5 +++++
 arch/arm/dts/zynq-zc702.dts       | 1 +
 arch/arm/dts/zynq-zc706.dts       | 1 +
 arch/arm/dts/zynq-zc770-xm010.dts | 1 +
 arch/arm/dts/zynq-zc770-xm011.dts | 1 +
 arch/arm/dts/zynq-zc770-xm012.dts | 1 +
 arch/arm/dts/zynq-zc770-xm013.dts | 1 +
 arch/arm/dts/zynq-zed.dts         | 1 +
 arch/arm/dts/zynq-zybo.dts        | 1 +
 11 files changed, 19 insertions(+)

diff --git a/arch/arm/dts/zynq-7000.dtsi b/arch/arm/dts/zynq-7000.dtsi
index 0b62cb0..12614f2 100644
--- a/arch/arm/dts/zynq-7000.dtsi
+++ b/arch/arm/dts/zynq-7000.dtsi
@@ -54,6 +54,7 @@
 	};
 
 	amba: amba {
+		u-boot,dm-pre-reloc;
 		compatible = "simple-bus";
 		#address-cells = <1>;
 		#size-cells = <1>;
diff --git a/arch/arm/dts/zynq-microzed.dts b/arch/arm/dts/zynq-microzed.dts
index c373a2c..5dff18e6 100644
--- a/arch/arm/dts/zynq-microzed.dts
+++ b/arch/arm/dts/zynq-microzed.dts
@@ -21,3 +21,8 @@
 		reg = <0 0x40000000>;
 	};
 };
+
+&uart1 {
+	u-boot,dm-pre-reloc;
+	status = "okay";
+};
diff --git a/arch/arm/dts/zynq-picozed.dts b/arch/arm/dts/zynq-picozed.dts
index 686b98f..3408df8 100644
--- a/arch/arm/dts/zynq-picozed.dts
+++ b/arch/arm/dts/zynq-picozed.dts
@@ -21,3 +21,8 @@
 		reg = <0 0x40000000>;
 	};
 };
+
+&uart1 {
+	u-boot,dm-pre-reloc;
+	status = "okay";
+};
diff --git a/arch/arm/dts/zynq-zc702.dts b/arch/arm/dts/zynq-zc702.dts
index 6691a8d..4fcef4b 100644
--- a/arch/arm/dts/zynq-zc702.dts
+++ b/arch/arm/dts/zynq-zc702.dts
@@ -375,6 +375,7 @@
 };
 
 &uart1 {
+	u-boot,dm-pre-reloc;
 	status = "okay";
 	pinctrl-names = "default";
 	pinctrl-0 = <&pinctrl_uart1_default>;
diff --git a/arch/arm/dts/zynq-zc706.dts b/arch/arm/dts/zynq-zc706.dts
index cf7bce4..8198917 100644
--- a/arch/arm/dts/zynq-zc706.dts
+++ b/arch/arm/dts/zynq-zc706.dts
@@ -296,6 +296,7 @@
 };
 
 &uart1 {
+	u-boot,dm-pre-reloc;
 	status = "okay";
 	pinctrl-names = "default";
 	pinctrl-0 = <&pinctrl_uart1_default>;
diff --git a/arch/arm/dts/zynq-zc770-xm010.dts b/arch/arm/dts/zynq-zc770-xm010.dts
index 680f24c..e2473d5 100644
--- a/arch/arm/dts/zynq-zc770-xm010.dts
+++ b/arch/arm/dts/zynq-zc770-xm010.dts
@@ -83,6 +83,7 @@
 };
 
 &uart1 {
+	u-boot,dm-pre-reloc;
 	status = "okay";
 };
 
diff --git a/arch/arm/dts/zynq-zc770-xm011.dts b/arch/arm/dts/zynq-zc770-xm011.dts
index f73c0dd..77e3bb0 100644
--- a/arch/arm/dts/zynq-zc770-xm011.dts
+++ b/arch/arm/dts/zynq-zc770-xm011.dts
@@ -55,6 +55,7 @@
 };
 
 &uart1 {
+	u-boot,dm-pre-reloc;
 	status = "okay";
 };
 
diff --git a/arch/arm/dts/zynq-zc770-xm012.dts b/arch/arm/dts/zynq-zc770-xm012.dts
index 4289e31..3e1769a 100644
--- a/arch/arm/dts/zynq-zc770-xm012.dts
+++ b/arch/arm/dts/zynq-zc770-xm012.dts
@@ -62,5 +62,6 @@
 };
 
 &uart1 {
+	u-boot,dm-pre-reloc;
 	status = "okay";
 };
diff --git a/arch/arm/dts/zynq-zc770-xm013.dts b/arch/arm/dts/zynq-zc770-xm013.dts
index 5124cdc..288e248 100644
--- a/arch/arm/dts/zynq-zc770-xm013.dts
+++ b/arch/arm/dts/zynq-zc770-xm013.dts
@@ -75,5 +75,6 @@
 };
 
 &uart0 {
+	u-boot,dm-pre-reloc;
 	status = "okay";
 };
diff --git a/arch/arm/dts/zynq-zed.dts b/arch/arm/dts/zynq-zed.dts
index 5762576..81c64a6 100644
--- a/arch/arm/dts/zynq-zed.dts
+++ b/arch/arm/dts/zynq-zed.dts
@@ -53,6 +53,7 @@
 };
 
 &uart1 {
+	u-boot,dm-pre-reloc;
 	status = "okay";
 };
 
diff --git a/arch/arm/dts/zynq-zybo.dts b/arch/arm/dts/zynq-zybo.dts
index 10f7815..dcfc00e 100644
--- a/arch/arm/dts/zynq-zybo.dts
+++ b/arch/arm/dts/zynq-zybo.dts
@@ -49,5 +49,6 @@
 };
 
 &uart1 {
+	u-boot,dm-pre-reloc;
 	status = "okay";
 };
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 12/14] ARM: zynqmp: Enable DM and OF binding
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (10 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 11/14] arm: zynq: dts: Add U-Boot device tree additions Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 13/14] arm: zynq: serial: Drop non-device-tree serial driver portions Simon Glass
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

From: Michal Simek <michal.simek@xilinx.com>

SPI requires DM and OF that's why enable DM for ZynqMP
and start to use configuration based on embedded OF.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v2: None

 arch/arm/Kconfig                   |   3 +
 arch/arm/dts/Makefile              |   2 +-
 arch/arm/dts/zynqmp-ep108.dts      | 164 ++++++++++++++++
 arch/arm/dts/zynqmp.dtsi           | 385 +++++++++++++++++++++++++++++++++++++
 configs/xilinx_zynqmp_ep_defconfig |   3 +-
 5 files changed, 555 insertions(+), 2 deletions(-)
 create mode 100644 arch/arm/dts/zynqmp-ep108.dts
 create mode 100644 arch/arm/dts/zynqmp.dtsi

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 1d85240..eec56f1 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -557,6 +557,9 @@ config ARCH_ZYNQ
 config ARCH_ZYNQMP
 	bool "Support Xilinx ZynqMP Platform"
 	select ARM64
+	select DM
+	select OF_CONTROL
+	select DM_SERIAL
 
 config TEGRA
 	bool "NVIDIA Tegra"
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 65b4230..4fbac4f 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -60,8 +60,8 @@ dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb \
 	zynq-zc770-xm011.dtb \
 	zynq-zc770-xm012.dtb \
 	zynq-zc770-xm013.dtb
+dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-ep108.dtb
 dtb-$(CONFIG_AM33XX) += am335x-boneblack.dtb am335x-evm.dtb
-
 dtb-$(CONFIG_ARCH_SOCFPGA) +=				\
 	socfpga_arria5_socdk.dtb			\
 	socfpga_cyclone5_mcvevk.dtb			\
diff --git a/arch/arm/dts/zynqmp-ep108.dts b/arch/arm/dts/zynqmp-ep108.dts
new file mode 100644
index 0000000..1e64dab
--- /dev/null
+++ b/arch/arm/dts/zynqmp-ep108.dts
@@ -0,0 +1,164 @@
+/*
+ * dts file for Xilinx ZynqMP
+ *
+ * (C) Copyright 2014 - 2015, Xilinx, Inc.
+ *
+ * Michal Simek <michal.simek@xilinx.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+/dts-v1/;
+
+/include/ "zynqmp.dtsi"
+
+/ {
+	model = "ZynqMP EP108";
+
+	aliases {
+		serial0 = &uart0;
+		spi0 = &qspi;
+		spi1 = &spi0;
+		spi2 = &spi1;
+	};
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+	};
+
+	memory {
+		device_type = "memory";
+		reg = <0x0 0x0 0x40000000>;
+	};
+};
+
+&can0 {
+	status = "okay";
+};
+
+&gem0 {
+	status = "okay";
+	phy-handle = <&phy0>;
+	phy-mode = "rgmii-id";
+	phy0: phy at 0{
+		reg = <0>;
+		max-speed = <100>;
+	};
+};
+
+&gpio {
+	status = "okay";
+};
+
+&i2c0 {
+	status = "okay";
+	clock-frequency = <400000>;
+	eeprom at 54 {
+		compatible = "at,24c64";
+		reg = <0x54>;
+	};
+};
+
+&i2c1 {
+	status = "okay";
+	clock-frequency = <400000>;
+	eeprom at 55 {
+		compatible = "at,24c64";
+		reg = <0x55>;
+	};
+};
+
+&qspi {
+	status = "okay";
+	flash at 0 {
+		compatible = "n25q512a11";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		reg = <0x0>;
+		spi-tx-bus-width = <1>;
+		spi-rx-bus-width = <4>;
+		spi-max-frequency = <10000000>;
+		partition at qspi-fsbl-uboot { /* for testing purpose */
+			label = "qspi-fsbl-uboot";
+			reg = <0x0 0x100000>;
+		};
+		partition at qspi-linux { /* for testing purpose */
+			label = "qspi-linux";
+			reg = <0x100000 0x500000>;
+		};
+		partition at qspi-device-tree { /* for testing purpose */
+			label = "qspi-device-tree";
+			reg = <0x600000 0x20000>;
+		};
+		partition at qspi-rootfs { /* for testing purpose */
+			label = "qspi-rootfs";
+			reg = <0x620000 0x5E0000>;
+		};
+	};
+};
+
+&sata {
+	status = "okay";
+	ceva,broken-gen2;
+};
+
+&sdhci0 {
+	status = "okay";
+};
+
+&sdhci1 {
+	status = "okay";
+};
+
+&spi0 {
+	status = "okay";
+	num-cs = <1>;
+	spi0_flash0: spi0_flash0 at 0 {
+		compatible = "m25p80";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		spi-max-frequency = <50000000>;
+		reg = <0>;
+
+		spi0_flash0 at 00000000 {
+			label = "spi0_flash0";
+			reg = <0x0 0x100000>;
+		};
+	};
+};
+
+&spi1 {
+	status = "okay";
+	num-cs = <1>;
+	spi1_flash0: spi1_flash0 at 0 {
+		compatible = "m25p80";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		spi-max-frequency = <50000000>;
+		reg = <0>;
+
+		spi1_flash0 at 00000000 {
+			label = "spi1_flash0";
+			reg = <0x0 0x100000>;
+		};
+	};
+};
+
+&uart0 {
+	status = "okay";
+};
+
+&usb0 {
+	status = "okay";
+	dr_mode = "peripheral";
+	maximum-speed = "high-speed";
+};
+
+&usb1 {
+	status = "okay";
+	dr_mode = "host";
+	maximum-speed = "high-speed";
+};
+
+&watchdog0 {
+	status = "okay";
+};
diff --git a/arch/arm/dts/zynqmp.dtsi b/arch/arm/dts/zynqmp.dtsi
new file mode 100644
index 0000000..dfe8e0b
--- /dev/null
+++ b/arch/arm/dts/zynqmp.dtsi
@@ -0,0 +1,385 @@
+/*
+ * dts file for Xilinx ZynqMP
+ *
+ * (C) Copyright 2014 - 2015, Xilinx, Inc.
+ *
+ * Michal Simek <michal.simek@xilinx.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+/ {
+	compatible = "xlnx,zynqmp";
+	#address-cells = <2>;
+	#size-cells = <1>;
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu at 0 {
+			compatible = "arm,cortex-a53", "arm,armv8";
+			device_type = "cpu";
+			enable-method = "psci";
+			reg = <0x0>;
+		};
+
+		cpu at 1 {
+			compatible = "arm,cortex-a53", "arm,armv8";
+			device_type = "cpu";
+			enable-method = "psci";
+			reg = <0x1>;
+		};
+
+		cpu at 2 {
+			compatible = "arm,cortex-a53", "arm,armv8";
+			device_type = "cpu";
+			enable-method = "psci";
+			reg = <0x2>;
+		};
+
+		cpu at 3 {
+			compatible = "arm,cortex-a53", "arm,armv8";
+			device_type = "cpu";
+			enable-method = "psci";
+			reg = <0x3>;
+		};
+	};
+
+	pmu {
+		compatible = "arm,armv8-pmuv3";
+		interrupts = <0 143 4>,
+			     <0 144 4>,
+			     <0 145 4>,
+			     <0 146 4>;
+	};
+
+	psci {
+		compatible = "arm,psci-0.2";
+		method = "smc";
+	};
+
+	timer {
+		compatible = "arm,armv8-timer";
+		interrupt-parent = <&gic>;
+		interrupts = <1 13 0xf01>,
+			     <1 14 0xf01>,
+			     <1 11 0xf01>,
+			     <1 10 0xf01>;
+	};
+
+	amba_apu {
+		compatible = "simple-bus";
+		#address-cells = <2>;
+		#size-cells = <1>;
+		ranges;
+
+		gic: interrupt-controller at f9010000 {
+			compatible = "arm,gic-400", "arm,cortex-a15-gic";
+			#interrupt-cells = <3>;
+			reg = <0x0 0xf9010000 0x10000>,
+			      <0x0 0xf902f000 0x2000>,
+			      <0x0 0xf9040000 0x20000>,
+			      <0x0 0xf906f000 0x2000>;
+			interrupt-controller;
+			interrupt-parent = <&gic>;
+			interrupts = <1 9 0xf04>;
+		};
+	};
+
+	amba {
+		compatible = "simple-bus";
+		#address-cells = <2>;
+		#size-cells = <1>;
+		ranges;
+
+		can0: can at ff060000 {
+			compatible = "xlnx,zynq-can-1.0";
+			status = "disabled";
+			clocks = <&misc_clk &misc_clk>;
+			clock-names = "can_clk", "pclk";
+			reg = <0x0 0xff060000 0x1000>;
+			interrupts = <0 23 4>;
+			interrupt-parent = <&gic>;
+			tx-fifo-depth = <0x40>;
+			rx-fifo-depth = <0x40>;
+		};
+
+		can1: can at ff070000 {
+			compatible = "xlnx,zynq-can-1.0";
+			status = "disabled";
+			clocks = <&misc_clk &misc_clk>;
+			clock-names = "can_clk", "pclk";
+			reg = <0x0 0xff070000 0x1000>;
+			interrupts = <0 24 4>;
+			interrupt-parent = <&gic>;
+			tx-fifo-depth = <0x40>;
+			rx-fifo-depth = <0x40>;
+		};
+
+		misc_clk: misc_clk {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <25000000>;
+		};
+
+		gpio: gpio at ff0a0000 {
+			compatible = "xlnx,zynqmp-gpio-1.0";
+			status = "disabled";
+			#gpio-cells = <0x2>;
+			clocks = <&misc_clk>;
+			interrupt-parent = <&gic>;
+			interrupts = <0 16 4>;
+			reg = <0x0 0xff0a0000 0x1000>;
+		};
+
+		gem0: ethernet at ff0b0000 {
+			compatible = "cdns,gem";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 57 4>, <0 57 4>;
+			reg = <0x0 0xff0b0000 0x1000>;
+			clock-names = "pclk", "hclk", "tx_clk";
+			clocks = <&misc_clk>, <&misc_clk>, <&misc_clk>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		gem1: ethernet at ff0c0000 {
+			compatible = "cdns,gem";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 59 4>, <0 59 4>;
+			reg = <0x0 0xff0c0000 0x1000>;
+			clock-names = "pclk", "hclk", "tx_clk";
+			clocks = <&misc_clk>, <&misc_clk>, <&misc_clk>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		gem2: ethernet at ff0d0000 {
+			compatible = "cdns,gem";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 61 4>, <0 61 4>;
+			reg = <0x0 0xff0d0000 0x1000>;
+			clock-names = "pclk", "hclk", "tx_clk";
+			clocks = <&misc_clk>, <&misc_clk>, <&misc_clk>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		gem3: ethernet at ff0e0000 {
+			compatible = "cdns,gem";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 63 4>, <0 63 4>;
+			reg = <0x0 0xff0e0000 0x1000>;
+			clock-names = "pclk", "hclk", "tx_clk";
+			clocks = <&misc_clk>, <&misc_clk>, <&misc_clk>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		i2c_clk: i2c_clk {
+			compatible = "fixed-clock";
+			#clock-cells = <0x0>;
+			clock-frequency = <111111111>;
+		};
+
+		i2c0: i2c at ff020000 {
+			compatible = "cdns,i2c-r1p10";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 17 4>;
+			reg = <0x0 0xff020000 0x1000>;
+			clocks = <&i2c_clk>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		i2c1: i2c at ff030000 {
+			compatible = "cdns,i2c-r1p10";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 18 4>;
+			reg = <0x0 0xff030000 0x1000>;
+			clocks = <&i2c_clk>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		qspi: spi at ff0f0000 {
+			compatible = "xlnx,zynqmp-qspi-1.0";
+			status = "disabled";
+			clock-names = "ref_clk", "pclk";
+			clocks = <&misc_clk &misc_clk>;
+			interrupts = <0 15 4>;
+			interrupt-parent = <&gic>;
+			num-cs = <1>;
+			reg = <0x0 0xff0f0000 0x1000 0x0 0xc0000000 0x8000000>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		sata_clk: sata_clk {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <75000000>;
+		};
+
+		sata: ahci at fd0c0000 {
+			compatible = "ceva,ahci-1v84";
+			status = "disabled";
+			reg = <0x0 0xfd0c0000 0x2000>;
+			interrupt-parent = <&gic>;
+			interrupts = <0 133 4>;
+			clocks = <&sata_clk>;
+		};
+
+		sdhci0: sdhci at ff160000 {
+			compatible = "arasan,sdhci-8.9a";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 48 4>;
+			reg = <0x0 0xff160000 0x1000>;
+			clock-names = "clk_xin", "clk_ahb";
+			clocks = <&misc_clk>, <&misc_clk>;
+		};
+
+		sdhci1: sdhci at ff170000 {
+			compatible = "arasan,sdhci-8.9a";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 49 4>;
+			reg = <0x0 0xff170000 0x1000>;
+			clock-names = "clk_xin", "clk_ahb";
+			clocks = <&misc_clk>, <&misc_clk>;
+		};
+
+		smmu: smmu at fd800000 {
+			compatible = "arm,mmu-500";
+			reg = <0x0 0xfd800000 0x20000>;
+			#global-interrupts = <1>;
+			interrupt-parent = <&gic>;
+			interrupts = <0 157 4>,
+				<0 157 4>, <0 157 4>, <0 157 4>, <0 157 4>,
+				<0 157 4>, <0 157 4>, <0 157 4>, <0 157 4>,
+				<0 157 4>, <0 157 4>, <0 157 4>, <0 157 4>,
+				<0 157 4>, <0 157 4>, <0 157 4>, <0 157 4>;
+		};
+
+		spi0: spi at ff040000 {
+			compatible = "cdns,spi-r1p6";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 19 4>;
+			reg = <0x0 0xff040000 0x1000>;
+			clock-names = "ref_clk", "pclk";
+			clocks = <&misc_clk &misc_clk>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		spi1: spi at ff050000 {
+			compatible = "cdns,spi-r1p6";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 20 4>;
+			reg = <0x0 0xff050000 0x1000>;
+			clock-names = "ref_clk", "pclk";
+			clocks = <&misc_clk &misc_clk>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		ttc0: timer at ff110000 {
+			compatible = "cdns,ttc";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 36 4>, <0 37 4>, <0 38 4>;
+			reg = <0x0 0xff110000 0x1000>;
+			clocks = <&misc_clk>;
+			timer-width = <32>;
+		};
+
+		ttc1: timer at ff120000 {
+			compatible = "cdns,ttc";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 39 4>, <0 40 4>, <0 41 4>;
+			reg = <0x0 0xff120000 0x1000>;
+			clocks = <&misc_clk>;
+			timer-width = <32>;
+		};
+
+		ttc2: timer at ff130000 {
+			compatible = "cdns,ttc";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 42 4>, <0 43 4>, <0 44 4>;
+			reg = <0x0 0xff130000 0x1000>;
+			clocks = <&misc_clk>;
+			timer-width = <32>;
+		};
+
+		ttc3: timer at ff140000 {
+			compatible = "cdns,ttc";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 45 4>, <0 46 4>, <0 47 4>;
+			reg = <0x0 0xff140000 0x1000>;
+			clocks = <&misc_clk>;
+			timer-width = <32>;
+		};
+
+		uart0: serial at ff000000 {
+			compatible = "cdns,uart-r1p8";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 21 4>;
+			reg = <0x0 0xff000000 0x1000>;
+			clock-names = "uart_clk", "pclk";
+			clocks = <&misc_clk &misc_clk>;
+		};
+
+		uart1: serial at ff010000 {
+			compatible = "cdns,uart-r1p8";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 22 4>;
+			reg = <0x0 0xff010000 0x1000>;
+			clock-names = "uart_clk", "pclk";
+			clocks = <&misc_clk &misc_clk>;
+		};
+
+		usb0: usb at fe200000 {
+			compatible = "snps,dwc3";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 65 4>;
+			reg = <0x0 0xfe200000 0x40000>;
+			clock-names = "clk_xin", "clk_ahb";
+			clocks = <&misc_clk>, <&misc_clk>;
+		};
+
+		usb1: usb at fe300000 {
+			compatible = "snps,dwc3";
+			status = "disabled";
+			interrupt-parent = <&gic>;
+			interrupts = <0 70 4>;
+			reg = <0x0 0xfe300000 0x40000>;
+			clock-names = "clk_xin", "clk_ahb";
+			clocks = <&misc_clk>, <&misc_clk>;
+		};
+
+		watchdog0: watchdog at fd4d0000 {
+			compatible = "cdns,wdt-r1p2";
+			status = "disabled";
+			clocks= <&misc_clk>;
+			interrupt-parent = <&gic>;
+			interrupts = <0 52 1>;
+			reg = <0x0 0xfd4d0000 0x1000>;
+			timeout-sec = <10>;
+		};
+	};
+};
diff --git a/configs/xilinx_zynqmp_ep_defconfig b/configs/xilinx_zynqmp_ep_defconfig
index 770c797..79304c1 100644
--- a/configs/xilinx_zynqmp_ep_defconfig
+++ b/configs/xilinx_zynqmp_ep_defconfig
@@ -2,7 +2,7 @@ CONFIG_ARM=y
 CONFIG_ARCH_ZYNQMP=y
 CONFIG_ZYNQMP_USB=y
 CONFIG_SYS_TEXT_BASE=0x8000000
-CONFIG_DEFAULT_DEVICE_TREE="zynqmp-ep"
+CONFIG_DEFAULT_DEVICE_TREE="zynqmp-ep108"
 CONFIG_SYS_PROMPT="ZynqMP> "
 # CONFIG_CMD_CONSOLE is not set
 # CONFIG_CMD_IMLS is not set
@@ -20,5 +20,6 @@ CONFIG_CMD_DHCP=y
 CONFIG_CMD_PING=y
 CONFIG_CMD_TIME=y
 CONFIG_CMD_TIMER=y
+CONFIG_OF_EMBED=y
 CONFIG_NET_RANDOM_ETHADDR=y
 # CONFIG_REGEX is not set
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 13/14] arm: zynq: serial: Drop non-device-tree serial driver portions
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (11 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 12/14] ARM: zynqmp: Enable DM and OF binding Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 14/14] arm: zynq: Move serial driver to driver model Simon Glass
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

Since we use device tree in SPL also, we can drop this code.

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

Changes in v2: None

 drivers/serial/serial_zynq.c | 15 ---------------
 1 file changed, 15 deletions(-)

diff --git a/drivers/serial/serial_zynq.c b/drivers/serial/serial_zynq.c
index c4304dd..c39c1a9 100644
--- a/drivers/serial/serial_zynq.c
+++ b/drivers/serial/serial_zynq.c
@@ -195,7 +195,6 @@ DECLARE_PSSERIAL_FUNCTIONS(1);
 static struct serial_device uart_zynq_serial1_device =
 	INIT_PSSERIAL_STRUCTURE(1, "ttyPS1");
 
-#if CONFIG_IS_ENABLED(OF_CONTROL)
 __weak struct serial_device *default_serial_console(void)
 {
 	const void *blob = gd->fdt_blob;
@@ -218,20 +217,6 @@ __weak struct serial_device *default_serial_console(void)
 
 	return NULL;
 }
-#else
-__weak struct serial_device *default_serial_console(void)
-{
-#if defined(CONFIG_ZYNQ_SERIAL_UART0)
-	if (uart_zynq_ports[0])
-		return &uart_zynq_serial0_device;
-#endif
-#if defined(CONFIG_ZYNQ_SERIAL_UART1)
-	if (uart_zynq_ports[1])
-		return &uart_zynq_serial1_device;
-#endif
-	return NULL;
-}
-#endif
 
 void zynq_serial_initialize(void)
 {
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 14/14] arm: zynq: Move serial driver to driver model
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (12 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 13/14] arm: zynq: serial: Drop non-device-tree serial driver portions Simon Glass
@ 2015-10-18  1:41 ` Simon Glass
  2015-10-27 15:26 ` [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert " Michal Simek
  2015-10-30 13:29 ` Michal Simek
  15 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-18  1:41 UTC (permalink / raw)
  To: u-boot

Update this driver to use driver model and change all users.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

Changes in v2:
- Extend list of compatible strings with cadence compatible string.

 arch/arm/Kconfig                   |   1 +
 drivers/serial/serial_zynq.c       | 163 +++++++++++++++----------------------
 include/configs/xilinx_zynqmp.h    |   4 +-
 include/configs/xilinx_zynqmp_ep.h |   1 -
 include/configs/zynq_microzed.h    |   1 -
 include/configs/zynq_picozed.h     |   1 -
 include/configs/zynq_zc70x.h       |   1 -
 include/configs/zynq_zc770.h       |   6 --
 include/configs/zynq_zed.h         |   1 -
 include/configs/zynq_zybo.h        |   1 -
 10 files changed, 67 insertions(+), 113 deletions(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index eec56f1..cfbcaa8 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -551,6 +551,7 @@ config ARCH_ZYNQ
 	select DM
 	select SPL_DM
 	select DM_SPI
+	select DM_SERIAL
 	select DM_SPI_FLASH
 	select SPL_SEPARATE_BSS
 
diff --git a/drivers/serial/serial_zynq.c b/drivers/serial/serial_zynq.c
index c39c1a9..231d368 100644
--- a/drivers/serial/serial_zynq.c
+++ b/drivers/serial/serial_zynq.c
@@ -6,6 +6,8 @@
  */
 
 #include <common.h>
+#include <debug_uart.h>
+#include <dm.h>
 #include <errno.h>
 #include <fdtdec.h>
 #include <watchdog.h>
@@ -18,6 +20,7 @@
 DECLARE_GLOBAL_DATA_PTR;
 
 #define ZYNQ_UART_SR_TXFULL	0x00000010 /* TX FIFO full */
+#define ZYNQ_UART_SR_TXACTIVE	(1 << 11)  /* TX active */
 #define ZYNQ_UART_SR_RXEMPTY	0x00000002 /* RX FIFO empty */
 
 #define ZYNQ_UART_CR_TX_EN	0x00000010 /* TX enabled */
@@ -38,9 +41,8 @@ struct uart_zynq {
 	u32 baud_rate_divider; /* 0x34 - Baud Rate Divider [7:0] */
 };
 
-static struct uart_zynq *uart_zynq_ports[2] = {
-	[0] = (struct uart_zynq *)ZYNQ_SERIAL_BASEADDR0,
-	[1] = (struct uart_zynq *)ZYNQ_SERIAL_BASEADDR1,
+struct zynq_uart_priv {
+	struct uart_zynq *regs;
 };
 
 /* Set up the baud rate in gd struct */
@@ -84,15 +86,6 @@ static void _uart_zynq_serial_setbrg(struct uart_zynq *regs,
 	writel(bgen, &regs->baud_rate_gen);
 }
 
-/* Set up the baud rate in gd struct */
-static void uart_zynq_serial_setbrg(const int port)
-{
-	unsigned long clock = get_uart_clk(port);
-	struct uart_zynq *regs = uart_zynq_ports[port];
-
-	return _uart_zynq_serial_setbrg(regs, clock, gd->baudrate);
-}
-
 /* Initialize the UART, with...some settings. */
 static void _uart_zynq_serial_init(struct uart_zynq *regs)
 {
@@ -102,20 +95,6 @@ static void _uart_zynq_serial_init(struct uart_zynq *regs)
 	writel(ZYNQ_UART_MR_PARITY_NONE, &regs->mode); /* 8 bit, no parity */
 }
 
-/* Initialize the UART, with...some settings. */
-static int uart_zynq_serial_init(const int port)
-{
-	struct uart_zynq *regs = uart_zynq_ports[port];
-
-	if (!regs)
-		return -1;
-
-	_uart_zynq_serial_init(regs);
-	uart_zynq_serial_setbrg(port);
-
-	return 0;
-}
-
 static int _uart_zynq_serial_putc(struct uart_zynq *regs, const char c)
 {
 	if (readl(&regs->channel_sts) & ZYNQ_UART_SR_TXFULL)
@@ -126,103 +105,91 @@ static int _uart_zynq_serial_putc(struct uart_zynq *regs, const char c)
 	return 0;
 }
 
-static void uart_zynq_serial_putc(const char c, const int port)
+int zynq_serial_setbrg(struct udevice *dev, int baudrate)
 {
-	struct uart_zynq *regs = uart_zynq_ports[port];
+	struct zynq_uart_priv *priv = dev_get_priv(dev);
+	unsigned long clock = get_uart_clk(0);
 
-	while (_uart_zynq_serial_putc(regs, c) == -EAGAIN)
-		WATCHDOG_RESET();
+	_uart_zynq_serial_setbrg(priv->regs, clock, baudrate);
 
-	if (c == '\n') {
-		while (_uart_zynq_serial_putc(regs, '\r') == -EAGAIN)
-			WATCHDOG_RESET();
-	}
+	return 0;
 }
 
-static void uart_zynq_serial_puts(const char *s, const int port)
+static int zynq_serial_probe(struct udevice *dev)
 {
-	while (*s)
-		uart_zynq_serial_putc(*s++, port);
-}
+	struct zynq_uart_priv *priv = dev_get_priv(dev);
 
-static int uart_zynq_serial_tstc(const int port)
-{
-	struct uart_zynq *regs = uart_zynq_ports[port];
+	_uart_zynq_serial_init(priv->regs);
 
-	return (readl(&regs->channel_sts) & ZYNQ_UART_SR_RXEMPTY) == 0;
+	return 0;
 }
 
-static int uart_zynq_serial_getc(const int port)
+static int zynq_serial_getc(struct udevice *dev)
 {
-	struct uart_zynq *regs = uart_zynq_ports[port];
+	struct zynq_uart_priv *priv = dev_get_priv(dev);
+	struct uart_zynq *regs = priv->regs;
+
+	if (readl(&regs->channel_sts) & ZYNQ_UART_SR_RXEMPTY)
+		return -EAGAIN;
 
-	while (!uart_zynq_serial_tstc(port))
-		WATCHDOG_RESET();
 	return readl(&regs->tx_rx_fifo);
 }
 
-/* Multi serial device functions */
-#define DECLARE_PSSERIAL_FUNCTIONS(port) \
-	static int uart_zynq##port##_init(void) \
-				{ return uart_zynq_serial_init(port); } \
-	static void uart_zynq##port##_setbrg(void) \
-				{ return uart_zynq_serial_setbrg(port); } \
-	static int uart_zynq##port##_getc(void) \
-				{ return uart_zynq_serial_getc(port); } \
-	static int uart_zynq##port##_tstc(void) \
-				{ return uart_zynq_serial_tstc(port); } \
-	static void uart_zynq##port##_putc(const char c) \
-				{ uart_zynq_serial_putc(c, port); } \
-	static void uart_zynq##port##_puts(const char *s) \
-				{ uart_zynq_serial_puts(s, port); }
-
-/* Serial device descriptor */
-#define INIT_PSSERIAL_STRUCTURE(port, __name) {	\
-	  .name   = __name,			\
-	  .start  = uart_zynq##port##_init,	\
-	  .stop   = NULL,			\
-	  .setbrg = uart_zynq##port##_setbrg,	\
-	  .getc   = uart_zynq##port##_getc,	\
-	  .tstc   = uart_zynq##port##_tstc,	\
-	  .putc   = uart_zynq##port##_putc,	\
-	  .puts   = uart_zynq##port##_puts,	\
-}
+static int zynq_serial_putc(struct udevice *dev, const char ch)
+{
+	struct zynq_uart_priv *priv = dev_get_priv(dev);
 
-DECLARE_PSSERIAL_FUNCTIONS(0);
-static struct serial_device uart_zynq_serial0_device =
-	INIT_PSSERIAL_STRUCTURE(0, "ttyPS0");
-DECLARE_PSSERIAL_FUNCTIONS(1);
-static struct serial_device uart_zynq_serial1_device =
-	INIT_PSSERIAL_STRUCTURE(1, "ttyPS1");
+	return _uart_zynq_serial_putc(priv->regs, ch);
+}
 
-__weak struct serial_device *default_serial_console(void)
+static int zynq_serial_pending(struct udevice *dev, bool input)
 {
-	const void *blob = gd->fdt_blob;
-	int node;
-	unsigned int base_addr;
+	struct zynq_uart_priv *priv = dev_get_priv(dev);
+	struct uart_zynq *regs = priv->regs;
 
-	node = fdt_path_offset(blob, "serial0");
-	if (node < 0)
-		return NULL;
+	if (input)
+		return !(readl(&regs->channel_sts) & ZYNQ_UART_SR_RXEMPTY);
+	else
+		return !!(readl(&regs->channel_sts) & ZYNQ_UART_SR_TXACTIVE);
+}
 
-	base_addr = fdtdec_get_addr(blob, node, "reg");
-	if (base_addr == FDT_ADDR_T_NONE)
-		return NULL;
+static int zynq_serial_ofdata_to_platdata(struct udevice *dev)
+{
+	struct zynq_uart_priv *priv = dev_get_priv(dev);
+	fdt_addr_t addr;
 
-	if (base_addr == ZYNQ_SERIAL_BASEADDR0)
-		return &uart_zynq_serial0_device;
+	addr = fdtdec_get_addr(gd->fdt_blob, dev->of_offset, "reg");
+	if (addr == FDT_ADDR_T_NONE)
+		return -EINVAL;
 
-	if (base_addr == ZYNQ_SERIAL_BASEADDR1)
-		return &uart_zynq_serial1_device;
+	priv->regs = (struct uart_zynq *)addr;
 
-	return NULL;
+	return 0;
 }
 
-void zynq_serial_initialize(void)
-{
-	serial_register(&uart_zynq_serial0_device);
-	serial_register(&uart_zynq_serial1_device);
-}
+static const struct dm_serial_ops zynq_serial_ops = {
+	.putc = zynq_serial_putc,
+	.pending = zynq_serial_pending,
+	.getc = zynq_serial_getc,
+	.setbrg = zynq_serial_setbrg,
+};
+
+static const struct udevice_id zynq_serial_ids[] = {
+	{ .compatible = "xlnx,xuartps" },
+	{ .compatible = "cdns,uart-r1p8" },
+	{ }
+};
+
+U_BOOT_DRIVER(serial_s5p) = {
+	.name	= "serial_zynq",
+	.id	= UCLASS_SERIAL,
+	.of_match = zynq_serial_ids,
+	.ofdata_to_platdata = zynq_serial_ofdata_to_platdata,
+	.priv_auto_alloc_size = sizeof(struct zynq_uart_priv),
+	.probe = zynq_serial_probe,
+	.ops	= &zynq_serial_ops,
+	.flags = DM_FLAG_PRE_RELOC,
+};
 
 #ifdef CONFIG_DEBUG_UART_ZYNQ
 
diff --git a/include/configs/xilinx_zynqmp.h b/include/configs/xilinx_zynqmp.h
index da87188..7f90bab 100644
--- a/include/configs/xilinx_zynqmp.h
+++ b/include/configs/xilinx_zynqmp.h
@@ -56,9 +56,7 @@
 # define CONFIG_ARM_DCC
 # define CONFIG_CPU_ARMV8
 #else
-# if defined(CONFIG_ZYNQ_SERIAL_UART0) || defined(CONFIG_ZYNQ_SERIAL_UART1)
-#  define CONFIG_ZYNQ_SERIAL
-# endif
+# define CONFIG_ZYNQ_SERIAL
 #endif
 
 #define CONFIG_CONS_INDEX		0
diff --git a/include/configs/xilinx_zynqmp_ep.h b/include/configs/xilinx_zynqmp_ep.h
index e476eb1..ed6023a 100644
--- a/include/configs/xilinx_zynqmp_ep.h
+++ b/include/configs/xilinx_zynqmp_ep.h
@@ -18,7 +18,6 @@
 #define CONFIG_ZYNQ_GEM0
 #define CONFIG_ZYNQ_GEM_PHY_ADDR0	7
 
-#define CONFIG_ZYNQ_SERIAL_UART0
 #define CONFIG_ZYNQ_SDHCI0
 #define CONFIG_ZYNQ_I2C0
 #define CONFIG_SYS_I2C_ZYNQ
diff --git a/include/configs/zynq_microzed.h b/include/configs/zynq_microzed.h
index 549a664..b5ffafb 100644
--- a/include/configs/zynq_microzed.h
+++ b/include/configs/zynq_microzed.h
@@ -12,7 +12,6 @@
 
 #define CONFIG_SYS_SDRAM_SIZE		(1024 * 1024 * 1024)
 
-#define CONFIG_ZYNQ_SERIAL_UART1
 #define CONFIG_ZYNQ_GEM0
 #define CONFIG_ZYNQ_GEM_PHY_ADDR0	0
 
diff --git a/include/configs/zynq_picozed.h b/include/configs/zynq_picozed.h
index d116e05..ffc73bd 100644
--- a/include/configs/zynq_picozed.h
+++ b/include/configs/zynq_picozed.h
@@ -12,7 +12,6 @@
 
 #define CONFIG_SYS_SDRAM_SIZE		(1024 * 1024 * 1024)
 
-#define CONFIG_ZYNQ_SERIAL_UART1
 #define CONFIG_ZYNQ_GEM0
 #define CONFIG_ZYNQ_GEM_PHY_ADDR0	0
 
diff --git a/include/configs/zynq_zc70x.h b/include/configs/zynq_zc70x.h
index b659054..468a6bc 100644
--- a/include/configs/zynq_zc70x.h
+++ b/include/configs/zynq_zc70x.h
@@ -12,7 +12,6 @@
 
 #define CONFIG_SYS_SDRAM_SIZE		(1024 * 1024 * 1024)
 
-#define CONFIG_ZYNQ_SERIAL_UART1
 #define CONFIG_ZYNQ_GEM0
 #define CONFIG_ZYNQ_GEM_PHY_ADDR0	7
 
diff --git a/include/configs/zynq_zc770.h b/include/configs/zynq_zc770.h
index 7a1b872..63224dd 100644
--- a/include/configs/zynq_zc770.h
+++ b/include/configs/zynq_zc770.h
@@ -15,26 +15,20 @@
 #define CONFIG_SYS_NO_FLASH
 
 #if defined(CONFIG_ZC770_XM010)
-# define CONFIG_ZYNQ_SERIAL_UART1
 # define CONFIG_ZYNQ_GEM0
 # define CONFIG_ZYNQ_GEM_PHY_ADDR0	7
 # define CONFIG_ZYNQ_SDHCI0
 # define CONFIG_ZYNQ_SPI
 
 #elif defined(CONFIG_ZC770_XM011)
-# define CONFIG_ZYNQ_SERIAL_UART1
 
 #elif defined(CONFIG_ZC770_XM012)
-# define CONFIG_ZYNQ_SERIAL_UART1
 # undef CONFIG_SYS_NO_FLASH
 
 #elif defined(CONFIG_ZC770_XM013)
-# define CONFIG_ZYNQ_SERIAL_UART0
 # define CONFIG_ZYNQ_GEM1
 # define CONFIG_ZYNQ_GEM_PHY_ADDR1	7
 
-#else
-# define CONFIG_ZYNQ_SERIAL_UART0
 #endif
 
 #include <configs/zynq-common.h>
diff --git a/include/configs/zynq_zed.h b/include/configs/zynq_zed.h
index 946de95..6ec6117 100644
--- a/include/configs/zynq_zed.h
+++ b/include/configs/zynq_zed.h
@@ -12,7 +12,6 @@
 
 #define CONFIG_SYS_SDRAM_SIZE		(512 * 1024 * 1024)
 
-#define CONFIG_ZYNQ_SERIAL_UART1
 #define CONFIG_ZYNQ_GEM0
 #define CONFIG_ZYNQ_GEM_PHY_ADDR0	0
 
diff --git a/include/configs/zynq_zybo.h b/include/configs/zynq_zybo.h
index 191f2a5..e2270cd 100644
--- a/include/configs/zynq_zybo.h
+++ b/include/configs/zynq_zybo.h
@@ -13,7 +13,6 @@
 
 #define CONFIG_SYS_SDRAM_SIZE (512 * 1024 * 1024)
 
-#define CONFIG_ZYNQ_SERIAL_UART1
 #define CONFIG_ZYNQ_GEM0
 #define CONFIG_ZYNQ_GEM_PHY_ADDR0	0
 
-- 
2.6.0.rc2.230.g3dd15c0

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

* [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (13 preceding siblings ...)
  2015-10-18  1:41 ` [U-Boot] [PATCH v2 14/14] arm: zynq: Move serial driver to driver model Simon Glass
@ 2015-10-27 15:26 ` Michal Simek
  2015-10-27 17:37   ` Simon Glass
  2015-10-30 13:29 ` Michal Simek
  15 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2015-10-27 15:26 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On 10/18/2015 03:41 AM, Simon Glass wrote:
> This series updates the Zynq serial driver to use driver model. Along the
> way several problems are fixed:
> 
> - Support for /chosen/stdout-path using an alias
> - Fix to fdtgrep which is currently breaking alias building
> - Avoid building u-boot-spl-dtb.bin when it is not requested
> - Deal with boards which have BSS in SDRAM
> 
> For zynq this series makes a few changes:
> - Use the new SPL init procedure, which just involves a few tweaks for zynq
> - Add debug UART support
> - Move to using a separate device tree instead of embedded
> 
> Only zybo has been tested. Testing on other zynq boards is welcome. They are
> all set up roughly the same so I expect only minor problems.
> 
> This serial includes Michal's zynqmp device tree patch.
> 
> Changes in v2:
> - Extend list of compatible strings with cadence compatible string.
> 
> Michal Simek (1):
>   ARM: zynqmp: Enable DM and OF binding
> 
> Simon Glass (13):
>   fdt: Add a function to look up a /chosen property
>   fdt: Correct handling of alias regions
>   fdtgrep: Simplify the alias generation code
>   dm: serial: Deal with stdout-path with an alias
>   dm: spl: Generate u-boot-spl-dtb.bin only when enabled
>   dm: spl: Support device tree when BSS is in a different section
>   arm: zynq: Use separate device tree instead of embedded
>   arm: zynq: Drop unnecessary code in SPL board_init_f()
>   arm: zynq: Support the debug UART
>   dm: arm: zynq: Enable device tree control in SPL
>   arm: zynq: dts: Add U-Boot device tree additions
>   arm: zynq: serial: Drop non-device-tree serial driver portions
>   arm: zynq: Move serial driver to driver model
> 
>  Kconfig                            |  10 +
>  arch/arm/Kconfig                   |   7 +
>  arch/arm/dts/Makefile              |   2 +-
>  arch/arm/dts/zynq-7000.dtsi        |   1 +
>  arch/arm/dts/zynq-microzed.dts     |   5 +
>  arch/arm/dts/zynq-picozed.dts      |   5 +
>  arch/arm/dts/zynq-zc702.dts        |   1 +
>  arch/arm/dts/zynq-zc706.dts        |   1 +
>  arch/arm/dts/zynq-zc770-xm010.dts  |   1 +
>  arch/arm/dts/zynq-zc770-xm011.dts  |   1 +
>  arch/arm/dts/zynq-zc770-xm012.dts  |   1 +
>  arch/arm/dts/zynq-zc770-xm013.dts  |   1 +
>  arch/arm/dts/zynq-zed.dts          |   1 +
>  arch/arm/dts/zynq-zybo.dts         |   1 +
>  arch/arm/dts/zynqmp-ep108.dts      | 164 ++++++++++++++++
>  arch/arm/dts/zynqmp.dtsi           | 385 +++++++++++++++++++++++++++++++++++++
>  arch/arm/mach-zynq/spl.c           |  12 +-
>  arch/arm/mach-zynq/u-boot-spl.lds  |  10 +-
>  configs/xilinx_zynqmp_ep_defconfig |   3 +-
>  configs/zynq_microzed_defconfig    |   2 +-
>  configs/zynq_picozed_defconfig     |   2 +-
>  configs/zynq_zc702_defconfig       |   2 +-
>  configs/zynq_zc706_defconfig       |   2 +-
>  configs/zynq_zc70x_defconfig       |   2 +-
>  configs/zynq_zc770_xm010_defconfig |   2 +-
>  configs/zynq_zc770_xm011_defconfig |   2 +-
>  configs/zynq_zc770_xm012_defconfig |   2 +-
>  configs/zynq_zc770_xm013_defconfig |   2 +-
>  configs/zynq_zed_defconfig         |   2 +-
>  configs/zynq_zybo_defconfig        |   6 +-
>  drivers/serial/Kconfig             |   7 +
>  drivers/serial/serial-uclass.c     |  30 ++-
>  drivers/serial/serial_zynq.c       | 203 ++++++++++---------
>  include/asm-generic/sections.h     |   1 +
>  include/configs/xilinx_zynqmp.h    |   4 +-
>  include/configs/xilinx_zynqmp_ep.h |   1 -
>  include/configs/zynq-common.h      |   6 +-
>  include/configs/zynq_microzed.h    |   1 -
>  include/configs/zynq_picozed.h     |   1 -
>  include/configs/zynq_zc70x.h       |   1 -
>  include/configs/zynq_zc770.h       |   6 -
>  include/configs/zynq_zed.h         |   1 -
>  include/configs/zynq_zybo.h        |   1 -
>  include/fdtdec.h                   |  11 +-
>  lib/fdtdec.c                       |  22 ++-
>  lib/libfdt/fdt_region.c            |   2 +-
>  scripts/Makefile.spl               |   2 +
>  tools/fdtgrep.c                    |  32 +--
>  48 files changed, 796 insertions(+), 174 deletions(-)
>  create mode 100644 arch/arm/dts/zynqmp-ep108.dts
>  create mode 100644 arch/arm/dts/zynqmp.dtsi
> 

I am happy to take this series via zynq ARM tree.
Or do you want to take fdt part through your tree or all things via your
tree?

Thanks,
Michal

-- 
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20151027/18406379/attachment.sig>

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

* [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model
  2015-10-27 15:26 ` [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert " Michal Simek
@ 2015-10-27 17:37   ` Simon Glass
  0 siblings, 0 replies; 18+ messages in thread
From: Simon Glass @ 2015-10-27 17:37 UTC (permalink / raw)
  To: u-boot

Hi Michal,

On Oct 27, 2015 08:27, "Michal Simek" <monstr@monstr.eu> wrote:
>
> Hi Simon,
>
> On 10/18/2015 03:41 AM, Simon Glass wrote:
> > This series updates the Zynq serial driver to use driver model. Along
the
> > way several problems are fixed:
> >
> > - Support for /chosen/stdout-path using an alias
> > - Fix to fdtgrep which is currently breaking alias building
> > - Avoid building u-boot-spl-dtb.bin when it is not requested
> > - Deal with boards which have BSS in SDRAM
> >
> > For zynq this series makes a few changes:
> > - Use the new SPL init procedure, which just involves a few tweaks for
zynq
> > - Add debug UART support
> > - Move to using a separate device tree instead of embedded
> >
> > Only zybo has been tested. Testing on other zynq boards is welcome.
They are
> > all set up roughly the same so I expect only minor problems.
> >
> > This serial includes Michal's zynqmp device tree patch.
> >
> > Changes in v2:
> > - Extend list of compatible strings with cadence compatible string.
> >
> > Michal Simek (1):
> >   ARM: zynqmp: Enable DM and OF binding
> >
> > Simon Glass (13):
> >   fdt: Add a function to look up a /chosen property
> >   fdt: Correct handling of alias regions
> >   fdtgrep: Simplify the alias generation code
> >   dm: serial: Deal with stdout-path with an alias
> >   dm: spl: Generate u-boot-spl-dtb.bin only when enabled
> >   dm: spl: Support device tree when BSS is in a different section
> >   arm: zynq: Use separate device tree instead of embedded
> >   arm: zynq: Drop unnecessary code in SPL board_init_f()
> >   arm: zynq: Support the debug UART
> >   dm: arm: zynq: Enable device tree control in SPL
> >   arm: zynq: dts: Add U-Boot device tree additions
> >   arm: zynq: serial: Drop non-device-tree serial driver portions
> >   arm: zynq: Move serial driver to driver model
> >
> >  Kconfig                            |  10 +
> >  arch/arm/Kconfig                   |   7 +
> >  arch/arm/dts/Makefile              |   2 +-
> >  arch/arm/dts/zynq-7000.dtsi        |   1 +
> >  arch/arm/dts/zynq-microzed.dts     |   5 +
> >  arch/arm/dts/zynq-picozed.dts      |   5 +
> >  arch/arm/dts/zynq-zc702.dts        |   1 +
> >  arch/arm/dts/zynq-zc706.dts        |   1 +
> >  arch/arm/dts/zynq-zc770-xm010.dts  |   1 +
> >  arch/arm/dts/zynq-zc770-xm011.dts  |   1 +
> >  arch/arm/dts/zynq-zc770-xm012.dts  |   1 +
> >  arch/arm/dts/zynq-zc770-xm013.dts  |   1 +
> >  arch/arm/dts/zynq-zed.dts          |   1 +
> >  arch/arm/dts/zynq-zybo.dts         |   1 +
> >  arch/arm/dts/zynqmp-ep108.dts      | 164 ++++++++++++++++
> >  arch/arm/dts/zynqmp.dtsi           | 385
+++++++++++++++++++++++++++++++++++++
> >  arch/arm/mach-zynq/spl.c           |  12 +-
> >  arch/arm/mach-zynq/u-boot-spl.lds  |  10 +-
> >  configs/xilinx_zynqmp_ep_defconfig |   3 +-
> >  configs/zynq_microzed_defconfig    |   2 +-
> >  configs/zynq_picozed_defconfig     |   2 +-
> >  configs/zynq_zc702_defconfig       |   2 +-
> >  configs/zynq_zc706_defconfig       |   2 +-
> >  configs/zynq_zc70x_defconfig       |   2 +-
> >  configs/zynq_zc770_xm010_defconfig |   2 +-
> >  configs/zynq_zc770_xm011_defconfig |   2 +-
> >  configs/zynq_zc770_xm012_defconfig |   2 +-
> >  configs/zynq_zc770_xm013_defconfig |   2 +-
> >  configs/zynq_zed_defconfig         |   2 +-
> >  configs/zynq_zybo_defconfig        |   6 +-
> >  drivers/serial/Kconfig             |   7 +
> >  drivers/serial/serial-uclass.c     |  30 ++-
> >  drivers/serial/serial_zynq.c       | 203 ++++++++++---------
> >  include/asm-generic/sections.h     |   1 +
> >  include/configs/xilinx_zynqmp.h    |   4 +-
> >  include/configs/xilinx_zynqmp_ep.h |   1 -
> >  include/configs/zynq-common.h      |   6 +-
> >  include/configs/zynq_microzed.h    |   1 -
> >  include/configs/zynq_picozed.h     |   1 -
> >  include/configs/zynq_zc70x.h       |   1 -
> >  include/configs/zynq_zc770.h       |   6 -
> >  include/configs/zynq_zed.h         |   1 -
> >  include/configs/zynq_zybo.h        |   1 -
> >  include/fdtdec.h                   |  11 +-
> >  lib/fdtdec.c                       |  22 ++-
> >  lib/libfdt/fdt_region.c            |   2 +-
> >  scripts/Makefile.spl               |   2 +
> >  tools/fdtgrep.c                    |  32 +--
> >  48 files changed, 796 insertions(+), 174 deletions(-)
> >  create mode 100644 arch/arm/dts/zynqmp-ep108.dts
> >  create mode 100644 arch/arm/dts/zynqmp.dtsi
> >
>
> I am happy to take this series via zynq ARM tree.

Please go ahead.

> Or do you want to take fdt part through your tree or all things via your
> tree?
>
> Thanks,
> Michal
>
> --
> Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
> w: www.monstr.eu p: +42-0-721842854
> Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
> Maintainer of Linux kernel - Xilinx Zynq ARM architecture
> Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform
>
>

Regards,
Simon

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

* [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model
  2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
                   ` (14 preceding siblings ...)
  2015-10-27 15:26 ` [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert " Michal Simek
@ 2015-10-30 13:29 ` Michal Simek
  15 siblings, 0 replies; 18+ messages in thread
From: Michal Simek @ 2015-10-30 13:29 UTC (permalink / raw)
  To: u-boot

On 10/18/2015 03:41 AM, Simon Glass wrote:
> This series updates the Zynq serial driver to use driver model. Along the
> way several problems are fixed:
> 
> - Support for /chosen/stdout-path using an alias
> - Fix to fdtgrep which is currently breaking alias building
> - Avoid building u-boot-spl-dtb.bin when it is not requested
> - Deal with boards which have BSS in SDRAM
> 
> For zynq this series makes a few changes:
> - Use the new SPL init procedure, which just involves a few tweaks for zynq
> - Add debug UART support
> - Move to using a separate device tree instead of embedded
> 
> Only zybo has been tested. Testing on other zynq boards is welcome. They are
> all set up roughly the same so I expect only minor problems.
> 
> This serial includes Michal's zynqmp device tree patch.
> 
> Changes in v2:
> - Extend list of compatible strings with cadence compatible string.
> 
> Michal Simek (1):
>   ARM: zynqmp: Enable DM and OF binding
> 
> Simon Glass (13):
>   fdt: Add a function to look up a /chosen property
>   fdt: Correct handling of alias regions
>   fdtgrep: Simplify the alias generation code
>   dm: serial: Deal with stdout-path with an alias
>   dm: spl: Generate u-boot-spl-dtb.bin only when enabled
>   dm: spl: Support device tree when BSS is in a different section
>   arm: zynq: Use separate device tree instead of embedded
>   arm: zynq: Drop unnecessary code in SPL board_init_f()
>   arm: zynq: Support the debug UART
>   dm: arm: zynq: Enable device tree control in SPL
>   arm: zynq: dts: Add U-Boot device tree additions
>   arm: zynq: serial: Drop non-device-tree serial driver portions
>   arm: zynq: Move serial driver to driver model
> 
>  Kconfig                            |  10 +
>  arch/arm/Kconfig                   |   7 +
>  arch/arm/dts/Makefile              |   2 +-
>  arch/arm/dts/zynq-7000.dtsi        |   1 +
>  arch/arm/dts/zynq-microzed.dts     |   5 +
>  arch/arm/dts/zynq-picozed.dts      |   5 +
>  arch/arm/dts/zynq-zc702.dts        |   1 +
>  arch/arm/dts/zynq-zc706.dts        |   1 +
>  arch/arm/dts/zynq-zc770-xm010.dts  |   1 +
>  arch/arm/dts/zynq-zc770-xm011.dts  |   1 +
>  arch/arm/dts/zynq-zc770-xm012.dts  |   1 +
>  arch/arm/dts/zynq-zc770-xm013.dts  |   1 +
>  arch/arm/dts/zynq-zed.dts          |   1 +
>  arch/arm/dts/zynq-zybo.dts         |   1 +
>  arch/arm/dts/zynqmp-ep108.dts      | 164 ++++++++++++++++
>  arch/arm/dts/zynqmp.dtsi           | 385 +++++++++++++++++++++++++++++++++++++
>  arch/arm/mach-zynq/spl.c           |  12 +-
>  arch/arm/mach-zynq/u-boot-spl.lds  |  10 +-
>  configs/xilinx_zynqmp_ep_defconfig |   3 +-
>  configs/zynq_microzed_defconfig    |   2 +-
>  configs/zynq_picozed_defconfig     |   2 +-
>  configs/zynq_zc702_defconfig       |   2 +-
>  configs/zynq_zc706_defconfig       |   2 +-
>  configs/zynq_zc70x_defconfig       |   2 +-
>  configs/zynq_zc770_xm010_defconfig |   2 +-
>  configs/zynq_zc770_xm011_defconfig |   2 +-
>  configs/zynq_zc770_xm012_defconfig |   2 +-
>  configs/zynq_zc770_xm013_defconfig |   2 +-
>  configs/zynq_zed_defconfig         |   2 +-
>  configs/zynq_zybo_defconfig        |   6 +-
>  drivers/serial/Kconfig             |   7 +
>  drivers/serial/serial-uclass.c     |  30 ++-
>  drivers/serial/serial_zynq.c       | 203 ++++++++++---------
>  include/asm-generic/sections.h     |   1 +
>  include/configs/xilinx_zynqmp.h    |   4 +-
>  include/configs/xilinx_zynqmp_ep.h |   1 -
>  include/configs/zynq-common.h      |   6 +-
>  include/configs/zynq_microzed.h    |   1 -
>  include/configs/zynq_picozed.h     |   1 -
>  include/configs/zynq_zc70x.h       |   1 -
>  include/configs/zynq_zc770.h       |   6 -
>  include/configs/zynq_zed.h         |   1 -
>  include/configs/zynq_zybo.h        |   1 -
>  include/fdtdec.h                   |  11 +-
>  lib/fdtdec.c                       |  22 ++-
>  lib/libfdt/fdt_region.c            |   2 +-
>  scripts/Makefile.spl               |   2 +
>  tools/fdtgrep.c                    |  32 +--
>  48 files changed, 796 insertions(+), 174 deletions(-)
>  create mode 100644 arch/arm/dts/zynqmp-ep108.dts
>  create mode 100644 arch/arm/dts/zynqmp.dtsi
> 

Applied all.

Thanks,
Michal

-- 
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20151030/4bb2a2af/attachment.sig>

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

end of thread, other threads:[~2015-10-30 13:29 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-18  1:41 [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert serial driver to driver model Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 01/14] fdt: Add a function to look up a /chosen property Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 02/14] fdt: Correct handling of alias regions Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 03/14] fdtgrep: Simplify the alias generation code Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 04/14] dm: serial: Deal with stdout-path with an alias Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 05/14] dm: spl: Generate u-boot-spl-dtb.bin only when enabled Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 06/14] dm: spl: Support device tree when BSS is in a different section Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 07/14] arm: zynq: Use separate device tree instead of embedded Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 08/14] arm: zynq: Drop unnecessary code in SPL board_init_f() Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 09/14] arm: zynq: Support the debug UART Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 10/14] dm: arm: zynq: Enable device tree control in SPL Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 11/14] arm: zynq: dts: Add U-Boot device tree additions Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 12/14] ARM: zynqmp: Enable DM and OF binding Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 13/14] arm: zynq: serial: Drop non-device-tree serial driver portions Simon Glass
2015-10-18  1:41 ` [U-Boot] [PATCH v2 14/14] arm: zynq: Move serial driver to driver model Simon Glass
2015-10-27 15:26 ` [U-Boot] [PATCH v2 00/14] dm: arm: zynq: Convert " Michal Simek
2015-10-27 17:37   ` Simon Glass
2015-10-30 13:29 ` Michal Simek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox