summary refs log tree commit diff
path: root/pkgs/misc/uboot
diff options
context:
space:
mode:
authorLluís Batlle i Rossell <viric@vicerveza.homeunix.net>2010-10-07 21:21:31 +0000
committerLluís Batlle i Rossell <viric@vicerveza.homeunix.net>2010-10-07 21:21:31 +0000
commitfca582bff0ab8887835ca10495620d0ac15ab10a (patch)
tree0934656b725b9a5da0acb8025f3a9ceab2e63d90 /pkgs/misc/uboot
parent2291f661b03f29fd59549165721a1426e5d04264 (diff)
parent89a3dc9adac5aa195ec9334c2f7e255e02388157 (diff)
downloadnixpkgs-fca582bff0ab8887835ca10495620d0ac15ab10a.tar
nixpkgs-fca582bff0ab8887835ca10495620d0ac15ab10a.tar.gz
nixpkgs-fca582bff0ab8887835ca10495620d0ac15ab10a.tar.bz2
nixpkgs-fca582bff0ab8887835ca10495620d0ac15ab10a.tar.lz
nixpkgs-fca582bff0ab8887835ca10495620d0ac15ab10a.tar.xz
nixpkgs-fca582bff0ab8887835ca10495620d0ac15ab10a.tar.zst
nixpkgs-fca582bff0ab8887835ca10495620d0ac15ab10a.zip
Updating from trunk. I had to resolve the pcre and some stdenv2 in all-packages
svn path=/nixpkgs/branches/stdenv-updates/; revision=24155
Diffstat (limited to 'pkgs/misc/uboot')
-rw-r--r--pkgs/misc/uboot/guruplug-file-systems.patch48
-rw-r--r--pkgs/misc/uboot/guruplug-usb-msd-multi-lun.patch106
-rw-r--r--pkgs/misc/uboot/guruplug.nix54
3 files changed, 208 insertions, 0 deletions
diff --git a/pkgs/misc/uboot/guruplug-file-systems.patch b/pkgs/misc/uboot/guruplug-file-systems.patch
new file mode 100644
index 00000000000..30dc1994303
--- /dev/null
+++ b/pkgs/misc/uboot/guruplug-file-systems.patch
@@ -0,0 +1,48 @@
+Add support for the various file systems as found in `sheevaplug.h'.
+As for the SheevaPlug, the increase in size means that the environment
+must be pushed further away.
+
+In addition, increase the malloc area size to allow compilation of UbiFS.
+
+--- u-boot/include/configs/guruplug.h	1970-01-01 01:00:01.000000000 +0100
++++ u-boot/include/configs/guruplug.h	2010-09-29 18:59:52.000000000 +0200
+@@ -123,8 +123,8 @@
+  * it has to be rounded to sector size
+  */
+ #define CONFIG_ENV_SIZE			0x20000	/* 128k */
+-#define CONFIG_ENV_ADDR			0x40000
+-#define CONFIG_ENV_OFFSET		0x40000	/* env starts here */
++#define CONFIG_ENV_ADDR			0x60000
++#define CONFIG_ENV_OFFSET		0x60000	/* env starts here */
+ 
+ /*
+  * Default environment variables
+@@ -145,7 +145,7 @@
+ /*
+  * Size of malloc() pool
+  */
+-#define CONFIG_SYS_MALLOC_LEN	(1024 * 128) /* 128kB for malloc() */
++#define CONFIG_SYS_MALLOC_LEN	(1024 * 1024) /* 1 MiB for malloc() */
+ /* size in bytes reserved for initial data */
+ #define CONFIG_SYS_GBL_DATA_SIZE	128
+ 
+@@ -195,4 +195,18 @@
+ 
+ #define CONFIG_SYS_ALT_MEMTEST
+ 
++/*
++ * File system
++ */
++#define CONFIG_CMD_EXT2
++#define CONFIG_CMD_FAT
++#define CONFIG_CMD_JFFS2
++#define CONFIG_CMD_UBI
++#define CONFIG_CMD_UBIFS
++#define CONFIG_RBTREE
++#define CONFIG_MTD_DEVICE               /* needed for mtdparts commands */
++#define CONFIG_MTD_PARTITIONS
++#define CONFIG_CMD_MTDPARTS
++#define CONFIG_LZO
++
+ #endif /* _CONFIG_GURUPLUG_H */
+
diff --git a/pkgs/misc/uboot/guruplug-usb-msd-multi-lun.patch b/pkgs/misc/uboot/guruplug-usb-msd-multi-lun.patch
new file mode 100644
index 00000000000..4f32dd89031
--- /dev/null
+++ b/pkgs/misc/uboot/guruplug-usb-msd-multi-lun.patch
@@ -0,0 +1,106 @@
+The GuruPlug's microSD card reader is a USB mass storage device that
+has two logical units (LUNs), i.e., two "SCSI disks".  This patch
+adds multi-LUN support to the USB MSD driver.
+
+See the thread at <http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/85425>.
+
+--- u-boot/common/usb_storage.c	1970-01-01 01:00:01.000000000 +0100
++++ u-boot/common/usb_storage.c	2010-10-02 00:38:15.000000000 +0200
+@@ -204,6 +204,22 @@ int usb_stor_info(void)
+ 	return 1;
+ }
+ 
++static unsigned int usb_get_max_lun(struct us_data *us)
++{
++	int len;
++	unsigned char result;
++	len = usb_control_msg(us->pusb_dev,
++			      usb_rcvctrlpipe(us->pusb_dev, 0),
++			      US_BBB_GET_MAX_LUN,
++			      USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
++			      0, us->ifnum,
++			      &result, sizeof(result),
++			      USB_CNTL_TIMEOUT * 5);
++	USB_STOR_PRINTF("Get Max LUN -> len = %i, result = %i\n",
++			len, (int) result);
++	return (len > 0) ? result : 0;
++}
++
+ /*******************************************************************************
+  * scan the usb and reports device info
+  * to the user if mode = 1
+@@ -241,13 +257,21 @@ int usb_stor_scan(int mode)
+ 			break; /* no more devices avaiable */
+ 
+ 		if (usb_storage_probe(dev, 0, &usb_stor[usb_max_devs])) {
+-			/* ok, it is a storage devices
+-			 * get info and fill it in
+-			 */
+-			if (usb_stor_get_info(dev, &usb_stor[usb_max_devs],
+-						&usb_dev_desc[usb_max_devs]) == 1)
++			/* OK, it's a storage device.  Iterate over its LUNs
++			 * and populate `usb_dev_desc'.  */
++			int lun, max_lun, start = usb_max_devs;
++
++			max_lun = usb_get_max_lun(&usb_stor[usb_max_devs]);
++			for (lun = 0;
++			     lun <= max_lun && usb_max_devs < USB_MAX_STOR_DEV;
++			     lun++) {
++				usb_dev_desc[usb_max_devs].lun = lun;
++				if (usb_stor_get_info(dev, &usb_stor[start],
++						      &usb_dev_desc[usb_max_devs]) == 1) {
+ 				usb_max_devs++;
+ 		}
++			}
++		}
+ 		/* if storage device */
+ 		if (usb_max_devs == USB_MAX_STOR_DEV) {
+ 			printf("max USB Storage Device reached: %d stopping\n",
+@@ -882,6 +906,7 @@ static int usb_inquiry(ccb *srb, struct 
+ 	do {
+ 		memset(&srb->cmd[0], 0, 12);
+ 		srb->cmd[0] = SCSI_INQUIRY;
++		srb->cmd[1] = srb->lun << 5;
+ 		srb->cmd[4] = 36;
+ 		srb->datalen = 36;
+ 		srb->cmdlen = 12;
+@@ -905,6 +930,7 @@ static int usb_request_sense(ccb *srb, s
+ 	ptr = (char *)srb->pdata;
+ 	memset(&srb->cmd[0], 0, 12);
+ 	srb->cmd[0] = SCSI_REQ_SENSE;
++	srb->cmd[1] = srb->lun << 5;
+ 	srb->cmd[4] = 18;
+ 	srb->datalen = 18;
+ 	srb->pdata = &srb->sense_buf[0];
+@@ -924,6 +950,7 @@ static int usb_test_unit_ready(ccb *srb,
+ 	do {
+ 		memset(&srb->cmd[0], 0, 12);
+ 		srb->cmd[0] = SCSI_TST_U_RDY;
++		srb->cmd[1] = srb->lun << 5;
+ 		srb->datalen = 0;
+ 		srb->cmdlen = 12;
+ 		if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD)
+@@ -943,6 +970,7 @@ static int usb_read_capacity(ccb *srb, s
+ 	do {
+ 		memset(&srb->cmd[0], 0, 12);
+ 		srb->cmd[0] = SCSI_RD_CAPAC;
++		srb->cmd[1] = srb->lun << 5;
+ 		srb->datalen = 8;
+ 		srb->cmdlen = 12;
+ 		if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD)
+@@ -957,6 +985,7 @@ static int usb_read_10(ccb *srb, struct 
+ {
+ 	memset(&srb->cmd[0], 0, 12);
+ 	srb->cmd[0] = SCSI_READ10;
++	srb->cmd[1] = srb->lun << 5;
+ 	srb->cmd[2] = ((unsigned char) (start >> 24)) & 0xff;
+ 	srb->cmd[3] = ((unsigned char) (start >> 16)) & 0xff;
+ 	srb->cmd[4] = ((unsigned char) (start >> 8)) & 0xff;
+@@ -973,6 +1002,7 @@ static int usb_write_10(ccb *srb, struct
+ {
+ 	memset(&srb->cmd[0], 0, 12);
+ 	srb->cmd[0] = SCSI_WRITE10;
++	srb->cmd[1] = srb->lun << 5;
+ 	srb->cmd[2] = ((unsigned char) (start >> 24)) & 0xff;
+ 	srb->cmd[3] = ((unsigned char) (start >> 16)) & 0xff;
+ 	srb->cmd[4] = ((unsigned char) (start >> 8)) & 0xff;
diff --git a/pkgs/misc/uboot/guruplug.nix b/pkgs/misc/uboot/guruplug.nix
new file mode 100644
index 00000000000..f8048bbe0f4
--- /dev/null
+++ b/pkgs/misc/uboot/guruplug.nix
@@ -0,0 +1,54 @@
+{stdenv, fetchgit, unzip}:
+
+# Marvell's branch of U-Boot for the GuruPlug.
+
+let
+  # Aug 2010 revision of the `testing' branch of Marvell's U-Boot repository.
+  # See
+  # <http://www.openplug.org/plugwiki/index.php/Re-building_the_kernel_and_U-Boot>
+  # for details.
+  rev = "f106056095049c2c748c2a2797e5353295240e04";
+in
+stdenv.mkDerivation {
+  name = "uboot-guruplug-0.0pre${rev}";
+
+  src = fetchgit {
+    url = "git://git.denx.de/u-boot-marvell.git";
+    sha256 = "18gwyj16vml7aja9cyan51jwfcysy4cs062z7wmgdc0l9bha6iw7";
+    inherit rev;
+  };
+
+  patches =
+    [ ./guruplug-file-systems.patch ./guruplug-usb-msd-multi-lun.patch ];
+
+  enableParallelBuilding = true;
+
+  # Remove the cross compiler prefix.
+  configurePhase = ''
+    make mrproper
+    make guruplug_config
+    sed -i /CROSS_COMPILE/d include/config.mk
+  '';
+
+  buildPhase = ''
+    unset src
+    if test -z "$crossConfig"; then
+        make all u-boot.kwb
+    else
+        make all u-boot.kwb ARCH=arm CROSS_COMPILE=$crossConfig-
+    fi
+  '';
+
+  buildNativeInputs = [ unzip ];
+
+  dontStrip = true;
+  NIX_STRIP_DEBUG = false;
+
+  installPhase = ''
+    ensureDir $out
+    cp -v u-boot u-boot.{kwb,map} $out
+
+    ensureDir $out/bin
+    cp tools/{envcrc,mkimage} $out/bin
+  '';
+}