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:
Коммит
c899445f97
|
@ -4,7 +4,7 @@
|
|||
|
||||
/ {
|
||||
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 {
|
||||
device_type = "memory";
|
||||
|
@ -15,11 +15,10 @@
|
|||
bootargs = "console=ttyS0,115200n8 earlyprintk";
|
||||
};
|
||||
|
||||
serial@f1012000 {
|
||||
compatible = "ns16550a";
|
||||
reg = <0xf1012000 0xff>;
|
||||
reg-shift = <2>;
|
||||
interrupts = <33>;
|
||||
clock-frequency = <200000000>;
|
||||
ocp@f1000000 {
|
||||
serial@12000 {
|
||||
clock-frequency = <200000000>;
|
||||
status = "ok";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,6 +1,36 @@
|
|||
/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_ARCH_KIRKWOOD_DT) += board-dt.o
|
||||
obj-$(CONFIG_MACH_DREAMPLUG_DT) += board-dreamplug.o
|
||||
|
|
|
@ -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
|
||||
*
|
||||
* Marvell DreamPlug Reference Board Setup
|
||||
* Flattened Device Tree board initialization
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
|
@ -12,150 +12,45 @@
|
|||
|
||||
#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 <mach/kirkwood.h>
|
||||
#include <plat/mvsdio.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <mach/bridge-regs.h>
|
||||
#include "common.h"
|
||||
#include "mpp.h"
|
||||
|
||||
static struct of_device_id kirkwood_dt_match_table[] __initdata = {
|
||||
{ .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)
|
||||
{
|
||||
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"))
|
||||
dreamplug_init();
|
||||
|
|
|
@ -279,7 +279,7 @@ void __init kirkwood_crypto_init(void)
|
|||
/*****************************************************************************
|
||||
* XOR0
|
||||
****************************************************************************/
|
||||
static void __init kirkwood_xor0_init(void)
|
||||
void __init kirkwood_xor0_init(void)
|
||||
{
|
||||
kirkwood_clk_ctrl |= CGC_XOR0;
|
||||
|
||||
|
@ -291,7 +291,7 @@ static void __init kirkwood_xor0_init(void)
|
|||
/*****************************************************************************
|
||||
* XOR1
|
||||
****************************************************************************/
|
||||
static void __init kirkwood_xor1_init(void)
|
||||
void __init kirkwood_xor1_init(void)
|
||||
{
|
||||
kirkwood_clk_ctrl |= CGC_XOR1;
|
||||
|
||||
|
@ -303,7 +303,7 @@ static void __init kirkwood_xor1_init(void)
|
|||
/*****************************************************************************
|
||||
* Watchdog
|
||||
****************************************************************************/
|
||||
static void __init kirkwood_wdt_init(void)
|
||||
void __init kirkwood_wdt_init(void)
|
||||
{
|
||||
orion_wdt_init(kirkwood_tclk);
|
||||
}
|
||||
|
@ -392,7 +392,7 @@ void __init kirkwood_audio_init(void)
|
|||
/*
|
||||
* Identify device ID and revision.
|
||||
*/
|
||||
static char * __init kirkwood_id(void)
|
||||
char * __init kirkwood_id(void)
|
||||
{
|
||||
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
|
||||
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",
|
||||
kirkwood_id(), kirkwood_tclk);
|
||||
kirkwood_i2s_data.tclk = kirkwood_tclk;
|
||||
|
||||
/*
|
||||
* 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_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 struct sys_timer kirkwood_timer;
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <plat/orion_wdt.h>
|
||||
#include <plat/mv_xor.h>
|
||||
#include <plat/ehci-orion.h>
|
||||
#include <mach/bridge-regs.h>
|
||||
|
||||
/* Fill in the resources structure and link it into the platform
|
||||
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 resource orion_wdt_resource =
|
||||
DEFINE_RES_MEM(TIMER_VIRT_BASE, 0x28);
|
||||
|
||||
static struct platform_device orion_wdt_device = {
|
||||
.name = "orion_wdt",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &orion_wdt_data,
|
||||
},
|
||||
.num_resources = 0,
|
||||
.resource = &orion_wdt_resource,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
void __init orion_wdt_init(unsigned long tclk)
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
#define __PLAT_AUDIO_H
|
||||
|
||||
struct kirkwood_asoc_platform_data {
|
||||
u32 tclk;
|
||||
int burst;
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include <linux/bcd.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/module.h>
|
||||
|
@ -294,11 +295,19 @@ static int __exit mv_rtc_remove(struct platform_device *pdev)
|
|||
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 = {
|
||||
.remove = __exit_p(mv_rtc_remove),
|
||||
.driver = {
|
||||
.name = "rtc-mv",
|
||||
.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);
|
||||
|
||||
/* 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)
|
||||
|| (spi->max_speed_hz > orion_spi->max_speed))
|
||||
spi->max_speed_hz = orion_spi->max_speed;
|
||||
|
|
|
@ -28,9 +28,9 @@
|
|||
/*
|
||||
* Watchdog timer block registers.
|
||||
*/
|
||||
#define TIMER_CTRL (TIMER_VIRT_BASE + 0x0000)
|
||||
#define TIMER_CTRL 0x0000
|
||||
#define WDT_EN 0x0010
|
||||
#define WDT_VAL (TIMER_VIRT_BASE + 0x0024)
|
||||
#define WDT_VAL 0x0024
|
||||
|
||||
#define WDT_MAX_CYCLE_COUNT 0xffffffff
|
||||
#define WDT_IN_USE 0
|
||||
|
@ -40,6 +40,7 @@ static int nowayout = WATCHDOG_NOWAYOUT;
|
|||
static int heartbeat = -1; /* module parameter (seconds) */
|
||||
static unsigned int wdt_max_duration; /* (seconds) */
|
||||
static unsigned int wdt_tclk;
|
||||
static void __iomem *wdt_reg;
|
||||
static unsigned long wdt_status;
|
||||
static DEFINE_SPINLOCK(wdt_lock);
|
||||
|
||||
|
@ -48,7 +49,7 @@ static void orion_wdt_ping(void)
|
|||
spin_lock(&wdt_lock);
|
||||
|
||||
/* Reload watchdog duration */
|
||||
writel(wdt_tclk * heartbeat, WDT_VAL);
|
||||
writel(wdt_tclk * heartbeat, wdt_reg + WDT_VAL);
|
||||
|
||||
spin_unlock(&wdt_lock);
|
||||
}
|
||||
|
@ -60,7 +61,7 @@ static void orion_wdt_enable(void)
|
|||
spin_lock(&wdt_lock);
|
||||
|
||||
/* Set watchdog duration */
|
||||
writel(wdt_tclk * heartbeat, WDT_VAL);
|
||||
writel(wdt_tclk * heartbeat, wdt_reg + WDT_VAL);
|
||||
|
||||
/* Clear watchdog timer interrupt */
|
||||
reg = readl(BRIDGE_CAUSE);
|
||||
|
@ -68,9 +69,9 @@ static void orion_wdt_enable(void)
|
|||
writel(reg, BRIDGE_CAUSE);
|
||||
|
||||
/* Enable watchdog timer */
|
||||
reg = readl(TIMER_CTRL);
|
||||
reg = readl(wdt_reg + TIMER_CTRL);
|
||||
reg |= WDT_EN;
|
||||
writel(reg, TIMER_CTRL);
|
||||
writel(reg, wdt_reg + TIMER_CTRL);
|
||||
|
||||
/* Enable reset on watchdog */
|
||||
reg = readl(RSTOUTn_MASK);
|
||||
|
@ -92,9 +93,9 @@ static void orion_wdt_disable(void)
|
|||
writel(reg, RSTOUTn_MASK);
|
||||
|
||||
/* Disable watchdog timer */
|
||||
reg = readl(TIMER_CTRL);
|
||||
reg = readl(wdt_reg + TIMER_CTRL);
|
||||
reg &= ~WDT_EN;
|
||||
writel(reg, TIMER_CTRL);
|
||||
writel(reg, wdt_reg + TIMER_CTRL);
|
||||
|
||||
spin_unlock(&wdt_lock);
|
||||
}
|
||||
|
@ -102,7 +103,7 @@ static void orion_wdt_disable(void)
|
|||
static int orion_wdt_get_timeleft(int *time_left)
|
||||
{
|
||||
spin_lock(&wdt_lock);
|
||||
*time_left = readl(WDT_VAL) / wdt_tclk;
|
||||
*time_left = readl(wdt_reg + WDT_VAL) / wdt_tclk;
|
||||
spin_unlock(&wdt_lock);
|
||||
return 0;
|
||||
}
|
||||
|
@ -236,6 +237,7 @@ static struct miscdevice orion_wdt_miscdev = {
|
|||
static int __devinit orion_wdt_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct orion_wdt_platform_data *pdata = pdev->dev.platform_data;
|
||||
struct resource *res;
|
||||
int ret;
|
||||
|
||||
if (pdata) {
|
||||
|
@ -245,6 +247,10 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
|
||||
wdt_reg = ioremap(res->start, resource_size(res));
|
||||
|
||||
if (orion_wdt_miscdev.parent)
|
||||
return -EBUSY;
|
||||
orion_wdt_miscdev.parent = &pdev->dev;
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
|
||||
struct orion_spi_info {
|
||||
u32 tclk; /* no <linux/clk.h> support yet */
|
||||
u32 enable_clock_fix;
|
||||
};
|
||||
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче