From: Gabor Juhos <juhosg@openwrt.org>
Date: Fri, 4 Jun 2010 19:09:52 +0000 (+0000)
Subject: generic: merge mips multi machine update to generic patches for 2.6.34
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=2dfcdb9465fbcf51bb062091afbaa16ba05e4747;p=openwrt%2Fstaging%2Flinusw.git

generic: merge mips multi machine update to generic patches for 2.6.34

SVN-Revision: 21675
---

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 0000000000..0eea3691f3
--- /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 0000000000..fa466a7606
--- /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 d63587901d..0000000000
--- 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 1d9697bcfc..03c5b158f9 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 aeee89d337..0000000000
--- 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 */
--