mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] ARM: rpi: add SD card environment support
@ 2013-10-15 10:50 Sascha Hauer
  2013-10-15 11:36 ` Jean-Christophe PLAGNIOL-VILLARD
  2013-10-15 11:54 ` Andre Heider
  0 siblings, 2 replies; 6+ messages in thread
From: Sascha Hauer @ 2013-10-15 10:50 UTC (permalink / raw)
  To: barebox

Similar to the OMAP boards mount the SD card to /boot and expect
the environment as /boot/barebox.env

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/boards/raspberry-pi/rpi.c | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boards/raspberry-pi/rpi.c b/arch/arm/boards/raspberry-pi/rpi.c
index d4912cc..971a603 100644
--- a/arch/arm/boards/raspberry-pi/rpi.c
+++ b/arch/arm/boards/raspberry-pi/rpi.c
@@ -15,6 +15,9 @@
 
 #include <common.h>
 #include <init.h>
+#include <fs.h>
+#include <linux/stat.h>
+#include <envfs.h>
 #include <asm/armlinux.h>
 #include <generated/mach-types.h>
 
@@ -37,11 +40,37 @@ static int rpi_console_init(void)
 }
 console_initcall(rpi_console_init);
 
+static int rpi_env_init(void)
+{
+	struct stat s;
+	const char *diskdev = "/dev/disk0.0";
+	int ret;
+
+	device_detect_by_name("mci0");
+
+	ret = stat(diskdev, &s);
+	if (ret) {
+		printf("no %s. using default env\n", diskdev);
+		return 0;
+	}
+
+	mkdir("/boot", 0666);
+	ret = mount(diskdev, "fat", "/boot");
+	if (ret) {
+		printf("failed to mount %s\n", diskdev);
+		return 0;
+	}
+
+	default_environment_path = "/boot/barebox.env";
+
+	return 0;
+}
+
 static int rpi_devices_init(void)
 {
 	armlinux_set_architecture(MACH_TYPE_BCM2708);
 	armlinux_set_bootparams((void *)(0x00000100));
+	rpi_env_init();
 	return 0;
 }
-
-device_initcall(rpi_devices_init);
+late_initcall(rpi_devices_init);
-- 
1.8.4.rc3


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

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

* Re: [PATCH] ARM: rpi: add SD card environment support
  2013-10-15 10:50 [PATCH] ARM: rpi: add SD card environment support Sascha Hauer
@ 2013-10-15 11:36 ` Jean-Christophe PLAGNIOL-VILLARD
  2013-10-16  7:44   ` Sascha Hauer
  2013-10-15 11:54 ` Andre Heider
  1 sibling, 1 reply; 6+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2013-10-15 11:36 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On 12:50 Tue 15 Oct     , Sascha Hauer wrote:
> Similar to the OMAP boards mount the SD card to /boot and expect
> the environment as /boot/barebox.env
> 
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> ---
>  arch/arm/boards/raspberry-pi/rpi.c | 33 +++++++++++++++++++++++++++++++--
>  1 file changed, 31 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/boards/raspberry-pi/rpi.c b/arch/arm/boards/raspberry-pi/rpi.c
> index d4912cc..971a603 100644
> --- a/arch/arm/boards/raspberry-pi/rpi.c
> +++ b/arch/arm/boards/raspberry-pi/rpi.c
> @@ -15,6 +15,9 @@
>  
>  #include <common.h>
>  #include <init.h>
> +#include <fs.h>
> +#include <linux/stat.h>
> +#include <envfs.h>
>  #include <asm/armlinux.h>
>  #include <generated/mach-types.h>
>  
> @@ -37,11 +40,37 @@ static int rpi_console_init(void)
>  }
>  console_initcall(rpi_console_init);
>  
> +static int rpi_env_init(void)
> +{
> +	struct stat s;
> +	const char *diskdev = "/dev/disk0.0";
> +	int ret;
> +
> +	device_detect_by_name("mci0");
> +
> +	ret = stat(diskdev, &s);
> +	if (ret) {
> +		printf("no %s. using default env\n", diskdev);
> +		return 0;
> +	}
> +
> +	mkdir("/boot", 0666);
> +	ret = mount(diskdev, "fat", "/boot");
> +	if (ret) {
> +		printf("failed to mount %s\n", diskdev);
> +		return 0;
> +	}
> +
> +	default_environment_path = "/boot/barebox.env";
> +
> +	return 0;
> +}

can we drop all of this and do something like this

set_defaultenv and do not have custom code in the c duplicated everywhere?


> +
>  static int rpi_devices_init(void)
>  {
>  	armlinux_set_architecture(MACH_TYPE_BCM2708);
>  	armlinux_set_bootparams((void *)(0x00000100));
> +	rpi_env_init();
>  	return 0;
>  }
> -
> -device_initcall(rpi_devices_init);
> +late_initcall(rpi_devices_init);
> -- 
> 1.8.4.rc3
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox

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

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

* Re: [PATCH] ARM: rpi: add SD card environment support
  2013-10-15 10:50 [PATCH] ARM: rpi: add SD card environment support Sascha Hauer
  2013-10-15 11:36 ` Jean-Christophe PLAGNIOL-VILLARD
@ 2013-10-15 11:54 ` Andre Heider
  2013-10-15 12:53   ` Sascha Hauer
  1 sibling, 1 reply; 6+ messages in thread
From: Andre Heider @ 2013-10-15 11:54 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

Hi,

On Tue, Oct 15, 2013 at 12:50:14PM +0200, Sascha Hauer wrote:
> Similar to the OMAP boards mount the SD card to /boot and expect
> the environment as /boot/barebox.env
> 
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> ---
>  arch/arm/boards/raspberry-pi/rpi.c | 33 +++++++++++++++++++++++++++++++--
>  1 file changed, 31 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/boards/raspberry-pi/rpi.c b/arch/arm/boards/raspberry-pi/rpi.c
> index d4912cc..971a603 100644
> --- a/arch/arm/boards/raspberry-pi/rpi.c
> +++ b/arch/arm/boards/raspberry-pi/rpi.c
> @@ -15,6 +15,9 @@
>  
>  #include <common.h>
>  #include <init.h>
> +#include <fs.h>
> +#include <linux/stat.h>
> +#include <envfs.h>
>  #include <asm/armlinux.h>
>  #include <generated/mach-types.h>
>  
> @@ -37,11 +40,37 @@ static int rpi_console_init(void)
>  }
>  console_initcall(rpi_console_init);
>  
> +static int rpi_env_init(void)
> +{
> +	struct stat s;
> +	const char *diskdev = "/dev/disk0.0";
> +	int ret;
> +
> +	device_detect_by_name("mci0");
> +
> +	ret = stat(diskdev, &s);
> +	if (ret) {
> +		printf("no %s. using default env\n", diskdev);
> +		return 0;
> +	}
> +
> +	mkdir("/boot", 0666);
> +	ret = mount(diskdev, "fat", "/boot");
> +	if (ret) {
> +		printf("failed to mount %s\n", diskdev);
> +		return 0;
> +	}
> +
> +	default_environment_path = "/boot/barebox.env";
> +
> +	return 0;
> +}

I was solving the same thing just yesterday ;)

What I did was to create a env/init/automount script, what's the advantage of this approach?

Regards,
Andre

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

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

* Re: [PATCH] ARM: rpi: add SD card environment support
  2013-10-15 11:54 ` Andre Heider
@ 2013-10-15 12:53   ` Sascha Hauer
  2013-10-15 16:22     ` Andre Heider
  0 siblings, 1 reply; 6+ messages in thread
From: Sascha Hauer @ 2013-10-15 12:53 UTC (permalink / raw)
  To: Andre Heider; +Cc: barebox

On Tue, Oct 15, 2013 at 01:54:50PM +0200, Andre Heider wrote:
> Hi,
> 
> > +static int rpi_env_init(void)
> > +{
> > +	struct stat s;
> > +	const char *diskdev = "/dev/disk0.0";
> > +	int ret;
> > +
> > +	device_detect_by_name("mci0");
> > +
> > +	ret = stat(diskdev, &s);
> > +	if (ret) {
> > +		printf("no %s. using default env\n", diskdev);
> > +		return 0;
> > +	}
> > +
> > +	mkdir("/boot", 0666);
> > +	ret = mount(diskdev, "fat", "/boot");
> > +	if (ret) {
> > +		printf("failed to mount %s\n", diskdev);
> > +		return 0;
> > +	}
> > +
> > +	default_environment_path = "/boot/barebox.env";
> > +
> > +	return 0;
> > +}
> 
> I was solving the same thing just yesterday ;)
> 
> What I did was to create a env/init/automount script, what's the advantage of this approach?

This approach also sets default_environment_path to /boot/barebox.env so
that loadenv/saveenv works and barebox comes up with the saved
environment.

You could probably do similar with scripts doing something like:

automount -d /boot "detect mci0 && mount /dev/disk0.0 /boot"
loadenv -s /boot/barebox.env /env
/env/bin/init

However, I made the experience that in scripts proper error checking is
hard to archieve and therefore often skipped. Also with C Code a single
git commitish makes the system behaviour clear. When instead scripts are
used which might have been modified by a user, or which might come from
an older barebox version the situation gets much more complex.

I generally try to reduce the usage (or better: necessity) of scripts.
They pretend a high level of flexibility but this comes at the cost of
reduced consistency across different boards (or even different instances
of the same board)

Sascha

-- 
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] 6+ messages in thread

* Re: [PATCH] ARM: rpi: add SD card environment support
  2013-10-15 12:53   ` Sascha Hauer
@ 2013-10-15 16:22     ` Andre Heider
  0 siblings, 0 replies; 6+ messages in thread
From: Andre Heider @ 2013-10-15 16:22 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On Tue, Oct 15, 2013 at 02:53:12PM +0200, Sascha Hauer wrote:
> On Tue, Oct 15, 2013 at 01:54:50PM +0200, Andre Heider wrote:
> > Hi,
> > 
> > > +static int rpi_env_init(void)
> > > +{
> > > +	struct stat s;
> > > +	const char *diskdev = "/dev/disk0.0";
> > > +	int ret;
> > > +
> > > +	device_detect_by_name("mci0");
> > > +
> > > +	ret = stat(diskdev, &s);
> > > +	if (ret) {
> > > +		printf("no %s. using default env\n", diskdev);
> > > +		return 0;
> > > +	}
> > > +
> > > +	mkdir("/boot", 0666);
> > > +	ret = mount(diskdev, "fat", "/boot");
> > > +	if (ret) {
> > > +		printf("failed to mount %s\n", diskdev);
> > > +		return 0;
> > > +	}
> > > +
> > > +	default_environment_path = "/boot/barebox.env";
> > > +
> > > +	return 0;
> > > +}
> > 
> > I was solving the same thing just yesterday ;)
> > 
> > What I did was to create a env/init/automount script, what's the advantage of this approach?
> 
> This approach also sets default_environment_path to /boot/barebox.env so
> that loadenv/saveenv works and barebox comes up with the saved
> environment.
> 
> You could probably do similar with scripts doing something like:
> 
> automount -d /boot "detect mci0 && mount /dev/disk0.0 /boot"
> loadenv -s /boot/barebox.env /env
> /env/bin/init
> 
> However, I made the experience that in scripts proper error checking is
> hard to archieve and therefore often skipped. Also with C Code a single
> git commitish makes the system behaviour clear. When instead scripts are
> used which might have been modified by a user, or which might come from
> an older barebox version the situation gets much more complex.
> 
> I generally try to reduce the usage (or better: necessity) of scripts.
> They pretend a high level of flexibility but this comes at the cost of
> reduced consistency across different boards (or even different instances
> of the same board)
> 

Alright, thanks!

Regards,
Andre

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

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

* Re: [PATCH] ARM: rpi: add SD card environment support
  2013-10-15 11:36 ` Jean-Christophe PLAGNIOL-VILLARD
@ 2013-10-16  7:44   ` Sascha Hauer
  0 siblings, 0 replies; 6+ messages in thread
From: Sascha Hauer @ 2013-10-16  7:44 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

On Tue, Oct 15, 2013 at 01:36:30PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 12:50 Tue 15 Oct     , Sascha Hauer wrote:
> > +static int rpi_env_init(void)
> > +{
> > +	struct stat s;
> > +	const char *diskdev = "/dev/disk0.0";
> > +	int ret;
> > +
> > +	device_detect_by_name("mci0");
> > +
> > +	ret = stat(diskdev, &s);
> > +	if (ret) {
> > +		printf("no %s. using default env\n", diskdev);
> > +		return 0;
> > +	}
> > +
> > +	mkdir("/boot", 0666);
> > +	ret = mount(diskdev, "fat", "/boot");
> > +	if (ret) {
> > +		printf("failed to mount %s\n", diskdev);
> > +		return 0;
> > +	}
> > +
> > +	default_environment_path = "/boot/barebox.env";
> > +
> > +	return 0;
> > +}
> 
> can we drop all of this and do something like this
> 
> set_defaultenv and do not have custom code in the c duplicated everywhere?

That's probably a good idea. Right now it's just not clear to me how
such a code would look like. Omap does something similar to the above,
but additionally checks whether the device to mount is actually the
device the board started from.

Sascha

-- 
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] 6+ messages in thread

end of thread, other threads:[~2013-10-16  7:45 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-15 10:50 [PATCH] ARM: rpi: add SD card environment support Sascha Hauer
2013-10-15 11:36 ` Jean-Christophe PLAGNIOL-VILLARD
2013-10-16  7:44   ` Sascha Hauer
2013-10-15 11:54 ` Andre Heider
2013-10-15 12:53   ` Sascha Hauer
2013-10-15 16:22     ` Andre Heider

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