Example #1
0
static int cmd_hal(int argc, char *argv[])
{
	int i;
	int result;
	amb_hal_function_info_t *finfo;

	if (argc == 1) {
		/* Enumerate HAL */
		finfo = (amb_hal_function_info_t *)
			(g_haladdr + 128);
		for (i = 0; finfo[i].function != NULL; i++) {
			uart_putdec(i);
			uart_putchar(' ');
			uart_puthex((u32) finfo[i].function);
			uart_putchar(' ');
			uart_putstr((char *) (g_haladdr + (u32) finfo[i].name));
			uart_putstr("\r\n");
		}

		return 0;
	}

	/* Invoke HAL */
	result = hal_call_name(argc -1, &argv[1]);
	uart_putstr("result = ");
	uart_putdec(result);
	uart_putstr("\r\n");

	return 0;
}
Example #2
0
/**
 * Run diagnostic on IR: continuously display the current value.
 */
void diag_ir(void)
{
	int i;
	u32 data;

	/* Set IR sampling frequency */
	rct_set_ir_pll();

	/* config IR GPIO */
	gpio_config_hw(IR_IN);

	uart_putstr("running IR diagnostics...\r\n");
	uart_putstr("press any key to quit!\r\n");

	writel(IR_CONTROL_REG, IR_CONTROL_RESET);
	writel(IR_CONTROL_REG, IR_CONTROL_ENB);

	for (i = 0; ; i++) {
		if (uart_poll())
			break;

		while (readl(IR_STATUS_REG) == 0x0);
		data = readl(IR_DATA_REG);
		uart_putdec(data);
		uart_putchar(' ');
		if (i == 8) {
			uart_putstr("\r\n");
			i = 0;
		}
	}

	writel(IR_CONTROL_REG, 0x0);

	uart_putstr("\r\ndone!\r\n");
}
Example #3
0
static int cmd_nand_erase(int argc, char *argv[])
{
	u32 start_block, block, blocks, total_blocks;
	int i, rval;

	total_blocks = flnand.blocks_per_bank * flnand.banks;

	if (argc != 3) {
		uart_putstr("nand_erase [block] [blocks]!\r\n");
		uart_putstr("Total blocks: ");
		uart_putdec(total_blocks);
		uart_putstr("\r\n");
		return -1;
	}

	putstr("erase nand blocks including any bad blocks...\r\n");
	putstr("press enter to start!\r\n");
	putstr("press any key to terminate!\r\n");
	rval = uart_wait_escape(0xffffffff);
	if (rval == 0)
		return -1;

	strtou32(argv[1], &start_block);
	strtou32(argv[2], &blocks);

	for (i = 0, block = start_block; i < blocks; i++, block++) {
		if (uart_poll())
			break;
		if (block >= total_blocks)
			break;

		rval = nand_erase_block(block);

		putchar('.');

		if ((i & 0xf) == 0xf) {
			putchar(' ');
			putdec(i);
			putchar('/');
			putdec(blocks);
			putstr(" (");
			putdec(i * 100 / blocks);
			putstr("%)\t\t\r");
		}

		if (rval < 0) {
			putstr("\r\nfailed at block ");
			putdec(block);
			putstr("\r\n");
		}
	}

	putstr("\r\ndone!\r\n");

	return 0;
}
Example #4
0
/* address must be aligned to 4 and size must be multiple of 4 */
static NOINSTR void emit_core_dump_section(int fd, const char *name,
                                           uint32_t addr, uint32_t size) {
  struct cs_base64_ctx ctx;
  int col_counter = 0;
  uart_puts(fd, ",\"");
  uart_puts(fd, name);
  uart_puts(fd, "\": {\"addr\": ");
  uart_putdec(fd, addr);
  uart_puts(fd, ", \"data\": \"");
  core_dump_emit_char_fd = fd;
  cs_base64_init(&ctx, core_dump_emit_char, &col_counter);

  uint32_t end = addr + size;
  while (addr < end) {
    uint32_t buf;
    buf = *((uint32_t *) addr);
    addr += sizeof(uint32_t);
    cs_base64_update(&ctx, (char *) &buf, sizeof(uint32_t));
  }
  cs_base64_finish(&ctx);
  uart_puts(fd, "\"}");
}
Example #5
0
/*******************************************************************************
 * Do it.
 *
 ******************************************************************************/
int main()
{
    clock_init();
    uart_init();
    uart_puts("\r\nInitializing...\r\n");
    timer_init();
    io_init();
    uart_puts("Starting drive...\r\n");

    c1541_init();

    cli_init();

    for (;;)
    {
#ifdef CONFIG_GDBSIM
        uart_putdec(demon_clock());
        uart_putcrlf();
#endif
        cli_check();
    }

    return 0;
}