[RFC 1/5] ipmi:bt-bmc: Separate out ASPEED specific bits
Cédric Le Goater
clg at kaod.org
Wed Oct 6 17:02:53 AEDT 2021
On 10/6/21 04:12, Anton Blanchard wrote:
> Most of the IPMI BT BMC driver is architecture agnostic - it deals with
> architected registers and behaviour in the IPMI specification.
>
> Separate out the few ASPEED specific bits into their own functions
> so we can use this driver on other architectures.
>
> Signed-off-by: Anton Blanchard <anton at ozlabs.org>
Reviewed-by: Cédric Le Goater <clg at kaod.org>
Thanks,
C.
> ---
> drivers/char/ipmi/bt-bmc.c | 26 ++++++++++++++++----------
> 1 file changed, 16 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/char/ipmi/bt-bmc.c b/drivers/char/ipmi/bt-bmc.c
> index 6e3d247b55d1..f85fafc96ef6 100644
> --- a/drivers/char/ipmi/bt-bmc.c
> +++ b/drivers/char/ipmi/bt-bmc.c
> @@ -39,6 +39,7 @@
> #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
> @@ -372,7 +373,7 @@ static void poll_timer(struct timer_list *t)
> add_timer(&bt_bmc->poll_timer);
> }
>
> -static irqreturn_t bt_bmc_irq(int irq, void *arg)
> +static irqreturn_t aspeed_bt_bmc_irq(int irq, void *arg)
> {
> struct bt_bmc *bt_bmc = arg;
> u32 reg;
> @@ -393,7 +394,7 @@ static irqreturn_t bt_bmc_irq(int irq, void *arg)
> return IRQ_HANDLED;
> }
>
> -static int bt_bmc_config_irq(struct bt_bmc *bt_bmc,
> +static int aspeed_bt_bmc_config_irq(struct bt_bmc *bt_bmc,
> struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> @@ -403,7 +404,7 @@ static int bt_bmc_config_irq(struct bt_bmc *bt_bmc,
> if (bt_bmc->irq < 0)
> return bt_bmc->irq;
>
> - rc = devm_request_irq(dev, bt_bmc->irq, bt_bmc_irq, IRQF_SHARED,
> + rc = devm_request_irq(dev, bt_bmc->irq, aspeed_bt_bmc_irq, IRQF_SHARED,
> DEVICE_NAME, bt_bmc);
> if (rc < 0) {
> dev_warn(dev, "Unable to request IRQ %d\n", bt_bmc->irq);
> @@ -424,6 +425,16 @@ static int bt_bmc_config_irq(struct bt_bmc *bt_bmc,
> return rc;
> }
>
> +static void aspeed_enable_bt(struct bt_bmc *bt_bmc)
> +{
> + regmap_write(bt_bmc->map, bt_bmc->offset + BT_CR0,
> + (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);
> +}
> +
> static int bt_bmc_probe(struct platform_device *pdev)
> {
> struct bt_bmc *bt_bmc;
> @@ -472,7 +483,7 @@ static int bt_bmc_probe(struct platform_device *pdev)
> return rc;
> }
>
> - bt_bmc_config_irq(bt_bmc, pdev);
> + aspeed_bt_bmc_config_irq(bt_bmc, pdev);
>
> if (bt_bmc->irq >= 0) {
> dev_info(dev, "Using IRQ %d\n", bt_bmc->irq);
> @@ -483,12 +494,7 @@ static int bt_bmc_probe(struct platform_device *pdev)
> add_timer(&bt_bmc->poll_timer);
> }
>
> - regmap_write(bt_bmc->map, bt_bmc->offset + BT_CR0,
> - (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);
> + aspeed_enable_bt(bt_bmc);
>
> clr_b_busy(bt_bmc);
>
>
More information about the Linuxppc-dev
mailing list