ramips: update mips multi-machine stuff
authorGabor Juhos <juhosg@openwrt.org>
Sat, 30 Jan 2010 15:25:03 +0000 (15:25 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Sat, 30 Jan 2010 15:25:03 +0000 (15:25 +0000)
SVN-Revision: 19400

target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
target/linux/ramips/files/arch/mips/ralink/common/prom.c
target/linux/ramips/files/arch/mips/ralink/common/setup.c
target/linux/ramips/files/arch/mips/ralink/rt288x/mach-rt-n15.c
target/linux/ramips/files/arch/mips/ralink/rt288x/mach-wzr-agl300nh.c
target/linux/ramips/files/arch/mips/ralink/rt305x/mach-dir-300-revb.c
target/linux/ramips/files/arch/mips/ralink/rt305x/mach-fonera20n.c
target/linux/ramips/files/arch/mips/ralink/rt305x/mach-v22rw-2x2.c
target/linux/ramips/files/arch/mips/ralink/rt305x/mach-whr-g300n.c
target/linux/ramips/patches-2.6.30/400-mips-multi-machine-update.patch [new file with mode: 0644]
target/linux/ramips/patches-2.6.32/400-mips-multi-machine-update.patch [new file with mode: 0644]

index 08e939d5d90dd494e7334b4e959bd5de59d49ad8..22e2b6462792801b2d2a5b909662bf784ebbf486 100644 (file)
@@ -9,6 +9,8 @@
  * by the Free Software Foundation.
  */
 
+#include <asm/mips_machine.h>
+
 enum ramips_mach_type {
        RAMIPS_MACH_GENERIC,
        /* RT2880 based machines */
@@ -23,5 +25,3 @@ enum ramips_mach_type {
        RAMIPS_MACH_WHR_G300N,          /* Buffalo WHR-G300N */
        RAMIPS_MACH_FONERA20N,          /* La Fonera 2.0N */
 };
-
-extern enum ramips_mach_type ramips_mach;
index 154d5f9f2600e155aed9d157e5365339908e1dcd..fb37274fff0a36df321dafdd4699cc1fe934506c 100644 (file)
 #include <asm/mach-ralink/machine.h>
 #include <ralink_soc.h>
 
-struct board_rec {
-       char                    *name;
-       enum ramips_mach_type   mach_type;
-};
-
-static struct board_rec boards[] __initdata = {
-       {
-               .name           = "RT-N15",
-               .mach_type      = RAMIPS_MACH_RT_N15,
-       }, {
-               .name           = "WZR-AGL300NH",
-               .mach_type      = RAMIPS_MACH_WZR_AGL300NH,
-       }, {
-               .name           = "DIR-300-revB",
-               .mach_type      = RAMIPS_MACH_DIR_300_REVB,
-       }, {
-               .name           = "V22RW-2X2",
-               .mach_type      = RAMIPS_MACH_V22RW_2X2,
-       }, {
-               .name           = "WHR-G300N",
-               .mach_type      = RAMIPS_MACH_WHR_G300N,
-       }, {
-               .name           = "FONERA20N",
-               .mach_type      = RAMIPS_MACH_FONERA20N,
-       }
-};
-
 static inline void *to_ram_addr(void *addr)
 {
        u32 base;
@@ -164,20 +137,6 @@ static __init char *prom_append_env(char **env, const char *envname)
 #undef PROM_MAX_ENVS
 }
 
-static __init int ramips_board_setup(char *name)
-{
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(boards); i++)
-               if (strcmp(name, boards[i].name) == 0) {
-                       ramips_mach = boards[i].mach_type;
-                       break;
-               }
-
-       return 1;
-}
-__setup("board=", ramips_board_setup);
-
 void __init prom_init(void)
 {
        int argc;
index 3030fcd1537e58ee058ec6d88a604323af04f4aa..877d0b7def46a3dcb525f1d6df2c40e18b20f5ef 100644 (file)
 
 #include <asm/bootinfo.h>
 #include <asm/addrspace.h>
-#include <asm/mips_machine.h>
 
 #include <asm/mach-ralink/common.h>
 #include <asm/mach-ralink/machine.h>
 #include <ralink_soc.h>
 
 unsigned char ramips_sys_type[RAMIPS_SYS_TYPE_LEN];
-enum ramips_mach_type ramips_mach = RAMIPS_MACH_GENERIC;
 
 const char *get_system_type(void)
 {
@@ -76,9 +74,11 @@ void __init plat_mem_setup(void)
        ramips_soc_setup();
 }
 
+__setup("board=", mips_machtype_setup);
+
 static int __init ramips_machine_setup(void)
 {
-       mips_machine_setup(ramips_mach);
+       mips_machine_setup();
        return 0;
 }
 
@@ -88,4 +88,5 @@ static void __init ramips_generic_init(void)
 {
 }
 
-MIPS_MACHINE(RAMIPS_MACH_GENERIC, "Generic Ralink board", ramips_generic_init);
+MIPS_MACHINE(RAMIPS_MACH_GENERIC, "Generic", "Generic Ralink board",
+            ramips_generic_init);
index 26f08845ba7f8e87214766701f21427b04381053..bc269bba1757a25ee110ef5798bfcaea37c1b44f 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/mtd/physmap.h>
 #include <linux/leds.h>
 
-#include <asm/mips_machine.h>
 #include <asm/mach-ralink/machine.h>
 #include <asm/mach-ralink/dev_gpio_leds.h>
 #include <asm/mach-ralink/rt288x.h>
@@ -85,4 +84,4 @@ static void __init rt_n15_init(void)
                                  rt_n15_leds_gpio);
 }
 
-MIPS_MACHINE(RAMIPS_MACH_RT_N15, "Asus RT-N15", rt_n15_init);
+MIPS_MACHINE(RAMIPS_MACH_RT_N15, "RT-N15", "Asus RT-N15", rt_n15_init);
index c0a09cfb326c610fa6af93a8ff2548dbd5e1c509..b4550384fd230f573f24b7accb37160a52eb4f4d 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/mtd/physmap.h>
 #include <linux/leds.h>
 
-#include <asm/mips_machine.h>
 #include <asm/mach-ralink/machine.h>
 #include <asm/mach-ralink/dev_gpio_leds.h>
 #include <asm/mach-ralink/rt288x.h>
@@ -102,4 +101,5 @@ static void __init wzr_agl300nh_init(void)
 */
 }
 
-MIPS_MACHINE(RAMIPS_MACH_WZR_AGL300NH, "Buffalo WZR-AGL300NH", wzr_agl300nh_init);
+MIPS_MACHINE(RAMIPS_MACH_WZR_AGL300NH, "WZR-AGL300NH",
+            "Buffalo WZR-AGL300NH", wzr_agl300nh_init);
index 86152b99ed639767bd59ec62cd0cc2933f197879..93d28a5b2a62e0207c9f6d57d9f9c86301af1bce 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/mtd/physmap.h>
 #include <linux/leds.h>
 
-#include <asm/mips_machine.h>
 #include <asm/mach-ralink/machine.h>
 #include <asm/mach-ralink/dev_gpio_leds.h>
 #include <asm/mach-ralink/rt305x.h>
@@ -96,4 +95,5 @@ static void __init dir_300b_init(void)
                                  dir_300b_leds_gpio);
 }
 
-MIPS_MACHINE(RAMIPS_MACH_DIR_300_REVB, "D-Link DIR-300 revB", dir_300b_init);
+MIPS_MACHINE(RAMIPS_MACH_DIR_300_REVB, "DIR-300-revB", "D-Link DIR-300 revB",
+            dir_300b_init);
index 3a444caeb8018b54993c5d5b8eb06657546a8fd4..e2cc627c54813dafd011e501ef945475b947d45d 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/mtd/physmap.h>
 #include <linux/leds.h>
 
-#include <asm/mips_machine.h>
 #include <asm/mach-ralink/machine.h>
 #include <asm/mach-ralink/dev_gpio_leds.h>
 #include <asm/mach-ralink/rt305x.h>
@@ -97,4 +96,5 @@ static void __init fonera20n_init(void)
        rt305x_register_ethernet();
 }
 
-MIPS_MACHINE(RAMIPS_MACH_FONERA20N, "La Fonera 2.0N", fonera20n_init);
+MIPS_MACHINE(RAMIPS_MACH_FONERA20N, "FONERA20N", "La Fonera 2.0N",
+            fonera20n_init);
index 64466e2ee51945eb75aeb1a529585f906120bd31..f819d2b60a3f7747088f832f7e8bb9d33bbe2e2f 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/mtd/physmap.h>
 #include <linux/leds.h>
 
-#include <asm/mips_machine.h>
 #include <asm/mach-ralink/machine.h>
 #include <asm/mach-ralink/dev_gpio_leds.h>
 #include <asm/mach-ralink/rt305x.h>
@@ -90,5 +89,5 @@ static void __init v22rw_2x2_init(void)
                                  v22rw_2x2_leds_gpio);
 }
 
-MIPS_MACHINE(RAMIPS_MACH_V22RW_2X2, "Ralink AP-RT3052-V22RW-2X2",
+MIPS_MACHINE(RAMIPS_MACH_V22RW_2X2, "V22RW-2X2", "Ralink AP-RT3052-V22RW-2X2",
             v22rw_2x2_init);
index e4c5988d604d3898ba6b357ab0c404bef4519e83..34785d9f1ee6713153968375dedff83b690c1cd3 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/mtd/physmap.h>
 #include <linux/leds.h>
 
-#include <asm/mips_machine.h>
 #include <asm/mach-ralink/machine.h>
 #include <asm/mach-ralink/dev_gpio_leds.h>
 #include <asm/mach-ralink/rt305x.h>
@@ -97,4 +96,5 @@ static void __init whr_g300n_init(void)
                                  whr_g300n_leds_gpio);
 }
 
-MIPS_MACHINE(RAMIPS_MACH_WHR_G300N, "Buffalo WHR-G300N", whr_g300n_init);
+MIPS_MACHINE(RAMIPS_MACH_WHR_G300N, "WHR-G300N", "Buffalo WHR-G300N",
+            whr_g300n_init);
diff --git a/target/linux/ramips/patches-2.6.30/400-mips-multi-machine-update.patch b/target/linux/ramips/patches-2.6.30/400-mips-multi-machine-update.patch
new file mode 100644 (file)
index 0000000..d635879
--- /dev/null
@@ -0,0 +1,134 @@
+--- a/arch/mips/kernel/mips_machine.c
++++ b/arch/mips/kernel/mips_machine.c
+@@ -7,12 +7,13 @@
+  *
+  */
+ #include <linux/mm.h>
++#include <linux/string.h>
+ #include <asm/mips_machine.h>
+-#include <asm/bootinfo.h>
+ static struct list_head mips_machines __initdata =
+               LIST_HEAD_INIT(mips_machines);
++static char *mips_machid __initdata;
+ char *mips_machine_name = "Unknown";
+@@ -55,20 +56,65 @@ void __init mips_machine_set_name(char *
+       }
+ }
+-void __init mips_machine_setup(unsigned long machtype)
++void __init mips_machine_setup(void)
+ {
+       struct mips_machine *mach;
+-      mach = mips_machine_find(machtype);
++      mach = mips_machine_find(mips_machtype);
+       if (!mach) {
+-              printk(KERN_ALERT "MIPS: no machine registered for "
+-                      "machtype %lu\n", machtype);
++              printk(KERN_WARNING "MIPS: no machine registered for "
++                      "machtype %lu\n", mips_machtype);
+               return;
+       }
+       mips_machine_set_name(mach->mach_name);
+-      printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
++      printk(KERN_NOTICE "MIPS: machine is %s\n", mips_machine_name);
+       if (mach->mach_setup)
+               mach->mach_setup();
+ }
++
++int __init mips_machtype_setup(char *id)
++{
++      if (mips_machid == NULL)
++              mips_machid = id;
++
++      return 1;
++}
++
++__setup("machtype=", mips_machtype_setup);
++
++static int __init mips_machtype_init(void)
++{
++      struct list_head *this;
++      struct mips_machine *mach;
++
++      if (mips_machid == NULL)
++              return 0;
++
++      list_for_each(this, &mips_machines) {
++              mach = list_entry(this, struct mips_machine, list);
++              if (mach->mach_id == NULL)
++                      continue;
++
++              if (strcmp(mach->mach_id, mips_machid) == 0) {
++                      mips_machtype = mach->mach_type;
++                      return 0;
++              }
++      }
++
++      printk(KERN_WARNING
++             "MIPS: no machine found for id: '%s', registered machines:\n",
++             mips_machid);
++      printk(KERN_WARNING "%32s %s\n", "id", "name");
++
++      list_for_each(this, &mips_machines) {
++              mach = list_entry(this, struct mips_machine, list);
++              printk(KERN_WARNING "%32s %s\n",
++                     mach->mach_id ? mach->mach_id : "", mach->mach_name);
++      }
++
++      return 0;
++}
++
++core_initcall(mips_machtype_init);
+--- a/arch/mips/include/asm/mips_machine.h
++++ b/arch/mips/include/asm/mips_machine.h
+@@ -13,25 +13,33 @@
+ #include <linux/init.h>
+ #include <linux/list.h>
++#include <asm/bootinfo.h>
++
+ struct mips_machine {
+       unsigned long           mach_type;
+-      void                    (*mach_setup)(void);
++      char                    *mach_id;
+       char                    *mach_name;
++      void                    (*mach_setup)(void);
+       struct list_head        list;
+ };
+ void mips_machine_register(struct mips_machine *) __init;
+-void mips_machine_setup(unsigned long machtype) __init;
++void mips_machine_setup(void) __init;
++int  mips_machtype_setup(char *id) __init;
+ void mips_machine_set_name(char *name) __init;
+ extern char *mips_machine_name;
+-#define MIPS_MACHINE(_type, _name, _setup)                    \
+-static char machine_name_##_type[] __initdata = _name;                \
++#define MIPS_MACHINE(_type, _id, _name, _setup)               \
++static const char machine_name_##_type[] __initconst          \
++                      __aligned(1) = _name;                   \
++static const char machine_id_##_type[] __initconst            \
++                      __aligned(1) = _id;                     \
+ static struct mips_machine machine_##_type __initdata =               \
+ {                                                             \
+       .mach_type      = _type,                                \
+-      .mach_name      = machine_name_##_type,                 \
++      .mach_id        = (char *) machine_id_##_type,          \
++      .mach_name      = (char *) machine_name_##_type,        \
+       .mach_setup     = _setup,                               \
+ };                                                            \
+                                                               \
+@@ -44,4 +52,3 @@ static int __init register_machine_##_ty
+ pure_initcall(register_machine_##_type)
+ #endif /* __ASM_MIPS_MACHINE_H */
+-
diff --git a/target/linux/ramips/patches-2.6.32/400-mips-multi-machine-update.patch b/target/linux/ramips/patches-2.6.32/400-mips-multi-machine-update.patch
new file mode 100644 (file)
index 0000000..d635879
--- /dev/null
@@ -0,0 +1,134 @@
+--- a/arch/mips/kernel/mips_machine.c
++++ b/arch/mips/kernel/mips_machine.c
+@@ -7,12 +7,13 @@
+  *
+  */
+ #include <linux/mm.h>
++#include <linux/string.h>
+ #include <asm/mips_machine.h>
+-#include <asm/bootinfo.h>
+ static struct list_head mips_machines __initdata =
+               LIST_HEAD_INIT(mips_machines);
++static char *mips_machid __initdata;
+ char *mips_machine_name = "Unknown";
+@@ -55,20 +56,65 @@ void __init mips_machine_set_name(char *
+       }
+ }
+-void __init mips_machine_setup(unsigned long machtype)
++void __init mips_machine_setup(void)
+ {
+       struct mips_machine *mach;
+-      mach = mips_machine_find(machtype);
++      mach = mips_machine_find(mips_machtype);
+       if (!mach) {
+-              printk(KERN_ALERT "MIPS: no machine registered for "
+-                      "machtype %lu\n", machtype);
++              printk(KERN_WARNING "MIPS: no machine registered for "
++                      "machtype %lu\n", mips_machtype);
+               return;
+       }
+       mips_machine_set_name(mach->mach_name);
+-      printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
++      printk(KERN_NOTICE "MIPS: machine is %s\n", mips_machine_name);
+       if (mach->mach_setup)
+               mach->mach_setup();
+ }
++
++int __init mips_machtype_setup(char *id)
++{
++      if (mips_machid == NULL)
++              mips_machid = id;
++
++      return 1;
++}
++
++__setup("machtype=", mips_machtype_setup);
++
++static int __init mips_machtype_init(void)
++{
++      struct list_head *this;
++      struct mips_machine *mach;
++
++      if (mips_machid == NULL)
++              return 0;
++
++      list_for_each(this, &mips_machines) {
++              mach = list_entry(this, struct mips_machine, list);
++              if (mach->mach_id == NULL)
++                      continue;
++
++              if (strcmp(mach->mach_id, mips_machid) == 0) {
++                      mips_machtype = mach->mach_type;
++                      return 0;
++              }
++      }
++
++      printk(KERN_WARNING
++             "MIPS: no machine found for id: '%s', registered machines:\n",
++             mips_machid);
++      printk(KERN_WARNING "%32s %s\n", "id", "name");
++
++      list_for_each(this, &mips_machines) {
++              mach = list_entry(this, struct mips_machine, list);
++              printk(KERN_WARNING "%32s %s\n",
++                     mach->mach_id ? mach->mach_id : "", mach->mach_name);
++      }
++
++      return 0;
++}
++
++core_initcall(mips_machtype_init);
+--- a/arch/mips/include/asm/mips_machine.h
++++ b/arch/mips/include/asm/mips_machine.h
+@@ -13,25 +13,33 @@
+ #include <linux/init.h>
+ #include <linux/list.h>
++#include <asm/bootinfo.h>
++
+ struct mips_machine {
+       unsigned long           mach_type;
+-      void                    (*mach_setup)(void);
++      char                    *mach_id;
+       char                    *mach_name;
++      void                    (*mach_setup)(void);
+       struct list_head        list;
+ };
+ void mips_machine_register(struct mips_machine *) __init;
+-void mips_machine_setup(unsigned long machtype) __init;
++void mips_machine_setup(void) __init;
++int  mips_machtype_setup(char *id) __init;
+ void mips_machine_set_name(char *name) __init;
+ extern char *mips_machine_name;
+-#define MIPS_MACHINE(_type, _name, _setup)                    \
+-static char machine_name_##_type[] __initdata = _name;                \
++#define MIPS_MACHINE(_type, _id, _name, _setup)               \
++static const char machine_name_##_type[] __initconst          \
++                      __aligned(1) = _name;                   \
++static const char machine_id_##_type[] __initconst            \
++                      __aligned(1) = _id;                     \
+ static struct mips_machine machine_##_type __initdata =               \
+ {                                                             \
+       .mach_type      = _type,                                \
+-      .mach_name      = machine_name_##_type,                 \
++      .mach_id        = (char *) machine_id_##_type,          \
++      .mach_name      = (char *) machine_name_##_type,        \
+       .mach_setup     = _setup,                               \
+ };                                                            \
+                                                               \
+@@ -44,4 +52,3 @@ static int __init register_machine_##_ty
+ pure_initcall(register_machine_##_type)
+ #endif /* __ASM_MIPS_MACHINE_H */
+-