cd75473609
big.LITTLE support in the future. The separation of CPU and PMU code is also the start of being able to move some of this stuff under drivers/. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABCgAGBQJQPBA9AAoJEC379FI+VC/Zmv8P/RtmzMh0TL51Cu75V7P3W27A tMhWk4O45mB3iionEmsPI9KWK+eXVd2Tbbb+ag0u6A7mXar0v1sX/eZ7cJuWSgIr iQ2f397QFLiKRFnuBgHQYjG0mBJ6WIIAQWWeD72Zm6jQbtz8HRtvRCqaQB8hiwdG kSEpZa5U96zoQpU1QIDCTlub08hFO3gEzykK8mgeVwhx0WqogGwhYdvPrGogT+hE qVrY7eN4nBsKgQx0wE7W7RpczbZhf9N+8Ttnnh3saYDzCeYyCp44c8qE98matXKs TPLl1nFckUgTSjGV0sSY5sKOBdLAT132MwwkvVx4da3ZUdF9zFQMbnEvuxvwQmvy Y9osRF/KKTVHUOsDuMquap1+obJXEzs9whd/dAOLFqTb23TMOUbPZFaUALJQaUhi Rb5wUDJEA8UR4+kx2B70m1bxOpUrFSa/LDZnFpXOIp+AlzTt9dC4JZId3eulD1hs VSCrNYwT6k88v4B0fCJs2aPKs4l6IRM89D+QU0eoa8SqPeJYWV8MiDC/TSoXshJL W1sDtT1otBwU+t8Hf6uLa2EEW9qEOQ9I6wmGIQDxDPwb/Aqk0xnaaaR/3loOxZqV ZwAXz2fivcA3YmYQzySuHc/vs4WoJv1Bb7UJQgcGM+HDmZhKdxjQzMmxtpK18VYa +RqazuazUnSzkp/5a+5X =vfXN -----END PGP SIGNATURE----- Merge tag 'arm-perf-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into next/cleanup From Will Deacon: Bunch of perf updates for the ARM backend that pave the way for big.LITTLE support in the future. The separation of CPU and PMU code is also the start of being able to move some of this stuff under drivers/. * tag 'arm-perf-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux: ARM: perf: move irq registration into pmu implementation ARM: perf: move CPU-specific PMU handling code into separate file ARM: perf: prepare for moving CPU PMU code into separate file ARM: perf: probe devicetree in preference to current CPU ARM: perf: remove mysterious compiler barrier ARM: pmu: remove arm_pmu_type enumeration ARM: pmu: remove unused reservation mechanism ARM: perf: add devicetree bindings for 11MPcore, A5, A7 and A15 PMUs ARM: PMU: Add runtime PM Support
198 lines
5.1 KiB
C
198 lines
5.1 KiB
C
/*****************************************************************************
|
|
* Copyright 2003 - 2008 Broadcom Corporation. All rights reserved.
|
|
*
|
|
* Unless you and Broadcom execute a separate written software license
|
|
* agreement governing use of this software, this software is licensed to you
|
|
* under the terms of the GNU General Public License version 2, available at
|
|
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
|
|
*
|
|
* Notwithstanding the above, under no circumstances may you combine this
|
|
* software in any way with any other Broadcom software provided under a
|
|
* license other than the GPL, without Broadcom's express prior written
|
|
* consent.
|
|
*****************************************************************************/
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/types.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/interrupt.h>
|
|
#include <linux/init.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/module.h>
|
|
|
|
#include <linux/proc_fs.h>
|
|
#include <linux/sysctl.h>
|
|
|
|
#include <asm/irq.h>
|
|
#include <asm/setup.h>
|
|
#include <asm/mach-types.h>
|
|
#include <asm/mach/time.h>
|
|
|
|
#include <asm/mach/arch.h>
|
|
#include <mach/dma.h>
|
|
#include <mach/hardware.h>
|
|
#include <mach/csp/mm_io.h>
|
|
#include <mach/csp/chipcHw_def.h>
|
|
#include <mach/csp/chipcHw_inline.h>
|
|
|
|
#include <mach/cfg_global.h>
|
|
|
|
#include "core.h"
|
|
|
|
HW_DECLARE_SPINLOCK(arch)
|
|
HW_DECLARE_SPINLOCK(gpio)
|
|
#if defined(CONFIG_DEBUG_SPINLOCK)
|
|
EXPORT_SYMBOL(bcmring_gpio_reg_lock);
|
|
#endif
|
|
|
|
/* sysctl */
|
|
static int bcmring_arch_warm_reboot; /* do a warm reboot on hard reset */
|
|
|
|
static void bcmring_restart(char mode, const char *cmd)
|
|
{
|
|
printk("arch_reset:%c %x\n", mode, bcmring_arch_warm_reboot);
|
|
|
|
if (mode == 'h') {
|
|
/* Reboot configured in proc entry */
|
|
if (bcmring_arch_warm_reboot) {
|
|
printk("warm reset\n");
|
|
/* Issue Warm reset (do not reset ethernet switch, keep alive) */
|
|
chipcHw_reset(chipcHw_REG_SOFT_RESET_CHIP_WARM);
|
|
} else {
|
|
/* Force reset of everything */
|
|
printk("force reset\n");
|
|
chipcHw_reset(chipcHw_REG_SOFT_RESET_CHIP_SOFT);
|
|
}
|
|
} else {
|
|
/* Force reset of everything */
|
|
printk("force reset\n");
|
|
chipcHw_reset(chipcHw_REG_SOFT_RESET_CHIP_SOFT);
|
|
}
|
|
}
|
|
|
|
static struct ctl_table_header *bcmring_sysctl_header;
|
|
|
|
static struct ctl_table bcmring_sysctl_warm_reboot[] = {
|
|
{
|
|
.procname = "warm",
|
|
.data = &bcmring_arch_warm_reboot,
|
|
.maxlen = sizeof(int),
|
|
.mode = 0644,
|
|
.proc_handler = proc_dointvec},
|
|
{}
|
|
};
|
|
|
|
static struct ctl_table bcmring_sysctl_reboot[] = {
|
|
{
|
|
.procname = "reboot",
|
|
.mode = 0555,
|
|
.child = bcmring_sysctl_warm_reboot},
|
|
{}
|
|
};
|
|
|
|
static struct resource nand_resource[] = {
|
|
[0] = {
|
|
.start = MM_ADDR_IO_NAND,
|
|
.end = MM_ADDR_IO_NAND + 0x1000 - 1,
|
|
.flags = IORESOURCE_MEM,
|
|
},
|
|
};
|
|
|
|
static struct platform_device nand_device = {
|
|
.name = "bcm-nand",
|
|
.id = -1,
|
|
.resource = nand_resource,
|
|
.num_resources = ARRAY_SIZE(nand_resource),
|
|
};
|
|
|
|
static struct resource pmu_resource = {
|
|
.start = IRQ_PMUIRQ,
|
|
.end = IRQ_PMUIRQ,
|
|
.flags = IORESOURCE_IRQ,
|
|
};
|
|
|
|
static struct platform_device pmu_device = {
|
|
.name = "arm-pmu",
|
|
.id = -1,
|
|
.resource = &pmu_resource,
|
|
.num_resources = 1,
|
|
};
|
|
|
|
|
|
static struct platform_device *devices[] __initdata = {
|
|
&nand_device,
|
|
&pmu_device,
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Called from the customize_machine function in arch/arm/kernel/setup.c
|
|
*
|
|
* The customize_machine function is tagged as an arch_initcall
|
|
* (see include/linux/init.h for the order that the various init sections
|
|
* are called in.
|
|
*
|
|
*****************************************************************************/
|
|
static void __init bcmring_init_machine(void)
|
|
{
|
|
|
|
bcmring_sysctl_header = register_sysctl_table(bcmring_sysctl_reboot);
|
|
|
|
/* Enable spread spectrum */
|
|
chipcHw_enableSpreadSpectrum();
|
|
|
|
platform_add_devices(devices, ARRAY_SIZE(devices));
|
|
|
|
bcmring_amba_init();
|
|
|
|
dma_init();
|
|
}
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Called from setup_arch (in arch/arm/kernel/setup.c) to fixup any tags
|
|
* passed in by the boot loader.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
static void __init bcmring_fixup(struct tag *t, char **cmdline,
|
|
struct meminfo *mi) {
|
|
#ifdef CONFIG_BLK_DEV_INITRD
|
|
printk(KERN_NOTICE "bcmring_fixup\n");
|
|
t->hdr.tag = ATAG_CORE;
|
|
t->hdr.size = tag_size(tag_core);
|
|
t->u.core.flags = 0;
|
|
t->u.core.pagesize = PAGE_SIZE;
|
|
t->u.core.rootdev = 31 << 8 | 0;
|
|
t = tag_next(t);
|
|
|
|
t->hdr.tag = ATAG_MEM;
|
|
t->hdr.size = tag_size(tag_mem32);
|
|
t->u.mem.start = CFG_GLOBAL_RAM_BASE;
|
|
t->u.mem.size = CFG_GLOBAL_RAM_SIZE;
|
|
|
|
t = tag_next(t);
|
|
|
|
t->hdr.tag = ATAG_NONE;
|
|
t->hdr.size = 0;
|
|
#endif
|
|
}
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Machine Description
|
|
*
|
|
*****************************************************************************/
|
|
|
|
MACHINE_START(BCMRING, "BCMRING")
|
|
/* Maintainer: Broadcom Corporation */
|
|
.fixup = bcmring_fixup,
|
|
.map_io = bcmring_map_io,
|
|
.init_early = bcmring_init_early,
|
|
.init_irq = bcmring_init_irq,
|
|
.timer = &bcmring_timer,
|
|
.init_machine = bcmring_init_machine,
|
|
.restart = bcmring_restart,
|
|
MACHINE_END
|