From 301d27d998892c054dec925264f81b11dcd64822 Mon Sep 17 00:00:00 2001 From: Radoslaw Biernacki Date: Thu, 17 May 2018 22:19:11 +0200 Subject: [PATCH 1/2] qemu: introducing sub-platforms to qemu platform This commit change the plat/qemu directory structure into: `-- plat `-- qemu |-- common (files shared with all qemu subplatforms) |-- qemu (original qemu platform) |-- qemu_sbsa (new sqemu_sbsa platform) |-- subplat1 `-- subplat2 This opens the possibility of adding new qemu sub-platforms which reuse existing common platform code. The first platform which will leverage new structure will be SBSA platform. Signed-off-by: Radoslaw Biernacki Signed-off-by: Sandrine Bailleux Change-Id: Id0d8133e1fffc1b574b69aa2770ebc02bb837a9b --- plat/qemu/{ => common}/aarch32/plat_helpers.S | 0 plat/qemu/{ => common}/aarch64/plat_helpers.S | 0 plat/qemu/{ => common}/include/plat_macros.S | 0 plat/qemu/{ => common}/qemu_bl1_setup.c | 0 .../{ => common}/qemu_bl2_mem_params_desc.c | 0 plat/qemu/{ => common}/qemu_bl2_setup.c | 0 plat/qemu/{ => common}/qemu_bl31_setup.c | 0 plat/qemu/{ => common}/qemu_common.c | 0 plat/qemu/{ => common}/qemu_console.c | 0 plat/qemu/{ => common}/qemu_gicv2.c | 0 plat/qemu/{ => common}/qemu_gicv3.c | 0 plat/qemu/{ => common}/qemu_image_load.c | 0 plat/qemu/{ => common}/qemu_io_storage.c | 0 plat/qemu/{ => common}/qemu_pm.c | 0 plat/qemu/{ => common}/qemu_private.h | 0 plat/qemu/{ => common}/qemu_rotpk.S | 0 plat/qemu/{ => common}/qemu_stack_protector.c | 0 plat/qemu/{ => common}/qemu_trusted_boot.c | 0 plat/qemu/{ => common}/sp_min/sp_min-qemu.mk | 0 plat/qemu/{ => common}/sp_min/sp_min_setup.c | 0 plat/qemu/{ => common}/topology.c | 0 plat/qemu/{ => qemu}/include/platform_def.h | 0 plat/qemu/{ => qemu}/platform.mk | 56 ++++++++++--------- 23 files changed, 30 insertions(+), 26 deletions(-) rename plat/qemu/{ => common}/aarch32/plat_helpers.S (100%) rename plat/qemu/{ => common}/aarch64/plat_helpers.S (100%) rename plat/qemu/{ => common}/include/plat_macros.S (100%) rename plat/qemu/{ => common}/qemu_bl1_setup.c (100%) rename plat/qemu/{ => common}/qemu_bl2_mem_params_desc.c (100%) rename plat/qemu/{ => common}/qemu_bl2_setup.c (100%) rename plat/qemu/{ => common}/qemu_bl31_setup.c (100%) rename plat/qemu/{ => common}/qemu_common.c (100%) rename plat/qemu/{ => common}/qemu_console.c (100%) rename plat/qemu/{ => common}/qemu_gicv2.c (100%) rename plat/qemu/{ => common}/qemu_gicv3.c (100%) rename plat/qemu/{ => common}/qemu_image_load.c (100%) rename plat/qemu/{ => common}/qemu_io_storage.c (100%) rename plat/qemu/{ => common}/qemu_pm.c (100%) rename plat/qemu/{ => common}/qemu_private.h (100%) rename plat/qemu/{ => common}/qemu_rotpk.S (100%) rename plat/qemu/{ => common}/qemu_stack_protector.c (100%) rename plat/qemu/{ => common}/qemu_trusted_boot.c (100%) rename plat/qemu/{ => common}/sp_min/sp_min-qemu.mk (100%) rename plat/qemu/{ => common}/sp_min/sp_min_setup.c (100%) rename plat/qemu/{ => common}/topology.c (100%) rename plat/qemu/{ => qemu}/include/platform_def.h (100%) rename plat/qemu/{ => qemu}/platform.mk (74%) diff --git a/plat/qemu/aarch32/plat_helpers.S b/plat/qemu/common/aarch32/plat_helpers.S similarity index 100% rename from plat/qemu/aarch32/plat_helpers.S rename to plat/qemu/common/aarch32/plat_helpers.S diff --git a/plat/qemu/aarch64/plat_helpers.S b/plat/qemu/common/aarch64/plat_helpers.S similarity index 100% rename from plat/qemu/aarch64/plat_helpers.S rename to plat/qemu/common/aarch64/plat_helpers.S diff --git a/plat/qemu/include/plat_macros.S b/plat/qemu/common/include/plat_macros.S similarity index 100% rename from plat/qemu/include/plat_macros.S rename to plat/qemu/common/include/plat_macros.S diff --git a/plat/qemu/qemu_bl1_setup.c b/plat/qemu/common/qemu_bl1_setup.c similarity index 100% rename from plat/qemu/qemu_bl1_setup.c rename to plat/qemu/common/qemu_bl1_setup.c diff --git a/plat/qemu/qemu_bl2_mem_params_desc.c b/plat/qemu/common/qemu_bl2_mem_params_desc.c similarity index 100% rename from plat/qemu/qemu_bl2_mem_params_desc.c rename to plat/qemu/common/qemu_bl2_mem_params_desc.c diff --git a/plat/qemu/qemu_bl2_setup.c b/plat/qemu/common/qemu_bl2_setup.c similarity index 100% rename from plat/qemu/qemu_bl2_setup.c rename to plat/qemu/common/qemu_bl2_setup.c diff --git a/plat/qemu/qemu_bl31_setup.c b/plat/qemu/common/qemu_bl31_setup.c similarity index 100% rename from plat/qemu/qemu_bl31_setup.c rename to plat/qemu/common/qemu_bl31_setup.c diff --git a/plat/qemu/qemu_common.c b/plat/qemu/common/qemu_common.c similarity index 100% rename from plat/qemu/qemu_common.c rename to plat/qemu/common/qemu_common.c diff --git a/plat/qemu/qemu_console.c b/plat/qemu/common/qemu_console.c similarity index 100% rename from plat/qemu/qemu_console.c rename to plat/qemu/common/qemu_console.c diff --git a/plat/qemu/qemu_gicv2.c b/plat/qemu/common/qemu_gicv2.c similarity index 100% rename from plat/qemu/qemu_gicv2.c rename to plat/qemu/common/qemu_gicv2.c diff --git a/plat/qemu/qemu_gicv3.c b/plat/qemu/common/qemu_gicv3.c similarity index 100% rename from plat/qemu/qemu_gicv3.c rename to plat/qemu/common/qemu_gicv3.c diff --git a/plat/qemu/qemu_image_load.c b/plat/qemu/common/qemu_image_load.c similarity index 100% rename from plat/qemu/qemu_image_load.c rename to plat/qemu/common/qemu_image_load.c diff --git a/plat/qemu/qemu_io_storage.c b/plat/qemu/common/qemu_io_storage.c similarity index 100% rename from plat/qemu/qemu_io_storage.c rename to plat/qemu/common/qemu_io_storage.c diff --git a/plat/qemu/qemu_pm.c b/plat/qemu/common/qemu_pm.c similarity index 100% rename from plat/qemu/qemu_pm.c rename to plat/qemu/common/qemu_pm.c diff --git a/plat/qemu/qemu_private.h b/plat/qemu/common/qemu_private.h similarity index 100% rename from plat/qemu/qemu_private.h rename to plat/qemu/common/qemu_private.h diff --git a/plat/qemu/qemu_rotpk.S b/plat/qemu/common/qemu_rotpk.S similarity index 100% rename from plat/qemu/qemu_rotpk.S rename to plat/qemu/common/qemu_rotpk.S diff --git a/plat/qemu/qemu_stack_protector.c b/plat/qemu/common/qemu_stack_protector.c similarity index 100% rename from plat/qemu/qemu_stack_protector.c rename to plat/qemu/common/qemu_stack_protector.c diff --git a/plat/qemu/qemu_trusted_boot.c b/plat/qemu/common/qemu_trusted_boot.c similarity index 100% rename from plat/qemu/qemu_trusted_boot.c rename to plat/qemu/common/qemu_trusted_boot.c diff --git a/plat/qemu/sp_min/sp_min-qemu.mk b/plat/qemu/common/sp_min/sp_min-qemu.mk similarity index 100% rename from plat/qemu/sp_min/sp_min-qemu.mk rename to plat/qemu/common/sp_min/sp_min-qemu.mk diff --git a/plat/qemu/sp_min/sp_min_setup.c b/plat/qemu/common/sp_min/sp_min_setup.c similarity index 100% rename from plat/qemu/sp_min/sp_min_setup.c rename to plat/qemu/common/sp_min/sp_min_setup.c diff --git a/plat/qemu/topology.c b/plat/qemu/common/topology.c similarity index 100% rename from plat/qemu/topology.c rename to plat/qemu/common/topology.c diff --git a/plat/qemu/include/platform_def.h b/plat/qemu/qemu/include/platform_def.h similarity index 100% rename from plat/qemu/include/platform_def.h rename to plat/qemu/qemu/include/platform_def.h diff --git a/plat/qemu/platform.mk b/plat/qemu/qemu/platform.mk similarity index 74% rename from plat/qemu/platform.mk rename to plat/qemu/qemu/platform.mk index bc4a21bc0..5fda2cd47 100644 --- a/plat/qemu/platform.mk +++ b/plat/qemu/qemu/platform.mk @@ -32,16 +32,20 @@ ifeq ($(NEED_BL32),yes) $(eval $(call add_define,QEMU_LOAD_BL32)) endif -PLAT_PATH := plat/qemu/ -PLAT_INCLUDES := -Iplat/qemu/include +PLAT_QEMU_PATH := plat/qemu/qemu +PLAT_QEMU_COMMON_PATH := plat/qemu/common +PLAT_INCLUDES := -Iinclude/plat/arm/common/ \ + -I${PLAT_QEMU_COMMON_PATH}/include \ + -I${PLAT_QEMU_PATH}/include \ + -Iinclude/common/tbbr ifeq (${ARM_ARCH_MAJOR},8) PLAT_INCLUDES += -Iinclude/plat/arm/common/${ARCH} endif -PLAT_BL_COMMON_SOURCES := plat/qemu/qemu_common.c \ - plat/qemu/qemu_console.c \ - drivers/arm/pl011/${ARCH}/pl011_console.S \ +PLAT_BL_COMMON_SOURCES := ${PLAT_QEMU_COMMON_PATH}/qemu_common.c \ + ${PLAT_QEMU_COMMON_PATH}/qemu_console.c \ + drivers/arm/pl011/${ARCH}/pl011_console.S include lib/xlat_tables_v2/xlat_tables.mk PLAT_BL_COMMON_SOURCES += ${XLAT_TABLES_LIB_SRCS} @@ -59,13 +63,13 @@ ifneq (${TRUSTED_BOARD_BOOT},0) BL1_SOURCES += ${AUTH_SOURCES} \ bl1/tbbr/tbbr_img_desc.c \ plat/common/tbbr/plat_tbbr.c \ - plat/qemu/qemu_trusted_boot.c \ - $(PLAT_PATH)/qemu_rotpk.S + ${PLAT_QEMU_COMMON_PATH}/qemu_trusted_boot.c \ + $(PLAT_QEMU_COMMON_PATH)/qemu_rotpk.S BL2_SOURCES += ${AUTH_SOURCES} \ plat/common/tbbr/plat_tbbr.c \ - plat/qemu/qemu_trusted_boot.c \ - $(PLAT_PATH)/qemu_rotpk.S + ${PLAT_QEMU_COMMON_PATH}/qemu_trusted_boot.c \ + $(PLAT_QEMU_COMMON_PATH)/qemu_rotpk.S ROT_KEY = $(BUILD_PLAT)/rot_key.pem ROTPK_HASH = $(BUILD_PLAT)/rotpk_sha256.bin @@ -93,9 +97,9 @@ BL1_SOURCES += drivers/io/io_semihosting.c \ drivers/io/io_memmap.c \ lib/semihosting/semihosting.c \ lib/semihosting/${ARCH}/semihosting_call.S \ - plat/qemu/qemu_io_storage.c \ - plat/qemu/${ARCH}/plat_helpers.S \ - plat/qemu/qemu_bl1_setup.c + ${PLAT_QEMU_COMMON_PATH}/qemu_io_storage.c \ + ${PLAT_QEMU_COMMON_PATH}/${ARCH}/plat_helpers.S \ + ${PLAT_QEMU_COMMON_PATH}/qemu_bl1_setup.c ifeq (${ARM_ARCH_MAJOR},8) BL1_SOURCES += lib/cpus/aarch64/aem_generic.S \ @@ -110,13 +114,13 @@ BL2_SOURCES += drivers/io/io_semihosting.c \ drivers/io/io_fip.c \ drivers/io/io_memmap.c \ lib/semihosting/semihosting.c \ - lib/semihosting/${ARCH}/semihosting_call.S\ - plat/qemu/qemu_io_storage.c \ - plat/qemu/${ARCH}/plat_helpers.S \ - plat/qemu/qemu_bl2_setup.c \ - common/fdt_fixup.c \ - plat/qemu/qemu_bl2_mem_params_desc.c \ - plat/qemu/qemu_image_load.c \ + lib/semihosting/${ARCH}/semihosting_call.S \ + ${PLAT_QEMU_COMMON_PATH}/qemu_io_storage.c \ + ${PLAT_QEMU_COMMON_PATH}/${ARCH}/plat_helpers.S \ + ${PLAT_QEMU_COMMON_PATH}/qemu_bl2_setup.c \ + ${PLAT_QEMU_COMMON_PATH}/qemu_bl2_mem_params_desc.c \ + ${PLAT_QEMU_COMMON_PATH}/qemu_image_load.c \ + common/fdt_fixup.c \ common/desc_image_load.c ifeq ($(add-lib-optee),yes) @@ -127,13 +131,13 @@ QEMU_GICV2_SOURCES := drivers/arm/gic/v2/gicv2_helpers.c \ drivers/arm/gic/v2/gicv2_main.c \ drivers/arm/gic/common/gic_common.c \ plat/common/plat_gicv2.c \ - plat/qemu/qemu_gicv2.c + ${PLAT_QEMU_COMMON_PATH}/qemu_gicv2.c QEMU_GICV3_SOURCES := drivers/arm/gic/v3/gicv3_helpers.c \ drivers/arm/gic/v3/gicv3_main.c \ drivers/arm/gic/common/gic_common.c \ plat/common/plat_gicv3.c \ - plat/qemu/qemu_gicv3.c + ${PLAT_QEMU_COMMON_PATH}/qemu_gicv3.c ifeq (${QEMU_USE_GIC_DRIVER}, QEMU_GICV2) QEMU_GIC_SOURCES := ${QEMU_GICV2_SOURCES} @@ -148,10 +152,10 @@ BL31_SOURCES += lib/cpus/aarch64/aem_generic.S \ lib/cpus/aarch64/cortex_a53.S \ lib/cpus/aarch64/cortex_a57.S \ plat/common/plat_psci_common.c \ - plat/qemu/qemu_pm.c \ - plat/qemu/topology.c \ - plat/qemu/aarch64/plat_helpers.S \ - plat/qemu/qemu_bl31_setup.c \ + ${PLAT_QEMU_COMMON_PATH}/qemu_pm.c \ + ${PLAT_QEMU_COMMON_PATH}/topology.c \ + ${PLAT_QEMU_COMMON_PATH}/aarch64/plat_helpers.S \ + ${PLAT_QEMU_COMMON_PATH}/qemu_bl31_setup.c \ ${QEMU_GIC_SOURCES} endif @@ -167,7 +171,7 @@ endif SEPARATE_CODE_AND_RODATA := 1 ENABLE_STACK_PROTECTOR := 0 ifneq ($(ENABLE_STACK_PROTECTOR), 0) - PLAT_BL_COMMON_SOURCES += plat/qemu/qemu_stack_protector.c + PLAT_BL_COMMON_SOURCES += ${PLAT_QEMU_COMMON_PATH}/qemu_stack_protector.c endif BL32_RAM_LOCATION := tdram From 9a006ad10509cf158089470ef713f7edde073eaf Mon Sep 17 00:00:00 2001 From: Radoslaw Biernacki Date: Thu, 17 May 2018 22:19:35 +0200 Subject: [PATCH 2/2] qemu: Simplify the image size calculation Patch introduce the macro NS_IMAGE_MAX_SIZE to simplify the image size calculation. Use of additional parenthesis removes the possibility of improper calculations due nested macro expansion for subtraction. In case of platforms with DRAM window over 32bits, patch also removes potential problems with type casting, as meminfo.image_size is uint32_t but macro calculations were done in 64bit space. Signed-off-by: Radoslaw Biernacki Change-Id: I2d05a2d9dd6000dba6114df53262995cf85af018 --- plat/qemu/common/qemu_bl2_mem_params_desc.c | 5 ++--- plat/qemu/qemu/include/platform_def.h | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plat/qemu/common/qemu_bl2_mem_params_desc.c b/plat/qemu/common/qemu_bl2_mem_params_desc.c index a01f2dc91..f8b9066df 100644 --- a/plat/qemu/common/qemu_bl2_mem_params_desc.c +++ b/plat/qemu/common/qemu_bl2_mem_params_desc.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -139,8 +139,7 @@ static bl_mem_params_node_t bl2_mem_params_descs[] = { SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, VERSION_2, image_info_t, 0), .image_info.image_base = NS_IMAGE_OFFSET, - .image_info.image_max_size = NS_DRAM0_BASE + NS_DRAM0_SIZE - - NS_IMAGE_OFFSET, + .image_info.image_max_size = NS_IMAGE_MAX_SIZE, # endif /* !PRELOADED_BL33_BASE */ .next_handoff_image_id = INVALID_IMAGE_ID, diff --git a/plat/qemu/qemu/include/platform_def.h b/plat/qemu/qemu/include/platform_def.h index d7f77cc78..a90573712 100644 --- a/plat/qemu/qemu/include/platform_def.h +++ b/plat/qemu/qemu/include/platform_def.h @@ -165,7 +165,8 @@ # error "Unsupported BL32_RAM_LOCATION_ID value" #endif -#define NS_IMAGE_OFFSET 0x60000000 +#define NS_IMAGE_OFFSET (NS_DRAM0_BASE + 0x20000000) +#define NS_IMAGE_MAX_SIZE (NS_DRAM0_SIZE - 0x20000000) #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 32) #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 32)