On Wed, Jul 03, 2002 at 09:02:32PM +0200, Olaf Hering wrote:

> On Mon, Jul 01, Tom Rini wrote:
> 
> > Lemme know if you still have the correct ammount of memory reported
> > still.  Thanks.
>
> ocan you provide a new patch for _devel? I used that one and it doesnt
> compile

D'oh.  I forgot to add <asm/bootinfo.h> to prep_setup.c.  New patches
attached.

-- 
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
===== arch/ppc/boot/prep/Makefile 1.31 vs edited =====
--- 1.31/arch/ppc/boot/prep/Makefile    Thu Mar  7 13:42:37 2002
+++ edited/arch/ppc/boot/prep/Makefile  Wed Jul  3 09:20:04 2002
@@ -23,9 +23,10 @@
 endif
 
 LD_ARGS                                = -T ../ld.script -Ttext 0x00800000 
-Bstatic
-obj-y                          := head.o ../simple/legacy.o misc.o of1275.o \
+obj-y                          := head.o ../simple/legacy.o misc.o \
                                        ../common/util.o ../common/string.o \
-                                       ../common/misc-common.o
+                                       ../common/misc-common.o \
+                                       ../common/mpc10x_memory.o
 OBJCOPY_ARGS                   = -O elf32-powerpc
 LIBS                           = ../lib/zlib.a
 
@@ -55,7 +56,7 @@
        $(LD) $(LD_ARGS) -o $@ $(obj-y) image.o $(LIBS)
        $(OBJCOPY) $(OBJCOPY_ARGS) $@ $@ -R .comment -R .stab -R .stabstr
        $(MKPREP) -pbp $@ ../images/[EMAIL PROTECTED]
-       rm -f $@
+       #rm -f $@
 
 zImage.initrd: $(obj-y) $(LIBS) ../ld.script ../images/vmlinux.gz $(MKPREP) \
                ../common/dummy.o
===== arch/ppc/boot/prep/head.S 1.14 vs edited =====
--- 1.14/arch/ppc/boot/prep/head.S      Thu Mar  7 13:42:37 2002
+++ edited/arch/ppc/boot/prep/head.S    Wed Jul  3 09:20:04 2002
@@ -38,10 +38,6 @@
        isync
 
        mr      r11,r3          /* Save pointer to residual/board data */
-       mr      r25,r5          /* Save OFW pointer */
-
-       /* Save the original MSR value */
-       mfmsr   r26
 
        /* Establish default MSR value */
        li      r3,MSR_IP|MSR_FP
@@ -114,17 +110,11 @@
        li      r2,0x000F               /* Mask pointer to 16-byte boundary */
        andc    r1,r1,r2
 
-       /* Store the original MSR into 'orig_MSR' */
-       lis     r3,[EMAIL PROTECTED]
-       ori     r3,r3,[EMAIL PROTECTED]
-       stw     r26,0(r3)
-
 /* Run loader */
        mr      r3,r8                   /* Load point */
        mr      r4,r7                   /* Program length */
        mr      r5,r6                   /* Checksum */
        mr      r6,r11                  /* Residual data */
-       mr      r7,r25                  /* OFW interfaces */
        bl      decompress_kernel
 
        /*
===== arch/ppc/boot/prep/misc.c 1.27 vs edited =====
--- 1.27/arch/ppc/boot/prep/misc.c      Thu Mar  7 13:42:37 2002
+++ edited/arch/ppc/boot/prep/misc.c    Wed Jul  3 09:27:37 2002
@@ -20,6 +20,8 @@
 #include <asm/bootinfo.h>
 #include <asm/mmu.h>
 #include <asm/byteorder.h>
+
+#include "mpc10x.h"
 #include "nonstdio.h"
 #include "zlib.h"
 
@@ -51,7 +53,6 @@
 RESIDUAL hold_resid_buf;
 RESIDUAL *hold_residual = &hold_resid_buf;
 unsigned long initrd_size = 0;
-unsigned long orig_MSR;
 
 char *zimage_start;
 int zimage_size;
@@ -66,16 +67,11 @@
 #endif /* CONFIG_VGA_CONSOLE */
 
 extern int CRT_tstc(void);
-extern void of_init(void *handler);
-extern int of_finddevice(const char *device_specifier, int *phandle);
-extern int of_getprop(int phandle, const char *name, void *buf, int buflen,
-               int *size);
 extern int vga_init(unsigned char *ISA_mem);
 extern void gunzip(void *, int, unsigned char *, int *);
-
-extern void _put_MSR(unsigned int val);
 extern unsigned long serial_init(int chan, void *ignored);
 extern void serial_fixups(void);
+extern unsigned long mpc10x_get_mem_size(int mem_map);
 
 void
 writel(unsigned int val, unsigned int address)
@@ -120,15 +116,12 @@
 
 unsigned long
 decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum,
-                 RESIDUAL *residual, void *OFW_interface)
+                 RESIDUAL *residual)
 {
        int timer = 0;
        extern unsigned long start;
        char *cp, ch;
        unsigned long TotalMemory;
-       int dev_handle;
-       int mem_info[2];
-       int res, size;
        unsigned char board_type;
        unsigned char base_mod;
        int start_multi = 0;
@@ -142,6 +135,11 @@
        vga_init((unsigned char *)0xC0000000);
 #endif /* CONFIG_VGA_CONSOLE */
 
+       /* 
+        * Find out how much memory we have.
+        */
+       TotalMemory = mpc10x_get_mem_size(MPC10X_MEM_MAP_A);
+
        /*
         * Tell the user where we were loaded at and where we were relocated
         * to for debugging this process.
@@ -218,47 +216,6 @@
        } else {
                /* Tell the user we didn't find anything. */
                puts("No residual data found.\n");
-
-               /* Assume 32M in the absence of more info... */
-               TotalMemory = 0x02000000;
-
-               /*
-                * This is a 'best guess' check.  We want to make sure
-                * we don't try this on a PReP box without OF
-                *     -- Cort
-                */
-               while (OFW_interface && ((unsigned long)OFW_interface < 
0x10000000) )
-               {
-                       /* We need to restore the slightly inaccurate
-                        * MSR so that OpenFirmware will behave. -- Tom
-                        */
-                       _put_MSR(orig_MSR);
-                       of_init(OFW_interface);
-
-                       /* get handle to memory description */
-                       res = of_finddevice("/[EMAIL PROTECTED]",
-                                           &dev_handle);
-                       if (res)
-                               break;
-
-                       /* get the info */
-                       res = of_getprop(dev_handle,
-                                        "reg",
-                                        mem_info,
-                                        sizeof(mem_info),
-                                        &size);
-                       if (res)
-                               break;
-
-                       TotalMemory = mem_info[1];
-                       break;
-               }
-
-               hold_residual->TotalMemory = TotalMemory;
-               residual = hold_residual;
-
-               /* Enforce a sane MSR for booting. */
-               _put_MSR(MSR_IP);
         }
 
        /* assume the chunk below 8M is free */
@@ -361,6 +318,11 @@
                rec->data[1] = 0;
                rec->size = sizeof(struct bi_record) + 2 *
                        sizeof(unsigned long);
+               rec = (struct bi_record *)((unsigned long)rec + rec->size);
+
+               rec->tag = BI_MEMSIZE;
+               rec->data[0] = TotalMemory;
+               rec->size = sizeof(struct bi_record) + sizeof(unsigned long);
                rec = (struct bi_record *)((unsigned long)rec + rec->size);
 
                rec->tag = BI_CMD_LINE;
===== arch/ppc/kernel/prep_setup.c 1.55 vs edited =====
--- 1.55/arch/ppc/kernel/prep_setup.c   Thu May 30 11:12:10 2002
+++ edited/arch/ppc/kernel/prep_setup.c Wed Jul  3 16:50:08 2002
@@ -57,6 +57,7 @@
 #include <asm/keyboard.h>
 #include <asm/vga.h>
 #include <asm/time.h>
+#include <asm/bootinfo.h>
 
 #include "local_irq.h"
 #include "i8259.h"
@@ -743,34 +744,15 @@
 #endif /* CONFIG_SMP */
 
 /*
- * This finds the amount of physical ram and does necessary
- * setup for prep.  This is pretty architecture specific so
- * this will likely stay separate from the pmac.
- * -- Cort
+ * What ever boots us must pass in the ammount of memory.
  */
 static unsigned long __init
 prep_find_end_of_memory(void)
 {
-       unsigned long total = 0;
-       extern unsigned int boot_mem_size;
-
-#ifdef CONFIG_PREP_RESIDUAL    
-       total = res->TotalMemory;
-#endif 
-
-       if (total == 0 && boot_mem_size != 0)
-               total = boot_mem_size;
-       else if (total == 0) {
-               /*
-                * I need a way to probe the amount of memory if the residual
-                * data doesn't contain it. -- Cort
-                */
-               total = 0x02000000;
-               printk(KERN_INFO "Ramsize from residual data was 0"
-                        " -- defaulting to %ldM\n", total>>20);
-       }
+       if (!boot_mem_size)
+               panic("Memory size is 0? Bleah!");
 
-       return (total);
+       return boot_mem_size;
 }
 
 /*
===== arch/ppc/boot/common/misc-simple.c 1.22 vs edited =====
--- 1.22/arch/ppc/boot/common/misc-simple.c     Thu May 30 11:29:39 2002
+++ edited/arch/ppc/boot/common/misc-simple.c   Wed Jul  3 16:38:18 2002
@@ -30,6 +30,7 @@
 #include <platforms/ebony.h>
 #endif /* CONFIG_EBONY */
 
+#include "mpc10x.h"
 #include "nonstdio.h"
 #include "zlib.h"
 
@@ -67,6 +68,7 @@
 extern unsigned long start;
 
 extern int CRT_tstc(void);
+extern unsigned long mpc10x_get_mem_size(int map);
 extern unsigned long serial_init(int chan, void *ignored);
 extern void serial_close(unsigned long com_port);
 extern void gunzip(void *, int, unsigned char *, int *);
@@ -78,6 +80,7 @@
        int timer = 0;
        char *cp, ch;
        struct bi_record *rec, *birecs;
+       unsigned long TotalMemory = 0;
 
        serial_fixups();
        com_port = serial_init(0, NULL);
@@ -89,6 +92,14 @@
        __asm__ __volatile__("eieio");                  /* enforce ordering */
 #endif
 
+#ifdef CONFIG_LOPEC
+       /*
+        * This should work on any board with an MPC10X which is properly
+        * initalized.
+        */
+       TotalMemory = mpc10x_get_mem_size(MPC10X_MEM_MAP_B);
+#endif
+
        /* assume the chunk below 8M is free */
        end_avail = (char *)0x00800000;
 
@@ -206,6 +217,13 @@
        rec->tag = BI_FIRST;
        rec->size = sizeof(struct bi_record);
        rec = (struct bi_record *)((unsigned long)rec + rec->size);
+
+       if ( TotalMemory ) {
+               rec->tag = BI_MEMSIZE;
+               rec->data[0] = TotalMemory;
+               rec->size = sizeof(struct bi_record) + sizeof(unsigned long);
+               rec = (struct bi_record *)((unsigned long)rec + rec->size);
+       }
 
        rec->tag = BI_CMD_LINE;
        memcpy( (char *)rec->data, cmd_line, strlen(cmd_line)+1);
===== arch/ppc/boot/prep/Makefile 1.38 vs edited =====
--- 1.38/arch/ppc/boot/prep/Makefile    Mon Mar 11 22:07:28 2002
+++ edited/arch/ppc/boot/prep/Makefile  Wed Jul  3 16:38:18 2002
@@ -23,9 +23,10 @@
 endif
 
 LD_ARGS                                = -T ../ld.script -Ttext 0x00800000 
-Bstatic
-obj-y                          := head.o ../simple/legacy.o misc.o of1275.o \
+obj-y                          := head.o ../simple/legacy.o misc.o \
                                        ../common/util.o ../common/string.o \
-                                       ../common/misc-common.o
+                                       ../common/misc-common.o \
+                                       ../common/mpc10x_memory.o
 OBJCOPY_ARGS                   = -O elf32-powerpc
 LIBS                           = ../lib/zlib.a
 
@@ -51,7 +52,7 @@
        $(LD) $(LD_ARGS) -o $@ $(obj-y) image.o $(LIBS)
        $(OBJCOPY) $(OBJCOPY_ARGS) $@ $@ -R .comment -R .stab -R .stabstr
        $(MKPREP) -pbp $@ ../images/[EMAIL PROTECTED]
-       rm -f $@
+       #rm -f $@
 
 zImage.initrd: $(obj-y) $(LIBS) ../ld.script ../images/vmlinux.gz $(MKPREP) \
                ../common/dummy.o
===== arch/ppc/boot/prep/head.S 1.24 vs edited =====
--- 1.24/arch/ppc/boot/prep/head.S      Mon Mar 11 22:07:28 2002
+++ edited/arch/ppc/boot/prep/head.S    Wed Jul  3 16:38:18 2002
@@ -38,10 +38,6 @@
        isync
 
        mr      r11,r3          /* Save pointer to residual/board data */
-       mr      r25,r5          /* Save OFW pointer */
-
-       /* Save the original MSR value */
-       mfmsr   r26
 
        /* Establish default MSR value */
        li      r3,MSR_IP|MSR_FP
@@ -114,17 +110,11 @@
        li      r2,0x000F               /* Mask pointer to 16-byte boundary */
        andc    r1,r1,r2
 
-       /* Store the original MSR into 'orig_MSR' */
-       lis     r3,[EMAIL PROTECTED]
-       ori     r3,r3,[EMAIL PROTECTED]
-       stw     r26,0(r3)
-
 /* Run loader */
        mr      r3,r8                   /* Load point */
        mr      r4,r7                   /* Program length */
        mr      r5,r6                   /* Checksum */
        mr      r6,r11                  /* Residual data */
-       mr      r7,r25                  /* OFW interfaces */
        bl      decompress_kernel
 
        /*
===== arch/ppc/boot/prep/misc.c 1.40 vs edited =====
--- 1.40/arch/ppc/boot/prep/misc.c      Thu Apr 11 13:54:51 2002
+++ edited/arch/ppc/boot/prep/misc.c    Wed Jul  3 16:38:18 2002
@@ -20,6 +20,8 @@
 #include <asm/bootinfo.h>
 #include <asm/mmu.h>
 #include <asm/byteorder.h>
+
+#include "mpc10x.h"
 #include "nonstdio.h"
 #include "zlib.h"
 
@@ -51,7 +53,6 @@
 RESIDUAL hold_resid_buf;
 RESIDUAL *hold_residual = &hold_resid_buf;
 unsigned long initrd_size = 0;
-unsigned long orig_MSR;
 
 char *zimage_start;
 int zimage_size;
@@ -66,16 +67,11 @@
 #endif /* CONFIG_VGA_CONSOLE */
 
 extern int CRT_tstc(void);
-extern void of_init(void *handler);
-extern int of_finddevice(const char *device_specifier, int *phandle);
-extern int of_getprop(int phandle, const char *name, void *buf, int buflen,
-               int *size);
 extern int vga_init(unsigned char *ISA_mem);
 extern void gunzip(void *, int, unsigned char *, int *);
-
-extern void _put_MSR(unsigned int val);
 extern unsigned long serial_init(int chan, void *ignored);
 extern void serial_fixups(void);
+extern unsigned long mpc10x_get_mem_size(int mem_map);
 
 void
 writel(unsigned int val, unsigned int address)
@@ -120,15 +116,12 @@
 
 unsigned long
 decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum,
-                 RESIDUAL *residual, void *OFW_interface)
+                 RESIDUAL *residual)
 {
        int timer = 0;
        extern unsigned long start;
        char *cp, ch;
        unsigned long TotalMemory;
-       int dev_handle;
-       int mem_info[2];
-       int res, size;
        unsigned char board_type;
        unsigned char base_mod;
        int start_multi = 0;
@@ -142,6 +135,11 @@
        vga_init((unsigned char *)0xC0000000);
 #endif /* CONFIG_VGA_CONSOLE */
 
+       /* 
+        * Find out how much memory we have.
+        */
+       TotalMemory = mpc10x_get_mem_size(MPC10X_MEM_MAP_A);
+
        /*
         * Tell the user where we were loaded at and where we were relocated
         * to for debugging this process.
@@ -218,47 +216,6 @@
        } else {
                /* Tell the user we didn't find anything. */
                puts("No residual data found.\n");
-
-               /* Assume 32M in the absence of more info... */
-               TotalMemory = 0x02000000;
-
-               /*
-                * This is a 'best guess' check.  We want to make sure
-                * we don't try this on a PReP box without OF
-                *     -- Cort
-                */
-               while (OFW_interface && ((unsigned long)OFW_interface < 
0x10000000) )
-               {
-                       /* We need to restore the slightly inaccurate
-                        * MSR so that OpenFirmware will behave. -- Tom
-                        */
-                       _put_MSR(orig_MSR);
-                       of_init(OFW_interface);
-
-                       /* get handle to memory description */
-                       res = of_finddevice("/[EMAIL PROTECTED]",
-                                           &dev_handle);
-                       if (res)
-                               break;
-
-                       /* get the info */
-                       res = of_getprop(dev_handle,
-                                        "reg",
-                                        mem_info,
-                                        sizeof(mem_info),
-                                        &size);
-                       if (res)
-                               break;
-
-                       TotalMemory = mem_info[1];
-                       break;
-               }
-
-               hold_residual->TotalMemory = TotalMemory;
-               residual = hold_residual;
-
-               /* Enforce a sane MSR for booting. */
-               _put_MSR(MSR_IP);
         }
 
        /* assume the chunk below 8M is free */
@@ -361,6 +318,11 @@
                rec->data[1] = 0;
                rec->size = sizeof(struct bi_record) + 2 *
                        sizeof(unsigned long);
+               rec = (struct bi_record *)((unsigned long)rec + rec->size);
+
+               rec->tag = BI_MEMSIZE;
+               rec->data[0] = TotalMemory;
+               rec->size = sizeof(struct bi_record) + sizeof(unsigned long);
                rec = (struct bi_record *)((unsigned long)rec + rec->size);
 
                rec->tag = BI_CMD_LINE;
===== arch/ppc/boot/simple/Makefile 1.7 vs edited =====
--- 1.7/arch/ppc/boot/simple/Makefile   Mon Jul  1 10:43:25 2002
+++ edited/arch/ppc/boot/simple/Makefile        Wed Jul  3 16:38:18 2002
@@ -66,7 +66,7 @@
 ifeq 
($(CONFIG_MCPN765)$(CONFIG_MVME5100)$(CONFIG_PRPMC750)$(CONFIG_PRPMC800)$(CONFIG_LOPEC)$(CONFIG_PPLUS),y)
 ZIMAGE                         := zImage-PPLUS
 ZIMAGEINITRD                   := zImage.initrd-PPLUS
-EXTRA                          := direct.o
+EXTRA                          := direct.o ../common/mpc10x_memory.o
 TFTPIMAGE                      := /tftpboot/zImage.pplus
 ZNETBOOT                       := zImage.pplus
 ZNETBOOTRD                     := zImage.initrd.pplus
===== arch/ppc/platforms/lopec_setup.c 1.19 vs edited =====
--- 1.19/arch/ppc/platforms/lopec_setup.c       Wed Jun 19 12:30:01 2002
+++ edited/arch/ppc/platforms/lopec_setup.c     Wed Jul  3 16:38:18 2002
@@ -332,7 +332,7 @@
 static unsigned long __init
 lopec_find_end_of_memory(void)
 {
-       return mpc10x_get_mem_size(MPC10X_MEM_MAP_B);
+       return boot_mem_size;
 }
 
 TODC_ALLOC();
===== arch/ppc/platforms/prep_setup.c 1.82 vs edited =====
--- 1.82/arch/ppc/platforms/prep_setup.c        Thu May 30 12:38:36 2002
+++ edited/arch/ppc/platforms/prep_setup.c      Wed Jul  3 16:49:12 2002
@@ -59,6 +59,7 @@
 #include <asm/time.h>
 #include <asm/i8259.h>
 #include <asm/open_pic.h>
+#include <asm/bootinfo.h>
 
 unsigned char ucSystemType;
 unsigned char ucBoardRev;
@@ -1103,34 +1104,15 @@
 #endif /* CONFIG_SMP */
 
 /*
- * This finds the amount of physical ram and does necessary
- * setup for prep.  This is pretty architecture specific so
- * this will likely stay separate from the pmac.
- * -- Cort
+ * What ever boots us must pass in the ammount of memory.
  */
 static unsigned long __init
 prep_find_end_of_memory(void)
 {
-       unsigned long total = 0;
-       extern unsigned int boot_mem_size;
-
-#ifdef CONFIG_PREP_RESIDUAL    
-       total = res->TotalMemory;
-#endif 
-
-       if (total == 0 && boot_mem_size != 0)
-               total = boot_mem_size;
-       else if (total == 0) {
-               /*
-                * I need a way to probe the amount of memory if the residual
-                * data doesn't contain it. -- Cort
-                */
-               total = 0x02000000;
-               printk(KERN_INFO "Ramsize from residual data was 0"
-                        " -- defaulting to %ldM\n", total>>20);
-       }
+       if (boot_mem_size == 0)
+               panic("No Memory? Bleah!");
 
-       return (total);
+       return boot_mem_size;
 }
 
 /*

Reply via email to