diff mbox series

[RFC,v11,23/55] target/arm: move arm_sctlr away from tcg helpers

Message ID 20210323154639.23477-16-cfontana@suse.de (mailing list archive)
State New, archived
Headers show
Series arm cleanup experiment for kvm-only build | expand

Commit Message

Claudio Fontana March 23, 2021, 3:46 p.m. UTC
this function is used for kvm too, add it to the
cpu-common module.

Signed-off-by: Claudio Fontana <cfontana@suse.de>
---
 target/arm/cpu-common.c | 11 +++++++++++
 target/arm/tcg/helper.c | 11 -----------
 2 files changed, 11 insertions(+), 11 deletions(-)

Comments

Richard Henderson March 24, 2021, 10:07 p.m. UTC | #1
On 3/23/21 9:46 AM, Claudio Fontana wrote:
> this function is used for kvm too, add it to the
> cpu-common module.
> 
> Signed-off-by: Claudio Fontana <cfontana@suse.de>

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

>   /* #endif TARGET_AARCH64 , see matching comment above */
> +
> +uint64_t arm_sctlr(CPUARMState *env, int el)
> +{
> +    /* Only EL0 needs to be adjusted for EL1&0 or EL2&0. */
> +    if (el == 0) {
> +        ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, 0);
> +        el = (mmu_idx == ARMMMUIdx_E20_0 || mmu_idx == ARMMMUIdx_SE20_0)
> +            ? 2 : 1;

I only thought of it because of the comment, but *E20_0 is aarch64 only; 
aarch32 always uses el = 1 here.  ;-)


r~
Claudio Fontana March 25, 2021, 2:26 p.m. UTC | #2
On 3/24/21 11:07 PM, Richard Henderson wrote:
> On 3/23/21 9:46 AM, Claudio Fontana wrote:
>> this function is used for kvm too, add it to the
>> cpu-common module.
>>
>> Signed-off-by: Claudio Fontana <cfontana@suse.de>
> 
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> 
>>   /* #endif TARGET_AARCH64 , see matching comment above */
>> +
>> +uint64_t arm_sctlr(CPUARMState *env, int el)
>> +{
>> +    /* Only EL0 needs to be adjusted for EL1&0 or EL2&0. */
>> +    if (el == 0) {
>> +        ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, 0);
>> +        el = (mmu_idx == ARMMMUIdx_E20_0 || mmu_idx == ARMMMUIdx_SE20_0)
>> +            ? 2 : 1;
> 
> I only thought of it because of the comment, but *E20_0 is aarch64 only; 
> aarch32 always uses el = 1 here.  ;-)
> 
> 
> r~

In this case, maybe we should do:


uint64_t arm_sctlr(CPUARMState *env, int el)
{
    /* Only EL0 needs to be adjusted for EL1&0 or EL2&0. */
    if (el == 0) {
#ifdef TARGET_AARCH64
        ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, 0);
        el = (mmu_idx == ARMMMUIdx_E20_0 || mmu_idx == ARMMMUIdx_SE20_0)
            ? 2 : 1;
#else
        el = 1;
#endif
    }
    return env->cp15.sctlr_el[el];
}

?

Thanks,

Claudio
diff mbox series

Patch

diff --git a/target/arm/cpu-common.c b/target/arm/cpu-common.c
index 540793e4c0..dc7a5049a7 100644
--- a/target/arm/cpu-common.c
+++ b/target/arm/cpu-common.c
@@ -274,3 +274,14 @@  uint32_t sve_zcr_len_for_el(CPUARMState *env, int el)
 }
 
 /* #endif TARGET_AARCH64 , see matching comment above */
+
+uint64_t arm_sctlr(CPUARMState *env, int el)
+{
+    /* Only EL0 needs to be adjusted for EL1&0 or EL2&0. */
+    if (el == 0) {
+        ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, 0);
+        el = (mmu_idx == ARMMMUIdx_E20_0 || mmu_idx == ARMMMUIdx_SE20_0)
+            ? 2 : 1;
+    }
+    return env->cp15.sctlr_el[el];
+}
diff --git a/target/arm/tcg/helper.c b/target/arm/tcg/helper.c
index ec0b812f96..a44b01a712 100644
--- a/target/arm/tcg/helper.c
+++ b/target/arm/tcg/helper.c
@@ -1743,17 +1743,6 @@  void arm_cpu_do_interrupt(CPUState *cs)
 }
 #endif /* !CONFIG_USER_ONLY */
 
-uint64_t arm_sctlr(CPUARMState *env, int el)
-{
-    /* Only EL0 needs to be adjusted for EL1&0 or EL2&0. */
-    if (el == 0) {
-        ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, 0);
-        el = (mmu_idx == ARMMMUIdx_E20_0 || mmu_idx == ARMMMUIdx_SE20_0)
-             ? 2 : 1;
-    }
-    return env->cp15.sctlr_el[el];
-}
-
 /* Returns true if the stage 1 translation regime is using LPAE format page
  * tables. Used when raising alignment exceptions, whose FSR changes depending
  * on whether the long or short descriptor format is in use. */