io.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (c) 2012 The Chromium OS Authors.
  4. */
  5. /*
  6. * IO space access commands.
  7. */
  8. #include <common.h>
  9. #include <command.h>
  10. #include <asm/io.h>
  11. /*
  12. * IO Display
  13. *
  14. * Syntax:
  15. * iod{.b, .w, .l} {addr}
  16. */
  17. int do_io_iod(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
  18. {
  19. ulong addr;
  20. int size;
  21. if (argc != 2)
  22. return CMD_RET_USAGE;
  23. size = cmd_get_data_size(argv[0], 4);
  24. if (size < 0)
  25. return 1;
  26. addr = simple_strtoul(argv[1], NULL, 16);
  27. printf("%04x: ", (u16) addr);
  28. if (size == 4)
  29. printf("%08x\n", inl(addr));
  30. else if (size == 2)
  31. printf("%04x\n", inw(addr));
  32. else
  33. printf("%02x\n", inb(addr));
  34. return 0;
  35. }
  36. int do_io_iow(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
  37. {
  38. ulong addr, val;
  39. int size;
  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");