14 Nov, 2019

1 commit

  • The loading convention for optee or any other tee on arm64 is as bl32
    parameter to the trusted-firmware. So TF-A gets invoked with the TEE as
    bl32 and main u-boot as bl33. Once it has done its startup TF-A jumps
    into the bl32 for the TEE startup, returns to TF-A and then jumps to bl33.

    All of them get passed a devicetree as parameter and all components often
    get loaded from a FIT image.

    OP-TEE will create additional nodes in that devicetree namely a firmware
    node and possibly multiple reserved-memory nodes.

    While this devicetree is used in main u-boot, in most cases it won't be
    the one passed to the actual kernel. Instead most boot commands will load
    a new devicetree from somewhere like mass storage of the network, so if
    that happens u-boot should transfer the optee nodes to that new devicetree.

    To make that happen introduce optee_copy_fdt_nodes() called from the dt
    setup function in image-fdt which after checking for the optee presence
    in the u-boot dt will make sure a optee node is present in the kernel dt
    and transfer any reserved-memory regions it can find.

    Signed-off-by: Heiko Stuebner
    Reviewed-by: Jens Wiklander

    Heiko Stuebner
     

27 Apr, 2019

1 commit

  • AVB 2.0 spec. revision 1.1 introduces support for named persistent values
    that must be tamper evident and allows AVB to store arbitrary key-value
    pairs [1].

    Introduce implementation of two additional AVB operations
    read_persistent_value()/write_persistent_value() for retrieving/storing
    named persistent values.

    Correspondent pull request in the OP-TEE OS project repo [2].

    [1]: https://android.googlesource.com/platform/external/avb/+/android-9.0.0_r22
    [2]: https://github.com/OP-TEE/optee_os/pull/2699

    Reviewed-by: Simon Glass
    Reviewed-by: Sam Protsenko
    Signed-off-by: Igor Opaniuk

    Igor Opaniuk
     

07 Oct, 2018

1 commit

  • Adds configuration option OPTEE_TA_AVB and a header file describing the
    interface to the Android Verified Boot 2.0 (AVB) trusted application
    provided by OP-TEE.

    Tested-by: Igor Opaniuk
    Reviewed-by: Igor Opaniuk
    Signed-off-by: Jens Wiklander
    Reviewed-by: Simon Glass

    Jens Wiklander
     

07 May, 2018

1 commit

  • When U-Boot started using SPDX tags we were among the early adopters and
    there weren't a lot of other examples to borrow from. So we picked the
    area of the file that usually had a full license text and replaced it
    with an appropriate SPDX-License-Identifier: entry. Since then, the
    Linux Kernel has adopted SPDX tags and they place it as the very first
    line in a file (except where shebangs are used, then it's second line)
    and with slightly different comment styles than us.

    In part due to community overlap, in part due to better tag visibility
    and in part for other minor reasons, switch over to that style.

    This commit changes all instances where we have a single declared
    license in the tag as both the before and after are identical in tag
    contents. There's also a few places where I found we did not have a tag
    and have introduced one.

    Signed-off-by: Tom Rini

    Tom Rini
     

20 Mar, 2018

4 commits

  • This patch adds optee_verify_bootm_image() which will be subsequently used
    to verify the parameters encoded in the OPTEE header match the memory
    allocated to the OPTEE region, OPTEE header magic and version prior to
    handing off control to the OPTEE image.

    Signed-off-by: Bryan O'Donoghue
    Cc: Harinarayan Bhatta
    Cc: Andrew F. Davis
    Cc: Tom Rini
    Cc: Kever Yang
    Cc: Philipp Tomsich
    Cc: Peng Fan

    Bryan O'Donoghue
     
  • This patch adds optee_image_get_load_addr() a helper function used to
    calculate the load-address of an OPTEE image based on the lower
    entry-point address given in the OPTEE header.

    Signed-off-by: Bryan O'Donoghue
    Cc: Harinarayan Bhatta
    Cc: Andrew F. Davis
    Cc: Tom Rini
    Cc: Kever Yang
    Cc: Philipp Tomsich
    Cc: Peng Fan
    Tested-by: Peng Fan

    Bryan O'Donoghue
     
  • Add a helper function for extracting the least significant 32 bits from the
    OPTEE entry point address, which will be good enough to load OPTEE binaries
    up to (2^32)-1 bytes.

    We may need to extend this out later on but for now (2^32)-1 should be
    fine.

    Signed-off-by: Bryan O'Donoghue
    Cc: Harinarayan Bhatta
    Cc: Andrew F. Davis
    Cc: Tom Rini
    Cc: Kever Yang
    Cc: Philipp Tomsich
    Cc: Peng Fan
    Tested-by: Peng Fan

    Bryan O'Donoghue
     
  • This patch adds code to lib to enable sharing of useful OPTEE code between
    board-ports and architectures. The code on lib/optee/optee.c comes from the
    TI omap2 port. Eventually the OMAP2 code will be patched to include the
    shared code. The intention here is to add more useful OPTEE specific code
    as more functionality gets added.

    Signed-off-by: Bryan O'Donoghue
    Cc: Harinarayan Bhatta
    Cc: Andrew F. Davis
    Cc: Tom Rini
    Cc: Kever Yang
    Cc: Philipp Tomsich
    Cc: Peng Fan
    Tested-by: Peng Fan

    Bryan O'Donoghue
     

04 Dec, 2016

1 commit

  • secure_tee_install is used to install and initialize a secure TEE OS such as
    Linaro OP-TEE into the secure world. This function takes in the address
    where the signed TEE image is loaded as an argument. The signed TEE image
    consists of a header (struct tee_header), TEE code+data followed by the
    signature generated using image signing tool from TI security development
    package (SECDEV). Refer to README.ti-secure for more information.

    This function uses 2 new secure APIs.

    1. PPA_SERV_HAL_TEE_LOAD_MASTER - Must be called on CPU Core 0. Protected
    memory for TEE must be reserved before calling this function. This API
    needs arguments filled into struct ppa_tee_load_info. The TEE image is
    authenticated and if there are no errors, the control passes to the TEE
    entry point.

    2. PPA_SERV_HAL_TEE_LOAD_SLAVE - Called on other CPU cores only after
    a TEE_LOAD_MASTER call. Takes no arguments. Checks if TEE was
    successfully loaded (on core 0) and transfers control to the same TEE
    entry point.

    The code at TEE entry point is expected perform OS initialization steps
    and return back to non-secure world (U-Boot).

    Signed-off-by: Harinarayan Bhatta
    Signed-off-by: Andrew F. Davis
    Reviewed-by: Tom Rini

    Harinarayan Bhatta