blob: f2807bc662a34bfa0878fda0a7a3c29b81c7695f [file] [log] [blame]
Wu Zhangjinbd92aa02009-07-02 23:22:36 +08001/*
Wu Zhangjin1b39a0b2010-01-04 17:16:43 +08002 * Copyright (C) 2009 Lemote Inc.
Wu Zhangjinf7a904d2010-01-04 17:16:51 +08003 * Author: Wu Zhangjin, wuzhangjin@gmail.com
Wu Zhangjinbd92aa02009-07-02 23:22:36 +08004 *
Wu Zhangjin3209e702009-07-02 23:27:12 +08005 * Copyright (c) 2009 Zhang Le <r0bertz@gentoo.org>
6 *
Ralf Baechle70342282013-01-22 12:59:30 +01007 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
Wu Zhangjinbd92aa02009-07-02 23:22:36 +08009 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 */
Wu Zhangjin3209e702009-07-02 23:27:12 +080012#include <linux/errno.h>
13#include <asm/bootinfo.h>
Wu Zhangjinbd92aa02009-07-02 23:22:36 +080014
Wu Zhangjin3209e702009-07-02 23:27:12 +080015#include <loongson.h>
Wu Zhangjin85749d22009-07-02 23:26:45 +080016#include <machine.h>
17
Wu Zhangjin04cfb902009-11-06 18:35:33 +080018/* please ensure the length of the machtype string is less than 50 */
19#define MACHTYPE_LEN 50
20
Wu Zhangjin3209e702009-07-02 23:27:12 +080021static const char *system_types[] = {
Aaro Koskinenefa386f2014-11-19 23:52:45 +020022 [MACH_LOONGSON_UNKNOWN] = "unknown loongson machine",
23 [MACH_LEMOTE_FL2E] = "lemote-fuloong-2e-box",
24 [MACH_LEMOTE_FL2F] = "lemote-fuloong-2f-box",
25 [MACH_LEMOTE_ML2F7] = "lemote-mengloong-2f-7inches",
26 [MACH_LEMOTE_YL2F89] = "lemote-yeeloong-2f-8.9inches",
27 [MACH_DEXXON_GDIUM2F10] = "dexxon-gdium-2f",
28 [MACH_LEMOTE_NAS] = "lemote-nas-2f",
29 [MACH_LEMOTE_LL2F] = "lemote-lynloong-2f",
30 [MACH_LOONGSON_GENERIC] = "generic-loongson-machine",
31 [MACH_LOONGSON_END] = NULL,
Wu Zhangjin3209e702009-07-02 23:27:12 +080032};
33
Wu Zhangjinbd92aa02009-07-02 23:22:36 +080034const char *get_system_type(void)
35{
Wu Zhangjin3209e702009-07-02 23:27:12 +080036 return system_types[mips_machtype];
Wu Zhangjinbd92aa02009-07-02 23:22:36 +080037}
38
Wu Zhangjin1b39a0b2010-01-04 17:16:43 +080039void __weak __init mach_prom_init_machtype(void)
40{
41}
42
Wu Zhangjin04cfb902009-11-06 18:35:33 +080043void __init prom_init_machtype(void)
Wu Zhangjin3209e702009-07-02 23:27:12 +080044{
Stefan Weil994fed22011-01-30 21:41:44 +010045 char *p, str[MACHTYPE_LEN + 1];
Wu Zhangjin3209e702009-07-02 23:27:12 +080046 int machtype = MACH_LEMOTE_FL2E;
47
Wu Zhangjin04cfb902009-11-06 18:35:33 +080048 mips_machtype = LOONGSON_MACHTYPE;
49
50 p = strstr(arcs_cmdline, "machtype=");
Wu Zhangjin1b39a0b2010-01-04 17:16:43 +080051 if (!p) {
52 mach_prom_init_machtype();
Wu Zhangjin04cfb902009-11-06 18:35:33 +080053 return;
Wu Zhangjin1b39a0b2010-01-04 17:16:43 +080054 }
Wu Zhangjin04cfb902009-11-06 18:35:33 +080055 p += strlen("machtype=");
56 strncpy(str, p, MACHTYPE_LEN);
Stefan Weil994fed22011-01-30 21:41:44 +010057 str[MACHTYPE_LEN] = '\0';
Wu Zhangjin04cfb902009-11-06 18:35:33 +080058 p = strstr(str, " ");
59 if (p)
60 *p = '\0';
Wu Zhangjin3209e702009-07-02 23:27:12 +080061
62 for (; system_types[machtype]; machtype++)
63 if (strstr(system_types[machtype], str)) {
64 mips_machtype = machtype;
65 break;
66 }
Wu Zhangjin3209e702009-07-02 23:27:12 +080067}