]> git.sur5r.net Git - u-boot/blobdiff - board/freescale/ls1043ardb/cpld.c
include: reset: Change to use CONFIG_IS_ENABLED(DM_RESET)
[u-boot] / board / freescale / ls1043ardb / cpld.c
index 3f1101ed7caee0aacc94202fdfa99f35bd199cd8..00c70b1e49d89a25aa91e275366551d3c74f3614 100644 (file)
@@ -1,8 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright 2015 Freescale Semiconductor
  *
- * SPDX-License-Identifier:    GPL-2.0+
- *
  * Freescale LS1043ARDB board-specific CPLD controlling supports.
  */
 
@@ -28,10 +27,18 @@ void cpld_write(unsigned int reg, u8 value)
 /* Set the boot bank to the alternate bank */
 void cpld_set_altbank(void)
 {
+       u16 reg = CPLD_CFG_RCW_SRC_NOR;
        u8 reg4 = CPLD_READ(soft_mux_on);
+       u8 reg5 = (u8)(reg >> 1);
+       u8 reg6 = (u8)(reg & 1);
        u8 reg7 = CPLD_READ(vbank);
 
-       CPLD_WRITE(soft_mux_on, reg4 | CPLD_SW_MUX_BANK_SEL);
+       cpld_rev_bit(&reg5);
+
+       CPLD_WRITE(soft_mux_on, reg4 | CPLD_SW_MUX_BANK_SEL | 1);
+
+       CPLD_WRITE(cfg_rcw_src1, reg5);
+       CPLD_WRITE(cfg_rcw_src2, reg6);
 
        reg7 = (reg7 & ~CPLD_BANK_SEL_MASK) | CPLD_BANK_SEL_ALTBANK;
        CPLD_WRITE(vbank, reg7);
@@ -42,9 +49,54 @@ void cpld_set_altbank(void)
 /* Set the boot bank to the default bank */
 void cpld_set_defbank(void)
 {
-       CPLD_WRITE(global_rst, 1);
+       u16 reg = CPLD_CFG_RCW_SRC_NOR;
+       u8 reg4 = CPLD_READ(soft_mux_on);
+       u8 reg5 = (u8)(reg >> 1);
+       u8 reg6 = (u8)(reg & 1);
+
+       cpld_rev_bit(&reg5);
+
+       CPLD_WRITE(soft_mux_on, reg4 | CPLD_SW_MUX_BANK_SEL | 1);
+
+       CPLD_WRITE(cfg_rcw_src1, reg5);
+       CPLD_WRITE(cfg_rcw_src2, reg6);
+
+       CPLD_WRITE(vbank, 0);
+
+       CPLD_WRITE(system_rst, 1);
 }
 
+void cpld_set_nand(void)
+{
+       u16 reg = CPLD_CFG_RCW_SRC_NAND;
+       u8 reg5 = (u8)(reg >> 1);
+       u8 reg6 = (u8)(reg & 1);
+
+       cpld_rev_bit(&reg5);
+
+       CPLD_WRITE(soft_mux_on, 1);
+
+       CPLD_WRITE(cfg_rcw_src1, reg5);
+       CPLD_WRITE(cfg_rcw_src2, reg6);
+
+       CPLD_WRITE(system_rst, 1);
+}
+
+void cpld_set_sd(void)
+{
+       u16 reg = CPLD_CFG_RCW_SRC_SD;
+       u8 reg5 = (u8)(reg >> 1);
+       u8 reg6 = (u8)(reg & 1);
+
+       cpld_rev_bit(&reg5);
+
+       CPLD_WRITE(soft_mux_on, 1);
+
+       CPLD_WRITE(cfg_rcw_src1, reg5);
+       CPLD_WRITE(cfg_rcw_src2, reg6);
+
+       CPLD_WRITE(system_rst, 1);
+}
 #ifdef DEBUG
 static void cpld_dump_regs(void)
 {
@@ -91,6 +143,10 @@ int do_cpld(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        if (strcmp(argv[1], "reset") == 0) {
                if (strcmp(argv[2], "altbank") == 0)
                        cpld_set_altbank();
+               else if (strcmp(argv[2], "nand") == 0)
+                       cpld_set_nand();
+               else if (strcmp(argv[2], "sd") == 0)
+                       cpld_set_sd();
                else
                        cpld_set_defbank();
 #ifdef DEBUG
@@ -109,6 +165,8 @@ U_BOOT_CMD(
        "Reset the board or alternate bank",
        "reset: reset to default bank\n"
        "cpld reset altbank: reset to alternate bank\n"
+       "cpld reset nand: reset to boot from NAND flash\n"
+       "cpld reset sd: reset to boot from SD card\n"
 #ifdef DEBUG
        "cpld dump - display the CPLD registers\n"
 #endif