1*2e192b24SSimon Glass /* 2*2e192b24SSimon Glass * Copyright (c) 2012 The Chromium OS Authors. 3*2e192b24SSimon Glass * 4*2e192b24SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 5*2e192b24SSimon Glass */ 6*2e192b24SSimon Glass 7*2e192b24SSimon Glass /* 8*2e192b24SSimon Glass * IO space access commands. 9*2e192b24SSimon Glass */ 10*2e192b24SSimon Glass 11*2e192b24SSimon Glass #include <common.h> 12*2e192b24SSimon Glass #include <command.h> 13*2e192b24SSimon Glass #include <asm/io.h> 14*2e192b24SSimon Glass 15*2e192b24SSimon Glass /* 16*2e192b24SSimon Glass * IO Display 17*2e192b24SSimon Glass * 18*2e192b24SSimon Glass * Syntax: 19*2e192b24SSimon Glass * iod{.b, .w, .l} {addr} 20*2e192b24SSimon Glass */ 21*2e192b24SSimon Glass int do_io_iod(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) 22*2e192b24SSimon Glass { 23*2e192b24SSimon Glass ulong addr; 24*2e192b24SSimon Glass int size; 25*2e192b24SSimon Glass 26*2e192b24SSimon Glass if (argc != 2) 27*2e192b24SSimon Glass return CMD_RET_USAGE; 28*2e192b24SSimon Glass 29*2e192b24SSimon Glass size = cmd_get_data_size(argv[0], 4); 30*2e192b24SSimon Glass if (size < 0) 31*2e192b24SSimon Glass return 1; 32*2e192b24SSimon Glass 33*2e192b24SSimon Glass addr = simple_strtoul(argv[1], NULL, 16); 34*2e192b24SSimon Glass 35*2e192b24SSimon Glass printf("%04x: ", (u16) addr); 36*2e192b24SSimon Glass 37*2e192b24SSimon Glass if (size == 4) 38*2e192b24SSimon Glass printf("%08x\n", inl(addr)); 39*2e192b24SSimon Glass else if (size == 2) 40*2e192b24SSimon Glass printf("%04x\n", inw(addr)); 41*2e192b24SSimon Glass else 42*2e192b24SSimon Glass printf("%02x\n", inb(addr)); 43*2e192b24SSimon Glass 44*2e192b24SSimon Glass return 0; 45*2e192b24SSimon Glass } 46*2e192b24SSimon Glass 47*2e192b24SSimon Glass int do_io_iow(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) 48*2e192b24SSimon Glass { 49*2e192b24SSimon Glass ulong addr, size, val; 50*2e192b24SSimon Glass 51*2e192b24SSimon Glass if (argc != 3) 52*2e192b24SSimon Glass return CMD_RET_USAGE; 53*2e192b24SSimon Glass 54*2e192b24SSimon Glass size = cmd_get_data_size(argv[0], 4); 55*2e192b24SSimon Glass if (size < 0) 56*2e192b24SSimon Glass return 1; 57*2e192b24SSimon Glass 58*2e192b24SSimon Glass addr = simple_strtoul(argv[1], NULL, 16); 59*2e192b24SSimon Glass val = simple_strtoul(argv[2], NULL, 16); 60*2e192b24SSimon Glass 61*2e192b24SSimon Glass if (size == 4) 62*2e192b24SSimon Glass outl((u32) val, addr); 63*2e192b24SSimon Glass else if (size == 2) 64*2e192b24SSimon Glass outw((u16) val, addr); 65*2e192b24SSimon Glass else 66*2e192b24SSimon Glass outb((u8) val, addr); 67*2e192b24SSimon Glass 68*2e192b24SSimon Glass return 0; 69*2e192b24SSimon Glass } 70*2e192b24SSimon Glass 71*2e192b24SSimon Glass /**************************************************/ 72*2e192b24SSimon Glass U_BOOT_CMD(iod, 2, 0, do_io_iod, 73*2e192b24SSimon Glass "IO space display", "[.b, .w, .l] address"); 74*2e192b24SSimon Glass 75*2e192b24SSimon Glass U_BOOT_CMD(iow, 3, 0, do_io_iow, 76*2e192b24SSimon Glass "IO space modify", 77*2e192b24SSimon Glass "[.b, .w, .l] address value"); 78