forked from Minki/linux
Merge branch 'kirkwood_dt_for_3.4_v3' of git://git.infradead.org/users/jcooper/linux-kirkwood into kirkwood/dt
* 'kirkwood_dt_for_3.4_v3' of git://git.infradead.org/users/jcooper/linux-kirkwood: ARM: kirkwood: use devicetree for rtc-mv ARM: kirkwood: rtc-mv devicetree bindings ARM: kirkwood: fdt: define uart[01] as disabled, enable uart0 ARM: kirkwood: fdt: facilitate new boards during fdt migration ARM: kirkwood: fdt: absorb kirkwood_init() ARM: kirkwood: fdt: use mrvl ticker symbol ARM: orion: wdt: use resource vice direct access ARM: Kirkwood: Remove tclk from kirkwood_asoc_platform_data. ARM: orion: spi: remove enable_clock_fix which is not used
This commit is contained in:
commit
c899445f97
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Globalscale Technologies Dreamplug";
|
model = "Globalscale Technologies Dreamplug";
|
||||||
compatible = "globalscale,dreamplug-003-ds2001", "globalscale,dreamplug", "marvell,kirkwood-88f6281", "marvell,kirkwood";
|
compatible = "globalscale,dreamplug-003-ds2001", "globalscale,dreamplug", "mrvl,kirkwood-88f6281", "mrvl,kirkwood";
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
device_type = "memory";
|
device_type = "memory";
|
||||||
|
@ -15,11 +15,10 @@
|
||||||
bootargs = "console=ttyS0,115200n8 earlyprintk";
|
bootargs = "console=ttyS0,115200n8 earlyprintk";
|
||||||
};
|
};
|
||||||
|
|
||||||
serial@f1012000 {
|
ocp@f1000000 {
|
||||||
compatible = "ns16550a";
|
serial@12000 {
|
||||||
reg = <0xf1012000 0xff>;
|
clock-frequency = <200000000>;
|
||||||
reg-shift = <2>;
|
status = "ok";
|
||||||
interrupts = <33>;
|
};
|
||||||
clock-frequency = <200000000>;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,36 @@
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "marvell,kirkwood";
|
compatible = "mrvl,kirkwood";
|
||||||
};
|
|
||||||
|
|
||||||
|
ocp@f1000000 {
|
||||||
|
compatible = "simple-bus";
|
||||||
|
ranges = <0 0xf1000000 0x1000000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
serial@12000 {
|
||||||
|
compatible = "ns16550a";
|
||||||
|
reg = <0x12000 0x100>;
|
||||||
|
reg-shift = <2>;
|
||||||
|
interrupts = <33>;
|
||||||
|
/* set clock-frequency in board dts */
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
serial@12100 {
|
||||||
|
compatible = "ns16550a";
|
||||||
|
reg = <0x12100 0x100>;
|
||||||
|
reg-shift = <2>;
|
||||||
|
interrupts = <34>;
|
||||||
|
/* set clock-frequency in board dts */
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
rtc@10300 {
|
||||||
|
compatible = "mrvl,kirkwood-rtc", "mrvl,orion-rtc";
|
||||||
|
reg = <0x10300 0x20>;
|
||||||
|
interrupts = <53>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
|
@ -21,3 +21,4 @@ obj-$(CONFIG_MACH_T5325) += t5325-setup.o
|
||||||
|
|
||||||
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
||||||
obj-$(CONFIG_ARCH_KIRKWOOD_DT) += board-dt.o
|
obj-$(CONFIG_ARCH_KIRKWOOD_DT) += board-dt.o
|
||||||
|
obj-$(CONFIG_MACH_DREAMPLUG_DT) += board-dreamplug.o
|
||||||
|
|
152
arch/arm/mach-kirkwood/board-dreamplug.c
Normal file
152
arch/arm/mach-kirkwood/board-dreamplug.c
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012 (C), Jason Cooper <jason@lakedaemon.net>
|
||||||
|
*
|
||||||
|
* arch/arm/mach-kirkwood/board-dreamplug.c
|
||||||
|
*
|
||||||
|
* Marvell DreamPlug Reference Board Init for drivers not converted to
|
||||||
|
* flattened device tree yet.
|
||||||
|
*
|
||||||
|
* This file is licensed under the terms of the GNU General Public
|
||||||
|
* License version 2. This program is licensed "as is" without any
|
||||||
|
* warranty of any kind, whether express or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/mtd/partitions.h>
|
||||||
|
#include <linux/ata_platform.h>
|
||||||
|
#include <linux/mv643xx_eth.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
#include <linux/of_address.h>
|
||||||
|
#include <linux/of_fdt.h>
|
||||||
|
#include <linux/of_irq.h>
|
||||||
|
#include <linux/of_platform.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/leds.h>
|
||||||
|
#include <linux/mtd/physmap.h>
|
||||||
|
#include <linux/spi/flash.h>
|
||||||
|
#include <linux/spi/spi.h>
|
||||||
|
#include <linux/spi/orion_spi.h>
|
||||||
|
#include <asm/mach-types.h>
|
||||||
|
#include <asm/mach/arch.h>
|
||||||
|
#include <asm/mach/map.h>
|
||||||
|
#include <mach/kirkwood.h>
|
||||||
|
#include <mach/bridge-regs.h>
|
||||||
|
#include <plat/mvsdio.h>
|
||||||
|
#include "common.h"
|
||||||
|
#include "mpp.h"
|
||||||
|
|
||||||
|
struct mtd_partition dreamplug_partitions[] = {
|
||||||
|
{
|
||||||
|
.name = "u-boot",
|
||||||
|
.size = SZ_512K,
|
||||||
|
.offset = 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "u-boot env",
|
||||||
|
.size = SZ_64K,
|
||||||
|
.offset = SZ_512K + SZ_512K,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "dtb",
|
||||||
|
.size = SZ_64K,
|
||||||
|
.offset = SZ_512K + SZ_512K + SZ_512K,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct flash_platform_data dreamplug_spi_slave_data = {
|
||||||
|
.type = "mx25l1606e",
|
||||||
|
.name = "spi_flash",
|
||||||
|
.parts = dreamplug_partitions,
|
||||||
|
.nr_parts = ARRAY_SIZE(dreamplug_partitions),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct spi_board_info __initdata dreamplug_spi_slave_info[] = {
|
||||||
|
{
|
||||||
|
.modalias = "m25p80",
|
||||||
|
.platform_data = &dreamplug_spi_slave_data,
|
||||||
|
.irq = -1,
|
||||||
|
.max_speed_hz = 50000000,
|
||||||
|
.bus_num = 0,
|
||||||
|
.chip_select = 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct mv643xx_eth_platform_data dreamplug_ge00_data = {
|
||||||
|
.phy_addr = MV643XX_ETH_PHY_ADDR(0),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct mv643xx_eth_platform_data dreamplug_ge01_data = {
|
||||||
|
.phy_addr = MV643XX_ETH_PHY_ADDR(1),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct mv_sata_platform_data dreamplug_sata_data = {
|
||||||
|
.n_ports = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct mvsdio_platform_data dreamplug_mvsdio_data = {
|
||||||
|
/* unfortunately the CD signal has not been connected */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_led dreamplug_led_pins[] = {
|
||||||
|
{
|
||||||
|
.name = "dreamplug:blue:bluetooth",
|
||||||
|
.gpio = 47,
|
||||||
|
.active_low = 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "dreamplug:green:wifi",
|
||||||
|
.gpio = 48,
|
||||||
|
.active_low = 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "dreamplug:green:wifi_ap",
|
||||||
|
.gpio = 49,
|
||||||
|
.active_low = 1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_led_platform_data dreamplug_led_data = {
|
||||||
|
.leds = dreamplug_led_pins,
|
||||||
|
.num_leds = ARRAY_SIZE(dreamplug_led_pins),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device dreamplug_leds = {
|
||||||
|
.name = "leds-gpio",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &dreamplug_led_data,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned int dreamplug_mpp_config[] __initdata = {
|
||||||
|
MPP0_SPI_SCn,
|
||||||
|
MPP1_SPI_MOSI,
|
||||||
|
MPP2_SPI_SCK,
|
||||||
|
MPP3_SPI_MISO,
|
||||||
|
MPP47_GPIO, /* Bluetooth LED */
|
||||||
|
MPP48_GPIO, /* Wifi LED */
|
||||||
|
MPP49_GPIO, /* Wifi AP LED */
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
void __init dreamplug_init(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Basic setup. Needs to be called early.
|
||||||
|
*/
|
||||||
|
kirkwood_mpp_conf(dreamplug_mpp_config);
|
||||||
|
|
||||||
|
spi_register_board_info(dreamplug_spi_slave_info,
|
||||||
|
ARRAY_SIZE(dreamplug_spi_slave_info));
|
||||||
|
kirkwood_spi_init();
|
||||||
|
|
||||||
|
kirkwood_ehci_init();
|
||||||
|
kirkwood_ge00_init(&dreamplug_ge00_data);
|
||||||
|
kirkwood_ge01_init(&dreamplug_ge01_data);
|
||||||
|
kirkwood_sata_init(&dreamplug_sata_data);
|
||||||
|
kirkwood_sdio_init(&dreamplug_mvsdio_data);
|
||||||
|
|
||||||
|
platform_device_register(&dreamplug_leds);
|
||||||
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* arch/arm/mach-kirkwood/board-dt.c
|
* arch/arm/mach-kirkwood/board-dt.c
|
||||||
*
|
*
|
||||||
* Marvell DreamPlug Reference Board Setup
|
* Flattened Device Tree board initialization
|
||||||
*
|
*
|
||||||
* This file is licensed under the terms of the GNU General Public
|
* This file is licensed under the terms of the GNU General Public
|
||||||
* License version 2. This program is licensed "as is" without any
|
* License version 2. This program is licensed "as is" without any
|
||||||
|
@ -12,150 +12,45 @@
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/platform_device.h>
|
|
||||||
#include <linux/mtd/partitions.h>
|
|
||||||
#include <linux/ata_platform.h>
|
|
||||||
#include <linux/mv643xx_eth.h>
|
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
#include <linux/of_address.h>
|
|
||||||
#include <linux/of_fdt.h>
|
|
||||||
#include <linux/of_irq.h>
|
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
#include <linux/leds.h>
|
|
||||||
#include <linux/mtd/physmap.h>
|
|
||||||
#include <linux/spi/flash.h>
|
|
||||||
#include <linux/spi/spi.h>
|
|
||||||
#include <linux/spi/orion_spi.h>
|
|
||||||
#include <asm/mach-types.h>
|
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <mach/kirkwood.h>
|
#include <asm/mach/map.h>
|
||||||
#include <plat/mvsdio.h>
|
#include <mach/bridge-regs.h>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "mpp.h"
|
|
||||||
|
|
||||||
static struct of_device_id kirkwood_dt_match_table[] __initdata = {
|
static struct of_device_id kirkwood_dt_match_table[] __initdata = {
|
||||||
{ .compatible = "simple-bus", },
|
{ .compatible = "simple-bus", },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mtd_partition dreamplug_partitions[] = {
|
|
||||||
{
|
|
||||||
.name = "u-boot",
|
|
||||||
.size = SZ_512K,
|
|
||||||
.offset = 0,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "u-boot env",
|
|
||||||
.size = SZ_64K,
|
|
||||||
.offset = SZ_512K + SZ_512K,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "dtb",
|
|
||||||
.size = SZ_64K,
|
|
||||||
.offset = SZ_512K + SZ_512K + SZ_512K,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct flash_platform_data dreamplug_spi_slave_data = {
|
|
||||||
.type = "mx25l1606e",
|
|
||||||
.name = "spi_flash",
|
|
||||||
.parts = dreamplug_partitions,
|
|
||||||
.nr_parts = ARRAY_SIZE(dreamplug_partitions),
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct spi_board_info __initdata dreamplug_spi_slave_info[] = {
|
|
||||||
{
|
|
||||||
.modalias = "m25p80",
|
|
||||||
.platform_data = &dreamplug_spi_slave_data,
|
|
||||||
.irq = -1,
|
|
||||||
.max_speed_hz = 50000000,
|
|
||||||
.bus_num = 0,
|
|
||||||
.chip_select = 0,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mv643xx_eth_platform_data dreamplug_ge00_data = {
|
|
||||||
.phy_addr = MV643XX_ETH_PHY_ADDR(0),
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mv643xx_eth_platform_data dreamplug_ge01_data = {
|
|
||||||
.phy_addr = MV643XX_ETH_PHY_ADDR(1),
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mv_sata_platform_data dreamplug_sata_data = {
|
|
||||||
.n_ports = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mvsdio_platform_data dreamplug_mvsdio_data = {
|
|
||||||
/* unfortunately the CD signal has not been connected */
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct gpio_led dreamplug_led_pins[] = {
|
|
||||||
{
|
|
||||||
.name = "dreamplug:blue:bluetooth",
|
|
||||||
.gpio = 47,
|
|
||||||
.active_low = 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "dreamplug:green:wifi",
|
|
||||||
.gpio = 48,
|
|
||||||
.active_low = 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "dreamplug:green:wifi_ap",
|
|
||||||
.gpio = 49,
|
|
||||||
.active_low = 1,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct gpio_led_platform_data dreamplug_led_data = {
|
|
||||||
.leds = dreamplug_led_pins,
|
|
||||||
.num_leds = ARRAY_SIZE(dreamplug_led_pins),
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device dreamplug_leds = {
|
|
||||||
.name = "leds-gpio",
|
|
||||||
.id = -1,
|
|
||||||
.dev = {
|
|
||||||
.platform_data = &dreamplug_led_data,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static unsigned int dreamplug_mpp_config[] __initdata = {
|
|
||||||
MPP0_SPI_SCn,
|
|
||||||
MPP1_SPI_MOSI,
|
|
||||||
MPP2_SPI_SCK,
|
|
||||||
MPP3_SPI_MISO,
|
|
||||||
MPP47_GPIO, /* Bluetooth LED */
|
|
||||||
MPP48_GPIO, /* Wifi LED */
|
|
||||||
MPP49_GPIO, /* Wifi AP LED */
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
static void __init dreamplug_init(void)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Basic setup. Needs to be called early.
|
|
||||||
*/
|
|
||||||
kirkwood_mpp_conf(dreamplug_mpp_config);
|
|
||||||
|
|
||||||
spi_register_board_info(dreamplug_spi_slave_info,
|
|
||||||
ARRAY_SIZE(dreamplug_spi_slave_info));
|
|
||||||
kirkwood_spi_init();
|
|
||||||
|
|
||||||
kirkwood_ehci_init();
|
|
||||||
kirkwood_ge00_init(&dreamplug_ge00_data);
|
|
||||||
kirkwood_ge01_init(&dreamplug_ge01_data);
|
|
||||||
kirkwood_sata_init(&dreamplug_sata_data);
|
|
||||||
kirkwood_sdio_init(&dreamplug_mvsdio_data);
|
|
||||||
|
|
||||||
platform_device_register(&dreamplug_leds);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init kirkwood_dt_init(void)
|
static void __init kirkwood_dt_init(void)
|
||||||
{
|
{
|
||||||
kirkwood_init();
|
pr_info("Kirkwood: %s, TCLK=%d.\n", kirkwood_id(), kirkwood_tclk);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Disable propagation of mbus errors to the CPU local bus,
|
||||||
|
* as this causes mbus errors (which can occur for example
|
||||||
|
* for PCI aborts) to throw CPU aborts, which we're not set
|
||||||
|
* up to deal with.
|
||||||
|
*/
|
||||||
|
writel(readl(CPU_CONFIG) & ~CPU_CONFIG_ERROR_PROP, CPU_CONFIG);
|
||||||
|
|
||||||
|
kirkwood_setup_cpu_mbus();
|
||||||
|
|
||||||
|
#ifdef CONFIG_CACHE_FEROCEON_L2
|
||||||
|
kirkwood_l2_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* internal devices that every board has */
|
||||||
|
kirkwood_wdt_init();
|
||||||
|
kirkwood_xor0_init();
|
||||||
|
kirkwood_xor1_init();
|
||||||
|
kirkwood_crypto_init();
|
||||||
|
|
||||||
|
#ifdef CONFIG_KEXEC
|
||||||
|
kexec_reinit = kirkwood_enable_pcie;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (of_machine_is_compatible("globalscale,dreamplug"))
|
if (of_machine_is_compatible("globalscale,dreamplug"))
|
||||||
dreamplug_init();
|
dreamplug_init();
|
||||||
|
|
|
@ -279,7 +279,7 @@ void __init kirkwood_crypto_init(void)
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* XOR0
|
* XOR0
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
static void __init kirkwood_xor0_init(void)
|
void __init kirkwood_xor0_init(void)
|
||||||
{
|
{
|
||||||
kirkwood_clk_ctrl |= CGC_XOR0;
|
kirkwood_clk_ctrl |= CGC_XOR0;
|
||||||
|
|
||||||
|
@ -291,7 +291,7 @@ static void __init kirkwood_xor0_init(void)
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* XOR1
|
* XOR1
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
static void __init kirkwood_xor1_init(void)
|
void __init kirkwood_xor1_init(void)
|
||||||
{
|
{
|
||||||
kirkwood_clk_ctrl |= CGC_XOR1;
|
kirkwood_clk_ctrl |= CGC_XOR1;
|
||||||
|
|
||||||
|
@ -303,7 +303,7 @@ static void __init kirkwood_xor1_init(void)
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Watchdog
|
* Watchdog
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
static void __init kirkwood_wdt_init(void)
|
void __init kirkwood_wdt_init(void)
|
||||||
{
|
{
|
||||||
orion_wdt_init(kirkwood_tclk);
|
orion_wdt_init(kirkwood_tclk);
|
||||||
}
|
}
|
||||||
|
@ -392,7 +392,7 @@ void __init kirkwood_audio_init(void)
|
||||||
/*
|
/*
|
||||||
* Identify device ID and revision.
|
* Identify device ID and revision.
|
||||||
*/
|
*/
|
||||||
static char * __init kirkwood_id(void)
|
char * __init kirkwood_id(void)
|
||||||
{
|
{
|
||||||
u32 dev, rev;
|
u32 dev, rev;
|
||||||
|
|
||||||
|
@ -435,7 +435,7 @@ static char * __init kirkwood_id(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init kirkwood_l2_init(void)
|
void __init kirkwood_l2_init(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH
|
#ifdef CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH
|
||||||
writel(readl(L2_CONFIG_REG) | L2_WRITETHROUGH, L2_CONFIG_REG);
|
writel(readl(L2_CONFIG_REG) | L2_WRITETHROUGH, L2_CONFIG_REG);
|
||||||
|
@ -450,7 +450,6 @@ void __init kirkwood_init(void)
|
||||||
{
|
{
|
||||||
printk(KERN_INFO "Kirkwood: %s, TCLK=%d.\n",
|
printk(KERN_INFO "Kirkwood: %s, TCLK=%d.\n",
|
||||||
kirkwood_id(), kirkwood_tclk);
|
kirkwood_id(), kirkwood_tclk);
|
||||||
kirkwood_i2s_data.tclk = kirkwood_tclk;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Disable propagation of mbus errors to the CPU local bus,
|
* Disable propagation of mbus errors to the CPU local bus,
|
||||||
|
|
|
@ -51,6 +51,21 @@ void kirkwood_nand_init_rnb(struct mtd_partition *parts, int nr_parts, int (*dev
|
||||||
void kirkwood_audio_init(void);
|
void kirkwood_audio_init(void);
|
||||||
void kirkwood_restart(char, const char *);
|
void kirkwood_restart(char, const char *);
|
||||||
|
|
||||||
|
/* board init functions for boards not fully converted to fdt */
|
||||||
|
#ifdef CONFIG_MACH_DREAMPLUG_DT
|
||||||
|
void dreamplug_init(void);
|
||||||
|
#else
|
||||||
|
static inline void dreamplug_init(void) {};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* early init functions not converted to fdt yet */
|
||||||
|
char *kirkwood_id(void);
|
||||||
|
void kirkwood_l2_init(void);
|
||||||
|
void kirkwood_wdt_init(void);
|
||||||
|
void kirkwood_xor0_init(void);
|
||||||
|
void kirkwood_xor1_init(void);
|
||||||
|
void kirkwood_crypto_init(void);
|
||||||
|
|
||||||
extern int kirkwood_tclk;
|
extern int kirkwood_tclk;
|
||||||
extern struct sys_timer kirkwood_timer;
|
extern struct sys_timer kirkwood_timer;
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <plat/orion_wdt.h>
|
#include <plat/orion_wdt.h>
|
||||||
#include <plat/mv_xor.h>
|
#include <plat/mv_xor.h>
|
||||||
#include <plat/ehci-orion.h>
|
#include <plat/ehci-orion.h>
|
||||||
|
#include <mach/bridge-regs.h>
|
||||||
|
|
||||||
/* Fill in the resources structure and link it into the platform
|
/* Fill in the resources structure and link it into the platform
|
||||||
device structure. There is always a memory region, and nearly
|
device structure. There is always a memory region, and nearly
|
||||||
|
@ -568,13 +569,17 @@ void __init orion_spi_1_init(unsigned long mapbase,
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
static struct orion_wdt_platform_data orion_wdt_data;
|
static struct orion_wdt_platform_data orion_wdt_data;
|
||||||
|
|
||||||
|
static struct resource orion_wdt_resource =
|
||||||
|
DEFINE_RES_MEM(TIMER_VIRT_BASE, 0x28);
|
||||||
|
|
||||||
static struct platform_device orion_wdt_device = {
|
static struct platform_device orion_wdt_device = {
|
||||||
.name = "orion_wdt",
|
.name = "orion_wdt",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &orion_wdt_data,
|
.platform_data = &orion_wdt_data,
|
||||||
},
|
},
|
||||||
.num_resources = 0,
|
.resource = &orion_wdt_resource,
|
||||||
|
.num_resources = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init orion_wdt_init(unsigned long tclk)
|
void __init orion_wdt_init(unsigned long tclk)
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
#define __PLAT_AUDIO_H
|
#define __PLAT_AUDIO_H
|
||||||
|
|
||||||
struct kirkwood_asoc_platform_data {
|
struct kirkwood_asoc_platform_data {
|
||||||
u32 tclk;
|
|
||||||
int burst;
|
int burst;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <linux/bcd.h>
|
#include <linux/bcd.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/of.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/gfp.h>
|
#include <linux/gfp.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
@ -294,11 +295,19 @@ static int __exit mv_rtc_remove(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF
|
||||||
|
static struct of_device_id rtc_mv_of_match_table[] = {
|
||||||
|
{ .compatible = "mrvl,orion-rtc", },
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct platform_driver mv_rtc_driver = {
|
static struct platform_driver mv_rtc_driver = {
|
||||||
.remove = __exit_p(mv_rtc_remove),
|
.remove = __exit_p(mv_rtc_remove),
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "rtc-mv",
|
.name = "rtc-mv",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
.of_match_table = of_match_ptr(rtc_mv_of_match_table),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -359,11 +359,6 @@ static int orion_spi_setup(struct spi_device *spi)
|
||||||
|
|
||||||
orion_spi = spi_master_get_devdata(spi->master);
|
orion_spi = spi_master_get_devdata(spi->master);
|
||||||
|
|
||||||
/* Fix ac timing if required. */
|
|
||||||
if (orion_spi->spi_info->enable_clock_fix)
|
|
||||||
orion_spi_setbits(orion_spi, ORION_SPI_IF_CONFIG_REG,
|
|
||||||
(1 << 14));
|
|
||||||
|
|
||||||
if ((spi->max_speed_hz == 0)
|
if ((spi->max_speed_hz == 0)
|
||||||
|| (spi->max_speed_hz > orion_spi->max_speed))
|
|| (spi->max_speed_hz > orion_spi->max_speed))
|
||||||
spi->max_speed_hz = orion_spi->max_speed;
|
spi->max_speed_hz = orion_spi->max_speed;
|
||||||
|
|
|
@ -28,9 +28,9 @@
|
||||||
/*
|
/*
|
||||||
* Watchdog timer block registers.
|
* Watchdog timer block registers.
|
||||||
*/
|
*/
|
||||||
#define TIMER_CTRL (TIMER_VIRT_BASE + 0x0000)
|
#define TIMER_CTRL 0x0000
|
||||||
#define WDT_EN 0x0010
|
#define WDT_EN 0x0010
|
||||||
#define WDT_VAL (TIMER_VIRT_BASE + 0x0024)
|
#define WDT_VAL 0x0024
|
||||||
|
|
||||||
#define WDT_MAX_CYCLE_COUNT 0xffffffff
|
#define WDT_MAX_CYCLE_COUNT 0xffffffff
|
||||||
#define WDT_IN_USE 0
|
#define WDT_IN_USE 0
|
||||||
|
@ -40,6 +40,7 @@ static int nowayout = WATCHDOG_NOWAYOUT;
|
||||||
static int heartbeat = -1; /* module parameter (seconds) */
|
static int heartbeat = -1; /* module parameter (seconds) */
|
||||||
static unsigned int wdt_max_duration; /* (seconds) */
|
static unsigned int wdt_max_duration; /* (seconds) */
|
||||||
static unsigned int wdt_tclk;
|
static unsigned int wdt_tclk;
|
||||||
|
static void __iomem *wdt_reg;
|
||||||
static unsigned long wdt_status;
|
static unsigned long wdt_status;
|
||||||
static DEFINE_SPINLOCK(wdt_lock);
|
static DEFINE_SPINLOCK(wdt_lock);
|
||||||
|
|
||||||
|
@ -48,7 +49,7 @@ static void orion_wdt_ping(void)
|
||||||
spin_lock(&wdt_lock);
|
spin_lock(&wdt_lock);
|
||||||
|
|
||||||
/* Reload watchdog duration */
|
/* Reload watchdog duration */
|
||||||
writel(wdt_tclk * heartbeat, WDT_VAL);
|
writel(wdt_tclk * heartbeat, wdt_reg + WDT_VAL);
|
||||||
|
|
||||||
spin_unlock(&wdt_lock);
|
spin_unlock(&wdt_lock);
|
||||||
}
|
}
|
||||||
|
@ -60,7 +61,7 @@ static void orion_wdt_enable(void)
|
||||||
spin_lock(&wdt_lock);
|
spin_lock(&wdt_lock);
|
||||||
|
|
||||||
/* Set watchdog duration */
|
/* Set watchdog duration */
|
||||||
writel(wdt_tclk * heartbeat, WDT_VAL);
|
writel(wdt_tclk * heartbeat, wdt_reg + WDT_VAL);
|
||||||
|
|
||||||
/* Clear watchdog timer interrupt */
|
/* Clear watchdog timer interrupt */
|
||||||
reg = readl(BRIDGE_CAUSE);
|
reg = readl(BRIDGE_CAUSE);
|
||||||
|
@ -68,9 +69,9 @@ static void orion_wdt_enable(void)
|
||||||
writel(reg, BRIDGE_CAUSE);
|
writel(reg, BRIDGE_CAUSE);
|
||||||
|
|
||||||
/* Enable watchdog timer */
|
/* Enable watchdog timer */
|
||||||
reg = readl(TIMER_CTRL);
|
reg = readl(wdt_reg + TIMER_CTRL);
|
||||||
reg |= WDT_EN;
|
reg |= WDT_EN;
|
||||||
writel(reg, TIMER_CTRL);
|
writel(reg, wdt_reg + TIMER_CTRL);
|
||||||
|
|
||||||
/* Enable reset on watchdog */
|
/* Enable reset on watchdog */
|
||||||
reg = readl(RSTOUTn_MASK);
|
reg = readl(RSTOUTn_MASK);
|
||||||
|
@ -92,9 +93,9 @@ static void orion_wdt_disable(void)
|
||||||
writel(reg, RSTOUTn_MASK);
|
writel(reg, RSTOUTn_MASK);
|
||||||
|
|
||||||
/* Disable watchdog timer */
|
/* Disable watchdog timer */
|
||||||
reg = readl(TIMER_CTRL);
|
reg = readl(wdt_reg + TIMER_CTRL);
|
||||||
reg &= ~WDT_EN;
|
reg &= ~WDT_EN;
|
||||||
writel(reg, TIMER_CTRL);
|
writel(reg, wdt_reg + TIMER_CTRL);
|
||||||
|
|
||||||
spin_unlock(&wdt_lock);
|
spin_unlock(&wdt_lock);
|
||||||
}
|
}
|
||||||
|
@ -102,7 +103,7 @@ static void orion_wdt_disable(void)
|
||||||
static int orion_wdt_get_timeleft(int *time_left)
|
static int orion_wdt_get_timeleft(int *time_left)
|
||||||
{
|
{
|
||||||
spin_lock(&wdt_lock);
|
spin_lock(&wdt_lock);
|
||||||
*time_left = readl(WDT_VAL) / wdt_tclk;
|
*time_left = readl(wdt_reg + WDT_VAL) / wdt_tclk;
|
||||||
spin_unlock(&wdt_lock);
|
spin_unlock(&wdt_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -236,6 +237,7 @@ static struct miscdevice orion_wdt_miscdev = {
|
||||||
static int __devinit orion_wdt_probe(struct platform_device *pdev)
|
static int __devinit orion_wdt_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct orion_wdt_platform_data *pdata = pdev->dev.platform_data;
|
struct orion_wdt_platform_data *pdata = pdev->dev.platform_data;
|
||||||
|
struct resource *res;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (pdata) {
|
if (pdata) {
|
||||||
|
@ -245,6 +247,10 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
|
||||||
|
wdt_reg = ioremap(res->start, resource_size(res));
|
||||||
|
|
||||||
if (orion_wdt_miscdev.parent)
|
if (orion_wdt_miscdev.parent)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
orion_wdt_miscdev.parent = &pdev->dev;
|
orion_wdt_miscdev.parent = &pdev->dev;
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
|
|
||||||
struct orion_spi_info {
|
struct orion_spi_info {
|
||||||
u32 tclk; /* no <linux/clk.h> support yet */
|
u32 tclk; /* no <linux/clk.h> support yet */
|
||||||
u32 enable_clock_fix;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user