diff options
author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-01-30 15:25:03 +0000 |
---|---|---|
committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-01-30 15:25:03 +0000 |
commit | 1bd851b509d3a9236fb236fa6c4a861b53465540 (patch) | |
tree | 63dbf83c84e933c66071b5fed1711923eab4669d | |
parent | 440e0933ab2aaff36a006664c6dcce201379b9d1 (diff) |
ramips: update mips multi-machine stuff
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19400 3c298f89-4303-0410-b956-a3cf2f4a3e73
11 files changed, 285 insertions, 59 deletions
diff --git a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h index 08e939d5d..22e2b6462 100644 --- a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h +++ b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h @@ -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; diff --git a/target/linux/ramips/files/arch/mips/ralink/common/prom.c b/target/linux/ramips/files/arch/mips/ralink/common/prom.c index 154d5f9f2..fb37274ff 100644 --- a/target/linux/ramips/files/arch/mips/ralink/common/prom.c +++ b/target/linux/ramips/files/arch/mips/ralink/common/prom.c @@ -20,33 +20,6 @@ #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; diff --git a/target/linux/ramips/files/arch/mips/ralink/common/setup.c b/target/linux/ramips/files/arch/mips/ralink/common/setup.c index 3030fcd15..877d0b7de 100644 --- a/target/linux/ramips/files/arch/mips/ralink/common/setup.c +++ b/target/linux/ramips/files/arch/mips/ralink/common/setup.c @@ -16,14 +16,12 @@ #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); diff --git a/target/linux/ramips/files/arch/mips/ralink/rt288x/mach-rt-n15.c b/target/linux/ramips/files/arch/mips/ralink/rt288x/mach-rt-n15.c index 26f08845b..bc269bba1 100644 --- a/target/linux/ramips/files/arch/mips/ralink/rt288x/mach-rt-n15.c +++ b/target/linux/ramips/files/arch/mips/ralink/rt288x/mach-rt-n15.c @@ -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); diff --git a/target/linux/ramips/files/arch/mips/ralink/rt288x/mach-wzr-agl300nh.c b/target/linux/ramips/files/arch/mips/ralink/rt288x/mach-wzr-agl300nh.c index c0a09cfb3..b4550384f 100644 --- a/target/linux/ramips/files/arch/mips/ralink/rt288x/mach-wzr-agl300nh.c +++ b/target/linux/ramips/files/arch/mips/ralink/rt288x/mach-wzr-agl300nh.c @@ -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); diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-dir-300-revb.c b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-dir-300-revb.c index 86152b99e..93d28a5b2 100644 --- a/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-dir-300-revb.c +++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-dir-300-revb.c @@ -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); diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-fonera20n.c b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-fonera20n.c index 3a444caeb..e2cc627c5 100644 --- a/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-fonera20n.c +++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-fonera20n.c @@ -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); diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-v22rw-2x2.c b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-v22rw-2x2.c index 64466e2ee..f819d2b60 100644 --- a/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-v22rw-2x2.c +++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-v22rw-2x2.c @@ -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); diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-whr-g300n.c b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-whr-g300n.c index e4c5988d6..34785d9f1 100644 --- a/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-whr-g300n.c +++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-whr-g300n.c @@ -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 index 000000000..d63587901 --- /dev/null +++ b/target/linux/ramips/patches-2.6.30/400-mips-multi-machine-update.patch @@ -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 index 000000000..d63587901 --- /dev/null +++ b/target/linux/ramips/patches-2.6.32/400-mips-multi-machine-update.patch @@ -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 */ +- |