From d77583549f89af29b3582867fcf3eabdbc41bb84 Mon Sep 17 00:00:00 2001 From: Venkatesh Yadav Abbarapu Date: Fri, 19 Feb 2021 01:40:14 -0700 Subject: [PATCH 1/2] plat: xilinx: common: Rename the IPI CRC checksum macro Rename the macro ZYNQMP_IPI_CRC_CHECK to IPI_CRC_CHECK and move the related defines to the common include. Signed-off-by: Venkatesh Yadav Abbarapu Change-Id: I6d30b081ac607572a0b23e10ca8031bc90489e58 --- plat/xilinx/common/include/pm_common.h | 12 ++++++++++++ plat/xilinx/common/include/pm_ipi.h | 2 +- plat/xilinx/common/pm_service/pm_ipi.c | 12 ++++++------ plat/xilinx/zynqmp/include/plat_pm_common.h | 11 ----------- plat/xilinx/zynqmp/platform.mk | 8 ++++++-- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/plat/xilinx/common/include/pm_common.h b/plat/xilinx/common/include/pm_common.h index c0a51f029..0c24a3665 100644 --- a/plat/xilinx/common/include/pm_common.h +++ b/plat/xilinx/common/include/pm_common.h @@ -15,6 +15,18 @@ #include #include +#if IPI_CRC_CHECK +#define PAYLOAD_ARG_CNT 8U +#define IPI_W0_TO_W6_SIZE 28U +#define PAYLOAD_CRC_POS 7U +#define CRC_INIT_VALUE 0x4F4EU +#define CRC_ORDER 16U +#define CRC_POLYNOM 0x8005U +#else +#define PAYLOAD_ARG_CNT 6U +#endif +#define PAYLOAD_ARG_SIZE 4U /* size in bytes */ + /** * pm_ipi - struct for capturing IPI-channel specific info * @local_ipi_id Local IPI agent ID diff --git a/plat/xilinx/common/include/pm_ipi.h b/plat/xilinx/common/include/pm_ipi.h index 7bcf59626..8c7738d71 100644 --- a/plat/xilinx/common/include/pm_ipi.h +++ b/plat/xilinx/common/include/pm_ipi.h @@ -26,7 +26,7 @@ void pm_ipi_buff_read_callb(unsigned int *value, size_t count); void pm_ipi_irq_enable(const struct pm_proc *proc); void pm_ipi_irq_clear(const struct pm_proc *proc); uint32_t pm_ipi_irq_status(const struct pm_proc *proc); -#if ZYNQMP_IPI_CRC_CHECK +#if IPI_CRC_CHECK uint32_t calculate_crc(uint32_t payload[PAYLOAD_ARG_CNT], uint32_t buffersize); #endif diff --git a/plat/xilinx/common/pm_service/pm_ipi.c b/plat/xilinx/common/pm_service/pm_ipi.c index ab8088d9a..7b5bd0280 100644 --- a/plat/xilinx/common/pm_service/pm_ipi.c +++ b/plat/xilinx/common/pm_service/pm_ipi.c @@ -60,7 +60,7 @@ static enum pm_ret_status pm_ipi_send_common(const struct pm_proc *proc, uintptr_t buffer_base = proc->ipi->buffer_base + IPI_BUFFER_TARGET_REMOTE_OFFSET + IPI_BUFFER_REQ_OFFSET; -#if ZYNQMP_IPI_CRC_CHECK +#if IPI_CRC_CHECK payload[PAYLOAD_CRC_POS] = calculate_crc(payload, IPI_W0_TO_W6_SIZE); #endif @@ -141,7 +141,7 @@ static enum pm_ret_status pm_ipi_buff_read(const struct pm_proc *proc, unsigned int *value, size_t count) { size_t i; -#if ZYNQMP_IPI_CRC_CHECK +#if IPI_CRC_CHECK size_t j; unsigned int response_payload[PAYLOAD_ARG_CNT]; #endif @@ -160,7 +160,7 @@ static enum pm_ret_status pm_ipi_buff_read(const struct pm_proc *proc, *value = mmio_read_32(buffer_base + (i * PAYLOAD_ARG_SIZE)); value++; } -#if ZYNQMP_IPI_CRC_CHECK +#if IPI_CRC_CHECK for (j = 0; j < PAYLOAD_ARG_CNT; j++) response_payload[j] = mmio_read_32(buffer_base + (j * PAYLOAD_ARG_SIZE)); @@ -185,7 +185,7 @@ static enum pm_ret_status pm_ipi_buff_read(const struct pm_proc *proc, void pm_ipi_buff_read_callb(unsigned int *value, size_t count) { size_t i; -#if ZYNQMP_IPI_CRC_CHECK +#if IPI_CRC_CHECK size_t j; unsigned int response_payload[PAYLOAD_ARG_CNT]; #endif @@ -200,7 +200,7 @@ void pm_ipi_buff_read_callb(unsigned int *value, size_t count) *value = mmio_read_32(buffer_base + (i * PAYLOAD_ARG_SIZE)); value++; } -#if ZYNQMP_IPI_CRC_CHECK +#if IPI_CRC_CHECK for (j = 0; j < PAYLOAD_ARG_CNT; j++) response_payload[j] = mmio_read_32(buffer_base + (j * PAYLOAD_ARG_SIZE)); @@ -266,7 +266,7 @@ uint32_t pm_ipi_irq_status(const struct pm_proc *proc) return 0; } -#if ZYNQMP_IPI_CRC_CHECK +#if IPI_CRC_CHECK uint32_t calculate_crc(uint32_t *payload, uint32_t bufsize) { uint32_t crcinit = CRC_INIT_VALUE; diff --git a/plat/xilinx/zynqmp/include/plat_pm_common.h b/plat/xilinx/zynqmp/include/plat_pm_common.h index 56a747a4f..a57aebe39 100644 --- a/plat/xilinx/zynqmp/include/plat_pm_common.h +++ b/plat/xilinx/zynqmp/include/plat_pm_common.h @@ -16,17 +16,6 @@ #include #include "pm_defs.h" -#if ZYNQMP_IPI_CRC_CHECK -#define PAYLOAD_ARG_CNT 8U -#define IPI_W0_TO_W6_SIZE 28U -#define PAYLOAD_CRC_POS 7U -#define CRC_INIT_VALUE 0x4F4EU -#define CRC_ORDER 16U -#define CRC_POLYNOM 0x8005U -#else -#define PAYLOAD_ARG_CNT 6U -#endif -#define PAYLOAD_ARG_SIZE 4U /* size in bytes */ #define ZYNQMP_TZ_VERSION_MAJOR 1 #define ZYNQMP_TZ_VERSION_MINOR 0 diff --git a/plat/xilinx/zynqmp/platform.mk b/plat/xilinx/zynqmp/platform.mk index 921a6e180..99a4beb32 100644 --- a/plat/xilinx/zynqmp/platform.mk +++ b/plat/xilinx/zynqmp/platform.mk @@ -9,7 +9,7 @@ PSCI_EXTENDED_STATE_ID := 1 A53_DISABLE_NON_TEMPORAL_HINT := 0 SEPARATE_CODE_AND_RODATA := 1 ZYNQMP_WDT_RESTART := 0 -ZYNQMP_IPI_CRC_CHECK := 0 +IPI_CRC_CHECK := 0 override RESET_TO_BL31 := 1 override GICV2_G0_FOR_EL3 := 1 override WARMBOOT_ENABLE_DCACHE_EARLY := 1 @@ -47,7 +47,11 @@ $(eval $(call add_define,ZYNQMP_WDT_RESTART)) endif ifdef ZYNQMP_IPI_CRC_CHECK - $(eval $(call add_define,ZYNQMP_IPI_CRC_CHECK)) + $(warning "ZYNQMP_IPI_CRC_CHECK macro is deprecated...instead please use IPI_CRC_CHECK.") +endif + +ifdef IPI_CRC_CHECK + $(eval $(call add_define,IPI_CRC_CHECK)) endif PLAT_INCLUDES := -Iinclude/plat/arm/common/ \ From 654bd99dc649d3ae5216726518ad68aa5121dfa9 Mon Sep 17 00:00:00 2001 From: Venkatesh Yadav Abbarapu Date: Fri, 19 Feb 2021 01:46:21 -0700 Subject: [PATCH 2/2] plat: xilinx: versal: Add the IPI CRC checksum macro support Add support for CRC checksum for IPI data when the macro IPI_CRC_CHECK is enabled. Signed-off-by: Venkatesh Yadav Abbarapu Change-Id: I3c25c715885759076055c6505471339b5d6edcd5 --- plat/xilinx/versal/include/plat_pm_common.h | 3 --- plat/xilinx/versal/platform.mk | 5 +++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/plat/xilinx/versal/include/plat_pm_common.h b/plat/xilinx/versal/include/plat_pm_common.h index fac509690..22c9d1182 100644 --- a/plat/xilinx/versal/include/plat_pm_common.h +++ b/plat/xilinx/versal/include/plat_pm_common.h @@ -16,9 +16,6 @@ #include #include "pm_defs.h" -#define PAYLOAD_ARG_CNT 6U -#define PAYLOAD_ARG_SIZE 4U /* size in bytes */ - #define NON_SECURE_FLAG 1U #define SECURE_FLAG 0U diff --git a/plat/xilinx/versal/platform.mk b/plat/xilinx/versal/platform.mk index ccbc08441..a0b317fe8 100644 --- a/plat/xilinx/versal/platform.mk +++ b/plat/xilinx/versal/platform.mk @@ -8,6 +8,7 @@ A53_DISABLE_NON_TEMPORAL_HINT := 0 SEPARATE_CODE_AND_RODATA := 1 override RESET_TO_BL31 := 1 PL011_GENERIC_UART := 1 +IPI_CRC_CHECK := 0 ifdef VERSAL_ATF_MEM_BASE $(eval $(call add_define,VERSAL_ATF_MEM_BASE)) @@ -31,6 +32,10 @@ ifdef VERSAL_BL32_MEM_BASE $(eval $(call add_define,VERSAL_BL32_MEM_SIZE)) endif +ifdef IPI_CRC_CHECK + $(eval $(call add_define,IPI_CRC_CHECK)) +endif + VERSAL_PLATFORM ?= silicon $(eval $(call add_define_val,VERSAL_PLATFORM,VERSAL_PLATFORM_ID_${VERSAL_PLATFORM}))