[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 25/29] target-mips: support Page Frame Number Extensi
From: |
Leon Alrae |
Subject: |
[Qemu-devel] [PULL 25/29] target-mips: support Page Frame Number Extension field |
Date: |
Fri, 12 Jun 2015 10:35:32 +0100 |
Update tlb->PFN to contain PFN concatenated with PFNX. PFNX is 0 if large
physical address is not supported.
Signed-off-by: Leon Alrae <address@hidden>
Reviewed-by: Aurelien Jarno <address@hidden>
---
target-mips/op_helper.c | 32 ++++++++++++++++++++++++++------
1 file changed, 26 insertions(+), 6 deletions(-)
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index 4dc4970..31bafcf 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -1826,6 +1826,16 @@ static void r4k_mips_tlb_flush_extra (CPUMIPSState *env,
int first)
}
}
+static inline uint64_t get_tlb_pfn_from_entrylo(uint64_t entrylo)
+{
+#if defined(TARGET_MIPS64)
+ return extract64(entrylo, 6, 54);
+#else
+ return extract64(entrylo, 6, 24) | /* PFN */
+ (extract64(entrylo, 32, 32) << 24); /* PFNX */
+#endif
+}
+
static void r4k_fill_tlb(CPUMIPSState *env, int idx)
{
r4k_tlb_t *tlb;
@@ -1849,13 +1859,13 @@ static void r4k_fill_tlb(CPUMIPSState *env, int idx)
tlb->C0 = (env->CP0_EntryLo0 >> 3) & 0x7;
tlb->XI0 = (env->CP0_EntryLo0 >> CP0EnLo_XI) & 1;
tlb->RI0 = (env->CP0_EntryLo0 >> CP0EnLo_RI) & 1;
- tlb->PFN[0] = (env->CP0_EntryLo0 >> 6) << 12;
+ tlb->PFN[0] = get_tlb_pfn_from_entrylo(env->CP0_EntryLo0) << 12;
tlb->V1 = (env->CP0_EntryLo1 & 2) != 0;
tlb->D1 = (env->CP0_EntryLo1 & 4) != 0;
tlb->C1 = (env->CP0_EntryLo1 >> 3) & 0x7;
tlb->XI1 = (env->CP0_EntryLo1 >> CP0EnLo_XI) & 1;
tlb->RI1 = (env->CP0_EntryLo1 >> CP0EnLo_RI) & 1;
- tlb->PFN[1] = (env->CP0_EntryLo1 >> 6) << 12;
+ tlb->PFN[1] = get_tlb_pfn_from_entrylo(env->CP0_EntryLo1) << 12;
}
void r4k_helper_tlbinv(CPUMIPSState *env)
@@ -1972,6 +1982,16 @@ void r4k_helper_tlbp(CPUMIPSState *env)
}
}
+static inline uint64_t get_entrylo_pfn_from_tlb(uint64_t tlb_pfn)
+{
+#if defined(TARGET_MIPS64)
+ return tlb_pfn << 6;
+#else
+ return (extract64(tlb_pfn, 0, 24) << 6) | /* PFN */
+ (extract64(tlb_pfn, 24, 32) << 32); /* PFNX */
+#endif
+}
+
void r4k_helper_tlbr(CPUMIPSState *env)
{
r4k_tlb_t *tlb;
@@ -1998,12 +2018,12 @@ void r4k_helper_tlbr(CPUMIPSState *env)
env->CP0_PageMask = tlb->PageMask;
env->CP0_EntryLo0 = tlb->G | (tlb->V0 << 1) | (tlb->D0 << 2) |
((uint64_t)tlb->RI0 << CP0EnLo_RI) |
- ((uint64_t)tlb->XI0 << CP0EnLo_XI) |
- (tlb->C0 << 3) | (tlb->PFN[0] >> 6);
+ ((uint64_t)tlb->XI0 << CP0EnLo_XI) | (tlb->C0 << 3) |
+ get_entrylo_pfn_from_tlb(tlb->PFN[0] >> 12);
env->CP0_EntryLo1 = tlb->G | (tlb->V1 << 1) | (tlb->D1 << 2) |
((uint64_t)tlb->RI1 << CP0EnLo_RI) |
- ((uint64_t)tlb->XI1 << CP0EnLo_XI) |
- (tlb->C1 << 3) | (tlb->PFN[1] >> 6);
+ ((uint64_t)tlb->XI1 << CP0EnLo_XI) | (tlb->C1 << 3) |
+ get_entrylo_pfn_from_tlb(tlb->PFN[1] >> 12);
}
}
--
2.1.0
- [Qemu-devel] [PULL 12/29] dma/rc4030: document register at offset 0x210, (continued)
- [Qemu-devel] [PULL 12/29] dma/rc4030: document register at offset 0x210, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 06/29] target-mips: Misaligned memory accesses for MSA, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 11/29] dma/rc4030: do not use old_mmio accesses, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 09/29] dma/rc4030: create custom DMA address space, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 15/29] net/dp8393x: always calculate proper checksums, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 13/29] dma/rc4030: use trace events instead of custom logging, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 02/29] target-mips: add Config5.FRE support allowing Status.FR=0 emulation, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 10/29] dma/rc4030: use AddressSpace and address_space_rw in users, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 14/29] dma/rc4030: convert to QOM, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 16/29] net/dp8393x: do not use old_mmio accesses, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 25/29] target-mips: support Page Frame Number Extension field,
Leon Alrae <=
- [Qemu-devel] [PULL 23/29] target-mips: correct MFC0 for CP0.EntryLo in MIPS64, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 21/29] net/dp8393x: correctly reset in_use field, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 20/29] net/dp8393x: add load/save support, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 22/29] net/dp8393x: fix hardware reset, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 19/29] net/dp8393x: add PROM to store MAC address, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 17/29] net/dp8393x: use dp8393x_ prefix for all functions, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 18/29] net/dp8393x: QOM'ify, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 28/29] target-mips: remove misleading comments in translate_init.c, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 29/29] target-mips: enable XPA and LPA features, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 24/29] target-mips: extend selected CP0 registers to 64-bits in MIPS32, Leon Alrae, 2015/06/12