Re: [PATCH 1/5] k1c: Initial Kalray Coolidge (k1c) architecture support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jan 16, 2020 at 02:26:13PM +0100, Clément Leger wrote:
> 
> 
> ----- On 16 Jan, 2020, at 14:11, Sascha Hauer s.hauer@xxxxxxxxxxxxxx wrote:
> 
> > On Thu, Jan 16, 2020 at 01:24:41PM +0100, Clément Leger wrote:
> >> 
> >> ----- On 16 Jan, 2020, at 11:55, Sascha Hauer s.hauer@xxxxxxxxxxxxxx wrote:
> >> 
> >> > On Thu, Jan 16, 2020 at 11:49:31AM +0100, Clément Leger wrote:
> >> >> Hi Sasha
> >> >> 
> >> >> ----- On 16 Jan, 2020, at 10:26, Sascha Hauer s.hauer@xxxxxxxxxxxxxx wrote:
> >> >> 
> >> >> > On Wed, Jan 15, 2020 at 11:26:46AM +0100, Clement Leger wrote:
> >> >> >> +config MALLOC_BASE
> >> >> >> +	hex
> >> >> >> +	default 0x100000000
> >> >> >> +
> >> >> >> +config MALLOC_SIZE
> >> >> >> +	hex
> >> >> >> +	default 0x800000
> >> >> >> +	prompt "malloc area size"
> >> >> >> +endmenu
> >> >> > 
> >> >> >> diff --git a/arch/k1c/lib/board.c b/arch/k1c/lib/board.c
> >> >> >> new file mode 100644
> >> >> >> index 000000000..d17a32614
> >> >> >> --- /dev/null
> >> >> >> +++ b/arch/k1c/lib/board.c
> >> >> >> @@ -0,0 +1,20 @@
> >> >> >> +// SPDX-License-Identifier: GPL-2.0-only
> >> >> >> +/*
> >> >> >> + * Copyright (C) 2019 Kalray Inc.
> >> >> >> + */
> >> >> >> +
> >> >> >> +#include <common.h>
> >> >> >> +#include <malloc.h>
> >> >> >> +#include <memory.h>
> >> >> >> +#include <asm-generic/memory_layout.h>
> >> >> >> +
> >> >> >> +
> >> >> >> +void __noreturn k1c_start_barebox(void)
> >> >> >> +{
> >> >> >> +	mem_malloc_init((void *)CONFIG_MALLOC_BASE,
> >> >> >> +			(void *)(CONFIG_MALLOC_BASE + MALLOC_SIZE - 1));
> >> >> > 
> >> >> > You could extract valid memory from the device tree instead and pick
> >> >> > some memory for malloc there. See of_find_mem() how this can be done.
> >> >> 
> >> >> I think we are going to bite our tail here since of_unflatten_dtb does
> >> >> some xzalloc to unflatten the DTB so we need to initialize the malloc
> >> >> allocator before accessing DTB.
> >> > 
> >> > of_find_mem() doesn't use of_unflatten_dtb(), it uses libfdt to parse
> >> > the device tree.
> >> 
> >> Oh indeed. I looked at it and I see potential problems:
> >> - Stack address/size will still need to be hardcoded because it needs to
> >>   be setup before executing C code.
> > 
> > mem_malloc_init() actually is C code, so you must have have configured a
> > stack already ;)
> 
> Yes of course ! Currently, I was using MALLOC_BASE. this way, stack and
> malloc were growing at opposite sides.
> 
> But in fact, maybe the stack could be added into the linker script. This way,
> we would not have to hardcode it using STACK_BASE.
> This way it would not depend anymore on malloc base.
> 
> Do you think it would be ok ?

Yes, that sounds good.

> 
> > 
> >> - We have multiple memory nodes in our device tree (SMEM and DDR) so we will
> >>   probably have to do some quirks to finally find the DDR memory node.
> > 
> > Indeed.
> > 
> >> - MALLOC_SIZE will still needs to be there
> > 
> > On ARM we use roughly half of the available memory for malloc. Maximum
> > is 1GiB anyway, as this is the maximum supported by tlsf malloc.
> > 
> > The preferred layout is to put barebox binary and stack to the end of
> > available SDRAM and put the malloc area beneath it. That of course needs
> > a relocatable barebox binary, I don't know if you can generate such an
> > image. If not you have to think of some good base address and put the
> > malloc area whereever it fits.
> 
> That would be a good solution yes ! But we don't have implemented relocatable
> support yet.
> Since we will always have DDR on Coolidge SoC, we can safely assume SDRAM
> will always be present.
> So in the meantime, we can have the following memory layout (if stack included
> in barebox binary):
> 
> - 0x100000000 -> 128M reserved for Linux loading
> - 0x100000000 + 128M -> barebox binary
> - 0x100000000 + 128M + text_size = malloc area start
> 
> Device tree could then be used to check the available amount of memory.

With todays multi gigabyte RAM sizes this approach is fine. In the old
days when memory was sparse it was painful when barebox ended up
somewhere in the middle of SDRAM and divided the usable memory size.

Sascha

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox




[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux