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
This commit is contained in:
commit
1f033c1a6e
6 changed files with 42 additions and 32 deletions
|
@ -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
|
||||||
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,
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
"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)
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue