提交 1f033c1a 编写于 作者: L Linus Torvalds

Merge git://www.linux-watchdog.org/linux-watchdog

Watchdog updates from Wim Van Sebroeck:

* git://www.linux-watchdog.org/linux-watchdog:
  watchdog: fix GETTIMEOUT ioctl in booke_wdt
  watchdog: update maintainers git entry
  watchdog: Fix typo in pnx4008_wdt.c
  watchdog: Fix typo in Kconfig
  watchdog: fix error in probe() of s3c2410_wdt (reset at booting)
  watchdog: hpwdt: clean up set_memory_x call for 32 bit
...@@ -7271,7 +7271,7 @@ WATCHDOG DEVICE DRIVERS ...@@ -7271,7 +7271,7 @@ WATCHDOG DEVICE DRIVERS
M: Wim Van Sebroeck <wim@iguana.be> M: Wim Van Sebroeck <wim@iguana.be>
L: linux-watchdog@vger.kernel.org L: linux-watchdog@vger.kernel.org
W: http://www.linux-watchdog.org/ W: http://www.linux-watchdog.org/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog.git T: git git://www.linux-watchdog.org/linux-watchdog.git
S: Maintained S: Maintained
F: Documentation/watchdog/ F: Documentation/watchdog/
F: drivers/watchdog/ F: drivers/watchdog/
......
...@@ -1098,7 +1098,7 @@ config BOOKE_WDT_DEFAULT_TIMEOUT ...@@ -1098,7 +1098,7 @@ config BOOKE_WDT_DEFAULT_TIMEOUT
For Freescale Book-E processors, this is a number between 0 and 63. For Freescale Book-E processors, this is a number between 0 and 63.
For other Book-E processors, this is a number between 0 and 3. For other Book-E processors, this is a number between 0 and 3.
The value can be overidden by the wdt_period command-line parameter. The value can be overridden by the wdt_period command-line parameter.
# PPC64 Architecture # PPC64 Architecture
......
...@@ -198,9 +198,13 @@ static long booke_wdt_ioctl(struct file *file, ...@@ -198,9 +198,13 @@ static long booke_wdt_ioctl(struct file *file,
booke_wdt_period = tmp; booke_wdt_period = tmp;
#endif #endif
booke_wdt_set(); booke_wdt_set();
return 0; /* Fall */
case WDIOC_GETTIMEOUT: case WDIOC_GETTIMEOUT:
#ifdef CONFIG_FSL_BOOKE
return put_user(period_to_sec(booke_wdt_period), p);
#else
return put_user(booke_wdt_period, p); return put_user(booke_wdt_period, p);
#endif
default: default:
return -ENOTTY; return -ENOTTY;
} }
......
...@@ -231,7 +231,7 @@ static int __devinit cru_detect(unsigned long map_entry, ...@@ -231,7 +231,7 @@ static int __devinit cru_detect(unsigned long map_entry,
cmn_regs.u1.reax = CRU_BIOS_SIGNATURE_VALUE; cmn_regs.u1.reax = CRU_BIOS_SIGNATURE_VALUE;
set_memory_x((unsigned long)bios32_entrypoint, (2 * PAGE_SIZE)); set_memory_x((unsigned long)bios32_map, 2);
asminline_call(&cmn_regs, bios32_entrypoint); asminline_call(&cmn_regs, bios32_entrypoint);
if (cmn_regs.u1.ral != 0) { if (cmn_regs.u1.ral != 0) {
...@@ -250,7 +250,8 @@ static int __devinit cru_detect(unsigned long map_entry, ...@@ -250,7 +250,8 @@ static int __devinit cru_detect(unsigned long map_entry,
cru_rom_addr = cru_rom_addr =
ioremap(cru_physical_address, cru_length); ioremap(cru_physical_address, cru_length);
if (cru_rom_addr) { if (cru_rom_addr) {
set_memory_x((unsigned long)cru_rom_addr, cru_length); set_memory_x((unsigned long)cru_rom_addr & PAGE_MASK,
(cru_length + PAGE_SIZE - 1) >> PAGE_SHIFT);
retval = 0; retval = 0;
} }
} }
......
...@@ -264,7 +264,7 @@ static int __devinit pnx4008_wdt_probe(struct platform_device *pdev) ...@@ -264,7 +264,7 @@ static int __devinit pnx4008_wdt_probe(struct platform_device *pdev)
wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (wdt_mem == NULL) { if (wdt_mem == NULL) {
printk(KERN_INFO MODULE_NAME printk(KERN_INFO MODULE_NAME
"failed to get memory region resouce\n"); "failed to get memory region resource\n");
return -ENOENT; return -ENOENT;
} }
......
...@@ -312,18 +312,26 @@ static int __devinit s3c2410wdt_probe(struct platform_device *pdev) ...@@ -312,18 +312,26 @@ static int __devinit s3c2410wdt_probe(struct platform_device *pdev)
dev = &pdev->dev; dev = &pdev->dev;
wdt_dev = &pdev->dev; wdt_dev = &pdev->dev;
/* get the memory region for the watchdog timer */
wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (wdt_mem == NULL) { if (wdt_mem == NULL) {
dev_err(dev, "no memory resource specified\n"); dev_err(dev, "no memory resource specified\n");
return -ENOENT; return -ENOENT;
} }
wdt_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (wdt_irq == NULL) {
dev_err(dev, "no irq resource specified\n");
ret = -ENOENT;
goto err;
}
/* get the memory region for the watchdog timer */
size = resource_size(wdt_mem); size = resource_size(wdt_mem);
if (!request_mem_region(wdt_mem->start, size, pdev->name)) { if (!request_mem_region(wdt_mem->start, size, pdev->name)) {
dev_err(dev, "failed to get memory region\n"); dev_err(dev, "failed to get memory region\n");
return -EBUSY; ret = -EBUSY;
goto err;
} }
wdt_base = ioremap(wdt_mem->start, size); wdt_base = ioremap(wdt_mem->start, size);
...@@ -335,29 +343,17 @@ static int __devinit s3c2410wdt_probe(struct platform_device *pdev) ...@@ -335,29 +343,17 @@ static int __devinit s3c2410wdt_probe(struct platform_device *pdev)
DBG("probe: mapped wdt_base=%p\n", wdt_base); DBG("probe: mapped wdt_base=%p\n", wdt_base);
wdt_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (wdt_irq == NULL) {
dev_err(dev, "no irq resource specified\n");
ret = -ENOENT;
goto err_map;
}
ret = request_irq(wdt_irq->start, s3c2410wdt_irq, 0, pdev->name, pdev);
if (ret != 0) {
dev_err(dev, "failed to install irq (%d)\n", ret);
goto err_map;
}
wdt_clock = clk_get(&pdev->dev, "watchdog"); wdt_clock = clk_get(&pdev->dev, "watchdog");
if (IS_ERR(wdt_clock)) { if (IS_ERR(wdt_clock)) {
dev_err(dev, "failed to find watchdog clock source\n"); dev_err(dev, "failed to find watchdog clock source\n");
ret = PTR_ERR(wdt_clock); ret = PTR_ERR(wdt_clock);
goto err_irq; goto err_map;
} }
clk_enable(wdt_clock); clk_enable(wdt_clock);
if (s3c2410wdt_cpufreq_register() < 0) { ret = s3c2410wdt_cpufreq_register();
if (ret < 0) {
printk(KERN_ERR PFX "failed to register cpufreq\n"); printk(KERN_ERR PFX "failed to register cpufreq\n");
goto err_clk; goto err_clk;
} }
...@@ -378,12 +374,18 @@ static int __devinit s3c2410wdt_probe(struct platform_device *pdev) ...@@ -378,12 +374,18 @@ static int __devinit s3c2410wdt_probe(struct platform_device *pdev)
"cannot start\n"); "cannot start\n");
} }
ret = request_irq(wdt_irq->start, s3c2410wdt_irq, 0, pdev->name, pdev);
if (ret != 0) {
dev_err(dev, "failed to install irq (%d)\n", ret);
goto err_cpufreq;
}
watchdog_set_nowayout(&s3c2410_wdd, nowayout); watchdog_set_nowayout(&s3c2410_wdd, nowayout);
ret = watchdog_register_device(&s3c2410_wdd); ret = watchdog_register_device(&s3c2410_wdd);
if (ret) { if (ret) {
dev_err(dev, "cannot register watchdog (%d)\n", ret); dev_err(dev, "cannot register watchdog (%d)\n", ret);
goto err_cpufreq; goto err_irq;
} }
if (tmr_atboot && started == 0) { if (tmr_atboot && started == 0) {
...@@ -408,23 +410,26 @@ static int __devinit s3c2410wdt_probe(struct platform_device *pdev) ...@@ -408,23 +410,26 @@ static int __devinit s3c2410wdt_probe(struct platform_device *pdev)
return 0; return 0;
err_irq:
free_irq(wdt_irq->start, pdev);
err_cpufreq: err_cpufreq:
s3c2410wdt_cpufreq_deregister(); s3c2410wdt_cpufreq_deregister();
err_clk: err_clk:
clk_disable(wdt_clock); clk_disable(wdt_clock);
clk_put(wdt_clock); clk_put(wdt_clock);
wdt_clock = NULL;
err_irq:
free_irq(wdt_irq->start, pdev);
err_map: err_map:
iounmap(wdt_base); iounmap(wdt_base);
err_req: err_req:
release_mem_region(wdt_mem->start, size); release_mem_region(wdt_mem->start, size);
wdt_mem = NULL;
err:
wdt_irq = NULL;
wdt_mem = NULL;
return ret; return ret;
} }
...@@ -432,18 +437,18 @@ static int __devexit s3c2410wdt_remove(struct platform_device *dev) ...@@ -432,18 +437,18 @@ static int __devexit s3c2410wdt_remove(struct platform_device *dev)
{ {
watchdog_unregister_device(&s3c2410_wdd); watchdog_unregister_device(&s3c2410_wdd);
free_irq(wdt_irq->start, dev);
s3c2410wdt_cpufreq_deregister(); s3c2410wdt_cpufreq_deregister();
clk_disable(wdt_clock); clk_disable(wdt_clock);
clk_put(wdt_clock); clk_put(wdt_clock);
wdt_clock = NULL; wdt_clock = NULL;
free_irq(wdt_irq->start, dev);
wdt_irq = NULL;
iounmap(wdt_base); iounmap(wdt_base);
release_mem_region(wdt_mem->start, resource_size(wdt_mem)); release_mem_region(wdt_mem->start, resource_size(wdt_mem));
wdt_irq = NULL;
wdt_mem = NULL; wdt_mem = NULL;
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册