• Antonio Nino Diaz's avatar
    Redefine SMC_UNK as -1 instead of 0xFFFFFFFF · 4abd7fa7
    Antonio Nino Diaz authored
    
    
    According to the SMC Calling Convention (ARM DEN0028B):
    
        The Unknown SMC Function Identifier is a sign-extended value of
        (-1) that is returned in R0, W0 or X0 register.
    
    The value wasn't sign-extended because it was defined as a 32-bit
    unsigned value (0xFFFFFFFF).
    
    SMC_PREEMPT has been redefined as -2 for the same reason.
    
    NOTE: This might be a compatibility break for some AArch64 platforms
    that don't follow the previous version of the SMCCC (ARM DEN0028A)
    correctly. That document specifies that only the bottom 32 bits of the
    returned value must be checked. If a platform relies on the top 32 bits
    of the result being 0 (so that SMC_UNK is 0x00000000FFFFFFFF), it will
    have to fix its code to comply with the SMCCC.
    
    Change-Id: I7f7b109f6b30c114fe570aa0ead3c335383cb54d
    Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
    4abd7fa7
smcc.h 3.5 KB