Changeset 24929


Ignore:
Timestamp:
2011-01-08T12:28:32+01:00 (7 years ago)
Author:
juhosg
Message:

ar71xx: use spinlock in ar71xx_device_{start,stop}

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/ar71xx.c

    r23976 r24929  
    1414#include <linux/types.h> 
    1515#include <linux/mutex.h> 
     16#include <linux/spinlock.h> 
    1617 
    1718#include <asm/mach-ar71xx/ar71xx.h> 
    1819 
    1920static DEFINE_MUTEX(ar71xx_flash_mutex); 
     21static DEFINE_SPINLOCK(ar71xx_device_lock); 
    2022 
    2123void __iomem *ar71xx_ddr_base; 
     
    4446        case AR71XX_SOC_AR7141: 
    4547        case AR71XX_SOC_AR7161: 
    46                 local_irq_save(flags); 
     48                spin_lock_irqsave(&ar71xx_device_lock, flags); 
    4749                t = ar71xx_reset_rr(AR71XX_RESET_REG_RESET_MODULE); 
    4850                ar71xx_reset_wr(AR71XX_RESET_REG_RESET_MODULE, t | mask); 
    49                 local_irq_restore(flags); 
     51                spin_unlock_irqrestore(&ar71xx_device_lock, flags); 
    5052                break; 
    5153 
     
    5456        case AR71XX_SOC_AR7242: 
    5557                mask_inv = mask & RESET_MODULE_USB_OHCI_DLL_7240; 
    56                 local_irq_save(flags); 
     58                spin_lock_irqsave(&ar71xx_device_lock, flags); 
    5759                t = ar71xx_reset_rr(AR724X_RESET_REG_RESET_MODULE); 
    5860                t |= mask; 
    5961                t &= ~mask_inv; 
    6062                ar71xx_reset_wr(AR724X_RESET_REG_RESET_MODULE, t); 
    61                 local_irq_restore(flags); 
     63                spin_unlock_irqrestore(&ar71xx_device_lock, flags); 
    6264                break; 
    6365 
    6466        case AR71XX_SOC_AR9130: 
    6567        case AR71XX_SOC_AR9132: 
    66                 local_irq_save(flags); 
     68                spin_lock_irqsave(&ar71xx_device_lock, flags); 
    6769                t = ar71xx_reset_rr(AR91XX_RESET_REG_RESET_MODULE); 
    6870                ar71xx_reset_wr(AR91XX_RESET_REG_RESET_MODULE, t | mask); 
    69                 local_irq_restore(flags); 
     71                spin_unlock_irqrestore(&ar71xx_device_lock, flags); 
    7072                break; 
    7173 
     
    8688        case AR71XX_SOC_AR7141: 
    8789        case AR71XX_SOC_AR7161: 
    88                 local_irq_save(flags); 
     90                spin_lock_irqsave(&ar71xx_device_lock, flags); 
    8991                t = ar71xx_reset_rr(AR71XX_RESET_REG_RESET_MODULE); 
    9092                ar71xx_reset_wr(AR71XX_RESET_REG_RESET_MODULE, t & ~mask); 
    91                 local_irq_restore(flags); 
     93                spin_unlock_irqrestore(&ar71xx_device_lock, flags); 
    9294                break; 
    9395 
     
    9698        case AR71XX_SOC_AR7242: 
    9799                mask_inv = mask & RESET_MODULE_USB_OHCI_DLL_7240; 
    98                 local_irq_save(flags); 
     100                spin_lock_irqsave(&ar71xx_device_lock, flags); 
    99101                t = ar71xx_reset_rr(AR724X_RESET_REG_RESET_MODULE); 
    100102                t &= ~mask; 
    101103                t |= mask_inv; 
    102104                ar71xx_reset_wr(AR724X_RESET_REG_RESET_MODULE, t); 
    103                 local_irq_restore(flags); 
     105                spin_unlock_irqrestore(&ar71xx_device_lock, flags); 
    104106                break; 
    105107 
    106108        case AR71XX_SOC_AR9130: 
    107109        case AR71XX_SOC_AR9132: 
    108                 local_irq_save(flags); 
     110                spin_lock_irqsave(&ar71xx_device_lock, flags); 
    109111                t = ar71xx_reset_rr(AR91XX_RESET_REG_RESET_MODULE); 
    110112                ar71xx_reset_wr(AR91XX_RESET_REG_RESET_MODULE, t & ~mask); 
    111                 local_irq_restore(flags); 
     113                spin_unlock_irqrestore(&ar71xx_device_lock, flags); 
    112114                break; 
    113115 
     
    127129        case AR71XX_SOC_AR7141: 
    128130        case AR71XX_SOC_AR7161: 
    129                 local_irq_save(flags); 
     131                spin_lock_irqsave(&ar71xx_device_lock, flags); 
    130132                t = ar71xx_reset_rr(AR71XX_RESET_REG_RESET_MODULE); 
    131                 local_irq_restore(flags); 
     133                spin_unlock_irqrestore(&ar71xx_device_lock, flags); 
    132134                break; 
    133135 
     
    135137        case AR71XX_SOC_AR7241: 
    136138        case AR71XX_SOC_AR7242: 
    137                 local_irq_save(flags); 
     139                spin_lock_irqsave(&ar71xx_device_lock, flags); 
    138140                t = ar71xx_reset_rr(AR724X_RESET_REG_RESET_MODULE); 
    139                 local_irq_restore(flags); 
     141                spin_unlock_irqrestore(&ar71xx_device_lock, flags); 
    140142                break; 
    141143 
    142144        case AR71XX_SOC_AR9130: 
    143145        case AR71XX_SOC_AR9132: 
    144                 local_irq_save(flags); 
     146                spin_lock_irqsave(&ar71xx_device_lock, flags); 
    145147                t = ar71xx_reset_rr(AR91XX_RESET_REG_RESET_MODULE); 
    146                 local_irq_restore(flags); 
     148                spin_unlock_irqrestore(&ar71xx_device_lock, flags); 
    147149                break; 
    148150 
Note: See TracChangeset for help on using the changeset viewer.