MIPS: Loongson: Add a machtype kernel command line argument
authorWu Zhangjin <wuzhangjin@gmail.com>
Thu, 2 Jul 2009 15:27:12 +0000 (23:27 +0800)
committerRalf Baechle <ralf@linux-mips.org>
Thu, 17 Sep 2009 18:07:47 +0000 (20:07 +0200)
The difference between some loongson-based machines is very small, so, if
there is no necessary to add new kernel config options to cope with this
difference, it will be better to share the same kernel image file between
them, benefit from this, the linux distribution developers only have a need
to compile the kernel one time.

This machtype kernel command line argument will be used later to share the
same kernel image file between two different machines(menglong & yeeloong)
made by lemote.

Thanks very much to Zhang Le for cleaning up the machtype implementation.

Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Documentation/kernel-parameters.txt
arch/mips/include/asm/bootinfo.h
arch/mips/include/asm/mach-loongson/machine.h
arch/mips/loongson/common/Makefile
arch/mips/loongson/common/machtype.c
arch/mips/loongson/fuloong-2e/Makefile

index 4c12a290bee52a00186e4a4e4c4d726996320d8e..f45d0d8e71d8a6128b1af3cebf96ab4f79e62821 100644 (file)
@@ -1286,6 +1286,10 @@ and is between 256 and 4096 characters. It is defined in the file
                        (machvec) in a generic kernel.
                        Example: machvec=hpzx1_swiotlb
 
+       machtype=       [Loongson] Share the same kernel image file between different
+                        yeeloong laptop.
+                       Example: machtype=lemote-yeeloong-2f-7inch
+
        max_addr=nn[KMG]        [KNL,BOOT,ia64] All physical memory greater
                        than or equal to this physical address is ignored.
 
index 610fe3af7a038763639c982c87c1820bd8bff9a2..f5dfaf6a16064a0ff16785d0e18ee8107f54b60b 100644 (file)
@@ -7,6 +7,7 @@
  * Copyright (C) 1995, 1996 Andreas Busse
  * Copyright (C) 1995, 1996 Stoned Elipot
  * Copyright (C) 1995, 1996 Paul M. Antoine.
+ * Copyright (C) 2009       Zhang Le
  */
 #ifndef _ASM_BOOTINFO_H
 #define _ASM_BOOTINFO_H
 #define        MACH_MIKROTIK_RB532     0       /* Mikrotik RouterBoard 532     */
 #define MACH_MIKROTIK_RB532A   1       /* Mikrotik RouterBoard 532A    */
 
+/*
+ * Valid machtype for Loongson family
+ */
+#define MACH_LOONGSON_UNKNOWN  0
+#define MACH_LEMOTE_FL2E       1
+#define MACH_LEMOTE_FL2F       2
+#define MACH_LEMOTE_ML2F7      3
+#define MACH_LEMOTE_YL2F89     4
+#define MACH_DEXXON_GDIUM2F10  5
+#define MACH_LOONGSON_END      6
+
 #define CL_SIZE                        COMMAND_LINE_SIZE
 
 extern char *system_type;
index 8e60d363594ec3cb3604cdcfe06a499e51244bfd..206ea20679162fe3cad0e4cd1f3e59c18c154894 100644 (file)
@@ -15,7 +15,7 @@
 
 #define LOONGSON_UART_BASE (BONITO_PCIIO_BASE + 0x3f8)
 
-#define LOONGSON_MACHNAME "lemote-fuloong-2e-box"
+#define LOONGSON_MACHTYPE MACH_LEMOTE_FL2E
 
 #endif
 
index 4e3889dec39e5ed1c34de756cec738197b585fc1..656b3cc0a2a6b48ff7f1c1c731fae31e198b406f 100644 (file)
@@ -3,7 +3,7 @@
 #
 
 obj-y += setup.o init.o cmdline.o env.o time.o reset.o irq.o \
-    pci.o bonito-irq.o mem.o
+    pci.o bonito-irq.o mem.o machtype.o
 
 #
 # Early printk support
index 845b3fb47e0f94f028742578dd613ab392062660..7b348248de7d21693524423bf8e118d18bf30eab 100644 (file)
@@ -2,16 +2,49 @@
  * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
  * Author: Wu Zhangjin, wuzj@lemote.com
  *
+ * Copyright (c) 2009 Zhang Le <r0bertz@gentoo.org>
+ *
  * This program is free software; you can redistribute  it and/or modify it
  * under  the terms of  the GNU General  Public License as published by the
  * Free Software Foundation;  either version 2 of the  License, or (at your
  * option) any later version.
  */
+#include <linux/errno.h>
+#include <asm/bootinfo.h>
 
+#include <loongson.h>
 #include <machine.h>
 
+static const char *system_types[] = {
+       [MACH_LOONGSON_UNKNOWN]         "unknown loongson machine",
+       [MACH_LEMOTE_FL2E]              "lemote-fuloong-2e-box",
+       [MACH_LEMOTE_FL2F]              "lemote-fuloong-2f-box",
+       [MACH_LEMOTE_ML2F7]             "lemote-mengloong-2f-7inches",
+       [MACH_LEMOTE_YL2F89]            "lemote-yeeloong-2f-8.9inches",
+       [MACH_DEXXON_GDIUM2F10]         "dexxon-gidum-2f-10inches",
+       [MACH_LOONGSON_END]             NULL,
+};
+
 const char *get_system_type(void)
 {
-       return LOONGSON_MACHNAME;
+       if (mips_machtype == MACH_UNKNOWN)
+               mips_machtype = LOONGSON_MACHTYPE;
+
+       return system_types[mips_machtype];
 }
 
+static __init int machtype_setup(char *str)
+{
+       int machtype = MACH_LEMOTE_FL2E;
+
+       if (!str)
+               return -EINVAL;
+
+       for (; system_types[machtype]; machtype++)
+               if (strstr(system_types[machtype], str)) {
+                       mips_machtype = machtype;
+                       break;
+               }
+       return 0;
+}
+__setup("machtype=", machtype_setup);
index 96e45c13c850055e4f9eec2c425ee11e07846100..3aba5fcc09dc8185470f91f7842441c4b6c04df9 100644 (file)
@@ -2,6 +2,6 @@
 # Makefile for Lemote Fuloong2e mini-PC board.
 #
 
-obj-y += irq.o reset.o machtype.o
+obj-y += irq.o reset.o
 
 EXTRA_CFLAGS += -Werror