aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/sysdev/fsl_rmu.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/sysdev/fsl_rmu.c')
-rw-r--r--arch/powerpc/sysdev/fsl_rmu.c8
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 @@
104 104
105#define DOORBELL_MESSAGE_SIZE 0x08 105#define DOORBELL_MESSAGE_SIZE 0x08
106 106
107static DEFINE_SPINLOCK(fsl_rio_doorbell_lock);
108
107struct rio_msg_regs { 109struct rio_msg_regs {
108 u32 omr; 110 u32 omr;
109 u32 osr; 111 u32 osr;
@@ -626,9 +628,13 @@ err_out:
626int fsl_rio_doorbell_send(struct rio_mport *mport, 628int fsl_rio_doorbell_send(struct rio_mport *mport,
627 int index, u16 destid, u16 data) 629 int index, u16 destid, u16 data)
628{ 630{
631 unsigned long flags;
632
629 pr_debug("fsl_doorbell_send: index %d destid %4.4x data %4.4x\n", 633 pr_debug("fsl_doorbell_send: index %d destid %4.4x data %4.4x\n",
630 index, destid, data); 634 index, destid, data);
631 635
636 spin_lock_irqsave(&fsl_rio_doorbell_lock, flags);
637
632 /* In the serial version silicons, such as MPC8548, MPC8641, 638 /* In the serial version silicons, such as MPC8548, MPC8641,
633 * below operations is must be. 639 * below operations is must be.
634 */ 640 */
@@ -638,6 +644,8 @@ int fsl_rio_doorbell_send(struct rio_mport *mport,
638 out_be32(&dbell->dbell_regs->oddatr, (index << 20) | data); 644 out_be32(&dbell->dbell_regs->oddatr, (index << 20) | data);
639 out_be32(&dbell->dbell_regs->odmr, 0x00000001); 645 out_be32(&dbell->dbell_regs->odmr, 0x00000001);
640 646
647 spin_unlock_irqrestore(&fsl_rio_doorbell_lock, flags);
648
641 return 0; 649 return 0;
642} 650}
643 651