183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2ae6b03feSShengzhou Liu /*
3ae6b03feSShengzhou Liu * Copyright 2011 Freescale Semiconductor
4ae6b03feSShengzhou Liu * Author: Shengzhou Liu <Shengzhou.Liu@freescale.com>
5ae6b03feSShengzhou Liu *
6ae6b03feSShengzhou Liu * This file provides support for the QIXIS of some Freescale reference boards.
7ae6b03feSShengzhou Liu */
8ae6b03feSShengzhou Liu
9ae6b03feSShengzhou Liu #include <common.h>
10ae6b03feSShengzhou Liu #include <command.h>
11ae6b03feSShengzhou Liu #include <asm/io.h>
121f0ce325STom Rini #include <linux/compiler.h>
132ae4e8d9SPrabhakar Kushwaha #include <linux/time.h>
14960aa89bSPrabhakar Kushwaha #include <i2c.h>
15ae6b03feSShengzhou Liu #include "qixis.h"
16ae6b03feSShengzhou Liu
1716dacb26SAbhimanyu Saini #ifndef QIXIS_LBMAP_BRDCFG_REG
1816dacb26SAbhimanyu Saini /*
1916dacb26SAbhimanyu Saini * For consistency with existing platforms
2016dacb26SAbhimanyu Saini */
2116dacb26SAbhimanyu Saini #define QIXIS_LBMAP_BRDCFG_REG 0x00
2216dacb26SAbhimanyu Saini #endif
2316dacb26SAbhimanyu Saini
24960aa89bSPrabhakar Kushwaha #ifdef CONFIG_SYS_I2C_FPGA_ADDR
qixis_read_i2c(unsigned int reg)25960aa89bSPrabhakar Kushwaha u8 qixis_read_i2c(unsigned int reg)
26960aa89bSPrabhakar Kushwaha {
27960aa89bSPrabhakar Kushwaha return i2c_reg_read(CONFIG_SYS_I2C_FPGA_ADDR, reg);
28960aa89bSPrabhakar Kushwaha }
29960aa89bSPrabhakar Kushwaha
qixis_write_i2c(unsigned int reg,u8 value)30960aa89bSPrabhakar Kushwaha void qixis_write_i2c(unsigned int reg, u8 value)
31960aa89bSPrabhakar Kushwaha {
32960aa89bSPrabhakar Kushwaha u8 val = value;
33960aa89bSPrabhakar Kushwaha i2c_reg_write(CONFIG_SYS_I2C_FPGA_ADDR, reg, val);
34960aa89bSPrabhakar Kushwaha }
35960aa89bSPrabhakar Kushwaha #endif
36960aa89bSPrabhakar Kushwaha
373faaa24bSAbhimanyu Saini #ifdef QIXIS_BASE
qixis_read(unsigned int reg)38ae6b03feSShengzhou Liu u8 qixis_read(unsigned int reg)
39ae6b03feSShengzhou Liu {
40ae6b03feSShengzhou Liu void *p = (void *)QIXIS_BASE;
41ae6b03feSShengzhou Liu
42ae6b03feSShengzhou Liu return in_8(p + reg);
43ae6b03feSShengzhou Liu }
44ae6b03feSShengzhou Liu
qixis_write(unsigned int reg,u8 value)45ae6b03feSShengzhou Liu void qixis_write(unsigned int reg, u8 value)
46ae6b03feSShengzhou Liu {
47ae6b03feSShengzhou Liu void *p = (void *)QIXIS_BASE;
48ae6b03feSShengzhou Liu
49ae6b03feSShengzhou Liu out_8(p + reg, value);
50ae6b03feSShengzhou Liu }
513faaa24bSAbhimanyu Saini #endif
52ae6b03feSShengzhou Liu
qixis_read_minor(void)532ae4e8d9SPrabhakar Kushwaha u16 qixis_read_minor(void)
542ae4e8d9SPrabhakar Kushwaha {
552ae4e8d9SPrabhakar Kushwaha u16 minor;
562ae4e8d9SPrabhakar Kushwaha
572ae4e8d9SPrabhakar Kushwaha /* this data is in little endian */
582ae4e8d9SPrabhakar Kushwaha QIXIS_WRITE(tagdata, 5);
592ae4e8d9SPrabhakar Kushwaha minor = QIXIS_READ(tagdata);
602ae4e8d9SPrabhakar Kushwaha QIXIS_WRITE(tagdata, 6);
612ae4e8d9SPrabhakar Kushwaha minor += QIXIS_READ(tagdata) << 8;
622ae4e8d9SPrabhakar Kushwaha
632ae4e8d9SPrabhakar Kushwaha return minor;
642ae4e8d9SPrabhakar Kushwaha }
652ae4e8d9SPrabhakar Kushwaha
qixis_read_time(char * result)662ae4e8d9SPrabhakar Kushwaha char *qixis_read_time(char *result)
672ae4e8d9SPrabhakar Kushwaha {
682ae4e8d9SPrabhakar Kushwaha time_t time = 0;
692ae4e8d9SPrabhakar Kushwaha int i;
702ae4e8d9SPrabhakar Kushwaha
712ae4e8d9SPrabhakar Kushwaha /* timestamp is in 32-bit big endian */
722ae4e8d9SPrabhakar Kushwaha for (i = 8; i <= 11; i++) {
732ae4e8d9SPrabhakar Kushwaha QIXIS_WRITE(tagdata, i);
742ae4e8d9SPrabhakar Kushwaha time = (time << 8) + QIXIS_READ(tagdata);
752ae4e8d9SPrabhakar Kushwaha }
762ae4e8d9SPrabhakar Kushwaha
772ae4e8d9SPrabhakar Kushwaha return ctime_r(&time, result);
782ae4e8d9SPrabhakar Kushwaha }
792ae4e8d9SPrabhakar Kushwaha
qixis_read_tag(char * buf)802ae4e8d9SPrabhakar Kushwaha char *qixis_read_tag(char *buf)
812ae4e8d9SPrabhakar Kushwaha {
822ae4e8d9SPrabhakar Kushwaha int i;
832ae4e8d9SPrabhakar Kushwaha char tag, *ptr = buf;
842ae4e8d9SPrabhakar Kushwaha
852ae4e8d9SPrabhakar Kushwaha for (i = 16; i <= 63; i++) {
862ae4e8d9SPrabhakar Kushwaha QIXIS_WRITE(tagdata, i);
872ae4e8d9SPrabhakar Kushwaha tag = QIXIS_READ(tagdata);
882ae4e8d9SPrabhakar Kushwaha *(ptr++) = tag;
892ae4e8d9SPrabhakar Kushwaha if (!tag)
902ae4e8d9SPrabhakar Kushwaha break;
912ae4e8d9SPrabhakar Kushwaha }
922ae4e8d9SPrabhakar Kushwaha if (i > 63)
932ae4e8d9SPrabhakar Kushwaha *ptr = '\0';
942ae4e8d9SPrabhakar Kushwaha
952ae4e8d9SPrabhakar Kushwaha return buf;
962ae4e8d9SPrabhakar Kushwaha }
972ae4e8d9SPrabhakar Kushwaha
98c6cef92fSShaveta Leekha /*
99c6cef92fSShaveta Leekha * return the string of binary of u8 in the format of
100c6cef92fSShaveta Leekha * 1010 10_0. The masked bit is filled as underscore.
101c6cef92fSShaveta Leekha */
byte_to_binary_mask(u8 val,u8 mask,char * buf)102c6cef92fSShaveta Leekha const char *byte_to_binary_mask(u8 val, u8 mask, char *buf)
103c6cef92fSShaveta Leekha {
104c6cef92fSShaveta Leekha char *ptr;
105c6cef92fSShaveta Leekha int i;
106c6cef92fSShaveta Leekha
107c6cef92fSShaveta Leekha ptr = buf;
108c6cef92fSShaveta Leekha for (i = 0x80; i > 0x08 ; i >>= 1, ptr++)
109c6cef92fSShaveta Leekha *ptr = (val & i) ? '1' : ((mask & i) ? '_' : '0');
110c6cef92fSShaveta Leekha *(ptr++) = ' ';
111c6cef92fSShaveta Leekha for (i = 0x08; i > 0 ; i >>= 1, ptr++)
112c6cef92fSShaveta Leekha *ptr = (val & i) ? '1' : ((mask & i) ? '_' : '0');
113c6cef92fSShaveta Leekha
114c6cef92fSShaveta Leekha *ptr = '\0';
115c6cef92fSShaveta Leekha
116c6cef92fSShaveta Leekha return buf;
117c6cef92fSShaveta Leekha }
118c6cef92fSShaveta Leekha
119c63e1370SYork Sun #ifdef QIXIS_RST_FORCE_MEM
board_assert_mem_reset(void)120c63e1370SYork Sun void board_assert_mem_reset(void)
121c63e1370SYork Sun {
122c63e1370SYork Sun u8 rst;
123c63e1370SYork Sun
124c63e1370SYork Sun rst = QIXIS_READ(rst_frc[0]);
125c63e1370SYork Sun if (!(rst & QIXIS_RST_FORCE_MEM))
126c63e1370SYork Sun QIXIS_WRITE(rst_frc[0], rst | QIXIS_RST_FORCE_MEM);
127c63e1370SYork Sun }
128c63e1370SYork Sun
board_deassert_mem_reset(void)129c63e1370SYork Sun void board_deassert_mem_reset(void)
130c63e1370SYork Sun {
131c63e1370SYork Sun u8 rst;
132c63e1370SYork Sun
133c63e1370SYork Sun rst = QIXIS_READ(rst_frc[0]);
134c63e1370SYork Sun if (rst & QIXIS_RST_FORCE_MEM)
135c63e1370SYork Sun QIXIS_WRITE(rst_frc[0], rst & ~QIXIS_RST_FORCE_MEM);
136c63e1370SYork Sun }
137c63e1370SYork Sun #endif
138c63e1370SYork Sun
1391f0ce325STom Rini #ifndef CONFIG_SPL_BUILD
qixis_reset(void)1401f0ce325STom Rini static void qixis_reset(void)
141ae6b03feSShengzhou Liu {
1429f26fd79SPrabhakar Kushwaha QIXIS_WRITE(rst_ctl, QIXIS_RST_CTL_RESET);
143ae6b03feSShengzhou Liu }
144ae6b03feSShengzhou Liu
qixis_bank_reset(void)1451f0ce325STom Rini static void qixis_bank_reset(void)
146ae6b03feSShengzhou Liu {
1479f26fd79SPrabhakar Kushwaha QIXIS_WRITE(rcfg_ctl, QIXIS_RCFG_CTL_RECONFIG_IDLE);
1489f26fd79SPrabhakar Kushwaha QIXIS_WRITE(rcfg_ctl, QIXIS_RCFG_CTL_RECONFIG_START);
149ae6b03feSShengzhou Liu }
150ae6b03feSShengzhou Liu
set_lbmap(int lbmap)151548cf52fSScott Wood static void __maybe_unused set_lbmap(int lbmap)
152ae6b03feSShengzhou Liu {
153ae6b03feSShengzhou Liu u8 reg;
154ae6b03feSShengzhou Liu
15516dacb26SAbhimanyu Saini reg = QIXIS_READ(brdcfg[QIXIS_LBMAP_BRDCFG_REG]);
156548cf52fSScott Wood reg = (reg & ~QIXIS_LBMAP_MASK) | lbmap;
15716dacb26SAbhimanyu Saini QIXIS_WRITE(brdcfg[QIXIS_LBMAP_BRDCFG_REG], reg);
158ae6b03feSShengzhou Liu }
159ae6b03feSShengzhou Liu
set_rcw_src(int rcw_src)160548cf52fSScott Wood static void __maybe_unused set_rcw_src(int rcw_src)
161ae6b03feSShengzhou Liu {
162ae6b03feSShengzhou Liu u8 reg;
163ae6b03feSShengzhou Liu
164548cf52fSScott Wood reg = QIXIS_READ(dutcfg[1]);
165548cf52fSScott Wood reg = (reg & ~1) | (rcw_src & 1);
166548cf52fSScott Wood QIXIS_WRITE(dutcfg[1], reg);
167548cf52fSScott Wood QIXIS_WRITE(dutcfg[0], (rcw_src >> 1) & 0xff);
168ae6b03feSShengzhou Liu }
169ae6b03feSShengzhou Liu
qixis_dump_regs(void)170ae6b03feSShengzhou Liu static void qixis_dump_regs(void)
171ae6b03feSShengzhou Liu {
172ae6b03feSShengzhou Liu int i;
173ae6b03feSShengzhou Liu
174ae6b03feSShengzhou Liu printf("id = %02x\n", QIXIS_READ(id));
175ae6b03feSShengzhou Liu printf("arch = %02x\n", QIXIS_READ(arch));
176ae6b03feSShengzhou Liu printf("scver = %02x\n", QIXIS_READ(scver));
177ae6b03feSShengzhou Liu printf("model = %02x\n", QIXIS_READ(model));
178ae6b03feSShengzhou Liu printf("rst_ctl = %02x\n", QIXIS_READ(rst_ctl));
179ae6b03feSShengzhou Liu printf("aux = %02x\n", QIXIS_READ(aux));
180ae6b03feSShengzhou Liu for (i = 0; i < 16; i++)
181ae6b03feSShengzhou Liu printf("brdcfg%02d = %02x\n", i, QIXIS_READ(brdcfg[i]));
182ae6b03feSShengzhou Liu for (i = 0; i < 16; i++)
183ae6b03feSShengzhou Liu printf("dutcfg%02d = %02x\n", i, QIXIS_READ(dutcfg[i]));
184ae6b03feSShengzhou Liu printf("sclk = %02x%02x%02x\n", QIXIS_READ(sclk[0]),
185ae6b03feSShengzhou Liu QIXIS_READ(sclk[1]), QIXIS_READ(sclk[2]));
186ae6b03feSShengzhou Liu printf("dclk = %02x%02x%02x\n", QIXIS_READ(dclk[0]),
187ae6b03feSShengzhou Liu QIXIS_READ(dclk[1]), QIXIS_READ(dclk[2]));
188ae6b03feSShengzhou Liu printf("aux = %02x\n", QIXIS_READ(aux));
189ae6b03feSShengzhou Liu printf("watch = %02x\n", QIXIS_READ(watch));
190ae6b03feSShengzhou Liu printf("ctl_sys = %02x\n", QIXIS_READ(ctl_sys));
191ae6b03feSShengzhou Liu printf("rcw_ctl = %02x\n", QIXIS_READ(rcw_ctl));
192ae6b03feSShengzhou Liu printf("present = %02x\n", QIXIS_READ(present));
193e4de13e3SShengzhou Liu printf("present2 = %02x\n", QIXIS_READ(present2));
194ae6b03feSShengzhou Liu printf("clk_spd = %02x\n", QIXIS_READ(clk_spd));
195ae6b03feSShengzhou Liu printf("stat_dut = %02x\n", QIXIS_READ(stat_dut));
196ae6b03feSShengzhou Liu printf("stat_sys = %02x\n", QIXIS_READ(stat_sys));
197ae6b03feSShengzhou Liu printf("stat_alrm = %02x\n", QIXIS_READ(stat_alrm));
198ae6b03feSShengzhou Liu }
199c6cef92fSShaveta Leekha
qixis_dump_switch(void)2001f0ce325STom Rini void __weak qixis_dump_switch(void)
201c6cef92fSShaveta Leekha {
202c6cef92fSShaveta Leekha puts("Reverse engineering switch is not implemented for this board\n");
203c6cef92fSShaveta Leekha }
204c6cef92fSShaveta Leekha
qixis_reset_cmd(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])2051f0ce325STom Rini static int qixis_reset_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
206ae6b03feSShengzhou Liu {
207ae6b03feSShengzhou Liu int i;
208ae6b03feSShengzhou Liu
209ae6b03feSShengzhou Liu if (argc <= 1) {
210548cf52fSScott Wood set_lbmap(QIXIS_LBMAP_DFLTBANK);
211ae6b03feSShengzhou Liu qixis_reset();
212ae6b03feSShengzhou Liu } else if (strcmp(argv[1], "altbank") == 0) {
213548cf52fSScott Wood set_lbmap(QIXIS_LBMAP_ALTBANK);
214ae6b03feSShengzhou Liu qixis_bank_reset();
215548cf52fSScott Wood } else if (strcmp(argv[1], "nand") == 0) {
216548cf52fSScott Wood #ifdef QIXIS_LBMAP_NAND
217548cf52fSScott Wood QIXIS_WRITE(rst_ctl, 0x30);
218548cf52fSScott Wood QIXIS_WRITE(rcfg_ctl, 0);
219548cf52fSScott Wood set_lbmap(QIXIS_LBMAP_NAND);
220548cf52fSScott Wood set_rcw_src(QIXIS_RCW_SRC_NAND);
221548cf52fSScott Wood QIXIS_WRITE(rcfg_ctl, 0x20);
222548cf52fSScott Wood QIXIS_WRITE(rcfg_ctl, 0x21);
223548cf52fSScott Wood #else
224548cf52fSScott Wood printf("Not implemented\n");
225548cf52fSScott Wood #endif
22698d9aa40SGong Qianyu } else if (strcmp(argv[1], "sd") == 0) {
22798d9aa40SGong Qianyu #ifdef QIXIS_LBMAP_SD
22898d9aa40SGong Qianyu QIXIS_WRITE(rst_ctl, 0x30);
22998d9aa40SGong Qianyu QIXIS_WRITE(rcfg_ctl, 0);
230*58c3e620SPriyanka Jain #ifdef NON_EXTENDED_DUTCFG
231*58c3e620SPriyanka Jain QIXIS_WRITE(dutcfg[0], QIXIS_RCW_SRC_SD);
232*58c3e620SPriyanka Jain #else
23398d9aa40SGong Qianyu set_lbmap(QIXIS_LBMAP_SD);
23498d9aa40SGong Qianyu set_rcw_src(QIXIS_RCW_SRC_SD);
235*58c3e620SPriyanka Jain #endif
23698d9aa40SGong Qianyu QIXIS_WRITE(rcfg_ctl, 0x20);
23798d9aa40SGong Qianyu QIXIS_WRITE(rcfg_ctl, 0x21);
23898d9aa40SGong Qianyu #else
23998d9aa40SGong Qianyu printf("Not implemented\n");
24098d9aa40SGong Qianyu #endif
241fe997689SAshish Kumar } else if (strcmp(argv[1], "ifc") == 0) {
242fe997689SAshish Kumar #ifdef QIXIS_LBMAP_IFC
243fe997689SAshish Kumar QIXIS_WRITE(rst_ctl, 0x30);
244fe997689SAshish Kumar QIXIS_WRITE(rcfg_ctl, 0);
245fe997689SAshish Kumar set_lbmap(QIXIS_LBMAP_IFC);
246fe997689SAshish Kumar set_rcw_src(QIXIS_RCW_SRC_IFC);
247fe997689SAshish Kumar QIXIS_WRITE(rcfg_ctl, 0x20);
248fe997689SAshish Kumar QIXIS_WRITE(rcfg_ctl, 0x21);
249fe997689SAshish Kumar #else
250fe997689SAshish Kumar printf("Not implemented\n");
251fe997689SAshish Kumar #endif
252fe997689SAshish Kumar } else if (strcmp(argv[1], "emmc") == 0) {
253fe997689SAshish Kumar #ifdef QIXIS_LBMAP_EMMC
254fe997689SAshish Kumar QIXIS_WRITE(rst_ctl, 0x30);
255fe997689SAshish Kumar QIXIS_WRITE(rcfg_ctl, 0);
256fe997689SAshish Kumar set_lbmap(QIXIS_LBMAP_EMMC);
257fe997689SAshish Kumar set_rcw_src(QIXIS_RCW_SRC_EMMC);
258fe997689SAshish Kumar QIXIS_WRITE(rcfg_ctl, 0x20);
259fe997689SAshish Kumar QIXIS_WRITE(rcfg_ctl, 0x21);
260fe997689SAshish Kumar #else
261fe997689SAshish Kumar printf("Not implemented\n");
262fe997689SAshish Kumar #endif
26398d9aa40SGong Qianyu } else if (strcmp(argv[1], "sd_qspi") == 0) {
26498d9aa40SGong Qianyu #ifdef QIXIS_LBMAP_SD_QSPI
26598d9aa40SGong Qianyu QIXIS_WRITE(rst_ctl, 0x30);
26698d9aa40SGong Qianyu QIXIS_WRITE(rcfg_ctl, 0);
26798d9aa40SGong Qianyu set_lbmap(QIXIS_LBMAP_SD_QSPI);
26898d9aa40SGong Qianyu set_rcw_src(QIXIS_RCW_SRC_SD);
26998d9aa40SGong Qianyu qixis_write_i2c(offsetof(struct qixis, rcfg_ctl), 0x20);
27098d9aa40SGong Qianyu qixis_write_i2c(offsetof(struct qixis, rcfg_ctl), 0x21);
27198d9aa40SGong Qianyu #else
27298d9aa40SGong Qianyu printf("Not implemented\n");
27398d9aa40SGong Qianyu #endif
27498d9aa40SGong Qianyu } else if (strcmp(argv[1], "qspi") == 0) {
27598d9aa40SGong Qianyu #ifdef QIXIS_LBMAP_QSPI
27698d9aa40SGong Qianyu QIXIS_WRITE(rst_ctl, 0x30);
27798d9aa40SGong Qianyu QIXIS_WRITE(rcfg_ctl, 0);
27898d9aa40SGong Qianyu set_lbmap(QIXIS_LBMAP_QSPI);
27998d9aa40SGong Qianyu set_rcw_src(QIXIS_RCW_SRC_QSPI);
28098d9aa40SGong Qianyu qixis_write_i2c(offsetof(struct qixis, rcfg_ctl), 0x20);
28198d9aa40SGong Qianyu qixis_write_i2c(offsetof(struct qixis, rcfg_ctl), 0x21);
28298d9aa40SGong Qianyu #else
28398d9aa40SGong Qianyu printf("Not implemented\n");
28498d9aa40SGong Qianyu #endif
285ae6b03feSShengzhou Liu } else if (strcmp(argv[1], "watchdog") == 0) {
286ae6b03feSShengzhou Liu static char *period[9] = {"2s", "4s", "8s", "16s", "32s",
287ae6b03feSShengzhou Liu "1min", "2min", "4min", "8min"};
288ae6b03feSShengzhou Liu u8 rcfg = QIXIS_READ(rcfg_ctl);
289ae6b03feSShengzhou Liu
290ae6b03feSShengzhou Liu if (argv[2] == NULL) {
291ae6b03feSShengzhou Liu printf("qixis watchdog <watchdog_period>\n");
292ae6b03feSShengzhou Liu return 0;
293ae6b03feSShengzhou Liu }
294ae6b03feSShengzhou Liu for (i = 0; i < ARRAY_SIZE(period); i++) {
295ae6b03feSShengzhou Liu if (strcmp(argv[2], period[i]) == 0) {
296ae6b03feSShengzhou Liu /* disable watchdog */
2979f26fd79SPrabhakar Kushwaha QIXIS_WRITE(rcfg_ctl,
2989f26fd79SPrabhakar Kushwaha rcfg & ~QIXIS_RCFG_CTL_WATCHDOG_ENBLE);
299ae6b03feSShengzhou Liu QIXIS_WRITE(watch, ((i<<2) - 1));
300ae6b03feSShengzhou Liu QIXIS_WRITE(rcfg_ctl, rcfg);
301ae6b03feSShengzhou Liu return 0;
302ae6b03feSShengzhou Liu }
303ae6b03feSShengzhou Liu }
304c6cef92fSShaveta Leekha } else if (strcmp(argv[1], "dump") == 0) {
305ae6b03feSShengzhou Liu qixis_dump_regs();
306ae6b03feSShengzhou Liu return 0;
307c6cef92fSShaveta Leekha } else if (strcmp(argv[1], "switch") == 0) {
308c6cef92fSShaveta Leekha qixis_dump_switch();
309c6cef92fSShaveta Leekha return 0;
310c6cef92fSShaveta Leekha } else {
311ae6b03feSShengzhou Liu printf("Invalid option: %s\n", argv[1]);
312ae6b03feSShengzhou Liu return 1;
313ae6b03feSShengzhou Liu }
314ae6b03feSShengzhou Liu
315ae6b03feSShengzhou Liu return 0;
316ae6b03feSShengzhou Liu }
317ae6b03feSShengzhou Liu
318ae6b03feSShengzhou Liu U_BOOT_CMD(
319ae6b03feSShengzhou Liu qixis_reset, CONFIG_SYS_MAXARGS, 1, qixis_reset_cmd,
320ae6b03feSShengzhou Liu "Reset the board using the FPGA sequencer",
321ae6b03feSShengzhou Liu "- hard reset to default bank\n"
322ae6b03feSShengzhou Liu "qixis_reset altbank - reset to alternate bank\n"
323548cf52fSScott Wood "qixis_reset nand - reset to nand\n"
32498d9aa40SGong Qianyu "qixis_reset sd - reset to sd\n"
32598d9aa40SGong Qianyu "qixis_reset sd_qspi - reset to sd with qspi support\n"
32698d9aa40SGong Qianyu "qixis_reset qspi - reset to qspi\n"
327ae6b03feSShengzhou Liu "qixis watchdog <watchdog_period> - set the watchdog period\n"
328ae6b03feSShengzhou Liu " period: 1s 2s 4s 8s 16s 32s 1min 2min 4min 8min\n"
329ae6b03feSShengzhou Liu "qixis_reset dump - display the QIXIS registers\n"
330c6cef92fSShaveta Leekha "qixis_reset switch - display switch\n"
331ae6b03feSShengzhou Liu );
3321f0ce325STom Rini #endif
333