Add initial support for Mips based SoCs made by Lantiq. This series will add support for the XWAY family. The series allows booting a minimal system using a initramfs or NOR. Missing drivers and support for Amazon and GPON family will be provided in a later series. [Ralf: Remove some cargo cult programming and fixed formatting.] Signed-off-by: John Crispin <blogic@openwrt.org> Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com> Signed-off-by: David Daney <ddaney@caviumnetworks.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/2252/ Patchwork: https://patchwork.linux-mips.org/patch/2371/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 *  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 <blogic@openwrt.org>
 | 
						|
 */
 | 
						|
 | 
						|
#include <linux/module.h>
 | 
						|
#include <linux/clk.h>
 | 
						|
#include <asm/bootinfo.h>
 | 
						|
#include <asm/time.h>
 | 
						|
 | 
						|
#include <lantiq.h>
 | 
						|
 | 
						|
#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();
 | 
						|
}
 |