• Geoff Levand's avatar
    arm64: hyp/kvm: Make hyp-stub extensible · ad72e59f
    Geoff Levand authored
    The existing arm64 hcall implementations are limited in that they only
    allow for two distinct hcalls; with the x0 register either zero or not
    zero.  Also, the API of the hyp-stub exception vector routines and the
    KVM exception vector routines differ; hyp-stub uses a non-zero value in
    x0 to implement __hyp_set_vectors, whereas KVM uses it to implement
    kvm_call_hyp.
    
    To allow for additional hcalls to be defined and to make the arm64 hcall
    API more consistent across exception vector routines, change the hcall
    implementations to reserve all x0 values below 0xfff for hcalls such
    as {s,g}et_vectors().
    
    Define two new preprocessor macros HVC_GET_VECTORS, and HVC_SET_VECTORS
    to be used as hcall type specifiers and convert the existing
    __hyp_get_vectors() and __hyp_set_vectors() routines to use these new
    macros when executing an HVC call.  Also, change the corresponding
    hyp-stub and KVM el1_sync exception vector routines to use these new
    macros.
    Signed-off-by: default avatarGeoff Levand <geoff@infradead.org>
    [Merged two hcall patches, moved immediate value from esr to x0, use lr
     as a scratch register, changed limit to 0xfff]
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Acked-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    ad72e59f
hyp-entry.S 3.86 KB