--- /dev/null
-+++ b/include/asm-mips/mips_machine.h
-@@ -0,0 +1,46 @@
++++ b/arch/mips/include/asm/mips_machine.h
+@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
+ *
+
+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;
+
+
--- /dev/null
+++ b/arch/mips/kernel/mips_machine.c
-@@ -0,0 +1,70 @@
+@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
+ *
+ list_add_tail(&mach->list, &mips_machines);
+}
+
++void __init mips_machine_set_name(char *name)
++{
++ unsigned int len;
++ char *p;
++
++ if (name == NULL)
++ return;
++
++ 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");
++ }
++}
++
+void __init mips_machine_setup(unsigned long machtype)
+{
+ struct mips_machine *mach;
+ return;
+ }
+
-+ if (mach->mach_name) {
-+ char *name;
-+ unsigned int len;
-+
-+ len = strlen(mach->mach_name);
-+ name = kmalloc(len + 1, GFP_KERNEL);
-+ if (name) {
-+ strncpy(name, mach->mach_name,len);
-+ name[len] = '\0';
-+ mips_machine_name = name;
-+ } else {
-+ printk(KERN_WARNING "MIPS: no memory for machine_name\n");
-+ }
-+ }
-+
++ mips_machine_set_name(mach->mach_name);
+ printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
+
+ if (mach->mach_setup)
+ mach->mach_setup();
+}
-+
--- a/arch/mips/kernel/Makefile
+++ b/arch/mips/kernel/Makefile
@@ -85,6 +85,7 @@ obj-$(CONFIG_GPIO_TXX9) += gpio_txx9.o