diff --git a/drivers/marvell/mg_conf_cm3/mg_conf_cm3.c b/drivers/marvell/mg_conf_cm3/mg_conf_cm3.c index e249b5b..0efa30e 100644 --- a/drivers/marvell/mg_conf_cm3/mg_conf_cm3.c +++ b/drivers/marvell/mg_conf_cm3/mg_conf_cm3.c @@ -8,15 +8,41 @@ #include #include #include -#include +#include /* CONFI REGISTERS */ #define MG_CM3_CONFI_BASE(CP) (MVEBU_CP_REGS_BASE(CP) + 0x100000) +#define MG_CM3_SRAM_BASE(CP) MG_CM3_CONFI_BASE(CP) #define MG_CM3_CONFI_GLOB_CFG_REG(CP) (MG_CM3_CONFI_BASE(CP) + 0x2B500) #define CM3_CPU_EN_BIT BIT(28) #define MG_CM3_MG_INT_MFX_REG(CP) (MG_CM3_CONFI_BASE(CP) + 0x2B054) #define CM3_SYS_RESET_BIT BIT(0) +#define MG_SRAM_SIZE 0x20000 /* 128KB */ + +int mg_image_load(uintptr_t src_addr, uint32_t size, int cp_index) +{ + uintptr_t mg_regs = MG_CM3_SRAM_BASE(cp_index); + + if (size > MG_SRAM_SIZE) { + ERROR("image is too big to fit into MG CM3 memory\n"); + return 1; + } + + NOTICE("Loading MG image from address 0x%lx Size 0x%x to MG at 0x%lx\n", + src_addr, size, mg_regs); + + /* Copy image to MG CM3 SRAM */ + memcpy((void *)mg_regs, (void *)src_addr, size); + + /* Don't release MG CM3 from reset - it will be done by next step + * bootloader (e.g. U-Boot), when appriopriate device-tree setup (which + * has enabeld 802.3. auto-neg) will be choosen. + */ + + return 0; +} + void mg_start_ap_fw(int cp_nr) { if (mmio_read_32(MG_CM3_CONFI_GLOB_CFG_REG(cp_nr)) & CM3_CPU_EN_BIT) { diff --git a/drivers/marvell/mg_conf_cm3/mg_conf_cm3.h b/drivers/marvell/mg_conf_cm3/mg_conf_cm3.h index 44c7b69..8dfaa32 100644 --- a/drivers/marvell/mg_conf_cm3/mg_conf_cm3.h +++ b/drivers/marvell/mg_conf_cm3/mg_conf_cm3.h @@ -6,3 +6,4 @@ */ void mg_start_ap_fw(int cp_nr); +int mg_image_load(uintptr_t src_addr, uint32_t size, int cp_index); diff --git a/plat/marvell/armada/common/mss/mss_scp_bl2_format.h b/plat/marvell/armada/common/mss/mss_scp_bl2_format.h index 7150f0a..74dddc6 100644 --- a/plat/marvell/armada/common/mss/mss_scp_bl2_format.h +++ b/plat/marvell/armada/common/mss/mss_scp_bl2_format.h @@ -13,7 +13,6 @@ #define HEADER_VERSION 0x1 #define MSS_IDRAM_SIZE 0x10000 /* 64KB */ -#define MG_SRAM_SIZE 0x20000 /* 128KB */ /* Types definitions */ typedef struct file_header { diff --git a/plat/marvell/armada/common/mss/mss_scp_bootloader.c b/plat/marvell/armada/common/mss/mss_scp_bootloader.c index 4473d81..adf570e 100644 --- a/plat/marvell/armada/common/mss/mss_scp_bootloader.c +++ b/plat/marvell/armada/common/mss/mss_scp_bootloader.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -42,8 +43,6 @@ #define MSS_HANDSHAKE_TIMEOUT 50 -#define MG_CM3_SRAM_BASE(CP) (MVEBU_CP_REGS_BASE(CP) + 0x100000) - static int mss_check_image_ready(volatile struct mss_pm_ctrl_block *mss_pm_crtl) { int timeout = MSS_HANDSHAKE_TIMEOUT; @@ -61,28 +60,6 @@ return 0; } -static int mg_image_load(uintptr_t src_addr, uint32_t size, uintptr_t mg_regs) -{ - if (size > MG_SRAM_SIZE) { - ERROR("image is too big to fit into MG CM3 memory\n"); - return 1; - } - - NOTICE("Loading MG image from address 0x%lx Size 0x%x to MG at 0x%lx\n", - src_addr, size, mg_regs); - - /* Copy image to MG CM3 SRAM */ - memcpy((void *)mg_regs, (void *)src_addr, size); - - /* - * Don't release MG CM3 from reset - it will be done by next step - * bootloader (e.g. U-Boot), when appriopriate device-tree setup (which - * has enabeld 802.3. auto-neg) will be choosen. - */ - - return 0; -} - static int mss_image_load(uint32_t src_addr, uint32_t size, uintptr_t mss_regs) { uint32_t i, loop_num, timeout; @@ -258,8 +235,7 @@ break; } NOTICE("Load image to CP%d MG\n", cp_index); - ret = mg_image_load(single_img, image_size, - MG_CM3_SRAM_BASE(cp_index)); + ret = mg_image_load(single_img, image_size, cp_index); if (ret != 0) { ERROR("SCP Image load failed\n"); return -1;