On Fri, 25 Feb 2000, �麴�� wrote:

> 1) How can I load arm linux kernel using serial at CFG> prompt ?
>    
>    EBSA285 manual boot
>    1- Boot Method : serial
>    2- Image Number : 2
>    3- Root device : 0000
>    4- Argument :
>    b-boot     p- pci config
>    CFG>

Apply the attached patch against bios-1.06.  It fixes the serial code plus
other minor things.

> 2) Is there anyone who success to load kernel using DEC21143 ?
>    Or... DEC21143 Ethernet driver is supported ..?

Never tried.

> 3) When I booted using bios-1.06, My ebsa282 hanged at pci_read_config_word().
>    Who has the same experience ?

It certainly won't help for your DEC21143 to work.


Nicolas
diff -urN 1.06/bios/Changes bios/Changes
--- 1.06/bios/Changes   Sun Nov 28 16:14:50 1999
+++ bios/Changes        Thu Feb 24 10:43:46 2000
@@ -10,3 +10,11 @@
 
     Nicolas Pitre <[EMAIL PROTECTED]>
        - added y-modem upload boot method
+
+Changes to 1.06:
+    Nicolas Pitre <[EMAIL PROTECTED]>
+       - fixed y-modem code
+       - fixed linker script (.bss wasn't fully initialized)
+       - added flash image boot method
+
+
diff -urN 1.06/bios/Makefile bios/Makefile
--- 1.06/bios/Makefile  Sat Nov 20 09:49:50 1999
+++ bios/Makefile       Thu Feb 24 10:40:49 2000
@@ -1,7 +1,11 @@
 .EXPORT_ALL_VARIABLES:
 
-#TEXTADDR      =0x411000a0
+# This is for the bios to be launched from a flash bank by angel (with FMU?).
 TEXTADDR       =0x411000c0
+
+# This is for the ultimate boot instance... with nothing else.
+#TEXTADDR      =0x41000080
+
 DATAADDR       =0x1000
 CROSS_COMPILE  =arm-linux-
 
diff -urN 1.06/bios/drivers/char/Makefile bios/drivers/char/Makefile
--- 1.06/bios/drivers/char/Makefile     Sun Nov 28 16:15:20 1999
+++ bios/drivers/char/Makefile  Tue Jan 25 16:20:41 2000
@@ -1,5 +1,5 @@
 
 L_TARGET       := char.a
-L_OBJS         := vga.o ry.o
+L_OBJS         := vga.o ry.o flash.o
 
 include $(TOPDIR)/Rules.make
diff -urN 1.06/bios/drivers/char/flash.c bios/drivers/char/flash.c
--- 1.06/bios/drivers/char/flash.c      Wed Dec 31 19:00:00 1969
+++ bios/drivers/char/flash.c   Wed Jan 26 15:07:56 2000
@@ -0,0 +1,78 @@
+/*
+ * flash.c : boot method for booting a kernel directly from flash
+ * (C) 2000 Nicolas Pitre <[EMAIL PROTECTED]>
+ *
+ * This code boots the kernel directly from flash.  For this to work, 
+ * some parameters must be set in linux/arch/arm/boot/compressed/Makefile
+ * for the CONFIG_FOOTBRIDGE section as follows:
+ *
+ *   ZTEXTADDR        = (value of KERNEL_IMG_ADDR below)
+ *   ZRELADDR         = 0x00008000
+ *   ZBSSADDR         = 0x00200000
+ *
+ * Also you must ensure your zImage doesn't contain any variable data 
+ * section.  For this run:
+ *
+ *     size linux/arch/arm/boot/compressed/vmlinux
+ *
+ * after compiling. Note: you might need to use 'arm-linux-size' instead if
+ * you are cross-compiling.  You must get an output like this:
+ *
+ *    text    data     bss     dec     hex filename
+ *  484696       0   33848  518544   7e990 arch/arm/boot/compressed/vmlinux
+ *
+ * Here 'data' must be 0.  If you have an older kernel source tree than 2.3.x,
+ * you might need to use a patched linux/lib/inflate.c (simply copying the
+ * one from a 2.3.x source tree should do).
+ *
+ * Finally the kernel's zImage must be flashed at KERNEL_IMG_ADDR.
+ */
+
+#include <bios/boot.h>
+#include <bios/bootdev.h>
+#include <bios/stdio.h>
+
+
+#define KERNEL_IMG_ADDR        (0x41000000 + 64*1024)
+#define MAGIC_SIG      0x016f2818      /* in arch/arm/boot/compressed/head.S */
+
+
+static int flash_probe( void )
+{
+       long *ptr = (long *)KERNEL_IMG_ADDR;
+
+       /*
+        * Check for zImage signature and if it can be executed in place. 
+        * Those values are found in linux/arch/arm/boot/compressed/head.S
+        */
+       if( ptr[9] != MAGIC_SIG ) return -1;
+       if( ptr[10] != (long)ptr ) {
+               /* see comments at the beginning of this file */
+               printf( "\nWrong ZTEXTADDR for zImage in flash at %p\n", ptr );
+               return -1;
+       }
+       return 0;
+}
+
+
+static int flash_load( void )
+{
+       load_addr = KERNEL_IMG_ADDR;
+       return 0;
+}
+
+
+static int flash_dummy( void )
+{
+       return 0;
+}
+
+
+struct bootdev boot_flash = {
+       "flash image",
+        flash_probe,
+        flash_probe,   /* start */
+        flash_load,
+        flash_dummy    /* stop */
+};
+
diff -urN 1.06/bios/drivers/char/ry.c bios/drivers/char/ry.c
--- 1.06/bios/drivers/char/ry.c Sun Nov 28 16:16:51 1999
+++ bios/drivers/char/ry.c      Tue Jan 25 17:24:53 2000
@@ -41,7 +41,7 @@
 
 static void tx( int c )
 {
-  while (*((volatile int *)(SERBASE + 0x18)) & 8);
+  while (*((volatile int *)(SERBASE + 0x18)) & (1<<5));
   *((volatile int *)(SERBASE)) = c;
 }
 
@@ -51,9 +51,9 @@
   unsigned int expire = centisecs + timeout * 100;
 
   while( centisecs <= expire ){
-    if ( ! *((volatile unsigned int *)(SERBASE + 0x18)) & 16) {
+    if ( ! (*((volatile int *)(SERBASE + 0x18)) & (1<<4)) ) {
       c = *((volatile int *)(SERBASE));
-      return c;
+      return c & 0xff;
     }
   }
   return TIMEOUT;
@@ -193,10 +193,11 @@
 {
   int res;
 
-  printf ("Now send file with ymodem...\n" );
+  printf( "\nNow send file with y-modem (^X to abort) ...\n" );
   pout = (unsigned long *)load_addr;
   res = wcreceive();
-  printf( "Transfer %s, press any key.\n", 
+  wait_cs( 50 );
+  printf( "\n\nTransfer %s, press any key.\n", 
           (res == OK) ? "complete" : "failed" );
   getc();
   return res;
@@ -208,7 +209,7 @@
 }
 
 struct bootdev boot_serial = {
-        "serial",
+        "serial port",
         serial_dummy,
         serial_dummy,
         serial_load,
diff -urN 1.06/bios/elfbios.lds bios/elfbios.lds
--- 1.06/bios/elfbios.lds       Sun Nov 28 16:22:12 1999
+++ bios/elfbios.lds    Wed Jan 26 16:09:52 2000
@@ -11,19 +11,19 @@
         *(.gnu.warning)
         *(.rodata)
        . = ALIGN(4);
-    _etext = .;                        /* End of text section          */
   }
+  _etext = .;                  /* End of text section          */
 
   .data : {                    /* Data                         */
     _data = .;
         *(.data)
-    _edata = .;                        /* End of data section          */
   }
+  _edata = .;                  /* End of data section          */
   _data_sz = SIZEOF(.data);
 
   .bss : {
      _bss_start = .;           /* BSS                          */
         *(.bss)
-     _end = . ;
    }
+   _end = .;
 }
diff -urN 1.06/bios/include/bios/config.h bios/include/bios/config.h
--- 1.06/bios/include/bios/config.h     Sun Oct  4 09:51:14 1998
+++ bios/include/bios/config.h  Tue Jan 25 16:25:34 2000
@@ -25,17 +25,22 @@
 /* Define this if you wish your machine to have the capability of booting
  * using an image stored on another machine via a TCP/IP network.
  */
 #define CONFIG_BOOT_NET
 
 /* Define this if you wish your machine to have the capability of booting
  * from an IDE hard disk.
  */
 #define CONFIG_BOOT_IDE
 
 /* Define this if you wish your machine to have the capability of booting
  * from a SCSI hard disk.
  */
 #undef CONFIG_BOOT_SCSI
+
+/* Define this if you wish your machine to have the capability of booting
+ * with a kernel image directly from Flash.
+ */
+#define CONFIG_BOOT_FLASH
 
 /*============================================================================
  * Network Configuration
diff -urN 1.06/bios/init/crt0.S bios/init/crt0.S
--- 1.06/bios/init/crt0.S       Sun Nov 28 16:16:51 1999
+++ bios/init/crt0.S    Thu Jan 27 16:39:10 2000
@@ -128,11 +128,6 @@
  * Detect RAM multiplexer settings
  */
 
- mov r0, r4
- bl ser_printhex
- mov r0, #':'
- bl ser_printc
-
        mov     r0, r4                  @ check for presence
        add     r1, r4, #64
        bl      testram
@@ -152,11 +147,6 @@
        orr     r1, r0, #1 << 22
        bl      testram
        orreq   r5, r5, #1
-
- mov r0, r5
- bl ser_printhex
- mov r0, #'\n'
- bl ser_printc
 
        adr     r1, ram_modes           @ convert test -> mux
        ldrb    r6, [r1, r5]
diff -urN 1.06/bios/init/main.c bios/init/main.c
--- 1.06/bios/init/main.c       Sun Nov 28 16:32:52 1999
+++ bios/init/main.c    Thu Jan 27 19:05:31 2000
@@ -25,6 +25,7 @@
 extern struct bootdev boot_net;
 extern struct bootdev boot_ide;
 extern struct bootdev boot_scsi;
+extern struct bootdev boot_flash;
 extern struct bootdev boot_serial;
 
 static struct bootdev *first;
@@ -38,6 +39,9 @@
 #ifdef CONFIG_BOOT_NET
        &boot_net,
 #endif
+#ifdef CONFIG_BOOT_FLASH
+       &boot_flash,
+#endif
        &boot_serial,
        NULL
 };
@@ -172,8 +181,9 @@
                                bd = first;
                        break;
 
                case '2':
                        img_nr = (img_nr + 1) & 3;
+                       break;
 
                case '3':
                        {

Reply via email to