]> git.baikalelectronics.ru Git - uboot.git/commit
arm: mvebu: mbus: Fix mbus driver to work also after U-Boot relocation
authorPali Rohár <pali@kernel.org>
Wed, 10 Aug 2022 12:46:09 +0000 (14:46 +0200)
committerStefan Roese <sr@denx.de>
Tue, 23 Aug 2022 10:35:37 +0000 (12:35 +0200)
commitdf18b7d8b00b53716962ae1b75340115545624ea
tree99371a75db315d6275087b7aada4fb6c02d871cc
parent4914660bde764bae12997067c51e21af5b7670d9
arm: mvebu: mbus: Fix mbus driver to work also after U-Boot relocation

mbus driver is initialized from arch_cpu_init() callback which is called
before relocation. This driver stores lot of functions and structure
pointers into global variables, so it is data position dependent.

Therefore after relocations all pointers are invalid and driver does not
work anymore as all pointers referes to the old memory, which overlaps with
CONFIG_SYS_LOAD_ADDR and ${loadaddr}.

For example U-Boot fuse command crashes if loadaddr memory is cleared or
rewritten by some image loaded by U-Boot load command.

  mw.w ${loadaddr} 0x0 10000
  fuse read 0 1 2

Fix this issue by removing of all mbus global variables in which are stored
pointers to structures or functions which changes during relocation. And
replace it by direct function calls (not via pointers). With this change
fuse command finally works.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
Reviewed-by: Stefan Roese <sr@denx.de>
arch/arm/mach-kirkwood/include/mach/cpu.h
arch/arm/mach-mvebu/include/mach/cpu.h
arch/arm/mach-mvebu/mbus.c
board/alliedtelesis/x530/x530.c
board/maxbcm/maxbcm.c
board/theadorable/theadorable.c
include/linux/mbus.h