Merge changes from topic "bk/warnings" into integration

* changes:
  docs: describe the new warning levels
  build: add -Wunused-const-variable=2 to W=2
  build: include -Wextra in generic builds
  docs(porting-guide): update a reference
  fix(st-usb): replace redundant checks with asserts
  fix(brcm): add braces around bodies of conditionals
  fix(renesas): align incompatible function pointers
  fix(zynqmp): remove redundant api_version check
  fix: remove old-style declarations
  fix: unify fallthrough annotations
This commit is contained in:
Manish Pandey 2023-01-10 11:56:42 +01:00 committed by TrustedFirmware Code Review
commit 601e2d4325
26 changed files with 161 additions and 108 deletions

View file

@ -350,27 +350,53 @@ ASFLAGS_aarch64 = $(march64-directive)
# General warnings
WARNINGS := -Wall -Wmissing-include-dirs -Wunused \
-Wdisabled-optimization -Wvla -Wshadow \
-Wno-unused-parameter -Wredundant-decls
-Wredundant-decls
# stricter warnings
WARNINGS += -Wextra -Wno-trigraphs
# too verbose for generic build
WARNINGS += -Wno-missing-field-initializers \
-Wno-type-limits -Wno-sign-compare \
# on clang this flag gets reset if -Wextra is set after it. No difference on gcc
WARNINGS += -Wno-unused-parameter
# Additional warnings
# Level 1
WARNING1 := -Wextra
WARNING1 += -Wmissing-format-attribute
WARNING1 += -Wmissing-prototypes
WARNING1 += -Wold-style-definition
# Level 1 - infrequent warnings we should have none of
# full -Wextra
WARNING1 += -Wsign-compare
WARNING1 += -Wtype-limits
WARNING1 += -Wmissing-field-initializers
# Level 2
WARNING2 := -Waggregate-return
WARNING2 += -Wcast-align
WARNING2 += -Wnested-externs
# Level 2 - problematic warnings that we want
# zlib, compiler-rt, coreboot, and mbdedtls blow up with these
# TODO: disable just for them and move into default build
WARNING2 += -Wold-style-definition
WARNING2 += -Wmissing-prototypes
WARNING2 += -Wmissing-format-attribute
# TF-A aims to comply with this eventually. Effort too large at present
WARNING2 += -Wundef
# currently very involved and many platforms set this off
WARNING2 += -Wunused-const-variable=2
# Level 3 - very pedantic, frequently ignored
WARNING3 := -Wbad-function-cast
WARNING3 += -Waggregate-return
WARNING3 += -Wnested-externs
WARNING3 += -Wcast-align
WARNING3 += -Wcast-qual
WARNING3 += -Wconversion
WARNING3 += -Wpacked
WARNING3 += -Wpointer-arith
WARNING3 += -Wswitch-default
# Setting W is quite verbose and most warnings will be pre-existing issues
# outside of the contributor's control. Don't fail the build on them so warnings
# can be seen and hopefully addressed
ifdef W
ifneq (${W},0)
E ?= 0
endif
endif
ifeq (${W},1)
WARNINGS += $(WARNING1)
else ifeq (${W},2)

View file

@ -213,6 +213,12 @@ Common build options
- ``E``: Boolean option to make warnings into errors. Default is 1.
When specifying higher warnings levels (``W=1`` and higher), this option
defaults to 0. This is done to encourage contributors to use them, as they
are expected to produce warnings that would otherwise fail the build. New
contributions are still expected to build with ``W=0`` and ``E=1`` (the
default).
- ``EL3_PAYLOAD_BASE``: This option enables booting an EL3 payload instead of
the normal boot flow. It must specify the entry point address of the EL3
payload. Please refer to the "Booting an EL3 payload" section for more
@ -954,6 +960,43 @@ Common build options
regrouped and put in the root Makefile. This flag can take the values 0 to 3,
each level enabling more warning options. Default is 0.
This option is closely related to the ``E`` option, which enables
``-Werror``.
- ``W=0`` (default)
Enables a wide assortment of warnings, most notably ``-Wall`` and
``-Wextra``, as well as various bad practices and things that are likely to
result in errors. Includes some compiler specific flags. No warnings are
expected at this level for any build.
- ``W=1``
Enables warnings we want the generic build to include but are too time
consuming to fix at the moment. It re-enables warnings taken out for
``W=0`` builds (a few of the ``-Wextra`` additions). This level is expected
to eventually be merged into ``W=0``. Some warnings are expected on some
builds, but new contributions should not introduce new ones.
- ``W=2`` (recommended)
Enables warnings we want the generic build to include but cannot be enabled
due to external libraries. This level is expected to eventually be merged
into ``W=0``. Lots of warnings are expected, primarily from external
libraries like zlib and compiler-rt, but new controbutions should not
introduce new ones.
- ``W=3``
Enables warnings that are informative but not necessary and generally too
verbose and frequently ignored. A very large number of warnings are
expected.
The exact set of warning flags depends on the compiler and TF-A warning
level, however they are all succinctly set in the top-level Makefile. Please
refer to the `GCC`_ or `Clang`_ documentation for more information on the
individual flags.
- ``WARMBOOT_ENABLE_DCACHE_EARLY`` : Boolean option to enable D-cache early on
the CPU after warm boot. This is applicable for platforms which do not
require interconnect programming to enable cache coherency (eg: single
@ -1161,3 +1204,5 @@ Firmware update options
.. _DEN0115: https://developer.arm.com/docs/den0115/latest
.. _PSA FW update specification: https://developer.arm.com/documentation/den0118/a/
.. _PSA DRTM specification: https://developer.arm.com/documentation/den0113/a
.. _GCC: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
.. _Clang: https://clang.llvm.org/docs/DiagnosticsReference.html

View file

@ -2135,7 +2135,7 @@ CPUs. BL31 executes at EL3 and is responsible for:
#. Providing runtime firmware services. Currently, BL31 only implements a
subset of the Power State Coordination Interface (PSCI) API as a runtime
service. See Section 3.3 below for details of porting the PSCI
service. See :ref:`psci_in_bl31` below for details of porting the PSCI
implementation.
#. Optionally passing control to the BL32 image, pre-loaded at a platform-
@ -2544,6 +2544,8 @@ Function: bool plat_get_entropy(uint64_t \*out) [mandatory]
This function writes entropy into storage provided by the caller. If no entropy
is available, it must return false and the storage must not be written.
.. _psci_in_bl31:
Power State Coordination Interface (in BL31)
--------------------------------------------

View file

@ -131,38 +131,9 @@ Several build options can be used to check for security issues. Refer to the
overflows.
- The ``W`` build flag can be used to enable a number of compiler warning
options to detect potentially incorrect code.
- W=0 (default value)
The ``Wunused`` with ``Wno-unused-parameter``, ``Wdisabled-optimization``
and ``Wvla`` flags are enabled.
The ``Wunused-but-set-variable``, ``Wmaybe-uninitialized`` and
``Wpacked-bitfield-compat`` are GCC specific flags that are also enabled.
- W=1
Adds ``Wextra``, ``Wmissing-format-attribute``, ``Wmissing-prototypes``,
``Wold-style-definition`` and ``Wunused-const-variable``.
- W=2
Adds ``Waggregate-return``, ``Wcast-align``, ``Wnested-externs``,
``Wshadow``, ``Wlogical-op``.
- W=3
Adds ``Wbad-function-cast``, ``Wcast-qual``, ``Wconversion``, ``Wpacked``,
``Wpointer-arith``, ``Wredundant-decls`` and
``Wswitch-default``.
Refer to the GCC or Clang documentation for more information on the individual
options: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html and
https://clang.llvm.org/docs/DiagnosticsReference.html.
NB: The ``Werror`` flag is enabled by default in TF-A and can be disabled by
setting the ``E`` build flag to 0.
options to detect potentially incorrect code. TF-A is tested with ``W=0`` but
it is recommended to develop against ``W=2`` (which will eventually become the
default).
.. rubric:: References

View file

@ -479,10 +479,11 @@ int init_mmc_card(struct sd_handle *handle)
handle->device->cfg.blockSize = 512;
}
if (handle->device->ctrl.ocr & SD_CARD_HIGH_CAPACITY)
if (handle->device->ctrl.ocr & SD_CARD_HIGH_CAPACITY) {
EMMC_TRACE("Sector addressing\n");
else
} else {
EMMC_TRACE("Byte addressing\n");
}
EMMC_TRACE("Ext_CSD_storage[162]: 0x%02X Ext_CSD_storage[179]: 0x%02X\n",
emmc_global_buf_ptr->u.Ext_CSD_storage[162],

View file

@ -278,8 +278,9 @@ struct sd_handle *sdio_init(void)
SDIO_base = EMMC_CTRL_REGS_BASE_ADDR;
if (SDIO_base == SDIO0_EMMCSDXC_SYSADDR)
if (SDIO_base == SDIO0_EMMCSDXC_SYSADDR) {
EMMC_TRACE(" ---> for SDIO 0 Controller\n\n");
}
memset(p_sdhandle, 0, sizeof(struct sd_handle));
@ -290,8 +291,9 @@ struct sd_handle *sdio_init(void)
memset(p_sdhandle->card, 0, sizeof(struct sd_card_info));
if (chal_sd_start((CHAL_HANDLE *) p_sdhandle->device,
SD_PIO_MODE, SDIO_base, SDIO_base) != SD_OK)
SD_PIO_MODE, SDIO_base, SDIO_base) != SD_OK) {
return NULL;
}
set_config(p_sdhandle, SD_NORMAL_SPEED, MAX_CMD_RETRY, SD_DMA_OFF,
SD_DMA_BOUNDARY_4K, EMMC_BLOCK_SIZE, EMMC_WFE_RETRY);
@ -330,14 +332,16 @@ uint32_t sdio_read(struct sd_handle *p_sdhandle,
VERBOSE("EMMC READ: dst=0x%lx, src=0x%lx, size=0x%lx\n",
storage_addr, mem_addr, bytes_to_read);
if (storage_size < bytes_to_read)
if (storage_size < bytes_to_read) {
/* Don't have sufficient storage to complete the operation */
return 0;
}
/* Range check non high capacity memory */
if ((p_sdhandle->device->ctrl.ocr & SD_CARD_HIGH_CAPACITY) == 0) {
if (mem_addr > 0x80000000)
if (mem_addr > 0x80000000) {
return 0;
}
}
/* High capacity card use block address mode */
@ -384,10 +388,11 @@ uint32_t sdio_read(struct sd_handle *p_sdhandle,
/* Update Physical address */
outputBuf += manual_copy_size;
if (p_sdhandle->device->ctrl.ocr & SD_CARD_HIGH_CAPACITY)
if (p_sdhandle->device->ctrl.ocr & SD_CARD_HIGH_CAPACITY) {
blockAddr++;
else
} else {
blockAddr += blockSize;
}
} else {
return 0;
}
@ -395,10 +400,11 @@ uint32_t sdio_read(struct sd_handle *p_sdhandle,
while (remSize >= blockSize) {
if (remSize >= SD_MAX_BLK_TRANSFER_LENGTH)
if (remSize >= SD_MAX_BLK_TRANSFER_LENGTH) {
readLen = SD_MAX_BLK_TRANSFER_LENGTH;
else
} else {
readLen = (remSize / blockSize) * blockSize;
}
/* Check for overflow */
if ((rdCount + readLen) > storage_size ||
@ -409,10 +415,11 @@ uint32_t sdio_read(struct sd_handle *p_sdhandle,
}
if (!read_block(p_sdhandle, outputBuf, blockAddr, readLen)) {
if (p_sdhandle->device->ctrl.ocr & SD_CARD_HIGH_CAPACITY)
if (p_sdhandle->device->ctrl.ocr & SD_CARD_HIGH_CAPACITY) {
blockAddr += (readLen / blockSize);
else
} else {
blockAddr += readLen;
}
remSize -= readLen;
rdCount += readLen;
@ -463,8 +470,9 @@ static uint32_t sdio_write(struct sd_handle *p_sdhandle, uintptr_t mem_addr,
/* range check non high capacity memory */
if ((p_sdhandle->device->ctrl.ocr & SD_CARD_HIGH_CAPACITY) == 0) {
if (mem_addr > 0x80000000)
if (mem_addr > 0x80000000) {
return 0;
}
}
/* the high capacity card use block address mode */
@ -491,11 +499,12 @@ static uint32_t sdio_write(struct sd_handle *p_sdhandle, uintptr_t mem_addr,
blockAddr, p_sdhandle->device->cfg.blockSize)) {
if (remSize <
(p_sdhandle->device->cfg.blockSize - offset))
(p_sdhandle->device->cfg.blockSize - offset)) {
manual_copy_size = remSize;
else
} else {
manual_copy_size =
p_sdhandle->device->cfg.blockSize - offset;
}
memcpy((void *)((uintptr_t)
(emmc_global_buf_ptr->u.tempbuf + offset)),
@ -530,11 +539,12 @@ static uint32_t sdio_write(struct sd_handle *p_sdhandle, uintptr_t mem_addr,
inputBuf += manual_copy_size;
if (p_sdhandle->device->ctrl.ocr &
SD_CARD_HIGH_CAPACITY)
SD_CARD_HIGH_CAPACITY) {
blockAddr++;
else
} else {
blockAddr +=
p_sdhandle->device->cfg.blockSize;
}
} else
return 0;
} else {

View file

@ -136,7 +136,8 @@ static int imx_usdhc_send_cmd(struct mmc_cmd *cmd)
break;
case MMC_CMD(18):
multiple = 1;
/* fall thru for read op */
/* for read op */
/* fallthrough */
case MMC_CMD(17):
case MMC_CMD(8):
mixctl |= MIXCTRL_DTDSEL;
@ -144,7 +145,8 @@ static int imx_usdhc_send_cmd(struct mmc_cmd *cmd)
break;
case MMC_CMD(25):
multiple = 1;
/* fall thru for data op flag */
/* for data op flag */
/* fallthrough */
case MMC_CMD(24):
data = 1;
break;

View file

@ -269,7 +269,7 @@ static int cal_odt(const unsigned int clk,
unsigned int i;
const struct dynamic_odt *pdodt = NULL;
const static struct dynamic_odt *table[2][5] = {
static const struct dynamic_odt *table[2][5] = {
{single_S, single_D, NULL, NULL},
{dual_SS, dual_DD, NULL, NULL},
};

View file

@ -13,7 +13,7 @@ struct phy_msg {
const char *msg;
};
const static struct phy_msg messages_1d[] = {
static const struct phy_msg messages_1d[] = {
{0x00000001,
"PMU1:prbsGenCtl:%x\n"
},
@ -1239,7 +1239,7 @@ const static struct phy_msg messages_1d[] = {
},
};
const static struct phy_msg messages_2d[] = {
static const struct phy_msg messages_2d[] = {
{0x00000001,
"PMU0: Converting %d into an MR\n"
},

View file

@ -254,8 +254,7 @@ EMMC_ERROR_CODE emmc_exec_cmd(uint32_t error_mask, uint32_t *response)
(SD_INFO2_ALL_ERR | SD_INFO2_CLEAR));
state = ESTATE_ISSUE_CMD;
/* through */
/* fallthrough */
case ESTATE_ISSUE_CMD:
/* ARG */
SETR_32(SD_ARG, mmc_drv_obj.cmd_info.arg);
@ -454,8 +453,8 @@ EMMC_ERROR_CODE emmc_exec_cmd(uint32_t error_mask, uint32_t *response)
SETR_32(SD_STOP, 0x00000000U);
mmc_drv_obj.during_dma_transfer = FALSE;
}
/* through */
/* fallthrough */
case ESTATE_ERROR:
if (err_not_care_flag == TRUE) {
mmc_drv_obj.during_cmd_processing = FALSE;

View file

@ -11,7 +11,7 @@
#include "rcar_def.h"
#include "rom_api.h"
typedef uint32_t(*rom_secure_boot_api_f) (uint32_t *key, uint32_t *cert,
typedef uint32_t(*rom_secure_boot_api_f) (uint32_t key, uint32_t cert,
rom_read_flash_f pFuncReadFlash);
typedef uint32_t(*rom_get_lcs_api_f) (uint32_t *lcs);
@ -68,7 +68,7 @@ static uint32_t get_table_index(void)
return index;
}
uint32_t rcar_rom_secure_boot_api(uint32_t *key, uint32_t *cert,
uint32_t rcar_rom_secure_boot_api(uint32_t key, uint32_t cert,
rom_read_flash_f read_flash)
{
static const uintptr_t rom_api_table[API_TABLE_MAX] = {

View file

@ -24,7 +24,7 @@
#define LCS_FA (0x7U)
typedef uint32_t(*rom_read_flash_f) (uint64_t src, uint8_t *dst, uint32_t len);
uint32_t rcar_rom_secure_boot_api(uint32_t *key, uint32_t *cert,
uint32_t rcar_rom_secure_boot_api(uint32_t key, uint32_t cert,
rom_read_flash_f f);
uint32_t rcar_rom_get_lcs(uint32_t *lcs);

View file

@ -4,6 +4,7 @@
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <assert.h>
#include <stdint.h>
#include <arch_helpers.h>
@ -794,7 +795,7 @@ static enum usb_action usb_dwc2_it_handler(void *handle, uint32_t *param)
uint32_t epint;
uint32_t epnum;
uint32_t temp;
enum usb_status ret;
enum usb_status __unused ret;
if (usb_dwc2_get_mode(handle) != USB_OTG_MODE_DEVICE) {
return USB_NOTHING;
@ -947,9 +948,7 @@ static enum usb_action usb_dwc2_it_handler(void *handle, uint32_t *param)
/* Setup EP0 to receive SETUP packets */
ret = usb_dwc2_ep0_out_start(handle);
if (ret != USBD_OK) {
return ret;
}
assert(ret == USBD_OK);
mmio_write_32(usb_base_addr + OTG_GINTSTS, OTG_GINTSTS_USBRST);
@ -959,9 +958,7 @@ static enum usb_action usb_dwc2_it_handler(void *handle, uint32_t *param)
/* Handle enumeration done interrupt */
if ((usb_dwc2_read_int(handle) & OTG_GINTSTS_ENUMDNE) != 0U) {
ret = usb_dwc2_activate_setup(handle);
if (ret != USBD_OK) {
return ret;
}
assert(ret == USBD_OK);
mmio_clrbits_32(usb_base_addr + OTG_GUSBCFG, OTG_GUSBCFG_TRDT);

View file

@ -209,6 +209,7 @@ loop:
break;
case 'X':
capitalise = true;
/* fallthrough */
case 'x':
unum = get_unum_va_args(args, l_count);
unsigned_num_print(&s, n, &chars_printed,

View file

@ -20,7 +20,7 @@
#if defined(PLAT_imx8qm) || defined(PLAT_imx8qx)
#ifdef PLAT_imx8qm
const static int ap_cluster_index[PLATFORM_CLUSTER_COUNT] = {
static const int ap_cluster_index[PLATFORM_CLUSTER_COUNT] = {
SC_R_A53, SC_R_A72,
};
#endif

View file

@ -62,7 +62,7 @@ static entry_point_info_t bl33_image_ep_info;
#error "Provide proper UART number in IMX_DEBUG_UART"
#endif
const static int imx8qm_cci_map[] = {
static const int imx8qm_cci_map[] = {
CLUSTER0_CCI_SLVAE_IFACE,
CLUSTER1_CCI_SLVAE_IFACE
};

View file

@ -26,7 +26,7 @@
#define SYSTEM_PWR_STATE(state) \
((state)->pwr_domain_state[PLAT_MAX_PWR_LVL])
const static int ap_core_index[PLATFORM_CORE_COUNT] = {
static const int ap_core_index[PLATFORM_CORE_COUNT] = {
SC_R_A53_0, SC_R_A53_1, SC_R_A53_2,
SC_R_A53_3, SC_R_A72_0, SC_R_A72_1,
};

View file

@ -18,7 +18,7 @@
#include "../../common/sci/imx8_mu.h"
const static int ap_core_index[PLATFORM_CORE_COUNT] = {
static const int ap_core_index[PLATFORM_CORE_COUNT] = {
SC_R_A35_0, SC_R_A35_1, SC_R_A35_2, SC_R_A35_3
};

View file

@ -51,6 +51,7 @@
x3 = x3 & MASK_32_BIT; \
x4 = x4 & MASK_32_BIT; \
} \
/* fallthrough */ \
case _smc_id##_AARCH64: \
{ \
if (_smc_id##_descriptor_index < 0) { \

View file

@ -20,7 +20,7 @@ extern uint64_t tegra_bl31_phys_base;
/*******************************************************************************
* Array to hold stream_id override config register offsets
******************************************************************************/
const static uint32_t tegra186_streamid_override_regs[] = {
static const uint32_t tegra186_streamid_override_regs[] = {
MC_STREAMID_OVERRIDE_CFG_SDMMCRA,
MC_STREAMID_OVERRIDE_CFG_SDMMCRAA,
MC_STREAMID_OVERRIDE_CFG_SDMMCR,
@ -34,7 +34,7 @@ const static uint32_t tegra186_streamid_override_regs[] = {
/*******************************************************************************
* Array to hold the security configs for stream IDs
******************************************************************************/
const static mc_streamid_security_cfg_t tegra186_streamid_sec_cfgs[] = {
static const mc_streamid_security_cfg_t tegra186_streamid_sec_cfgs[] = {
mc_make_sec_cfg(SCEW, NON_SECURE, NO_OVERRIDE, DISABLE),
mc_make_sec_cfg(AFIR, NON_SECURE, OVERRIDE, DISABLE),
mc_make_sec_cfg(AFIW, NON_SECURE, OVERRIDE, DISABLE),
@ -112,7 +112,7 @@ const static mc_streamid_security_cfg_t tegra186_streamid_sec_cfgs[] = {
/*******************************************************************************
* Array to hold the transaction override configs
******************************************************************************/
const static mc_txn_override_cfg_t tegra186_txn_override_cfgs[] = {
static const mc_txn_override_cfg_t tegra186_txn_override_cfgs[] = {
mc_make_txn_override_cfg(BPMPW, CGID_TAG_ADR),
mc_make_txn_override_cfg(EQOSW, CGID_TAG_ADR),
mc_make_txn_override_cfg(NVJPGSWR, CGID_TAG_ADR),

View file

@ -350,7 +350,7 @@ static int _pwr_state_validate(uint32_t pwr_state,
else if (SOC_SYSTEM_STANDBY)
state->pwr_domain_state[PLAT_MAX_LVL] =
PLAT_MAX_RET_STATE;
/* intentional fall-thru condition */
/* fallthrough */
case PWR_STATE_LVL_SYS:
if (pwrdn && SOC_SYSTEM_PWR_DWN)
state->pwr_domain_state[PLAT_SYS_LVL] =
@ -358,7 +358,7 @@ static int _pwr_state_validate(uint32_t pwr_state,
else if (SOC_SYSTEM_STANDBY)
state->pwr_domain_state[PLAT_SYS_LVL] =
PLAT_MAX_RET_STATE;
/* intentional fall-thru condition */
/* fallthrough */
case PWR_STATE_LVL_CLSTR:
if (pwrdn && SOC_CLUSTER_PWR_DWN)
state->pwr_domain_state[PLAT_CLSTR_LVL] =
@ -366,7 +366,7 @@ static int _pwr_state_validate(uint32_t pwr_state,
else if (SOC_CLUSTER_STANDBY)
state->pwr_domain_state[PLAT_CLSTR_LVL] =
PLAT_MAX_RET_STATE;
/* intentional fall-thru condition */
/* fallthrough */
case PWR_STATE_LVL_CORE:
stat = PSCI_E_SUCCESS;

View file

@ -39,7 +39,7 @@
#define IPI_BIT_MASK(I) (ipi_table[(I)].ipi_bit_mask)
/* IPI configuration table */
const static struct ipi_config *ipi_table;
static const struct ipi_config *ipi_table;
/* Total number of IPI */
static uint32_t ipi_total;

View file

@ -19,7 +19,7 @@
#include <lib/mmio.h>
/* versal ipi configuration table */
const static struct ipi_config versal_ipi_table[] = {
static const struct ipi_config versal_ipi_table[] = {
/* A72 IPI */
[IPI_ID_APU] = {
.ipi_bit_mask = IPI0_TRIG_BIT,

View file

@ -334,22 +334,18 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3,
SMC_RET1(handle, (uint64_t)ret);
case PM_GET_API_VERSION:
/* Check is PM API version already verified */
if (pm_ctx.api_version >= PM_VERSION) {
if (ipi_irq_flag == 0U) {
/*
* Enable IPI IRQ
* assume the rich OS is OK to handle callback IRQs now.
* Even if we were wrong, it would not enable the IRQ in
* the GIC.
*/
pm_ipi_irq_enable(primary_proc);
ipi_irq_flag = 1U;
}
SMC_RET1(handle, (uint64_t)PM_RET_SUCCESS |
((uint64_t)pm_ctx.api_version << 32));
if (ipi_irq_flag == 0U) {
/*
* Enable IPI IRQ
* assume the rich OS is OK to handle callback IRQs now.
* Even if we were wrong, it would not enable the IRQ in
* the GIC.
*/
pm_ipi_irq_enable(primary_proc);
ipi_irq_flag = 1U;
}
SMC_RET1(handle, (uint64_t)PM_RET_SUCCESS |
((uint64_t)pm_ctx.api_version << 32));
case PM_FPGA_LOAD:
ret = pm_fpga_load(pm_arg[0], pm_arg[1], pm_arg[2], pm_arg[3]);
SMC_RET1(handle, (uint64_t)ret);

View file

@ -21,7 +21,7 @@
#include <plat_private.h>
/* Zynqmp ipi configuration table */
const static struct ipi_config zynqmp_ipi_table[] = {
static const struct ipi_config zynqmp_ipi_table[] = {
/* APU IPI */
{
.ipi_bit_mask = 0x1,

View file

@ -868,7 +868,8 @@ uint64_t spmd_smc_handler(uint32_t smc_fid,
FFA_ERROR_NOT_SUPPORTED);
}
/* Fall through to forward the call to the other world */
/* Forward the call to the other world */
/* fallthrough */
case FFA_MSG_SEND:
case FFA_MSG_SEND_DIRECT_RESP_SMC64:
case FFA_MEM_DONATE_SMC32:
@ -908,7 +909,8 @@ uint64_t spmd_smc_handler(uint32_t smc_fid,
spmd_spm_core_sync_exit(0ULL);
}
/* Fall through to forward the call to the other world */
/* Forward the call to the other world */
/* fallthrough */
case FFA_INTERRUPT:
case FFA_MSG_YIELD:
/* This interface must be invoked only by the Secure world */