diff options
Diffstat (limited to 'arch/powerpc/sysdev/fsl_rmu.c')
| -rw-r--r-- | arch/powerpc/sysdev/fsl_rmu.c | 8 | 
1 files changed, 8 insertions, 0 deletions
| diff --git a/arch/powerpc/sysdev/fsl_rmu.c b/arch/powerpc/sysdev/fsl_rmu.c index ab7a74c75be8..88b35a3dcdc5 100644 --- a/arch/powerpc/sysdev/fsl_rmu.c +++ b/arch/powerpc/sysdev/fsl_rmu.c @@ -104,6 +104,8 @@  #define DOORBELL_MESSAGE_SIZE	0x08 +static DEFINE_SPINLOCK(fsl_rio_doorbell_lock); +  struct rio_msg_regs {  	u32 omr;  	u32 osr; @@ -626,9 +628,13 @@ err_out:  int fsl_rio_doorbell_send(struct rio_mport *mport,  				int index, u16 destid, u16 data)  { +	unsigned long flags; +  	pr_debug("fsl_doorbell_send: index %d destid %4.4x data %4.4x\n",  		 index, destid, data); +	spin_lock_irqsave(&fsl_rio_doorbell_lock, flags); +  	/* In the serial version silicons, such as MPC8548, MPC8641,  	 * below operations is must be.  	 */ @@ -638,6 +644,8 @@ int fsl_rio_doorbell_send(struct rio_mport *mport,  	out_be32(&dbell->dbell_regs->oddatr, (index << 20) | data);  	out_be32(&dbell->dbell_regs->odmr, 0x00000001); +	spin_unlock_irqrestore(&fsl_rio_doorbell_lock, flags); +  	return 0;  } |