Unverified Commit 37cdad2a authored by Antonio Niño Díaz's avatar Antonio Niño Díaz Committed by GitHub
Browse files

Merge pull request #1821 from Yann-lms/stm32mp1_2019-02-14

Series of new patches for STM32MP1
parents 83321666 6c1e71e1
Showing with 546 additions and 157 deletions
+546 -157
...@@ -280,6 +280,9 @@ ...@@ -280,6 +280,9 @@
/* Offset between RCC_MP_xxxENSETR and RCC_MP_xxxENCLRR registers */ /* Offset between RCC_MP_xxxENSETR and RCC_MP_xxxENCLRR registers */
#define RCC_MP_ENCLRR_OFFSET U(4) #define RCC_MP_ENCLRR_OFFSET U(4)
/* Offset between RCC_xxxRSTSETR and RCC_xxxRSTCLRR registers */
#define RCC_RSTCLRR_OFFSET U(4)
/* Fields of RCC_BDCR register */ /* Fields of RCC_BDCR register */
#define RCC_BDCR_LSEON BIT(0) #define RCC_BDCR_LSEON BIT(0)
#define RCC_BDCR_LSEBYP BIT(1) #define RCC_BDCR_LSEBYP BIT(1)
......
/*
* Copyright (c) 2018, STMicroelectronics - All Rights Reserved
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef STM32MP1_RESET_H
#define STM32MP1_RESET_H
#include <stdint.h>
void stm32mp1_reset_assert(uint32_t reset_id);
void stm32mp1_reset_deassert(uint32_t reset_id);
#endif /* STM32MP1_RESET_H */
/*
* Copyright (c) 2017-2019, STMicroelectronics - All Rights Reserved
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef STM32MP_CLKFUNC_H
#define STM32MP_CLKFUNC_H
#include <stdbool.h>
#include <libfdt.h>
int fdt_get_rcc_node(void *fdt);
uint32_t fdt_rcc_read_addr(void);
int fdt_rcc_read_uint32_array(const char *prop_name,
uint32_t *array, uint32_t count);
int fdt_rcc_subnode_offset(const char *name);
const fdt32_t *fdt_rcc_read_prop(const char *prop_name, int *lenp);
bool fdt_get_rcc_secure_status(void);
uintptr_t fdt_get_stgen_base(void);
int fdt_get_clock_id(int node);
#endif /* STM32MP_CLKFUNC_H */
...@@ -11,10 +11,41 @@ ...@@ -11,10 +11,41 @@
#include <platform_def.h> #include <platform_def.h>
bool dt_check_pmic(void); /*
int dt_pmic_enable_boot_on_regulators(void); * dt_pmic_status - Check PMIC status from device tree
void initialize_pmic_i2c(void); *
* Returns the status of the PMIC (secure, non-secure), or a negative value on
* error
*/
int dt_pmic_status(void);
/*
* dt_pmic_configure_boot_on_regulators - Configure boot-on and always-on
* regulators from device tree configuration
*
* Returns 0 on success, and negative values on errors
*/
int dt_pmic_configure_boot_on_regulators(void);
/*
* initialize_pmic_i2c - Initialize I2C for the PMIC control
*
* Returns true if PMIC is available, false if not found, panics on errors
*/
bool initialize_pmic_i2c(void);
/*
* initialize_pmic - Main PMIC initialization function, called at platform init
*
* Panics on errors
*/
void initialize_pmic(void); void initialize_pmic(void);
/*
* pmic_ddr_power_init - Initialize regulators required for DDR
*
* Returns 0 on success, and negative values on errors
*/
int pmic_ddr_power_init(enum ddr_type ddr_type); int pmic_ddr_power_init(enum ddr_type ddr_type);
#endif /* STM32MP_PMIC_H */ #endif /* STM32MP_PMIC_H */
/*
* Copyright (c) 2018-2019, STMicroelectronics - All Rights Reserved
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef STM32MP_RESET_H
#define STM32MP_RESET_H
#include <stdint.h>
void stm32mp_reset_assert(uint32_t reset_id);
void stm32mp_reset_deassert(uint32_t reset_id);
#endif /* STM32MP_RESET_H */
...@@ -20,14 +20,10 @@ ...@@ -20,14 +20,10 @@
#include <drivers/st/io_mmc.h> #include <drivers/st/io_mmc.h>
#include <drivers/st/io_stm32image.h> #include <drivers/st/io_stm32image.h>
#include <drivers/st/stm32_sdmmc2.h> #include <drivers/st/stm32_sdmmc2.h>
#include <drivers/st/stm32mp1_rcc.h>
#include <lib/mmio.h> #include <lib/mmio.h>
#include <lib/utils.h> #include <lib/utils.h>
#include <plat/common/platform.h> #include <plat/common/platform.h>
#include <boot_api.h>
#include <stm32mp1_private.h>
/* IO devices */ /* IO devices */
static const io_dev_connector_t *dummy_dev_con; static const io_dev_connector_t *dummy_dev_con;
static uintptr_t dummy_dev_handle; static uintptr_t dummy_dev_handle;
...@@ -60,12 +56,12 @@ static const io_dev_connector_t *mmc_dev_con; ...@@ -60,12 +56,12 @@ static const io_dev_connector_t *mmc_dev_con;
static const io_block_spec_t bl32_block_spec = { static const io_block_spec_t bl32_block_spec = {
.offset = BL32_BASE, .offset = BL32_BASE,
.length = STM32MP1_BL32_SIZE .length = STM32MP_BL32_SIZE
}; };
static const io_block_spec_t bl2_block_spec = { static const io_block_spec_t bl2_block_spec = {
.offset = BL2_BASE, .offset = BL2_BASE,
.length = STM32MP1_BL2_SIZE, .length = STM32MP_BL2_SIZE,
}; };
static const struct stm32image_part_info bl33_partition_spec = { static const struct stm32image_part_info bl33_partition_spec = {
...@@ -166,7 +162,7 @@ static void print_boot_device(boot_api_context_t *boot_context) ...@@ -166,7 +162,7 @@ static void print_boot_device(boot_api_context_t *boot_context)
} }
} }
void stm32mp1_io_setup(void) void stm32mp_io_setup(void)
{ {
int io_result __unused; int io_result __unused;
uint8_t idx; uint8_t idx;
...@@ -176,7 +172,7 @@ void stm32mp1_io_setup(void) ...@@ -176,7 +172,7 @@ void stm32mp1_io_setup(void)
uintptr_t mmc_default_instance; uintptr_t mmc_default_instance;
const partition_entry_t *entry; const partition_entry_t *entry;
boot_api_context_t *boot_context = boot_api_context_t *boot_context =
(boot_api_context_t *)stm32mp1_get_boot_ctx_address(); (boot_api_context_t *)stm32mp_get_boot_ctx_address();
print_boot_device(boot_context); print_boot_device(boot_context);
...@@ -203,21 +199,21 @@ void stm32mp1_io_setup(void) ...@@ -203,21 +199,21 @@ void stm32mp1_io_setup(void)
if (boot_context->boot_interface_selected == if (boot_context->boot_interface_selected ==
BOOT_API_CTX_BOOT_INTERFACE_SEL_FLASH_EMMC) { BOOT_API_CTX_BOOT_INTERFACE_SEL_FLASH_EMMC) {
device_info.mmc_dev_type = MMC_IS_EMMC; device_info.mmc_dev_type = MMC_IS_EMMC;
mmc_default_instance = STM32MP1_SDMMC2_BASE; mmc_default_instance = STM32MP_SDMMC2_BASE;
} else { } else {
device_info.mmc_dev_type = MMC_IS_SD; device_info.mmc_dev_type = MMC_IS_SD;
mmc_default_instance = STM32MP1_SDMMC1_BASE; mmc_default_instance = STM32MP_SDMMC1_BASE;
} }
switch (boot_context->boot_interface_instance) { switch (boot_context->boot_interface_instance) {
case 1: case 1:
params.reg_base = STM32MP1_SDMMC1_BASE; params.reg_base = STM32MP_SDMMC1_BASE;
break; break;
case 2: case 2:
params.reg_base = STM32MP1_SDMMC2_BASE; params.reg_base = STM32MP_SDMMC2_BASE;
break; break;
case 3: case 3:
params.reg_base = STM32MP1_SDMMC3_BASE; params.reg_base = STM32MP_SDMMC3_BASE;
break; break;
default: default:
WARN("SDMMC instance not found, using default\n"); WARN("SDMMC instance not found, using default\n");
......
/*
* Copyright (C) 2018-2019, STMicroelectronics - All Rights Reserved
* Copyright (c) 2018-2019, Linaro Limited
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef STM32MP_COMMON_H
#define STM32MP_COMMON_H
#include <stdbool.h>
#include <arch_helpers.h>
/* Functions to save and get boot context address given by ROM code */
void stm32mp_save_boot_ctx_address(uintptr_t address);
uintptr_t stm32mp_get_boot_ctx_address(void);
/* Return the base address of the DDR controller */
uintptr_t stm32mp_ddrctrl_base(void);
/* Return the base address of the DDR PHY */
uintptr_t stm32mp_ddrphyc_base(void);
/* Return the base address of the PWR peripheral */
uintptr_t stm32mp_pwr_base(void);
/* Return the base address of the RCC peripheral */
uintptr_t stm32mp_rcc_base(void);
/*
* Platform util functions for the GPIO driver
* @bank: Target GPIO bank ID as per DT bindings
*
* Platform shall implement these functions to provide to stm32_gpio
* driver the resource reference for a target GPIO bank. That are
* memory mapped interface base address, interface offset (see below)
* and clock identifier.
*
* stm32_get_gpio_bank_offset() returns a bank offset that is used to
* check DT configuration matches platform implementation of the banks
* description.
*/
uintptr_t stm32_get_gpio_bank_base(unsigned int bank);
unsigned long stm32_get_gpio_bank_clock(unsigned int bank);
uint32_t stm32_get_gpio_bank_offset(unsigned int bank);
/*
* Util for clock gating and to get clock rate for stm32 and platform drivers
* @id: Target clock ID, ID used in clock DT bindings
*/
bool stm32mp_clk_is_enabled(unsigned long id);
void stm32mp_clk_enable(unsigned long id);
void stm32mp_clk_disable(unsigned long id);
unsigned long stm32mp_clk_get_rate(unsigned long id);
/* Initialise the IO layer and register platform IO devices */
void stm32mp_io_setup(void);
static inline uint64_t arm_cnt_us2cnt(uint32_t us)
{
return ((uint64_t)us * (uint64_t)read_cntfrq()) / 1000000ULL;
}
static inline uint64_t timeout_init_us(uint32_t us)
{
return read_cntpct_el0() + arm_cnt_us2cnt(us);
}
static inline bool timeout_elapsed(uint64_t expire)
{
return read_cntpct_el0() > expire;
}
#endif /* STM32MP_COMMON_H */
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
#ifndef STM32MP1_DT_H #ifndef STM32MP_DT_H
#define STM32MP1_DT_H #define STM32MP_DT_H
#include <stdbool.h> #include <stdbool.h>
...@@ -27,7 +27,7 @@ struct dt_node_info { ...@@ -27,7 +27,7 @@ struct dt_node_info {
int dt_open_and_check(void); int dt_open_and_check(void);
int fdt_get_address(void **fdt_addr); int fdt_get_address(void **fdt_addr);
bool fdt_check_node(int node); bool fdt_check_node(int node);
uint32_t fdt_get_status(int node); uint8_t fdt_get_status(int node);
uint32_t fdt_read_uint32_default(int node, const char *prop_name, uint32_t fdt_read_uint32_default(int node, const char *prop_name,
uint32_t dflt_value); uint32_t dflt_value);
int fdt_read_uint32_array(int node, const char *prop_name, int fdt_read_uint32_array(int node, const char *prop_name,
...@@ -38,6 +38,9 @@ int dt_get_node(struct dt_node_info *info, int offset, const char *compat); ...@@ -38,6 +38,9 @@ int dt_get_node(struct dt_node_info *info, int offset, const char *compat);
int dt_get_stdout_uart_info(struct dt_node_info *info); int dt_get_stdout_uart_info(struct dt_node_info *info);
int dt_get_stdout_node_offset(void); int dt_get_stdout_node_offset(void);
uint32_t dt_get_ddr_size(void); uint32_t dt_get_ddr_size(void);
uintptr_t dt_get_ddrctrl_base(void);
uintptr_t dt_get_ddrphyc_base(void);
uintptr_t dt_get_pwr_base(void);
const char *dt_get_board_model(void); const char *dt_get_board_model(void);
#endif /* STM32MP1_DT_H */ #endif /* STM32MP_DT_H */
/*
* Copyright (C) 2018-2019, STMicroelectronics - All Rights Reserved
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef STM32MP_SHRES_HELPERS_H
#define STM32MP_SHRES_HELPERS_H
#include <stdint.h>
#include <common/debug.h>
/*
* Shared reference counter: increments by 2 on secure increment
* request, decrements by 2 on secure decrement request. Bit #0
* is set to 1 on non-secure increment request and reset to 0 on
* non-secure decrement request. The counter initializes to
* either 0, 1 or 2 upon their expect default state.
* Counters saturates once above UINT_MAX / 2.
*/
#define SHREFCNT_NONSECURE_FLAG 0x1UL
#define SHREFCNT_SECURE_STEP 0x2UL
#define SHREFCNT_MAX (UINT32_MAX / 2)
/* Return 1 if refcnt increments from 0, else return 0 */
static inline int stm32mp_incr_shrefcnt(unsigned int *refcnt, bool secure)
{
int rc = !*refcnt;
if (secure) {
*refcnt += SHREFCNT_SECURE_STEP;
if (*refcnt >= SHREFCNT_MAX) {
panic();
}
} else {
*refcnt |= SHREFCNT_NONSECURE_FLAG;
}
return rc;
}
/* Return 1 if refcnt decrements to 0, else return 0 */
static inline int stm32mp_decr_shrefcnt(unsigned int *refcnt, bool secure)
{
int rc = 0;
if (secure) {
if (*refcnt < SHREFCNT_MAX) {
if (*refcnt < SHREFCNT_SECURE_STEP) {
panic();
}
*refcnt -= SHREFCNT_SECURE_STEP;
rc = !*refcnt;
}
} else {
rc = (*refcnt == SHREFCNT_NONSECURE_FLAG) ? 1 : 0;
*refcnt &= ~SHREFCNT_NONSECURE_FLAG;
}
return rc;
}
static inline int stm32mp_incr_refcnt(unsigned int *refcnt)
{
return stm32mp_incr_shrefcnt(refcnt, true);
}
static inline int stm32mp_decr_refcnt(unsigned int *refcnt)
{
return stm32mp_decr_shrefcnt(refcnt, true);
}
#endif /* STM32MP_SHRES_HELPERS_H */
/*
* Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <assert.h>
#include <platform_def.h>
#include <arch_helpers.h>
#include <common/debug.h>
#include <drivers/st/stm32mp_clkfunc.h>
#include <plat/common/platform.h>
uintptr_t plat_get_ns_image_entrypoint(void)
{
return BL33_BASE;
}
unsigned int plat_get_syscnt_freq2(void)
{
return read_cntfrq_el0();
}
static uintptr_t boot_ctx_address;
void stm32mp_save_boot_ctx_address(uintptr_t address)
{
boot_ctx_address = address;
}
uintptr_t stm32mp_get_boot_ctx_address(void)
{
return boot_ctx_address;
}
uintptr_t stm32mp_ddrctrl_base(void)
{
static uintptr_t ddrctrl_base;
if (ddrctrl_base == 0) {
ddrctrl_base = dt_get_ddrctrl_base();
assert(ddrctrl_base == DDRCTRL_BASE);
}
return ddrctrl_base;
}
uintptr_t stm32mp_ddrphyc_base(void)
{
static uintptr_t ddrphyc_base;
if (ddrphyc_base == 0) {
ddrphyc_base = dt_get_ddrphyc_base();
assert(ddrphyc_base == DDRPHYC_BASE);
}
return ddrphyc_base;
}
uintptr_t stm32mp_pwr_base(void)
{
static uintptr_t pwr_base;
if (pwr_base == 0) {
pwr_base = dt_get_pwr_base();
assert(pwr_base == PWR_BASE);
}
return pwr_base;
}
uintptr_t stm32mp_rcc_base(void)
{
static uintptr_t rcc_base;
if (rcc_base == 0) {
rcc_base = fdt_rcc_read_addr();
assert(rcc_base == RCC_BASE);
}
return rcc_base;
}
uintptr_t stm32_get_gpio_bank_base(unsigned int bank)
{
if (bank == GPIO_BANK_Z) {
return GPIOZ_BASE;
}
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_K);
return GPIOA_BASE + (bank * GPIO_BANK_OFFSET);
}
unsigned long stm32_get_gpio_bank_clock(unsigned int bank)
{
if (bank == GPIO_BANK_Z) {
return GPIOZ;
}
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_K);
return GPIOA + (bank - GPIO_BANK_A);
}
uint32_t stm32_get_gpio_bank_offset(unsigned int bank)
{
if (bank == GPIO_BANK_Z) {
return 0;
}
assert(GPIO_BANK_A == 0 && bank <= GPIO_BANK_K);
return bank * GPIO_BANK_OFFSET;
}
...@@ -13,14 +13,14 @@ ...@@ -13,14 +13,14 @@
#include <common/debug.h> #include <common/debug.h>
#include <drivers/st/stm32_gpio.h> #include <drivers/st/stm32_gpio.h>
#include <drivers/st/stm32mp1_clk.h>
#include <drivers/st/stm32mp1_clkfunc.h>
#include <drivers/st/stm32mp1_ddr.h> #include <drivers/st/stm32mp1_ddr.h>
#include <drivers/st/stm32mp1_ram.h> #include <drivers/st/stm32mp1_ram.h>
#include <stm32mp_dt.h>
static int fdt_checked; static int fdt_checked;
static void *fdt = (void *)(uintptr_t)STM32MP1_DTB_BASE; static void *fdt = (void *)(uintptr_t)STM32MP_DTB_BASE;
/******************************************************************************* /*******************************************************************************
* This function checks device tree file with its header. * This function checks device tree file with its header.
...@@ -68,9 +68,9 @@ bool fdt_check_node(int node) ...@@ -68,9 +68,9 @@ bool fdt_check_node(int node)
/******************************************************************************* /*******************************************************************************
* This function return global node status (generic use of fdt library). * This function return global node status (generic use of fdt library).
******************************************************************************/ ******************************************************************************/
uint32_t fdt_get_status(int node) uint8_t fdt_get_status(int node)
{ {
uint32_t status = DT_DISABLED; uint8_t status = DT_DISABLED;
int len; int len;
const char *cchar; const char *cchar;
...@@ -291,6 +291,73 @@ uint32_t dt_get_ddr_size(void) ...@@ -291,6 +291,73 @@ uint32_t dt_get_ddr_size(void)
return fdt_read_uint32_default(node, "st,mem-size", 0); return fdt_read_uint32_default(node, "st,mem-size", 0);
} }
/*******************************************************************************
* This function gets DDRCTRL base address information from the DT.
* Returns value on success, and 0 on failure.
******************************************************************************/
uintptr_t dt_get_ddrctrl_base(void)
{
int node;
uint32_t array[4];
node = fdt_node_offset_by_compatible(fdt, -1, DT_DDR_COMPAT);
if (node < 0) {
INFO("%s: Cannot read DDR node in DT\n", __func__);
return 0;
}
if (fdt_read_uint32_array(node, "reg", array, 4) < 0) {
return 0;
}
return array[0];
}
/*******************************************************************************
* This function gets DDRPHYC base address information from the DT.
* Returns value on success, and 0 on failure.
******************************************************************************/
uintptr_t dt_get_ddrphyc_base(void)
{
int node;
uint32_t array[4];
node = fdt_node_offset_by_compatible(fdt, -1, DT_DDR_COMPAT);
if (node < 0) {
INFO("%s: Cannot read DDR node in DT\n", __func__);
return 0;
}
if (fdt_read_uint32_array(node, "reg", array, 4) < 0) {
return 0;
}
return array[2];
}
/*******************************************************************************
* This function gets PWR base address information from the DT.
* Returns value on success, and 0 on failure.
******************************************************************************/
uintptr_t dt_get_pwr_base(void)
{
int node;
const fdt32_t *cuint;
node = fdt_node_offset_by_compatible(fdt, -1, DT_PWR_COMPAT);
if (node < 0) {
INFO("%s: Cannot read PWR node in DT\n", __func__);
return 0;
}
cuint = fdt_getprop(fdt, node, "reg", NULL);
if (cuint == NULL) {
return 0;
}
return fdt32_to_cpu(*cuint);
}
/******************************************************************************* /*******************************************************************************
* This function retrieves board model from DT * This function retrieves board model from DT
* Returns string taken from model node, NULL otherwise * Returns string taken from model node, NULL otherwise
......
...@@ -17,25 +17,21 @@ ...@@ -17,25 +17,21 @@
#include <drivers/generic_delay_timer.h> #include <drivers/generic_delay_timer.h>
#include <drivers/st/stm32_console.h> #include <drivers/st/stm32_console.h>
#include <drivers/st/stm32mp_pmic.h> #include <drivers/st/stm32mp_pmic.h>
#include <drivers/st/stm32mp_reset.h>
#include <drivers/st/stm32mp1_clk.h> #include <drivers/st/stm32mp1_clk.h>
#include <drivers/st/stm32mp1_pwr.h> #include <drivers/st/stm32mp1_pwr.h>
#include <drivers/st/stm32mp1_ram.h> #include <drivers/st/stm32mp1_ram.h>
#include <drivers/st/stm32mp1_rcc.h>
#include <drivers/st/stm32mp1_reset.h>
#include <lib/mmio.h> #include <lib/mmio.h>
#include <lib/xlat_tables/xlat_tables_v2.h> #include <lib/xlat_tables/xlat_tables_v2.h>
#include <plat/common/platform.h> #include <plat/common/platform.h>
#include <boot_api.h>
#include <stm32mp1_context.h> #include <stm32mp1_context.h>
#include <stm32mp1_dt.h>
#include <stm32mp1_private.h>
static struct console_stm32 console; static struct console_stm32 console;
static void print_reset_reason(void) static void print_reset_reason(void)
{ {
uint32_t rstsr = mmio_read_32(RCC_BASE + RCC_MP_RSTSCLRR); uint32_t rstsr = mmio_read_32(stm32mp_rcc_base() + RCC_MP_RSTSCLRR);
if (rstsr == 0U) { if (rstsr == 0U) {
WARN("Reset reason unknown\n"); WARN("Reset reason unknown\n");
...@@ -123,14 +119,14 @@ void bl2_el3_early_platform_setup(u_register_t arg0, ...@@ -123,14 +119,14 @@ void bl2_el3_early_platform_setup(u_register_t arg0,
u_register_t arg2 __unused, u_register_t arg2 __unused,
u_register_t arg3 __unused) u_register_t arg3 __unused)
{ {
stm32mp1_save_boot_ctx_address(arg0); stm32mp_save_boot_ctx_address(arg0);
} }
void bl2_platform_setup(void) void bl2_platform_setup(void)
{ {
int ret; int ret;
if (dt_check_pmic()) { if (dt_pmic_status() > 0) {
initialize_pmic(); initialize_pmic();
} }
...@@ -149,8 +145,10 @@ void bl2_el3_plat_arch_setup(void) ...@@ -149,8 +145,10 @@ void bl2_el3_plat_arch_setup(void)
struct dt_node_info dt_uart_info; struct dt_node_info dt_uart_info;
const char *board_model; const char *board_model;
boot_api_context_t *boot_context = boot_api_context_t *boot_context =
(boot_api_context_t *)stm32mp1_get_boot_ctx_address(); (boot_api_context_t *)stm32mp_get_boot_ctx_address();
uint32_t clk_rate; uint32_t clk_rate;
uintptr_t pwr_base;
uintptr_t rcc_base;
mmap_add_region(BL_CODE_BASE, BL_CODE_BASE, mmap_add_region(BL_CODE_BASE, BL_CODE_BASE,
BL_CODE_END - BL_CODE_BASE, BL_CODE_END - BL_CODE_BASE,
...@@ -162,9 +160,9 @@ void bl2_el3_plat_arch_setup(void) ...@@ -162,9 +160,9 @@ void bl2_el3_plat_arch_setup(void)
MT_MEMORY | MT_RO | MT_SECURE); MT_MEMORY | MT_RO | MT_SECURE);
/* Map non secure DDR for BL33 load and DDR training area restore */ /* Map non secure DDR for BL33 load and DDR training area restore */
mmap_add_region(STM32MP1_DDR_BASE, mmap_add_region(STM32MP_DDR_BASE,
STM32MP1_DDR_BASE, STM32MP_DDR_BASE,
STM32MP1_DDR_MAX_SIZE, STM32MP_DDR_MAX_SIZE,
MT_MEMORY | MT_RW | MT_NS); MT_MEMORY | MT_RW | MT_NS);
/* Prevent corruption of preloaded Device Tree */ /* Prevent corruption of preloaded Device Tree */
...@@ -178,27 +176,30 @@ void bl2_el3_plat_arch_setup(void) ...@@ -178,27 +176,30 @@ void bl2_el3_plat_arch_setup(void)
panic(); panic();
} }
pwr_base = stm32mp_pwr_base();
rcc_base = stm32mp_rcc_base();
/* /*
* Disable the backup domain write protection. * Disable the backup domain write protection.
* The protection is enable at each reset by hardware * The protection is enable at each reset by hardware
* and must be disabled by software. * and must be disabled by software.
*/ */
mmio_setbits_32(PWR_BASE + PWR_CR1, PWR_CR1_DBP); mmio_setbits_32(pwr_base + PWR_CR1, PWR_CR1_DBP);
while ((mmio_read_32(PWR_BASE + PWR_CR1) & PWR_CR1_DBP) == 0U) { while ((mmio_read_32(pwr_base + PWR_CR1) & PWR_CR1_DBP) == 0U) {
; ;
} }
/* Reset backup domain on cold boot cases */ /* Reset backup domain on cold boot cases */
if ((mmio_read_32(RCC_BASE + RCC_BDCR) & RCC_BDCR_RTCSRC_MASK) == 0U) { if ((mmio_read_32(rcc_base + RCC_BDCR) & RCC_BDCR_RTCSRC_MASK) == 0U) {
mmio_setbits_32(RCC_BASE + RCC_BDCR, RCC_BDCR_VSWRST); mmio_setbits_32(rcc_base + RCC_BDCR, RCC_BDCR_VSWRST);
while ((mmio_read_32(RCC_BASE + RCC_BDCR) & RCC_BDCR_VSWRST) == while ((mmio_read_32(rcc_base + RCC_BDCR) & RCC_BDCR_VSWRST) ==
0U) { 0U) {
; ;
} }
mmio_clrbits_32(RCC_BASE + RCC_BDCR, RCC_BDCR_VSWRST); mmio_clrbits_32(rcc_base + RCC_BDCR, RCC_BDCR_VSWRST);
} }
generic_delay_timer_init(); generic_delay_timer_init();
...@@ -224,19 +225,17 @@ void bl2_el3_plat_arch_setup(void) ...@@ -224,19 +225,17 @@ void bl2_el3_plat_arch_setup(void)
goto skip_console_init; goto skip_console_init;
} }
if (stm32mp1_clk_enable((unsigned long)dt_uart_info.clock) != 0) { stm32mp_clk_enable((unsigned long)dt_uart_info.clock);
goto skip_console_init;
}
stm32mp1_reset_assert((uint32_t)dt_uart_info.reset); stm32mp_reset_assert((uint32_t)dt_uart_info.reset);
udelay(2); udelay(2);
stm32mp1_reset_deassert((uint32_t)dt_uart_info.reset); stm32mp_reset_deassert((uint32_t)dt_uart_info.reset);
mdelay(1); mdelay(1);
clk_rate = stm32mp1_clk_get_rate((unsigned long)dt_uart_info.clock); clk_rate = stm32mp_clk_get_rate((unsigned long)dt_uart_info.clock);
if (console_stm32_register(dt_uart_info.base, clk_rate, if (console_stm32_register(dt_uart_info.base, clk_rate,
STM32MP1_UART_BAUDRATE, &console) == 0) { STM32MP_UART_BAUDRATE, &console) == 0) {
panic(); panic();
} }
...@@ -257,5 +256,5 @@ skip_console_init: ...@@ -257,5 +256,5 @@ skip_console_init:
print_reset_reason(); print_reset_reason();
stm32mp1_io_setup(); stm32mp_io_setup();
} }
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
#define BL33_IMAGE_NAME "ssbl" #define BL33_IMAGE_NAME "ssbl"
#define BL33_BINARY_TYPE U(0x0) #define BL33_BINARY_TYPE U(0x0)
#define STM32MP1_PRIMARY_CPU U(0x0) #define STM32MP_PRIMARY_CPU U(0x0)
#define STM32MP1_SECONDARY_CPU U(0x1) #define STM32MP_SECONDARY_CPU U(0x1)
#define PLATFORM_CLUSTER_COUNT ULL(1) #define PLATFORM_CLUSTER_COUNT ULL(1)
#define PLATFORM_CLUSTER0_CORE_COUNT U(2) #define PLATFORM_CLUSTER0_CORE_COUNT U(2)
...@@ -50,33 +50,33 @@ ...@@ -50,33 +50,33 @@
* Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug * Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug
* size plus a little space for growth. * size plus a little space for growth.
*/ */
#define BL2_BASE STM32MP1_BL2_BASE #define BL2_BASE STM32MP_BL2_BASE
#define BL2_LIMIT (STM32MP1_BL2_BASE + \ #define BL2_LIMIT (STM32MP_BL2_BASE + \
STM32MP1_BL2_SIZE) STM32MP_BL2_SIZE)
/******************************************************************************* /*******************************************************************************
* BL32 specific defines. * BL32 specific defines.
******************************************************************************/ ******************************************************************************/
#define BL32_BASE STM32MP1_BL32_BASE #define BL32_BASE STM32MP_BL32_BASE
#define BL32_LIMIT (STM32MP1_BL32_BASE + \ #define BL32_LIMIT (STM32MP_BL32_BASE + \
STM32MP1_BL32_SIZE) STM32MP_BL32_SIZE)
/******************************************************************************* /*******************************************************************************
* BL33 specific defines. * BL33 specific defines.
******************************************************************************/ ******************************************************************************/
#define BL33_BASE STM32MP1_BL33_BASE #define BL33_BASE STM32MP_BL33_BASE
/* /*
* Load address of BL33 for this platform port * Load address of BL33 for this platform port
*/ */
#define PLAT_STM32MP1_NS_IMAGE_OFFSET BL33_BASE #define PLAT_STM32MP_NS_IMAGE_OFFSET BL33_BASE
/******************************************************************************* /*******************************************************************************
* DTB specific defines. * DTB specific defines.
******************************************************************************/ ******************************************************************************/
#define DTB_BASE STM32MP1_DTB_BASE #define DTB_BASE STM32MP_DTB_BASE
#define DTB_LIMIT (STM32MP1_DTB_BASE + \ #define DTB_LIMIT (STM32MP_DTB_BASE + \
STM32MP1_DTB_SIZE) STM32MP_DTB_SIZE)
/******************************************************************************* /*******************************************************************************
* Platform specific page table and MMU setup constants * Platform specific page table and MMU setup constants
......
...@@ -9,20 +9,12 @@ ...@@ -9,20 +9,12 @@
#include <stdint.h> #include <stdint.h>
void stm32mp1_io_setup(void);
void configure_mmu(void); void configure_mmu(void);
void stm32mp1_arch_security_setup(void); void stm32mp1_arch_security_setup(void);
void stm32mp1_security_setup(void); void stm32mp1_security_setup(void);
void stm32mp1_save_boot_ctx_address(uintptr_t address);
uintptr_t stm32mp1_get_boot_ctx_address(void);
void stm32mp1_gic_pcpu_init(void); void stm32mp1_gic_pcpu_init(void);
void stm32mp1_gic_init(void); void stm32mp1_gic_init(void);
uintptr_t stm32_get_gpio_bank_base(unsigned int bank);
unsigned long stm32_get_gpio_bank_clock(unsigned int bank);
uint32_t stm32_get_gpio_bank_offset(unsigned int bank);
#endif /* STM32MP1_PRIVATE_H */ #endif /* STM32MP1_PRIVATE_H */
/* /*
* Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -50,7 +50,7 @@ static bl_mem_params_node_t bl2_mem_params_descs[] = { ...@@ -50,7 +50,7 @@ static bl_mem_params_node_t bl2_mem_params_descs[] = {
VERSION_2, entry_point_info_t, VERSION_2, entry_point_info_t,
NON_SECURE | EXECUTABLE), NON_SECURE | EXECUTABLE),
.ep_info.pc = PLAT_STM32MP1_NS_IMAGE_OFFSET, .ep_info.pc = PLAT_STM32MP_NS_IMAGE_OFFSET,
.ep_info.spsr = SPSR_MODE32(MODE32_svc, SPSR_T_ARM, .ep_info.spsr = SPSR_MODE32(MODE32_svc, SPSR_T_ARM,
SPSR_E_LITTLE, SPSR_E_LITTLE,
DISABLE_ALL_EXCEPTIONS), DISABLE_ALL_EXCEPTIONS),
...@@ -58,9 +58,9 @@ static bl_mem_params_node_t bl2_mem_params_descs[] = { ...@@ -58,9 +58,9 @@ static bl_mem_params_node_t bl2_mem_params_descs[] = {
SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
VERSION_2, image_info_t, 0), VERSION_2, image_info_t, 0),
.image_info.image_base = PLAT_STM32MP1_NS_IMAGE_OFFSET, .image_info.image_base = PLAT_STM32MP_NS_IMAGE_OFFSET,
.image_info.image_max_size = STM32MP1_DDR_MAX_SIZE - .image_info.image_max_size = STM32MP_DDR_MAX_SIZE -
(PLAT_STM32MP1_NS_IMAGE_OFFSET - STM32MP1_DDR_BASE), (PLAT_STM32MP_NS_IMAGE_OFFSET - STM32MP_DDR_BASE),
.next_handoff_image_id = INVALID_IMAGE_ID, .next_handoff_image_id = INVALID_IMAGE_ID,
} }
......
...@@ -21,7 +21,8 @@ $(eval $(call add_define,STM32_TF_A_COPIES)) ...@@ -21,7 +21,8 @@ $(eval $(call add_define,STM32_TF_A_COPIES))
PLAT_PARTITION_MAX_ENTRIES := $(shell echo $$(($(STM32_TF_A_COPIES) + 1))) PLAT_PARTITION_MAX_ENTRIES := $(shell echo $$(($(STM32_TF_A_COPIES) + 1)))
$(eval $(call add_define,PLAT_PARTITION_MAX_ENTRIES)) $(eval $(call add_define,PLAT_PARTITION_MAX_ENTRIES))
PLAT_INCLUDES := -Iplat/st/stm32mp1/include/ PLAT_INCLUDES := -Iplat/st/common/include/
PLAT_INCLUDES += -Iplat/st/stm32mp1/include/
# Device tree # Device tree
DTB_FILE_NAME ?= stm32mp157c-ev1.dtb DTB_FILE_NAME ?= stm32mp157c-ev1.dtb
...@@ -30,7 +31,8 @@ DTC_FLAGS += -Wno-unit_address_vs_reg ...@@ -30,7 +31,8 @@ DTC_FLAGS += -Wno-unit_address_vs_reg
include lib/libfdt/libfdt.mk include lib/libfdt/libfdt.mk
PLAT_BL_COMMON_SOURCES := plat/st/stm32mp1/stm32mp1_common.c PLAT_BL_COMMON_SOURCES := plat/st/common/stm32mp_common.c \
plat/st/stm32mp1/stm32mp1_private.c
PLAT_BL_COMMON_SOURCES += drivers/st/uart/aarch32/stm32_console.S PLAT_BL_COMMON_SOURCES += drivers/st/uart/aarch32/stm32_console.S
...@@ -48,6 +50,7 @@ PLAT_BL_COMMON_SOURCES += ${LIBFDT_SRCS} \ ...@@ -48,6 +50,7 @@ PLAT_BL_COMMON_SOURCES += ${LIBFDT_SRCS} \
drivers/delay_timer/delay_timer.c \ drivers/delay_timer/delay_timer.c \
drivers/delay_timer/generic_delay_timer.c \ drivers/delay_timer/generic_delay_timer.c \
drivers/st/bsec/bsec.c \ drivers/st/bsec/bsec.c \
drivers/st/clk/stm32mp_clkfunc.c \
drivers/st/clk/stm32mp1_clk.c \ drivers/st/clk/stm32mp1_clk.c \
drivers/st/clk/stm32mp1_clkfunc.c \ drivers/st/clk/stm32mp1_clkfunc.c \
drivers/st/ddr/stm32mp1_ddr_helpers.c \ drivers/st/ddr/stm32mp1_ddr_helpers.c \
...@@ -56,8 +59,8 @@ PLAT_BL_COMMON_SOURCES += ${LIBFDT_SRCS} \ ...@@ -56,8 +59,8 @@ PLAT_BL_COMMON_SOURCES += ${LIBFDT_SRCS} \
drivers/st/pmic/stm32mp_pmic.c \ drivers/st/pmic/stm32mp_pmic.c \
drivers/st/pmic/stpmic1.c \ drivers/st/pmic/stpmic1.c \
drivers/st/reset/stm32mp1_reset.c \ drivers/st/reset/stm32mp1_reset.c \
plat/st/common/stm32mp_dt.c \
plat/st/stm32mp1/stm32mp1_context.c \ plat/st/stm32mp1/stm32mp1_context.c \
plat/st/stm32mp1/stm32mp1_dt.c \
plat/st/stm32mp1/stm32mp1_helper.S \ plat/st/stm32mp1/stm32mp1_helper.S \
plat/st/stm32mp1/stm32mp1_security.c plat/st/stm32mp1/stm32mp1_security.c
...@@ -65,7 +68,7 @@ BL2_SOURCES += drivers/io/io_block.c \ ...@@ -65,7 +68,7 @@ BL2_SOURCES += drivers/io/io_block.c \
drivers/io/io_dummy.c \ drivers/io/io_dummy.c \
drivers/io/io_storage.c \ drivers/io/io_storage.c \
drivers/st/io/io_stm32image.c \ drivers/st/io/io_stm32image.c \
plat/st/stm32mp1/bl2_io_storage.c \ plat/st/common/bl2_io_storage.c \
plat/st/stm32mp1/bl2_plat_setup.c plat/st/stm32mp1/bl2_plat_setup.c
BL2_SOURCES += drivers/mmc/mmc.c \ BL2_SOURCES += drivers/mmc/mmc.c \
......
...@@ -27,8 +27,6 @@ ...@@ -27,8 +27,6 @@
#include <plat/common/platform.h> #include <plat/common/platform.h>
#include <platform_sp_min.h> #include <platform_sp_min.h>
#include <stm32mp1_dt.h>
#include <stm32mp1_private.h>
/****************************************************************************** /******************************************************************************
* Placeholder variables for copying the arguments that have been passed to * Placeholder variables for copying the arguments that have been passed to
...@@ -125,7 +123,7 @@ void sp_min_early_platform_setup2(u_register_t arg0, u_register_t arg1, ...@@ -125,7 +123,7 @@ void sp_min_early_platform_setup2(u_register_t arg0, u_register_t arg1,
if ((result > 0) && (dt_uart_info.status != 0U)) { if ((result > 0) && (dt_uart_info.status != 0U)) {
if (console_stm32_register(dt_uart_info.base, 0, if (console_stm32_register(dt_uart_info.base, 0,
STM32MP1_UART_BAUDRATE, &console) == STM32MP_UART_BAUDRATE, &console) ==
0) { 0) {
panic(); panic();
} }
......
/* /*
* Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -17,7 +17,7 @@ ENTRY(__BL2_IMAGE_START__) ...@@ -17,7 +17,7 @@ ENTRY(__BL2_IMAGE_START__)
MEMORY { MEMORY {
HEADER (rw) : ORIGIN = 0x00000000, LENGTH = 0x3000 HEADER (rw) : ORIGIN = 0x00000000, LENGTH = 0x3000
RAM (rwx) : ORIGIN = STM32MP1_BINARY_BASE, LENGTH = STM32MP1_BINARY_SIZE RAM (rwx) : ORIGIN = STM32MP_BINARY_BASE, LENGTH = STM32MP_BINARY_SIZE
} }
SECTIONS SECTIONS
...@@ -32,7 +32,7 @@ SECTIONS ...@@ -32,7 +32,7 @@ SECTIONS
__HEADER_END__ = .; __HEADER_END__ = .;
} >HEADER } >HEADER
. = STM32MP1_BINARY_BASE; . = STM32MP_BINARY_BASE;
.data . : { .data . : {
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
__DATA_START__ = .; __DATA_START__ = .;
...@@ -43,7 +43,7 @@ SECTIONS ...@@ -43,7 +43,7 @@ SECTIONS
* The strongest and only alignment contraint is MMU 4K page. * The strongest and only alignment contraint is MMU 4K page.
* Indeed as images below will be removed, 4K pages will be re-used. * Indeed as images below will be removed, 4K pages will be re-used.
*/ */
. = ( STM32MP1_DTB_BASE - STM32MP1_BINARY_BASE ); . = ( STM32MP_DTB_BASE - STM32MP_BINARY_BASE );
__DTB_IMAGE_START__ = .; __DTB_IMAGE_START__ = .;
*(.dtb_image*) *(.dtb_image*)
__DTB_IMAGE_END__ = .; __DTB_IMAGE_END__ = .;
...@@ -53,7 +53,7 @@ SECTIONS ...@@ -53,7 +53,7 @@ SECTIONS
* The strongest and only alignment contraint is MMU 4K page. * The strongest and only alignment contraint is MMU 4K page.
* Indeed as images below will be removed, 4K pages will be re-used. * Indeed as images below will be removed, 4K pages will be re-used.
*/ */
. = ( STM32MP1_BL2_BASE - STM32MP1_BINARY_BASE ); . = ( STM32MP_BL2_BASE - STM32MP_BINARY_BASE );
__BL2_IMAGE_START__ = .; __BL2_IMAGE_START__ = .;
*(.bl2_image*) *(.bl2_image*)
__BL2_IMAGE_END__ = .; __BL2_IMAGE_END__ = .;
...@@ -63,7 +63,7 @@ SECTIONS ...@@ -63,7 +63,7 @@ SECTIONS
* The strongest and only alignment constraint is 8 words to simplify * The strongest and only alignment constraint is 8 words to simplify
* memraise8 assembly code. * memraise8 assembly code.
*/ */
. = ( STM32MP1_BL32_BASE - STM32MP1_BINARY_BASE ); . = ( STM32MP_BL32_BASE - STM32MP_BINARY_BASE );
__BL32_IMAGE_START__ = .; __BL32_IMAGE_START__ = .;
*(.bl32_image*) *(.bl32_image*)
__BL32_IMAGE_END__ = .; __BL32_IMAGE_END__ = .;
......
/* /*
* Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -20,26 +20,16 @@ ...@@ -20,26 +20,16 @@
int stm32_save_boot_interface(uint32_t interface, uint32_t instance) int stm32_save_boot_interface(uint32_t interface, uint32_t instance)
{ {
uint32_t tamp_clk_off = 0;
uint32_t bkpr_itf_idx = tamp_bkpr(TAMP_BOOT_ITF_BACKUP_REG_ID); uint32_t bkpr_itf_idx = tamp_bkpr(TAMP_BOOT_ITF_BACKUP_REG_ID);
if (!stm32mp1_clk_is_enabled(RTCAPB)) { stm32mp_clk_enable(RTCAPB);
tamp_clk_off = 1;
if (stm32mp1_clk_enable(RTCAPB) != 0) {
return -EINVAL;
}
}
mmio_clrsetbits_32(bkpr_itf_idx, mmio_clrsetbits_32(bkpr_itf_idx,
TAMP_BOOT_ITF_MASK, TAMP_BOOT_ITF_MASK,
((interface << 4) | (instance & 0xFU)) << ((interface << 4) | (instance & 0xFU)) <<
TAMP_BOOT_ITF_SHIFT); TAMP_BOOT_ITF_SHIFT);
if (tamp_clk_off != 0U) { stm32mp_clk_disable(RTCAPB);
if (stm32mp1_clk_disable(RTCAPB) != 0) {
return -EINVAL;
}
}
return 0; return 0;
} }
...@@ -8,12 +8,19 @@ ...@@ -8,12 +8,19 @@
#define STM32MP1_DEF_H #define STM32MP1_DEF_H
#include <common/tbbr/tbbr_img_def.h> #include <common/tbbr/tbbr_img_def.h>
#include <drivers/st/stm32mp1_rcc.h>
#include <dt-bindings/clock/stm32mp1-clks.h>
#include <dt-bindings/reset/stm32mp1-resets.h>
#include <lib/utils_def.h> #include <lib/utils_def.h>
#include <lib/xlat_tables/xlat_tables_defs.h> #include <lib/xlat_tables/xlat_tables_defs.h>
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#include <drivers/st/stm32mp1_clk.h>
#include <boot_api.h> #include <boot_api.h>
#include <stm32mp1_dt.h> #include <stm32mp_common.h>
#include <stm32mp_dt.h>
#include <stm32mp_shres_helpers.h>
#include <stm32mp1_private.h> #include <stm32mp1_private.h>
#endif #endif
...@@ -21,14 +28,13 @@ ...@@ -21,14 +28,13 @@
* STM32MP1 memory map related constants * STM32MP1 memory map related constants
******************************************************************************/ ******************************************************************************/
#define STM32MP1_SRAM_BASE U(0x2FFC0000) #define STM32MP_SYSRAM_BASE U(0x2FFC0000)
#define STM32MP1_SRAM_SIZE U(0x00040000) #define STM32MP_SYSRAM_SIZE U(0x00040000)
/* DDR configuration */ /* DDR configuration */
#define STM32MP1_DDR_BASE U(0xC0000000) #define STM32MP_DDR_BASE U(0xC0000000)
#define STM32MP1_DDR_SIZE_DFLT U(0x20000000) /* 512 MB */ #define STM32MP_DDR_MAX_SIZE U(0x40000000) /* Max 1GB */
#define STM32MP1_DDR_MAX_SIZE U(0x40000000) /* Max 1GB */ #define STM32MP_DDR_SPEED_DFLT 528
#define STM32MP1_DDR_SPEED_DFLT 528
/* DDR power initializations */ /* DDR power initializations */
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
...@@ -39,36 +45,36 @@ enum ddr_type { ...@@ -39,36 +45,36 @@ enum ddr_type {
#endif #endif
/* Section used inside TF binaries */ /* Section used inside TF binaries */
#define STM32MP1_PARAM_LOAD_SIZE U(0x00002400) /* 9 Ko for param */ #define STM32MP_PARAM_LOAD_SIZE U(0x00002400) /* 9 Ko for param */
/* 256 Octets reserved for header */ /* 256 Octets reserved for header */
#define STM32MP1_HEADER_SIZE U(0x00000100) #define STM32MP_HEADER_SIZE U(0x00000100)
#define STM32MP1_BINARY_BASE (STM32MP1_SRAM_BASE + \ #define STM32MP_BINARY_BASE (STM32MP_SYSRAM_BASE + \
STM32MP1_PARAM_LOAD_SIZE + \ STM32MP_PARAM_LOAD_SIZE + \
STM32MP1_HEADER_SIZE) STM32MP_HEADER_SIZE)
#define STM32MP1_BINARY_SIZE (STM32MP1_SRAM_SIZE - \ #define STM32MP_BINARY_SIZE (STM32MP_SYSRAM_SIZE - \
(STM32MP1_PARAM_LOAD_SIZE + \ (STM32MP_PARAM_LOAD_SIZE + \
STM32MP1_HEADER_SIZE)) STM32MP_HEADER_SIZE))
#if STACK_PROTECTOR_ENABLED #if STACK_PROTECTOR_ENABLED
#define STM32MP1_BL32_SIZE U(0x00012000) /* 72 Ko for BL32 */ #define STM32MP_BL32_SIZE U(0x00012000) /* 72 Ko for BL32 */
#else #else
#define STM32MP1_BL32_SIZE U(0x00011000) /* 68 Ko for BL32 */ #define STM32MP_BL32_SIZE U(0x00011000) /* 68 Ko for BL32 */
#endif #endif
#define STM32MP1_BL32_BASE (STM32MP1_SRAM_BASE + \ #define STM32MP_BL32_BASE (STM32MP_SYSRAM_BASE + \
STM32MP1_SRAM_SIZE - \ STM32MP_SYSRAM_SIZE - \
STM32MP1_BL32_SIZE) STM32MP_BL32_SIZE)
#if STACK_PROTECTOR_ENABLED #if STACK_PROTECTOR_ENABLED
#define STM32MP1_BL2_SIZE U(0x00015000) /* 84 Ko for BL2 */ #define STM32MP_BL2_SIZE U(0x00015000) /* 84 Ko for BL2 */
#else #else
#define STM32MP1_BL2_SIZE U(0x00013000) /* 76 Ko for BL2 */ #define STM32MP_BL2_SIZE U(0x00013000) /* 76 Ko for BL2 */
#endif #endif
#define STM32MP1_BL2_BASE (STM32MP1_BL32_BASE - \ #define STM32MP_BL2_BASE (STM32MP_BL32_BASE - \
STM32MP1_BL2_SIZE) STM32MP_BL2_SIZE)
/* BL2 and BL32/sp_min require 5 tables */ /* BL2 and BL32/sp_min require 5 tables */
#define MAX_XLAT_TABLES 5 #define MAX_XLAT_TABLES 5
...@@ -85,12 +91,12 @@ enum ddr_type { ...@@ -85,12 +91,12 @@ enum ddr_type {
#endif #endif
/* DTB initialization value */ /* DTB initialization value */
#define STM32MP1_DTB_SIZE U(0x00004000) /* 16Ko for DTB */ #define STM32MP_DTB_SIZE U(0x00004000) /* 16Ko for DTB */
#define STM32MP1_DTB_BASE (STM32MP1_BL2_BASE - \ #define STM32MP_DTB_BASE (STM32MP_BL2_BASE - \
STM32MP1_DTB_SIZE) STM32MP_DTB_SIZE)
#define STM32MP1_BL33_BASE (STM32MP1_DDR_BASE + U(0x100000)) #define STM32MP_BL33_BASE (STM32MP_DDR_BASE + U(0x100000))
/******************************************************************************* /*******************************************************************************
* STM32MP1 device/io map related constants (used for MMU) * STM32MP1 device/io map related constants (used for MMU)
...@@ -155,12 +161,12 @@ enum ddr_type { ...@@ -155,12 +161,12 @@ enum ddr_type {
#define USART6_BASE U(0x44003000) #define USART6_BASE U(0x44003000)
#define UART7_BASE U(0x40018000) #define UART7_BASE U(0x40018000)
#define UART8_BASE U(0x40019000) #define UART8_BASE U(0x40019000)
#define STM32MP1_UART_BAUDRATE U(115200) #define STM32MP_UART_BAUDRATE U(115200)
/* For UART crash console */ /* For UART crash console */
#define STM32MP1_DEBUG_USART_BASE UART4_BASE #define STM32MP_DEBUG_USART_BASE UART4_BASE
/* UART4 on HSI@64MHz, TX on GPIOG11 Alternate 6 */ /* UART4 on HSI@64MHz, TX on GPIOG11 Alternate 6 */
#define STM32MP1_DEBUG_USART_CLK_FRQ 64000000 #define STM32MP_DEBUG_USART_CLK_FRQ 64000000
#define DEBUG_UART_TX_GPIO_BANK_ADDRESS GPIOG_BASE #define DEBUG_UART_TX_GPIO_BANK_ADDRESS GPIOG_BASE
#define DEBUG_UART_TX_GPIO_BANK_CLK_REG RCC_MP_AHB4ENSETR #define DEBUG_UART_TX_GPIO_BANK_CLK_REG RCC_MP_AHB4ENSETR
#define DEBUG_UART_TX_GPIO_BANK_CLK_EN RCC_MP_AHB4ENSETR_GPIOGEN #define DEBUG_UART_TX_GPIO_BANK_CLK_EN RCC_MP_AHB4ENSETR_GPIOGEN
...@@ -192,15 +198,15 @@ enum ddr_type { ...@@ -192,15 +198,15 @@ enum ddr_type {
/******************************************************************************* /*******************************************************************************
* STM32MP1 SDMMC * STM32MP1 SDMMC
******************************************************************************/ ******************************************************************************/
#define STM32MP1_SDMMC1_BASE U(0x58005000) #define STM32MP_SDMMC1_BASE U(0x58005000)
#define STM32MP1_SDMMC2_BASE U(0x58007000) #define STM32MP_SDMMC2_BASE U(0x58007000)
#define STM32MP1_SDMMC3_BASE U(0x48004000) #define STM32MP_SDMMC3_BASE U(0x48004000)
#define STM32MP1_MMC_INIT_FREQ 400000 /*400 KHz*/ #define STM32MP_MMC_INIT_FREQ 400000 /*400 KHz*/
#define STM32MP1_SD_NORMAL_SPEED_MAX_FREQ 25000000 /*25 MHz*/ #define STM32MP_SD_NORMAL_SPEED_MAX_FREQ 25000000 /*25 MHz*/
#define STM32MP1_SD_HIGH_SPEED_MAX_FREQ 50000000 /*50 MHz*/ #define STM32MP_SD_HIGH_SPEED_MAX_FREQ 50000000 /*50 MHz*/
#define STM32MP1_EMMC_NORMAL_SPEED_MAX_FREQ 26000000 /*26 MHz*/ #define STM32MP_EMMC_NORMAL_SPEED_MAX_FREQ 26000000 /*26 MHz*/
#define STM32MP1_EMMC_HIGH_SPEED_MAX_FREQ 52000000 /*52 MHz*/ #define STM32MP_EMMC_HIGH_SPEED_MAX_FREQ 52000000 /*52 MHz*/
/******************************************************************************* /*******************************************************************************
* STM32MP1 BSEC / OTP * STM32MP1 BSEC / OTP
...@@ -245,4 +251,10 @@ static inline uint32_t tamp_bkpr(uint32_t idx) ...@@ -245,4 +251,10 @@ static inline uint32_t tamp_bkpr(uint32_t idx)
******************************************************************************/ ******************************************************************************/
#define I2C4_BASE U(0x5C002000) #define I2C4_BASE U(0x5C002000)
/*******************************************************************************
* Device Tree defines
******************************************************************************/
#define DT_PWR_COMPAT "st,stm32mp1-pwr"
#define DT_RCC_CLK_COMPAT "st,stm32mp1-rcc"
#endif /* STM32MP1_DEF_H */ #endif /* STM32MP1_DEF_H */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment