aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/char/ipmi/kcs_bmc_npcm7xx.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/char/ipmi/kcs_bmc_npcm7xx.c b/drivers/char/ipmi/kcs_bmc_npcm7xx.c
index 7bc898c5d372..722f7391fe1f 100644
--- a/drivers/char/ipmi/kcs_bmc_npcm7xx.c
+++ b/drivers/char/ipmi/kcs_bmc_npcm7xx.c
@@ -39,6 +39,12 @@
39#define KCS3CTL 0x3C 39#define KCS3CTL 0x3C
40#define KCS_CTL_IBFIE BIT(0) 40#define KCS_CTL_IBFIE BIT(0)
41 41
42#define KCS1IE 0x1C
43#define KCS2IE 0x2E
44#define KCS3IE 0x40
45#define KCS_IE_IRQE BIT(0)
46#define KCS_IE_HIRQE BIT(3)
47
42/* 48/*
43 * 7.2.4 Core KCS Registers 49 * 7.2.4 Core KCS Registers
44 * Registers in this module are 8 bits. An 8-bit register must be accessed 50 * Registers in this module are 8 bits. An 8-bit register must be accessed
@@ -48,12 +54,14 @@
48 * dob: KCS Channel n Data Out Buffer Register (KCSnDO). 54 * dob: KCS Channel n Data Out Buffer Register (KCSnDO).
49 * dib: KCS Channel n Data In Buffer Register (KCSnDI). 55 * dib: KCS Channel n Data In Buffer Register (KCSnDI).
50 * ctl: KCS Channel n Control Register (KCSnCTL). 56 * ctl: KCS Channel n Control Register (KCSnCTL).
57 * ie : KCS Channel n Interrupt Enable Register (KCSnIE).
51 */ 58 */
52struct npcm7xx_kcs_reg { 59struct npcm7xx_kcs_reg {
53 u32 sts; 60 u32 sts;
54 u32 dob; 61 u32 dob;
55 u32 dib; 62 u32 dib;
56 u32 ctl; 63 u32 ctl;
64 u32 ie;
57}; 65};
58 66
59struct npcm7xx_kcs_bmc { 67struct npcm7xx_kcs_bmc {
@@ -63,9 +71,9 @@ struct npcm7xx_kcs_bmc {
63}; 71};
64 72
65static const struct npcm7xx_kcs_reg npcm7xx_kcs_reg_tbl[KCS_CHANNEL_MAX] = { 73static const struct npcm7xx_kcs_reg npcm7xx_kcs_reg_tbl[KCS_CHANNEL_MAX] = {
66 { .sts = KCS1ST, .dob = KCS1DO, .dib = KCS1DI, .ctl = KCS1CTL }, 74 { .sts = KCS1ST, .dob = KCS1DO, .dib = KCS1DI, .ctl = KCS1CTL, .ie = KCS1IE },
67 { .sts = KCS2ST, .dob = KCS2DO, .dib = KCS2DI, .ctl = KCS2CTL }, 75 { .sts = KCS2ST, .dob = KCS2DO, .dib = KCS2DI, .ctl = KCS2CTL, .ie = KCS2IE },
68 { .sts = KCS3ST, .dob = KCS3DO, .dib = KCS3DI, .ctl = KCS3CTL }, 76 { .sts = KCS3ST, .dob = KCS3DO, .dib = KCS3DI, .ctl = KCS3CTL, .ie = KCS3IE },
69}; 77};
70 78
71static u8 npcm7xx_kcs_inb(struct kcs_bmc *kcs_bmc, u32 reg) 79static u8 npcm7xx_kcs_inb(struct kcs_bmc *kcs_bmc, u32 reg)
@@ -95,6 +103,9 @@ static void npcm7xx_kcs_enable_channel(struct kcs_bmc *kcs_bmc, bool enable)
95 103
96 regmap_update_bits(priv->map, priv->reg->ctl, KCS_CTL_IBFIE, 104 regmap_update_bits(priv->map, priv->reg->ctl, KCS_CTL_IBFIE,
97 enable ? KCS_CTL_IBFIE : 0); 105 enable ? KCS_CTL_IBFIE : 0);
106
107 regmap_update_bits(priv->map, priv->reg->ie, KCS_IE_IRQE | KCS_IE_HIRQE,
108 enable ? KCS_IE_IRQE | KCS_IE_HIRQE : 0);
98} 109}
99 110
100static irqreturn_t npcm7xx_kcs_irq(int irq, void *arg) 111static irqreturn_t npcm7xx_kcs_irq(int irq, void *arg)