armv8: ls1088aqds: support DSPI mode by hwconfig
authorChuanhua Han <chuanhua.han@nxp.com>
Thu, 1 Aug 2019 08:36:57 +0000 (16:36 +0800)
committerPrabhakar Kushwaha <prabhakar.kushwaha@nxp.com>
Thu, 22 Aug 2019 03:37:36 +0000 (09:07 +0530)
BRDCFG4[USBOSC] and BRDCFG5[SPR] register field of Qixis device is used
to control SPI and other IP signal routing.

USBOSC:
0= SPI_CLK used as external USB REFCLK input driven with 24.000 MHz.
SPI devices are unusable in this mode.
1= SPI_CLK used as SPI clock.
SPI devices are usable in this mode. USB block is clocked from
internal sources

SPR[3:2]:
SPI_CS / SDHC_DAT4:7 Routing (schematic net CFG_SPI_ROUTE[3:2]):
00= SDHC/eMMC 8-bit
01= SD Card Rev 2.0/3.0
10= SPI on-board memory
11= TDM Riser / SPI off-board connector.
The default value is 00 if an SDCard/eMMC card is selected as the boot
device.

SPR[1:0]:
SPI_SIN/SOUT/SCK Routing (schematic net CFG_SPI_ROUTE[1:0]):
00= SDHC Sync loop
01= TDM Riser / SPI off-board connector.
10= SPI on-board memory.
11= SPI off-board connector.

By default, the SPI feature is not available, so we need to configure
the above register fields to select the route to the SPI feature.

Signed-off-by: Chuanhua Han <chuanhua.han@nxp.com>
Reviewed-by: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>
board/freescale/ls1088a/ls1088a.c
board/freescale/ls1088a/ls1088a_qixis.h
include/configs/ls1088aqds.h

index 1033d44409ef8690a516dc4e3827c825e2ecab08..b851e159bcdfd777f9c6fa43703f29ebf0643a6d 100644 (file)
@@ -591,6 +591,32 @@ int misc_init_r(void)
                QIXIS_WRITE(brdcfg[5], brdcfg5);
        }
 #endif
+
+#ifdef CONFIG_TARGET_LS1088AQDS
+        u8 brdcfg4, brdcfg5;
+
+       if (hwconfig("dspi-on-board")) {
+               brdcfg4 = QIXIS_READ(brdcfg[4]);
+               brdcfg4 &= ~BRDCFG4_USBOSC_MASK;
+               brdcfg4 |= BRDCFG4_SPI;
+               QIXIS_WRITE(brdcfg[4], brdcfg4);
+
+               brdcfg5 = QIXIS_READ(brdcfg[5]);
+               brdcfg5 &= ~BRDCFG5_SPR_MASK;
+               brdcfg5 |= BRDCFG5_SPI_ON_BOARD;
+               QIXIS_WRITE(brdcfg[5], brdcfg5);
+       } else if (hwconfig("dspi-off-board")) {
+               brdcfg4 = QIXIS_READ(brdcfg[4]);
+               brdcfg4 &= ~BRDCFG4_USBOSC_MASK;
+               brdcfg4 |= BRDCFG4_SPI;
+               QIXIS_WRITE(brdcfg[4], brdcfg4);
+
+               brdcfg5 = QIXIS_READ(brdcfg[5]);
+               brdcfg5 &= ~BRDCFG5_SPR_MASK;
+               brdcfg5 |= BRDCFG5_SPI_OFF_BOARD;
+               QIXIS_WRITE(brdcfg[5], brdcfg5);
+       }
+#endif
        return 0;
 }
 #endif
index c58852617fcce6ca65bbeb0efb1ba9d45045279c..e3502eb1d1924692655ed526dddde3219f56eebb 100644 (file)
 #define BRDCFG5_SPISDHC_MASK           0x0C
 #define BRDCFG5_FORCE_SD               0x08
 
+/* Definitions of QIXIS Registers for LS1088AQDS */
+
+/* BRDCFG4 */
+#define BRDCFG4_USBOSC_MASK   0x01
+#define BRDCFG4_SPI 0x01
+
+/* BRDCFG5 */
+#define BRDCFG5_SPR_MASK 0x0f
+#define BRDCFG5_SPI_ON_BOARD 0x0a
+#define BRDCFG5_SPI_OFF_BOARD 0x0f
+
 #endif
index 8b62bbe68445cf34e6571e314bd3cb978ddf7e3b..85e20617e6afc44d3940b480018b1a71bf962f2c 100644 (file)
@@ -17,6 +17,8 @@ unsigned long get_board_ddr_clk(void);
 #ifdef CONFIG_TFABOOT
 #define CONFIG_SYS_MMC_ENV_DEV         0
 
+#define CONFIG_MISC_INIT_R
+
 #define CONFIG_ENV_SIZE                        0x20000
 #define CONFIG_ENV_OFFSET              0x500000
 #define CONFIG_ENV_ADDR                        (CONFIG_SYS_FLASH_BASE + \