Versal NET boards has QSPI and OSPI and default bus set to 0
is not working when system is booting out of OSPI which is
controller 1, as fixed aliases are set for all the boards
i.e., QSPI to 0 and OSPI to 1. Add controller autodetection
via spi_get_env_dev().

Signed-off-by: Venkatesh Yadav Abbarapu <[email protected]>
---
 board/xilinx/versal-net/board.c | 45 +++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/board/xilinx/versal-net/board.c b/board/xilinx/versal-net/board.c
index da03024e16..5a93cb29c0 100644
--- a/board/xilinx/versal-net/board.c
+++ b/board/xilinx/versal-net/board.c
@@ -194,6 +194,51 @@ static u8 versal_net_get_bootmode(void)
        return bootmode;
 }
 
+int spi_get_env_dev(void)
+{
+       struct udevice *dev;
+       const char *mode = NULL;
+       int bootseq = -1;
+
+       switch (versal_net_get_bootmode()) {
+       case QSPI_MODE_24BIT:
+               puts("QSPI_MODE_24\n");
+               if (uclass_get_device_by_name(UCLASS_SPI,
+                                             "spi@f1030000", &dev)) {
+                       debug("QSPI driver for QSPI device is not present\n");
+                       break;
+               }
+               mode = "xspi";
+               bootseq = dev_seq(dev);
+               break;
+       case QSPI_MODE_32BIT:
+               puts("QSPI_MODE_32\n");
+               if (uclass_get_device_by_name(UCLASS_SPI,
+                                             "spi@f1030000", &dev)) {
+                       debug("QSPI driver for QSPI device is not present\n");
+                       break;
+               }
+               mode = "xspi";
+               bootseq = dev_seq(dev);
+               break;
+       case OSPI_MODE:
+               puts("OSPI_MODE\n");
+               if (uclass_get_device_by_name(UCLASS_SPI,
+                                             "spi@f1010000", &dev)) {
+                       debug("OSPI driver for OSPI device is not present\n");
+                       break;
+               }
+               mode = "xspi";
+               bootseq = dev_seq(dev);
+               break;
+       default:
+               break;
+       }
+
+       debug("bootseq %d\n", bootseq);
+       return bootseq;
+}
+
 static int boot_targets_setup(void)
 {
        u8 bootmode;
-- 
2.17.1

Reply via email to