/* * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published * by the Free Software Foundation. * * Copyright (C) 2010 John Crispin */ #include #include #include #include #include #include "prom.h" #include "clk.h" static struct ltq_soc_info soc_info; unsigned int ltq_get_cpu_ver(void) { return soc_info.rev; } EXPORT_SYMBOL(ltq_get_cpu_ver); unsigned int ltq_get_soc_type(void) { return soc_info.type; } EXPORT_SYMBOL(ltq_get_soc_type); const char *get_system_type(void) { return soc_info.sys_type; } void prom_free_prom_memory(void) { } static void __init prom_init_cmdline(void) { int argc = fw_arg0; char **argv = (char **) KSEG1ADDR(fw_arg1); int i; for (i = 0; i < argc; i++) { char *p = (char *) KSEG1ADDR(argv[i]); if (p && *p) { strlcat(arcs_cmdline, p, sizeof(arcs_cmdline)); strlcat(arcs_cmdline, " ", sizeof(arcs_cmdline)); } } } void __init prom_init(void) { struct clk *clk; ltq_soc_detect(&soc_info); clk_init(); clk = clk_get(0, "cpu"); snprintf(soc_info.sys_type, LTQ_SYS_TYPE_LEN - 1, "%s rev1.%d", soc_info.name, soc_info.rev); clk_put(clk); soc_info.sys_type[LTQ_SYS_TYPE_LEN - 1] = '\0'; pr_info("SoC: %s\n", soc_info.sys_type); prom_init_cmdline(); }