fixed: compare virtual address instead of physical in lookup_mapping()

This commit is contained in:
Markus Fröschle
2014-01-21 12:43:32 +00:00
parent bb378a5cd0
commit 401a9bd2e5

View File

@@ -257,14 +257,14 @@ static struct mmu_mapping memory_map[] =
0, 0,
0x800, 0x800,
MMU_PAGE_SIZE_1K, MMU_PAGE_SIZE_1K,
{CACHE_WRITETHROUGH, SV_USER, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE}, { CACHE_WRITETHROUGH, SV_USER, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE },
}, },
{ {
0x800, 0x800,
0x800, 0x800,
0x800, 0x800,
MMU_PAGE_SIZE_1K, MMU_PAGE_SIZE_1K,
{CACHE_WRITETHROUGH, SV_USER, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE}, { CACHE_WRITETHROUGH, SV_USER, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE },
}, },
{ {
/* when the first 4k are filled with 1k pages, we can switch to 8k pages */ /* when the first 4k are filled with 1k pages, we can switch to 8k pages */
@@ -272,7 +272,7 @@ static struct mmu_mapping memory_map[] =
0x1000, 0x1000,
0xff000, 0xff000,
MMU_PAGE_SIZE_8K, MMU_PAGE_SIZE_8K,
{CACHE_WRITETHROUGH, SV_USER, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE}, { CACHE_WRITETHROUGH, SV_USER, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE },
}, },
{ {
/* arrived at a 1Meg border, we can switch to 1Meg pages */ /* arrived at a 1Meg border, we can switch to 1Meg pages */
@@ -280,7 +280,7 @@ static struct mmu_mapping memory_map[] =
0x100000, 0x100000,
0xc00000, 0xc00000,
MMU_PAGE_SIZE_1M, MMU_PAGE_SIZE_1M,
{ CACHE_WRITETHROUGH, SV_USER, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE}, { CACHE_WRITETHROUGH, SV_USER, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE },
}, },
{ {
/* Falcon video memory. Needs special care */ /* Falcon video memory. Needs special care */
@@ -288,7 +288,7 @@ static struct mmu_mapping memory_map[] =
0x60d00000, 0x60d00000,
0x100000, 0x100000,
MMU_PAGE_SIZE_8K, MMU_PAGE_SIZE_8K,
{ CACHE_WRITETHROUGH, SV_USER, SCA_PAGE_ID, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE}, { CACHE_WRITETHROUGH, SV_USER, SCA_PAGE_ID, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE },
}, },
{ {
/* ROM */ /* ROM */
@@ -296,7 +296,7 @@ static struct mmu_mapping memory_map[] =
0xe00000, 0xe00000,
0x100000, 0x100000,
MMU_PAGE_SIZE_1M, MMU_PAGE_SIZE_1M,
{ CACHE_WRITETHROUGH, SV_USER, 0, ACCESS_READ | ACCESS_EXECUTE}, { CACHE_WRITETHROUGH, SV_USER, 0, ACCESS_READ | ACCESS_EXECUTE },
}, },
{ {
/* MBAR */ /* MBAR */
@@ -312,7 +312,7 @@ static struct mmu_mapping memory_map[] =
RAMBAR0_ADDRESS, RAMBAR0_ADDRESS,
(uint32_t) _RAMBAR0_SIZE, (uint32_t) _RAMBAR0_SIZE,
MMU_PAGE_SIZE_1K, MMU_PAGE_SIZE_1K,
{ CACHE_WRITETHROUGH, SV_PROTECT, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE}, { CACHE_WRITETHROUGH, SV_PROTECT, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE },
}, },
{ {
/* RAMBAR1 */ /* RAMBAR1 */
@@ -320,7 +320,7 @@ static struct mmu_mapping memory_map[] =
RAMBAR1_ADDRESS, RAMBAR1_ADDRESS,
(uint32_t) _RAMBAR1_SIZE, (uint32_t) _RAMBAR1_SIZE,
MMU_PAGE_SIZE_1K, MMU_PAGE_SIZE_1K,
{ CACHE_WRITETHROUGH, SV_PROTECT, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE}, { CACHE_WRITETHROUGH, SV_PROTECT, 0, ACCESS_READ | ACCESS_WRITE | ACCESS_EXECUTE },
}, },
{ {
/* SYSTEM SRAM */ /* SYSTEM SRAM */
@@ -347,7 +347,7 @@ static struct mmu_mapping memory_map[] =
{ CACHE_NOCACHE_PRECISE, SV_PROTECT, 0, ACCESS_READ | ACCESS_WRITE }, { CACHE_NOCACHE_PRECISE, SV_PROTECT, 0, ACCESS_READ | ACCESS_WRITE },
}, },
{ {
/* the same, but different mapping */ /* the same, but different virtual address */
(uint32_t) 0x00f00000, (uint32_t) 0x00f00000,
(uint32_t) 0xfff00000, (uint32_t) 0xfff00000,
(uint32_t) 0x100000, (uint32_t) 0x100000,
@@ -358,7 +358,7 @@ static struct mmu_mapping memory_map[] =
static int num_mmu_maps = sizeof(memory_map) / sizeof(struct mmu_mapping); static int num_mmu_maps = sizeof(memory_map) / sizeof(struct mmu_mapping);
static struct mmu_mapping *lookup_mapping(uint32_t address) static struct mmu_mapping *lookup_mapping(uint32_t virt)
{ {
int i; int i;
@@ -368,7 +368,7 @@ static struct mmu_mapping *lookup_mapping(uint32_t address)
for (i = 0; i < num_mmu_maps; i++) for (i = 0; i < num_mmu_maps; i++)
{ {
if (address >= memory_map[i].phys && address <= memory_map[i].phys + memory_map[i].length - 1) if (virt >= memory_map[i].virt && virt <= memory_map[i].virt + memory_map[i].length - 1)
return &memory_map[i]; return &memory_map[i];
} }
return NULL; return NULL;