[U-Boot-Users] [PATCH] update for CSB226

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

[U-Boot-Users] [PATCH] update for CSB226

Robert Schwebel-2
Hi,

here is an updated patch for the Cogent CSB226 board (PXA250). Some
details which might require discussion:

arminfrastructure
-----------------

- The "reset" code didn't work for me in the version which was in the
  repository. I've added a reset routine which works on the PXA250, but
  I suspect the old variant might have run on some other XScale
  processor? If yes, we should sort it out to some processor specific
  file, if no my code can simply go in.

- lib_arm/armlinux.c: progress callbacks added

csb226
------

- progress information added
- added a function to access the LEDs (which are used as progress
  indicators during boot)
- fixed flash erase routine (works now); writing is still broken

general
-------

- cmd_bootm.c: more verbose error message

Robert
--
 Dipl.-Ing. Robert Schwebel | http://www.pengutronix.de
 Pengutronix - Linux Solutions for Science and Industry
   Braunschweiger Str. 79,  31134 Hildesheim, Germany
   Handelsregister:  Amtsgericht Hildesheim, HRA 2686
    Phone: +49-5121-28619-0 |  Fax: +49-5121-28619-4

    Visit us at the SPS/IPC/Drives 2002 in Nuernberg!
   Hall 5, Booth 154 +++ Please contact us for details.
-------------- next part --------------
Index: cpu/xscale/start.S
===================================================================
RCS file: /cvsroot/u-boot/u-boot/cpu/xscale/start.S,v
retrieving revision 1.2
diff -u -b -B -w -p -u -r1.2 start.S
--- cpu/xscale/start.S 3 Nov 2002 18:03:56 -0000 1.2
+++ cpu/xscale/start.S 4 Nov 2002 11:41:19 -0000
@@ -167,6 +167,12 @@ IC_BASE:   .word   0x40d00000
 RST_BASE: .word   0x40f00030
 #define RCSR 0x00
 
+/* Operating System Timer                                                   */
+OSTIMER_BASE: .word 0x40a00000
+#define OSMR3 0x0C
+#define OSCR 0x10
+#define OWER 0x18
+#define OIER 0x1C
 
  /* Clock Manager Registers                                          */
 CC_BASE: .word 0x41300000
@@ -394,18 +400,38 @@ fiq:
 
 #endif
 
-/*
- * FIXME How do we reset??? Watchdog timeout??
- */
+
+/****************************************************************************/
+/*                                                                          */
+/* Reset function: the PXA250 doesn't have a reset function, so we have to  */
+/* perform a watchdog timeout for a soft reset.                             */
+/*                                                                          */
+/****************************************************************************/
+
  .align 5
 .globl reset_cpu
+
+ /* FIXME: this code is PXA250 specific. How is this handled on      */
+ /*        other XScale processors?                                  */
+
 reset_cpu:
- /*
- ldr r0, RST_BASE
- mov r1, #0x0 @ set bit 3-0 ...
- str r1, [r0, #RCSR] @ ... to clear in RCSR
- mov r1, #0x1
- str r1, [r0, #RCSR] @ and perform reset
- */
- b reset_cpu @ silly, but repeat endlessly
+
+ /* We set OWE:WME (watchdog enable) and wait until timeout happens  */
+
+ ldr r0, OSTIMER_BASE
+ ldr r1, [r0, #OWER]
+ orr r1, r1, #0x0001 /* bit0: WME                */
+ str r1, [r0, #OWER]
+
+ /* OS timer does only wrap every 1165 seconds, so we have to set    */
+ /* the match register as well.                                      */
+
+ ldr r1, [r0, #OSCR] /* read OS timer            */
+ add r1, r1, #0x800 /* let OSMR3 match after    */
+ add r1, r1, #0x800 /* 4096*(1/3.6864MHz)=1ms   */
+ str r1, [r0, #OSMR3]
+
+reset_endless:
+
+ b reset_endless
 
Index: lib_arm/board.c
===================================================================
RCS file: /cvsroot/u-boot/u-boot/lib_arm/board.c,v
retrieving revision 1.2
diff -u -b -B -w -p -u -r1.2 board.c
--- lib_arm/board.c 3 Nov 2002 18:03:56 -0000 1.2
+++ lib_arm/board.c 4 Nov 2002 11:41:25 -0000
@@ -194,6 +194,7 @@ void start_armboot (void)
  gd->bd = &bd_data;
  memset (gd->bd, 0, sizeof (bd_t));
 
+ /* Call all init_* functions */
  for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
  if ((*init_fnc_ptr)() != 0) {
  hang ();
Index: lib_arm/armlinux.c
===================================================================
RCS file: /cvsroot/u-boot/u-boot/lib_arm/armlinux.c,v
retrieving revision 1.2
diff -u -b -B -w -p -u -r1.2 armlinux.c
--- lib_arm/armlinux.c 3 Nov 2002 18:03:56 -0000 1.2
+++ lib_arm/armlinux.c 4 Nov 2002 11:41:24 -0000
@@ -32,6 +32,12 @@
 #define tag_size(type)  ((sizeof(struct tag_header) + sizeof(struct type)) >> 2)
 #define tag_next(t)     ((struct tag *)((u32 *)(t) + (t)->hdr.size))
 
+#ifdef CONFIG_SHOW_BOOT_PROGRESS
+# define SHOW_BOOT_PROGRESS(arg)        show_boot_progress(arg)
+#else
+# define SHOW_BOOT_PROGRESS(arg)
+#endif
+
 #if defined (CONFIG_SETUP_MEMORY_TAGS) || \
     defined (CONFIG_CMDLINE_TAG) || \
     defined (CONFIG_INITRD_TAG) || \
@@ -80,6 +86,8 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, in
      * Check if there is an initrd image
      */
     if (argc >= 3) {
+ SHOW_BOOT_PROGRESS (9);
+
  addr = simple_strtoul(argv[2], NULL, 16);
 
  printf ("## Loading Ramdisk Image at %08lx ...\n", addr);
@@ -89,6 +97,7 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, in
 
  if (ntohl(hdr->ih_magic) != IH_MAGIC) {
     printf ("Bad Magic Number\n");
+            SHOW_BOOT_PROGRESS (-10);
     do_reset (cmdtp, flag, argc, argv);
  }
 
@@ -100,9 +109,12 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, in
 
  if (crc32 (0, (char *)data, len) != checksum) {
     printf ("Bad Header Checksum\n");
+    SHOW_BOOT_PROGRESS (-11);
     do_reset (cmdtp, flag, argc, argv);
  }
 
+ SHOW_BOOT_PROGRESS (10);
+
  print_image_hdr (hdr);
 
  data = addr + sizeof(image_header_t);
@@ -115,15 +127,19 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, in
     csum = crc32 (0, (char *)data, len);
     if (csum != ntohl(hdr->ih_dcrc)) {
  printf ("Bad Data CRC\n");
+        SHOW_BOOT_PROGRESS (-12);
  do_reset (cmdtp, flag, argc, argv);
     }
     printf ("OK\n");
  }
 
+ SHOW_BOOT_PROGRESS (11);
+
  if ((hdr->ih_os   != IH_OS_LINUX) ||
     (hdr->ih_arch != IH_CPU_ARM) ||
     (hdr->ih_type != IH_TYPE_RAMDISK) ) {
     printf ("No Linux ARM Ramdisk Image\n");
+    SHOW_BOOT_PROGRESS (-13);
     do_reset (cmdtp, flag, argc, argv);
  }
 
@@ -134,6 +150,8 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, in
  ulong tail    = ntohl(len_ptr[0]) % 4;
  int i;
 
+ SHOW_BOOT_PROGRESS (13);
+
  /* skip kernel length and terminator */
  data = (ulong)(&len_ptr[2]);
  /* skip any additional image length fields */
@@ -151,6 +169,8 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, in
  /*
  * no initrd image
  */
+        SHOW_BOOT_PROGRESS (14);
+
  data = 0;
     }
 
@@ -167,6 +187,8 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, in
  initrd_start = 0;
  initrd_end = 0;
     }
+
+    SHOW_BOOT_PROGRESS (15);
 
 #ifdef DEBUG
     printf ("## Transferring control to Linux (at address %08lx) ...\n",
-------------- next part --------------
Index: board/csb226/csb226.c
===================================================================
RCS file: /cvsroot/u-boot/u-boot/board/csb226/csb226.c,v
retrieving revision 1.2
diff -u -b -B -w -p -u -r1.2 csb226.c
--- board/csb226/csb226.c 3 Nov 2002 17:56:38 -0000 1.2
+++ board/csb226/csb226.c 4 Nov 2002 11:41:12 -0000
@@ -24,14 +24,25 @@
  */
 
 #include <common.h>
+#include <asm/arch/pxa-regs.h>
 
-/* ------------------------------------------------------------------------- */
-
+#ifdef CONFIG_SHOW_BOOT_PROGRESS
+# define SHOW_BOOT_PROGRESS(arg)        show_boot_progress(arg)
+#else
+# define SHOW_BOOT_PROGRESS(arg)
+#endif
 
 /*
  * Miscelaneous platform dependent initialisations
  */
 
+
+/**
+ * board_init: - setup some data structures
+ *
+ * @return: 0 in case of success
+ */
+
 int board_init (void)
 {
  DECLARE_GLOBAL_DATA_PTR;
@@ -48,6 +59,13 @@ int board_init (void)
  return 0;
 }
 
+
+/**
+ * dram_init: - setup dynamic RAM
+ *
+ * @return: 0 in case of success
+ */
+
 int dram_init (void)
 {
  DECLARE_GLOBAL_DATA_PTR;
@@ -57,3 +75,62 @@ int dram_init (void)
 
  return 0;
 }
+
+
+/**
+ * csb226_set_led: - switch LEDs on or off
+ *
+ * @param led:   LED to switch (0,1,2)
+ * @param state: switch on (1) or off (0)
+ */
+
+void csb226_set_led(int led, int state)
+{
+ switch(led) {
+
+ case 0: if (state==1) {
+ GPCR0 |= CSB226_USER_LED0;
+ } else if (state==0) {
+ GPSR0 |= CSB226_USER_LED0;
+ }
+ break;
+
+ case 1: if (state==1) {
+                                GPCR0 |= CSB226_USER_LED1;
+                        } else if (state==0) {
+                                GPSR0 |= CSB226_USER_LED1;
+                        }
+                        break;
+
+ case 2: if (state==1) {
+                                GPCR0 |= CSB226_USER_LED2;
+                        } else if (state==0) {
+                                GPSR0 |= CSB226_USER_LED2;
+                        }
+                        break;
+ }
+
+ return;
+}
+
+
+/**
+ * show_boot_progress: - indicate state of the boot process
+ *
+ * @param status: Status number - see README for details.
+ *
+ * The CSB226 does only have 3 LEDs, so we switch them on at the most
+ * important states (1, 5, 15).  
+ */
+
+void show_boot_progress (int status)
+{
+ switch(status) {
+ case  1: csb226_set_led(0,1); break;
+ case  5: csb226_set_led(1,1); break;
+ case 15: csb226_set_led(2,1); break;
+ }
+
+ return;
+}
+
Index: board/csb226/flash.c
===================================================================
RCS file: /cvsroot/u-boot/u-boot/board/csb226/flash.c,v
retrieving revision 1.1.1.1
diff -u -b -B -w -p -u -r1.1.1.1 flash.c
--- board/csb226/flash.c 3 Nov 2002 00:31:20 -0000 1.1.1.1
+++ board/csb226/flash.c 4 Nov 2002 11:41:12 -0000
@@ -6,6 +6,9 @@
  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
  * Marius Groeger <mgroeger at sysgo.de>
  *
+ * (C) Copyright 2002
+ * Robert Schwebel, Pengutronix, <r.schwebel at pengutronix.de>
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
@@ -26,6 +29,7 @@
  */
 
 #include <common.h>
+#include <asm/arch/pxa-regs.h>
 
 #define FLASH_BANK_SIZE 0x02000000
 #define MAIN_SECT_SIZE  0x40000         /* 2x16 = 256k per sector */
@@ -33,7 +37,10 @@
 flash_info_t    flash_info[CFG_MAX_FLASH_BANKS];
 
 
-/*-----------------------------------------------------------------------
+/**
+ * flash_init: - initialize data structures for flash chips
+ *
+ * @return: size of the flash
  */
 
 ulong flash_init(void)
@@ -41,8 +48,7 @@ ulong flash_init(void)
     int i, j;
     ulong size = 0;
 
-    for (i = 0; i < CFG_MAX_FLASH_BANKS; i++)
-    {
+ for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
  ulong flashbase = 0;
  flash_info[i].flash_id =
   (INTEL_MANUFACT & FLASH_VENDMASK) |
@@ -51,8 +57,7 @@ ulong flash_init(void)
  flash_info[i].sector_count = CFG_MAX_FLASH_SECT;
  memset(flash_info[i].protect, 0, CFG_MAX_FLASH_SECT);
 
-        switch (i)
-        {
+ switch (i) {
            case 0:
         flashbase = PHYS_FLASH_1;
                 break;
@@ -60,15 +65,13 @@ ulong flash_init(void)
         panic("configured to many flash banks!\n");
                 break;
         }
- for (j = 0; j < flash_info[i].sector_count; j++)
- {
+ for (j = 0; j < flash_info[i].sector_count; j++) {
     flash_info[i].start[j] = flashbase + j*MAIN_SECT_SIZE;
  }
  size += flash_info[i].size;
     }
 
-    /* Protect monitor and environment sectors
-     */
+ /* Protect monitor and environment sectors */
     flash_protect(FLAG_PROTECT_SET,
   CFG_FLASH_BASE,
   CFG_FLASH_BASE + _armboot_end_data - _armboot_start,
@@ -82,8 +85,13 @@ ulong flash_init(void)
     return size;
 }
 
-/*-----------------------------------------------------------------------
+
+/**
+ * flash_print_info: - print information about the flash situation
+ *
+ * @param info:
  */
+
 void flash_print_info  (flash_info_t *info)
 {
     int i, j;
@@ -88,10 +96,10 @@ void flash_print_info  (flash_info_t *in
 {
     int i, j;
 
-    for (j=0; j<CFG_MAX_FLASH_BANKS; j++)
-    {
-        switch (info->flash_id & FLASH_VENDMASK)
-        {
+ for (j=0; j<CFG_MAX_FLASH_BANKS; j++) {
+
+ switch (info->flash_id & FLASH_VENDMASK) {
+
         case (INTEL_MANUFACT & FLASH_VENDMASK):
         printf("Intel: ");
         break;
@@ -100,38 +108,35 @@ void flash_print_info  (flash_info_t *in
         break;
         }
 
-        switch (info->flash_id & FLASH_TYPEMASK)
-        {
+ switch (info->flash_id & FLASH_TYPEMASK) {
+
         case (INTEL_ID_28F128J3 & FLASH_TYPEMASK):
         printf("28F128J3 (128Mbit)\n");
         break;
         default:
         printf("Unknown Chip Type\n");
-        goto Done;
-        break;
+ return;
         }
 
         printf("  Size: %ld MB in %d Sectors\n",
         info->size >> 20, info->sector_count);
 
         printf("  Sector Start Addresses:");
-        for (i = 0; i < info->sector_count; i++)
-        {
-        if ((i % 5) == 0)
-        {
-        printf ("\n   ");
-        }
+ for (i = 0; i < info->sector_count; i++) {
+ if ((i % 5) == 0) printf ("\n   ");
+        
         printf (" %08lX%s", info->start[i],
         info->protect[i] ? " (RO)" : "     ");
         }
         printf ("\n");
         info++;
     }
-
-Done:
 }
 
-/*-----------------------------------------------------------------------
+
+/**
+ * flash_erase: - erase flash sectors
+ *
  */
 
 int flash_erase (flash_info_t *info, int s_first, int s_last)
@@ -146,19 +151,15 @@ int flash_erase (flash_info_t *info, int
  return ERR_INVAL;
     }
 
-    if ((info->flash_id & FLASH_VENDMASK) !=
- (INTEL_MANUFACT & FLASH_VENDMASK)) {
+ if ((info->flash_id & FLASH_VENDMASK) != (INTEL_MANUFACT & FLASH_VENDMASK))
  return ERR_UNKNOWN_FLASH_VENDOR;
-    }
 
     prot = 0;
     for (sect=s_first; sect<=s_last; ++sect) {
- if (info->protect[sect]) {
-    prot++;
+ if (info->protect[sect]) prot++;
  }
-    }
-    if (prot)
- return ERR_PROTECTED;
+
+ if (prot) return ERR_PROTECTED;
 
     /*
      * Disable interrupts which might cause a timeout
@@ -178,57 +180,63 @@ int flash_erase (flash_info_t *info, int
  reset_timer_masked();
 
  if (info->protect[sect] == 0) { /* not protected */
-    /* vushort *addr = (vushort *)(info->start[sect]); */
-    ushort *addr = (ushort *)(info->start[sect]);
+ u32 * volatile addr = (u32 * volatile)(info->start[sect]);
 
-    *addr = 0x20; /* erase setup */
-    *addr = 0xD0; /* erase confirm */
+ /* erase sector:                                    */
+ /* The strata flashs are aligned side by side on    */
+ /* the data bus, so we have to write the commands   */
+ /* to both chips here:                              */
 
-    while ((*addr & 0x80) != 0x80) {
+ *addr = 0x00200020; /* erase setup */
+ *addr = 0x00D000D0; /* erase confirm */
+
+ while ((*addr & 0x00800080) != 0x00800080) {
  if (get_timer_masked() > CFG_FLASH_ERASE_TOUT) {
-    *addr = 0xB0; /* suspend erase */
-    *addr = 0xFF; /* reset to read mode */
+ *addr = 0x00B000B0; /* suspend erase*/
+ *addr = 0x00FF00FF; /* read mode    */
     rc = ERR_TIMOUT;
     goto outahere;
  }
     }
 
-    /* clear status register command */
-    *addr = 0x50;
-    /* reset to read mode */
-    *addr = 0xFF;
+ *addr = 0x00500050; /* clear status register cmd.   */
+ *addr = 0x00FF00FF; /* resest to read mode          */
+
  }
+
  printf("ok.\n");
     }
-    if (ctrlc())
-      printf("User Interrupt!\n");
+
+ if (ctrlc()) printf("User Interrupt!\n");
 
 outahere:
 
     /* allow flash to settle - wait 10 ms */
     udelay_masked(10000);
 
-    if (flag)
-      enable_interrupts();
+ if (flag) enable_interrupts();
 
     return rc;
 }
 
-/*-----------------------------------------------------------------------
- * Copy memory to flash
+
+/**
+ * write_word: - copy memory to flash
+ *
+ * @param info:
+ * @param dest:
+ * @param data:
+ * @return:
  */
 
 static int write_word (flash_info_t *info, ulong dest, ushort data)
 {
-    /* vushort *addr = (vushort *)dest, val; */
     ushort *addr = (ushort *)dest, val;
     int rc = ERR_OK;
     int flag;
 
-    /* Check if Flash is (sufficiently) erased
-     */
-    if ((*addr & data) != data)
-        return ERR_NOT_ERASED;
+ /* Check if Flash is (sufficiently) erased */
+ if ((*addr & data) != data) return ERR_NOT_ERASED;
 
     /*
      * Disable interrupts which might cause a timeout
@@ -252,12 +260,10 @@ static int write_word (flash_info_t *inf
     reset_timer_masked();
 
     /* wait while polling the status register */
-    while(((val = *addr) & 0x80) != 0x80)
-    {
+ while(((val = *addr) & 0x80) != 0x80) {
  if (get_timer_masked() > CFG_FLASH_WRITE_TOUT) {
     rc = ERR_TIMOUT;
-    /* suspend program command */
-    *addr = 0xB0;
+ *addr = 0xB0; /* suspend program command */
     goto outahere;
  }
     }
@@ -285,17 +291,23 @@ static int write_word (flash_info_t *inf
     }
 
 outahere:
-    /* read array command */
-    *addr = 0xFF;
 
-    if (flag)
-      enable_interrupts();
+ *addr = 0xFF; /* read array command */
+ if (flag) enable_interrupts();
 
     return rc;
 }
 
-/*-----------------------------------------------------------------------
- * Copy memory to flash.
+
+/**
+ * write_buf: - Copy memory to flash.
+ *
+ * @param info:
+ * @param src: source of copy transaction
+ * @param addr: where to copy to
+ * @param cnt: number of bytes to copy
+ *
+ * @return error code
  */
 
 int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
@@ -344,9 +356,7 @@ int write_buff (flash_info_t *info, ucha
  cnt -= 2;
     }
 
-    if (cnt == 0) {
- return ERR_OK;
-    }
+ if (cnt == 0) return ERR_OK;
 
     /*
      * handle unaligned tail bytes
Index: include/configs/csb226.h
===================================================================
RCS file: /cvsroot/u-boot/u-boot/include/configs/csb226.h,v
retrieving revision 1.2
diff -u -b -B -w -p -u -r1.2 csb226.h
--- include/configs/csb226.h 3 Nov 2002 18:03:56 -0000 1.2
+++ include/configs/csb226.h 4 Nov 2002 12:07:52 -0000
@@ -74,6 +74,7 @@
 #define CONFIG_IPADDR 192.168.1.56
 #define CONFIG_SERVERIP 192.168.1.2
 #define CONFIG_BOOTCOMMAND "bootm 0x40000"
+#define CONFIG_SHOW_BOOT_PROGRESS
 
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
@@ -156,7 +157,7 @@
 #define CFG_GPCR0_VAL       0x08022080
 #define CFG_GPCR1_VAL       0x00000000
 #define CFG_GPCR2_VAL       0x00000000
-#define CFG_GPDR0_VAL       0xCD82A858
+#define CFG_GPDR0_VAL       0xCD82A878
 #define CFG_GPDR1_VAL       0xFCFFAB80
 #define CFG_GPDR2_VAL       0x0001FFFF
 #define CFG_GAFR0_L_VAL     0x80000000
@@ -191,10 +192,10 @@
 #define CFG_MCIO0_VAL       0x00000000
 #define CFG_MCIO1_VAL       0x00000000
 
-/*
-#define _LED        0x08000010
-#define LED_BLANK  (0x08000040)
-*/
+#define CSB226_USER_LED0 0x00000008
+#define CSB226_USER_LED1 0x00000010
+#define CSB226_USER_LED2 0x00000020
+
 
 /*
  * FLASH and environment organization
-------------- next part --------------
Index: README
===================================================================
RCS file: /cvsroot/u-boot/u-boot/README,v
retrieving revision 1.2
diff -u -b -B -w -p -u -r1.2 README
--- README 3 Nov 2002 17:56:27 -0000 1.2
+++ README 4 Nov 2002 12:06:27 -0000
@@ -1624,6 +1624,14 @@ Low Level (hardware related) configurati
  wrong setting might damage your board. Read
  doc/README.MBX before setting this variable!
 
+
+Currently Undocumented Configuration Settings: (FIXME! RS)
+----------------------------------------------
+
+CFG_DRAM_BASE
+CFG_DRAM_SIZE
+
+
 Building the Software:
 ======================
 
@@ -2545,6 +2553,22 @@ this:
  ... eventually: LCD or video framebuffer
  ... eventually: pRAM (Protected RAM - unchanged by reset)
  0x00FF FFFF [End of RAM]
+
+[FIXME: this is how it is done today:]
+
+ 0x0000 0000 Exception Vector Code
+      :
+ 0xXXXX XXXX Free for Application Use
+      :
+ 0xXXXX XXXX stack
+ 0xXXXX XXXX bd_info and permanent copy of global data
+ 0xXXXX XXXX Malloc Area
+ 0xXXXX XXXX RAM Copy of Monitor Code
+ 0xXXXX XXXX Framebuffer
+ 0xXXXX XXXX pRAM (Protected RAM - not changed by reset)
+ 0xXXXX XXXX [End of RAM]
+
+[/FIXME]
 
 
 System Initialization:
-------------- next part --------------
Index: MAKEALL
===================================================================
RCS file: /cvsroot/u-boot/u-boot/MAKEALL,v
retrieving revision 1.1.1.1
diff -u -b -B -w -p -u -r1.1.1.1 MAKEALL
--- MAKEALL 2 Nov 2002 23:20:03 -0000 1.1.1.1
+++ MAKEALL 4 Nov 2002 11:41:05 -0000
@@ -117,7 +117,7 @@ build_target() {
  ${MAKE} distclean >/dev/null
  ${MAKE} ${target}_config
  ${MAKE} all 2>&1 >LOG/$target.MAKELOG | tee LOG/$target.ERR
- ${CROSS_COMPILE:-ppc_8xx-}size u-boot | tee -a LOG/$target.MAKELOG
+ ${CROSS_COMPILE}size ppcboot | tee -a LOG/$target.MAKELOG
 }
 
 #-----------------------------------------------------------------------
Index: Makefile
===================================================================
RCS file: /cvsroot/u-boot/u-boot/Makefile,v
retrieving revision 1.1.1.1
diff -u -b -B -w -p -u -r1.1.1.1 Makefile
--- Makefile 2 Nov 2002 23:21:03 -0000 1.1.1.1
+++ Makefile 4 Nov 2002 11:41:06 -0000
@@ -72,7 +72,7 @@ ifeq ($(ARCH),ppc)
 CROSS_COMPILE = ppc_8xx-
 endif
 ifeq ($(ARCH),arm)
-CROSS_COMPILE = arm_920TDI-
+CROSS_COMPILE = arm-linux-
 endif
 endif
 endif
Index: common/cmd_bootm.c
===================================================================
RCS file: /cvsroot/u-boot/u-boot/common/cmd_bootm.c,v
retrieving revision 1.1.1.1
diff -u -b -B -w -p -u -r1.1.1.1 cmd_bootm.c
--- common/cmd_bootm.c 3 Nov 2002 00:06:22 -0000 1.1.1.1
+++ common/cmd_bootm.c 4 Nov 2002 11:41:17 -0000
@@ -884,7 +884,15 @@ int gunzip(void *dst, int dstlen, unsign
 
  r = inflateInit2(&s, -MAX_WBITS);
  if (r != Z_OK) {
- printf ("Error: inflateInit2() returned %d\n", r);
+ printf ("Error: inflateInit2() returned %d (", r);
+ switch (r) {
+ case Z_ERRNO: printf("ERRNO");        break;
+ case Z_STREAM_ERROR: printf("STREAM_ERROR"); break;
+ case Z_DATA_ERROR: printf("DATA_ERROR");   break;
+ case Z_MEM_ERROR: printf("MEM_ERROR");    break;
+ case Z_BUF_ERROR: printf("BUF_ERROR");    break;
+ }
+ printf(")\n");
  return (-1);
  }
  s.next_in = src + i;

Reply | Threaded
Open this post in threaded view
|

[U-Boot-Users] [PATCH] update for CSB226

Wolfgang Denk
In message <20021104121905.GC21366 at pengutronix.de> you wrote:

>
> here is an updated patch for the Cogent CSB226 board (PXA250). Some
> details which might require discussion:
>
> arminfrastructure
> -----------------
>
> - The "reset" code didn't work for me in the version which was in the
>   repository. I've added a reset routine which works on the PXA250, but
>   I suspect the old variant might have run on some other XScale
>   processor? If yes, we should sort it out to some processor specific
>   file, if no my code can simply go in.

Let's keep at least a minimum of technical stuff going on...


Any comments about this patch? Should I merge it?

Best regards,

Wolfgang Denk

--
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-4596-87  Fax: (+49)-8142-4596-88  Email: wd at denx.de
See us @ electronica 2002 in Munich, Nov 12-15, Hall A3, Booth A3.325



Reply | Threaded
Open this post in threaded view
|

[U-Boot-Users] [PATCH] update for CSB226

Kyle Harris
On Monday 04 November 2002 01:59 pm, Wolfgang Denk wrote:

> In message <20021104121905.GC21366 at pengutronix.de> you wrote:
> > here is an updated patch for the Cogent CSB226 board (PXA250). Some
> > details which might require discussion:
> >
> > arminfrastructure
> > -----------------
> >
> > - The "reset" code didn't work for me in the version which was in the
> >   repository. I've added a reset routine which works on the PXA250, but
> >   I suspect the old variant might have run on some other XScale
> >   processor? If yes, we should sort it out to some processor specific
> >   file, if no my code can simply go in.
>
> Let's keep at least a minimum of technical stuff going on...
>
>
> Any comments about this patch? Should I merge it?
>
 
Looks OK to me. This should work for all Xscale.

On a side note Wolfgang. Have you ever considered supporting the

if (machine_is_board_x()) {}

I know you're busy and this kind of thing is low priority. But it does make
code, IMHO, more readable and cleaner.

Kyle.



Reply | Threaded
Open this post in threaded view
|

[U-Boot-Users] [PATCH] update for CSB226

Wolfgang Denk
In reply to this post by Robert Schwebel-2
In message <20021104121905.GC21366 at pengutronix.de> you wrote:

>
> here is an updated patch for the Cogent CSB226 board (PXA250). Some
> details which might require discussion:
>
> arminfrastructure
> -----------------
>
> - The "reset" code didn't work for me in the version which was in the
>   repository. I've added a reset routine which works on the PXA250, but
>   I suspect the old variant might have run on some other XScale
>   processor? If yes, we should sort it out to some processor specific
>   file, if no my code can simply go in.
>
> - lib_arm/armlinux.c: progress callbacks added

Added.

> csb226
> ------
>
> - progress information added
> - added a function to access the LEDs (which are used as progress
>   indicators during boot)
> - fixed flash erase routine (works now); writing is still broken

Added.

> general
> -------
>
> - cmd_bootm.c: more verbose error message

Not added. The error condition is exotic, and not worth the increased
memory footprint.


Will show up on CVS in a couple of hours.


Please provide a proper CHANGELOG entry next time!

Best regards,

Wolfgang Denk

--
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-4596-87  Fax: (+49)-8142-4596-88  Email: wd at denx.de
See us @ electronica 2002 in Munich, Nov 12-15, Hall A3, Booth A3.325



Reply | Threaded
Open this post in threaded view
|

[ARMboot-users] Re: [U-Boot-Users] [PATCH] update for CSB226

Wolfgang Denk
In reply to this post by Kyle Harris
In message <E188n1J-0002qw-00 at hall.mail.mindspring.net> you wrote:
>
> > Any comments about this patch? Should I merge it?
>  
> Looks OK to me. This should work for all Xscale.

Thanks, Kyle.

> On a side note Wolfgang. Have you ever considered supporting the
>
> if (machine_is_board_x()) {}

I thought about it once, but not really seriously.

> I know you're busy and this kind of thing is low priority. But it does make
> code, IMHO, more readable and cleaner.

Well, maybe. If you check the #ifdef-mess we have right now, you will
find that

1) many #ifdef's come clustered for seral boards,  and  I  don;t  see
   much difference between

        #if defined(CONFIG_CCM) || \
            defined(CONFIG_COGENT) || \
            defined(CONFIG_CPCI405) || \
            defined(CONFIG_EVB64260) || \
            defined(CONFIG_HYMOD) || \
            defined(CONFIG_LWMON) || \
            defined(CONFIG_PCU_E) || \
            defined(CONFIG_W7O) || \
            defined(CONFIG_MISC_INIT_R)
                /* miscellaneous platform dependent initialisations */
                misc_init_r ();
        #endif

   and

        if (machine_is_CCM() || \
            machine_is_COGENT() || \
            machine_is_CPCI405() || \
            machine_is_EVB64260() || \
            machine_is_HYMOD() || \
            machine_is_LWMON() || \
            machine_is_PCU_E() || \
            machine_is_W7O() || \
            machine_is_MISC_INIT_R() ) {
                /* miscellaneous platform dependent initialisations */
                misc_init_r ();
        }

2) Many of these #ifdef's are used to conditionammy define variables,
   or initializers, where an if() cannot be used, so we would have to
   support BOTH forms, which is actually worse.



But as I said: I didn't reallys pend much thought on this, so maybe I
overlooked something. Feel free to  come  up  with  a  more  detailed
proposal / patch.

Best regards,

Wolfgang Denk

--
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-4596-87  Fax: (+49)-8142-4596-88  Email: wd at denx.de
See us @ electronica 2002 in Munich, Nov 12-15, Hall A3, Booth A3.325



Reply | Threaded
Open this post in threaded view
|

[ARMboot-users] Re: [U-Boot-Users] [PATCH] update for CSB226

Rich Ireland
Wolfgang Denk wrote:
>
> 2) Many of these #ifdef's are used to conditionammy define variables,
>    or initializers, where an if() cannot be used, so we would have to
>    support BOTH forms, which is actually worse.

Yep, supporting both methods would be very bad.

IMNSHO,

#ifdef MISC_INIT_R
        misc_init_r();
#endif

is better.  But then you have to get all the board maintainers to define
MISC_INIT_R properly.

One could just remove all the 'board specific' defines from this and
wait for the patches to arrive... ;-)

Personally, I prefer to have all init functions defined for each
supported board and skip all the if'def blocks all together. Either by
an empty #define or an empty function.

This makes everything *much* more readable.

Yes, there are exceptions, but (in a perfect world) generic code
shouldn't have board specific references at all.  Let the linker do it's
job.

Just my 2/100th's of a USD.

--
Rich Ireland
Firmware Engineer
Idaho Technology, Inc.
http://www.idahotech.com/
mailto:rich.ireland at idahotech.com





Reply | Threaded
Open this post in threaded view
|

[ARMboot-users] Re: [U-Boot-Users] [PATCH] update for CSB226

Kyle Harris
In reply to this post by Wolfgang Denk
On Monday 04 November 2002 05:35 pm, Wolfgang Denk wrote:

> Well, maybe. If you check the #ifdef-mess we have right now, you will
> find that
>
> 1) many #ifdef's come clustered for seral boards,  and  I  don;t  see
>    much difference between
>
> #if defined(CONFIG_CCM) || \
>    defined(CONFIG_COGENT) || \
>    defined(CONFIG_CPCI405) || \
>    defined(CONFIG_EVB64260) || \
>    defined(CONFIG_HYMOD) || \
>    defined(CONFIG_LWMON) || \
>    defined(CONFIG_PCU_E) || \
>    defined(CONFIG_W7O) || \
>    defined(CONFIG_MISC_INIT_R)
> /* miscellaneous platform dependent initialisations */
> misc_init_r ();
> #endif

Yeh, This should really be replaced with
       
        #ifdef CONFIG_MISC_INIT_R

and I think most new ports use the common CONFIG_xxxx. Only some of the early
boards use board specific defines for common config options.

>
>    and
>
> if (machine_is_CCM() || \
>    machine_is_COGENT() || \
>    machine_is_CPCI405() || \
>    machine_is_EVB64260() || \
>    machine_is_HYMOD() || \
>    machine_is_LWMON() || \
>    machine_is_PCU_E() || \
>    machine_is_W7O() || \
>    machine_is_MISC_INIT_R() ) {
> /* miscellaneous platform dependent initialisations */
> misc_init_r ();
> }
>
> 2) Many of these #ifdef's are used to conditionammy define variables,
>    or initializers, where an if() cannot be used, so we would have to
>    support BOTH forms, which is actually worse.

Good point.

Thanks for all the hard work (to everyone, including the armboot folks).
U-boot is a great project!

Kyle.



Reply | Threaded
Open this post in threaded view
|

[ARMboot-users] Re: [U-Boot-Users] [PATCH] update for CSB226

Wolfgang Denk
In reply to this post by Rich Ireland
In message <3DC6FFC7.9010601 at idahotech.com> you wrote:
>
> Personally, I prefer to have all init functions defined for each
> supported board and skip all the if'def blocks all together. Either by
> an empty #define or an empty function.
>
> This makes everything *much* more readable.

Actually this was one  of  my  intentions  for  this  init_sequence[]
stuff:  I  thought  we  might move this whole definition to the board
dependend files...

I was just not consequent to implement this (yet  -  actually  I  had
good reason: I wanted to have this running and stable first).


Best regards,

Wolfgang Denk

--
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-4596-87  Fax: (+49)-8142-4596-88  Email: wd at denx.de
See us @ electronica 2002 in Munich, Nov 12-15, Hall A3, Booth A3.325



Reply | Threaded
Open this post in threaded view
|

[U-Boot-Users] [PATCH] update for CSB226

Holger Schurig
In reply to this post by Wolfgang Denk
> Any comments about this patch? Should I merge it?

Yes, you should. In the redboot sources for the IQ30xxx (an XScale I/O
processor) I also read that the device can only be reset by timer reset.

--
MN-Logistik GmbH         http://www.mn-logistik.de
Holger Schurig
Dieselstr. 18
61191 Rosbach v.d.H?he
Tel: 06003/9141-0        Fax: 06003/9141-49




Reply | Threaded
Open this post in threaded view
|

[U-Boot-Users] [PATCH] update for CSB226

Wolfgang Denk
In message <200211050844.07322.h.schurig at mn-logistik.de> you wrote:
> > Any comments about this patch? Should I merge it?
>
> Yes, you should. In the redboot sources for the IQ30xxx (an XScale I/O
> processor) I also read that the device can only be reset by timer reset.

Thanks. Done & checked in.

Best regards,

Wolfgang Denk

--
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-4596-87  Fax: (+49)-8142-4596-88  Email: wd at denx.de
See us @ electronica 2002 in Munich, Nov 12-15, Hall A3, Booth A3.325