NTB: add helper functions to set and clear sideinfo
authorArindam Nath <arindam.nath@amd.com>
Wed, 5 Feb 2020 15:54:28 +0000 (21:24 +0530)
committerJon Mason <jdmason@kudzu.us>
Fri, 13 Mar 2020 14:04:20 +0000 (10:04 -0400)
We define two new helper functions to set and clear
sideinfo registers respectively. These functions
take an additional boolean parameter which signifies
whether we want to set/clear the sideinfo register
of the peer(true) or local host(false).

Signed-off-by: Arindam Nath <arindam.nath@amd.com>
Signed-off-by: Jon Mason <jdmason@kudzu.us>
drivers/ntb/hw/amd/ntb_hw_amd.c
drivers/ntb/hw/amd/ntb_hw_amd.h

index 621a69a0cff26b23f9d8a3e7e1365f4812b3ffc9..d4029d531466b51c27bdc0cd45d5a4461d4e4b49 100644 (file)
@@ -913,28 +913,32 @@ static int amd_init_isr(struct amd_ntb_dev *ndev)
        return ndev_init_isr(ndev, AMD_DB_CNT, AMD_MSIX_VECTOR_CNT);
 }
 
-static void amd_init_side_info(struct amd_ntb_dev *ndev)
+static void amd_set_side_info_reg(struct amd_ntb_dev *ndev, bool peer)
 {
-       void __iomem *mmio = ndev->self_mmio;
+       void __iomem *mmio = NULL;
        unsigned int reg;
-       u32 ntb_ctl;
+
+       if (peer)
+               mmio = ndev->peer_mmio;
+       else
+               mmio = ndev->self_mmio;
 
        reg = readl(mmio + AMD_SIDEINFO_OFFSET);
        if (!(reg & AMD_SIDE_READY)) {
                reg |= AMD_SIDE_READY;
                writel(reg, mmio + AMD_SIDEINFO_OFFSET);
        }
-
-       ntb_ctl = readl(mmio + AMD_CNTL_OFFSET);
-       ntb_ctl |= (PMM_REG_CTL | SMM_REG_CTL);
-       writel(ntb_ctl, mmio + AMD_CNTL_OFFSET);
 }
 
-static void amd_deinit_side_info(struct amd_ntb_dev *ndev)
+static void amd_clear_side_info_reg(struct amd_ntb_dev *ndev, bool peer)
 {
-       void __iomem *mmio = ndev->self_mmio;
+       void __iomem *mmio = NULL;
        unsigned int reg;
-       u32 ntb_ctl;
+
+       if (peer)
+               mmio = ndev->peer_mmio;
+       else
+               mmio = ndev->self_mmio;
 
        reg = readl(mmio + AMD_SIDEINFO_OFFSET);
        if (reg & AMD_SIDE_READY) {
@@ -942,6 +946,26 @@ static void amd_deinit_side_info(struct amd_ntb_dev *ndev)
                writel(reg, mmio + AMD_SIDEINFO_OFFSET);
                readl(mmio + AMD_SIDEINFO_OFFSET);
        }
+}
+
+static void amd_init_side_info(struct amd_ntb_dev *ndev)
+{
+       void __iomem *mmio = ndev->self_mmio;
+       u32 ntb_ctl;
+
+       amd_set_side_info_reg(ndev, false);
+
+       ntb_ctl = readl(mmio + AMD_CNTL_OFFSET);
+       ntb_ctl |= (PMM_REG_CTL | SMM_REG_CTL);
+       writel(ntb_ctl, mmio + AMD_CNTL_OFFSET);
+}
+
+static void amd_deinit_side_info(struct amd_ntb_dev *ndev)
+{
+       void __iomem *mmio = ndev->self_mmio;
+       u32 ntb_ctl;
+
+       amd_clear_side_info_reg(ndev, false);
 
        ntb_ctl = readl(mmio + AMD_CNTL_OFFSET);
        ntb_ctl &= ~(PMM_REG_CTL | SMM_REG_CTL);
index 156a4a92b803a748a4c8947819ec6c1d0d1656ad..62ffdf35b683a256f56cc5c8ee3431af06bc9193 100644 (file)
@@ -215,4 +215,7 @@ struct amd_ntb_dev {
 #define ntb_ndev(__ntb) container_of(__ntb, struct amd_ntb_dev, ntb)
 #define hb_ndev(__work) container_of(__work, struct amd_ntb_dev, hb_timer.work)
 
+static void amd_set_side_info_reg(struct amd_ntb_dev *ndev, bool peer);
+static void amd_clear_side_info_reg(struct amd_ntb_dev *ndev, bool peer);
+
 #endif