Browse Source

Merge "feat(zynqmp): add support for custom sip service" into integration

pull/1994/head
Joanna Farley 2 years ago
committed by TrustedFirmware Code Review
parent
commit
9c571fb0d2
  1. 37
      docs/plat/xilinx-zynqmp.rst
  2. 17
      plat/xilinx/zynqmp/custom_sip_svc.c
  3. 16
      plat/xilinx/zynqmp/include/custom_svc.h
  4. 6
      plat/xilinx/zynqmp/platform.mk
  5. 6
      plat/xilinx/zynqmp/sip_svc_setup.c

37
docs/plat/xilinx-zynqmp.rst

@ -86,3 +86,40 @@ for ZynqMP:
The 4 leaf power domains represent the individual A53 cores, while resources
common to the cluster are grouped in the power domain on the top.
CUSTOM SIP service support
--------------------------
- Dedicated SMC FID ZYNQMP_SIP_SVC_CUSTOM(0x82002000)(32-bit)/
(0xC2002000)(64-bit) to be used by a custom package for
providing CUSTOM SIP service.
- by default platform provides bare minimum definition for
custom_smc_handler in this service.
- to use this service, custom package should implement their
smc handler with the name custom_smc_handler. once custom package is
included in TF-A build, their definition of custom_smc_handler is
enabled.
Custom package makefile fragment inclusion in TF-A build
--------------------------------------------------------
- custom package is not directly part of TF-A source.
- <CUSTOM_PKG_PATH> is the location at which user clones a
custom package locally.
- custom package needs to implement makefile fragment named
custom_pkg.mk so as to get included in TF-A build.
- custom_pkg.mk specify all the rules to include custom package
specific header files, dependent libs, source files that are
supposed to be included in TF-A build.
- when <CUSTOM_PKG_PATH> is specified in TF-A build command,
custom_pkg.mk is included from <CUSTOM_PKG_PATH> in TF-A build.
- TF-A build command:
make CROSS_COMPILE=aarch64-none-elf- PLAT=zynqmp RESET_TO_BL31=1
bl31 CUSTOM_PKG_PATH=<...>

17
plat/xilinx/zynqmp/custom_sip_svc.c

@ -0,0 +1,17 @@
/*
* Copyright (c) 2022-2023, Advanced Micro Devices Inc. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <common/bl_common.h>
#include <common/debug.h>
#include <smccc_helpers.h>
uint64_t custom_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
uint64_t x3, uint64_t x4, void *cookie,
void *handle, uint64_t flags)
{
WARN("Unimplemented SiP Service Call: 0x%x\n", smc_fid);
SMC_RET1(handle, SMC_UNK);
}

16
plat/xilinx/zynqmp/include/custom_svc.h

@ -0,0 +1,16 @@
/*
* Copyright (c) 2022-2023, Advanced Micro Devices Inc. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef CUSTOM_SVC_H
#define CUSTOM_SVC_H
#define ZYNQMP_SIP_SVC_CUSTOM U(0x82002000)
#define ZYNQMP_SIP_SVC64_CUSTOM U(0xC2002000)
uint64_t custom_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
uint64_t x3, uint64_t x4, void *cookie,
void *handle, uint64_t flags);
#endif /* CUSTOM_SVC_H */

6
plat/xilinx/zynqmp/platform.mk

@ -139,6 +139,12 @@ endif
BL31_CPPFLAGS += -fno-jump-tables
TF_CFLAGS_aarch64 += -mbranch-protection=none
ifdef CUSTOM_PKG_PATH
include $(CUSTOM_PKG_PATH)/custom_pkg.mk
else
BL31_SOURCES += plat/xilinx/zynqmp/custom_sip_svc.c
endif
ifneq (${RESET_TO_BL31},1)
$(error "Using BL31 as the reset vector is only one option supported on ZynqMP. Please set RESET_TO_BL31 to 1.")
endif

6
plat/xilinx/zynqmp/sip_svc_setup.c

@ -9,6 +9,7 @@
#include <common/runtime_svc.h>
#include <tools_share/uuid.h>
#include <custom_svc.h>
#include "ipi_mailbox_svc.h"
#include "pm_svc_main.h"
@ -89,6 +90,11 @@ static uintptr_t sip_svc_smc_handler(uint32_t smc_fid,
case ZYNQMP_SIP_SVC_VERSION:
SMC_RET2(handle, SIP_SVC_VERSION_MAJOR, SIP_SVC_VERSION_MINOR);
case ZYNQMP_SIP_SVC_CUSTOM:
case ZYNQMP_SIP_SVC64_CUSTOM:
return custom_smc_handler(smc_fid, x1, x2, x3, x4, cookie,
handle, flags);
default:
WARN("Unimplemented SiP Service Call: 0x%x\n", smc_fid);
SMC_RET1(handle, SMC_UNK);

Loading…
Cancel
Save