SPI hardware bitbanging from SD CARD
This commit is contained in:
parent
2c4b89639f
commit
50b6db6a6b
|
@ -487,3 +487,29 @@ void romboot(void)
|
||||||
boot(0, 0, 0, ROM_BOOT_ADDRESS);
|
boot(0, 0, 0, ROM_BOOT_ADDRESS);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// SPI HARDWARE BITBANG
|
||||||
|
#ifdef CSR_SPI_BASE
|
||||||
|
#include <spi.h>
|
||||||
|
|
||||||
|
void spisdboot(void)
|
||||||
|
{
|
||||||
|
printf("SD Card via SPI Initialising\n");
|
||||||
|
if(spi_sdcard_goidle() == 0) {
|
||||||
|
printf("SD Card Timeout\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(spi_sdcard_readMBR() == 0) {
|
||||||
|
printf("SD Card MBR Timeout\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(spi_sdcard_readFile("IMAGE","",MAIN_RAM_BASE+KERNEL_IMAGE_RAM_OFFSET)==0) return;
|
||||||
|
if(spi_sdcard_readFile("ROOTFS~1","CPI",MAIN_RAM_BASE+ROOTFS_IMAGE_RAM_OFFSET)==0) return;
|
||||||
|
if(spi_sdcard_readFile("RV32","DTB",MAIN_RAM_BASE+DEVICE_TREE_IMAGE_RAM_OFFSET)==0) return;
|
||||||
|
if(spi_sdcard_readFile("EMULATOR","BIN",EMULATOR_RAM_BASE)==0) return;
|
||||||
|
|
||||||
|
boot(0,0,0,EMULATOR_RAM_BASE + EMULATOR_IMAGE_RAM_OFFSET);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -6,4 +6,8 @@ void netboot(void);
|
||||||
void flashboot(void);
|
void flashboot(void);
|
||||||
void romboot(void);
|
void romboot(void);
|
||||||
|
|
||||||
|
#ifdef CSR_SPI_BASE
|
||||||
|
void spisdboot(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __BOOT_H */
|
#endif /* __BOOT_H */
|
||||||
|
|
|
@ -388,12 +388,8 @@ static void help(void)
|
||||||
puts("sdinit - SDCard initialization");
|
puts("sdinit - SDCard initialization");
|
||||||
puts("sdtest <loops> - SDCard test");
|
puts("sdtest <loops> - SDCard test");
|
||||||
#endif
|
#endif
|
||||||
#ifdef USDDRPHY_DEBUG
|
#ifdef CSR_SPI_BASE
|
||||||
puts("");
|
puts("spisdboot - boot from SDCard via SPI hardware bitbang");
|
||||||
puts("sdram_cdly value - Set SDRAM clk/cmd delay");
|
|
||||||
puts("sdram_cal - run SDRAM calibration");
|
|
||||||
puts("sdram_mpr - read SDRAM MPR");
|
|
||||||
puts("sdram_mrwr reg value - write SDRAM mode registers");
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -486,24 +482,10 @@ static void do_command(char *c)
|
||||||
else if(strcmp(token, "sdinit") == 0) sdcard_init();
|
else if(strcmp(token, "sdinit") == 0) sdcard_init();
|
||||||
else if(strcmp(token, "sdtest") == 0) sdcard_test(atoi(get_token(&c)));
|
else if(strcmp(token, "sdtest") == 0) sdcard_test(atoi(get_token(&c)));
|
||||||
#endif
|
#endif
|
||||||
#ifdef USDDRPHY_DEBUG
|
#ifdef CSR_SPI_BASE
|
||||||
else if(strcmp(token, "sdram_cdly") == 0)
|
else if(strcmp(token, "spisdboot") == 0) spisdboot();
|
||||||
ddrphy_cdly(atoi(get_token(&c)));
|
|
||||||
else if(strcmp(token, "sdram_cal") == 0)
|
|
||||||
sdrcal();
|
|
||||||
else if(strcmp(token, "sdram_mpr") == 0)
|
|
||||||
sdrmpr();
|
|
||||||
else if(strcmp(token, "sdram_mrwr") == 0) {
|
|
||||||
unsigned int reg;
|
|
||||||
unsigned int value;
|
|
||||||
reg = atoi(get_token(&c));
|
|
||||||
value = atoi(get_token(&c));
|
|
||||||
sdrsw();
|
|
||||||
printf("Writing 0x%04x to SDRAM mode register %d\n", value, reg);
|
|
||||||
sdrmrwr(reg, value);
|
|
||||||
sdrhw();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
else if(strcmp(token, "") != 0)
|
else if(strcmp(token, "") != 0)
|
||||||
printf("Command not found\n");
|
printf("Command not found\n");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue