aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWu Zhangjin <wuzhangjin@gmail.com>2009-11-06 05:35:33 -0500
committerRalf Baechle <ralf@linux-mips.org>2009-12-16 20:57:08 -0500
commit04cfb90a92a2f9f7b56b2f85c528be7d1561e0e5 (patch)
tree332e2aae4ebc66274e61f4174f922635e4d386af
parentb6ee75ed4fa201873d3a2b32dfce2dbd701a2de4 (diff)
MIPS: Loongson: Cleanup machtype support
To choose code for different machines by the value of machtype it needs to be initialized as early as possible. So move initialization of mips_machtype to prom_init(). Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com> Cc: linux-mips@linux-mips.org Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r--arch/mips/include/asm/mach-loongson/loongson.h1
-rw-r--r--arch/mips/loongson/common/cmdline.c4
-rw-r--r--arch/mips/loongson/common/machtype.c23
3 files changed, 19 insertions, 9 deletions
diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h
index e6869aa52bc..efb23443779 100644
--- a/arch/mips/include/asm/mach-loongson/loongson.h
+++ b/arch/mips/include/asm/mach-loongson/loongson.h
@@ -29,6 +29,7 @@ extern unsigned long memsize, highmemsize;
29/* loongson-specific command line, env and memory initialization */ 29/* loongson-specific command line, env and memory initialization */
30extern void __init prom_init_memory(void); 30extern void __init prom_init_memory(void);
31extern void __init prom_init_cmdline(void); 31extern void __init prom_init_cmdline(void);
32extern void __init prom_init_machtype(void);
32extern void __init prom_init_env(void); 33extern void __init prom_init_env(void);
33 34
34/* irq operation functions */ 35/* irq operation functions */
diff --git a/arch/mips/loongson/common/cmdline.c b/arch/mips/loongson/common/cmdline.c
index 75f1b243ee4..7ad47f22747 100644
--- a/arch/mips/loongson/common/cmdline.c
+++ b/arch/mips/loongson/common/cmdline.c
@@ -9,7 +9,7 @@
9 * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology 9 * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
10 * Author: Fuxin Zhang, zhangfx@lemote.com 10 * Author: Fuxin Zhang, zhangfx@lemote.com
11 * 11 *
12 * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology 12 * Copyright (C) 2009 Lemote Inc.
13 * Author: Wu Zhangjin, wuzj@lemote.com 13 * Author: Wu Zhangjin, wuzj@lemote.com
14 * 14 *
15 * This program is free software; you can redistribute it and/or modify it 15 * This program is free software; you can redistribute it and/or modify it
@@ -49,4 +49,6 @@ void __init prom_init_cmdline(void)
49 strcat(arcs_cmdline, " console=ttyS0,115200"); 49 strcat(arcs_cmdline, " console=ttyS0,115200");
50 if ((strstr(arcs_cmdline, "root=")) == NULL) 50 if ((strstr(arcs_cmdline, "root=")) == NULL)
51 strcat(arcs_cmdline, " root=/dev/hda1"); 51 strcat(arcs_cmdline, " root=/dev/hda1");
52
53 prom_init_machtype();
52} 54}
diff --git a/arch/mips/loongson/common/machtype.c b/arch/mips/loongson/common/machtype.c
index 7b348248de7..7545fe69089 100644
--- a/arch/mips/loongson/common/machtype.c
+++ b/arch/mips/loongson/common/machtype.c
@@ -15,6 +15,9 @@
15#include <loongson.h> 15#include <loongson.h>
16#include <machine.h> 16#include <machine.h>
17 17
18/* please ensure the length of the machtype string is less than 50 */
19#define MACHTYPE_LEN 50
20
18static const char *system_types[] = { 21static const char *system_types[] = {
19 [MACH_LOONGSON_UNKNOWN] "unknown loongson machine", 22 [MACH_LOONGSON_UNKNOWN] "unknown loongson machine",
20 [MACH_LEMOTE_FL2E] "lemote-fuloong-2e-box", 23 [MACH_LEMOTE_FL2E] "lemote-fuloong-2e-box",
@@ -27,24 +30,28 @@ static const char *system_types[] = {
27 30
28const char *get_system_type(void) 31const char *get_system_type(void)
29{ 32{
30 if (mips_machtype == MACH_UNKNOWN)
31 mips_machtype = LOONGSON_MACHTYPE;
32
33 return system_types[mips_machtype]; 33 return system_types[mips_machtype];
34} 34}
35 35
36static __init int machtype_setup(char *str) 36void __init prom_init_machtype(void)
37{ 37{
38 char *p, str[MACHTYPE_LEN];
38 int machtype = MACH_LEMOTE_FL2E; 39 int machtype = MACH_LEMOTE_FL2E;
39 40
40 if (!str) 41 mips_machtype = LOONGSON_MACHTYPE;
41 return -EINVAL; 42
43 p = strstr(arcs_cmdline, "machtype=");
44 if (!p)
45 return;
46 p += strlen("machtype=");
47 strncpy(str, p, MACHTYPE_LEN);
48 p = strstr(str, " ");
49 if (p)
50 *p = '\0';
42 51
43 for (; system_types[machtype]; machtype++) 52 for (; system_types[machtype]; machtype++)
44 if (strstr(system_types[machtype], str)) { 53 if (strstr(system_types[machtype], str)) {
45 mips_machtype = machtype; 54 mips_machtype = machtype;
46 break; 55 break;
47 } 56 }
48 return 0;
49} 57}
50__setup("machtype=", machtype_setup);