void platform_init(void) { uart_init(); /* enable if we want to see some hardware boot status */ #if 0 printf("zynq boot status:\n"); printf("\tREBOOT_STATUS 0x%x\n", SLCR_REG(REBOOT_STATUS)); printf("\tBOOT_MODE 0x%x\n", SLCR_REG(BOOT_MODE)); zynq_dump_clocks(); #endif }
static int cmd_zynq(int argc, const cmd_args *argv) { if (argc < 2) { notenoughargs: printf("not enough arguments\n"); usage: printf("usage: %s <command>\n", argv[0].str); printf("\tslcr lock\n"); printf("\tslcr unlock\n"); printf("\tslcr lockstatus\n"); printf("\tmio\n"); printf("\tclocks\n"); return -1; } if (!strcmp(argv[1].str, "slcr")) { if (argc < 3) goto notenoughargs; bool print_lock_status = false; if (!strcmp(argv[2].str, "lock")) { zynq_slcr_lock(); print_lock_status = true; } else if (!strcmp(argv[2].str, "unlock")) { zynq_slcr_unlock(); print_lock_status = true; } else if (print_lock_status || !strcmp(argv[2].str, "lockstatus")) { printf("%s\n", (SLCR->SLCR_LOCKSTA & 0x1) ? "locked" : "unlocked"); } else { goto usage; } } else if (!strcmp(argv[1].str, "mio")) { printf("zynq mio:\n"); for (size_t i = 0; i < ZYNQ_MIO_CNT; i++) { printf("\t%02u: 0x%08x", i, *REG32((uintptr_t)&SLCR->MIO_PIN_00 + (i * 4))); if (i % 4 == 3 || i == 53) { putchar('\n'); } } } else if (!strcmp(argv[1].str, "clocks")) { zynq_dump_clocks(); } else { goto usage; } return 0; }
void platform_init(void) { uart_init(); /* enable if we want to see some hardware boot status */ #if 0 printf("zynq boot status:\n"); printf("\tREBOOT_STATUS 0x%x\n", SLCR_REG(REBOOT_STATUS)); printf("\tBOOT_MODE 0x%x\n", SLCR_REG(BOOT_MODE)); zynq_dump_clocks(); printf("zynq mio:\n"); for (size_t i = 0; i < 54; i++) { printf("\t%02u: 0x%08x", i, *REG32((uintptr_t)&SLCR->MIO_PIN_00 + (i * 4))); if (i % 4 == 3 || i == 53) { putchar('\n'); } } #endif gem_init(GEM0_BASE, 256*1024); }