/******************************************************************************* * Perform any BL1 specific platform actions. ******************************************************************************/ void bl1_early_platform_setup(void) { const unsigned long bl1_ram_base = BL1_RAM_BASE; const unsigned long bl1_ram_limit = BL1_RAM_LIMIT; const unsigned long tzram_limit = TZRAM_BASE + TZRAM_SIZE; /* * Calculate how much ram is BL1 using & how much remains free. * This also includes a rudimentary mechanism to detect whether * the BL1 data is loaded at the top or bottom of memory. * TODO: add support for discontigous chunks of free ram if * needed. Might need dynamic memory allocation support * et al. */ bl1_tzram_layout.total_base = TZRAM_BASE; bl1_tzram_layout.total_size = TZRAM_SIZE; if (bl1_ram_limit == tzram_limit) { /* BL1 has been loaded at the top of memory. */ bl1_tzram_layout.free_base = TZRAM_BASE; bl1_tzram_layout.free_size = bl1_ram_base - TZRAM_BASE; } else { /* BL1 has been loaded at the bottom of memory. */ bl1_tzram_layout.free_base = bl1_ram_limit; bl1_tzram_layout.free_size = tzram_limit - bl1_ram_limit; } /* Initialize the platform config for future decision making */ platform_config_setup(); }
/******************************************************************************* * Perform any BL31 specific platform actions. Here is an opportunity to copy * parameters passed by the calling EL (S-EL1 in BL2 & S-EL3 in BL1) before they * are lost (potentially). This needs to be done before the MMU is initialized * so that the memory layout can be used while creating page tables. On the FVP * we know that BL2 has populated the parameters in secure DRAM. So we just use * the reference passed in 'from_bl2' instead of copying. The 'data' parameter * is not used since all the information is contained in 'from_bl2'. Also, BL2 * has flushed this information to memory, so we are guaranteed to pick up good * data ******************************************************************************/ void bl31_early_platform_setup(bl31_args *from_bl2, void *data) { bl2_to_bl31_args = from_bl2; /* Initialize the platform config for future decision making */ platform_config_setup(); console_init(PL011_UART0_BASE); }
/******************************************************************************* * Perform any BL31 specific platform actions. Here is an opportunity to copy * parameters passed by the calling EL (S-EL1 in BL2 & S-EL3 in BL1) before they * are lost (potentially). This needs to be done before the MMU is initialized * so that the memory layout can be used while creating page tables. On the FVP * we know that BL2 has populated the parameters in secure DRAM. So we just use * the reference passed in 'from_bl2' instead of copying. The 'data' parameter * is not used since all the information is contained in 'from_bl2'. Also, BL2 * has flushed this information to memory, so we are guaranteed to pick up good * data ******************************************************************************/ void bl31_early_platform_setup(bl31_args_t *from_bl2, void *data) { bl2_to_bl31_args = from_bl2; /* Initialize the console to provide early debug support */ console_init(PL011_UART0_BASE); /* Initialize the platform config for future decision making */ platform_config_setup(); }
/******************************************************************************* * BL1 has passed the extents of the trusted SRAM that should be visible to BL2 * in x0. This memory layout is sitting at the base of the free trusted SRAM. * Copy it to a safe loaction before its reclaimed by later BL2 functionality. ******************************************************************************/ void bl2_early_platform_setup(meminfo_t *mem_layout, void *data) { /* Initialize the console to provide early debug support */ console_init(PL011_UART0_BASE); /* Setup the BL2 memory layout */ bl2_tzram_layout.total_base = mem_layout->total_base; bl2_tzram_layout.total_size = mem_layout->total_size; bl2_tzram_layout.free_base = mem_layout->free_base; bl2_tzram_layout.free_size = mem_layout->free_size; bl2_tzram_layout.attr = mem_layout->attr; bl2_tzram_layout.next = 0; /* Initialize the platform config for future decision making */ platform_config_setup(); }