gic-v3.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright 2019 Broadcom.
  4. */
  5. #ifndef __GIC_V3_H__
  6. #define __GIC_V3_H__
  7. #ifndef __ASSEMBLY__
  8. #include <linux/bitops.h>
  9. #endif
  10. #define GICR_CTLR_ENABLE_LPIS BIT(0)
  11. #define GICR_CTLR_RWP BIT(3)
  12. #define GICR_TYPER_CPU_NUMBER(r) (((r) >> 8) & 0xffff)
  13. #define GICR_WAKER_PROCESSORSLEEP BIT(1)
  14. #define GICR_WAKER_CHILDRENASLEEP BIT(2)
  15. #define GIC_BASER_CACHE_NCNB 0ULL
  16. #define GIC_BASER_CACHE_SAMEASINNER 0ULL
  17. #define GIC_BASER_CACHE_NC 1ULL
  18. #define GIC_BASER_CACHE_RAWT 2ULL
  19. #define GIC_BASER_CACHE_RAWB 3ULL
  20. #define GIC_BASER_CACHE_WAWT 4ULL
  21. #define GIC_BASER_CACHE_WAWB 5ULL
  22. #define GIC_BASER_CACHE_RAWAWT 6ULL
  23. #define GIC_BASER_CACHE_RAWAWB 7ULL
  24. #define GIC_BASER_CACHE_MASK 7ULL
  25. #define GIC_BASER_NONSHAREABLE 0ULL
  26. #define GIC_BASER_INNERSHAREABLE 1ULL
  27. #define GIC_BASER_OUTERSHAREABLE 2ULL
  28. #define GIC_BASER_SHAREABILITY_MASK 3ULL
  29. #define GIC_BASER_CACHEABILITY(reg, inner_outer, type) \
  30. (GIC_BASER_CACHE_##type << reg##_##inner_outer##_CACHEABILITY_SHIFT)
  31. #define GIC_BASER_SHAREABILITY(reg, type) \
  32. (GIC_BASER_##type << reg##_SHAREABILITY_SHIFT)
  33. /* encode a size field of width @w containing @n - 1 units */
  34. #define GIC_ENCODE_SZ(n, w) (((unsigned long)(n) - 1) &\
  35. GENMASK_ULL(((w) - 1), 0))
  36. #define GICR_PROPBASER_SHAREABILITY_SHIFT (10)
  37. #define GICR_PROPBASER_INNER_CACHEABILITY_SHIFT (7)
  38. #define GICR_PROPBASER_OUTER_CACHEABILITY_SHIFT (56)
  39. #define GICR_PROPBASER_SHAREABILITY_MASK \
  40. GIC_BASER_SHAREABILITY(GICR_PROPBASER, SHAREABILITY_MASK)
  41. #define GICR_PROPBASER_INNER_CACHEABILITY_MASK \
  42. GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, MASK)
  43. #define GICR_PROPBASER_OUTER_CACHEABILITY_MASK \
  44. GIC_BASER_CACHEABILITY(GICR_PROPBASER, OUTER, MASK)
  45. #define GICR_PROPBASER_CACHEABILITY_MASK GICR_PROPBASER_INNER_CACHEABILITY_MASK
  46. #define GICR_PROPBASER_INNERSHAREABLE \
  47. GIC_BASER_SHAREABILITY(GICR_PROPBASER, INNERSHAREABLE)
  48. #define GICR_PROPBASER_NCNB \
  49. GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, NCNB)
  50. #define GICR_PROPBASER_NC \
  51. GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, NC)
  52. #define GICR_PROPBASER_RAWT \
  53. GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RAWT)
  54. #define GICR_PROPBASER_RAWB \
  55. GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RAWB)
  56. #define GICR_PROPBASER_WAWT \
  57. GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, WAWT)
  58. #define GICR_PROPBASER_WAWB \
  59. GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, WAWB)
  60. #define GICR_PROPBASER_RAWAWT \
  61. GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RAWAWT)
  62. #define GICR_PROPBASER_RAWAWB \
  63. GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RAWAWB)
  64. #define GICR_PROPBASER_IDBITS_MASK (0x1f)
  65. #define GICR_PROPBASER_ADDRESS(x) ((x) & GENMASK_ULL(51, 12))
  66. #define GICR_PENDBASER_ADDRESS(x) ((x) & GENMASK_ULL(51, 16))
  67. #define GICR_PENDBASER_SHAREABILITY_SHIFT (10)
  68. #define GICR_PENDBASER_INNER_CACHEABILITY_SHIFT (7)
  69. #define GICR_PENDBASER_OUTER_CACHEABILITY_SHIFT (56)
  70. #define GICR_PENDBASER_SHAREABILITY_MASK \
  71. GIC_BASER_SHAREABILITY(GICR_PENDBASER, SHAREABILITY_MASK)
  72. #define GICR_PENDBASER_INNER_CACHEABILITY_MASK \
  73. GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, MASK)
  74. #define GICR_PENDBASER_OUTER_CACHEABILITY_MASK \
  75. GIC_BASER_CACHEABILITY(GICR_PENDBASER, OUTER, MASK)
  76. #define GICR_PENDBASER_CACHEABILITY_MASK \
  77. GICR_PENDBASER_INNER_CACHEABILITY_MASK
  78. #define GICR_PENDBASER_INNERSHAREABLE \
  79. GIC_BASER_SHAREABILITY(GICR_PENDBASER, INNERSHAREABLE)
  80. #define GICR_PENDBASER_NCNB \
  81. GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, NCNB)
  82. #define GICR_PENDBASER_NC \
  83. GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, NC)
  84. #define GICR_PENDBASER_RAWT \
  85. GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, RAWT)
  86. #define GICR_PENDBASER_RAWB \
  87. GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, RAWB)
  88. #define GICR_PENDBASER_WAWT \
  89. GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, WAWT)
  90. #define GICR_PENDBASER_WAWB \
  91. GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, WAWB)
  92. #define GICR_PENDBASER_RAWAWT \
  93. GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, RAWAWT)
  94. #define GICR_PENDBASER_RAWAWB \
  95. GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, RAWAWB)
  96. #define GICR_PENDBASER_PTZ BIT_ULL(62)
  97. #define ITS_MAX_LPI_NRBITS 16 /* 64K LPIs */
  98. #define GICD_TYPER_ID_BITS(typer) ((((typer) >> 19) & 0x1f) + 1)
  99. #define GICD_TYPER_NUM_LPIS(typer) ((((typer) >> 11) & 0x1f) + 1)
  100. #define GICD_TYPER_IRQS(typer) ((((typer) & 0x1f) + 1) * 32)
  101. /* Message based interrupts support */
  102. #define GICD_TYPER_MBIS BIT(16)
  103. /* LPI support */
  104. #define GICD_TYPER_LPIS BIT(17)
  105. #define GICD_TYPER_RSS BIT(26)
  106. #define GIC_REDISTRIBUTOR_OFFSET 0x20000
  107. #ifdef CONFIG_GIC_V3_ITS
  108. int gic_lpi_tables_init(u64 base, u32 max_redist);
  109. #else
  110. int gic_lpi_tables_init(u64 base, u32 max_redist)
  111. {
  112. return 0;
  113. }
  114. #endif /* CONFIG_GIC_V3_ITS */
  115. #endif /* __GIC_V3_H__ */