[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 2/5] target-arm: enable get_rw_prot to take simple A
From: |
Andrew Jones |
Subject: |
[Qemu-devel] [PATCH 2/5] target-arm: enable get_rw_prot to take simple AP |
Date: |
Thu, 12 Feb 2015 16:05:04 +0100 |
Teach get_rw_prot about the simple AP format AP[2:1]. An additional
switch was added, as opposed to converting ap := AP[2:1] to AP[2:0]
with a simple shift - and then modifying cases 0,2,4,6, because the
resulting code is easier to read with the switch.
Signed-off-by: Andrew Jones <address@hidden>
---
target-arm/helper.c | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/target-arm/helper.c b/target-arm/helper.c
index 610f305c4d661..b63ec7b7979f9 100644
--- a/target-arm/helper.c
+++ b/target-arm/helper.c
@@ -4698,12 +4698,32 @@ static inline bool regime_is_user(CPUARMState *env,
ARMMMUIdx mmu_idx)
static inline int get_rw_prot(CPUARMState *env, ARMMMUIdx mmu_idx,
int ap, int domain_prot)
{
+ bool simple_ap = regime_using_lpae_format(env, mmu_idx)
+ || (regime_sctlr(env, mmu_idx) & SCTLR_AFE);
+ bool domain_prot_valid = !regime_using_lpae_format(env, mmu_idx);
bool is_user = regime_is_user(env, mmu_idx);
- if (domain_prot == 3) {
+ if (domain_prot_valid && domain_prot == 3) {
return PAGE_READ | PAGE_WRITE;
}
+ /* ap is AP[2:1] */
+ if (simple_ap) {
+ switch (ap) {
+ case 0:
+ return is_user ? 0 : PAGE_READ | PAGE_WRITE;
+ case 1:
+ return PAGE_READ | PAGE_WRITE;
+ case 2:
+ return is_user ? 0 : PAGE_READ;
+ case 3:
+ return PAGE_READ;
+ default:
+ g_assert_not_reached();
+ }
+ }
+
+ /* ap is AP[2:0] */
switch (ap) {
case 0:
if (arm_feature(env, ARM_FEATURE_V7)) {
--
1.9.3
- [Qemu-devel] [PATCH 0/5] tcg-arm: LPAE: fix and extend xn control, Andrew Jones, 2015/02/12
- [Qemu-devel] [PATCH 2/5] target-arm: enable get_rw_prot to take simple AP,
Andrew Jones <=
- [Qemu-devel] [PATCH 3/5] target-arm: add an is_user param to get_rw_prot, Andrew Jones, 2015/02/12
- [Qemu-devel] [PATCH 5/5] target-arm: apply get_S1prot to get_phys_addr_v6, Andrew Jones, 2015/02/12
- [Qemu-devel] [PATCH 1/5] target-arm: convert check_ap to get_rw_prot, Andrew Jones, 2015/02/12
- [Qemu-devel] [PATCH 4/5] target-arm: get_phys_addr_lpae: more xn control, Andrew Jones, 2015/02/12
- Re: [Qemu-devel] [PATCH 0/5] tcg-arm: LPAE: fix and extend xn control, Andrew Jones, 2015/02/24