ramips: update mips multi-machine stuff
SVN-Revision: 19400
This commit is contained in:
parent
93567fed7a
commit
af9f40e60d
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
-
|
@ -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 */
|
||||
-
|
Loading…
Reference in New Issue
Block a user