pruss.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /**
  2. * PRU-ICSS Subsystem user interfaces
  3. *
  4. * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com
  5. * Suman Anna <s-anna@ti.com>
  6. * Roger Quadros <rogerq@ti.com>
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License version 2 as
  10. * published by the Free Software Foundation.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. */
  17. #ifndef __LINUX_PRUSS_H
  18. #define __LINUX_PRUSS_H
  19. /**
  20. * enum pruss_pru_id - PRU core identifiers
  21. */
  22. enum pruss_pru_id {
  23. PRUSS_PRU0 = 0,
  24. PRUSS_PRU1,
  25. PRUSS_NUM_PRUS,
  26. };
  27. /**
  28. * enum pruss_mem - PRUSS memory range identifiers
  29. */
  30. enum pruss_mem {
  31. PRUSS_MEM_DRAM0 = 0,
  32. PRUSS_MEM_DRAM1,
  33. PRUSS_MEM_SHRD_RAM2,
  34. PRUSS_MEM_CFG,
  35. PRUSS_MEM_IEP,
  36. PRUSS_MEM_MII_RT,
  37. PRUSS_MEM_MAX,
  38. };
  39. /**
  40. * struct pruss_mem_region - PRUSS memory region structure
  41. * @va: kernel virtual address of the PRUSS memory region
  42. * @pa: physical (bus) address of the PRUSS memory region
  43. * @size: size of the PRUSS memory region
  44. */
  45. struct pruss_mem_region {
  46. void __iomem *va;
  47. phys_addr_t pa;
  48. size_t size;
  49. };
  50. /**
  51. * enum pruss_pru_id - PRUSS GPI configuration modes, used
  52. * to program the PRUSS_GPCFG0/1 registers
  53. */
  54. enum pruss_gpi_mode {
  55. PRUSS_GPI_MODE_DIRECT = 0,
  56. PRUSS_GPI_MODE_PARALLEL,
  57. PRUSS_GPI_MODE_28BIT_SHIFT,
  58. PRUSS_GPI_MODE_MII,
  59. };
  60. /**
  61. * enum pru_ctable_idx - Configurable Constant table index identifiers
  62. */
  63. enum pru_ctable_idx {
  64. PRU_C24 = 0,
  65. PRU_C25,
  66. PRU_C26,
  67. PRU_C27,
  68. PRU_C28,
  69. PRU_C29,
  70. PRU_C30,
  71. PRU_C31,
  72. };
  73. struct pruss;
  74. #if IS_ENABLED(CONFIG_PRUSS_REMOTEPROC)
  75. int pruss_intc_trigger(unsigned int irq);
  76. struct pruss *pruss_get(struct device *dev, int *pruss_id);
  77. void pruss_put(struct pruss *pruss);
  78. struct rproc *pruss_rproc_get(struct pruss *pruss,
  79. enum pruss_pru_id pru_id);
  80. void pruss_rproc_put(struct pruss *pruss, struct rproc *rproc);
  81. int pruss_request_mem_region(struct pruss *pruss, enum pruss_mem mem_id,
  82. struct pruss_mem_region *region);
  83. int pruss_release_mem_region(struct pruss *pruss,
  84. struct pruss_mem_region *region);
  85. int pruss_cfg_gpimode(struct pruss *pruss, struct rproc *rproc,
  86. enum pruss_gpi_mode mode);
  87. void pruss_cfg_miirt_enable(struct pruss *pruss, bool enable);
  88. void pruss_cfg_xfr_enable(struct pruss *pruss, bool enable);
  89. int pru_rproc_set_ctable(struct rproc *rproc, enum pru_ctable_idx c, u32 addr);
  90. #else
  91. static inline int pruss_intc_trigger(unsigned int irq)
  92. {
  93. return -ENOTSUPP;
  94. }
  95. static inline struct pruss *pruss_get(struct device *dev, int *pruss_id)
  96. {
  97. return ERR_PTR(-ENOTSUPP);
  98. }
  99. static inline void pruss_put(struct pruss *pruss) { }
  100. static inline struct rproc *pruss_rproc_get(struct pruss *pruss,
  101. enum pruss_pru_id pru_id)
  102. {
  103. return ERR_PTR(-ENOTSUPP);
  104. }
  105. static inline void pruss_rproc_put(struct pruss *pruss, struct rproc *rproc) { }
  106. static inline int pruss_request_mem_region(struct pruss *pruss,
  107. enum pruss_mem mem_id,
  108. struct pruss_mem_region *region)
  109. {
  110. return -ENOTSUPP;
  111. }
  112. static inline int pruss_release_mem_region(struct pruss *pruss,
  113. struct pruss_mem_region *region)
  114. {
  115. return -ENOTSUPP;
  116. }
  117. static inline int pruss_cfg_gpimode(struct pruss *pruss, struct rproc *rproc,
  118. enum pruss_gpi_mode mode)
  119. {
  120. return -ENOTSUPP;
  121. }
  122. static inline void pruss_cfg_miirt_enable(struct pruss *pruss, bool enable) { }
  123. static inline void pruss_cfg_xfr_enable(struct pruss *pruss, bool enable) { }
  124. static inline int pru_rproc_set_ctable(struct rproc *rproc,
  125. enum pru_ctable_idx c, u32 addr)
  126. {
  127. return -ENOTSUPP;
  128. }
  129. #endif /* CONFIG_PRUSS_REMOTEPROC */
  130. #endif /* __LINUX_PRUSS_H */