diff options
author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-01-08 11:28:32 +0000 |
---|---|---|
committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-01-08 11:28:32 +0000 |
commit | a241f3c34a6046b7b76f1961a8700e835e0ec0b5 (patch) | |
tree | 868f235fd6673d33ec8b552f1b81e39493084383 /target | |
parent | ab75a04099826e4f96c1a9323b2bee3ebb336854 (diff) |
ar71xx: use spinlock in ar71xx_device_{start,stop}
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@24929 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target')
-rw-r--r-- | target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c b/target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c index 6c88985ccf..ed31274182 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c @@ -13,10 +13,12 @@ #include <linux/module.h> #include <linux/types.h> #include <linux/mutex.h> +#include <linux/spinlock.h> #include <asm/mach-ar71xx/ar71xx.h> static DEFINE_MUTEX(ar71xx_flash_mutex); +static DEFINE_SPINLOCK(ar71xx_device_lock); void __iomem *ar71xx_ddr_base; EXPORT_SYMBOL_GPL(ar71xx_ddr_base); @@ -43,30 +45,30 @@ void ar71xx_device_stop(u32 mask) case AR71XX_SOC_AR7130: case AR71XX_SOC_AR7141: case AR71XX_SOC_AR7161: - local_irq_save(flags); + spin_lock_irqsave(&ar71xx_device_lock, flags); t = ar71xx_reset_rr(AR71XX_RESET_REG_RESET_MODULE); ar71xx_reset_wr(AR71XX_RESET_REG_RESET_MODULE, t | mask); - local_irq_restore(flags); + spin_unlock_irqrestore(&ar71xx_device_lock, flags); break; case AR71XX_SOC_AR7240: case AR71XX_SOC_AR7241: case AR71XX_SOC_AR7242: mask_inv = mask & RESET_MODULE_USB_OHCI_DLL_7240; - local_irq_save(flags); + spin_lock_irqsave(&ar71xx_device_lock, flags); t = ar71xx_reset_rr(AR724X_RESET_REG_RESET_MODULE); t |= mask; t &= ~mask_inv; ar71xx_reset_wr(AR724X_RESET_REG_RESET_MODULE, t); - local_irq_restore(flags); + spin_unlock_irqrestore(&ar71xx_device_lock, flags); break; case AR71XX_SOC_AR9130: case AR71XX_SOC_AR9132: - local_irq_save(flags); + spin_lock_irqsave(&ar71xx_device_lock, flags); t = ar71xx_reset_rr(AR91XX_RESET_REG_RESET_MODULE); ar71xx_reset_wr(AR91XX_RESET_REG_RESET_MODULE, t | mask); - local_irq_restore(flags); + spin_unlock_irqrestore(&ar71xx_device_lock, flags); break; default: @@ -85,30 +87,30 @@ void ar71xx_device_start(u32 mask) case AR71XX_SOC_AR7130: case AR71XX_SOC_AR7141: case AR71XX_SOC_AR7161: - local_irq_save(flags); + spin_lock_irqsave(&ar71xx_device_lock, flags); t = ar71xx_reset_rr(AR71XX_RESET_REG_RESET_MODULE); ar71xx_reset_wr(AR71XX_RESET_REG_RESET_MODULE, t & ~mask); - local_irq_restore(flags); + spin_unlock_irqrestore(&ar71xx_device_lock, flags); break; case AR71XX_SOC_AR7240: case AR71XX_SOC_AR7241: case AR71XX_SOC_AR7242: mask_inv = mask & RESET_MODULE_USB_OHCI_DLL_7240; - local_irq_save(flags); + spin_lock_irqsave(&ar71xx_device_lock, flags); t = ar71xx_reset_rr(AR724X_RESET_REG_RESET_MODULE); t &= ~mask; t |= mask_inv; ar71xx_reset_wr(AR724X_RESET_REG_RESET_MODULE, t); - local_irq_restore(flags); + spin_unlock_irqrestore(&ar71xx_device_lock, flags); break; case AR71XX_SOC_AR9130: case AR71XX_SOC_AR9132: - local_irq_save(flags); + spin_lock_irqsave(&ar71xx_device_lock, flags); t = ar71xx_reset_rr(AR91XX_RESET_REG_RESET_MODULE); ar71xx_reset_wr(AR91XX_RESET_REG_RESET_MODULE, t & ~mask); - local_irq_restore(flags); + spin_unlock_irqrestore(&ar71xx_device_lock, flags); break; default: @@ -126,24 +128,24 @@ int ar71xx_device_stopped(u32 mask) case AR71XX_SOC_AR7130: case AR71XX_SOC_AR7141: case AR71XX_SOC_AR7161: - local_irq_save(flags); + spin_lock_irqsave(&ar71xx_device_lock, flags); t = ar71xx_reset_rr(AR71XX_RESET_REG_RESET_MODULE); - local_irq_restore(flags); + spin_unlock_irqrestore(&ar71xx_device_lock, flags); break; case AR71XX_SOC_AR7240: case AR71XX_SOC_AR7241: case AR71XX_SOC_AR7242: - local_irq_save(flags); + spin_lock_irqsave(&ar71xx_device_lock, flags); t = ar71xx_reset_rr(AR724X_RESET_REG_RESET_MODULE); - local_irq_restore(flags); + spin_unlock_irqrestore(&ar71xx_device_lock, flags); break; case AR71XX_SOC_AR9130: case AR71XX_SOC_AR9132: - local_irq_save(flags); + spin_lock_irqsave(&ar71xx_device_lock, flags); t = ar71xx_reset_rr(AR91XX_RESET_REG_RESET_MODULE); - local_irq_restore(flags); + spin_unlock_irqrestore(&ar71xx_device_lock, flags); break; default: |