soc_memctrl.h 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /********************************************************************************
  2. * USDK(ZS283A)
  3. * Module: SYSTEM
  4. * Copyright(c) 2003-2017 Actions Semiconductor,
  5. * All Rights Reserved.
  6. *
  7. * History:
  8. * <author> <time> <version > <desc>
  9. * wuyufan 2018-10-12-PM12:48:04 1.0 build this file
  10. ********************************************************************************/
  11. /*!
  12. * \file soc_memctrl.h
  13. * \brief
  14. * \author
  15. * \version 1.0
  16. * \date 2018-10-12-PM12:48:04
  17. *******************************************************************************/
  18. #ifndef SOC_MEMCTRL_H_
  19. #define SOC_MEMCTRL_H_
  20. //--------------MemoryController-------------------------------------------//
  21. //--------------Register Address---------------------------------------//
  22. #define MemoryController_BASE 0x40010000
  23. #define MEMORYCTL (MemoryController_BASE+0x00000000)
  24. #define CPU_ERROR_ADDR (MemoryController_BASE+0x00000008)
  25. #define MEMORYCTL2 (MemoryController_BASE+0x00000020)
  26. #define MEMORYCTL3 (MemoryController_BASE+0x00000024)
  27. #define DSP_ERROR_ADDR (MemoryController_BASE+0x00000030)
  28. #define DBGCTL (MemoryController_BASE+0x00000040)
  29. #define DSPPAGEADDR0 (MemoryController_BASE+0x00000080)
  30. #define DSPPAGEADDR1 (MemoryController_BASE+0x00000084)
  31. #define DSPPAGEADDR2 (MemoryController_BASE+0x00000088)
  32. #define DSPPAGEADDR3 (MemoryController_BASE+0x0000008c)
  33. #define MPUIE (MemoryController_BASE+0x00000100)
  34. #define MPUIP (MemoryController_BASE+0x00000104)
  35. #define MPUCTL0 (MemoryController_BASE+0x00000110)
  36. #define MPUBASE0 (MemoryController_BASE+0x00000114)
  37. #define MPUEND0 (MemoryController_BASE+0x00000118)
  38. #define MPUERRADDR0 (MemoryController_BASE+0x0000011c)
  39. #define MPUCTL1 (MemoryController_BASE+0x00000120)
  40. #define MPUBASE1 (MemoryController_BASE+0x00000124)
  41. #define MPUEND1 (MemoryController_BASE+0x00000128)
  42. #define MPUERRADDR1 (MemoryController_BASE+0x0000012c)
  43. #define MPUCTL2 (MemoryController_BASE+0x00000130)
  44. #define MPUBASE2 (MemoryController_BASE+0x00000134)
  45. #define MPUEND2 (MemoryController_BASE+0x00000138)
  46. #define MPUERRADDR2 (MemoryController_BASE+0x0000013c)
  47. #define MPUCTL3 (MemoryController_BASE+0x00000140)
  48. #define MPUBASE3 (MemoryController_BASE+0x00000144)
  49. #define MPUEND3 (MemoryController_BASE+0x00000148)
  50. #define MPUERRADDR3 (MemoryController_BASE+0x0000014c)
  51. #define BIST_EN0 (MemoryController_BASE+0x00000200)
  52. #define BIST_FIN0 (MemoryController_BASE+0x00000204)
  53. #define BIST_INFO0 (MemoryController_BASE+0x00000208)
  54. #define BIST_EN1 (MemoryController_BASE+0x0000020c)
  55. #define BIST_FIN1 (MemoryController_BASE+0x00000210)
  56. #define BIST_INFO1 (MemoryController_BASE+0x00000214)
  57. #define SPI_CACHE_MAPPING_ADDR0 (MemoryController_BASE+0x00000300)
  58. #define SPI_CACHE_ADDR0_ENTRY (MemoryController_BASE+0x00000304)
  59. #define SPI_CACHE_MAPPING_ADDR1 (MemoryController_BASE+0x00000308)
  60. #define SPI_CACHE_ADDR1_ENTRY (MemoryController_BASE+0x0000030c)
  61. #define SPI_CACHE_MAPPING_ADDR2 (MemoryController_BASE+0x00000310)
  62. #define SPI_CACHE_ADDR2_ENTRY (MemoryController_BASE+0x00000314)
  63. #define SPI_CACHE_MAPPING_ADDR3 (MemoryController_BASE+0x00000318)
  64. #define SPI_CACHE_ADDR3_ENTRY (MemoryController_BASE+0x0000031c)
  65. #define SPI_CACHE_MAPPING_ADDR4 (MemoryController_BASE+0x00000320)
  66. #define SPI_CACHE_ADDR4_ENTRY (MemoryController_BASE+0x00000324)
  67. #define SPI_CACHE_MAPPING_ADDR5 (MemoryController_BASE+0x00000328)
  68. #define SPI_CACHE_ADDR5_ENTRY (MemoryController_BASE+0x0000032c)
  69. #define SPI_CACHE_MAPPING_ADDR6 (MemoryController_BASE+0x00000330)
  70. #define SPI_CACHE_ADDR6_ENTRY (MemoryController_BASE+0x00000334)
  71. #define SPI_CACHE_MAPPING_ADDR7 (MemoryController_BASE+0x00000338)
  72. #define SPI_CACHE_ADDR7_ENTRY (MemoryController_BASE+0x0000033c)
  73. #define CACHE_MAPPING_ITEM_NUM (8)
  74. #define MEMORYCTL_BUSERROR_BIT BIT(3)
  75. #define DISPLAY_MMU_CTL (MemoryController_BASE+0x00000a00)
  76. #define DISPLAY_MMU_BASEADDR0 (MemoryController_BASE+0x00000a10)
  77. #define DISPLAY_MMU_BASEADDR1 (MemoryController_BASE+0x00000a14)
  78. #define DISPLAY_MMU_BASEADDR2 (MemoryController_BASE+0x00000a18)
  79. #define DISPLAY_MMU_BASEADDR3 (MemoryController_BASE+0x00000a1c)
  80. typedef struct {
  81. volatile unsigned int mapping_addr;
  82. volatile unsigned int mapping_entry;
  83. } cache_mapping_register_t;
  84. typedef struct
  85. {
  86. volatile uint32_t MPUCTL;
  87. volatile uint32_t MPUBASE;
  88. volatile uint32_t MPUEND;
  89. volatile uint32_t MPUERRADDR;
  90. }mpu_base_register_t;
  91. void soc_memctrl_set_mapping(int idx, u32_t cpu_addr, u32_t nor_bus_addr);
  92. int soc_memctrl_mapping(u32_t cpu_addr, u32_t nor_phy_addr, int enable_crc);
  93. int soc_memctrl_unmapping(u32_t map_addr);
  94. void *soc_memctrl_create_temp_mapping(u32_t nor_phy_addr, int enable_crc);
  95. void soc_memctrl_clear_temp_mapping(void *cpu_addr);
  96. u32_t soc_memctrl_cpu_to_nor_phy_addr(u32_t cpu_addr);
  97. void soc_memctrl_config_cache_size(int cache_size_mode);
  98. void soc_memctrl_cache_invalid(void);
  99. static inline void soc_memctrl_set_dsp_mapping(int idx, u32_t map_addr,
  100. u32_t phy_addr)
  101. {
  102. return;
  103. }
  104. static inline u32_t soc_memctrl_cpu_addr_to_bus_addr(u32_t cpu_addr)
  105. {
  106. u32_t bus_addr;
  107. if (cpu_addr < 0x10000000)
  108. bus_addr = 0x10000000;
  109. else
  110. bus_addr = cpu_addr & ~0xe0000000;
  111. return bus_addr;
  112. }
  113. #endif /* SOC_MEMCTRL_H_ */