forked from Minki/linux
eed0eabd12
Introduce a "generic" platform, which aims to be board-agnostic by making use of device trees passed by the boot protocol defined in the MIPS UHI (Universal Hosting Interface) specification. Provision is made for supporting boards which use a legacy boot protocol that can't be changed, but adding support for such boards or any others is left to followon patches. Right now the built kernels expect to be loaded to 0x80100000, ie. in kseg0. This is fine for the vast majority of MIPS platforms, but nevertheless it would be good to remove this limitation in the future by mapping the kernel via the TLB such that it can be loaded anywhere & map itself appropriately. Configuration is handled by dynamically generating configs using scripts/kconfig/merge_config.sh, somewhat similar to the way powerpc makes use of it. This allows for variations upon the configuration, eg. differing architecture revisions or subsets of driver support for differing boards, to be handled without having a large number of defconfig files. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/14353/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
65 lines
1.4 KiB
C
65 lines
1.4 KiB
C
/*
|
|
* Copyright (C) 2016 Imagination Technologies
|
|
* Author: Paul Burton <paul.burton@imgtec.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
* option) any later version.
|
|
*/
|
|
|
|
#include <linux/clk.h>
|
|
#include <linux/clk-provider.h>
|
|
#include <linux/clocksource.h>
|
|
#include <linux/init.h>
|
|
#include <linux/irqchip/mips-gic.h>
|
|
#include <linux/types.h>
|
|
|
|
#include <asm/irq.h>
|
|
|
|
int get_c0_fdc_int(void)
|
|
{
|
|
int mips_cpu_fdc_irq;
|
|
|
|
if (cpu_has_veic)
|
|
panic("Unimplemented!");
|
|
else if (gic_present)
|
|
mips_cpu_fdc_irq = gic_get_c0_fdc_int();
|
|
else if (cp0_fdc_irq >= 0)
|
|
mips_cpu_fdc_irq = MIPS_CPU_IRQ_BASE + cp0_fdc_irq;
|
|
else
|
|
mips_cpu_fdc_irq = -1;
|
|
|
|
return mips_cpu_fdc_irq;
|
|
}
|
|
|
|
int get_c0_perfcount_int(void)
|
|
{
|
|
int mips_cpu_perf_irq;
|
|
|
|
if (cpu_has_veic)
|
|
panic("Unimplemented!");
|
|
else if (gic_present)
|
|
mips_cpu_perf_irq = gic_get_c0_perfcount_int();
|
|
else if (cp0_perfcount_irq >= 0)
|
|
mips_cpu_perf_irq = MIPS_CPU_IRQ_BASE + cp0_perfcount_irq;
|
|
else
|
|
mips_cpu_perf_irq = -1;
|
|
|
|
return mips_cpu_perf_irq;
|
|
}
|
|
|
|
unsigned int get_c0_compare_int(void)
|
|
{
|
|
int mips_cpu_timer_irq;
|
|
|
|
if (cpu_has_veic)
|
|
panic("Unimplemented!");
|
|
else if (gic_present)
|
|
mips_cpu_timer_irq = gic_get_c0_compare_int();
|
|
else
|
|
mips_cpu_timer_irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq;
|
|
|
|
return mips_cpu_timer_irq;
|
|
}
|