io.c 1.3 KB

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