diff mbox

target-arm: implement arm_debug_target_el()

Message ID 1442228028-11622-1-git-send-email-serge.fdrv@gmail.com
State New
Headers show

Commit Message

Sergey Fedorov Sept. 14, 2015, 10:53 a.m. UTC
Implement debug exception routing according to ARM ARM D2.3.1 Pseudocode
description of routing debug exceptions.

Signed-off-by: Sergey Fedorov <serge.fdrv@gmail.com>
---
 target-arm/cpu.h | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

Comments

Peter Maydell Sept. 18, 2015, 2:08 p.m. UTC | #1
On 14 September 2015 at 11:53, Sergey Fedorov <serge.fdrv@gmail.com> wrote:
> Implement debug exception routing according to ARM ARM D2.3.1 Pseudocode
> description of routing debug exceptions.
>
> Signed-off-by: Sergey Fedorov <serge.fdrv@gmail.com>



Applied to target-arm.next, thanks.

-- PMM
Peter Maydell Sept. 18, 2015, 2:11 p.m. UTC | #2
On 18 September 2015 at 15:08, Peter Maydell <peter.maydell@linaro.org> wrote:
> On 14 September 2015 at 11:53, Sergey Fedorov <serge.fdrv@gmail.com> wrote:
>> Implement debug exception routing according to ARM ARM D2.3.1 Pseudocode
>> description of routing debug exceptions.
>>
>> Signed-off-by: Sergey Fedorov <serge.fdrv@gmail.com>
>
>
>
> Applied to target-arm.next, thanks.

...except it doesn't compile, because we don't have an env->cp15.mdcr_el2.
Presumably there's some other patch this depends on which you haven't
submitted yet?

thanks
-- PMM
Sergey Fedorov Sept. 18, 2015, 3:57 p.m. UTC | #3
On 18.09.2015 17:11, Peter Maydell wrote:
> On 18 September 2015 at 15:08, Peter Maydell <peter.maydell@linaro.org> wrote:
>> On 14 September 2015 at 11:53, Sergey Fedorov <serge.fdrv@gmail.com> wrote:
>>> Implement debug exception routing according to ARM ARM D2.3.1 Pseudocode
>>> description of routing debug exceptions.
>>>
>>> Signed-off-by: Sergey Fedorov <serge.fdrv@gmail.com>
>>
>>
>> Applied to target-arm.next, thanks.
> ...except it doesn't compile, because we don't have an env->cp15.mdcr_el2.
> Presumably there's some other patch this depends on which you haven't
> submitted yet?
>

Hm... I'll check it :)

Best,
Sergey
Sergey Fedorov Sept. 18, 2015, 4:15 p.m. UTC | #4
On 18.09.2015 18:57, Sergey Fedorov wrote:
> On 18.09.2015 17:11, Peter Maydell wrote:
>> On 18 September 2015 at 15:08, Peter Maydell <peter.maydell@linaro.org> wrote:
>>> On 14 September 2015 at 11:53, Sergey Fedorov <serge.fdrv@gmail.com> wrote:
>>>> Implement debug exception routing according to ARM ARM D2.3.1 Pseudocode
>>>> description of routing debug exceptions.
>>>>
>>>> Signed-off-by: Sergey Fedorov <serge.fdrv@gmail.com>
>>>
>>> Applied to target-arm.next, thanks.
>> ...except it doesn't compile, because we don't have an env->cp15.mdcr_el2.
>> Presumably there's some other patch this depends on which you haven't
>> submitted yet?
>>
> Hm... I'll check it :)

Sorry, I forgot to check that, but actually this patch depends on
another two patches in my local repository. Should I prepare MDCR_EL2
patch suitable for mainline or I can just remove this check from
arm_debug_target_el()?

Best,
Sergey
Peter Maydell Sept. 18, 2015, 4:35 p.m. UTC | #5
On 18 September 2015 at 17:15, Sergey Fedorov <serge.fdrv@gmail.com> wrote:
> On 18.09.2015 18:57, Sergey Fedorov wrote:
>> On 18.09.2015 17:11, Peter Maydell wrote:
>>> On 18 September 2015 at 15:08, Peter Maydell <peter.maydell@linaro.org> wrote:
>>>> On 14 September 2015 at 11:53, Sergey Fedorov <serge.fdrv@gmail.com> wrote:
>>>>> Implement debug exception routing according to ARM ARM D2.3.1 Pseudocode
>>>>> description of routing debug exceptions.
>>>>>
>>>>> Signed-off-by: Sergey Fedorov <serge.fdrv@gmail.com>
>>>>
>>>> Applied to target-arm.next, thanks.
>>> ...except it doesn't compile, because we don't have an env->cp15.mdcr_el2.
>>> Presumably there's some other patch this depends on which you haven't
>>> submitted yet?
>>>
>> Hm... I'll check it :)
>
> Sorry, I forgot to check that, but actually this patch depends on
> another two patches in my local repository. Should I prepare MDCR_EL2
> patch suitable for mainline or I can just remove this check from
> arm_debug_target_el()?

Edgar, do you have a MDCR_EL2 implementation in your tree?

Otherwise, yes, Sergey, you should provide an MDCR_EL2/HDCR patch
for mainline I think. It should be fairly easy as it just needs
to be readable/writable and have the correct access checks.
Don't forget to provide the AArch32 interface as well as the AArch64
one, and the "RES0 if EL3 but not EL2" version.
(See Edgar's recent patches in master for VMPIDR_EL2, VTCR_EL2,
etc for examples.)

thanks
-- PMM
Edgar E. Iglesias Sept. 19, 2015, 1:28 p.m. UTC | #6
On Fri, Sep 18, 2015 at 05:35:07PM +0100, Peter Maydell wrote:
> On 18 September 2015 at 17:15, Sergey Fedorov <serge.fdrv@gmail.com> wrote:
> > On 18.09.2015 18:57, Sergey Fedorov wrote:
> >> On 18.09.2015 17:11, Peter Maydell wrote:
> >>> On 18 September 2015 at 15:08, Peter Maydell <peter.maydell@linaro.org> wrote:
> >>>> On 14 September 2015 at 11:53, Sergey Fedorov <serge.fdrv@gmail.com> wrote:
> >>>>> Implement debug exception routing according to ARM ARM D2.3.1 Pseudocode
> >>>>> description of routing debug exceptions.
> >>>>>
> >>>>> Signed-off-by: Sergey Fedorov <serge.fdrv@gmail.com>
> >>>>
> >>>> Applied to target-arm.next, thanks.
> >>> ...except it doesn't compile, because we don't have an env->cp15.mdcr_el2.
> >>> Presumably there's some other patch this depends on which you haven't
> >>> submitted yet?
> >>>
> >> Hm... I'll check it :)
> >
> > Sorry, I forgot to check that, but actually this patch depends on
> > another two patches in my local repository. Should I prepare MDCR_EL2
> > patch suitable for mainline or I can just remove this check from
> > arm_debug_target_el()?
> 
> Edgar, do you have a MDCR_EL2 implementation in your tree?
> 
> Otherwise, yes, Sergey, you should provide an MDCR_EL2/HDCR patch
> for mainline I think. It should be fairly easy as it just needs
> to be readable/writable and have the correct access checks.
> Don't forget to provide the AArch32 interface as well as the AArch64
> one, and the "RES0 if EL3 but not EL2" version.
> (See Edgar's recent patches in master for VMPIDR_EL2, VTCR_EL2,
> etc for examples.)

Hi,

Sorry, no, I only have a dummy for MDCR_EL2.. Would be great if Sergey has
something ready.

Best regards,
Edgar
Peter Maydell Oct. 16, 2015, 12:08 p.m. UTC | #7
On 18 September 2015 at 15:11, Peter Maydell <peter.maydell@linaro.org> wrote:
> On 18 September 2015 at 15:08, Peter Maydell <peter.maydell@linaro.org> wrote:
>> On 14 September 2015 at 11:53, Sergey Fedorov <serge.fdrv@gmail.com> wrote:
>>> Implement debug exception routing according to ARM ARM D2.3.1 Pseudocode
>>> description of routing debug exceptions.
>>>
>>> Signed-off-by: Sergey Fedorov <serge.fdrv@gmail.com>
>>
>>
>>
>> Applied to target-arm.next, thanks.
>
> ...except it doesn't compile, because we don't have an env->cp15.mdcr_el2.

Reapplied, now we have an mdcr_el2 for it to use.

-- PMM
diff mbox

Patch

diff --git a/target-arm/cpu.h b/target-arm/cpu.h
index 31825d3..84d38b1 100644
--- a/target-arm/cpu.h
+++ b/target-arm/cpu.h
@@ -1692,7 +1692,22 @@  static inline int cpu_mmu_index(CPUARMState *env)
  */
 static inline int arm_debug_target_el(CPUARMState *env)
 {
-    return 1;
+    bool secure = arm_is_secure(env);
+    bool route_to_el2 = false;
+
+    if (arm_feature(env, ARM_FEATURE_EL2) && !secure) {
+        route_to_el2 = env->cp15.hcr_el2 & HCR_TGE ||
+                       env->cp15.mdcr_el2 & (1 << 8);
+    }
+
+    if (route_to_el2) {
+        return 2;
+    } else if (arm_feature(env, ARM_FEATURE_EL3) &&
+               !arm_el_is_aa64(env, 3) && secure) {
+        return 3;
+    } else {
+        return 1;
+    }
 }
 
 static inline bool aa64_generate_debug_exceptions(CPUARMState *env)