xref: /openbmc/linux/arch/mips/ralink/prom.c (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
1*d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
27e47cefaSJohn Crispin /*
37e47cefaSJohn Crispin  *
47e47cefaSJohn Crispin  *  Copyright (C) 2009 Gabor Juhos <juhosg@openwrt.org>
57e47cefaSJohn Crispin  *  Copyright (C) 2010 Joonas Lahtinen <joonas.lahtinen@gmail.com>
697b92108SJohn Crispin  *  Copyright (C) 2013 John Crispin <john@phrozen.org>
77e47cefaSJohn Crispin  */
87e47cefaSJohn Crispin 
97e47cefaSJohn Crispin #include <linux/string.h>
107e47cefaSJohn Crispin 
117e47cefaSJohn Crispin #include <asm/bootinfo.h>
127e47cefaSJohn Crispin #include <asm/addrspace.h>
137e47cefaSJohn Crispin 
14418d29c8SJohn Crispin #include <asm/mach-ralink/ralink_regs.h>
15418d29c8SJohn Crispin 
167e47cefaSJohn Crispin #include "common.h"
177e47cefaSJohn Crispin 
187e47cefaSJohn Crispin struct ralink_soc_info soc_info;
197e47cefaSJohn Crispin 
20418d29c8SJohn Crispin enum ralink_soc_type ralink_soc;
21418d29c8SJohn Crispin EXPORT_SYMBOL_GPL(ralink_soc);
22418d29c8SJohn Crispin 
get_system_type(void)237e47cefaSJohn Crispin const char *get_system_type(void)
247e47cefaSJohn Crispin {
257e47cefaSJohn Crispin 	return soc_info.sys_type;
267e47cefaSJohn Crispin }
277e47cefaSJohn Crispin 
prom_init_cmdline(void)289c48568bSJohn Crispin static __init void prom_init_cmdline(void)
297e47cefaSJohn Crispin {
309c48568bSJohn Crispin 	int argc;
319c48568bSJohn Crispin 	char **argv;
327e47cefaSJohn Crispin 	int i;
337e47cefaSJohn Crispin 
347e47cefaSJohn Crispin 	pr_debug("prom: fw_arg0=%08x fw_arg1=%08x fw_arg2=%08x fw_arg3=%08x\n",
357e47cefaSJohn Crispin 	       (unsigned int)fw_arg0, (unsigned int)fw_arg1,
367e47cefaSJohn Crispin 	       (unsigned int)fw_arg2, (unsigned int)fw_arg3);
377e47cefaSJohn Crispin 
387e47cefaSJohn Crispin 	argc = fw_arg0;
397e47cefaSJohn Crispin 	argv = (char **) KSEG1ADDR(fw_arg1);
407e47cefaSJohn Crispin 
417e47cefaSJohn Crispin 	if (!argv) {
427e47cefaSJohn Crispin 		pr_debug("argv=%p is invalid, skipping\n",
437e47cefaSJohn Crispin 		       argv);
447e47cefaSJohn Crispin 		return;
457e47cefaSJohn Crispin 	}
467e47cefaSJohn Crispin 
477e47cefaSJohn Crispin 	for (i = 0; i < argc; i++) {
487e47cefaSJohn Crispin 		char *p = (char *) KSEG1ADDR(argv[i]);
497e47cefaSJohn Crispin 
507e47cefaSJohn Crispin 		if (CPHYSADDR(p) && *p) {
517e47cefaSJohn Crispin 			pr_debug("argv[%d]: %s\n", i, p);
527e47cefaSJohn Crispin 			strlcat(arcs_cmdline, " ", sizeof(arcs_cmdline));
537e47cefaSJohn Crispin 			strlcat(arcs_cmdline, p, sizeof(arcs_cmdline));
547e47cefaSJohn Crispin 		}
557e47cefaSJohn Crispin 	}
567e47cefaSJohn Crispin }
577e47cefaSJohn Crispin 
prom_init(void)587e47cefaSJohn Crispin void __init prom_init(void)
597e47cefaSJohn Crispin {
607e47cefaSJohn Crispin 	prom_soc_init(&soc_info);
617e47cefaSJohn Crispin 
627e47cefaSJohn Crispin 	pr_info("SoC Type: %s\n", get_system_type());
637e47cefaSJohn Crispin 
649c48568bSJohn Crispin 	prom_init_cmdline();
657e47cefaSJohn Crispin }
66