hw-ish-regs.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * ISH registers definitions
  4. *
  5. * Copyright (c) 2012-2016, Intel Corporation.
  6. */
  7. #ifndef _ISHTP_ISH_REGS_H_
  8. #define _ISHTP_ISH_REGS_H_
  9. /*** IPC PCI Offsets and sizes ***/
  10. /* ISH IPC Base Address */
  11. #define IPC_REG_BASE 0x0000
  12. /* Peripheral Interrupt Status Register */
  13. #define IPC_REG_PISR_CHV_AB (IPC_REG_BASE + 0x00)
  14. /* Peripheral Interrupt Mask Register */
  15. #define IPC_REG_PIMR_CHV_AB (IPC_REG_BASE + 0x04)
  16. /*BXT, CHV_K0*/
  17. /*Peripheral Interrupt Status Register */
  18. #define IPC_REG_PISR_BXT (IPC_REG_BASE + 0x0C)
  19. /*Peripheral Interrupt Mask Register */
  20. #define IPC_REG_PIMR_BXT (IPC_REG_BASE + 0x08)
  21. /***********************************/
  22. /* ISH Host Firmware status Register */
  23. #define IPC_REG_ISH_HOST_FWSTS (IPC_REG_BASE + 0x34)
  24. /* Host Communication Register */
  25. #define IPC_REG_HOST_COMM (IPC_REG_BASE + 0x38)
  26. /* Reset register */
  27. #define IPC_REG_ISH_RST (IPC_REG_BASE + 0x44)
  28. /* Inbound doorbell register Host to ISH */
  29. #define IPC_REG_HOST2ISH_DRBL (IPC_REG_BASE + 0x48)
  30. /* Outbound doorbell register ISH to Host */
  31. #define IPC_REG_ISH2HOST_DRBL (IPC_REG_BASE + 0x54)
  32. /* ISH to HOST message registers */
  33. #define IPC_REG_ISH2HOST_MSG (IPC_REG_BASE + 0x60)
  34. /* HOST to ISH message registers */
  35. #define IPC_REG_HOST2ISH_MSG (IPC_REG_BASE + 0xE0)
  36. /* REMAP2 to enable DMA (D3 RCR) */
  37. #define IPC_REG_ISH_RMP2 (IPC_REG_BASE + 0x368)
  38. #define IPC_REG_MAX (IPC_REG_BASE + 0x400)
  39. /*** register bits - HISR ***/
  40. /* bit corresponds HOST2ISH interrupt in PISR and PIMR registers */
  41. #define IPC_INT_HOST2ISH_BIT (1<<0)
  42. /***********************************/
  43. /*CHV_A0, CHV_B0*/
  44. /* bit corresponds ISH2HOST interrupt in PISR and PIMR registers */
  45. #define IPC_INT_ISH2HOST_BIT_CHV_AB (1<<3)
  46. /*BXT, CHV_K0*/
  47. /* bit corresponds ISH2HOST interrupt in PISR and PIMR registers */
  48. #define IPC_INT_ISH2HOST_BIT_BXT (1<<0)
  49. /***********************************/
  50. /* bit corresponds ISH2HOST busy clear interrupt in PIMR register */
  51. #define IPC_INT_ISH2HOST_CLR_MASK_BIT (1<<11)
  52. /* offset of ISH2HOST busy clear interrupt in IPC_BUSY_CLR register */
  53. #define IPC_INT_ISH2HOST_CLR_OFFS (0)
  54. /* bit corresponds ISH2HOST busy clear interrupt in IPC_BUSY_CLR register */
  55. #define IPC_INT_ISH2HOST_CLR_BIT (1<<IPC_INT_ISH2HOST_CLR_OFFS)
  56. /* bit corresponds busy bit in doorbell registers */
  57. #define IPC_DRBL_BUSY_OFFS (31)
  58. #define IPC_DRBL_BUSY_BIT (1<<IPC_DRBL_BUSY_OFFS)
  59. #define IPC_HOST_OWNS_MSG_OFFS (30)
  60. /*
  61. * A0: bit means that host owns MSGnn registers and is reading them.
  62. * ISH FW may not write to them
  63. */
  64. #define IPC_HOST_OWNS_MSG_BIT (1<<IPC_HOST_OWNS_MSG_OFFS)
  65. /*
  66. * Host status bits (HOSTCOMM)
  67. */
  68. /* bit corresponds host ready bit in Host Status Register (HOST_COMM) */
  69. #define IPC_HOSTCOMM_READY_OFFS (7)
  70. #define IPC_HOSTCOMM_READY_BIT (1<<IPC_HOSTCOMM_READY_OFFS)
  71. /***********************************/
  72. /*CHV_A0, CHV_B0*/
  73. #define IPC_HOSTCOMM_INT_EN_OFFS_CHV_AB (31)
  74. #define IPC_HOSTCOMM_INT_EN_BIT_CHV_AB \
  75. (1<<IPC_HOSTCOMM_INT_EN_OFFS_CHV_AB)
  76. /*BXT, CHV_K0*/
  77. #define IPC_PIMR_INT_EN_OFFS_BXT (0)
  78. #define IPC_PIMR_INT_EN_BIT_BXT (1<<IPC_PIMR_INT_EN_OFFS_BXT)
  79. #define IPC_HOST2ISH_BUSYCLEAR_MASK_OFFS_BXT (8)
  80. #define IPC_HOST2ISH_BUSYCLEAR_MASK_BIT \
  81. (1<<IPC_HOST2ISH_BUSYCLEAR_MASK_OFFS_BXT)
  82. /***********************************/
  83. /*
  84. * both Host and ISH have ILUP at bit 0
  85. * bit corresponds host ready bit in both status registers
  86. */
  87. #define IPC_ILUP_OFFS (0)
  88. #define IPC_ILUP_BIT (1<<IPC_ILUP_OFFS)
  89. /*
  90. * ISH FW status bits in ISH FW Status Register
  91. */
  92. #define IPC_ISH_FWSTS_SHIFT 12
  93. #define IPC_ISH_FWSTS_MASK GENMASK(15, 12)
  94. #define IPC_GET_ISH_FWSTS(status) \
  95. (((status) & IPC_ISH_FWSTS_MASK) >> IPC_ISH_FWSTS_SHIFT)
  96. /*
  97. * FW status bits (relevant)
  98. */
  99. #define IPC_FWSTS_ILUP 0x1
  100. #define IPC_FWSTS_ISHTP_UP (1<<1)
  101. #define IPC_FWSTS_DMA0 (1<<16)
  102. #define IPC_FWSTS_DMA1 (1<<17)
  103. #define IPC_FWSTS_DMA2 (1<<18)
  104. #define IPC_FWSTS_DMA3 (1<<19)
  105. #define IPC_ISH_IN_DMA \
  106. (IPC_FWSTS_DMA0 | IPC_FWSTS_DMA1 | IPC_FWSTS_DMA2 | IPC_FWSTS_DMA3)
  107. /* bit corresponds host ready bit in ISH FW Status Register */
  108. #define IPC_ISH_ISHTP_READY_OFFS (1)
  109. #define IPC_ISH_ISHTP_READY_BIT (1<<IPC_ISH_ISHTP_READY_OFFS)
  110. #define IPC_RMP2_DMA_ENABLED 0x1 /* Value to enable DMA, per D3 RCR */
  111. #define IPC_MSG_MAX_SIZE 0x80
  112. #define IPC_HEADER_LENGTH_MASK 0x03FF
  113. #define IPC_HEADER_PROTOCOL_MASK 0x0F
  114. #define IPC_HEADER_MNG_CMD_MASK 0x0F
  115. #define IPC_HEADER_LENGTH_OFFSET 0
  116. #define IPC_HEADER_PROTOCOL_OFFSET 10
  117. #define IPC_HEADER_MNG_CMD_OFFSET 16
  118. #define IPC_HEADER_GET_LENGTH(drbl_reg) \
  119. (((drbl_reg) >> IPC_HEADER_LENGTH_OFFSET)&IPC_HEADER_LENGTH_MASK)
  120. #define IPC_HEADER_GET_PROTOCOL(drbl_reg) \
  121. (((drbl_reg) >> IPC_HEADER_PROTOCOL_OFFSET)&IPC_HEADER_PROTOCOL_MASK)
  122. #define IPC_HEADER_GET_MNG_CMD(drbl_reg) \
  123. (((drbl_reg) >> IPC_HEADER_MNG_CMD_OFFSET)&IPC_HEADER_MNG_CMD_MASK)
  124. #define IPC_IS_BUSY(drbl_reg) \
  125. (((drbl_reg)&IPC_DRBL_BUSY_BIT) == ((uint32_t)IPC_DRBL_BUSY_BIT))
  126. /***********************************/
  127. /*CHV_A0, CHV_B0*/
  128. #define IPC_INT_FROM_ISH_TO_HOST_CHV_AB(drbl_reg) \
  129. (((drbl_reg)&IPC_INT_ISH2HOST_BIT_CHV_AB) == \
  130. ((u32)IPC_INT_ISH2HOST_BIT_CHV_AB))
  131. /*BXT, CHV_K0*/
  132. #define IPC_INT_FROM_ISH_TO_HOST_BXT(drbl_reg) \
  133. (((drbl_reg)&IPC_INT_ISH2HOST_BIT_BXT) == \
  134. ((u32)IPC_INT_ISH2HOST_BIT_BXT))
  135. /***********************************/
  136. #define IPC_BUILD_HEADER(length, protocol, busy) \
  137. (((busy)<<IPC_DRBL_BUSY_OFFS) | \
  138. ((protocol) << IPC_HEADER_PROTOCOL_OFFSET) | \
  139. ((length)<<IPC_HEADER_LENGTH_OFFSET))
  140. #define IPC_BUILD_MNG_MSG(cmd, length) \
  141. (((1)<<IPC_DRBL_BUSY_OFFS)| \
  142. ((IPC_PROTOCOL_MNG)<<IPC_HEADER_PROTOCOL_OFFSET)| \
  143. ((cmd)<<IPC_HEADER_MNG_CMD_OFFSET)| \
  144. ((length)<<IPC_HEADER_LENGTH_OFFSET))
  145. #define IPC_SET_HOST_READY(host_status) \
  146. ((host_status) |= (IPC_HOSTCOMM_READY_BIT))
  147. #define IPC_SET_HOST_ILUP(host_status) \
  148. ((host_status) |= (IPC_ILUP_BIT))
  149. #define IPC_CLEAR_HOST_READY(host_status) \
  150. ((host_status) ^= (IPC_HOSTCOMM_READY_BIT))
  151. #define IPC_CLEAR_HOST_ILUP(host_status) \
  152. ((host_status) ^= (IPC_ILUP_BIT))
  153. /* todo - temp until PIMR HW ready */
  154. #define IPC_HOST_BUSY_READING_OFFS 6
  155. /* bit corresponds host ready bit in Host Status Register (HOST_COMM) */
  156. #define IPC_HOST_BUSY_READING_BIT (1<<IPC_HOST_BUSY_READING_OFFS)
  157. #define IPC_SET_HOST_BUSY_READING(host_status) \
  158. ((host_status) |= (IPC_HOST_BUSY_READING_BIT))
  159. #define IPC_CLEAR_HOST_BUSY_READING(host_status)\
  160. ((host_status) ^= (IPC_HOST_BUSY_READING_BIT))
  161. #define IPC_IS_ISH_ISHTP_READY(ish_status) \
  162. (((ish_status) & IPC_ISH_ISHTP_READY_BIT) == \
  163. ((uint32_t)IPC_ISH_ISHTP_READY_BIT))
  164. #define IPC_IS_ISH_ILUP(ish_status) \
  165. (((ish_status) & IPC_ILUP_BIT) == ((uint32_t)IPC_ILUP_BIT))
  166. #define IPC_PROTOCOL_ISHTP 1
  167. #define IPC_PROTOCOL_MNG 3
  168. #define MNG_RX_CMPL_ENABLE 0
  169. #define MNG_RX_CMPL_DISABLE 1
  170. #define MNG_RX_CMPL_INDICATION 2
  171. #define MNG_RESET_NOTIFY 3
  172. #define MNG_RESET_NOTIFY_ACK 4
  173. #define MNG_SYNC_FW_CLOCK 5
  174. #define MNG_ILLEGAL_CMD 0xFF
  175. #endif /* _ISHTP_ISH_REGS_H_ */