diff options
Diffstat (limited to 'target/linux/rdc/patches-2.6.32/003-rdc321x_watchdog_southbridge.patch')
-rw-r--r-- | target/linux/rdc/patches-2.6.32/003-rdc321x_watchdog_southbridge.patch | 148 |
1 files changed, 0 insertions, 148 deletions
diff --git a/target/linux/rdc/patches-2.6.32/003-rdc321x_watchdog_southbridge.patch b/target/linux/rdc/patches-2.6.32/003-rdc321x_watchdog_southbridge.patch deleted file mode 100644 index 9bb1453..0000000 --- a/target/linux/rdc/patches-2.6.32/003-rdc321x_watchdog_southbridge.patch +++ /dev/null @@ -1,148 +0,0 @@ -The RDC321x MFD southbridge driver will pass a reference to the southbridge -PCI device which should be used by the watchdog driver for its operations. -This patch converts the watchdog driver to use the pci_dev pointer and make use -of the base register resource which is passed along with the platform device. - -Acked-by: Wim Van Sebroeck <wim@iguana.be> -Signed-off-by: Florian Fainelli <florian@openwrt.org> ---- -Changes from v2: -- replaced rdc321x_pci_{read,write} -- use the pci_dev pointer passed as platform_data - ---- a/drivers/watchdog/rdc321x_wdt.c -+++ b/drivers/watchdog/rdc321x_wdt.c -@@ -1,7 +1,7 @@ - /* - * RDC321x watchdog driver - * -- * Copyright (C) 2007 Florian Fainelli <florian@openwrt.org> -+ * Copyright (C) 2007-2010 Florian Fainelli <florian@openwrt.org> - * - * This driver is highly inspired from the cpu5_wdt driver - * -@@ -36,8 +36,7 @@ - #include <linux/watchdog.h> - #include <linux/io.h> - #include <linux/uaccess.h> -- --#include <asm/rdc321x_defs.h> -+#include <linux/mfd/rdc321x.h> - - #define RDC_WDT_MASK 0x80000000 /* Mask */ - #define RDC_WDT_EN 0x00800000 /* Enable bit */ -@@ -63,6 +62,8 @@ static struct { - int default_ticks; - unsigned long inuse; - spinlock_t lock; -+ struct pci_dev *sb_pdev; -+ int base_reg; - } rdc321x_wdt_device; - - /* generic helper functions */ -@@ -70,14 +71,18 @@ static struct { - static void rdc321x_wdt_trigger(unsigned long unused) - { - unsigned long flags; -+ u32 val; - - if (rdc321x_wdt_device.running) - ticks--; - - /* keep watchdog alive */ - spin_lock_irqsave(&rdc321x_wdt_device.lock, flags); -- outl(RDC_WDT_EN | inl(RDC3210_CFGREG_DATA), -- RDC3210_CFGREG_DATA); -+ pci_read_config_dword(rdc321x_wdt_device.sb_pdev, -+ rdc321x_wdt_device.base_reg, &val); -+ val |= RDC_WDT_EN; -+ pci_write_config_dword(rdc321x_wdt_device.sb_pdev, -+ rdc321x_wdt_device.base_reg, val); - spin_unlock_irqrestore(&rdc321x_wdt_device.lock, flags); - - /* requeue?? */ -@@ -105,10 +110,13 @@ static void rdc321x_wdt_start(void) - - /* Clear the timer */ - spin_lock_irqsave(&rdc321x_wdt_device.lock, flags); -- outl(RDC_CLS_TMR, RDC3210_CFGREG_ADDR); -+ pci_write_config_dword(rdc321x_wdt_device.sb_pdev, -+ rdc321x_wdt_device.base_reg, RDC_CLS_TMR); - - /* Enable watchdog and set the timeout to 81.92 us */ -- outl(RDC_WDT_EN | RDC_WDT_CNT, RDC3210_CFGREG_DATA); -+ pci_write_config_dword(rdc321x_wdt_device.sb_pdev, -+ rdc321x_wdt_device.base_reg, -+ RDC_WDT_EN | RDC_WDT_CNT); - spin_unlock_irqrestore(&rdc321x_wdt_device.lock, flags); - - mod_timer(&rdc321x_wdt_device.timer, -@@ -148,7 +156,7 @@ static long rdc321x_wdt_ioctl(struct fil - unsigned long arg) - { - void __user *argp = (void __user *)arg; -- unsigned int value; -+ u32 value; - static struct watchdog_info ident = { - .options = WDIOF_CARDRESET, - .identity = "RDC321x WDT", -@@ -162,9 +170,10 @@ static long rdc321x_wdt_ioctl(struct fil - case WDIOC_GETSTATUS: - /* Read the value from the DATA register */ - spin_lock_irqsave(&rdc321x_wdt_device.lock, flags); -- value = inl(RDC3210_CFGREG_DATA); -+ pci_read_config_dword(rdc321x_wdt_device.sb_pdev, -+ rdc321x_wdt_device.base_reg, &value); - spin_unlock_irqrestore(&rdc321x_wdt_device.lock, flags); -- if (copy_to_user(argp, &value, sizeof(int))) -+ if (copy_to_user(argp, &value, sizeof(u32))) - return -EFAULT; - break; - case WDIOC_GETSUPPORT: -@@ -219,17 +228,35 @@ static struct miscdevice rdc321x_wdt_mis - static int __devinit rdc321x_wdt_probe(struct platform_device *pdev) - { - int err; -+ struct resource *r; -+ struct rdc321x_wdt_pdata *pdata; -+ -+ pdata = platform_get_drvdata(pdev); -+ if (!pdata) { -+ dev_err(&pdev->dev, "no platform data supplied\n"); -+ return -ENODEV; -+ } -+ -+ r = platform_get_resource_byname(pdev, IORESOURCE_IO, "wdt-reg"); -+ if (!r) { -+ dev_err(&pdev->dev, "failed to get wdt-reg resource\n"); -+ return -ENODEV; -+ } -+ -+ rdc321x_wdt_device.sb_pdev = pdata->sb_pdev; -+ rdc321x_wdt_device.base_reg = r->start; - - err = misc_register(&rdc321x_wdt_misc); - if (err < 0) { -- printk(KERN_ERR PFX "watchdog misc_register failed\n"); -+ dev_err(&pdev->dev, "misc_register failed\n"); - return err; - } - - spin_lock_init(&rdc321x_wdt_device.lock); - - /* Reset the watchdog */ -- outl(RDC_WDT_RST, RDC3210_CFGREG_DATA); -+ pci_write_config_dword(rdc321x_wdt_device.sb_pdev, -+ rdc321x_wdt_device.base_reg, RDC_WDT_RST); - - init_completion(&rdc321x_wdt_device.stop); - rdc321x_wdt_device.queue = 0; -@@ -240,7 +267,7 @@ static int __devinit rdc321x_wdt_probe(s - - rdc321x_wdt_device.default_ticks = ticks; - -- printk(KERN_INFO PFX "watchdog init success\n"); -+ dev_info(&pdev->dev, "watchdog init success\n"); - - return 0; - } |