summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-06-04 19:09:52 +0000
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-06-04 19:09:52 +0000
commit0119024a6bbf45c8c90eb3dd7cbfb389b04be4b3 (patch)
tree5e687119aefdb38cf9b396d2042ec6168ffb0aeb
parentdd08767acf05417441228b7ce25ef249ee8f6dbf (diff)
generic: merge mips multi machine update to generic patches for 2.6.34
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@21675 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--target/linux/adm5120/patches-2.6.34/400-revert-mips-machine-update.patch231
-rw-r--r--target/linux/adm5120/patches-2.6.34/401-include-slab-h-in-mips_machine.patch11
-rw-r--r--target/linux/ar71xx/patches-2.6.34/400-mips-multi-machine-update.patch134
-rw-r--r--target/linux/generic-2.6/patches-2.6.34/020-mips_multi_machine_support.patch168
-rw-r--r--target/linux/ramips/patches-2.6.34/400-mips-multi-machine-update.patch135
5 files changed, 342 insertions, 337 deletions
diff --git a/target/linux/adm5120/patches-2.6.34/400-revert-mips-machine-update.patch b/target/linux/adm5120/patches-2.6.34/400-revert-mips-machine-update.patch
new file mode 100644
index 000000000..0eea3691f
--- /dev/null
+++ b/target/linux/adm5120/patches-2.6.34/400-revert-mips-machine-update.patch
@@ -0,0 +1,231 @@
+--- a/arch/mips/include/asm/mips_machine.h
++++ b/arch/mips/include/asm/mips_machine.h
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
++ * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+@@ -13,42 +13,35 @@
+ #include <linux/init.h>
+ #include <linux/list.h>
+
+-#include <asm/bootinfo.h>
+-
+ struct mips_machine {
+ unsigned long mach_type;
+- const char *mach_id;
+- const char *mach_name;
+ void (*mach_setup)(void);
++ char *mach_name;
++ struct list_head list;
+ };
+
+-#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 \
+- __used __section(.mips.machines.init) = \
++void mips_machine_register(struct mips_machine *) __init;
++void mips_machine_setup(unsigned long machtype) __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; \
++static struct mips_machine machine_##_type __initdata = \
+ { \
+ .mach_type = _type, \
+- .mach_id = machine_id_##_type, \
+ .mach_name = machine_name_##_type, \
+ .mach_setup = _setup, \
+-};
+-
+-extern long __mips_machines_start;
+-extern long __mips_machines_end;
+-
+-#ifdef CONFIG_MIPS_MACHINE
+-int mips_machtype_setup(char *id) __init;
+-void mips_machine_setup(void) __init;
+-void mips_set_machine_name(const char *name) __init;
+-char *mips_get_machine_name(void);
+-#else
+-static inline int mips_machtype_setup(char *id) { return 1; }
+-static inline void mips_machine_setup(void) { }
+-static inline void mips_set_machine_name(const char *name) { }
+-static inline char *mips_get_machine_name(void) { return NULL; }
+-#endif /* CONFIG_MIPS_MACHINE */
++}; \
++ \
++static int __init register_machine_##_type(void) \
++{ \
++ mips_machine_register(&machine_##_type); \
++ return 0; \
++} \
++ \
++pure_initcall(register_machine_##_type)
+
+ #endif /* __ASM_MIPS_MACHINE_H */
++
+--- a/arch/mips/kernel/mips_machine.c
++++ b/arch/mips/kernel/mips_machine.c
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
++ * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+@@ -7,77 +7,68 @@
+ *
+ */
+ #include <linux/mm.h>
+-#include <linux/string.h>
+-#include <linux/slab.h>
+
+ #include <asm/mips_machine.h>
++#include <asm/bootinfo.h>
+
+-static struct mips_machine *mips_machine __initdata;
+-static char *mips_machine_name = "Unknown";
++static struct list_head mips_machines __initdata =
++ LIST_HEAD_INIT(mips_machines);
+
+-#define for_each_machine(mach) \
+- for ((mach) = (struct mips_machine *)&__mips_machines_start; \
+- (mach) && \
+- (unsigned long)(mach) < (unsigned long)&__mips_machines_end; \
+- (mach)++)
++char *mips_machine_name = "Unknown";
+
+-__init void mips_set_machine_name(const char *name)
++static struct mips_machine * __init mips_machine_find(unsigned long machtype)
+ {
+- char *p;
++ struct list_head *this;
+
+- if (name == NULL)
+- return;
++ list_for_each(this, &mips_machines) {
++ struct mips_machine *mach;
+
+- p = kstrdup(name, GFP_KERNEL);
+- if (!p)
+- pr_err("MIPS: no memory for machine_name\n");
++ mach = list_entry(this, struct mips_machine, list);
++ if (mach->mach_type == machtype)
++ return mach;
++ }
+
+- mips_machine_name = p;
++ return NULL;
+ }
+
+-char *mips_get_machine_name(void)
++void __init mips_machine_register(struct mips_machine *mach)
+ {
+- return mips_machine_name;
++ list_add_tail(&mach->list, &mips_machines);
+ }
+
+-__init int mips_machtype_setup(char *id)
++void __init mips_machine_set_name(char *name)
+ {
+- struct mips_machine *mach;
++ unsigned int len;
++ char *p;
+
+- for_each_machine(mach) {
+- if (mach->mach_id == NULL)
+- continue;
+-
+- if (strcmp(mach->mach_id, id) == 0) {
+- mips_machine = mach;
+- break;
+- }
+- }
++ if (name == NULL)
++ return;
+
+- if (!mips_machine) {
+- pr_err("MIPS: no machine found for id '%s', supported machines:\n",
+- id);
+- pr_err("%32s %s\n", "id", "name");
+- for_each_machine(mach)
+- pr_err("%32s %s\n", mach->mach_id, mach->mach_name);
+- return 1;
++ len = strlen(name);
++ p = kmalloc(len + 1, GFP_KERNEL);
++ if (p) {
++ strncpy(p, name, len);
++ p[len] = '\0';
++ mips_machine_name = p;
++ } else {
++ printk(KERN_WARNING "MIPS: no memory for machine_name\n");
+ }
+-
+- mips_machtype = mips_machine->mach_type;
+-
+- return 0;
+ }
+
+-__setup("machtype=", mips_machtype_setup);
+-
+-__init void mips_machine_setup(void)
++void __init mips_machine_setup(unsigned long machtype)
+ {
+- if (!mips_machine)
++ struct mips_machine *mach;
++
++ mach = mips_machine_find(machtype);
++ if (!mach) {
++ printk(KERN_ALERT "MIPS: no machine registered for "
++ "machtype %lu\n", machtype);
+ return;
++ }
+
+- mips_set_machine_name(mips_machine->mach_name);
+- pr_info("MIPS: machine is %s\n", mips_machine_name);
++ mips_machine_set_name(mach->mach_name);
++ printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
+
+- if (mips_machine->mach_setup)
+- mips_machine->mach_setup();
++ if (mach->mach_setup)
++ mach->mach_setup();
+ }
+--- a/arch/mips/kernel/proc.c
++++ b/arch/mips/kernel/proc.c
+@@ -34,9 +34,9 @@ static int show_cpuinfo(struct seq_file
+ */
+ if (n == 0) {
+ seq_printf(m, "system type\t\t: %s\n", get_system_type());
+- if (mips_get_machine_name())
+- seq_printf(m, "machine\t\t\t: %s\n",
+- mips_get_machine_name());
++#ifdef CONFIG_MIPS_MACHINE
++ seq_printf(m, "machine\t\t\t: %s\n", mips_machine_name);
++#endif
+ }
+
+ seq_printf(m, "processor\t\t: %ld\n", n);
+--- a/arch/mips/kernel/vmlinux.lds.S
++++ b/arch/mips/kernel/vmlinux.lds.S
+@@ -98,13 +98,6 @@ SECTIONS
+ INIT_TEXT_SECTION(PAGE_SIZE)
+ INIT_DATA_SECTION(16)
+
+- . = ALIGN(4);
+- .mips.machines.init : AT(ADDR(.mips.machines.init) - LOAD_OFFSET) {
+- __mips_machines_start = .;
+- *(.mips.machines.init)
+- __mips_machines_end = .;
+- }
+-
+ /* .exit.text is discarded at runtime, not link time, to deal with
+ * references from .rodata
+ */
diff --git a/target/linux/adm5120/patches-2.6.34/401-include-slab-h-in-mips_machine.patch b/target/linux/adm5120/patches-2.6.34/401-include-slab-h-in-mips_machine.patch
new file mode 100644
index 000000000..fa466a760
--- /dev/null
+++ b/target/linux/adm5120/patches-2.6.34/401-include-slab-h-in-mips_machine.patch
@@ -0,0 +1,11 @@
+--- a/arch/mips/kernel/mips_machine.c
++++ b/arch/mips/kernel/mips_machine.c
+@@ -6,7 +6,7 @@
+ * by the Free Software Foundation.
+ *
+ */
+-#include <linux/mm.h>
++#include <linux/slab.h>
+
+ #include <asm/mips_machine.h>
+ #include <asm/bootinfo.h>
diff --git a/target/linux/ar71xx/patches-2.6.34/400-mips-multi-machine-update.patch b/target/linux/ar71xx/patches-2.6.34/400-mips-multi-machine-update.patch
deleted file mode 100644
index d63587901..000000000
--- a/target/linux/ar71xx/patches-2.6.34/400-mips-multi-machine-update.patch
+++ /dev/null
@@ -1,134 +0,0 @@
---- 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/generic-2.6/patches-2.6.34/020-mips_multi_machine_support.patch b/target/linux/generic-2.6/patches-2.6.34/020-mips_multi_machine_support.patch
index 1d9697bcf..03c5b158f 100644
--- a/target/linux/generic-2.6/patches-2.6.34/020-mips_multi_machine_support.patch
+++ b/target/linux/generic-2.6/patches-2.6.34/020-mips_multi_machine_support.patch
@@ -1,8 +1,8 @@
--- /dev/null
+++ b/arch/mips/include/asm/mips_machine.h
-@@ -0,0 +1,47 @@
+@@ -0,0 +1,54 @@
+/*
-+ * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
++ * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
@@ -16,43 +16,50 @@
+#include <linux/init.h>
+#include <linux/list.h>
+
++#include <asm/bootinfo.h>
++
+struct mips_machine {
+ unsigned long mach_type;
++ const char *mach_id;
++ const char *mach_name;
+ void (*mach_setup)(void);
-+ char *mach_name;
-+ struct list_head list;
+};
+
-+void mips_machine_register(struct mips_machine *) __init;
-+void mips_machine_setup(unsigned long machtype) __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; \
-+static struct mips_machine machine_##_type __initdata = \
++#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 \
++ __used __section(.mips.machines.init) = \
+{ \
+ .mach_type = _type, \
++ .mach_id = machine_id_##_type, \
+ .mach_name = machine_name_##_type, \
+ .mach_setup = _setup, \
-+}; \
-+ \
-+static int __init register_machine_##_type(void) \
-+{ \
-+ mips_machine_register(&machine_##_type); \
-+ return 0; \
-+} \
-+ \
-+pure_initcall(register_machine_##_type)
++};
+
-+#endif /* __ASM_MIPS_MACHINE_H */
++extern long __mips_machines_start;
++extern long __mips_machines_end;
++
++#ifdef CONFIG_MIPS_MACHINE
++int mips_machtype_setup(char *id) __init;
++void mips_machine_setup(void) __init;
++void mips_set_machine_name(const char *name) __init;
++char *mips_get_machine_name(void);
++#else
++static inline int mips_machtype_setup(char *id) { return 1; }
++static inline void mips_machine_setup(void) { }
++static inline void mips_set_machine_name(const char *name) { }
++static inline char *mips_get_machine_name(void) { return NULL; }
++#endif /* CONFIG_MIPS_MACHINE */
+
++#endif /* __ASM_MIPS_MACHINE_H */
--- /dev/null
+++ b/arch/mips/kernel/mips_machine.c
-@@ -0,0 +1,74 @@
+@@ -0,0 +1,83 @@
+/*
-+ * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
++ * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
@@ -60,70 +67,79 @@
+ *
+ */
+#include <linux/mm.h>
++#include <linux/string.h>
++#include <linux/slab.h>
+
+#include <asm/mips_machine.h>
-+#include <asm/bootinfo.h>
+
-+static struct list_head mips_machines __initdata =
-+ LIST_HEAD_INIT(mips_machines);
++static struct mips_machine *mips_machine __initdata;
++static char *mips_machine_name = "Unknown";
+
-+char *mips_machine_name = "Unknown";
++#define for_each_machine(mach) \
++ for ((mach) = (struct mips_machine *)&__mips_machines_start; \
++ (mach) && \
++ (unsigned long)(mach) < (unsigned long)&__mips_machines_end; \
++ (mach)++)
+
-+static struct mips_machine * __init mips_machine_find(unsigned long machtype)
++__init void mips_set_machine_name(const char *name)
+{
-+ struct list_head *this;
++ char *p;
+
-+ list_for_each(this, &mips_machines) {
-+ struct mips_machine *mach;
++ if (name == NULL)
++ return;
+
-+ mach = list_entry(this, struct mips_machine, list);
-+ if (mach->mach_type == machtype)
-+ return mach;
-+ }
++ p = kstrdup(name, GFP_KERNEL);
++ if (!p)
++ pr_err("MIPS: no memory for machine_name\n");
+
-+ return NULL;
++ mips_machine_name = p;
+}
+
-+void __init mips_machine_register(struct mips_machine *mach)
++char *mips_get_machine_name(void)
+{
-+ list_add_tail(&mach->list, &mips_machines);
++ return mips_machine_name;
+}
+
-+void __init mips_machine_set_name(char *name)
++__init int mips_machtype_setup(char *id)
+{
-+ unsigned int len;
-+ char *p;
++ struct mips_machine *mach;
+
-+ if (name == NULL)
-+ return;
++ for_each_machine(mach) {
++ if (mach->mach_id == NULL)
++ continue;
++
++ if (strcmp(mach->mach_id, id) == 0) {
++ mips_machine = mach;
++ break;
++ }
++ }
+
-+ len = strlen(name);
-+ p = kmalloc(len + 1, GFP_KERNEL);
-+ if (p) {
-+ strncpy(p, name, len);
-+ p[len] = '\0';
-+ mips_machine_name = p;
-+ } else {
-+ printk(KERN_WARNING "MIPS: no memory for machine_name\n");
++ if (!mips_machine) {
++ pr_err("MIPS: no machine found for id '%s', supported machines:\n",
++ id);
++ pr_err("%32s %s\n", "id", "name");
++ for_each_machine(mach)
++ pr_err("%32s %s\n", mach->mach_id, mach->mach_name);
++ return 1;
+ }
++
++ mips_machtype = mips_machine->mach_type;
++
++ return 0;
+}
+
-+void __init mips_machine_setup(unsigned long machtype)
-+{
-+ struct mips_machine *mach;
++__setup("machtype=", mips_machtype_setup);
+
-+ mach = mips_machine_find(machtype);
-+ if (!mach) {
-+ printk(KERN_ALERT "MIPS: no machine registered for "
-+ "machtype %lu\n", machtype);
++__init void mips_machine_setup(void)
++{
++ if (!mips_machine)
+ return;
-+ }
+
-+ mips_machine_set_name(mach->mach_name);
-+ printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
++ mips_set_machine_name(mips_machine->mach_name);
++ pr_info("MIPS: machine is %s\n", mips_machine_name);
+
-+ if (mach->mach_setup)
-+ mach->mach_setup();
++ if (mips_machine->mach_setup)
++ mips_machine->mach_setup();
+}
--- a/arch/mips/kernel/Makefile
+++ b/arch/mips/kernel/Makefile
@@ -164,10 +180,26 @@
- if (n == 0)
+ if (n == 0) {
seq_printf(m, "system type\t\t: %s\n", get_system_type());
-+#ifdef CONFIG_MIPS_MACHINE
-+ seq_printf(m, "machine\t\t\t: %s\n", mips_machine_name);
-+#endif
++ if (mips_get_machine_name())
++ seq_printf(m, "machine\t\t\t: %s\n",
++ mips_get_machine_name());
+ }
seq_printf(m, "processor\t\t: %ld\n", n);
sprintf(fmt, "cpu model\t\t: %%s V%%d.%%d%s\n",
+--- a/arch/mips/kernel/vmlinux.lds.S
++++ b/arch/mips/kernel/vmlinux.lds.S
+@@ -98,6 +98,13 @@ SECTIONS
+ INIT_TEXT_SECTION(PAGE_SIZE)
+ INIT_DATA_SECTION(16)
+
++ . = ALIGN(4);
++ .mips.machines.init : AT(ADDR(.mips.machines.init) - LOAD_OFFSET) {
++ __mips_machines_start = .;
++ *(.mips.machines.init)
++ __mips_machines_end = .;
++ }
++
+ /* .exit.text is discarded at runtime, not link time, to deal with
+ * references from .rodata
+ */
diff --git a/target/linux/ramips/patches-2.6.34/400-mips-multi-machine-update.patch b/target/linux/ramips/patches-2.6.34/400-mips-multi-machine-update.patch
deleted file mode 100644
index aeee89d33..000000000
--- a/target/linux/ramips/patches-2.6.34/400-mips-multi-machine-update.patch
+++ /dev/null
@@ -1,135 +0,0 @@
---- a/arch/mips/kernel/mips_machine.c
-+++ b/arch/mips/kernel/mips_machine.c
-@@ -7,12 +7,14 @@
- *
- */
- #include <linux/mm.h>
-+#include <linux/string.h>
-+#include <linux/slab.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 +57,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 */
--