Fwd: Hello -- NAND/NOR Flash design for GTA02
Werner Almesberger
werner at openmoko.org
Tue Jan 29 08:05:19 CET 2008
Miles Hsieh wrote:
> production information now:
>
> device nand0 <neo1973-nand>, # parts = 6
> #: name size offset mask_flags
> 0: u-boot 0x00040000 0x00000000 0
> 1: u-boot_env 0x00040000 0x00040000 0
> 2: kernel 0x00800000 0x00080000 0
> 3: splash 0x000a0000 0x00880000 0
> 4: factory 0x00040000 0x00920000 0
> 5: rootfs 0x076a0000 0x00960000 0
Okay, I'll make the partitions just like this, i.e., "kernel" grows
from 2MB to 8MB, and we get the new "factory" partition with 256kB.
The kernel partitions is a bit oversized for regular use, of course,
but I think it's good if we don't have to repartition during the
factory process, and we'll probably find good uses for the extra
space, even without using an initramfs. (E.g., a file system with
multiple kernels a la /boot comes to mind.)
Since this is also requires changes to DFU's configuration descriptor,
I've taken the opportunity to clean up most of the hard-coded
redundancy there. Sneak preview below. (This is just the change to
uboot-dfu.patch. There's of course more in uboot-gta02.patch.)
I haven't committed this yet, since there's one more compatibility
breaker coming ...
- Werner
---------------------------------- cut here -----------------------------------
Index: uboot-dfu.patch
===================================================================
--- uboot-dfu.patch (revision 3968)
+++ uboot-dfu.patch (working copy)
@@ -90,7 +90,7 @@
===================================================================
--- /dev/null
+++ u-boot/drivers/usb/usbdfu.c
-@@ -0,0 +1,1069 @@
+@@ -0,0 +1,1018 @@
+/*
+ * (C) 2007 by OpenMoko, Inc.
+ * Author: Harald Welte <laforge at openmoko.org>
@@ -714,7 +714,7 @@
+ .bNumConfigurations = 0x01,
+};
+
-+static const struct _dfu_desc dfu_cfg_descriptor = {
++static struct _dfu_desc dfu_cfg_descriptor = {
+ .ucfg = {
+ .bLength = USB_DT_CONFIG_SIZE,
+ .bDescriptorType = USB_DT_CONFIG,
@@ -727,72 +727,6 @@
+ .bmAttributes = BMATTRIBUTE_RESERVED,
+ .bMaxPower = 50,
+ },
-+ .uif[0] = {
-+ .bLength = USB_DT_INTERFACE_SIZE,
-+ .bDescriptorType = USB_DT_INTERFACE,
-+ .bInterfaceNumber = 0x00,
-+ .bAlternateSetting = 0x00,
-+ .bNumEndpoints = 0x00,
-+ .bInterfaceClass = 0xfe,
-+ .bInterfaceSubClass = 0x01,
-+ .bInterfaceProtocol = 0x02,
-+ .iInterface = DFU_STR_ALT0,
-+ },
-+ .uif[1] = {
-+ .bLength = USB_DT_INTERFACE_SIZE,
-+ .bDescriptorType = USB_DT_INTERFACE,
-+ .bInterfaceNumber = 0x00,
-+ .bAlternateSetting = 0x01,
-+ .bNumEndpoints = 0x00,
-+ .bInterfaceClass = 0xfe,
-+ .bInterfaceSubClass = 0x01,
-+ .bInterfaceProtocol = 0x02,
-+ .iInterface = DFU_STR_ALT1,
-+ },
-+ .uif[2] = {
-+ .bLength = USB_DT_INTERFACE_SIZE,
-+ .bDescriptorType = USB_DT_INTERFACE,
-+ .bInterfaceNumber = 0x00,
-+ .bAlternateSetting = 0x02,
-+ .bNumEndpoints = 0x00,
-+ .bInterfaceClass = 0xfe,
-+ .bInterfaceSubClass = 0x01,
-+ .bInterfaceProtocol = 0x02,
-+ .iInterface = DFU_STR_ALT2,
-+ },
-+ .uif[3] = {
-+ .bLength = USB_DT_INTERFACE_SIZE,
-+ .bDescriptorType = USB_DT_INTERFACE,
-+ .bInterfaceNumber = 0x00,
-+ .bAlternateSetting = 0x03,
-+ .bNumEndpoints = 0x00,
-+ .bInterfaceClass = 0xfe,
-+ .bInterfaceSubClass = 0x01,
-+ .bInterfaceProtocol = 0x02,
-+ .iInterface = DFU_STR_ALT3,
-+ },
-+ .uif[4] = {
-+ .bLength = USB_DT_INTERFACE_SIZE,
-+ .bDescriptorType = USB_DT_INTERFACE,
-+ .bInterfaceNumber = 0x00,
-+ .bAlternateSetting = 0x04,
-+ .bNumEndpoints = 0x00,
-+ .bInterfaceClass = 0xfe,
-+ .bInterfaceSubClass = 0x01,
-+ .bInterfaceProtocol = 0x02,
-+ .iInterface = DFU_STR_ALT4,
-+ },
-+ .uif[5] = {
-+ .bLength = USB_DT_INTERFACE_SIZE,
-+ .bDescriptorType = USB_DT_INTERFACE,
-+ .bInterfaceNumber = 0x00,
-+ .bAlternateSetting = 0x05,
-+ .bNumEndpoints = 0x00,
-+ .bInterfaceClass = 0xfe,
-+ .bInterfaceSubClass = 0x01,
-+ .bInterfaceProtocol = 0x02,
-+ .iInterface = DFU_STR_ALT5,
-+ },
+ .func_dfu = DFU_FUNC_DESC,
+};
+
@@ -1075,6 +1009,21 @@
+
+int dfu_init_instance(struct usb_device_instance *dev)
+{
++ int i;
++
++ for (i = 0; i != DFU_NUM_ALTERNATES; i++) {
++ struct usb_interface_descriptor *uif =
++ dfu_cfg_descriptor.uif+i;
++
++ uif->bLength = USB_DT_INTERFACE_SIZE;
++ uif->bDescriptorType = USB_DT_INTERFACE;
++ uif->bAlternateSetting = i;
++ uif->bInterfaceClass = 0xfe;
++ uif->bInterfaceSubClass = 1;
++ uif->bInterfaceProtocol = 2;
++ uif->iInterface = DFU_STR_ALT(i);
++ }
++
+ dev->dfu_dev_desc = &dfu_dev_descriptor;
+ dev->dfu_cfg_desc = &dfu_cfg_descriptor;
+ dev->dfu_state = DFU_STATE_appIDLE;
@@ -1294,7 +1243,7 @@
{
int i;
for (i = 0; i < strlen (str) && str[i]; i++){
-@@ -648,6 +663,9 @@
+@@ -654,6 +669,9 @@
device_instance->bus = bus_instance;
device_instance->configurations = NUM_CONFIGS;
device_instance->configuration_instance_array = config_instance;
@@ -1332,7 +1281,7 @@
===================================================================
--- /dev/null
+++ u-boot/include/usb_dfu.h
-@@ -0,0 +1,99 @@
+@@ -0,0 +1,94 @@
+#ifndef _DFU_H
+#define _DFU_H
+
@@ -1391,22 +1340,17 @@
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+
++#ifndef DFU_NUM_ALTERNATES
+#define DFU_NUM_ALTERNATES 6
++#endif
+
+#define DFU_STR_MANUFACTURER STR_MANUFACTURER
+#define DFU_STR_PRODUCT STR_PRODUCT
+#define DFU_STR_SERIAL STR_SERIAL
+#define DFU_STR_CONFIG (STR_COUNT)
-+#define DFU_STR_ALT0 (STR_COUNT+1)
-+#define DFU_STR_ALT1 (STR_COUNT+2)
-+#define DFU_STR_ALT2 (STR_COUNT+3)
-+#define DFU_STR_ALT3 (STR_COUNT+4)
-+#define DFU_STR_ALT4 (STR_COUNT+5)
-+#define DFU_STR_ALT5 (STR_COUNT+6)
-+#define DFU_STR_COUNT (STR_COUNT+7)
++#define DFU_STR_ALT(n) (STR_COUNT+(n)+1)
++#define DFU_STR_COUNT DFU_STR_ALT(DFU_NUM_ALTERNATES)
+
-+#define DFU_NUM_STRINGS (STR_COUNT+8)
-+
+#define CONFIG_DFU_CFG_STR "USB Device Firmware Upgrade"
+#define CONFIG_DFU_ALT0_STR "RAM 0x32000000"
+
@@ -1623,7 +1567,7 @@
ifeq ($(ARCH),mips)
BIN_FILES += inca-swap-bytes$(SFX)
-@@ -140,6 +140,10 @@
+@@ -141,6 +141,10 @@
$(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
$(STRIP) $@
@@ -1993,7 +1937,7 @@
===================================================================
--- u-boot.orig/Makefile
+++ u-boot/Makefile
-@@ -278,6 +278,12 @@
+@@ -298,6 +298,12 @@
$(obj)u-boot.bin: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
More information about the openmoko-kernel
mailing list