linux-dm8000: add fixup-memsize patch to use memory size passed from bootloader
authorFelix Domke <tmbinc@elitedvb.net>
Thu, 23 Oct 2008 21:46:21 +0000 (23:46 +0200)
committerFelix Domke <tmbinc@elitedvb.net>
Thu, 23 Oct 2008 21:46:21 +0000 (23:46 +0200)
packages/linux/linux-dm8000.bb
packages/linux/linux-dm8000/linux-2.6.12-fixup-memsize.patch [new file with mode: 0644]

index 4787242..a848d62 100644 (file)
@@ -29,6 +29,7 @@ SRC_URI += "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${KV}.tar.bz2 \
        file://linuxmips-2.6.12-gcc4-compile-fix.patch;patch=1;pnum=1 \
        file://linuxmips-2.6.12-gdb-fix.patch;patch=1;pnum=1 \
        file://linux-2.6.12-brcm-fix-minipci.patch;patch=1;pnum=1 \
+       file://linux-2.6.12-fixup-memsize.patch;patch=1;pnum=1 \
        http://trappist.elis.ugent.be/~mronsse/cdfs/download/cdfs-2.6.12.tar.bz2"
 
 S = "${WORKDIR}/stblinux-2.6.12"
diff --git a/packages/linux/linux-dm8000/linux-2.6.12-fixup-memsize.patch b/packages/linux/linux-dm8000/linux-2.6.12-fixup-memsize.patch
new file mode 100644 (file)
index 0000000..4564f91
--- /dev/null
@@ -0,0 +1,59 @@
+Index: stblinux-2.6.12/arch/mips/kernel/setup.c
+===================================================================
+--- stblinux-2.6.12.orig/arch/mips/kernel/setup.c      2008-04-15 02:13:42.000000000 +0200
++++ stblinux-2.6.12/arch/mips/kernel/setup.c   2008-04-15 02:25:13.000000000 +0200
+@@ -472,11 +472,29 @@
+  */
+ unsigned long get_RAM_size(void);
++extern int *_prom_envp;
++#define prom_envp(index) ((char *)(long)_prom_envp[(index)])
++static char *prom_getenv(char *envname)
++{
++      int i, index=0;
++
++      i = strlen(envname);
++
++      while (prom_envp(index)) {
++              if ((strncmp(envname, prom_envp(index), i) == 0) && (prom_envp(index)[i] == '='))
++                      return(prom_envp(index) + i + 1);
++              index++;
++      }
++
++      return NULL;
++}
++
+ static inline void brcm_default_boot_mem(void)
+ {
+       int ramSizeMB = get_RAM_size() >> 20;
+       int size;
+       char msg[40];
++      const char *memsize_str;
+       
+       if (ramSizeMB <= 32) 
+       {
+@@ -502,11 +520,20 @@
+               size = 32;
+ #endif
+       }
+-      sprintf(msg, "Using %dMB for memory, overwrite by passing mem=xx\n", 
+-                                      size);
+-      uart_puts(msg);
+-        brcm_insert_ram_node(0, size<<20, BOOT_MEM_RAM, &brcm_bm);
++      memsize_str = prom_getenv("memsize");
++      if (memsize_str)
++      {
++              int memsize = simple_strtol(memsize_str, NULL, 0);
++              brcm_insert_ram_node(0, memsize<<20, BOOT_MEM_RAM, &brcm_bm);
++              printk("---> memsize from bootloader: %d\n", memsize);
++      } else
++      {
++              sprintf(msg, "Using %dMB for memory, overwrite by passing mem=xx\n", 
++                                              size);
++              uart_puts(msg);
++              brcm_insert_ram_node(0, size<<20, BOOT_MEM_RAM, &brcm_bm);
++      }
+ }