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: &soc_info); |
61 | |
62 | pr_info("SoC Type: %s\n" , get_system_type()); |
63 | |
64 | prom_init_cmdline(); |
65 | } |
66 | |