On Thu, Sep 14, 2017 at 05:11:21PM +0100, [email protected] wrote:
> From: Sami Mujawar <samimujawar>

I have fixed Sami's email address up before pushing.

> The ARMv8.2-FP16 extension introduces support for half precision
> floating point and the processor ID registers have been updated to
> enable detection of the implementation.
> 
> The possible values for the FP bits in ID_AA64PFR0_EL1[19:16] are:
>   - 0000 : Floating-point is implemented.
>   - 0001 : Floating-point including Half-precision support is
>            implemented.
>   - 1111 : Floating-point is not implemented.
>   - All other values are reserved.
> 
> Previously ArmEnableVFP() compared the FP bits with 0000b to see if
> the FP was implemented, before enabling FP. Modified this check to
> enable the FP if the FP bits 19:16 are not 1111b.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Sami Mujawar <[email protected]>
> Signed-off-by: Evan Lloyd <[email protected]>

So ... I think longer-term we should try to move a lot of this type of
stuff to c instead, but this is a clear fix - thanks!

Reviewed-by: Leif Lindholm <[email protected]>
Pushed as 2f16993c25

> ---
>  ArmPkg/Library/ArmLib/AArch64/AArch64Support.S | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S 
> b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
> index 
> dde6a756528f3abf1bd5a142448e42122a9bd8fa..2d136d242b943fe2f365bc824953b7fe10c944b7
>  100644
> --- a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
> +++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
> @@ -1,7 +1,7 @@
>  
> #------------------------------------------------------------------------------
>  #
>  # Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
> -# Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.
> +# Copyright (c) 2011 - 2017, ARM Limited. All rights reserved.
>  # Copyright (c) 2016, Linaro Limited. All rights reserved.
>  #
>  # This program and the accompanying materials
> @@ -403,9 +403,11 @@ ASM_FUNC(ArmEnableVFP)
>    mov   x1, x30                 // Save LR
>    bl    ArmReadIdPfr0           // Read EL1 Processor Feature Register (PFR0)
>    mov   x30, x1                 // Restore LR
> -  ands  x0, x0, #AARCH64_PFR0_FP// Extract bits indicating VFP implementation
> -  cmp   x0, #0                  // VFP is implemented if '0'.
> -  b.ne  4f                      // Exit if VFP not implemented.
> +  ubfx  x0, x0, #16, #4         // Extract the FP bits 16:19
> +  cmp   x0, #0xF                // Check if FP bits are '1111b',
> +                                // i.e. Floating Point not implemented
> +  b.eq  4f                      // Exit when VFP is not implemented.
> +
>    // FVP is implemented.
>    // Make sure VFP exceptions are not trapped (to any exception level).
>    mrs   x0, cpacr_el1           // Read EL1 Coprocessor Access Control 
> Register (CPACR)
> -- 
> Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")
> 
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to