xref: /openbmc/linux/arch/mips/ralink/prom.c (revision b3c10ac84c5a544ccd92ee4f891441df91a8cfbc)
1  // SPDX-License-Identifier: GPL-2.0-only
2  /*
3   *
4   *  Copyright (C) 2009 Gabor Juhos <juhosg@openwrt.org>
5   *  Copyright (C) 2010 Joonas Lahtinen <joonas.lahtinen@gmail.com>
6   *  Copyright (C) 2013 John Crispin <john@phrozen.org>
7   */
8  
9  #include <linux/string.h>
10  
11  #include <asm/bootinfo.h>
12  #include <asm/addrspace.h>
13  
14  #include <asm/mach-ralink/ralink_regs.h>
15  
16  #include "common.h"
17  
18  struct ralink_soc_info soc_info;
19  
20  enum ralink_soc_type ralink_soc;
21  EXPORT_SYMBOL_GPL(ralink_soc);
22  
23  const char *get_system_type(void)
24  {
25  	return soc_info.sys_type;
26  }
27  
28  static __init void prom_init_cmdline(void)
29  {
30  	int argc;
31  	char **argv;
32  	int i;
33  
34  	pr_debug("prom: fw_arg0=%08x fw_arg1=%08x fw_arg2=%08x fw_arg3=%08x\n",
35  	       (unsigned int)fw_arg0, (unsigned int)fw_arg1,
36  	       (unsigned int)fw_arg2, (unsigned int)fw_arg3);
37  
38  	argc = fw_arg0;
39  	argv = (char **) KSEG1ADDR(fw_arg1);
40  
41  	if (!argv) {
42  		pr_debug("argv=%p is invalid, skipping\n",
43  		       argv);
44  		return;
45  	}
46  
47  	for (i = 0; i < argc; i++) {
48  		char *p = (char *) KSEG1ADDR(argv[i]);
49  
50  		if (CPHYSADDR(p) && *p) {
51  			pr_debug("argv[%d]: %s\n", i, p);
52  			strlcat(arcs_cmdline, " ", sizeof(arcs_cmdline));
53  			strlcat(arcs_cmdline, p, sizeof(arcs_cmdline));
54  		}
55  	}
56  }
57  
58  void __init prom_init(void)
59  {
60  	prom_soc_init(&soc_info);
61  
62  	pr_info("SoC Type: %s\n", get_system_type());
63  
64  	prom_init_cmdline();
65  }
66