mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-19 02:54:24 +00:00
Merge changes from topic "xlnx_fix_plat_data_types" into integration
* changes: fix(versal2): typecast operands to match data type fix(versal): typecast operands to match data type fix(versal-net): typecast operands to match data type fix(xilinx): typecast operands to match data type fix(zynqmp): typecast operands to match data type fix(versal-net): typecast operands to match data type fix(versal): typecast operands to match data type fix(xilinx): typecast operands to match data type fix(zynqmp): typecast operands to match data type fix(versal2): typecast expressions to match data type fix(versal-net): typecast expressions to match data type fix(versal): typecast expressions to match data type fix(xilinx): typecast expressions to match data type fix(zynqmp): typecast expressions to match data type fix(zynqmp): align essential type categories fix(zynqmp): typecast expression to match data type fix(xilinx): typecast expression to match data type
This commit is contained in:
commit
9ef62bd88d
36 changed files with 630 additions and 601 deletions
|
@ -75,8 +75,8 @@ void board_detection(void)
|
||||||
uint32_t version_type;
|
uint32_t version_type;
|
||||||
|
|
||||||
version_type = mmio_read_32(PMC_TAP_VERSION);
|
version_type = mmio_read_32(PMC_TAP_VERSION);
|
||||||
platform_id = FIELD_GET(PLATFORM_MASK, version_type);
|
platform_id = FIELD_GET((uint32_t)PLATFORM_MASK, version_type);
|
||||||
platform_version = FIELD_GET(PLATFORM_VERSION_MASK, version_type);
|
platform_version = FIELD_GET((uint32_t)PLATFORM_VERSION_MASK, version_type);
|
||||||
|
|
||||||
if (platform_id == QEMU_COSIM) {
|
if (platform_id == QEMU_COSIM) {
|
||||||
platform_id = QEMU;
|
platform_id = QEMU;
|
||||||
|
|
|
@ -63,7 +63,7 @@ static inline void bl31_set_default_config(void)
|
||||||
bl32_image_ep_info.args.arg3 = XILINX_OF_BOARD_DTB_ADDR;
|
bl32_image_ep_info.args.arg3 = XILINX_OF_BOARD_DTB_ADDR;
|
||||||
#endif
|
#endif
|
||||||
bl33_image_ep_info.pc = plat_get_ns_image_entrypoint();
|
bl33_image_ep_info.pc = plat_get_ns_image_entrypoint();
|
||||||
bl33_image_ep_info.spsr = SPSR_64(MODE_EL2, MODE_SP_ELX,
|
bl33_image_ep_info.spsr = (uint32_t)SPSR_64(MODE_EL2, MODE_SP_ELX,
|
||||||
DISABLE_ALL_EXCEPTIONS);
|
DISABLE_ALL_EXCEPTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ void bl31_platform_setup(void)
|
||||||
|
|
||||||
void bl31_plat_runtime_setup(void)
|
void bl31_plat_runtime_setup(void)
|
||||||
{
|
{
|
||||||
uint64_t flags = 0;
|
uint32_t flags = 0;
|
||||||
int32_t rc;
|
int32_t rc;
|
||||||
|
|
||||||
set_interrupt_rm_flag(flags, NON_SECURE);
|
set_interrupt_rm_flag(flags, NON_SECURE);
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include <plat/arm/common/smccc_def.h>
|
#include <plat/arm/common/smccc_def.h>
|
||||||
#include <plat/common/common_def.h>
|
#include <plat/common/common_def.h>
|
||||||
|
|
||||||
#define MAX_INTR_EL3 2
|
#define MAX_INTR_EL3 2U
|
||||||
|
|
||||||
/* List all consoles */
|
/* List all consoles */
|
||||||
#define VERSAL2_CONSOLE_ID_none 0
|
#define VERSAL2_CONSOLE_ID_none 0
|
||||||
|
|
|
@ -10,96 +10,96 @@
|
||||||
#ifndef _VERSAL2_SCMI_H
|
#ifndef _VERSAL2_SCMI_H
|
||||||
#define _VERSAL2_SCMI_H
|
#define _VERSAL2_SCMI_H
|
||||||
|
|
||||||
#define CLK_GEM0_0 0
|
#define CLK_GEM0_0 0U
|
||||||
#define CLK_GEM0_1 1
|
#define CLK_GEM0_1 1U
|
||||||
#define CLK_GEM0_2 2
|
#define CLK_GEM0_2 2U
|
||||||
#define CLK_GEM0_3 3
|
#define CLK_GEM0_3 3U
|
||||||
#define CLK_GEM0_4 4
|
#define CLK_GEM0_4 4U
|
||||||
#define CLK_GEM1_0 5
|
#define CLK_GEM1_0 5U
|
||||||
#define CLK_GEM1_1 6
|
#define CLK_GEM1_1 6U
|
||||||
#define CLK_GEM1_2 7
|
#define CLK_GEM1_2 7U
|
||||||
#define CLK_GEM1_3 8
|
#define CLK_GEM1_3 8U
|
||||||
#define CLK_GEM1_4 9
|
#define CLK_GEM1_4 9U
|
||||||
#define CLK_SERIAL0_0 10
|
#define CLK_SERIAL0_0 10U
|
||||||
#define CLK_SERIAL0_1 11
|
#define CLK_SERIAL0_1 11U
|
||||||
#define CLK_SERIAL1_0 12
|
#define CLK_SERIAL1_0 12U
|
||||||
#define CLK_SERIAL1_1 13
|
#define CLK_SERIAL1_1 13U
|
||||||
#define CLK_UFS0_0 14
|
#define CLK_UFS0_0 14U
|
||||||
#define CLK_UFS0_1 15
|
#define CLK_UFS0_1 15U
|
||||||
#define CLK_UFS0_2 16
|
#define CLK_UFS0_2 16U
|
||||||
#define CLK_USB0_0 17
|
#define CLK_USB0_0 17U
|
||||||
#define CLK_USB0_1 18
|
#define CLK_USB0_1 18U
|
||||||
#define CLK_USB0_2 19
|
#define CLK_USB0_2 19U
|
||||||
#define CLK_USB1_0 20
|
#define CLK_USB1_0 20U
|
||||||
#define CLK_USB1_1 21
|
#define CLK_USB1_1 21U
|
||||||
#define CLK_USB1_2 22
|
#define CLK_USB1_2 22U
|
||||||
#define CLK_MMC0_0 23
|
#define CLK_MMC0_0 23U
|
||||||
#define CLK_MMC0_1 24
|
#define CLK_MMC0_1 24U
|
||||||
#define CLK_MMC0_2 25
|
#define CLK_MMC0_2 25U
|
||||||
#define CLK_MMC1_0 26
|
#define CLK_MMC1_0 26U
|
||||||
#define CLK_MMC1_1 27
|
#define CLK_MMC1_1 27U
|
||||||
#define CLK_MMC1_2 28
|
#define CLK_MMC1_2 28U
|
||||||
#define CLK_TTC0_0 29
|
#define CLK_TTC0_0 29U
|
||||||
#define CLK_TTC1_0 30
|
#define CLK_TTC1_0 30U
|
||||||
#define CLK_TTC2_0 31
|
#define CLK_TTC2_0 31U
|
||||||
#define CLK_TTC3_0 32
|
#define CLK_TTC3_0 32U
|
||||||
#define CLK_TTC4_0 33
|
#define CLK_TTC4_0 33U
|
||||||
#define CLK_TTC5_0 34
|
#define CLK_TTC5_0 34U
|
||||||
#define CLK_TTC6_0 35
|
#define CLK_TTC6_0 35U
|
||||||
#define CLK_TTC7_0 36
|
#define CLK_TTC7_0 36U
|
||||||
#define CLK_I2C0_0 37
|
#define CLK_I2C0_0 37U
|
||||||
#define CLK_I2C1_0 38
|
#define CLK_I2C1_0 38U
|
||||||
#define CLK_I2C2_0 39
|
#define CLK_I2C2_0 39U
|
||||||
#define CLK_I2C3_0 40
|
#define CLK_I2C3_0 40U
|
||||||
#define CLK_I2C4_0 41
|
#define CLK_I2C4_0 41U
|
||||||
#define CLK_I2C5_0 42
|
#define CLK_I2C5_0 42U
|
||||||
#define CLK_I2C6_0 43
|
#define CLK_I2C6_0 43U
|
||||||
#define CLK_I2C7_0 44
|
#define CLK_I2C7_0 44U
|
||||||
#define CLK_OSPI0_0 45
|
#define CLK_OSPI0_0 45U
|
||||||
#define CLK_QSPI0_0 46
|
#define CLK_QSPI0_0 46U
|
||||||
#define CLK_QSPI0_1 47
|
#define CLK_QSPI0_1 47U
|
||||||
#define CLK_WWDT0_0 48
|
#define CLK_WWDT0_0 48U
|
||||||
#define CLK_WWDT1_0 49
|
#define CLK_WWDT1_0 49U
|
||||||
#define CLK_WWDT2_0 50
|
#define CLK_WWDT2_0 50U
|
||||||
#define CLK_WWDT3_0 51
|
#define CLK_WWDT3_0 51U
|
||||||
#define CLK_ADMA0_0 52
|
#define CLK_ADMA0_0 52U
|
||||||
#define CLK_ADMA0_1 53
|
#define CLK_ADMA0_1 53U
|
||||||
#define CLK_ADMA1_0 54
|
#define CLK_ADMA1_0 54U
|
||||||
#define CLK_ADMA1_1 55
|
#define CLK_ADMA1_1 55U
|
||||||
#define CLK_ADMA2_0 56
|
#define CLK_ADMA2_0 56U
|
||||||
#define CLK_ADMA2_1 57
|
#define CLK_ADMA2_1 57U
|
||||||
#define CLK_ADMA3_0 58
|
#define CLK_ADMA3_0 58U
|
||||||
#define CLK_ADMA3_1 59
|
#define CLK_ADMA3_1 59U
|
||||||
#define CLK_ADMA4_0 60
|
#define CLK_ADMA4_0 60U
|
||||||
#define CLK_ADMA4_1 61
|
#define CLK_ADMA4_1 61U
|
||||||
#define CLK_ADMA5_0 62
|
#define CLK_ADMA5_0 62U
|
||||||
#define CLK_ADMA5_1 63
|
#define CLK_ADMA5_1 63U
|
||||||
#define CLK_ADMA6_0 64
|
#define CLK_ADMA6_0 64U
|
||||||
#define CLK_ADMA6_1 65
|
#define CLK_ADMA6_1 65U
|
||||||
#define CLK_ADMA7_0 66
|
#define CLK_ADMA7_0 66U
|
||||||
#define CLK_ADMA7_1 67
|
#define CLK_ADMA7_1 67U
|
||||||
#define CLK_CAN0_0 68
|
#define CLK_CAN0_0 68U
|
||||||
#define CLK_CAN0_1 69
|
#define CLK_CAN0_1 69U
|
||||||
#define CLK_CAN1_0 70
|
#define CLK_CAN1_0 70U
|
||||||
#define CLK_CAN1_1 71
|
#define CLK_CAN1_1 71U
|
||||||
#define CLK_CAN2_0 72
|
#define CLK_CAN2_0 72U
|
||||||
#define CLK_CAN2_1 73
|
#define CLK_CAN2_1 73U
|
||||||
#define CLK_CAN3_0 74
|
#define CLK_CAN3_0 74U
|
||||||
#define CLK_CAN3_1 75
|
#define CLK_CAN3_1 75U
|
||||||
#define CLK_PS_GPIO_0 76
|
#define CLK_PS_GPIO_0 76U
|
||||||
#define CLK_PMC_GPIO_0 77
|
#define CLK_PMC_GPIO_0 77U
|
||||||
#define CLK_SPI0_0 78
|
#define CLK_SPI0_0 78U
|
||||||
#define CLK_SPI0_1 79
|
#define CLK_SPI0_1 79U
|
||||||
#define CLK_SPI1_0 80
|
#define CLK_SPI1_0 80U
|
||||||
#define CLK_SPI1_1 81
|
#define CLK_SPI1_1 81U
|
||||||
#define CLK_I3C0_0 82
|
#define CLK_I3C0_0 82U
|
||||||
#define CLK_I3C1_0 83
|
#define CLK_I3C1_0 83U
|
||||||
#define CLK_I3C2_0 84
|
#define CLK_I3C2_0 84U
|
||||||
#define CLK_I3C3_0 85
|
#define CLK_I3C3_0 85U
|
||||||
#define CLK_I3C4_0 86
|
#define CLK_I3C4_0 86U
|
||||||
#define CLK_I3C5_0 87
|
#define CLK_I3C5_0 87U
|
||||||
#define CLK_I3C6_0 88
|
#define CLK_I3C6_0 88U
|
||||||
#define CLK_I3C7_0 89
|
#define CLK_I3C7_0 89U
|
||||||
|
|
||||||
#define RESET_GEM0_0 0
|
#define RESET_GEM0_0 0
|
||||||
#define RESET_GEM1_0 1
|
#define RESET_GEM1_0 1
|
||||||
|
|
|
@ -35,9 +35,9 @@ static void zynqmp_cpu_standby(plat_local_state_t cpu_state)
|
||||||
|
|
||||||
static int32_t zynqmp_nopmu_pwr_domain_on(u_register_t mpidr)
|
static int32_t zynqmp_nopmu_pwr_domain_on(u_register_t mpidr)
|
||||||
{
|
{
|
||||||
uint32_t cpu_id = plat_core_pos_by_mpidr(mpidr) & ~BIT(MPIDR_MT_BIT);
|
int32_t cpu_id = plat_core_pos_by_mpidr(mpidr) & ~BIT(MPIDR_MT_BIT);
|
||||||
uint32_t cpu = cpu_id % PLATFORM_CORE_COUNT_PER_CLUSTER;
|
int32_t cpu = cpu_id % PLATFORM_CORE_COUNT_PER_CLUSTER;
|
||||||
uint32_t cluster = cpu_id / PLATFORM_CORE_COUNT_PER_CLUSTER;
|
int32_t cluster = cpu_id / PLATFORM_CORE_COUNT_PER_CLUSTER;
|
||||||
uintptr_t apu_cluster_base = 0, apu_pcli_base, apu_pcli_cluster = 0;
|
uintptr_t apu_cluster_base = 0, apu_pcli_base, apu_pcli_cluster = 0;
|
||||||
uintptr_t rst_apu_cluster = PSX_CRF + RST_APU0_OFFSET + ((uint64_t)cluster * 0x4U);
|
uintptr_t rst_apu_cluster = PSX_CRF + RST_APU0_OFFSET + ((uint64_t)cluster * 0x4U);
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ static int32_t zynqmp_nopmu_pwr_domain_on(u_register_t mpidr)
|
||||||
return PSCI_E_INTERN_FAIL;
|
return PSCI_E_INTERN_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cluster > 3) {
|
if (cluster > 3U) {
|
||||||
panic();
|
panic();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ static int32_t zynqmp_nopmu_pwr_domain_on(u_register_t mpidr)
|
||||||
mmio_write_32(apu_cluster_base + APU_RVBAR_L_0 + (cpu << 3),
|
mmio_write_32(apu_cluster_base + APU_RVBAR_L_0 + (cpu << 3),
|
||||||
(uint32_t)_sec_entry);
|
(uint32_t)_sec_entry);
|
||||||
mmio_write_32(apu_cluster_base + APU_RVBAR_H_0 + (cpu << 3),
|
mmio_write_32(apu_cluster_base + APU_RVBAR_H_0 + (cpu << 3),
|
||||||
_sec_entry >> 32);
|
(uint32_t)(_sec_entry >> 32));
|
||||||
|
|
||||||
/* de-assert core reset */
|
/* de-assert core reset */
|
||||||
mmio_clrbits_32(rst_apu_cluster, ((RST_APU_COLD_RESET|RST_APU_WARN_RESET) << cpu));
|
mmio_clrbits_32(rst_apu_cluster, ((RST_APU_COLD_RESET|RST_APU_WARN_RESET) << cpu));
|
||||||
|
@ -178,9 +178,9 @@ static int32_t no_pm_ioctl(uint32_t device_id, uint32_t ioctl_id,
|
||||||
ret = (int32_t) mmio_read_32(PMXC_IOU_SLCR_TX_RX_CONFIG_RDY);
|
ret = (int32_t) mmio_read_32(PMXC_IOU_SLCR_TX_RX_CONFIG_RDY);
|
||||||
break;
|
break;
|
||||||
case IOCTL_UFS_SRAM_CSR_SEL:
|
case IOCTL_UFS_SRAM_CSR_SEL:
|
||||||
if (arg1 == 1) {
|
if (arg1 == 1U) {
|
||||||
ret = (int32_t) mmio_read_32(PMXC_IOU_SLCR_SRAM_CSR);
|
ret = (int32_t) mmio_read_32(PMXC_IOU_SLCR_SRAM_CSR);
|
||||||
} else if (arg1 == 0) {
|
} else if (arg1 == 0U) {
|
||||||
mmio_write_32(PMXC_IOU_SLCR_SRAM_CSR, arg2);
|
mmio_write_32(PMXC_IOU_SLCR_SRAM_CSR, arg2);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -293,7 +293,7 @@ int32_t plat_scmi_clock_rates_array(unsigned int agent_id, unsigned int scmi_id,
|
||||||
return SCMI_NOT_FOUND;
|
return SCMI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start_idx > 0) {
|
if (start_idx > 0U) {
|
||||||
return SCMI_OUT_OF_RANGE;
|
return SCMI_OUT_OF_RANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,7 +328,7 @@ int32_t plat_scmi_clock_set_rate(unsigned int agent_id, unsigned int scmi_id,
|
||||||
unsigned long rate)
|
unsigned long rate)
|
||||||
{
|
{
|
||||||
struct scmi_clk *clock = clk_find(agent_id, scmi_id);
|
struct scmi_clk *clock = clk_find(agent_id, scmi_id);
|
||||||
unsigned long ret = UL(SCMI_SUCCESS);
|
int32_t ret = SCMI_SUCCESS;
|
||||||
|
|
||||||
if ((clock == NULL)) {
|
if ((clock == NULL)) {
|
||||||
ret = SCMI_NOT_FOUND;
|
ret = SCMI_NOT_FOUND;
|
||||||
|
@ -564,17 +564,19 @@ int32_t plat_scmi_pd_set_state(unsigned int agent_id, unsigned int flags, unsign
|
||||||
unsigned int state)
|
unsigned int state)
|
||||||
{
|
{
|
||||||
struct scmi_pd *pd = find_pd(agent_id, pd_id);
|
struct scmi_pd *pd = find_pd(agent_id, pd_id);
|
||||||
|
int32_t ret = SCMI_SUCCESS;
|
||||||
|
|
||||||
if (pd == NULL) {
|
if (pd == NULL) {
|
||||||
return SCMI_NOT_SUPPORTED;
|
ret = SCMI_NOT_SUPPORTED;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
NOTICE("SCMI: PD: set id: %d, orig state: %x, new state: %x, flags: %x\n",
|
||||||
|
pd_id, pd->state, state, flags);
|
||||||
|
|
||||||
|
pd->state = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
NOTICE("SCMI: PD: set id: %d, orig state: %x, new state: %x, flags: %x\n",
|
return ret;
|
||||||
pd_id, pd->state, state, flags);
|
|
||||||
|
|
||||||
pd->state = state;
|
|
||||||
|
|
||||||
return 0U;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ static uintptr_t sip_svc_smc_handler(uint32_t smc_fid,
|
||||||
VERBOSE("SMCID: 0x%08x, x1: 0x%016" PRIx64 ", x2: 0x%016" PRIx64 ", x3: 0x%016" PRIx64 ", x4: 0x%016" PRIx64 "\n",
|
VERBOSE("SMCID: 0x%08x, x1: 0x%016" PRIx64 ", x2: 0x%016" PRIx64 ", x3: 0x%016" PRIx64 ", x4: 0x%016" PRIx64 "\n",
|
||||||
smc_fid, x1, x2, x3, x4);
|
smc_fid, x1, x2, x3, x4);
|
||||||
|
|
||||||
if ((smc_fid & SIP_FID_MASK) != 0) {
|
if ((smc_fid & SIP_FID_MASK) != 0U) {
|
||||||
WARN("SMC out of SiP assinged range: 0x%x\n", smc_fid);
|
WARN("SMC out of SiP assinged range: 0x%x\n", smc_fid);
|
||||||
SMC_RET1(handle, SMC_UNK);
|
SMC_RET1(handle, SMC_UNK);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
#define IPI_SECURE_MASK (0x1U)
|
#define IPI_SECURE_MASK (0x1U)
|
||||||
#define IPI_IS_SECURE(I) ((ipi_table[(I)].secure_only & \
|
#define IPI_IS_SECURE(I) ((ipi_table[(I)].secure_only & \
|
||||||
IPI_SECURE_MASK) ? 1 : 0)
|
IPI_SECURE_MASK) ? true : false)
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* Struct definitions
|
* Struct definitions
|
||||||
|
|
|
@ -90,11 +90,11 @@ int ipi_mb_validate(uint32_t local, uint32_t remote, unsigned int is_secure)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (!is_ipi_mb_within_range(local, remote)) {
|
if (is_ipi_mb_within_range(local, remote) == 0) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
} else if (IPI_IS_SECURE(local) && !is_secure) {
|
} else if (IPI_IS_SECURE(local) && (is_secure == 0U)) {
|
||||||
ret = -EPERM;
|
ret = -EPERM;
|
||||||
} else if (IPI_IS_SECURE(remote) && !is_secure) {
|
} else if (IPI_IS_SECURE(remote) && (is_secure == 0U)) {
|
||||||
ret = -EPERM;
|
ret = -EPERM;
|
||||||
} else {
|
} else {
|
||||||
/* To fix the misra 15.7 warning */
|
/* To fix the misra 15.7 warning */
|
||||||
|
@ -111,9 +111,12 @@ int ipi_mb_validate(uint32_t local, uint32_t remote, unsigned int is_secure)
|
||||||
*/
|
*/
|
||||||
void ipi_mb_open(uint32_t local, uint32_t remote)
|
void ipi_mb_open(uint32_t local, uint32_t remote)
|
||||||
{
|
{
|
||||||
mmio_write_32(IPI_REG_BASE(local) + IPI_IDR_OFFSET,
|
uint64_t idr_offset = (uint64_t)(IPI_REG_BASE(local) + IPI_IDR_OFFSET);
|
||||||
|
uint64_t isr_offset = (uint64_t)(IPI_REG_BASE(local) + IPI_ISR_OFFSET);
|
||||||
|
|
||||||
|
mmio_write_32(idr_offset,
|
||||||
IPI_BIT_MASK(remote));
|
IPI_BIT_MASK(remote));
|
||||||
mmio_write_32(IPI_REG_BASE(local) + IPI_ISR_OFFSET,
|
mmio_write_32(isr_offset,
|
||||||
IPI_BIT_MASK(remote));
|
IPI_BIT_MASK(remote));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,7 +128,9 @@ void ipi_mb_open(uint32_t local, uint32_t remote)
|
||||||
*/
|
*/
|
||||||
void ipi_mb_release(uint32_t local, uint32_t remote)
|
void ipi_mb_release(uint32_t local, uint32_t remote)
|
||||||
{
|
{
|
||||||
mmio_write_32(IPI_REG_BASE(local) + IPI_IDR_OFFSET,
|
uint64_t idr_offset = (uint64_t)(IPI_REG_BASE(local) + IPI_IDR_OFFSET);
|
||||||
|
|
||||||
|
mmio_write_32(idr_offset,
|
||||||
IPI_BIT_MASK(remote));
|
IPI_BIT_MASK(remote));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,12 +147,14 @@ int ipi_mb_enquire_status(uint32_t local, uint32_t remote)
|
||||||
{
|
{
|
||||||
int ret = 0U;
|
int ret = 0U;
|
||||||
uint32_t status;
|
uint32_t status;
|
||||||
|
uint64_t obr_offset = (uint64_t)(IPI_REG_BASE(local) + IPI_OBR_OFFSET);
|
||||||
|
uint64_t isr_offset = (uint64_t)(IPI_REG_BASE(local) + IPI_ISR_OFFSET);
|
||||||
|
|
||||||
status = mmio_read_32(IPI_REG_BASE(local) + IPI_OBR_OFFSET);
|
status = mmio_read_32(obr_offset);
|
||||||
if ((status & IPI_BIT_MASK(remote)) != 0U) {
|
if ((status & IPI_BIT_MASK(remote)) != 0U) {
|
||||||
ret |= IPI_MB_STATUS_SEND_PENDING;
|
ret |= IPI_MB_STATUS_SEND_PENDING;
|
||||||
}
|
}
|
||||||
status = mmio_read_32(IPI_REG_BASE(local) + IPI_ISR_OFFSET);
|
status = mmio_read_32(isr_offset);
|
||||||
if ((status & IPI_BIT_MASK(remote)) != 0U) {
|
if ((status & IPI_BIT_MASK(remote)) != 0U) {
|
||||||
ret |= IPI_MB_STATUS_RECV_PENDING;
|
ret |= IPI_MB_STATUS_RECV_PENDING;
|
||||||
}
|
}
|
||||||
|
@ -167,13 +174,14 @@ int ipi_mb_enquire_status(uint32_t local, uint32_t remote)
|
||||||
void ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking)
|
void ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking)
|
||||||
{
|
{
|
||||||
uint32_t status;
|
uint32_t status;
|
||||||
|
uint64_t trig_offset = (uint64_t)(IPI_REG_BASE(local) + IPI_TRIG_OFFSET);
|
||||||
|
uint64_t obr_offset = (uint64_t)(IPI_REG_BASE(local) + IPI_OBR_OFFSET);
|
||||||
|
|
||||||
mmio_write_32(IPI_REG_BASE(local) + IPI_TRIG_OFFSET,
|
mmio_write_32(trig_offset,
|
||||||
IPI_BIT_MASK(remote));
|
IPI_BIT_MASK(remote));
|
||||||
if (is_blocking != 0U) {
|
if (is_blocking != 0U) {
|
||||||
do {
|
do {
|
||||||
status = mmio_read_32(IPI_REG_BASE(local) +
|
status = mmio_read_32(obr_offset);
|
||||||
IPI_OBR_OFFSET);
|
|
||||||
} while ((status & IPI_BIT_MASK(remote)) != 0U);
|
} while ((status & IPI_BIT_MASK(remote)) != 0U);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -188,7 +196,9 @@ void ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking)
|
||||||
*/
|
*/
|
||||||
void ipi_mb_ack(uint32_t local, uint32_t remote)
|
void ipi_mb_ack(uint32_t local, uint32_t remote)
|
||||||
{
|
{
|
||||||
mmio_write_32(IPI_REG_BASE(local) + IPI_ISR_OFFSET,
|
uint64_t isr_offset = (uint64_t)(IPI_REG_BASE(local) + IPI_ISR_OFFSET);
|
||||||
|
|
||||||
|
mmio_write_32(isr_offset,
|
||||||
IPI_BIT_MASK(remote));
|
IPI_BIT_MASK(remote));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +212,9 @@ void ipi_mb_ack(uint32_t local, uint32_t remote)
|
||||||
*/
|
*/
|
||||||
void ipi_mb_disable_irq(uint32_t local, uint32_t remote)
|
void ipi_mb_disable_irq(uint32_t local, uint32_t remote)
|
||||||
{
|
{
|
||||||
mmio_write_32(IPI_REG_BASE(local) + IPI_IDR_OFFSET,
|
uint64_t idr_offset = (uint64_t)(IPI_REG_BASE(local) + IPI_IDR_OFFSET);
|
||||||
|
|
||||||
|
mmio_write_32(idr_offset,
|
||||||
IPI_BIT_MASK(remote));
|
IPI_BIT_MASK(remote));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,6 +228,8 @@ void ipi_mb_disable_irq(uint32_t local, uint32_t remote)
|
||||||
*/
|
*/
|
||||||
void ipi_mb_enable_irq(uint32_t local, uint32_t remote)
|
void ipi_mb_enable_irq(uint32_t local, uint32_t remote)
|
||||||
{
|
{
|
||||||
mmio_write_32(IPI_REG_BASE(local) + IPI_IER_OFFSET,
|
uint64_t ier_offset = (uint64_t)(IPI_REG_BASE(local) + IPI_IER_OFFSET);
|
||||||
|
|
||||||
|
mmio_write_32(ier_offset,
|
||||||
IPI_BIT_MASK(remote));
|
IPI_BIT_MASK(remote));
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,8 +78,8 @@ uint64_t ipi_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
|
||||||
uint32_t ipi_remote_id;
|
uint32_t ipi_remote_id;
|
||||||
uint32_t is_secure;
|
uint32_t is_secure;
|
||||||
|
|
||||||
ipi_local_id = x1 & UNSIGNED32_MASK;
|
ipi_local_id = (uint32_t)(x1 & UNSIGNED32_MASK);
|
||||||
ipi_remote_id = x2 & UNSIGNED32_MASK;
|
ipi_remote_id = (uint32_t)(x2 & UNSIGNED32_MASK);
|
||||||
|
|
||||||
/* OEN Number 48 to 63 is for Trusted App and OS
|
/* OEN Number 48 to 63 is for Trusted App and OS
|
||||||
* GET_SMC_OEN limits the return value of OEN number to 63 by bitwise
|
* GET_SMC_OEN limits the return value of OEN number to 63 by bitwise
|
||||||
|
@ -106,11 +106,11 @@ uint64_t ipi_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
|
||||||
SMC_RET1(handle, 0);
|
SMC_RET1(handle, 0);
|
||||||
case IPI_MAILBOX_STATUS_ENQUIRY:
|
case IPI_MAILBOX_STATUS_ENQUIRY:
|
||||||
{
|
{
|
||||||
int32_t disable_interrupt;
|
bool disable_interrupt;
|
||||||
|
|
||||||
disable_interrupt = (x3 & IPI_SMC_ENQUIRY_DIRQ_MASK) ? 1 : 0;
|
disable_interrupt = ((x3 & IPI_SMC_ENQUIRY_DIRQ_MASK) != 0U);
|
||||||
ret = ipi_mb_enquire_status(ipi_local_id, ipi_remote_id);
|
ret = ipi_mb_enquire_status(ipi_local_id, ipi_remote_id);
|
||||||
if ((ret & IPI_MB_STATUS_RECV_PENDING) && disable_interrupt)
|
if ((((uint32_t)ret & IPI_MB_STATUS_RECV_PENDING) > 0U) && disable_interrupt)
|
||||||
ipi_mb_disable_irq(ipi_local_id, ipi_remote_id);
|
ipi_mb_disable_irq(ipi_local_id, ipi_remote_id);
|
||||||
SMC_RET1(handle, ret);
|
SMC_RET1(handle, ret);
|
||||||
}
|
}
|
||||||
|
@ -118,15 +118,15 @@ uint64_t ipi_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
|
||||||
{
|
{
|
||||||
uint32_t is_blocking;
|
uint32_t is_blocking;
|
||||||
|
|
||||||
is_blocking = (x3 & IPI_SMC_NOTIFY_BLOCK_MASK) ? 1 : 0;
|
is_blocking = ((x3 & IPI_SMC_NOTIFY_BLOCK_MASK) != 0U);
|
||||||
ipi_mb_notify(ipi_local_id, ipi_remote_id, is_blocking);
|
ipi_mb_notify(ipi_local_id, ipi_remote_id, is_blocking);
|
||||||
SMC_RET1(handle, 0);
|
SMC_RET1(handle, 0);
|
||||||
}
|
}
|
||||||
case IPI_MAILBOX_ACK:
|
case IPI_MAILBOX_ACK:
|
||||||
{
|
{
|
||||||
int32_t enable_interrupt;
|
bool enable_interrupt;
|
||||||
|
|
||||||
enable_interrupt = (x3 & IPI_SMC_ACK_EIRQ_MASK) ? 1 : 0;
|
enable_interrupt = ((x3 & IPI_SMC_ACK_EIRQ_MASK) != 0U);
|
||||||
ipi_mb_ack(ipi_local_id, ipi_remote_id);
|
ipi_mb_ack(ipi_local_id, ipi_remote_id);
|
||||||
if (enable_interrupt != 0)
|
if (enable_interrupt != 0)
|
||||||
ipi_mb_enable_irq(ipi_local_id, ipi_remote_id);
|
ipi_mb_enable_irq(ipi_local_id, ipi_remote_id);
|
||||||
|
|
|
@ -72,11 +72,13 @@
|
||||||
* Return: XBL_FLAGS_A53_0, XBL_FLAGS_A53_1, XBL_FLAGS_A53_2 or XBL_FLAGS_A53_3.
|
* Return: XBL_FLAGS_A53_0, XBL_FLAGS_A53_1, XBL_FLAGS_A53_2 or XBL_FLAGS_A53_3.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static int32_t get_xbl_cpu(const struct xbl_partition *partition)
|
static uint32_t get_xbl_cpu(const struct xbl_partition *partition)
|
||||||
{
|
{
|
||||||
uint64_t flags = partition->flags & XBL_FLAGS_CPU_MASK;
|
uint64_t flags = partition->flags & XBL_FLAGS_CPU_MASK;
|
||||||
|
|
||||||
return flags >> XBL_FLAGS_CPU_SHIFT;
|
flags >>= XBL_FLAGS_CPU_SHIFT;
|
||||||
|
|
||||||
|
return (uint32_t)flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -86,11 +88,13 @@ static int32_t get_xbl_cpu(const struct xbl_partition *partition)
|
||||||
* Return: XBL_FLAGS_EL0, XBL_FLAGS_EL1, XBL_FLAGS_EL2 or XBL_FLAGS_EL3.
|
* Return: XBL_FLAGS_EL0, XBL_FLAGS_EL1, XBL_FLAGS_EL2 or XBL_FLAGS_EL3.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static int32_t get_xbl_el(const struct xbl_partition *partition)
|
static uint32_t get_xbl_el(const struct xbl_partition *partition)
|
||||||
{
|
{
|
||||||
uint64_t flags = partition->flags & XBL_FLAGS_EL_MASK;
|
uint64_t flags = partition->flags & XBL_FLAGS_EL_MASK;
|
||||||
|
|
||||||
return flags >> XBL_FLAGS_EL_SHIFT;
|
flags >>= XBL_FLAGS_EL_SHIFT;
|
||||||
|
|
||||||
|
return (uint32_t)flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -100,11 +104,13 @@ static int32_t get_xbl_el(const struct xbl_partition *partition)
|
||||||
* Return: XBL_FLAGS_NON_SECURE or XBL_FLAGS_SECURE.
|
* Return: XBL_FLAGS_NON_SECURE or XBL_FLAGS_SECURE.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static int32_t get_xbl_ss(const struct xbl_partition *partition)
|
static uint32_t get_xbl_ss(const struct xbl_partition *partition)
|
||||||
{
|
{
|
||||||
uint64_t flags = partition->flags & XBL_FLAGS_TZ_MASK;
|
uint64_t flags = partition->flags & XBL_FLAGS_TZ_MASK;
|
||||||
|
|
||||||
return flags >> XBL_FLAGS_TZ_SHIFT;
|
flags >>= XBL_FLAGS_TZ_SHIFT;
|
||||||
|
|
||||||
|
return (uint32_t)flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -114,7 +120,7 @@ static int32_t get_xbl_ss(const struct xbl_partition *partition)
|
||||||
* Return: SPSR_E_LITTLE or SPSR_E_BIG.
|
* Return: SPSR_E_LITTLE or SPSR_E_BIG.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static int32_t get_xbl_endian(const struct xbl_partition *partition)
|
static uint32_t get_xbl_endian(const struct xbl_partition *partition)
|
||||||
{
|
{
|
||||||
uint64_t flags = partition->flags & XBL_FLAGS_ENDIAN_MASK;
|
uint64_t flags = partition->flags & XBL_FLAGS_ENDIAN_MASK;
|
||||||
|
|
||||||
|
@ -134,11 +140,13 @@ static int32_t get_xbl_endian(const struct xbl_partition *partition)
|
||||||
* Return: XBL_FLAGS_ESTATE_A32 or XBL_FLAGS_ESTATE_A64.
|
* Return: XBL_FLAGS_ESTATE_A32 or XBL_FLAGS_ESTATE_A64.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static int32_t get_xbl_estate(const struct xbl_partition *partition)
|
static uint32_t get_xbl_estate(const struct xbl_partition *partition)
|
||||||
{
|
{
|
||||||
uint64_t flags = partition->flags & XBL_FLAGS_ESTATE_MASK;
|
uint64_t flags = partition->flags & XBL_FLAGS_ESTATE_MASK;
|
||||||
|
|
||||||
return flags >> XBL_FLAGS_ESTATE_SHIFT;
|
flags >>= XBL_FLAGS_ESTATE_SHIFT;
|
||||||
|
|
||||||
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PLAT_versal_net)
|
#if defined(PLAT_versal_net)
|
||||||
|
@ -148,11 +156,11 @@ static int32_t get_xbl_estate(const struct xbl_partition *partition)
|
||||||
*
|
*
|
||||||
* Return: cluster number for the partition.
|
* Return: cluster number for the partition.
|
||||||
*/
|
*/
|
||||||
static int32_t get_xbl_cluster(const struct xbl_partition *partition)
|
static uint32_t get_xbl_cluster(const struct xbl_partition *partition)
|
||||||
{
|
{
|
||||||
uint64_t flags = partition->flags & XBL_FLAGS_CLUSTER_MASK;
|
uint64_t flags = partition->flags & XBL_FLAGS_CLUSTER_MASK;
|
||||||
|
|
||||||
return (int32_t)(flags >> XBL_FLAGS_CLUSTER_SHIFT);
|
return (flags >> XBL_FLAGS_CLUSTER_SHIFT);
|
||||||
}
|
}
|
||||||
#endif /* PLAT_versal_net */
|
#endif /* PLAT_versal_net */
|
||||||
|
|
||||||
|
@ -175,16 +183,16 @@ enum xbl_handoff xbl_handover(entry_point_info_t *bl32,
|
||||||
{
|
{
|
||||||
const struct xbl_handoff_params *HandoffParams;
|
const struct xbl_handoff_params *HandoffParams;
|
||||||
|
|
||||||
if (!handoff_addr) {
|
if (handoff_addr == 0U) {
|
||||||
WARN("BL31: No handoff structure passed\n");
|
WARN("BL31: No handoff structure passed\n");
|
||||||
return XBL_HANDOFF_NO_STRUCT;
|
return XBL_HANDOFF_NO_STRUCT;
|
||||||
}
|
}
|
||||||
|
|
||||||
HandoffParams = (struct xbl_handoff_params *)handoff_addr;
|
HandoffParams = (struct xbl_handoff_params *)handoff_addr;
|
||||||
if ((HandoffParams->magic[0] != 'X') ||
|
if ((HandoffParams->magic[0] != (uint8_t)'X') ||
|
||||||
(HandoffParams->magic[1] != 'L') ||
|
(HandoffParams->magic[1] != (uint8_t)'L') ||
|
||||||
(HandoffParams->magic[2] != 'N') ||
|
(HandoffParams->magic[2] != (uint8_t)'N') ||
|
||||||
(HandoffParams->magic[3] != 'X')) {
|
(HandoffParams->magic[3] != (uint8_t)'X')) {
|
||||||
ERROR("BL31: invalid handoff structure at %" PRIx64 "\n", handoff_addr);
|
ERROR("BL31: invalid handoff structure at %" PRIx64 "\n", handoff_addr);
|
||||||
return XBL_HANDOFF_INVAL_STRUCT;
|
return XBL_HANDOFF_INVAL_STRUCT;
|
||||||
}
|
}
|
||||||
|
@ -204,7 +212,7 @@ enum xbl_handoff xbl_handover(entry_point_info_t *bl32,
|
||||||
*/
|
*/
|
||||||
for (size_t i = 0; i < HandoffParams->num_entries; i++) {
|
for (size_t i = 0; i < HandoffParams->num_entries; i++) {
|
||||||
entry_point_info_t *image;
|
entry_point_info_t *image;
|
||||||
int32_t target_estate, target_secure, target_cpu;
|
uint32_t target_estate, target_secure, target_cpu;
|
||||||
uint32_t target_endianness, target_el;
|
uint32_t target_endianness, target_el;
|
||||||
|
|
||||||
VERBOSE("BL31: %zd: entry:0x%" PRIx64 ", flags:0x%" PRIx64 "\n", i,
|
VERBOSE("BL31: %zd: entry:0x%" PRIx64 ", flags:0x%" PRIx64 "\n", i,
|
||||||
|
@ -251,8 +259,8 @@ enum xbl_handoff xbl_handover(entry_point_info_t *bl32,
|
||||||
image = bl32;
|
image = bl32;
|
||||||
|
|
||||||
if (target_estate == XBL_FLAGS_ESTATE_A32) {
|
if (target_estate == XBL_FLAGS_ESTATE_A32) {
|
||||||
bl32->spsr = SPSR_MODE32(MODE32_svc, SPSR_T_ARM,
|
bl32->spsr = (uint32_t)SPSR_MODE32(MODE32_svc, SPSR_T_ARM,
|
||||||
target_endianness,
|
(uint64_t)target_endianness,
|
||||||
DISABLE_ALL_EXCEPTIONS);
|
DISABLE_ALL_EXCEPTIONS);
|
||||||
} else {
|
} else {
|
||||||
bl32->spsr = SPSR_64(MODE_EL1, MODE_SP_ELX,
|
bl32->spsr = SPSR_64(MODE_EL1, MODE_SP_ELX,
|
||||||
|
@ -268,8 +276,8 @@ enum xbl_handoff xbl_handover(entry_point_info_t *bl32,
|
||||||
target_el = MODE32_sys;
|
target_el = MODE32_sys;
|
||||||
}
|
}
|
||||||
|
|
||||||
bl33->spsr = SPSR_MODE32(target_el, SPSR_T_ARM,
|
bl33->spsr = (uint32_t)SPSR_MODE32((uint64_t)target_el, SPSR_T_ARM,
|
||||||
target_endianness,
|
(uint64_t)target_endianness,
|
||||||
DISABLE_ALL_EXCEPTIONS);
|
DISABLE_ALL_EXCEPTIONS);
|
||||||
} else {
|
} else {
|
||||||
if (target_el == XBL_FLAGS_EL2) {
|
if (target_el == XBL_FLAGS_EL2) {
|
||||||
|
@ -278,7 +286,7 @@ enum xbl_handoff xbl_handover(entry_point_info_t *bl32,
|
||||||
target_el = MODE_EL1;
|
target_el = MODE_EL1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bl33->spsr = SPSR_64(target_el, MODE_SP_ELX,
|
bl33->spsr = (uint32_t)SPSR_64((uint64_t)target_el, MODE_SP_ELX,
|
||||||
DISABLE_ALL_EXCEPTIONS);
|
DISABLE_ALL_EXCEPTIONS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,8 @@ void pm_client_set_wakeup_sources(uint32_t node_id)
|
||||||
|
|
||||||
for (reg_num = 0U; reg_num < NUM_GICD_ISENABLER; reg_num++) {
|
for (reg_num = 0U; reg_num < NUM_GICD_ISENABLER; reg_num++) {
|
||||||
uint32_t base_irq = reg_num << ISENABLER_SHIFT;
|
uint32_t base_irq = reg_num << ISENABLER_SHIFT;
|
||||||
uint32_t reg = mmio_read_32(isenabler1 + (reg_num << 2));
|
isenabler1 += (reg_num << 2);
|
||||||
|
uint32_t reg = mmio_read_32((uint64_t)isenabler1);
|
||||||
|
|
||||||
if (reg == 0U) {
|
if (reg == 0U) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -117,7 +118,7 @@ enum pm_ret_status pm_handle_eemi_call(uint32_t flag, uint32_t x0, uint32_t x1,
|
||||||
module_id = (x0 & MODULE_ID_MASK) >> 8U;
|
module_id = (x0 & MODULE_ID_MASK) >> 8U;
|
||||||
|
|
||||||
//default module id is for LIBPM
|
//default module id is for LIBPM
|
||||||
if (module_id == 0) {
|
if (module_id == 0U) {
|
||||||
module_id = LIBPM_MODULE_ID;
|
module_id = LIBPM_MODULE_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,7 +219,7 @@ enum pm_ret_status pm_req_suspend(uint32_t target, uint8_t ack,
|
||||||
/* Send request to the PMU */
|
/* Send request to the PMU */
|
||||||
PM_PACK_PAYLOAD4(payload, LIBPM_MODULE_ID, flag, PM_REQ_SUSPEND, target,
|
PM_PACK_PAYLOAD4(payload, LIBPM_MODULE_ID, flag, PM_REQ_SUSPEND, target,
|
||||||
latency, state);
|
latency, state);
|
||||||
if (ack == IPI_BLOCKING) {
|
if (ack == (uint32_t)IPI_BLOCKING) {
|
||||||
return pm_ipi_send_sync(primary_proc, payload, NULL, 0);
|
return pm_ipi_send_sync(primary_proc, payload, NULL, 0);
|
||||||
} else {
|
} else {
|
||||||
return pm_ipi_send(primary_proc, payload);
|
return pm_ipi_send(primary_proc, payload);
|
||||||
|
@ -273,7 +274,7 @@ enum pm_ret_status pm_get_callbackdata(uint32_t *data, size_t count, uint32_t fl
|
||||||
{
|
{
|
||||||
enum pm_ret_status ret = PM_RET_SUCCESS;
|
enum pm_ret_status ret = PM_RET_SUCCESS;
|
||||||
/* Return if interrupt is not from PMU */
|
/* Return if interrupt is not from PMU */
|
||||||
if (pm_ipi_irq_status(primary_proc) == 0) {
|
if (pm_ipi_irq_status(primary_proc) == 0U) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -306,7 +307,7 @@ enum pm_ret_status pm_force_powerdown(uint32_t target, uint8_t ack,
|
||||||
PM_PACK_PAYLOAD3(payload, LIBPM_MODULE_ID, flag, PM_FORCE_POWERDOWN,
|
PM_PACK_PAYLOAD3(payload, LIBPM_MODULE_ID, flag, PM_FORCE_POWERDOWN,
|
||||||
target, ack);
|
target, ack);
|
||||||
|
|
||||||
if (ack == IPI_BLOCKING) {
|
if (ack == (uint32_t)IPI_BLOCKING) {
|
||||||
return pm_ipi_send_sync(primary_proc, payload, NULL, 0);
|
return pm_ipi_send_sync(primary_proc, payload, NULL, 0);
|
||||||
} else {
|
} else {
|
||||||
return pm_ipi_send(primary_proc, payload);
|
return pm_ipi_send(primary_proc, payload);
|
||||||
|
@ -431,7 +432,7 @@ enum pm_ret_status pm_feature_check(uint32_t api_id, uint32_t *ret_payload,
|
||||||
* feature check should be done only for LIBPM module
|
* feature check should be done only for LIBPM module
|
||||||
* If module_id is 0, then we consider it LIBPM module as default id
|
* If module_id is 0, then we consider it LIBPM module as default id
|
||||||
*/
|
*/
|
||||||
if ((module_id > 0) && (module_id != LIBPM_MODULE_ID)) {
|
if ((module_id > 0U) && (module_id != LIBPM_MODULE_ID)) {
|
||||||
return PM_RET_SUCCESS;
|
return PM_RET_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -226,7 +226,7 @@ enum pm_ret_status pm_ipi_buff_read_callb(uint32_t *value, size_t count)
|
||||||
IPI_BUFFER_REQ_OFFSET;
|
IPI_BUFFER_REQ_OFFSET;
|
||||||
enum pm_ret_status ret = PM_RET_SUCCESS;
|
enum pm_ret_status ret = PM_RET_SUCCESS;
|
||||||
|
|
||||||
if (local_count > IPI_BUFFER_MAX_WORDS) {
|
if (local_count > (uint32_t)IPI_BUFFER_MAX_WORDS) {
|
||||||
local_count = IPI_BUFFER_MAX_WORDS;
|
local_count = IPI_BUFFER_MAX_WORDS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,7 +273,7 @@ enum pm_ret_status pm_ipi_send_sync(const struct pm_proc *proc,
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ERROR_CODE_MASK & (pm_ipi_buff_read(proc, value, count));
|
ret = ERROR_CODE_MASK & (uint32_t)(pm_ipi_buff_read(proc, value, count));
|
||||||
|
|
||||||
unlock:
|
unlock:
|
||||||
pm_ipi_lock_release();
|
pm_ipi_lock_release();
|
||||||
|
@ -297,7 +297,7 @@ uint32_t pm_ipi_irq_status(const struct pm_proc *proc)
|
||||||
|
|
||||||
ret = ipi_mb_enquire_status(proc->ipi->local_ipi_id,
|
ret = ipi_mb_enquire_status(proc->ipi->local_ipi_id,
|
||||||
proc->ipi->remote_ipi_id);
|
proc->ipi->remote_ipi_id);
|
||||||
if (ret & IPI_MB_STATUS_RECV_PENDING) {
|
if (((uint32_t)ret & IPI_MB_STATUS_RECV_PENDING) != 0U) {
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -113,7 +113,7 @@ void request_cpu_pwrdwn(void)
|
||||||
|
|
||||||
/* Send powerdown request to online secondary core(s) */
|
/* Send powerdown request to online secondary core(s) */
|
||||||
ret = psci_stop_other_cores(PWRDWN_WAIT_TIMEOUT, raise_pwr_down_interrupt);
|
ret = psci_stop_other_cores(PWRDWN_WAIT_TIMEOUT, raise_pwr_down_interrupt);
|
||||||
if (ret != PSCI_E_SUCCESS) {
|
if (ret != (uint32_t)PSCI_E_SUCCESS) {
|
||||||
ERROR("Failed to powerdown secondary core(s)\n");
|
ERROR("Failed to powerdown secondary core(s)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,11 +140,11 @@ static uint64_t ipi_fiq_handler(uint32_t id, uint32_t flags, void *handle,
|
||||||
(void)plat_ic_acknowledge_interrupt();
|
(void)plat_ic_acknowledge_interrupt();
|
||||||
|
|
||||||
/* Check status register for each IPI except PMC */
|
/* Check status register for each IPI except PMC */
|
||||||
for (i = IPI_ID_APU; i <= IPI_ID_5; i++) {
|
for (i = (int32_t)IPI_ID_APU; i <= IPI_ID_5; i++) {
|
||||||
ipi_status = ipi_mb_enquire_status(IPI_ID_APU, i);
|
ipi_status = ipi_mb_enquire_status(IPI_ID_APU, i);
|
||||||
|
|
||||||
/* If any agent other than PMC has generated IPI FIQ then send SGI to mbox driver */
|
/* If any agent other than PMC has generated IPI FIQ then send SGI to mbox driver */
|
||||||
if (ipi_status & IPI_MB_STATUS_RECV_PENDING) {
|
if ((uint32_t)ipi_status & IPI_MB_STATUS_RECV_PENDING) {
|
||||||
plat_ic_raise_ns_sgi(MBOX_SGI_SHARED_IPI, read_mpidr_el1());
|
plat_ic_raise_ns_sgi(MBOX_SGI_SHARED_IPI, read_mpidr_el1());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -152,7 +152,7 @@ static uint64_t ipi_fiq_handler(uint32_t id, uint32_t flags, void *handle,
|
||||||
|
|
||||||
/* If PMC has not generated interrupt then end ISR */
|
/* If PMC has not generated interrupt then end ISR */
|
||||||
ipi_status = ipi_mb_enquire_status(IPI_ID_APU, IPI_ID_PMC);
|
ipi_status = ipi_mb_enquire_status(IPI_ID_APU, IPI_ID_PMC);
|
||||||
if ((ipi_status & IPI_MB_STATUS_RECV_PENDING) == 0) {
|
if (((uint32_t)ipi_status & IPI_MB_STATUS_RECV_PENDING) == 0U) {
|
||||||
plat_ic_end_of_interrupt(id);
|
plat_ic_end_of_interrupt(id);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -160,7 +160,7 @@ static uint64_t ipi_fiq_handler(uint32_t id, uint32_t flags, void *handle,
|
||||||
/* Handle PMC case */
|
/* Handle PMC case */
|
||||||
ret = pm_get_callbackdata(payload, ARRAY_SIZE(payload), 0, 0);
|
ret = pm_get_callbackdata(payload, ARRAY_SIZE(payload), 0, 0);
|
||||||
if (ret != PM_RET_SUCCESS) {
|
if (ret != PM_RET_SUCCESS) {
|
||||||
payload[0] = ret;
|
payload[0] = (uint32_t)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (payload[0]) {
|
switch (payload[0]) {
|
||||||
|
@ -278,7 +278,7 @@ int32_t pm_setup(void)
|
||||||
gicd_write_irouter(gicv3_driver_data->gicd_base, PLAT_VERSAL_IPI_IRQ, MODE);
|
gicd_write_irouter(gicv3_driver_data->gicd_base, PLAT_VERSAL_IPI_IRQ, MODE);
|
||||||
|
|
||||||
/* Register for idle callback during force power down/restart */
|
/* Register for idle callback during force power down/restart */
|
||||||
ret = pm_register_notifier(primary_proc->node_id, EVENT_CPU_PWRDWN,
|
ret = (int32_t)pm_register_notifier(primary_proc->node_id, EVENT_CPU_PWRDWN,
|
||||||
0x0U, 0x1U, SECURE_FLAG);
|
0x0U, 0x1U, SECURE_FLAG);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
WARN("BL31: registering idle callback for restart/force power down failed\n");
|
WARN("BL31: registering idle callback for restart/force power down failed\n");
|
||||||
|
@ -428,7 +428,7 @@ static uintptr_t TF_A_specific_handler(uint32_t api_id, uint32_t *pm_arg,
|
||||||
|
|
||||||
ret = pm_get_callbackdata(result, ARRAY_SIZE(result), security_flag, 1U);
|
ret = pm_get_callbackdata(result, ARRAY_SIZE(result), security_flag, 1U);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
result[0] = ret;
|
result[0] = (uint32_t)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
SMC_RET2(handle,
|
SMC_RET2(handle,
|
||||||
|
@ -478,8 +478,8 @@ static uintptr_t eemi_handler(uint32_t api_id, uint32_t *pm_arg,
|
||||||
* than other eemi calls.
|
* than other eemi calls.
|
||||||
*/
|
*/
|
||||||
if (api_id == (uint32_t)PM_QUERY_DATA) {
|
if (api_id == (uint32_t)PM_QUERY_DATA) {
|
||||||
if (((pm_arg[0] == XPM_QID_CLOCK_GET_NAME) ||
|
if (((pm_arg[0] == (uint32_t)XPM_QID_CLOCK_GET_NAME) ||
|
||||||
(pm_arg[0] == XPM_QID_PINCTRL_GET_FUNCTION_NAME)) &&
|
(pm_arg[0] == (uint32_t)XPM_QID_PINCTRL_GET_FUNCTION_NAME)) &&
|
||||||
(ret == PM_RET_SUCCESS)) {
|
(ret == PM_RET_SUCCESS)) {
|
||||||
SMC_RET2(handle, (uint64_t)buf[0] | ((uint64_t)buf[1] << 32U),
|
SMC_RET2(handle, (uint64_t)buf[0] | ((uint64_t)buf[1] << 32U),
|
||||||
(uint64_t)buf[2] | ((uint64_t)buf[3] << 32U));
|
(uint64_t)buf[2] | ((uint64_t)buf[3] << 32U));
|
||||||
|
|
|
@ -60,5 +60,5 @@ int32_t plat_get_soc_version(void)
|
||||||
*/
|
*/
|
||||||
int32_t plat_get_soc_revision(void)
|
int32_t plat_get_soc_revision(void)
|
||||||
{
|
{
|
||||||
return (platform_id & SOC_ID_REV_MASK);
|
return (int32_t)(platform_id & SOC_ID_REV_MASK);
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,7 +117,7 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
|
||||||
SET_PARAM_HEAD(&bl33_image_ep_info, PARAM_EP, VERSION_1, 0);
|
SET_PARAM_HEAD(&bl33_image_ep_info, PARAM_EP, VERSION_1, 0);
|
||||||
SET_SECURITY_STATE(bl33_image_ep_info.h.attr, NON_SECURE);
|
SET_SECURITY_STATE(bl33_image_ep_info.h.attr, NON_SECURE);
|
||||||
|
|
||||||
PM_PACK_PAYLOAD4(payload, LOADER_MODULE_ID, 1, PM_LOAD_GET_HANDOFF_PARAMS,
|
PM_PACK_PAYLOAD4(payload, LOADER_MODULE_ID, 1U, PM_LOAD_GET_HANDOFF_PARAMS,
|
||||||
(uintptr_t)addr >> 32U, (uintptr_t)addr, max_size);
|
(uintptr_t)addr >> 32U, (uintptr_t)addr, max_size);
|
||||||
ret_status = pm_ipi_send_sync(primary_proc, payload, NULL, 0);
|
ret_status = pm_ipi_send_sync(primary_proc, payload, NULL, 0);
|
||||||
if (ret_status == PM_RET_SUCCESS) {
|
if (ret_status == PM_RET_SUCCESS) {
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#define PLATFORM_VERSION_MASK GENMASK(31U, 28U)
|
#define PLATFORM_VERSION_MASK GENMASK(31U, 28U)
|
||||||
|
|
||||||
/* number of interrupt handlers. increase as required */
|
/* number of interrupt handlers. increase as required */
|
||||||
#define MAX_INTR_EL3 2
|
#define MAX_INTR_EL3 2U
|
||||||
/* List all consoles */
|
/* List all consoles */
|
||||||
#define VERSAL_CONSOLE_ID_none 0
|
#define VERSAL_CONSOLE_ID_none 0
|
||||||
#define VERSAL_CONSOLE_ID_pl011 1
|
#define VERSAL_CONSOLE_ID_pl011 1
|
||||||
|
|
|
@ -222,7 +222,7 @@ static void versal_pwr_domain_off(const psci_power_state_t *target_state)
|
||||||
* be set.
|
* be set.
|
||||||
*/
|
*/
|
||||||
ret = pm_feature_check((uint32_t)PM_SELF_SUSPEND, &version_type[0], SECURE_FLAG);
|
ret = pm_feature_check((uint32_t)PM_SELF_SUSPEND, &version_type[0], SECURE_FLAG);
|
||||||
if (ret == PM_RET_SUCCESS) {
|
if (ret == (uint32_t)PM_RET_SUCCESS) {
|
||||||
fw_api_version = version_type[0] & 0xFFFFU;
|
fw_api_version = version_type[0] & 0xFFFFU;
|
||||||
if (fw_api_version >= 3U) {
|
if (fw_api_version >= 3U) {
|
||||||
(void)pm_self_suspend(proc->node_id, MAX_LATENCY, PM_STATE_CPU_OFF, 0,
|
(void)pm_self_suspend(proc->node_id, MAX_LATENCY, PM_STATE_CPU_OFF, 0,
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "pm_defs.h"
|
#include "pm_defs.h"
|
||||||
#include <versal_def.h>
|
#include <versal_def.h>
|
||||||
|
|
||||||
#define UNDEFINED_CPUID (~0)
|
#define UNDEFINED_CPUID (~0U)
|
||||||
|
|
||||||
DEFINE_BAKERY_LOCK(pm_client_secure_lock);
|
DEFINE_BAKERY_LOCK(pm_client_secure_lock);
|
||||||
|
|
||||||
|
@ -232,12 +232,16 @@ void pm_client_abort_suspend(void)
|
||||||
*/
|
*/
|
||||||
static uint32_t pm_get_cpuid(uint32_t nid)
|
static uint32_t pm_get_cpuid(uint32_t nid)
|
||||||
{
|
{
|
||||||
for (size_t i = 0U; i < ARRAY_SIZE(pm_procs_all); i++) {
|
uint32_t ret = UNDEFINED_CPUID;
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
for (i = 0U; i < ARRAY_SIZE(pm_procs_all); i++) {
|
||||||
if (pm_procs_all[i].node_id == nid) {
|
if (pm_procs_all[i].node_id == nid) {
|
||||||
return i;
|
ret = i;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return UNDEFINED_CPUID;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -55,7 +55,7 @@ static inline void bl31_set_default_config(void)
|
||||||
bl32_image_ep_info.pc = BL32_BASE;
|
bl32_image_ep_info.pc = BL32_BASE;
|
||||||
bl32_image_ep_info.spsr = arm_get_spsr_for_bl32_entry();
|
bl32_image_ep_info.spsr = arm_get_spsr_for_bl32_entry();
|
||||||
bl33_image_ep_info.pc = plat_get_ns_image_entrypoint();
|
bl33_image_ep_info.pc = plat_get_ns_image_entrypoint();
|
||||||
bl33_image_ep_info.spsr = SPSR_64(MODE_EL2, MODE_SP_ELX,
|
bl33_image_ep_info.spsr = (uint32_t)SPSR_64(MODE_EL2, MODE_SP_ELX,
|
||||||
DISABLE_ALL_EXCEPTIONS);
|
DISABLE_ALL_EXCEPTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
|
||||||
SET_PARAM_HEAD(&bl33_image_ep_info, PARAM_EP, VERSION_1, 0);
|
SET_PARAM_HEAD(&bl33_image_ep_info, PARAM_EP, VERSION_1, 0);
|
||||||
SET_SECURITY_STATE(bl33_image_ep_info.h.attr, NON_SECURE);
|
SET_SECURITY_STATE(bl33_image_ep_info.h.attr, NON_SECURE);
|
||||||
#if !(TFA_NO_PM)
|
#if !(TFA_NO_PM)
|
||||||
PM_PACK_PAYLOAD4(payload, LOADER_MODULE_ID, 1, PM_LOAD_GET_HANDOFF_PARAMS,
|
PM_PACK_PAYLOAD4(payload, LOADER_MODULE_ID, 1U, PM_LOAD_GET_HANDOFF_PARAMS,
|
||||||
(uintptr_t)buff >> 32U, (uintptr_t)buff, max_size);
|
(uintptr_t)buff >> 32U, (uintptr_t)buff, max_size);
|
||||||
|
|
||||||
ret_status = pm_ipi_send_sync(primary_proc, payload, NULL, 0);
|
ret_status = pm_ipi_send_sync(primary_proc, payload, NULL, 0);
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include <plat/arm/common/smccc_def.h>
|
#include <plat/arm/common/smccc_def.h>
|
||||||
#include <plat/common/common_def.h>
|
#include <plat/common/common_def.h>
|
||||||
|
|
||||||
#define MAX_INTR_EL3 2
|
#define MAX_INTR_EL3 2U
|
||||||
|
|
||||||
/* List all consoles */
|
/* List all consoles */
|
||||||
#define VERSAL_NET_CONSOLE_ID_none U(0)
|
#define VERSAL_NET_CONSOLE_ID_none U(0)
|
||||||
|
|
|
@ -27,7 +27,7 @@ static uintptr_t versal_net_sec_entry;
|
||||||
|
|
||||||
static int32_t versal_net_pwr_domain_on(u_register_t mpidr)
|
static int32_t versal_net_pwr_domain_on(u_register_t mpidr)
|
||||||
{
|
{
|
||||||
uint32_t cpu_id = plat_core_pos_by_mpidr(mpidr);
|
int32_t cpu_id = plat_core_pos_by_mpidr(mpidr);
|
||||||
const struct pm_proc *proc;
|
const struct pm_proc *proc;
|
||||||
|
|
||||||
VERBOSE("%s: mpidr: 0x%lx, cpuid: %x\n",
|
VERBOSE("%s: mpidr: 0x%lx, cpuid: %x\n",
|
||||||
|
@ -84,7 +84,7 @@ static void versal_net_pwr_domain_off(const psci_power_state_t *target_state)
|
||||||
* be set.
|
* be set.
|
||||||
*/
|
*/
|
||||||
ret = pm_feature_check((uint32_t)PM_SELF_SUSPEND, &version_type[0], SECURE_FLAG);
|
ret = pm_feature_check((uint32_t)PM_SELF_SUSPEND, &version_type[0], SECURE_FLAG);
|
||||||
if (ret == PM_RET_SUCCESS) {
|
if (ret == (uint32_t)PM_RET_SUCCESS) {
|
||||||
fw_api_version = version_type[0] & 0xFFFFU;
|
fw_api_version = version_type[0] & 0xFFFFU;
|
||||||
if (fw_api_version >= 3U) {
|
if (fw_api_version >= 3U) {
|
||||||
(void)pm_self_suspend(proc->node_id, MAX_LATENCY, PM_STATE_CPU_OFF, 0,
|
(void)pm_self_suspend(proc->node_id, MAX_LATENCY, PM_STATE_CPU_OFF, 0,
|
||||||
|
@ -245,7 +245,7 @@ static int32_t versal_net_validate_power_state(unsigned int power_state,
|
||||||
{
|
{
|
||||||
VERBOSE("%s: power_state: 0x%x\n", __func__, power_state);
|
VERBOSE("%s: power_state: 0x%x\n", __func__, power_state);
|
||||||
|
|
||||||
int32_t pstate = psci_get_pstate_type(power_state);
|
uint32_t pstate = psci_get_pstate_type(power_state);
|
||||||
|
|
||||||
assert(req_state != NULL);
|
assert(req_state != NULL);
|
||||||
|
|
||||||
|
|
|
@ -44,8 +44,8 @@ int32_t plat_core_pos_by_mpidr(u_register_t mpidr)
|
||||||
|
|
||||||
mpidr &= MPIDR_AFFINITY_MASK;
|
mpidr &= MPIDR_AFFINITY_MASK;
|
||||||
|
|
||||||
cluster_id = MPIDR_AFFLVL2_VAL(mpidr);
|
cluster_id = (uint32_t)MPIDR_AFFLVL2_VAL(mpidr);
|
||||||
cpu_id = MPIDR_AFFLVL1_VAL(mpidr);
|
cpu_id = (uint32_t)MPIDR_AFFLVL1_VAL(mpidr);
|
||||||
|
|
||||||
if (cluster_id >= PLATFORM_CLUSTER_COUNT) {
|
if (cluster_id >= PLATFORM_CLUSTER_COUNT) {
|
||||||
return -3;
|
return -3;
|
||||||
|
@ -59,5 +59,5 @@ int32_t plat_core_pos_by_mpidr(u_register_t mpidr)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (cpu_id + (cluster_id * PLATFORM_CORE_COUNT_PER_CLUSTER));
|
return (int32_t)(cpu_id + (cluster_id * PLATFORM_CORE_COUNT_PER_CLUSTER));
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "pm_client.h"
|
#include "pm_client.h"
|
||||||
#include <versal_net_def.h>
|
#include <versal_net_def.h>
|
||||||
|
|
||||||
#define UNDEFINED_CPUID (~0)
|
#define UNDEFINED_CPUID (~0U)
|
||||||
|
|
||||||
DEFINE_RENAME_SYSREG_RW_FUNCS(cpu_pwrctrl_val, S3_0_C15_C2_7)
|
DEFINE_RENAME_SYSREG_RW_FUNCS(cpu_pwrctrl_val, S3_0_C15_C2_7)
|
||||||
|
|
||||||
|
@ -340,12 +340,16 @@ void pm_client_suspend(const struct pm_proc *proc, uint32_t state)
|
||||||
*/
|
*/
|
||||||
static uint32_t pm_get_cpuid(uint32_t nid)
|
static uint32_t pm_get_cpuid(uint32_t nid)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < ARRAY_SIZE(pm_procs_all); i++) {
|
uint32_t ret = UNDEFINED_CPUID;
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(pm_procs_all); i++) {
|
||||||
if (pm_procs_all[i].node_id == nid) {
|
if (pm_procs_all[i].node_id == nid) {
|
||||||
return i;
|
ret = i;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return UNDEFINED_CPUID;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -42,9 +42,9 @@ const mmap_region_t *plat_get_mmap(void)
|
||||||
|
|
||||||
static uint32_t zynqmp_get_silicon_ver(void)
|
static uint32_t zynqmp_get_silicon_ver(void)
|
||||||
{
|
{
|
||||||
static unsigned int ver;
|
static uint32_t ver;
|
||||||
|
|
||||||
if (!ver) {
|
if (ver == 0U) {
|
||||||
ver = mmio_read_32(ZYNQMP_CSU_BASEADDR +
|
ver = mmio_read_32(ZYNQMP_CSU_BASEADDR +
|
||||||
ZYNQMP_CSU_VERSION_OFFSET);
|
ZYNQMP_CSU_VERSION_OFFSET);
|
||||||
ver &= ZYNQMP_SILICON_VER_MASK;
|
ver &= ZYNQMP_SILICON_VER_MASK;
|
||||||
|
@ -270,7 +270,7 @@ static char *zynqmp_get_silicon_idcode_name(void)
|
||||||
return zynqmp_devices[i].name;
|
return zynqmp_devices[i].name;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = strlen(zynqmp_devices[i].name) - 2;
|
len = strlen(zynqmp_devices[i].name) - 2U;
|
||||||
for (j = 0; j < strlen(name); j++) {
|
for (j = 0; j < strlen(name); j++) {
|
||||||
zynqmp_devices[i].name[len] = name[j];
|
zynqmp_devices[i].name[len] = name[j];
|
||||||
len++;
|
len++;
|
||||||
|
@ -326,13 +326,14 @@ int32_t plat_get_soc_version(void)
|
||||||
{
|
{
|
||||||
uint32_t chip_id = zynqmp_get_silicon_ver();
|
uint32_t chip_id = zynqmp_get_silicon_ver();
|
||||||
uint32_t manfid = SOC_ID_SET_JEP_106(JEDEC_XILINX_BKID, JEDEC_XILINX_MFID);
|
uint32_t manfid = SOC_ID_SET_JEP_106(JEDEC_XILINX_BKID, JEDEC_XILINX_MFID);
|
||||||
|
uint32_t result = (manfid | (chip_id & 0xFFFFU));
|
||||||
|
|
||||||
return (int32_t)(manfid | (chip_id & 0xFFFF));
|
return (int32_t)result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t plat_get_soc_revision(void)
|
int32_t plat_get_soc_revision(void)
|
||||||
{
|
{
|
||||||
return mmio_read_32(ZYNQMP_CSU_BASEADDR + ZYNQMP_CSU_IDCODE_OFFSET);
|
return (int32_t)mmio_read_32(ZYNQMP_CSU_BASEADDR + ZYNQMP_CSU_IDCODE_OFFSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t zynqmp_get_ps_ver(void)
|
static uint32_t zynqmp_get_ps_ver(void)
|
||||||
|
@ -366,7 +367,7 @@ static void zynqmp_print_platform_name(void)
|
||||||
VERBOSE("TF-A running on %s/%s at 0x%x\n",
|
VERBOSE("TF-A running on %s/%s at 0x%x\n",
|
||||||
zynqmp_print_silicon_idcode(), label, BL31_BASE);
|
zynqmp_print_silicon_idcode(), label, BL31_BASE);
|
||||||
VERBOSE("TF-A running on v%d/RTL%d.%d\n",
|
VERBOSE("TF-A running on v%d/RTL%d.%d\n",
|
||||||
zynqmp_get_ps_ver(), (rtl & 0xf0) >> 4, rtl & 0xf);
|
zynqmp_get_ps_ver(), (rtl & 0xf0U) >> 4U, rtl & 0xfU);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void zynqmp_print_platform_name(void) { }
|
static inline void zynqmp_print_platform_name(void) { }
|
||||||
|
@ -375,7 +376,7 @@ static inline void zynqmp_print_platform_name(void) { }
|
||||||
uint32_t zynqmp_get_bootmode(void)
|
uint32_t zynqmp_get_bootmode(void)
|
||||||
{
|
{
|
||||||
uint32_t r;
|
uint32_t r;
|
||||||
unsigned int ret;
|
enum pm_ret_status ret;
|
||||||
|
|
||||||
ret = pm_mmio_read(CRL_APB_BOOT_MODE_USER, &r);
|
ret = pm_mmio_read(CRL_APB_BOOT_MODE_USER, &r);
|
||||||
|
|
||||||
|
@ -411,6 +412,6 @@ uint32_t plat_get_syscnt_freq2(void)
|
||||||
if (ver == ZYNQMP_CSU_VERSION_QEMU) {
|
if (ver == ZYNQMP_CSU_VERSION_QEMU) {
|
||||||
return 65000000;
|
return 65000000;
|
||||||
} else {
|
} else {
|
||||||
return mmio_read_32(IOU_SCNTRS_BASEFREQ);
|
return mmio_read_32((uint64_t)IOU_SCNTRS_BASEFREQ);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ static inline void bl31_set_default_config(void)
|
||||||
bl32_image_ep_info.pc = BL32_BASE;
|
bl32_image_ep_info.pc = BL32_BASE;
|
||||||
bl32_image_ep_info.spsr = arm_get_spsr_for_bl32_entry();
|
bl32_image_ep_info.spsr = arm_get_spsr_for_bl32_entry();
|
||||||
bl33_image_ep_info.pc = plat_get_ns_image_entrypoint();
|
bl33_image_ep_info.pc = plat_get_ns_image_entrypoint();
|
||||||
bl33_image_ep_info.spsr = SPSR_64(MODE_EL2, MODE_SP_ELX,
|
bl33_image_ep_info.spsr = (uint32_t)SPSR_64(MODE_EL2, MODE_SP_ELX,
|
||||||
DISABLE_ALL_EXCEPTIONS);
|
DISABLE_ALL_EXCEPTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
|
||||||
SET_PARAM_HEAD(&bl33_image_ep_info, PARAM_EP, VERSION_1, 0);
|
SET_PARAM_HEAD(&bl33_image_ep_info, PARAM_EP, VERSION_1, 0);
|
||||||
SET_SECURITY_STATE(bl33_image_ep_info.h.attr, NON_SECURE);
|
SET_SECURITY_STATE(bl33_image_ep_info.h.attr, NON_SECURE);
|
||||||
|
|
||||||
tfa_handoff_addr = mmio_read_32(PMU_GLOBAL_GEN_STORAGE6);
|
tfa_handoff_addr = (uint64_t)mmio_read_32(PMU_GLOBAL_GEN_STORAGE6);
|
||||||
|
|
||||||
if (zynqmp_get_bootmode() == ZYNQMP_BOOTMODE_JTAG) {
|
if (zynqmp_get_bootmode() == ZYNQMP_BOOTMODE_JTAG) {
|
||||||
bl31_set_default_config();
|
bl31_set_default_config();
|
||||||
|
@ -109,10 +109,10 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
|
||||||
panic();
|
panic();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bl32_image_ep_info.pc != 0) {
|
if (bl32_image_ep_info.pc != 0U) {
|
||||||
NOTICE("BL31: Secure code at 0x%lx\n", bl32_image_ep_info.pc);
|
NOTICE("BL31: Secure code at 0x%lx\n", bl32_image_ep_info.pc);
|
||||||
}
|
}
|
||||||
if (bl33_image_ep_info.pc != 0) {
|
if (bl33_image_ep_info.pc != 0U) {
|
||||||
NOTICE("BL31: Non secure code at 0x%lx\n", bl33_image_ep_info.pc);
|
NOTICE("BL31: Non secure code at 0x%lx\n", bl33_image_ep_info.pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,9 +60,9 @@
|
||||||
|
|
||||||
/* CRL registers and bitfields */
|
/* CRL registers and bitfields */
|
||||||
#define CRL_APB_BASE U(0xFF5E0000)
|
#define CRL_APB_BASE U(0xFF5E0000)
|
||||||
#define CRL_APB_BOOT_MODE_USER (CRL_APB_BASE + 0x200)
|
#define CRL_APB_BOOT_MODE_USER (CRL_APB_BASE + U(0x200))
|
||||||
#define CRL_APB_RESET_CTRL (CRL_APB_BASE + 0x218)
|
#define CRL_APB_RESET_CTRL (CRL_APB_BASE + U(0x218))
|
||||||
#define CRL_APB_RST_LPD_TOP (CRL_APB_BASE + 0x23C)
|
#define CRL_APB_RST_LPD_TOP (CRL_APB_BASE + U(0x23C))
|
||||||
#define CRL_APB_BOOT_PIN_CTRL (CRL_APB_BASE + U(0x250))
|
#define CRL_APB_BOOT_PIN_CTRL (CRL_APB_BASE + U(0x250))
|
||||||
#define CRL_APB_CLK_BASE U(0xFF5E0020)
|
#define CRL_APB_CLK_BASE U(0xFF5E0020)
|
||||||
|
|
||||||
|
@ -75,18 +75,15 @@
|
||||||
#define CRL_APB_BOOT_PIN_MASK (U(0xf0f) << 0)
|
#define CRL_APB_BOOT_PIN_MASK (U(0xf0f) << 0)
|
||||||
#define CRL_APB_BOOT_DRIVE_PIN_1_SHIFT U(9)
|
#define CRL_APB_BOOT_DRIVE_PIN_1_SHIFT U(9)
|
||||||
#define CRL_APB_BOOT_ENABLE_PIN_1_SHIFT U(1)
|
#define CRL_APB_BOOT_ENABLE_PIN_1_SHIFT U(1)
|
||||||
#define CRL_APB_BOOT_ENABLE_PIN_1 (U(0x1) << \
|
#define CRL_APB_BOOT_ENABLE_PIN_1 (U(0x1) << CRL_APB_BOOT_ENABLE_PIN_1_SHIFT)
|
||||||
CRL_APB_BOOT_ENABLE_PIN_1_SHIFT)
|
#define CRL_APB_BOOT_DRIVE_PIN_1 (U(0x1) << CRL_APB_BOOT_DRIVE_PIN_1_SHIFT)
|
||||||
#define CRL_APB_BOOT_DRIVE_PIN_1 (U(0x1) << \
|
|
||||||
CRL_APB_BOOT_DRIVE_PIN_1_SHIFT)
|
|
||||||
#define ZYNQMP_BOOTMODE_JTAG U(0)
|
#define ZYNQMP_BOOTMODE_JTAG U(0)
|
||||||
#define ZYNQMP_ULPI_RESET_VAL_HIGH (CRL_APB_BOOT_ENABLE_PIN_1 | \
|
#define ZYNQMP_ULPI_RESET_VAL_HIGH (CRL_APB_BOOT_ENABLE_PIN_1 | CRL_APB_BOOT_DRIVE_PIN_1)
|
||||||
CRL_APB_BOOT_DRIVE_PIN_1)
|
|
||||||
#define ZYNQMP_ULPI_RESET_VAL_LOW CRL_APB_BOOT_ENABLE_PIN_1
|
#define ZYNQMP_ULPI_RESET_VAL_LOW CRL_APB_BOOT_ENABLE_PIN_1
|
||||||
|
|
||||||
/* system counter registers and bitfields */
|
/* system counter registers and bitfields */
|
||||||
#define IOU_SCNTRS_BASE U(0xFF260000)
|
#define IOU_SCNTRS_BASE U(0xFF260000)
|
||||||
#define IOU_SCNTRS_BASEFREQ (IOU_SCNTRS_BASE + 0x20)
|
#define IOU_SCNTRS_BASEFREQ (IOU_SCNTRS_BASE + U(0x20))
|
||||||
|
|
||||||
/* APU registers and bitfields */
|
/* APU registers and bitfields */
|
||||||
#define APU_BASE U(0xFD5C0000)
|
#define APU_BASE U(0xFD5C0000)
|
||||||
|
@ -104,11 +101,11 @@
|
||||||
/* PMU registers and bitfields */
|
/* PMU registers and bitfields */
|
||||||
#define PMU_GLOBAL_BASE U(0xFFD80000)
|
#define PMU_GLOBAL_BASE U(0xFFD80000)
|
||||||
#define PMU_GLOBAL_CNTRL (PMU_GLOBAL_BASE + 0)
|
#define PMU_GLOBAL_CNTRL (PMU_GLOBAL_BASE + 0)
|
||||||
#define PMU_GLOBAL_GEN_STORAGE6 (PMU_GLOBAL_BASE + 0x48)
|
#define PMU_GLOBAL_GEN_STORAGE6 (PMU_GLOBAL_BASE + U(0x48))
|
||||||
#define PMU_GLOBAL_REQ_PWRUP_STATUS (PMU_GLOBAL_BASE + 0x110)
|
#define PMU_GLOBAL_REQ_PWRUP_STATUS (PMU_GLOBAL_BASE + U(0x110))
|
||||||
#define PMU_GLOBAL_REQ_PWRUP_EN (PMU_GLOBAL_BASE + 0x118)
|
#define PMU_GLOBAL_REQ_PWRUP_EN (PMU_GLOBAL_BASE + U(0x118))
|
||||||
#define PMU_GLOBAL_REQ_PWRUP_DIS (PMU_GLOBAL_BASE + 0x11c)
|
#define PMU_GLOBAL_REQ_PWRUP_DIS (PMU_GLOBAL_BASE + U(0x11c))
|
||||||
#define PMU_GLOBAL_REQ_PWRUP_TRIG (PMU_GLOBAL_BASE + 0x120)
|
#define PMU_GLOBAL_REQ_PWRUP_TRIG (PMU_GLOBAL_BASE + U(0x120))
|
||||||
|
|
||||||
#define PMU_GLOBAL_CNTRL_FW_IS_PRESENT (1 << 4)
|
#define PMU_GLOBAL_CNTRL_FW_IS_PRESENT (1 << 4)
|
||||||
|
|
||||||
|
@ -191,10 +188,10 @@
|
||||||
#define UART_BAUDRATE 115200
|
#define UART_BAUDRATE 115200
|
||||||
|
|
||||||
/* Silicon version detection */
|
/* Silicon version detection */
|
||||||
#define ZYNQMP_SILICON_VER_MASK 0xF000
|
#define ZYNQMP_SILICON_VER_MASK U(0xF000)
|
||||||
#define ZYNQMP_SILICON_VER_SHIFT 12
|
#define ZYNQMP_SILICON_VER_SHIFT 12
|
||||||
#define ZYNQMP_CSU_VERSION_SILICON 0
|
#define ZYNQMP_CSU_VERSION_SILICON 0
|
||||||
#define ZYNQMP_CSU_VERSION_QEMU 3
|
#define ZYNQMP_CSU_VERSION_QEMU U(3)
|
||||||
|
|
||||||
#define ZYNQMP_RTL_VER_MASK 0xFF0U
|
#define ZYNQMP_RTL_VER_MASK 0xFF0U
|
||||||
#define ZYNQMP_RTL_VER_SHIFT 4
|
#define ZYNQMP_RTL_VER_SHIFT 4
|
||||||
|
@ -203,38 +200,32 @@
|
||||||
#define ZYNQMP_PS_VER_SHIFT 0
|
#define ZYNQMP_PS_VER_SHIFT 0
|
||||||
|
|
||||||
#define ZYNQMP_CSU_BASEADDR U(0xFFCA0000)
|
#define ZYNQMP_CSU_BASEADDR U(0xFFCA0000)
|
||||||
#define ZYNQMP_CSU_IDCODE_OFFSET 0x40U
|
#define ZYNQMP_CSU_IDCODE_OFFSET U(0x40)
|
||||||
|
|
||||||
#define ZYNQMP_CSU_IDCODE_XILINX_ID_SHIFT 0U
|
#define ZYNQMP_CSU_IDCODE_XILINX_ID_SHIFT U(0)
|
||||||
#define ZYNQMP_CSU_IDCODE_XILINX_ID_MASK (0xFFFU << \
|
#define ZYNQMP_CSU_IDCODE_XILINX_ID_MASK (U(0xFFF) << ZYNQMP_CSU_IDCODE_XILINX_ID_SHIFT)
|
||||||
ZYNQMP_CSU_IDCODE_XILINX_ID_SHIFT)
|
#define ZYNQMP_CSU_IDCODE_XILINX_ID U(0x093)
|
||||||
#define ZYNQMP_CSU_IDCODE_XILINX_ID 0x093
|
|
||||||
|
|
||||||
#define ZYNQMP_CSU_IDCODE_SVD_SHIFT 12U
|
#define ZYNQMP_CSU_IDCODE_SVD_SHIFT U(12)
|
||||||
#define ZYNQMP_CSU_IDCODE_SVD_MASK (0x7U << \
|
#define ZYNQMP_CSU_IDCODE_SVD_MASK (0x7U << ZYNQMP_CSU_IDCODE_SVD_SHIFT)
|
||||||
ZYNQMP_CSU_IDCODE_SVD_SHIFT)
|
#define ZYNQMP_CSU_IDCODE_DEVICE_CODE_SHIFT U(15)
|
||||||
#define ZYNQMP_CSU_IDCODE_DEVICE_CODE_SHIFT 15U
|
#define ZYNQMP_CSU_IDCODE_DEVICE_CODE_MASK (U(0xF) << ZYNQMP_CSU_IDCODE_DEVICE_CODE_SHIFT)
|
||||||
#define ZYNQMP_CSU_IDCODE_DEVICE_CODE_MASK (0xFU << \
|
#define ZYNQMP_CSU_IDCODE_SUB_FAMILY_SHIFT U(19)
|
||||||
ZYNQMP_CSU_IDCODE_DEVICE_CODE_SHIFT)
|
#define ZYNQMP_CSU_IDCODE_SUB_FAMILY_MASK (U(0x3) << ZYNQMP_CSU_IDCODE_SUB_FAMILY_SHIFT)
|
||||||
#define ZYNQMP_CSU_IDCODE_SUB_FAMILY_SHIFT 19U
|
#define ZYNQMP_CSU_IDCODE_FAMILY_SHIFT U(21)
|
||||||
#define ZYNQMP_CSU_IDCODE_SUB_FAMILY_MASK (0x3U << \
|
#define ZYNQMP_CSU_IDCODE_FAMILY_MASK (U(0x7F) << ZYNQMP_CSU_IDCODE_FAMILY_SHIFT)
|
||||||
ZYNQMP_CSU_IDCODE_SUB_FAMILY_SHIFT)
|
#define ZYNQMP_CSU_IDCODE_FAMILY U(0x23)
|
||||||
#define ZYNQMP_CSU_IDCODE_FAMILY_SHIFT 21U
|
|
||||||
#define ZYNQMP_CSU_IDCODE_FAMILY_MASK (0x7FU << \
|
|
||||||
ZYNQMP_CSU_IDCODE_FAMILY_SHIFT)
|
|
||||||
#define ZYNQMP_CSU_IDCODE_FAMILY 0x23
|
|
||||||
|
|
||||||
#define ZYNQMP_CSU_IDCODE_REVISION_SHIFT 28U
|
#define ZYNQMP_CSU_IDCODE_REVISION_SHIFT U(28)
|
||||||
#define ZYNQMP_CSU_IDCODE_REVISION_MASK (0xFU << \
|
#define ZYNQMP_CSU_IDCODE_REVISION_MASK (U(0xF) << ZYNQMP_CSU_IDCODE_REVISION_SHIFT)
|
||||||
ZYNQMP_CSU_IDCODE_REVISION_SHIFT)
|
#define ZYNQMP_CSU_IDCODE_REVISION U(0)
|
||||||
#define ZYNQMP_CSU_IDCODE_REVISION 0U
|
|
||||||
|
|
||||||
#define ZYNQMP_CSU_VERSION_OFFSET 0x44U
|
#define ZYNQMP_CSU_VERSION_OFFSET U(0x44)
|
||||||
|
|
||||||
/* Efuse */
|
/* Efuse */
|
||||||
#define EFUSE_BASEADDR U(0xFFCC0000)
|
#define EFUSE_BASEADDR U(0xFFCC0000)
|
||||||
#define EFUSE_IPDISABLE_OFFSET 0x1018
|
#define EFUSE_IPDISABLE_OFFSET 0x1018
|
||||||
#define EFUSE_IPDISABLE_VERSION 0x1FFU
|
#define EFUSE_IPDISABLE_VERSION U(0x1FF)
|
||||||
#define ZYNQMP_EFUSE_IPDISABLE_SHIFT 20
|
#define ZYNQMP_EFUSE_IPDISABLE_SHIFT 20
|
||||||
|
|
||||||
/* Access control register defines */
|
/* Access control register defines */
|
||||||
|
@ -356,11 +347,11 @@
|
||||||
#define IOU_SLCR_WDT_CLK_SEL (IOU_SLCR_BASEADDR + 0x300)
|
#define IOU_SLCR_WDT_CLK_SEL (IOU_SLCR_BASEADDR + 0x300)
|
||||||
|
|
||||||
/* Global general storage register base address */
|
/* Global general storage register base address */
|
||||||
#define GGS_BASEADDR (0xFFD80030U)
|
#define GGS_BASEADDR U(0xFFD80030)
|
||||||
#define GGS_NUM_REGS U(4)
|
#define GGS_NUM_REGS U(4)
|
||||||
|
|
||||||
/* Persistent global general storage register base address */
|
/* Persistent global general storage register base address */
|
||||||
#define PGGS_BASEADDR (0xFFD80050U)
|
#define PGGS_BASEADDR U(0xFFD80050)
|
||||||
#define PGGS_NUM_REGS U(4)
|
#define PGGS_NUM_REGS U(4)
|
||||||
|
|
||||||
/* PMU GGS4 register 4 is used for warm restart boot health status */
|
/* PMU GGS4 register 4 is used for warm restart boot health status */
|
||||||
|
@ -369,7 +360,7 @@
|
||||||
#define PM_BOOT_HEALTH_STATUS_MASK U(0x01)
|
#define PM_BOOT_HEALTH_STATUS_MASK U(0x01)
|
||||||
/* WDT restart scope shift and mask */
|
/* WDT restart scope shift and mask */
|
||||||
#define RESTART_SCOPE_SHIFT (3)
|
#define RESTART_SCOPE_SHIFT (3)
|
||||||
#define RESTART_SCOPE_MASK (0x3U << RESTART_SCOPE_SHIFT)
|
#define RESTART_SCOPE_MASK (U(0x3) << RESTART_SCOPE_SHIFT)
|
||||||
|
|
||||||
/* AFI registers */
|
/* AFI registers */
|
||||||
#define AFIFM6_WRCTRL U(13)
|
#define AFIFM6_WRCTRL U(13)
|
||||||
|
|
|
@ -32,7 +32,7 @@ static void zynqmp_cpu_standby(plat_local_state_t cpu_state)
|
||||||
|
|
||||||
static int32_t zynqmp_pwr_domain_on(u_register_t mpidr)
|
static int32_t zynqmp_pwr_domain_on(u_register_t mpidr)
|
||||||
{
|
{
|
||||||
uint32_t cpu_id = plat_core_pos_by_mpidr(mpidr);
|
int32_t cpu_id = plat_core_pos_by_mpidr(mpidr);
|
||||||
const struct pm_proc *proc;
|
const struct pm_proc *proc;
|
||||||
uint32_t buff[3];
|
uint32_t buff[3];
|
||||||
enum pm_ret_status ret;
|
enum pm_ret_status ret;
|
||||||
|
|
|
@ -18,5 +18,5 @@ int32_t plat_core_pos_by_mpidr(u_register_t mpidr)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return zynqmp_calc_core_pos(mpidr);
|
return (int32_t)zynqmp_calc_core_pos(mpidr);
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -266,7 +266,7 @@ static enum pm_ret_status pm_ioctl_sd_set_tapdelay(enum pm_node_id nid,
|
||||||
|
|
||||||
if (type == PM_TAPDELAY_INPUT) {
|
if (type == PM_TAPDELAY_INPUT) {
|
||||||
ret = pm_mmio_write(ZYNQMP_SD_ITAP_DLY,
|
ret = pm_mmio_write(ZYNQMP_SD_ITAP_DLY,
|
||||||
(ZYNQMP_SD_ITAPCHGWIN_MASK << shift),
|
(uint64_t)(ZYNQMP_SD_ITAPCHGWIN_MASK << shift),
|
||||||
(ZYNQMP_SD_ITAPCHGWIN << shift));
|
(ZYNQMP_SD_ITAPCHGWIN << shift));
|
||||||
|
|
||||||
if (ret != PM_RET_SUCCESS) {
|
if (ret != PM_RET_SUCCESS) {
|
||||||
|
@ -275,12 +275,12 @@ static enum pm_ret_status pm_ioctl_sd_set_tapdelay(enum pm_node_id nid,
|
||||||
|
|
||||||
if (value == 0U) {
|
if (value == 0U) {
|
||||||
ret = pm_mmio_write(ZYNQMP_SD_ITAP_DLY,
|
ret = pm_mmio_write(ZYNQMP_SD_ITAP_DLY,
|
||||||
(ZYNQMP_SD_ITAPDLYENA_MASK <<
|
(uint64_t)(ZYNQMP_SD_ITAPDLYENA_MASK <<
|
||||||
shift), 0);
|
shift), 0);
|
||||||
} else {
|
} else {
|
||||||
ret = pm_mmio_write(ZYNQMP_SD_ITAP_DLY,
|
ret = pm_mmio_write(ZYNQMP_SD_ITAP_DLY,
|
||||||
(ZYNQMP_SD_ITAPDLYENA_MASK <<
|
(uint64_t)(ZYNQMP_SD_ITAPDLYENA_MASK <<
|
||||||
shift), (ZYNQMP_SD_ITAPDLYENA <<
|
shift), (uint64_t)(ZYNQMP_SD_ITAPDLYENA <<
|
||||||
shift));
|
shift));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,7 +289,7 @@ static enum pm_ret_status pm_ioctl_sd_set_tapdelay(enum pm_node_id nid,
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = pm_mmio_write(ZYNQMP_SD_ITAP_DLY,
|
ret = pm_mmio_write(ZYNQMP_SD_ITAP_DLY,
|
||||||
(ZYNQMP_SD_ITAPDLYSEL_MASK << shift),
|
(uint64_t)(ZYNQMP_SD_ITAPDLYSEL_MASK << shift),
|
||||||
(value << shift));
|
(value << shift));
|
||||||
|
|
||||||
if (ret != PM_RET_SUCCESS) {
|
if (ret != PM_RET_SUCCESS) {
|
||||||
|
@ -297,17 +297,17 @@ static enum pm_ret_status pm_ioctl_sd_set_tapdelay(enum pm_node_id nid,
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = pm_mmio_write(ZYNQMP_SD_ITAP_DLY,
|
ret = pm_mmio_write(ZYNQMP_SD_ITAP_DLY,
|
||||||
(ZYNQMP_SD_ITAPCHGWIN_MASK << shift), 0);
|
(uint64_t)(ZYNQMP_SD_ITAPCHGWIN_MASK << shift), 0);
|
||||||
} else if (type == PM_TAPDELAY_OUTPUT) {
|
} else if (type == PM_TAPDELAY_OUTPUT) {
|
||||||
ret = pm_mmio_write(ZYNQMP_SD_OTAP_DLY,
|
ret = pm_mmio_write(ZYNQMP_SD_OTAP_DLY,
|
||||||
(ZYNQMP_SD_OTAPDLYENA_MASK << shift), 0);
|
(uint64_t)(ZYNQMP_SD_OTAPDLYENA_MASK << shift), 0);
|
||||||
|
|
||||||
if (ret != PM_RET_SUCCESS) {
|
if (ret != PM_RET_SUCCESS) {
|
||||||
goto reset_release;
|
goto reset_release;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = pm_mmio_write(ZYNQMP_SD_OTAP_DLY,
|
ret = pm_mmio_write(ZYNQMP_SD_OTAP_DLY,
|
||||||
(ZYNQMP_SD_OTAPDLYSEL_MASK << shift),
|
(uint64_t)(ZYNQMP_SD_OTAPDLYSEL_MASK << shift),
|
||||||
(value << shift));
|
(value << shift));
|
||||||
} else {
|
} else {
|
||||||
ret = PM_RET_ERROR_ARGS;
|
ret = PM_RET_ERROR_ARGS;
|
||||||
|
@ -422,7 +422,7 @@ static enum pm_ret_status pm_ioctl_write_ggs(uint32_t index,
|
||||||
return PM_RET_ERROR_ARGS;
|
return PM_RET_ERROR_ARGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pm_mmio_write(GGS_BASEADDR + (index << 2),
|
return pm_mmio_write((uint64_t)(GGS_BASEADDR + (index << 2)),
|
||||||
0xFFFFFFFFU, value);
|
0xFFFFFFFFU, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -444,7 +444,7 @@ static enum pm_ret_status pm_ioctl_read_ggs(uint32_t index,
|
||||||
return PM_RET_ERROR_ARGS;
|
return PM_RET_ERROR_ARGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pm_mmio_read(GGS_BASEADDR + (index << 2), value);
|
return pm_mmio_read((uint64_t)(GGS_BASEADDR + (index << 2)), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -465,7 +465,7 @@ static enum pm_ret_status pm_ioctl_write_pggs(uint32_t index,
|
||||||
return PM_RET_ERROR_ARGS;
|
return PM_RET_ERROR_ARGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pm_mmio_write(PGGS_BASEADDR + (index << 2),
|
return pm_mmio_write((uint64_t)(PGGS_BASEADDR + (index << 2)),
|
||||||
0xFFFFFFFFU, value);
|
0xFFFFFFFFU, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -530,7 +530,7 @@ static enum pm_ret_status pm_ioctl_read_pggs(uint32_t index,
|
||||||
return PM_RET_ERROR_ARGS;
|
return PM_RET_ERROR_ARGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pm_mmio_read(PGGS_BASEADDR + (index << 2), value);
|
return pm_mmio_read((uint64_t)(PGGS_BASEADDR + (index << 2)), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -703,7 +703,7 @@ enum pm_ret_status tfa_ioctl_bitmask(uint32_t *bit_mask)
|
||||||
IOCTL_AFI,
|
IOCTL_AFI,
|
||||||
};
|
};
|
||||||
uint8_t i, ioctl_id;
|
uint8_t i, ioctl_id;
|
||||||
int32_t ret;
|
enum pm_ret_status ret;
|
||||||
|
|
||||||
for (i = 0U; i < ARRAY_SIZE(supported_ids); i++) {
|
for (i = 0U; i < ARRAY_SIZE(supported_ids); i++) {
|
||||||
ioctl_id = supported_ids[i];
|
ioctl_id = supported_ids[i];
|
||||||
|
|
|
@ -1991,7 +1991,7 @@ enum pm_ret_status pm_api_pinctrl_get_num_functions(uint32_t *nfuncs)
|
||||||
enum pm_ret_status pm_api_pinctrl_get_num_func_groups(uint32_t fid,
|
enum pm_ret_status pm_api_pinctrl_get_num_func_groups(uint32_t fid,
|
||||||
uint32_t *ngroups)
|
uint32_t *ngroups)
|
||||||
{
|
{
|
||||||
if (fid >= MAX_FUNCTION) {
|
if (fid >= (uint32_t)MAX_FUNCTION) {
|
||||||
return PM_RET_ERROR_ARGS;
|
return PM_RET_ERROR_ARGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2011,7 +2011,7 @@ enum pm_ret_status pm_api_pinctrl_get_num_func_groups(uint32_t fid,
|
||||||
*/
|
*/
|
||||||
void pm_api_pinctrl_get_function_name(uint32_t fid, char *name)
|
void pm_api_pinctrl_get_function_name(uint32_t fid, char *name)
|
||||||
{
|
{
|
||||||
if (fid >= MAX_FUNCTION) {
|
if (fid >= (uint32_t)MAX_FUNCTION) {
|
||||||
(void)memcpy(name, END_OF_FUNCTION, FUNCTION_NAME_LEN);
|
(void)memcpy(name, END_OF_FUNCTION, FUNCTION_NAME_LEN);
|
||||||
} else {
|
} else {
|
||||||
(void)memcpy(name, pinctrl_functions[fid].name, FUNCTION_NAME_LEN);
|
(void)memcpy(name, pinctrl_functions[fid].name, FUNCTION_NAME_LEN);
|
||||||
|
@ -2045,7 +2045,7 @@ enum pm_ret_status pm_api_pinctrl_get_function_groups(uint32_t fid,
|
||||||
uint16_t end_of_grp_offset;
|
uint16_t end_of_grp_offset;
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
|
|
||||||
if (fid >= MAX_FUNCTION) {
|
if (fid >= (uint32_t)MAX_FUNCTION) {
|
||||||
return PM_RET_ERROR_ARGS;
|
return PM_RET_ERROR_ARGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2058,7 +2058,7 @@ enum pm_ret_status pm_api_pinctrl_get_function_groups(uint32_t fid,
|
||||||
if ((grps + index + i) >= end_of_grp_offset) {
|
if ((grps + index + i) >= end_of_grp_offset) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
groups[i] = (grps + index + i);
|
groups[i] = (uint16_t)(grps + index + i);
|
||||||
}
|
}
|
||||||
|
|
||||||
return PM_RET_SUCCESS;
|
return PM_RET_SUCCESS;
|
||||||
|
@ -2090,7 +2090,7 @@ enum pm_ret_status pm_api_pinctrl_get_pin_groups(uint32_t pin,
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
const uint16_t *grps;
|
const uint16_t *grps;
|
||||||
|
|
||||||
if (pin >= MAX_PIN) {
|
if (pin >= (uint32_t)MAX_PIN) {
|
||||||
return PM_RET_ERROR_ARGS;
|
return PM_RET_ERROR_ARGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,22 +46,22 @@ static uint32_t suspend_mode = PM_SUSPEND_MODE_STD;
|
||||||
/* Order in pm_procs_all array must match cpu ids */
|
/* Order in pm_procs_all array must match cpu ids */
|
||||||
static const struct pm_proc pm_procs_all[] = {
|
static const struct pm_proc pm_procs_all[] = {
|
||||||
{
|
{
|
||||||
.node_id = NODE_APU_0,
|
.node_id = (uint32_t)NODE_APU_0,
|
||||||
.pwrdn_mask = APU_0_PWRCTL_CPUPWRDWNREQ_MASK,
|
.pwrdn_mask = APU_0_PWRCTL_CPUPWRDWNREQ_MASK,
|
||||||
.ipi = &apu_ipi,
|
.ipi = &apu_ipi,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.node_id = NODE_APU_1,
|
.node_id = (uint32_t)NODE_APU_1,
|
||||||
.pwrdn_mask = APU_1_PWRCTL_CPUPWRDWNREQ_MASK,
|
.pwrdn_mask = APU_1_PWRCTL_CPUPWRDWNREQ_MASK,
|
||||||
.ipi = &apu_ipi,
|
.ipi = &apu_ipi,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.node_id = NODE_APU_2,
|
.node_id = (uint32_t)NODE_APU_2,
|
||||||
.pwrdn_mask = APU_2_PWRCTL_CPUPWRDWNREQ_MASK,
|
.pwrdn_mask = APU_2_PWRCTL_CPUPWRDWNREQ_MASK,
|
||||||
.ipi = &apu_ipi,
|
.ipi = &apu_ipi,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.node_id = NODE_APU_3,
|
.node_id = (uint32_t)NODE_APU_3,
|
||||||
.pwrdn_mask = APU_3_PWRCTL_CPUPWRDWNREQ_MASK,
|
.pwrdn_mask = APU_3_PWRCTL_CPUPWRDWNREQ_MASK,
|
||||||
.ipi = &apu_ipi,
|
.ipi = &apu_ipi,
|
||||||
},
|
},
|
||||||
|
@ -198,7 +198,7 @@ static void pm_client_set_wakeup_sources(void)
|
||||||
|
|
||||||
for (reg_num = 0U; reg_num < NUM_GICD_ISENABLER; reg_num++) {
|
for (reg_num = 0U; reg_num < NUM_GICD_ISENABLER; reg_num++) {
|
||||||
uint32_t base_irq = reg_num << ISENABLER_SHIFT;
|
uint32_t base_irq = reg_num << ISENABLER_SHIFT;
|
||||||
uint32_t reg = mmio_read_32(isenabler1 + (reg_num << 2U));
|
uint32_t reg = mmio_read_32(isenabler1 + (uint64_t)(reg_num << 2U));
|
||||||
|
|
||||||
if (reg == 0) {
|
if (reg == 0) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -206,9 +206,10 @@ static void pm_client_set_wakeup_sources(void)
|
||||||
|
|
||||||
while (reg != 0U) {
|
while (reg != 0U) {
|
||||||
enum pm_node_id node;
|
enum pm_node_id node;
|
||||||
uint32_t idx, ret, irq, lowest_set = reg & (-reg);
|
uint32_t idx, irq, lowest_set = reg & (-reg);
|
||||||
|
enum pm_ret_status ret;
|
||||||
|
|
||||||
idx = __builtin_ctz(lowest_set);
|
idx = (uint32_t)__builtin_ctz(lowest_set);
|
||||||
irq = base_irq + idx;
|
irq = base_irq + idx;
|
||||||
|
|
||||||
if (irq > IRQ_MAX) {
|
if (irq > IRQ_MAX) {
|
||||||
|
|
|
@ -51,164 +51,164 @@ typedef struct __attribute__((packed)) {
|
||||||
/* Dependent APIs for TF-A to check their version from firmware */
|
/* Dependent APIs for TF-A to check their version from firmware */
|
||||||
static const eemi_api_dependency api_dep_table[] = {
|
static const eemi_api_dependency api_dep_table[] = {
|
||||||
{
|
{
|
||||||
.id = PM_SELF_SUSPEND,
|
.id = (uint8_t)PM_SELF_SUSPEND,
|
||||||
.api_id = PM_SELF_SUSPEND,
|
.api_id = (uint8_t)PM_SELF_SUSPEND,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_REQ_WAKEUP,
|
.id = (uint8_t)PM_REQ_WAKEUP,
|
||||||
.api_id = PM_REQ_WAKEUP,
|
.api_id = (uint8_t)PM_REQ_WAKEUP,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_ABORT_SUSPEND,
|
.id = (uint8_t)PM_ABORT_SUSPEND,
|
||||||
.api_id = PM_ABORT_SUSPEND,
|
.api_id = (uint8_t)PM_ABORT_SUSPEND,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_SET_WAKEUP_SOURCE,
|
.id = (uint8_t)PM_SET_WAKEUP_SOURCE,
|
||||||
.api_id = PM_SET_WAKEUP_SOURCE,
|
.api_id = (uint8_t)PM_SET_WAKEUP_SOURCE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_SYSTEM_SHUTDOWN,
|
.id = (uint8_t)PM_SYSTEM_SHUTDOWN,
|
||||||
.api_id = PM_SYSTEM_SHUTDOWN,
|
.api_id = (uint8_t)PM_SYSTEM_SHUTDOWN,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_GET_API_VERSION,
|
.id = (uint8_t)PM_GET_API_VERSION,
|
||||||
.api_id = PM_GET_API_VERSION,
|
.api_id = (uint8_t)PM_GET_API_VERSION,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_ENABLE,
|
.id = (uint8_t)PM_CLOCK_ENABLE,
|
||||||
.api_id = PM_PLL_SET_MODE,
|
.api_id = (uint8_t)PM_PLL_SET_MODE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_ENABLE,
|
.id = (uint8_t)PM_CLOCK_ENABLE,
|
||||||
.api_id = PM_CLOCK_ENABLE,
|
.api_id = (uint8_t)PM_CLOCK_ENABLE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_DISABLE,
|
.id = (uint8_t)PM_CLOCK_DISABLE,
|
||||||
.api_id = PM_PLL_SET_MODE,
|
.api_id = (uint8_t)PM_PLL_SET_MODE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_DISABLE,
|
.id = (uint8_t)PM_CLOCK_DISABLE,
|
||||||
.api_id = PM_CLOCK_DISABLE,
|
.api_id = (uint8_t)PM_CLOCK_DISABLE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_GETSTATE,
|
.id = (uint8_t)PM_CLOCK_GETSTATE,
|
||||||
.api_id = PM_PLL_GET_MODE,
|
.api_id = (uint8_t)PM_PLL_GET_MODE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_GETSTATE,
|
.id = (uint8_t)PM_CLOCK_GETSTATE,
|
||||||
.api_id = PM_CLOCK_GETSTATE,
|
.api_id = (uint8_t)PM_CLOCK_GETSTATE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_SETDIVIDER,
|
.id = (uint8_t)PM_CLOCK_SETDIVIDER,
|
||||||
.api_id = PM_PLL_SET_PARAMETER,
|
.api_id = (uint8_t)PM_PLL_SET_PARAMETER,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_SETDIVIDER,
|
.id = (uint8_t)PM_CLOCK_SETDIVIDER,
|
||||||
.api_id = PM_CLOCK_SETDIVIDER,
|
.api_id = (uint8_t)PM_CLOCK_SETDIVIDER,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_GETDIVIDER,
|
.id = (uint8_t)PM_CLOCK_GETDIVIDER,
|
||||||
.api_id = PM_PLL_GET_PARAMETER,
|
.api_id = (uint8_t)PM_PLL_GET_PARAMETER,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_GETDIVIDER,
|
.id = (uint8_t)PM_CLOCK_GETDIVIDER,
|
||||||
.api_id = PM_CLOCK_GETDIVIDER,
|
.api_id = (uint8_t)PM_CLOCK_GETDIVIDER,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_SETPARENT,
|
.id = (uint8_t)PM_CLOCK_SETPARENT,
|
||||||
.api_id = PM_PLL_SET_PARAMETER,
|
.api_id = (uint8_t)PM_PLL_SET_PARAMETER,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_SETPARENT,
|
.id = (uint8_t)PM_CLOCK_SETPARENT,
|
||||||
.api_id = PM_CLOCK_SETPARENT,
|
.api_id = (uint8_t)PM_CLOCK_SETPARENT,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_GETPARENT,
|
.id = (uint8_t)PM_CLOCK_GETPARENT,
|
||||||
.api_id = PM_PLL_GET_PARAMETER,
|
.api_id = (uint8_t)PM_PLL_GET_PARAMETER,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_CLOCK_GETPARENT,
|
.id = (uint8_t)PM_CLOCK_GETPARENT,
|
||||||
.api_id = PM_CLOCK_GETPARENT,
|
.api_id = (uint8_t)PM_CLOCK_GETPARENT,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_PLL_SET_PARAMETER,
|
.id = (uint8_t)PM_PLL_SET_PARAMETER,
|
||||||
.api_id = PM_PLL_SET_PARAMETER,
|
.api_id = (uint8_t)PM_PLL_SET_PARAMETER,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_PLL_GET_PARAMETER,
|
.id = (uint8_t)PM_PLL_GET_PARAMETER,
|
||||||
.api_id = PM_PLL_GET_PARAMETER,
|
.api_id = (uint8_t)PM_PLL_GET_PARAMETER,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_PLL_SET_MODE,
|
.id = (uint8_t)PM_PLL_SET_MODE,
|
||||||
.api_id = PM_PLL_SET_MODE,
|
.api_id = (uint8_t)PM_PLL_SET_MODE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_PLL_GET_MODE,
|
.id = (uint8_t)PM_PLL_GET_MODE,
|
||||||
.api_id = PM_PLL_GET_MODE,
|
.api_id = (uint8_t)PM_PLL_GET_MODE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_REGISTER_ACCESS,
|
.id = (uint8_t)PM_REGISTER_ACCESS,
|
||||||
.api_id = PM_MMIO_WRITE,
|
.api_id = (uint8_t)PM_MMIO_WRITE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_REGISTER_ACCESS,
|
.id = (uint8_t)PM_REGISTER_ACCESS,
|
||||||
.api_id = PM_MMIO_READ,
|
.api_id = (uint8_t)PM_MMIO_READ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = PM_FEATURE_CHECK,
|
.id = (uint8_t)PM_FEATURE_CHECK,
|
||||||
.api_id = PM_FEATURE_CHECK,
|
.api_id = (uint8_t)PM_FEATURE_CHECK,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_SET_TAPDELAY_BYPASS,
|
.id = (uint8_t)IOCTL_SET_TAPDELAY_BYPASS,
|
||||||
.api_id = PM_MMIO_WRITE,
|
.api_id = (uint8_t)PM_MMIO_WRITE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_SD_DLL_RESET,
|
.id = (uint8_t)IOCTL_SD_DLL_RESET,
|
||||||
.api_id = PM_MMIO_WRITE,
|
.api_id = (uint8_t)PM_MMIO_WRITE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_SET_SD_TAPDELAY,
|
.id = (uint8_t)IOCTL_SET_SD_TAPDELAY,
|
||||||
.api_id = PM_MMIO_WRITE,
|
.api_id = (uint8_t)PM_MMIO_WRITE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_SET_SD_TAPDELAY,
|
.id = (uint8_t)IOCTL_SET_SD_TAPDELAY,
|
||||||
.api_id = PM_MMIO_READ,
|
.api_id = (uint8_t)PM_MMIO_READ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_SET_PLL_FRAC_DATA,
|
.id = (uint8_t)IOCTL_SET_PLL_FRAC_DATA,
|
||||||
.api_id = PM_PLL_SET_PARAMETER,
|
.api_id = (uint8_t)PM_PLL_SET_PARAMETER,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_GET_PLL_FRAC_DATA,
|
.id = (uint8_t)IOCTL_GET_PLL_FRAC_DATA,
|
||||||
.api_id = PM_PLL_GET_PARAMETER,
|
.api_id = (uint8_t)PM_PLL_GET_PARAMETER,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_WRITE_GGS,
|
.id = (uint8_t)IOCTL_WRITE_GGS,
|
||||||
.api_id = PM_MMIO_WRITE,
|
.api_id = (uint8_t)PM_MMIO_WRITE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_READ_GGS,
|
.id = (uint8_t)IOCTL_READ_GGS,
|
||||||
.api_id = PM_MMIO_READ,
|
.api_id = (uint8_t)PM_MMIO_READ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_WRITE_PGGS,
|
.id = (uint8_t)IOCTL_WRITE_PGGS,
|
||||||
.api_id = PM_MMIO_WRITE,
|
.api_id = (uint8_t)PM_MMIO_WRITE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_READ_PGGS,
|
.id = (uint8_t)IOCTL_READ_PGGS,
|
||||||
.api_id = PM_MMIO_READ,
|
.api_id = (uint8_t)PM_MMIO_READ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_ULPI_RESET,
|
.id = (uint8_t)IOCTL_ULPI_RESET,
|
||||||
.api_id = PM_MMIO_WRITE,
|
.api_id = (uint8_t)PM_MMIO_WRITE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_SET_BOOT_HEALTH_STATUS,
|
.id = (uint8_t)IOCTL_SET_BOOT_HEALTH_STATUS,
|
||||||
.api_id = PM_MMIO_WRITE,
|
.api_id = (uint8_t)PM_MMIO_WRITE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = IOCTL_AFI,
|
.id = (uint8_t)IOCTL_AFI,
|
||||||
.api_id = PM_MMIO_WRITE,
|
.api_id = (uint8_t)PM_MMIO_WRITE,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -343,7 +343,7 @@ enum pm_ret_status pm_req_wakeup(enum pm_node_id target,
|
||||||
|
|
||||||
/* encode set Address into 1st bit of address */
|
/* encode set Address into 1st bit of address */
|
||||||
encoded_address = address;
|
encoded_address = address;
|
||||||
encoded_address |= !!set_address;
|
encoded_address |= (uint32_t)!!set_address;
|
||||||
|
|
||||||
/* Send request to the PMU to perform the wake of the PU */
|
/* Send request to the PMU to perform the wake of the PU */
|
||||||
PM_PACK_PAYLOAD5(payload, PM_REQ_WAKEUP, target, encoded_address,
|
PM_PACK_PAYLOAD5(payload, PM_REQ_WAKEUP, target, encoded_address,
|
||||||
|
@ -440,7 +440,7 @@ enum pm_ret_status pm_system_shutdown(uint32_t type, uint32_t subtype)
|
||||||
{
|
{
|
||||||
uint32_t payload[PAYLOAD_ARG_CNT];
|
uint32_t payload[PAYLOAD_ARG_CNT];
|
||||||
|
|
||||||
if (type == PMF_SHUTDOWN_TYPE_SETSCOPE_ONLY) {
|
if (type == (uint32_t)PMF_SHUTDOWN_TYPE_SETSCOPE_ONLY) {
|
||||||
/* Setting scope for subsequent PSCI reboot or shutdown */
|
/* Setting scope for subsequent PSCI reboot or shutdown */
|
||||||
pm_shutdown_scope = subtype;
|
pm_shutdown_scope = subtype;
|
||||||
return PM_RET_SUCCESS;
|
return PM_RET_SUCCESS;
|
||||||
|
@ -710,7 +710,7 @@ enum pm_ret_status pm_get_callbackdata(uint32_t *data, size_t count)
|
||||||
{
|
{
|
||||||
enum pm_ret_status ret = PM_RET_SUCCESS;
|
enum pm_ret_status ret = PM_RET_SUCCESS;
|
||||||
/* Return if interrupt is not from PMU */
|
/* Return if interrupt is not from PMU */
|
||||||
if (!pm_ipi_irq_status(primary_proc)) {
|
if ((pm_ipi_irq_status(primary_proc) == 0U)) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -770,7 +770,7 @@ enum pm_ret_status check_api_dependency(uint8_t id)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
uint32_t version_type;
|
uint32_t version_type;
|
||||||
int ret;
|
enum pm_ret_status ret;
|
||||||
|
|
||||||
for (i = 0U; i < ARRAY_SIZE(api_dep_table); i++) {
|
for (i = 0U; i < ARRAY_SIZE(api_dep_table); i++) {
|
||||||
if (api_dep_table[i].id == id) {
|
if (api_dep_table[i].id == id) {
|
||||||
|
@ -780,7 +780,7 @@ enum pm_ret_status check_api_dependency(uint8_t id)
|
||||||
|
|
||||||
ret = fw_api_version(api_dep_table[i].api_id,
|
ret = fw_api_version(api_dep_table[i].api_id,
|
||||||
&version_type, 1);
|
&version_type, 1);
|
||||||
if (ret != PM_RET_SUCCESS) {
|
if (ret != (uint32_t)PM_RET_SUCCESS) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -898,7 +898,7 @@ static enum pm_ret_status feature_check_partial(uint32_t api_id,
|
||||||
case PM_REGISTER_ACCESS:
|
case PM_REGISTER_ACCESS:
|
||||||
case PM_FEATURE_CHECK:
|
case PM_FEATURE_CHECK:
|
||||||
status = check_api_dependency(api_id);
|
status = check_api_dependency(api_id);
|
||||||
if (status != PM_RET_SUCCESS) {
|
if (status != (uint32_t)PM_RET_SUCCESS) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
return get_tfa_version_for_partial_apis(api_id, version);
|
return get_tfa_version_for_partial_apis(api_id, version);
|
||||||
|
@ -925,13 +925,13 @@ enum pm_ret_status pm_feature_check(uint32_t api_id, uint32_t *version,
|
||||||
|
|
||||||
/* Get API version implemented in TF-A */
|
/* Get API version implemented in TF-A */
|
||||||
status = feature_check_tfa(api_id, version, bit_mask);
|
status = feature_check_tfa(api_id, version, bit_mask);
|
||||||
if (status != PM_RET_ERROR_NO_FEATURE) {
|
if (status != (uint32_t)PM_RET_ERROR_NO_FEATURE) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get API version implemented by firmware and TF-A both */
|
/* Get API version implemented by firmware and TF-A both */
|
||||||
status = feature_check_partial(api_id, version);
|
status = feature_check_partial(api_id, version);
|
||||||
if (status != PM_RET_ERROR_NO_FEATURE) {
|
if (status != (uint32_t)PM_RET_ERROR_NO_FEATURE) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -940,20 +940,20 @@ enum pm_ret_status pm_feature_check(uint32_t api_id, uint32_t *version,
|
||||||
/* IOCTL call may return failure whose ID is not implemented in
|
/* IOCTL call may return failure whose ID is not implemented in
|
||||||
* firmware but implemented in TF-A
|
* firmware but implemented in TF-A
|
||||||
*/
|
*/
|
||||||
if ((api_id != PM_IOCTL) && (status != PM_RET_SUCCESS)) {
|
if ((api_id != (uint32_t)PM_IOCTL) && (status != PM_RET_SUCCESS)) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
*version = ret_payload[0];
|
*version = ret_payload[0];
|
||||||
|
|
||||||
/* Update IOCTL bit mask which are implemented in TF-A */
|
/* Update IOCTL bit mask which are implemented in TF-A */
|
||||||
if ((api_id == PM_IOCTL) || (api_id == PM_GET_OP_CHARACTERISTIC)) {
|
if ((api_id == (uint32_t)PM_IOCTL) || (api_id == (uint32_t)PM_GET_OP_CHARACTERISTIC)) {
|
||||||
if (len < 2) {
|
if (len < 2U) {
|
||||||
return PM_RET_ERROR_ARGS;
|
return PM_RET_ERROR_ARGS;
|
||||||
}
|
}
|
||||||
bit_mask[0] = ret_payload[1];
|
bit_mask[0] = ret_payload[1];
|
||||||
bit_mask[1] = ret_payload[2];
|
bit_mask[1] = ret_payload[2];
|
||||||
if (api_id == PM_IOCTL) {
|
if (api_id == (uint32_t)PM_IOCTL) {
|
||||||
/* Get IOCTL's implemented by TF-A */
|
/* Get IOCTL's implemented by TF-A */
|
||||||
status = tfa_ioctl_bitmask(bit_mask);
|
status = tfa_ioctl_bitmask(bit_mask);
|
||||||
}
|
}
|
||||||
|
@ -1521,47 +1521,47 @@ void pm_query_data(enum pm_query_ids qid, uint32_t arg1, uint32_t arg2,
|
||||||
pm_clock_get_name(arg1, (char *)data);
|
pm_clock_get_name(arg1, (char *)data);
|
||||||
break;
|
break;
|
||||||
case PM_QID_CLOCK_GET_TOPOLOGY:
|
case PM_QID_CLOCK_GET_TOPOLOGY:
|
||||||
data[0] = pm_clock_get_topology(arg1, arg2, &data[1]);
|
data[0] = (uint32_t)pm_clock_get_topology(arg1, arg2, &data[1]);
|
||||||
break;
|
break;
|
||||||
case PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS:
|
case PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS:
|
||||||
data[0] = pm_clock_get_fixedfactor_params(arg1, &data[1],
|
data[0] = (uint32_t)pm_clock_get_fixedfactor_params(arg1, &data[1],
|
||||||
&data[2]);
|
&data[2]);
|
||||||
break;
|
break;
|
||||||
case PM_QID_CLOCK_GET_PARENTS:
|
case PM_QID_CLOCK_GET_PARENTS:
|
||||||
data[0] = pm_clock_get_parents(arg1, arg2, &data[1]);
|
data[0] = (uint32_t)pm_clock_get_parents(arg1, arg2, &data[1]);
|
||||||
break;
|
break;
|
||||||
case PM_QID_CLOCK_GET_ATTRIBUTES:
|
case PM_QID_CLOCK_GET_ATTRIBUTES:
|
||||||
data[0] = pm_clock_get_attributes(arg1, &data[1]);
|
data[0] = (uint32_t)pm_clock_get_attributes(arg1, &data[1]);
|
||||||
break;
|
break;
|
||||||
case PM_QID_PINCTRL_GET_NUM_PINS:
|
case PM_QID_PINCTRL_GET_NUM_PINS:
|
||||||
data[0] = pm_pinctrl_get_num_pins(&data[1]);
|
data[0] = (uint32_t)pm_pinctrl_get_num_pins(&data[1]);
|
||||||
break;
|
break;
|
||||||
case PM_QID_PINCTRL_GET_NUM_FUNCTIONS:
|
case PM_QID_PINCTRL_GET_NUM_FUNCTIONS:
|
||||||
data[0] = pm_pinctrl_get_num_functions(&data[1]);
|
data[0] = (uint32_t)pm_pinctrl_get_num_functions(&data[1]);
|
||||||
break;
|
break;
|
||||||
case PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS:
|
case PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS:
|
||||||
data[0] = pm_pinctrl_get_num_function_groups(arg1, &data[1]);
|
data[0] = (uint32_t)pm_pinctrl_get_num_function_groups(arg1, &data[1]);
|
||||||
break;
|
break;
|
||||||
case PM_QID_PINCTRL_GET_FUNCTION_NAME:
|
case PM_QID_PINCTRL_GET_FUNCTION_NAME:
|
||||||
pm_pinctrl_get_function_name(arg1, (char *)data);
|
pm_pinctrl_get_function_name(arg1, (char *)data);
|
||||||
break;
|
break;
|
||||||
case PM_QID_PINCTRL_GET_FUNCTION_GROUPS:
|
case PM_QID_PINCTRL_GET_FUNCTION_GROUPS:
|
||||||
data[0] = pm_pinctrl_get_function_groups(arg1, arg2,
|
data[0] = (uint32_t)pm_pinctrl_get_function_groups(arg1, arg2,
|
||||||
(uint16_t *)&data[1]);
|
(uint16_t *)&data[1]);
|
||||||
break;
|
break;
|
||||||
case PM_QID_PINCTRL_GET_PIN_GROUPS:
|
case PM_QID_PINCTRL_GET_PIN_GROUPS:
|
||||||
data[0] = pm_pinctrl_get_pin_groups(arg1, arg2,
|
data[0] = (uint32_t)pm_pinctrl_get_pin_groups(arg1, arg2,
|
||||||
(uint16_t *)&data[1]);
|
(uint16_t *)&data[1]);
|
||||||
break;
|
break;
|
||||||
case PM_QID_CLOCK_GET_NUM_CLOCKS:
|
case PM_QID_CLOCK_GET_NUM_CLOCKS:
|
||||||
data[0] = pm_clock_get_num_clocks(&data[1]);
|
data[0] = (uint32_t)pm_clock_get_num_clocks(&data[1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PM_QID_CLOCK_GET_MAX_DIVISOR:
|
case PM_QID_CLOCK_GET_MAX_DIVISOR:
|
||||||
data[0] = pm_clock_get_max_divisor(arg1, arg2, &data[1]);
|
data[0] = (uint32_t)pm_clock_get_max_divisor(arg1, (uint8_t)arg2, &data[1]);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
data[0] = PM_RET_ERROR_ARGS;
|
data[0] = (uint32_t)PM_RET_ERROR_ARGS;
|
||||||
WARN("Unimplemented query service call: 0x%x\n", qid);
|
WARN("Unimplemented query service call: 0x%x\n", qid);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,9 +187,9 @@ enum pm_shutdown_type {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
enum pm_shutdown_subtype {
|
enum pm_shutdown_subtype {
|
||||||
PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM,
|
PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM = (0U),
|
||||||
PMF_SHUTDOWN_SUBTYPE_PS_ONLY,
|
PMF_SHUTDOWN_SUBTYPE_PS_ONLY = (1U),
|
||||||
PMF_SHUTDOWN_SUBTYPE_SYSTEM,
|
PMF_SHUTDOWN_SUBTYPE_SYSTEM = (2U),
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -253,7 +253,7 @@ int32_t pm_setup(void)
|
||||||
ret = status;
|
ret = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
pm_up = !status;
|
pm_up = (status == 0);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -322,7 +322,7 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3,
|
||||||
uint32_t set_addr = pm_arg[1] & 0x1U;
|
uint32_t set_addr = pm_arg[1] & 0x1U;
|
||||||
uint64_t address = (uint64_t)pm_arg[2] << 32U;
|
uint64_t address = (uint64_t)pm_arg[2] << 32U;
|
||||||
|
|
||||||
address |= pm_arg[1] & (~0x1U);
|
address |= (uint64_t)(pm_arg[1] & (~0x1U));
|
||||||
ret = pm_req_wakeup(pm_arg[0], set_addr, address,
|
ret = pm_req_wakeup(pm_arg[0], set_addr, address,
|
||||||
pm_arg[3]);
|
pm_arg[3]);
|
||||||
SMC_RET1(handle, (uint64_t)ret);
|
SMC_RET1(handle, (uint64_t)ret);
|
||||||
|
@ -354,7 +354,7 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3,
|
||||||
SMC_RET1(handle, (uint64_t)ret);
|
SMC_RET1(handle, (uint64_t)ret);
|
||||||
|
|
||||||
case PM_GET_API_VERSION:
|
case PM_GET_API_VERSION:
|
||||||
if (ipi_irq_flag == 0U) {
|
if ((uint32_t)ipi_irq_flag == 0U) {
|
||||||
/*
|
/*
|
||||||
* Enable IPI IRQ
|
* Enable IPI IRQ
|
||||||
* assume the rich OS is OK to handle callback IRQs now.
|
* assume the rich OS is OK to handle callback IRQs now.
|
||||||
|
@ -560,7 +560,7 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3,
|
||||||
uint32_t bit_mask[2] = {0};
|
uint32_t bit_mask[2] = {0};
|
||||||
|
|
||||||
ret = pm_feature_check(pm_arg[0], &version_type, bit_mask,
|
ret = pm_feature_check(pm_arg[0], &version_type, bit_mask,
|
||||||
ARRAY_SIZE(bit_mask));
|
(uint8_t)ARRAY_SIZE(bit_mask));
|
||||||
SMC_RET2(handle, ((uint64_t)ret | ((uint64_t)version_type << 32U)),
|
SMC_RET2(handle, ((uint64_t)ret | ((uint64_t)version_type << 32U)),
|
||||||
((uint64_t)bit_mask[0] | ((uint64_t)bit_mask[1] << 32U)));
|
((uint64_t)bit_mask[0] | ((uint64_t)bit_mask[1] << 32U)));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue