Loading arch/arm/plat-orion/common.c +6 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading drivers/watchdog/orion_wdt.c +15 −9 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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); Loading @@ -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); } Loading @@ -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); Loading @@ -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); Loading @@ -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); } Loading @@ -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; } Loading Loading @@ -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) { Loading @@ -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; Loading Loading
arch/arm/plat-orion/common.c +6 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading
drivers/watchdog/orion_wdt.c +15 −9 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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); Loading @@ -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); } Loading @@ -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); Loading @@ -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); Loading @@ -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); } Loading @@ -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; } Loading Loading @@ -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) { Loading @@ -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; Loading