Introduce memory_map.h
This commit is contained in:
@@ -170,92 +170,4 @@ static inline void mmu_unmap_range(unsigned int level, uintptr_t *tbl, uintptr_t
|
||||
}
|
||||
}
|
||||
|
||||
/* Switch specific stuff */
|
||||
|
||||
static const struct {
|
||||
uintptr_t pa;
|
||||
size_t size;
|
||||
bool is_secure;
|
||||
} devices[] =
|
||||
{
|
||||
{ 0x50041000, 0x1000, true }, /* ARM Interrupt Distributor */
|
||||
{ 0x50042000, 0x2000, true }, /* Interrupt Controller Physical CPU interface */
|
||||
{ 0x70006000, 0x1000, false }, /* UART-A */
|
||||
{ 0x60006000, 0x1000, false }, /* Clock and Reset */
|
||||
{ 0x7000E000, 0x1000, true }, /* RTC, PMC */
|
||||
{ 0x60005000, 0x1000, true }, /* TMRs, WDTs */
|
||||
{ 0x6000C000, 0x1000, true }, /* System Registers */
|
||||
{ 0x70012000, 0x2000, true }, /* SE */
|
||||
{ 0x700F0000, 0x1000, true }, /* SYSCTR0 */
|
||||
{ 0x70019000, 0x1000, true }, /* MC */
|
||||
{ 0x7000F000, 0x1000, true }, /* FUSE (0x7000F800) */
|
||||
{ 0x70000000, 0x4000, true }, /* MISC */
|
||||
{ 0x60007000, 0x1000, true }, /* Flow Controller */
|
||||
{ 0x40002000, 0x1000, true }, /* iRAM-A */
|
||||
{ 0x7000D000, 0x1000, true }, /* I2C-5,6 - SPI 2B-1 to 4 */
|
||||
{ 0x6000D000, 0x1000, true }, /* GPIO-1 - GPIO-8 */
|
||||
{ 0x7000C000, 0x1000, true }, /* I2C-I2C4 */
|
||||
{ 0x6000F000, 0x1000, true }, /* Exception vectors */
|
||||
};
|
||||
|
||||
#define MMIO_DEVID_GICD 0
|
||||
#define MMIO_DEVID_GICC 1
|
||||
#define MMIO_DEVID_UART_A 2
|
||||
#define MMIO_DEVID_CLKRST 3
|
||||
#define MMIO_DEVID_RTC_PMC 4
|
||||
#define MMIO_DEVID_TMRs_WDTs 5
|
||||
#define MMIO_DEVID_SYSREGS 6
|
||||
#define MMIO_DEVID_SE 7
|
||||
#define MMIO_DEVID_SYSCTR0 8
|
||||
#define MMIO_DEVID_MC 9
|
||||
#define MMIO_DEVID_FUSE 10
|
||||
#define MMIO_DEVID_MISC 11
|
||||
#define MMIO_DEVID_FLOWCTRL 12
|
||||
#define MMIO_DEVID_NXBOOTLOADER_MAILBOX 13
|
||||
#define MMIO_DEVID_I2C56_SPI2B 14
|
||||
#define MMIO_DEVID_GPIO 15
|
||||
#define MMIO_DEVID_DTV_I2C234 16
|
||||
#define MMIO_DEVID_EXCEPTION_VECTORS 17
|
||||
|
||||
#ifndef MMIO_USE_IDENTIY_MAPPING
|
||||
#define MMIO_BASE 0x1F0080000ull
|
||||
|
||||
static inline uintptr_t mmio_get_device_address(unsigned int device_id) {
|
||||
size_t offset = 0;
|
||||
for(unsigned int i = 0; i < device_id; i++) {
|
||||
offset += devices[i].size;
|
||||
offset += 0x1000; /* guard page */
|
||||
}
|
||||
|
||||
return MMIO_BASE + offset;
|
||||
}
|
||||
|
||||
#else
|
||||
static inline uintptr_t mmio_get_device_address(unsigned int devid) {
|
||||
return devices[devid];
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline void mmio_map_all_devices(uintptr_t *mmu_l3_tbl) {
|
||||
static const uint64_t secure_device_attributes = MMU_PTE_BLOCK_XN | MMU_PTE_BLOCK_INNER_SHAREBLE | MMU_PTE_BLOCK_MEMTYPE(1);
|
||||
static const uint64_t device_attributes = MMU_PTE_TABLE_NS | secure_device_attributes;
|
||||
|
||||
for(size_t i = 0, offset = 0; i < sizeof(devices) / sizeof(devices[0]); i++) {
|
||||
uint64_t attributes = devices[i].is_secure ? secure_device_attributes : device_attributes;
|
||||
mmu_map_page_range(mmu_l3_tbl, MMIO_BASE + offset, devices[i].pa, devices[i].size, attributes);
|
||||
|
||||
offset += devices[i].size;
|
||||
offset += 0x1000; /* insert guard page */
|
||||
}
|
||||
}
|
||||
|
||||
static inline void mmio_unmap_all_devices(uintptr_t *mmu_l3_tbl) {
|
||||
for(size_t i = 0, offset = 0; i < sizeof(devices) / sizeof(devices[0]); i++) {
|
||||
mmu_unmap_range(3, mmu_l3_tbl, MMIO_BASE + offset, devices[i].size);
|
||||
|
||||
offset += devices[i].size;
|
||||
offset += 0x1000; /* insert guard page */
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user