// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Copyright (C) 2009 Lemote Inc.
 * Author: Wu Zhangjin, wuzhangjin@gmail.com
 *
 * Copyright (c) 2009 Zhang Le <r0bertz@gentoo.org>
 */
#include <linux/errno.h>
#include <asm/bootinfo.h>

#include <loongson.h>
#include <machine.h>

/* please ensure the length of the machtype string is less than 50 */
#define MACHTYPE_LEN 50

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-gdium-2f",
	[MACH_LEMOTE_NAS]	= "lemote-nas-2f",
	[MACH_LEMOTE_LL2F]	= "lemote-lynloong-2f",
	[MACH_LOONGSON_GENERIC]	= "generic-loongson-machine",
	[MACH_LOONGSON_END]	= NULL,
};

const char *get_system_type(void)
{
	return system_types[mips_machtype];
}

void __weak __init mach_prom_init_machtype(void)
{
}

void __init prom_init_machtype(void)
{
	char *p, str[MACHTYPE_LEN + 1];
	int machtype = MACH_LEMOTE_FL2E;

	mips_machtype = LOONGSON_MACHTYPE;

	p = strstr(arcs_cmdline, "machtype=");
	if (!p) {
		mach_prom_init_machtype();
		return;
	}
	p += strlen("machtype=");
	strncpy(str, p, MACHTYPE_LEN);
	str[MACHTYPE_LEN] = '\0';
	p = strstr(str, " ");
	if (p)
		*p = '\0';

	for (; system_types[machtype]; machtype++)
		if (strstr(system_types[machtype], str)) {
			mips_machtype = machtype;
			break;
		}
}
