1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (C) 2009 Lemote Inc.
4 * Author: Wu Zhangjin, wuzhangjin@gmail.com
5 *
6 * Copyright (c) 2009 Zhang Le <r0bertz@gentoo.org>
7 */
8#include <linux/errno.h>
9#include <asm/bootinfo.h>
10
11#include <loongson.h>
12#include <machine.h>
13
14/* please ensure the length of the machtype string is less than 50 */
15#define MACHTYPE_LEN 50
16
17static const char *system_types[] = {
18	[MACH_LOONGSON_UNKNOWN]	= "unknown loongson machine",
19	[MACH_LEMOTE_FL2E]	= "lemote-fuloong-2e-box",
20	[MACH_LEMOTE_FL2F]	= "lemote-fuloong-2f-box",
21	[MACH_LEMOTE_ML2F7]	= "lemote-mengloong-2f-7inches",
22	[MACH_LEMOTE_YL2F89]	= "lemote-yeeloong-2f-8.9inches",
23	[MACH_DEXXON_GDIUM2F10]	= "dexxon-gdium-2f",
24	[MACH_LEMOTE_NAS]	= "lemote-nas-2f",
25	[MACH_LEMOTE_LL2F]	= "lemote-lynloong-2f",
26	[MACH_LOONGSON_END]	= NULL,
27};
28
29const char *get_system_type(void)
30{
31	return system_types[mips_machtype];
32}
33
34void __weak __init mach_prom_init_machtype(void)
35{
36}
37
38void __init prom_init_machtype(void)
39{
40	char *p, str[MACHTYPE_LEN + 1];
41	int machtype = MACH_LEMOTE_FL2E;
42
43	mips_machtype = LOONGSON_MACHTYPE;
44
45	p = strstr(arcs_cmdline, "machtype=");
46	if (!p) {
47		mach_prom_init_machtype();
48		return;
49	}
50	p += strlen("machtype=");
51	strncpy(str, p, MACHTYPE_LEN);
52	str[MACHTYPE_LEN] = '\0';
53	p = strstr(str, " ");
54	if (p)
55		*p = '\0';
56
57	for (; system_types[machtype]; machtype++)
58		if (strstr(system_types[machtype], str)) {
59			mips_machtype = machtype;
60			break;
61		}
62}
63