Thread (68 messages) 68 messages, 9 authors, 2016-02-11

[PATCH 5/5] arm: boot: store ATAGs structure into DT "/chosen/linux, atags" entry

From: arnd@arndb.de (Arnd Bergmann)
Date: 2015-12-15 11:05:30
Also in: linux-devicetree, linux-omap, lkml

On Tuesday 15 December 2015 10:33:25 Pali Roh?r wrote:
On Monday 30 November 2015 11:09:42 Nicolas Pitre wrote:
quoted
On Mon, 30 Nov 2015, Pali Roh?r wrote:
quoted
On Monday 30 November 2015 07:23:53 Tony Lindgren wrote:
quoted
* Pali Roh?r [off-list ref] [151129 16:16]:
quoted
On Monday 30 November 2015 01:09:17 Nicolas Pitre wrote:
quoted
On Sun, 29 Nov 2015, Russell King - ARM Linux wrote:
In arch/arm/kernel/setup.c is function setup_arch() and it calls:

  mdesc = setup_machine_fdt(__atags_pointer);
  if (!mdesc)
      mdesc = setup_machine_tags(__atags_pointer, __machine_arch_type);

So it looks like that on atags address is stored either atags structure
or DT structure... so it is truth kernel uncompress code put DT blob to
same offset where is expected atags structure?
No.  It doesn't put it anywhere. Those functions read DT/ATAGs from the 
passed address.  But you know this address won't be the one you want for 
the legacy ATAGs.

What you should do is to add a init_early hook to your mdesc structure 
and retrieve your ATAGs from there directly at PAGE_OFFSET + 0x100.

Now I suspect paging_init() marks the point where the ATAGs will be 
overwritten.  To prevent this, you might have to add an additional tweak 
in arm_mm_memblock_reserve() similar to the one already present for 
CONFIG_SA1111. Something like:

      memblock_reserve(PHYS_OFFSET, PAGE_SIZE);

And later on you can return that page back to the system.
So am I understand correctly that solution would be to hack
arch/arm/mm/mmu.c to not overwrite page at PHYS_OFFSET?
I would think we can just copy the data from PAGE_OFFSET + 0x100
to a some other page from your init_early hook. IIRC you can't use
kmalloc there, but memblock_alloc() should work.

	Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help