diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2011-01-08 11:28:32 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2011-01-08 11:28:32 +0000 |
commit | 0de8689b7093ff40983f48a433efe93074741013 (patch) | |
tree | 0df913a567f6508e768dc424c0c49f10d25a8cfe /target/linux | |
parent | 271bb8385b684074f1f9947cdfcae528d9456c64 (diff) | |
download | upstream-0de8689b7093ff40983f48a433efe93074741013.tar.gz upstream-0de8689b7093ff40983f48a433efe93074741013.tar.bz2 upstream-0de8689b7093ff40983f48a433efe93074741013.zip |
ar71xx: use spinlock in ar71xx_device_{start,stop}
SVN-Revision: 24929
Diffstat (limited to 'target/linux')
-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: |