msg_port.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /*
  2. * Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #ifndef _QUARK_MSG_PORT_H_
  7. #define _QUARK_MSG_PORT_H_
  8. /*
  9. * In the Quark SoC, some chipset commands are accomplished by utilizing
  10. * the internal message network within the host bridge (D0:F0). Accesses
  11. * to this network are accomplished by populating the message control
  12. * register (MCR), Message Control Register eXtension (MCRX) and the
  13. * message data register (MDR).
  14. */
  15. #define MSG_CTRL_REG 0xd0 /* Message Control Register */
  16. #define MSG_DATA_REG 0xd4 /* Message Data Register */
  17. #define MSG_CTRL_EXT_REG 0xd8 /* Message Control Register EXT */
  18. /* Normal Read/Write OpCodes */
  19. #define MSG_OP_READ 0x10
  20. #define MSG_OP_WRITE 0x11
  21. /* Alternative Read/Write OpCodes */
  22. #define MSG_OP_ALT_READ 0x06
  23. #define MSG_OP_ALT_WRITE 0x07
  24. /* IO Read/Write OpCodes */
  25. #define MSG_OP_IO_READ 0x02
  26. #define MSG_OP_IO_WRITE 0x03
  27. /* All byte enables */
  28. #define MSG_BYTE_ENABLE 0xf0
  29. #ifndef __ASSEMBLY__
  30. /**
  31. * msg_port_setup - set up the message port control register
  32. *
  33. * @op: message bus access opcode
  34. * @port: port number on the message bus
  35. * @reg: register number within a port
  36. */
  37. void msg_port_setup(int op, int port, int reg);
  38. /**
  39. * msg_port_read - read a message port register using normal opcode
  40. *
  41. * @port: port number on the message bus
  42. * @reg: register number within a port
  43. *
  44. * @return: message port register value
  45. */
  46. u32 msg_port_read(u8 port, u32 reg);
  47. /**
  48. * msg_port_write - write a message port register using normal opcode
  49. *
  50. * @port: port number on the message bus
  51. * @reg: register number within a port
  52. * @value: register value to write
  53. */
  54. void msg_port_write(u8 port, u32 reg, u32 value);
  55. /**
  56. * msg_port_alt_read - read a message port register using alternative opcode
  57. *
  58. * @port: port number on the message bus
  59. * @reg: register number within a port
  60. *
  61. * @return: message port register value
  62. */
  63. u32 msg_port_alt_read(u8 port, u32 reg);
  64. /**
  65. * msg_port_alt_write - write a message port register using alternative opcode
  66. *
  67. * @port: port number on the message bus
  68. * @reg: register number within a port
  69. * @value: register value to write
  70. */
  71. void msg_port_alt_write(u8 port, u32 reg, u32 value);
  72. /**
  73. * msg_port_io_read - read a message port register using I/O opcode
  74. *
  75. * @port: port number on the message bus
  76. * @reg: register number within a port
  77. *
  78. * @return: message port register value
  79. */
  80. u32 msg_port_io_read(u8 port, u32 reg);
  81. /**
  82. * msg_port_io_write - write a message port register using I/O opcode
  83. *
  84. * @port: port number on the message bus
  85. * @reg: register number within a port
  86. * @value: register value to write
  87. */
  88. void msg_port_io_write(u8 port, u32 reg, u32 value);
  89. /* clrbits, setbits, clrsetbits macros for message port access */
  90. #define msg_port_normal_read msg_port_read
  91. #define msg_port_normal_write msg_port_write
  92. #define msg_port_generic_clrsetbits(type, port, reg, clr, set) \
  93. msg_port_##type##_write(port, reg, \
  94. (msg_port_##type##_read(port, reg) \
  95. & ~(clr)) | (set))
  96. #define msg_port_clrbits(port, reg, clr) \
  97. msg_port_generic_clrsetbits(normal, port, reg, clr, 0)
  98. #define msg_port_setbits(port, reg, set) \
  99. msg_port_generic_clrsetbits(normal, port, reg, 0, set)
  100. #define msg_port_clrsetbits(port, reg, clr, set) \
  101. msg_port_generic_clrsetbits(normal, port, reg, clr, set)
  102. #define msg_port_alt_clrbits(port, reg, clr) \
  103. msg_port_generic_clrsetbits(alt, port, reg, clr, 0)
  104. #define msg_port_alt_setbits(port, reg, set) \
  105. msg_port_generic_clrsetbits(alt, port, reg, 0, set)
  106. #define msg_port_alt_clrsetbits(port, reg, clr, set) \
  107. msg_port_generic_clrsetbits(alt, port, reg, clr, set)
  108. #define msg_port_io_clrbits(port, reg, clr) \
  109. msg_port_generic_clrsetbits(io, port, reg, clr, 0)
  110. #define msg_port_io_setbits(port, reg, set) \
  111. msg_port_generic_clrsetbits(io, port, reg, 0, set)
  112. #define msg_port_io_clrsetbits(port, reg, clr, set) \
  113. msg_port_generic_clrsetbits(io, port, reg, clr, set)
  114. #endif /* __ASSEMBLY__ */
  115. #endif /* _QUARK_MSG_PORT_H_ */