mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 0/2] Summary of last patches submitted
@ 2013-02-11 23:04 Vicente Bergas
  2013-02-11 23:04 ` [PATCH 1/2] ArchosG9: solve regression in second stage lowlevel init Vicente Bergas
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Vicente Bergas @ 2013-02-11 23:04 UTC (permalink / raw)
  To: barebox; +Cc: Vicente Bergas

Here are the last two patches I've submitted.
The first is a straightforward solution to a regression.
The second was first intended to provide devicetree support for booting an
omap4 based tablet. I've achieved booting it successfully, but after several
tries at bringing the mmc controller working I've realised that the Linux
kernel still has no support for devicetree on omap4 (it's almost there, but it
lacks dma configuration).
For more information see:
http://omappedia.org/wiki/Device_Tree#Drivers_.2F_Features_migration_status
So the second patch has been stripped and only provides generic support,
nothing related to the tablet.

The patches also include the changes reflecting the received feedback, thanks!

Vicente Bergas (2):
  ArchosG9: solve regression in second stage lowlevel init
  DeviceTree: add support for initrd in the DT

 arch/arm/boards/archosg9/lowlevel.c |  7 ++--
 arch/arm/lib/armlinux.c             |  2 ++
 common/oftree.c                     | 66 +++++++++++++++++++++++++++++++++++++
 include/of.h                        |  8 +++++
 4 files changed, 81 insertions(+), 2 deletions(-)

-- 
1.8.1.3


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 1/2] ArchosG9: solve regression in second stage lowlevel init
  2013-02-11 23:04 [PATCH 0/2] Summary of last patches submitted Vicente Bergas
@ 2013-02-11 23:04 ` Vicente Bergas
  2013-02-11 23:04 ` [PATCH 2/2] DeviceTree: add support for initrd in the DT Vicente Bergas
  2013-02-14 12:10 ` [PATCH 0/2] Summary of last patches submitted Sascha Hauer
  2 siblings, 0 replies; 4+ messages in thread
From: Vicente Bergas @ 2013-02-11 23:04 UTC (permalink / raw)
  To: barebox; +Cc: Vicente Bergas

 On ArchosG9 the second stage low-level init was the fallback default.
 Now that the low-level init is forcibly enabled it has to be skipped
 when already executed from first stage.

Signed-off-by: Vicente Bergas <vicencb@gmail.com>
---
 arch/arm/boards/archosg9/lowlevel.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boards/archosg9/lowlevel.c b/arch/arm/boards/archosg9/lowlevel.c
index 552268f..0334693 100644
--- a/arch/arm/boards/archosg9/lowlevel.c
+++ b/arch/arm/boards/archosg9/lowlevel.c
@@ -63,15 +63,18 @@ static noinline void archosg9_init_lowlevel(void)
 	omap4_configure_usb_dpll(&usb);
 
 	omap4_ddr_init(&ddr_regs_400_mhz_2cs, &core);
-
-	barebox_arm_entry(0x80000000, SZ_1G, 0);
 }
 
 void __naked __bare_init barebox_arm_reset_vector(void)
 {
 	arm_cpu_lowlevel_init();
 
+	if (get_pc() > 0x80000000)
+		goto out;
+
 	arm_setup_stack(0x4030d000);
 
 	archosg9_init_lowlevel();
+out:
+	barebox_arm_entry(0x80000000, SZ_1G, 0);
 }
-- 
1.8.1.3


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 2/2] DeviceTree: add support for initrd in the DT
  2013-02-11 23:04 [PATCH 0/2] Summary of last patches submitted Vicente Bergas
  2013-02-11 23:04 ` [PATCH 1/2] ArchosG9: solve regression in second stage lowlevel init Vicente Bergas
@ 2013-02-11 23:04 ` Vicente Bergas
  2013-02-14 12:10 ` [PATCH 0/2] Summary of last patches submitted Sascha Hauer
  2 siblings, 0 replies; 4+ messages in thread
From: Vicente Bergas @ 2013-02-11 23:04 UTC (permalink / raw)
  To: barebox; +Cc: Vicente Bergas

Add the initrd start and end address to the DT, code comes from u-boot.

Signed-off-by: Vicente Bergas <vicencb@gmail.com>
---
 arch/arm/lib/armlinux.c |  2 ++
 common/oftree.c         | 66 +++++++++++++++++++++++++++++++++++++++++++++++++
 include/of.h            |  8 ++++++
 3 files changed, 76 insertions(+)

diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
index 40a63ea..4dd84ed 100644
--- a/arch/arm/lib/armlinux.c
+++ b/arch/arm/lib/armlinux.c
@@ -266,6 +266,8 @@ void start_linux(void *adr, int swap, unsigned long initrd_address,
 
 	if (oftree) {
 		printf("booting Linux kernel with devicetree\n");
+		fdt_initrd(oftree, initrd_address,
+			initrd_address + initrd_size, 1);
 		params = oftree;
 	} else {
 		setup_tags(initrd_address, initrd_size, swap);
diff --git a/common/oftree.c b/common/oftree.c
index 0df5209..6b20cdb 100644
--- a/common/oftree.c
+++ b/common/oftree.c
@@ -246,6 +246,72 @@ int fdt_get_path_or_create(struct fdt_header *fdt, const char *path)
 	return nodeoffset;
 }
 
+int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end, int force)
+{
+	int nodeoffset;
+	int err, j, total;
+	u32 tmp;
+	const char *path;
+	uint64_t addr, size;
+
+	/* Find the "chosen" node */
+	nodeoffset = fdt_path_offset(fdt, "/chosen");
+
+	/* If there is no "chosen" node in the blob return */
+	if (nodeoffset < 0) {
+		printf("fdt_initrd: %s\n", fdt_strerror(nodeoffset));
+		return nodeoffset;
+	}
+
+	/* just return if initrd_start/end aren't valid */
+	if ((initrd_start == 0) || (initrd_end == 0))
+		return 0;
+
+	total = fdt_num_mem_rsv(fdt);
+
+	/*
+	 * Look for an existing entry and update it. If we don't find
+	 * the entry, we will j be the next available slot.
+	 */
+	for (j = 0; j < total; j++) {
+		err = fdt_get_mem_rsv(fdt, j, &addr, &size);
+		if (addr == initrd_start) {
+			fdt_del_mem_rsv(fdt, j);
+			break;
+		}
+	}
+
+	err = fdt_add_mem_rsv(fdt, initrd_start, initrd_end - initrd_start);
+	if (err < 0) {
+		printf("fdt_initrd: %s\n", fdt_strerror(err));
+		return err;
+	}
+
+	path = fdt_getprop(fdt, nodeoffset, "linux,initrd-start", NULL);
+	if (!path || force) {
+		tmp = __cpu_to_be32(initrd_start);
+		err = fdt_setprop(fdt, nodeoffset,
+			"linux,initrd-start", &tmp, sizeof(tmp));
+		if (err < 0) {
+			printf("WARNING: "
+				"could not set linux,initrd-start %s.\n",
+				fdt_strerror(err));
+			return err;
+		}
+		tmp = __cpu_to_be32(initrd_end);
+		err = fdt_setprop(fdt, nodeoffset,
+			"linux,initrd-end", &tmp, sizeof(tmp));
+		if (err < 0) {
+			printf("WARNING: could not set linux,initrd-end %s.\n",
+				fdt_strerror(err));
+
+			return err;
+		}
+	}
+
+	return 0;
+}
+
 static int of_fixup_bootargs(struct fdt_header *fdt)
 {
 	int nodeoffset;
diff --git a/include/of.h b/include/of.h
index d3a310f..d3aa982 100644
--- a/include/of.h
+++ b/include/of.h
@@ -18,6 +18,14 @@ void do_fixup_by_path(struct fdt_header *fdt, const char *path, const char *prop
 void do_fixup_by_path_u32(struct fdt_header *fdt, const char *path, const char *prop,
 			  u32 val, int create);
 int fdt_get_path_or_create(struct fdt_header *fdt, const char *path);
+#ifdef CONFIG_FDT
+int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end, int force);
+#else
+static inline int fdt_initrd(void *fdt, ulong start, ulong end, int force)
+{
+	return 0;
+}
+#endif
 
 #define OF_BAD_ADDR      ((u64)-1)
 
-- 
1.8.1.3


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 0/2] Summary of last patches submitted
  2013-02-11 23:04 [PATCH 0/2] Summary of last patches submitted Vicente Bergas
  2013-02-11 23:04 ` [PATCH 1/2] ArchosG9: solve regression in second stage lowlevel init Vicente Bergas
  2013-02-11 23:04 ` [PATCH 2/2] DeviceTree: add support for initrd in the DT Vicente Bergas
@ 2013-02-14 12:10 ` Sascha Hauer
  2 siblings, 0 replies; 4+ messages in thread
From: Sascha Hauer @ 2013-02-14 12:10 UTC (permalink / raw)
  To: Vicente Bergas; +Cc: barebox

On Tue, Feb 12, 2013 at 12:04:57AM +0100, Vicente Bergas wrote:
> Here are the last two patches I've submitted.
> The first is a straightforward solution to a regression.
> The second was first intended to provide devicetree support for booting an
> omap4 based tablet. I've achieved booting it successfully, but after several
> tries at bringing the mmc controller working I've realised that the Linux
> kernel still has no support for devicetree on omap4 (it's almost there, but it
> lacks dma configuration).
> For more information see:
> http://omappedia.org/wiki/Device_Tree#Drivers_.2F_Features_migration_status
> So the second patch has been stripped and only provides generic support,
> nothing related to the tablet.
> 
> The patches also include the changes reflecting the received feedback, thanks!
> 
> Vicente Bergas (2):
>   ArchosG9: solve regression in second stage lowlevel init
>   DeviceTree: add support for initrd in the DT

Applied, thanks

Sascha

> 
>  arch/arm/boards/archosg9/lowlevel.c |  7 ++--
>  arch/arm/lib/armlinux.c             |  2 ++
>  common/oftree.c                     | 66 +++++++++++++++++++++++++++++++++++++
>  include/of.h                        |  8 +++++
>  4 files changed, 81 insertions(+), 2 deletions(-)
> 
> -- 
> 1.8.1.3
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

end of thread, other threads:[~2013-02-14 12:10 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-11 23:04 [PATCH 0/2] Summary of last patches submitted Vicente Bergas
2013-02-11 23:04 ` [PATCH 1/2] ArchosG9: solve regression in second stage lowlevel init Vicente Bergas
2013-02-11 23:04 ` [PATCH 2/2] DeviceTree: add support for initrd in the DT Vicente Bergas
2013-02-14 12:10 ` [PATCH 0/2] Summary of last patches submitted Sascha Hauer

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