[PATCH linux dev-5.4 15/16] soc: aspeed: xdma: Disable PCI AHB bridge during probe

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


The XDMA engine cannot function unless the PCI AHB bridge is disabled,
so do so during the probe.

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

diff --git a/drivers/soc/aspeed/aspeed-xdma.c b/drivers/soc/aspeed/aspeed-xdma.c
index 6bc1357445bc..525214ce2c8b 100644
--- a/drivers/soc/aspeed/aspeed-xdma.c
+++ b/drivers/soc/aspeed/aspeed-xdma.c
@@ -30,6 +30,12 @@
 
 #define DEVICE_NAME				"aspeed-xdma"
 
+#define SCU_AST2600_MISC_CTRL			0x0c0
+#define  SCU_AST2600_MISC_CTRL_DISABLE_PCI	 BIT(8)
+
+#define SCU_AST2600_DBG_CTRL			0x0c8
+#define  SCU_AST2600_DBG_CTRL_DISABLE_PCI	 BIT(0)
+
 #define SCU_AST2500_PCIE_CONF			0x180
 #define SCU_AST2600_PCIE_CONF			0xc20
 #define  SCU_PCIE_CONF_VGA_EN			 BIT(0)
@@ -188,6 +194,8 @@ struct aspeed_xdma;
 struct aspeed_xdma_chip {
 	u32 control;
 	u32 scu_bmc_class;
+	u32 scu_dbg_ctrl;
+	u32 scu_misc_ctrl;
 	u32 scu_pcie_conf;
 	u32 sdmc_remap;
 	unsigned int queue_entry_size;
@@ -798,6 +806,16 @@ static int aspeed_xdma_init_scu(struct aspeed_xdma *ctx, struct device *dev)
 
 		regmap_update_bits(scu, ctx->chip->scu_pcie_conf, bmc | vga,
 				   selection);
+
+		if (ctx->chip->scu_dbg_ctrl)
+			regmap_update_bits(scu, ctx->chip->scu_dbg_ctrl,
+					   SCU_AST2600_DBG_CTRL_DISABLE_PCI,
+					   SCU_AST2600_DBG_CTRL_DISABLE_PCI);
+
+		if (ctx->chip->scu_misc_ctrl)
+			regmap_update_bits(scu, ctx->chip->scu_misc_ctrl,
+					   SCU_AST2600_MISC_CTRL_DISABLE_PCI,
+					   SCU_AST2600_MISC_CTRL_DISABLE_PCI);
 	} else {
 		dev_warn(dev, "Unable to configure PCIe: %ld; continuing.\n",
 			 PTR_ERR(scu));
@@ -1000,6 +1018,8 @@ static const struct aspeed_xdma_chip aspeed_ast2500_xdma_chip = {
 		XDMA_AST2500_CTRL_DS_DIRTY | XDMA_AST2500_CTRL_DS_SIZE_256 |
 		XDMA_AST2500_CTRL_DS_TIMEOUT | XDMA_AST2500_CTRL_DS_CHECK_ID,
 	.scu_bmc_class = SCU_AST2500_BMC_CLASS_REV,
+	.scu_dbg_ctrl = 0,
+	.scu_misc_ctrl = 0,
 	.scu_pcie_conf = SCU_AST2500_PCIE_CONF,
 	.sdmc_remap = SDMC_AST2500_REMAP_PCIE | SDMC_AST2500_REMAP_XDMA,
 	.queue_entry_size = XDMA_AST2500_QUEUE_ENTRY_SIZE,
@@ -1023,6 +1043,8 @@ 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_dbg_ctrl = SCU_AST2600_DBG_CTRL,
+	.scu_misc_ctrl = SCU_AST2600_MISC_CTRL,
 	.scu_pcie_conf = SCU_AST2600_PCIE_CONF,
 	.sdmc_remap = SDMC_AST2600_REMAP_XDMA,
 	.queue_entry_size = XDMA_AST2600_QUEUE_ENTRY_SIZE,
-- 
2.24.0



More information about the openbmc mailing list