GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)

This commit is contained in:
lai
2026-09-06 03:52:57 +08:00
commit b1928b41c0
21813 changed files with 4413081 additions and 0 deletions
@@ -0,0 +1,76 @@
/*
* Copyright (C) 2018 Marvell International Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
* https://spdx.org/licenses
*/
#include <platform_def.h>
OUTPUT_FORMAT(PLATFORM_LINKER_FORMAT)
OUTPUT_ARCH(PLATFORM_LINKER_ARCH)
ENTRY(ble_main)
MEMORY {
RAM (rwx): ORIGIN = BLE_BASE, LENGTH = BLE_LIMIT - BLE_BASE
}
SECTIONS
{
. = BLE_BASE;
ro . : {
__RO_START__ = .;
*ble_main.o(.entry*)
*(.text*)
*(.rodata*)
__RO_END_UNALIGNED__ = .;
__RO_END__ = .;
} >RAM
/*
* Define a linker symbol to mark start of the RW memory area for this
* image.
*/
__RW_START__ = . ;
.data . : {
__DATA_START__ = .;
*(.data*)
__DATA_END__ = .;
} >RAM
stacks . (NOLOAD) : {
__STACKS_START__ = .;
*(tzfw_normal_stacks)
__STACKS_END__ = .;
} >RAM
.bss : {
__BSS_START__ = .;
*(.bss*)
__BSS_END__ = .;
} >RAM
/*
* Extend the BLE binary to the maximum size allocated for it in platform
* definition files and prevent overlapping between BLE BSS section and
* additional extensions that can follow the BLE in flash image preamble.
* This situation happens for instance when secure extension is added to
* the image preamble.
*/
.fill LOADADDR(.bss) + SIZEOF(.bss) : {
FILL(0xDEADC0DE);
. = ORIGIN(RAM) + LENGTH(RAM) - 1;
BYTE(0x00)
} >RAM
/*
* Define a linker symbol to mark end of the RW memory area for this
* image.
*/
__RW_END__ = .;
__BLE_END__ = .;
__BSS_SIZE__ = SIZEOF(.bss);
}
@@ -0,0 +1,35 @@
# Copyright (C) 2018 Marvell International Ltd.
#
# SPDX-License-Identifier: BSD-3-Clause
# https://spdx.org/licenses
MV_DDR_LIB = $(BUILD_PLAT)/ble/mv_ddr_lib.a
LIBC_LIB = $(BUILD_PLAT)/lib/libc.a
BLE_LIBS = $(MV_DDR_LIB) $(LIBC_LIB)
PLAT_MARVELL = plat/marvell/armada
BLE_SOURCES += $(BLE_PATH)/ble_main.c \
$(BLE_PATH)/ble_mem.S \
drivers/delay_timer/delay_timer.c \
drivers/marvell/iob.c \
$(PLAT_MARVELL)/common/aarch64/marvell_helpers.S \
$(PLAT_MARVELL)/common/plat_delay_timer.c \
$(PLAT_MARVELL)/common/marvell_console.c
MV_DDR_INCLUDES := -I$(CURDIR)/include \
-I$(CURDIR)/include/arch/aarch64 \
-I$(CURDIR)/include/lib/libc \
-I$(CURDIR)/include/lib/libc/aarch64
BLE_LINKERFILE := $(BLE_PATH)/ble.ld.S
BLE_OBJS := $(addprefix $(BUILD_PLAT)/ble/,$(call SOURCES_TO_OBJS,$(BLE_SOURCES)))
$(BLE_OBJS): PLAT_INCLUDES += -I$(MV_DDR_PATH)
$(BLE_OBJS): $(MV_DDR_LIB)
$(MV_DDR_LIB): FORCE
# Do not remove! Following checks are required to ensure correct TF-A builds, removing these checks leads to broken TF-A builds
$(if $(value MV_DDR_PATH),,$(error "Platform '$(PLAT)' for BLE requires MV_DDR_PATH. Please set MV_DDR_PATH to point to the right directory"))
$(if $(wildcard $(value MV_DDR_PATH)/*),,$(error "'MV_DDR_PATH=$(value MV_DDR_PATH)' was specified, but '$(value MV_DDR_PATH)' directory does not exist"))
$(if $(shell git -C $(value MV_DDR_PATH) rev-parse --show-cdup 2>&1),$(error "'MV_DDR_PATH=$(value MV_DDR_PATH)' was specified, but '$(value MV_DDR_PATH)' does not contain valid mv-ddr-marvell git repository"))
@+make -C $(MV_DDR_PATH) --no-print-directory PLAT_INCLUDES="$(MV_DDR_INCLUDES)" PLATFORM=$(PLAT) ARCH=AARCH64 OBJ_DIR=$(BUILD_PLAT)/ble
@@ -0,0 +1,99 @@
/*
* Copyright (C) 2018 Marvell International Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
* https://spdx.org/licenses
*/
#include <string.h>
#include <platform_def.h>
#include <arch_helpers.h>
#include <common/debug.h>
#include <drivers/console.h>
#include <marvell_plat_priv.h>
#include <marvell_pm.h>
#include <plat_marvell.h>
#define BR_FLAG_SILENT 0x1
#define SKIP_IMAGE_CODE 0xDEADB002
void mailbox_clean(void)
{
uintptr_t *mailbox = (void *)PLAT_MARVELL_MAILBOX_BASE;
memset(mailbox, 0, PLAT_MARVELL_MAILBOX_SIZE);
}
int exec_ble_main(int bootrom_flags)
{
int skip = 0;
uintptr_t *mailbox = (void *)PLAT_MARVELL_MAILBOX_BASE;
/*
* In some situations, like boot from UART, bootrom will
* request to avoid printing to console. in that case don't
* initialize the console and prints will be ignored
*/
if ((bootrom_flags & BR_FLAG_SILENT) == 0)
marvell_console_boot_init();
NOTICE("Starting binary extension\n");
/* initialize time (for delay functionality) */
plat_delay_timer_init();
ble_plat_setup(&skip);
/* if there's skip image request, bootrom will load from the image
* saved on the next address of the flash
*/
if (skip)
return SKIP_IMAGE_CODE;
/*
* Check if the mailbox magic number is stored at index MBOX_IDX_MAGIC
* and the suspend to RAM magic number at index MBOX_IDX_SUSPEND_MAGIC.
* If the above is true, this is the recovery from suspend to RAM state.
* In such case the mailbox should remain intact, since it stores the
* warm boot jump address to be used by the TF-A in BL31.
* Othervise the mailbox should be cleaned from a garbage data.
*/
if (mailbox[MBOX_IDX_MAGIC] != MVEBU_MAILBOX_MAGIC_NUM ||
mailbox[MBOX_IDX_SUSPEND_MAGIC] != MVEBU_MAILBOX_SUSPEND_STATE) {
NOTICE("Cold boot\n");
mailbox_clean();
} else {
void (*bootrom_exit)(void) =
(void (*)(void))mailbox[MBOX_IDX_ROM_EXIT_ADDR];
INFO("Recovery...\n");
/*
* If this is recovery from suspend, two things has to be done:
* 1. Define the DRAM region as executable memory for preparing
* jump to TF-A
* 2. Instead of returning control to the BootROM, invalidate
* and flush caches, and continue execution at address stored
* in the mailbox.
* This should be done until the BootROM have a native support
* for the system restore flow.
*/
marvell_ble_prepare_exit();
bootrom_exit();
}
return 0;
}
/* NOTE: don't notify this function, all code must be added to exec_ble_main
* in order to keep the end of ble_main as a fixed address.
*/
int __attribute__ ((section(".entry"))) ble_main(int bootrom_flags)
{
volatile int ret;
ret = exec_ble_main(bootrom_flags);
return ret;
}
@@ -0,0 +1,30 @@
/*
* Copyright (C) 2018 Marvell International Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
* https://spdx.org/licenses
*/
#include <asm_macros.S>
#include <marvell_def.h>
#include <platform_def.h>
#define PTE_NON_EXEC_OFF 54 /* XN - eXecute Never bit offset - see VMSAv8-64 */
.globl marvell_ble_prepare_exit
func marvell_ble_prepare_exit
/*
* Read the page table base and set the first page to be executable.
* This is required for jumping to DRAM for further execution.
*/
mrs x0, ttbr0_el3
ldr x1, [x0]
mov x2, #1
bic x1, x1, x2, lsl #PTE_NON_EXEC_OFF
str x1, [x0]
tlbi alle3
dsb sy
isb
ret
endfunc marvell_ble_prepare_exit