rdc.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #ifndef _AMT630HV160_RDC_H_
  2. #define _AMT630HV160_RDC_H_
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #define RDC_DDR ((rdc_ddr_t *)REGS_RDC_DDR_BASE)
  7. #define RDC_SRAM ((rdc_sram_t *)REGS_RDC_SRAM_BASE)
  8. #define RDC_DDR_IRQ_CPU (1<<4) // 该中断产生时将触发CPU中断
  9. #define RDC_DDR_IRQ_MCU (1<<3) // 该中断产生时将触发MCU中断
  10. #define RDC_DDR_IRQ_CHBUS (1<<2) // 该中断产生时将触发CPU中断
  11. #define RDC_DDR_IRQ_GBUS (1<<1) // 该中断产生时将触发CPU中断
  12. #define RDC_DDR_IRQ_VBUS (1<<0) // 该中断产生时将触发CPU中断
  13. #define RDC_SRAM_IRQ_MCU (1<<1) // 该中断产生时将触发MCU中断
  14. #define RDC_SRAM_IRQ_OTHER (1<<0) // 该中断产生时将触发CPU中断
  15. typedef enum{
  16. RDC_M_LCD = 0,
  17. RDC_M_ITU,
  18. RDC_M_MFC,
  19. RDC_M_GPU,
  20. RDC_M_QOI,
  21. RDC_M_BLEND,
  22. RDC_M_PXP,
  23. RDC_M_WRAP,
  24. RDC_M_DMA,
  25. RDC_M_USB,
  26. RDC_M_SD0,
  27. RDC_M_SD1,
  28. RDC_M_ETH,
  29. RDC_M_MCU,
  30. RDC_M_CPU,
  31. }rdc_master_e;
  32. typedef struct{
  33. __IO uint32_t CTRL;
  34. __IO uint32_t RESERVED_04[3];
  35. __IO uint32_t BLK_MAX;
  36. __IO uint32_t BLK_CFG;
  37. __IO uint32_t BLK_IDX_ADDR;
  38. __IO uint32_t BLK_LUT;
  39. __IO uint32_t IRQ_STAT;
  40. __IO uint32_t IRQ_CLEAR;
  41. __IO uint32_t IRQ_ENABLE;
  42. __IO uint32_t IRQ_INFO1_VBUS;
  43. __IO uint32_t IRQ_INFO2_VBUS;
  44. __IO uint32_t IRQ_INFO1_GBUS;
  45. __IO uint32_t IRQ_INFO2_GBUS;
  46. __IO uint32_t IRQ_INFO1_CHBUS;
  47. __IO uint32_t IRQ_INFO2_CHBUS;
  48. __IO uint32_t IRQ_INFO1_MCU;
  49. __IO uint32_t IRQ_INFO2_MCU;
  50. __IO uint32_t IRQ_INFO1_CPU;
  51. __IO uint32_t IRQ_INFO2_CPU;
  52. __IO uint32_t IRQ_SET;
  53. __IO uint32_t LUT_MASTER_SEL;
  54. }rdc_ddr_t;
  55. typedef struct{
  56. __IO uint32_t CTRL;
  57. __IO uint32_t RESERVED_04[3];
  58. __IO uint32_t BLK_MAX;
  59. __IO uint32_t BLK_CFG;
  60. __IO uint32_t RESERVED_10[1];
  61. __IO uint32_t BLK_LUT;
  62. __IO uint32_t IRQ_STAT;
  63. __IO uint32_t IRQ_CLEAR;
  64. __IO uint32_t IRQ_ENABLE;
  65. __IO uint32_t IRQ_INFO1_OTHERS;
  66. __IO uint32_t IRQ_INFO2_OTHERS;
  67. __IO uint32_t RESERVED_34[4];
  68. __IO uint32_t IRQ_INFO1_MCU;
  69. __IO uint32_t IRQ_INFO2_MCU;
  70. __IO uint32_t RESERVED2[2];
  71. __IO uint32_t IRQ_SET;
  72. __IO uint32_t LUT_MASTER_SEL;
  73. }rdc_sram_t;
  74. typedef struct {
  75. uint32_t violation_addr;
  76. uint32_t AxPROT:1;
  77. uint32_t ERR_MULTI:1;
  78. uint32_t ERR_BOTH:1;
  79. uint32_t WnR:1;
  80. uint16_t AxID;
  81. }rdc_irq_info_t;
  82. void rdc_init(void);
  83. /*
  84. *@param:
  85. * access:
  86. * 0: not allow access 1: allow access
  87. *@note:
  88. * seg size = 1 MB.
  89. * seg max = 512.
  90. */
  91. int rdc_ddr_set_master_mem_range(rdc_ddr_t *rdc, rdc_master_e rdc_master,
  92. uint32_t seg_start, uint32_t seg_end, uint8_t access);
  93. /*
  94. *@brief:
  95. * start with seg_offset to find the first eligible region.
  96. *@param:
  97. * access:
  98. * 0: not allow access 1: allow access
  99. *@note:
  100. * seg size = 1 MB.
  101. * seg max = 512.
  102. */
  103. int rdc_ddr_get_master_mem_range(rdc_ddr_t *rdc, rdc_master_e rdc_master,
  104. uint32_t seg_offset,
  105. uint32_t *seg_start, uint32_t *seg_end, uint8_t access);
  106. /*
  107. *@brief:
  108. * 获取master在某段上的访问权限。
  109. *@return:
  110. * 0: 不允许访问 1: 允许访问
  111. */
  112. int rdc_ddr_get_master_mem_seg_access_sta(rdc_ddr_t *rdc,
  113. rdc_master_e rdc_master, uint32_t seg);
  114. /*
  115. *@param
  116. * access:
  117. * 0: not allow access 1: allow access
  118. *@note:
  119. * seg size = 128 KB.
  120. * seg max = 32.
  121. */
  122. int rdc_sram_set_master_mem_range(rdc_sram_t *rdc, rdc_master_e rdc_master,
  123. uint32_t seg_start, uint32_t seg_end, uint8_t access);
  124. /*
  125. *@brief:
  126. * start with seg_offset to find the first eligible region.
  127. *@param:
  128. * access:
  129. * 0: not allow access 1: allow access
  130. *@note:
  131. * seg size = 128 KB.
  132. * seg max = 32.
  133. */
  134. int rdc_sram_get_master_mem_range(rdc_sram_t *rdc, rdc_master_e rdc_master,
  135. uint32_t seg_offset,
  136. uint32_t *seg_start, uint32_t *seg_end, uint8_t access);
  137. /*
  138. *@brief:
  139. * 获取master在某段上的访问权限。
  140. *@return:
  141. * 0: 不允许访问 1: 允许访问
  142. */
  143. int rdc_sram_get_master_mem_seg_access_sta(rdc_sram_t *rdc,
  144. rdc_master_e rdc_master, uint32_t seg);
  145. #ifdef __cplusplus
  146. }
  147. #endif
  148. #endif /* _AMT630HV160_RDC_H_ */