Skip to content

Commit

Permalink
ARM: 9020/1: mm: use correct section size macro to describe the FDT v…
Browse files Browse the repository at this point in the history
…irtual address

Commit

  149a3ffe62b9dbc3 ("9012/1: move device tree mapping out of linear region")

created a permanent, read-only section mapping of the device tree blob
provided by the firmware, and added a set of macros to get the base and
size of the virtually mapped FDT based on the physical address. However,
while the mapping code uses the SECTION_SIZE macro correctly, the macros
use PMD_SIZE instead, which means something entirely different on ARM when
using short descriptors, and is therefore not the right quantity to use
here. So replace PMD_SIZE with SECTION_SIZE. While at it, change the names
of the macro and its parameter to clarify that it returns the virtual
address of the start of the FDT, based on the physical address in memory.

Tested-by: Joel Stanley <joel@jms.id.au>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
  • Loading branch information
Ard Biesheuvel authored and Russell King committed Oct 28, 2020
1 parent 4210157 commit fc2933c
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
6 changes: 3 additions & 3 deletions arch/arm/include/asm/memory.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@
#define XIP_VIRT_ADDR(physaddr) (MODULES_VADDR + ((physaddr) & 0x000fffff))

#define FDT_FIXED_BASE UL(0xff800000)
#define FDT_FIXED_SIZE (2 * PMD_SIZE)
#define FDT_VIRT_ADDR(physaddr) ((void *)(FDT_FIXED_BASE | (physaddr) % PMD_SIZE))
#define FDT_FIXED_SIZE (2 * SECTION_SIZE)
#define FDT_VIRT_BASE(physbase) ((void *)(FDT_FIXED_BASE | (physbase) % SECTION_SIZE))

#if !defined(CONFIG_SMP) && !defined(CONFIG_ARM_LPAE)
/*
Expand Down Expand Up @@ -116,7 +116,7 @@ extern unsigned long vectors_base;
#define MODULES_VADDR PAGE_OFFSET

#define XIP_VIRT_ADDR(physaddr) (physaddr)
#define FDT_VIRT_ADDR(physaddr) ((void *)(physaddr))
#define FDT_VIRT_BASE(physbase) ((void *)(physbase))

#endif /* !CONFIG_MMU */

Expand Down
2 changes: 1 addition & 1 deletion arch/arm/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -1087,7 +1087,7 @@ void __init setup_arch(char **cmdline_p)
void *atags_vaddr = NULL;

if (__atags_pointer)
atags_vaddr = FDT_VIRT_ADDR(__atags_pointer);
atags_vaddr = FDT_VIRT_BASE(__atags_pointer);

setup_processor();
if (atags_vaddr) {
Expand Down

0 comments on commit fc2933c

Please sign in to comment.