[PATCH master 4/4] fpga: socfpga-fpga2sdram-bridge: always populate HANDOFF_FPGA2SDR register

Ahmad Fatoum a.fatoum at pengutronix.de
Wed Jan 31 14:59:38 PST 2024


The driver will take care to write the handoff register, when the bridge
is first enabled or disabled. In the case that the driver merely probes
the device and no explicit action is taken, the handoff value is never
written. This is evident with a look at the console:

barebox output:

  altera-fpga2sdram-bridge ffc25080.fpga-bridge at ffc25080.of:
    driver initialized with handoff 00003fff
                                        ^^^^
Linux output:

  altera_fpga2sdram_bridge ffc25080.fpga-bridge:
    driver initialized with handoff 00000000
                                        ^^^^

The result of this that the Linux driver must be disabled, otherwise, it
will just reset the same bridges that barebox had previously moved out
of reset. Let's get rid of this discrepancy by moving the write to the
handoff value into the probe function.

Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
 drivers/fpga/socfpga-fpga2sdram-bridge.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/fpga/socfpga-fpga2sdram-bridge.c b/drivers/fpga/socfpga-fpga2sdram-bridge.c
index 961a083ae512..7f72bd8a6536 100644
--- a/drivers/fpga/socfpga-fpga2sdram-bridge.c
+++ b/drivers/fpga/socfpga-fpga2sdram-bridge.c
@@ -68,9 +68,6 @@ static inline int _alt_fpga2sdram_enable_set(struct alt_fpga2sdram_data *priv,
 	else
 		val = 0;
 
-	/* The kernel driver expects this value in this register :-( */
-	writel(priv->mask, SOCFPGA_SYSMGR_ADDR + SYSMGR_ISWGRP_HANDOFF3);
-
 	dev_dbg(priv->dev, "setting fpgaportrst to 0x%08x\n", val);
 
 	return writel(val, SOCFPGA_SDRCTL_ADDR + ALT_SDR_CTL_FPGAPORTRST_OFST);
@@ -110,6 +107,9 @@ static int alt_fpga_bridge_probe(struct device *dev)
 	if (!priv->mask) {
 		/* enable all ports if we don't know better */
 		priv->mask = ALT_SDR_CTL_FPGAPORTRST_PORTRSTN_MSK;
+		/* The kernel driver expects this value in this register :-( */
+		writel(priv->mask, SOCFPGA_SYSMGR_ADDR + SYSMGR_ISWGRP_HANDOFF3);
+
 	}
 
 	priv->dev = dev;
-- 
2.39.2




More information about the barebox mailing list