/*
 * Copyright (c) 2012 The Chromium OS Authors.
 *
 * SPDX-License-Identifier:     GPL-2.0+
 */

/*
 * IO space access commands.
 */

#include <common.h>
#include <command.h>
#include <asm/io.h>

/*
 * IO Display
 *
 * Syntax:
 *	iod{.b, .w, .l} {addr}
 */
int do_io_iod(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
	ulong addr;
	int size;

	if (argc != 2)
		return CMD_RET_USAGE;

	size = cmd_get_data_size(argv[0], 4);
	if (size < 0)
		return 1;

	addr = simple_strtoul(argv[1], NULL, 16);

	printf("%04x: ", (u16) addr);

	if (size == 4)
		printf("%08x\n", inl(addr));
	else if (size == 2)
		printf("%04x\n", inw(addr));
	else
		printf("%02x\n", inb(addr));

	return 0;
}

int do_io_iow(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
	ulong addr, size, val;

	if (argc != 3)
		return CMD_RET_USAGE;

	size = cmd_get_data_size(argv[0], 4);
	if (size < 0)
		return 1;

	addr = simple_strtoul(argv[1], NULL, 16);
	val = simple_strtoul(argv[2], NULL, 16);

	if (size == 4)
		outl((u32) val, addr);
	else if (size == 2)
		outw((u16) val, addr);
	else
		outb((u8) val, addr);

	return 0;
}

/**************************************************/
U_BOOT_CMD(iod, 2, 0, do_io_iod,
	   "IO space display", "[.b, .w, .l] address");

U_BOOT_CMD(iow, 3, 0, do_io_iow,
	   "IO space modify",
	   "[.b, .w, .l] address value");
