On 12/18/2016 09:11 PM, Priyanka Jain wrote: > Firmware of Management Complex (MC) should be loaded > at 512MB aligned privately allocated memory at DRAM end. > And this memory should be reduced from total memory > available for general purposes.
It is already reserved at the alignment of CONFIG_SYS_MC_RSV_MEM_ALIGN, which is 512MB. What are you changing? > > Update memory allocation code in MC driver to support > above requirements. > > Signed-off-by: Priyanka Jain <priyanka.j...@nxp.com> > --- > drivers/net/fsl-mc/mc.c | 98 +++++++++++++++++++++------------------------- > 1 files changed, 45 insertions(+), 53 deletions(-) > > diff --git a/drivers/net/fsl-mc/mc.c b/drivers/net/fsl-mc/mc.c > index 46b8a6b..df3f7fa 100644 > --- a/drivers/net/fsl-mc/mc.c > +++ b/drivers/net/fsl-mc/mc.c > @@ -1,5 +1,5 @@ > /* > - * Copyright (C) 2014 Freescale Semiconductor > + * Copyright (C) 2014, 2016 Freescale Semiconductor > * > * SPDX-License-Identifier: GPL-2.0+ > */ > @@ -41,6 +41,7 @@ struct fsl_dpbp_obj *dflt_dpbp = NULL; > struct fsl_dpio_obj *dflt_dpio = NULL; > struct fsl_dpni_obj *dflt_dpni = NULL; > static u64 mc_lazy_dpl_addr; > +static u64 mc_ram_addr; > > #ifdef DEBUG > void dump_ram_words(const char *title, void *addr) > @@ -89,11 +90,11 @@ void dump_mc_ccsr_regs(struct mc_ccsr_registers __iomem > *mc_ccsr_regs) > * Copying MC firmware or DPL image to DDR > */ > static int mc_copy_image(const char *title, > - u64 image_addr, u32 image_size, u64 mc_ram_addr) > + u64 image_addr, u32 image_size, u64 mc_addr) > { > - debug("%s copied to address %p\n", title, (void *)mc_ram_addr); > - memcpy((void *)mc_ram_addr, (void *)image_addr, image_size); > - flush_dcache_range(mc_ram_addr, mc_ram_addr + image_size); > + debug("%s copied to address %p\n", title, (void *)mc_addr); > + memcpy((void *)mc_addr, (void *)image_addr, image_size); > + flush_dcache_range(mc_addr, mc_addr + image_size); > return 0; > } > > @@ -156,16 +157,14 @@ int parse_mc_firmware_fit_image(u64 mc_fw_addr, > /* > * Calculates the values to be used to specify the address range > * for the MC private DRAM block, in the MCFBALR/MCFBAHR registers. > - * It returns the highest 512MB-aligned address within the given > - * address range, in '*aligned_base_addr', and the number of 256 MiB > - * blocks in it, in 'num_256mb_blocks'. > + * It stores the highest 512MB-aligned address within the given > + * address range, in 'mc_ram_addr', and returns the number of 256 MB > + * blocks in 'num_256mb_blocks'. > */ > -static int calculate_mc_private_ram_params(u64 mc_private_ram_start_addr, > - size_t mc_ram_size, > - u64 *aligned_base_addr, > +static int calculate_mc_private_ram_params(size_t mc_ram_size, > u8 *num_256mb_blocks) > { > - u64 addr; > + u64 mc_ram_end_addr; > u16 num_blocks; > > if (mc_ram_size % MC_RAM_SIZE_ALIGNMENT != 0) { > @@ -180,18 +179,39 @@ static int calculate_mc_private_ram_params(u64 > mc_private_ram_start_addr, > mc_ram_size); > return -EINVAL; > } > + *num_256mb_blocks = num_blocks; > > - addr = (mc_private_ram_start_addr + mc_ram_size - 1) & > + /* > + * The MC private DRAM block will be carved at the end of DRAM > + */ > + if (gd->bd->bi_dram[1].start) { > + mc_ram_end_addr = > + gd->bd->bi_dram[1].start + gd->bd->bi_dram[1].size; > + } else { > + mc_ram_end_addr = > + gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size; > + } > + > + mc_ram_addr = (mc_ram_end_addr - mc_ram_size) & > MC_RAM_BASE_ADDR_ALIGNMENT_MASK; > > - if (addr < mc_private_ram_start_addr) { > - printf("fsl-mc: ERROR: bad start address %#llx\n", > - mc_private_ram_start_addr); > + if (mc_ram_addr > mc_ram_end_addr) { > + printf("fsl-mc: ERROR: bad end address %#llx\n", > + mc_ram_end_addr); > return -EFAULT; > } > > - *aligned_base_addr = addr; > - *num_256mb_blocks = num_blocks; > + /* > + * Total DRAM available for general purpose will get > + * reduced by the size of private DRAM allocated to MC. > + */ > + if (gd->bd->bi_dram[1].start) { > + gd->bd->bi_dram[1].size = > + mc_ram_addr - gd->bd->bi_dram[1].start; > + } else { > + gd->bd->bi_dram[0].size = > + mc_ram_addr - gd->bd->bi_dram[0].start; > + } NAK. You cannot change the global memory size within MC driver. Please explain what is not working with current memory reservation. York _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot