From bf961b52785061e1802214c9e03a1c65b261f7c1 Mon Sep 17 00:00:00 2001 From: Sebastian Macke Date: Thu, 3 Oct 2013 16:04:46 +0800 Subject: target-openrisc: Correct handling of page faults. The result of (rw & 0) is always zero and therefore a logic false. The whole comparison will therefore never be executed, it is a obvious bug, we should use !(rw & 1) here. Signed-off-by: Sebastian Macke Reviewed-by: Jia Liu --- target-openrisc/mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'target-openrisc') diff --git a/target-openrisc/mmu.c b/target-openrisc/mmu.c index 57f5616e9c..323a173a82 100644 --- a/target-openrisc/mmu.c +++ b/target-openrisc/mmu.c @@ -102,7 +102,7 @@ int cpu_openrisc_get_phys_data(OpenRISCCPU *cpu, } } - if ((rw & 0) && ((right & PAGE_READ) == 0)) { + if (!(rw & 1) && ((right & PAGE_READ) == 0)) { return TLBRET_BADADDR; } if ((rw & 1) && ((right & PAGE_WRITE) == 0)) { -- cgit v1.2.1 From 6ef8263ead779e1eecfaf1e0388f4c3941ea7ec3 Mon Sep 17 00:00:00 2001 From: Sebastian Macke Date: Thu, 3 Oct 2013 16:16:14 +0800 Subject: target-openrisc: Removes a non-conforming behavior for the first page of the memory Where *software* leaves 0x0000 - 0x2000 unmapped, the hardware should still allow for this area to be mapped. Signed-off-by: Sebastian Macke Signed-off-by: Stefan Kristiansson Reviewed-by: Jia Liu --- target-openrisc/mmu.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'target-openrisc') diff --git a/target-openrisc/mmu.c b/target-openrisc/mmu.c index 323a173a82..22d7cbec18 100644 --- a/target-openrisc/mmu.c +++ b/target-openrisc/mmu.c @@ -122,13 +122,6 @@ static int cpu_openrisc_get_phys_addr(OpenRISCCPU *cpu, { int ret = TLBRET_MATCH; - /* [0x0000--0x2000]: unmapped */ - if (address < 0x2000 && (cpu->env.sr & SR_SM)) { - *physical = address; - *prot = PAGE_READ | PAGE_WRITE; - return ret; - } - if (rw == 2) { /* ITLB */ *physical = 0; ret = cpu->env.tlb->cpu_openrisc_map_address_code(cpu, physical, -- cgit v1.2.1