Pull ARM SoC device tree changes from Arnd Bergmann: "These changes from 30 individual branches for the most part update device tree files, but there are also a few source code changes that have crept in this time, usually in order to atomically move over a driver from using hardcoded data to DT probing. A number of platforms change their DT files to use the C preprocessor, which is causing a bit of churn, but that is hopefully only this once" * tag 'dt-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (372 commits) ARM: at91: dt: rm9200ek: add spi support ARM: at91: dt: rm9200: add spi support ARM: at91/DT: at91sam9n12: add SPI DMA client infos ARM: at91/DT: sama5d3: add SPI DMA client infos ARM: at91/DT: fix SPI compatibility string ARM: Kirkwood: Fix the internal register ranges translation ARM: dts: bcm281xx: change comment to C89 style ARM: mmc: bcm281xx SDHCI driver (dt mods) ARM: nomadik: add the new clocks to the device tree clk: nomadik: implement the Nomadik clocks properly ARM: dts: omap5-uevm: Provide USB Host PHY clock frequency ARM: dts: omap4-panda: Fix DVI EDID reads ARM: dts: omap4-panda: Add USB Host support arm: mvebu: enable mini-PCIe connectors on Armada 370 RD ARM: shmobile: irqpin: add a DT property to enable masking on parent ARM: dts: AM43x EPOS EVM support ARM: dts: OMAP5: Add bandgap DT entry ARM: dts: AM33XX: Add pinmux configuration for CPSW to am335x EVM ARM: dts: AM33XX: Add pinmux configuration for CPSW to EVMsk ARM: dts: AM33XX: Add pinmux configuration for CPSW to beaglebone ...
112 lines
2.7 KiB
C
112 lines
2.7 KiB
C
/*
|
|
* This file contains common code that is intended to be used across
|
|
* boards so that it's not replicated.
|
|
*
|
|
* Copyright (C) 2011 Xilinx
|
|
*
|
|
* This software is licensed under the terms of the GNU General Public
|
|
* License version 2, as published by the Free Software Foundation, and
|
|
* may be copied, distributed, and modified under those terms.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#include <linux/init.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/cpumask.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/clk.h>
|
|
#include <linux/clk/zynq.h>
|
|
#include <linux/clocksource.h>
|
|
#include <linux/of_address.h>
|
|
#include <linux/of_irq.h>
|
|
#include <linux/of_platform.h>
|
|
#include <linux/of.h>
|
|
|
|
#include <asm/mach/arch.h>
|
|
#include <asm/mach/map.h>
|
|
#include <asm/mach/time.h>
|
|
#include <asm/mach-types.h>
|
|
#include <asm/page.h>
|
|
#include <asm/pgtable.h>
|
|
#include <asm/smp_scu.h>
|
|
#include <asm/hardware/cache-l2x0.h>
|
|
|
|
#include "common.h"
|
|
|
|
void __iomem *zynq_scu_base;
|
|
|
|
static struct of_device_id zynq_of_bus_ids[] __initdata = {
|
|
{ .compatible = "simple-bus", },
|
|
{}
|
|
};
|
|
|
|
/**
|
|
* zynq_init_machine - System specific initialization, intended to be
|
|
* called from board specific initialization.
|
|
*/
|
|
static void __init zynq_init_machine(void)
|
|
{
|
|
/*
|
|
* 64KB way size, 8-way associativity, parity disabled
|
|
*/
|
|
l2x0_of_init(0x02060000, 0xF0F0FFFF);
|
|
|
|
of_platform_bus_probe(NULL, zynq_of_bus_ids, NULL);
|
|
}
|
|
|
|
static void __init zynq_timer_init(void)
|
|
{
|
|
zynq_slcr_init();
|
|
clocksource_of_init();
|
|
}
|
|
|
|
static struct map_desc zynq_cortex_a9_scu_map __initdata = {
|
|
.length = SZ_256,
|
|
.type = MT_DEVICE,
|
|
};
|
|
|
|
static void __init zynq_scu_map_io(void)
|
|
{
|
|
unsigned long base;
|
|
|
|
base = scu_a9_get_base();
|
|
zynq_cortex_a9_scu_map.pfn = __phys_to_pfn(base);
|
|
/* Expected address is in vmalloc area that's why simple assign here */
|
|
zynq_cortex_a9_scu_map.virtual = base;
|
|
iotable_init(&zynq_cortex_a9_scu_map, 1);
|
|
zynq_scu_base = (void __iomem *)base;
|
|
BUG_ON(!zynq_scu_base);
|
|
}
|
|
|
|
/**
|
|
* zynq_map_io - Create memory mappings needed for early I/O.
|
|
*/
|
|
static void __init zynq_map_io(void)
|
|
{
|
|
debug_ll_io_init();
|
|
zynq_scu_map_io();
|
|
}
|
|
|
|
static void zynq_system_reset(char mode, const char *cmd)
|
|
{
|
|
zynq_slcr_system_reset();
|
|
}
|
|
|
|
static const char * const zynq_dt_match[] = {
|
|
"xlnx,zynq-7000",
|
|
NULL
|
|
};
|
|
|
|
MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform")
|
|
.smp = smp_ops(zynq_smp_ops),
|
|
.map_io = zynq_map_io,
|
|
.init_machine = zynq_init_machine,
|
|
.init_time = zynq_timer_init,
|
|
.dt_compat = zynq_dt_match,
|
|
.restart = zynq_system_reset,
|
|
MACHINE_END
|