Add U-Boot for the GuruPlug.
svn path=/nixpkgs/trunk/; revision=24060
This commit is contained in:
parent
05b8ee73c4
commit
bcba3664d9
34
pkgs/misc/uboot/guruplug-file-systems.patch
Normal file
34
pkgs/misc/uboot/guruplug-file-systems.patch
Normal file
@ -0,0 +1,34 @@
|
||||
Add support for the various file systems as found in `sheevaplug.h'.
|
||||
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
|
||||
@@ -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 */
|
||||
|
106
pkgs/misc/uboot/guruplug-usb-msd-multi-lun.patch
Normal file
106
pkgs/misc/uboot/guruplug-usb-msd-multi-lun.patch
Normal file
@ -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;
|
54
pkgs/misc/uboot/guruplug.nix
Normal file
54
pkgs/misc/uboot/guruplug.nix
Normal file
@ -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
|
||||
'';
|
||||
}
|
@ -4938,6 +4938,8 @@ let
|
||||
|
||||
ubootSheevaplug = callPackage ../misc/uboot/sheevaplug.nix { };
|
||||
|
||||
ubootGuruplug = callPackage ../misc/uboot/guruplug.nix { };
|
||||
|
||||
uclibc = callPackage ../os-specific/linux/uclibc { };
|
||||
|
||||
uclibcCross = import ../os-specific/linux/uclibc {
|
||||
|
Loading…
Reference in New Issue
Block a user