io.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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, val;
  40. int size;
  41. if (argc != 3)
  42. return CMD_RET_USAGE;
  43. size = cmd_get_data_size(argv[0], 4);
  44. if (size < 0)
  45. return 1;
  46. addr = simple_strtoul(argv[1], NULL, 16);
  47. val = simple_strtoul(argv[2], NULL, 16);
  48. if (size == 4)
  49. outl((u32) val, addr);
  50. else if (size == 2)
  51. outw((u16) val, addr);
  52. else
  53. outb((u8) val, addr);
  54. return 0;
  55. }
  56. /**************************************************/
  57. U_BOOT_CMD(iod, 2, 0, do_io_iod,
  58. "IO space display", "[.b, .w, .l] address");
  59. U_BOOT_CMD(iow, 3, 0, do_io_iow,
  60. "IO space modify",
  61. "[.b, .w, .l] address value");