5b3b16880f
These are the rest of the new files needed to add OCTEON processor support to the Linux kernel. Other than Makefile and Kconfig which should be obvious, we have: csrc-octeon.c -- Clock source driver for OCTEON. dma-octeon.c -- Helper functions for mapping DMA memory. flash_setup.c -- Register on-board flash with the MTD subsystem. octeon-irq.c -- OCTEON interrupt controller managment. octeon-memcpy.S -- Optimized memcpy() implementation. serial.c -- Register 8250 platform driver and early console. setup.c -- Early architecture initialization. smp.c -- OCTEON SMP support. octeon_switch.S -- Scheduler context switch for OCTEON. c-octeon.c -- OCTEON cache controller support. cex-oct.S -- OCTEON cache exception handler. asm/mach-cavium-octeon/*.h -- Architecture include files. Signed-off-by: Tomaso Paoletti <tpaoletti@caviumnetworks.com> Signed-off-by: David Daney <ddaney@caviumnetworks.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org> create mode 100644 arch/mips/cavium-octeon/Kconfig create mode 100644 arch/mips/cavium-octeon/Makefile create mode 100644 arch/mips/cavium-octeon/csrc-octeon.c create mode 100644 arch/mips/cavium-octeon/dma-octeon.c create mode 100644 arch/mips/cavium-octeon/flash_setup.c create mode 100644 arch/mips/cavium-octeon/octeon-irq.c create mode 100644 arch/mips/cavium-octeon/octeon-memcpy.S create mode 100644 arch/mips/cavium-octeon/serial.c create mode 100644 arch/mips/cavium-octeon/setup.c create mode 100644 arch/mips/cavium-octeon/smp.c create mode 100644 arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h create mode 100644 arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h create mode 100644 arch/mips/include/asm/mach-cavium-octeon/irq.h create mode 100644 arch/mips/include/asm/mach-cavium-octeon/kernel-entry-init.h create mode 100644 arch/mips/include/asm/mach-cavium-octeon/war.h create mode 100644 arch/mips/include/asm/octeon/octeon.h create mode 100644 arch/mips/kernel/octeon_switch.S create mode 100644 arch/mips/mm/c-octeon.c create mode 100644 arch/mips/mm/cex-oct.S
58 lines
1.4 KiB
C
58 lines
1.4 KiB
C
/*
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
|
* License. See the file "COPYING" in the main directory of this archive
|
|
* for more details.
|
|
*
|
|
* Copyright (C) 2007 by Ralf Baechle
|
|
*/
|
|
#include <linux/clocksource.h>
|
|
#include <linux/init.h>
|
|
|
|
#include <asm/time.h>
|
|
|
|
#include <asm/octeon/octeon.h>
|
|
#include <asm/octeon/cvmx-ipd-defs.h>
|
|
|
|
/*
|
|
* Set the current core's cvmcount counter to the value of the
|
|
* IPD_CLK_COUNT. We do this on all cores as they are brought
|
|
* on-line. This allows for a read from a local cpu register to
|
|
* access a synchronized counter.
|
|
*
|
|
*/
|
|
void octeon_init_cvmcount(void)
|
|
{
|
|
unsigned long flags;
|
|
unsigned loops = 2;
|
|
|
|
/* Clobber loops so GCC will not unroll the following while loop. */
|
|
asm("" : "+r" (loops));
|
|
|
|
local_irq_save(flags);
|
|
/*
|
|
* Loop several times so we are executing from the cache,
|
|
* which should give more deterministic timing.
|
|
*/
|
|
while (loops--)
|
|
write_c0_cvmcount(cvmx_read_csr(CVMX_IPD_CLK_COUNT));
|
|
local_irq_restore(flags);
|
|
}
|
|
|
|
static cycle_t octeon_cvmcount_read(void)
|
|
{
|
|
return read_c0_cvmcount();
|
|
}
|
|
|
|
static struct clocksource clocksource_mips = {
|
|
.name = "OCTEON_CVMCOUNT",
|
|
.read = octeon_cvmcount_read,
|
|
.mask = CLOCKSOURCE_MASK(64),
|
|
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
|
};
|
|
|
|
void __init plat_time_init(void)
|
|
{
|
|
clocksource_mips.rating = 300;
|
|
clocksource_set_clock(&clocksource_mips, mips_hpt_frequency);
|
|
clocksource_register(&clocksource_mips);
|
|
}
|