From: Yu-Che Hsieh <[email protected]>

Use BIT(), GENMASK(), and FIELD_PREP() for the BT register definitions

and register field programming.

This makes the register layout easier to read and prepares the driver

for later changes that need to program the BT_CR0 fields from device

configuration.

Signed-off-by: Yu-Che Hsieh <[email protected]>
---
 drivers/char/ipmi/bt-bmc.c | 72 ++++++++++++++++++++++++----------------------
 1 file changed, 37 insertions(+), 35 deletions(-)

diff --git a/drivers/char/ipmi/bt-bmc.c b/drivers/char/ipmi/bt-bmc.c
index a179d4797011..f3c67272502f 100644
--- a/drivers/char/ipmi/bt-bmc.c
+++ b/drivers/char/ipmi/bt-bmc.c
@@ -15,6 +15,7 @@
 #include <linux/poll.h>
 #include <linux/sched.h>
 #include <linux/timer.h>
+#include <linux/bitfield.h>
 
 /*
  * This is a BMC device used to communicate to the host
@@ -24,33 +25,34 @@
 #define BT_IO_BASE     0xe4
 #define BT_IRQ         10
 
-#define BT_CR0         0x0
-#define   BT_CR0_IO_BASE               16
-#define   BT_CR0_IRQ                   12
-#define   BT_CR0_EN_CLR_SLV_RDP                0x8
-#define   BT_CR0_EN_CLR_SLV_WRP                0x4
-#define   BT_CR0_ENABLE_IBT            0x1
-#define BT_CR1         0x4
-#define   BT_CR1_IRQ_H2B       0x01
-#define   BT_CR1_IRQ_HBUSY     0x40
-#define BT_CR2         0x8
-#define   BT_CR2_IRQ_H2B       0x01
-#define   BT_CR2_IRQ_HBUSY     0x40
-#define BT_CR3         0xc
-#define BT_CTRL                0x10
-#define   BT_CTRL_B_BUSY               0x80
-#define   BT_CTRL_H_BUSY               0x40
-#define   BT_CTRL_OEM0                 0x20
-#define   BT_CTRL_SMS_ATN              0x10
-#define   BT_CTRL_B2H_ATN              0x08
-#define   BT_CTRL_H2B_ATN              0x04
-#define   BT_CTRL_CLR_RD_PTR           0x02
-#define   BT_CTRL_CLR_WR_PTR           0x01
-#define BT_BMC2HOST    0x14
-#define BT_INTMASK     0x18
-#define   BT_INTMASK_B2H_IRQEN         0x01
-#define   BT_INTMASK_B2H_IRQ           0x02
-#define   BT_INTMASK_BMC_HWRST         0x80
+#define BT_CR0                 0x0
+#define   BT_CR0_IO_BASE       GENMASK(31, 16)
+#define   BT_CR0_SIRQ          GENMASK(15, 12)
+#define   BT_CR0_SIRQ_TYPE     GENMASK(11, 10)
+#define   BT_CR0_EN_CLR_SLV_RDP        BIT(3)
+#define   BT_CR0_EN_CLR_SLV_WRP        BIT(2)
+#define   BT_CR0_ENABLE_IBT    BIT(0)
+#define BT_CR1                 0x4
+#define   BT_CR1_IRQ_EN_HBUSY  BIT(6)
+#define   BT_CR1_IRQ_EN_H2B    BIT(0)
+#define BT_CR2                 0x8
+#define   BT_CR2_IRQ_STS_HBUSY BIT(6)
+#define   BT_CR2_IRQ_STS_H2B   BIT(0)
+#define BT_CR3                 0xc
+#define BT_CTRL                        0x10
+#define   BT_CTRL_B_BUSY       BIT(7)
+#define   BT_CTRL_H_BUSY       BIT(6)
+#define   BT_CTRL_OEM0         BIT(5)
+#define   BT_CTRL_SMS_ATN      BIT(4)
+#define   BT_CTRL_B2H_ATN      BIT(3)
+#define   BT_CTRL_H2B_ATN      BIT(2)
+#define   BT_CTRL_CLR_RD_PTR   BIT(1)
+#define   BT_CTRL_CLR_WR_PTR   BIT(0)
+#define BT_BMC2HOST            0x14
+#define BT_INTMASK             0x18
+#define   BT_INTMASK_BMC_HWRST BIT(7)
+#define   BT_INTMASK_B2H_IRQ   BIT(1)
+#define   BT_INTMASK_B2H_IRQEN BIT(0)
 
 #define BT_BMC_BUFFER_SIZE 256
 
@@ -361,7 +363,7 @@ static irqreturn_t bt_bmc_irq(int irq, void *arg)
 
        reg = readl(bt_bmc->base + BT_CR2);
 
-       reg &= BT_CR2_IRQ_H2B | BT_CR2_IRQ_HBUSY;
+       reg &= BT_CR2_IRQ_STS_H2B | BT_CR2_IRQ_STS_HBUSY;
        if (!reg)
                return IRQ_NONE;
 
@@ -398,7 +400,7 @@ static int bt_bmc_config_irq(struct bt_bmc *bt_bmc,
         * message to the BT buffer
         */
        reg = readl(bt_bmc->base + BT_CR1);
-       reg |= BT_CR1_IRQ_H2B | BT_CR1_IRQ_HBUSY;
+       reg |= BT_CR1_IRQ_EN_H2B | BT_CR1_IRQ_EN_HBUSY;
        writel(reg, bt_bmc->base + BT_CR1);
 
        return 0;
@@ -447,12 +449,12 @@ static int bt_bmc_probe(struct platform_device *pdev)
                add_timer(&bt_bmc->poll_timer);
        }
 
-       writel((BT_IO_BASE << BT_CR0_IO_BASE) |
-                    (BT_IRQ << BT_CR0_IRQ) |
-                    BT_CR0_EN_CLR_SLV_RDP |
-                    BT_CR0_EN_CLR_SLV_WRP |
-                    BT_CR0_ENABLE_IBT,
-               bt_bmc->base + BT_CR0);
+       writel(FIELD_PREP(BT_CR0_IO_BASE, BT_IO_BASE) |
+              FIELD_PREP(BT_CR0_SIRQ, BT_IRQ) |
+              BT_CR0_EN_CLR_SLV_RDP |
+              BT_CR0_EN_CLR_SLV_WRP |
+              BT_CR0_ENABLE_IBT,
+              bt_bmc->base + BT_CR0);
 
        clr_b_busy(bt_bmc);
 

-- 
2.34.1




_______________________________________________
Openipmi-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openipmi-developer

Reply via email to