From: Volodymyr Babchuk <volodymyr_babchuk@epam.com>
To: Julien Grall <julien.grall@arm.com>, xen-devel@lists.xen.org
Cc: nd@arm.com, Stefano Stabellini <sstabellini@kernel.org>
Subject: Re: [PATCH v2 2/4] arm: processor: add new struct hsr_smc32 into hsr union
Date: Thu, 10 Aug 2017 00:06:35 +0300 [thread overview]
Message-ID: <f89a8ca5-dfff-57e7-0ef1-01bc88317788@epam.com> (raw)
In-Reply-To: <b24d0473-f462-744e-00af-a535d14608a4@arm.com>
Hi Julien,
On 09.08.17 23:34, Julien Grall wrote:
>
>
> On 09/08/2017 20:44, Volodymyr Babchuk wrote:
>> On ARMv8, one of conditional exceptions (SMC that originates
>> from aarch32 state) have extra field in HCR.ISS encoding:
>
> s/aarch32/AArch32/
> s/have/has/
>
> And the register is called HSR and not HCR.
>
>>
>> CCKNOWNPASS, bit [19]
>> Indicates whether the instruction might have failed its condition
>> code check.
>> 0 - The instruction was unconditional, or was conditional and
>> passed its condition code check.
>> 1 - The instruction was conditional, and might have failed its
>> condition code check.
>> (ARM DDI 0487A.k page D7-1949)
>
> Please use the latest ARM ARM.
>
>>
>> This is instruction specific field, so better to add new structure
>
> This is an instruction...
>
>> to union hsr. This structure describes ISS encoding for an exception
>> from SMC instruction execution in AArch32 state. But we define this
>> struct for both ARMv7 and ARMv8. The reason is described in comment
>> to the structure:
>>
>> "Nevertheless, we define this encoding for both ARMv7 and ARMv8,
>> because check_conditional_inst() should properly handle SMC
>> instruction in all modes: ARMv7, aarch32 and aarch64."
>
> Hmmm. There are only two existing modes: AArch32 and AArch64. ARMv7 is
> just a version of the specification which happen to only support AArch32.
Yeah, I wondered how to formulate that better. Problem is that ARMv7
specification does not use term "AArch32". So I decided to mention ARMv7
explicitly.
How about this: "check_conditional_inst() should properly handle SMC
instruction on both architectures (ARMv7 and ARMv8) while running in
aarch32 or aarch64 mode" ?
> Actually Xen does not care about ARMv8 vs ARMv7. It only care about
> AArch32 vs AArch64.
Yes. And probably it can be problem in the future. Because, as we can
see, there are differences between ARMv7 and ARMv8.
>>
>> Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@epam.com>
>> ---
>>
>> - Created new stucture for HSR_EC_SMC32 instead of extending
>> fields in hsr.cond.
>> - Added references to ARM manual.
>> - Wrote comment with rationale.
>>
>> ---
>> xen/include/asm-arm/processor.h | 19 +++++++++++++++++++
>> 1 file changed, 19 insertions(+)
>>
>> diff --git a/xen/include/asm-arm/processor.h
>> b/xen/include/asm-arm/processor.h
>> index f640d54..af4a0f7 100644
>> --- a/xen/include/asm-arm/processor.h
>> +++ b/xen/include/asm-arm/processor.h
>> @@ -488,6 +488,25 @@ union hsr {
>> unsigned long ec:6; /* Exception Class */
>> } cp; /* HSR_EC_CP */
>>
>> + /*
>> + * This encoding is valid only for ARMv8 (ARM DDI 0487A.k pages
>> D7-1949 and
>> + * G6-4405). On ARMv7, encoding ISS for EC=0x13 is defined as
>> UNK/SBZP
>> + * (ARM DDI 0406C.c page B3-1431). UNK/SBZP means that hardware
>> implements
>> + * this field as Read-As-Zero.
>> + *
>> + * Nevertheless, we define this encoding for both ARMv7 and
>> ARMv8, because
>> + * check_conditional_inst() should properly handle SMC
>> instruction in all
>> + * modes: ARMv7, aarch32 and aarch64.
>
> See my comment above.
>
>> + */
>> + struct hsr_smc32 {
>> + unsigned long res0:19; /* Reserved */
>> + unsigned long ccknownpass:1; /* Instruction passed
>> conditional check */
>> + unsigned long cc:4; /* Condition Code */
>> + unsigned long ccvalid:1;/* CC Valid */
>> + unsigned long len:1; /* Instruction length */
>> + unsigned long ec:6; /* Exception Class */
>> + } smc32; /* HSR_EC_SMC32 */
>> +
>> #ifdef CONFIG_ARM_64
>> struct hsr_sysreg {
>> unsigned long read:1; /* Direction */
>>
>
> Cheers,
>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-08-09 21:06 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-09 19:44 [PATCH v2 0/4] arm: allign check_conditional_instr() with ARMv8 Volodymyr Babchuk
2017-08-09 19:44 ` [PATCH v2 1/4] arm: processor: rename iss to res0 in hsr_cond union Volodymyr Babchuk
2017-08-09 20:25 ` Julien Grall
2017-08-09 19:44 ` [PATCH v2 2/4] arm: processor: add new struct hsr_smc32 into hsr union Volodymyr Babchuk
2017-08-09 20:34 ` Julien Grall
2017-08-09 21:06 ` Volodymyr Babchuk [this message]
2017-08-09 21:22 ` Julien Grall
2017-08-11 13:26 ` Volodymyr Babchuk
2017-08-11 13:43 ` Julien Grall
2017-08-09 19:44 ` [PATCH v2 3/4] arm: traps: handle unknown exceptions in check_conditional_instr() Volodymyr Babchuk
2017-08-09 20:36 ` Julien Grall
2017-08-09 19:44 ` [PATCH v2 4/4] arm: traps: handle SMC32 " Volodymyr Babchuk
2017-08-09 20:42 ` Julien Grall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f89a8ca5-dfff-57e7-0ef1-01bc88317788@epam.com \
--to=volodymyr_babchuk@epam.com \
--cc=julien.grall@arm.com \
--cc=nd@arm.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).