[PATCH linux dev-5.4 16/16] soc: aspeed: xdma: Fix BMC PCI device class and revision for AST2600

Eddie James eajames at linux.ibm.com
Wed Mar 18 09:13:36 AEDT 2020


The A1 revision of the AST2600 changed the register address of the BMC
PCI device class and revision, so take account of that when setting it.

Signed-off-by: Eddie James <eajames at linux.ibm.com>
---
 drivers/soc/aspeed/aspeed-xdma.c | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/drivers/soc/aspeed/aspeed-xdma.c b/drivers/soc/aspeed/aspeed-xdma.c
index 525214ce2c8b..5d97919d38cf 100644
--- a/drivers/soc/aspeed/aspeed-xdma.c
+++ b/drivers/soc/aspeed/aspeed-xdma.c
@@ -30,6 +30,9 @@
 
 #define DEVICE_NAME				"aspeed-xdma"
 
+#define SCU_SILICON_REV_ID			0x004
+#define  SCU_SILICON_REV_ID_AST2600_A0		 0x05000303
+
 #define SCU_AST2600_MISC_CTRL			0x0c0
 #define  SCU_AST2600_MISC_CTRL_DISABLE_PCI	 BIT(8)
 
@@ -53,7 +56,8 @@
 #define  SCU_PCIE_CONF_BMC_EN_DMA		 BIT(14)
 
 #define SCU_AST2500_BMC_CLASS_REV		0x19c
-#define SCU_AST2600_BMC_CLASS_REV		0xc4c
+#define SCU_AST2600_A0_BMC_CLASS_REV		0xc4c
+#define SCU_AST2600_A1_BMC_CLASS_REV		0xc68
 #define  SCU_BMC_CLASS_REV_XDMA			 0xff000001
 
 #define SDMC_REMAP                             0x008
@@ -797,9 +801,21 @@ static int aspeed_xdma_init_scu(struct aspeed_xdma *ctx, struct device *dev)
 		}
 
 		if (pcie_device_bmc) {
+			u32 addr = ctx->chip->scu_bmc_class;
+
+			if (addr == SCU_AST2600_A0_BMC_CLASS_REV) {
+				u32 silicon_rev_id;
+
+				regmap_read(scu, SCU_SILICON_REV_ID,
+					    &silicon_rev_id);
+
+				if (silicon_rev_id !=
+				    SCU_SILICON_REV_ID_AST2600_A0)
+					addr = SCU_AST2600_A1_BMC_CLASS_REV;
+			}
+
 			selection = bmc;
-			regmap_write(scu, ctx->chip->scu_bmc_class,
-				     SCU_BMC_CLASS_REV_XDMA);
+			regmap_write(scu, addr, SCU_BMC_CLASS_REV_XDMA);
 		} else {
 			selection = vga;
 		}
@@ -1042,7 +1058,7 @@ static const struct aspeed_xdma_chip aspeed_ast2500_xdma_chip = {
 static const struct aspeed_xdma_chip aspeed_ast2600_xdma_chip = {
 	.control = XDMA_AST2600_CTRL_US_COMP | XDMA_AST2600_CTRL_DS_COMP |
 		XDMA_AST2600_CTRL_DS_DIRTY | XDMA_AST2600_CTRL_DS_SIZE_256,
-	.scu_bmc_class = SCU_AST2600_BMC_CLASS_REV,
+	.scu_bmc_class = SCU_AST2600_A0_BMC_CLASS_REV,
 	.scu_dbg_ctrl = SCU_AST2600_DBG_CTRL,
 	.scu_misc_ctrl = SCU_AST2600_MISC_CTRL,
 	.scu_pcie_conf = SCU_AST2600_PCIE_CONF,
-- 
2.24.0



More information about the openbmc mailing list