arch: arm: Implement TEXT_BASE instead of using a hardcoded address

This was an issue for other armv7 boards that have slightly different
addresses till now. This also allows to start working on relocation
in the near future for both armv7 and aarch64.

While we're at it, fix some mistakes here and there.

Signed-off-by: Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com>
This commit is contained in:
Ivaylo Ivanov 2024-08-06 11:12:31 +03:00
parent 1b6ce821f7
commit b37e225721
5 changed files with 24 additions and 15 deletions

View File

@ -103,6 +103,7 @@ export srctree objtree VPATH
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
KERNEL_PATH ?= $(CONFIG_KERNEL_PATH:"%"=%) KERNEL_PATH ?= $(CONFIG_KERNEL_PATH:"%"=%)
DT_PATH ?= $(CONFIG_DT_PATH:"%"=%) DT_PATH ?= $(CONFIG_DT_PATH:"%"=%)
TEXT_BASE ?= $(CONFIG_TEXT_BASE:"%"=%)
KCONFIG_CONFIG ?= .config KCONFIG_CONFIG ?= .config
export KCONFIG_CONFIG export KCONFIG_CONFIG
@ -360,7 +361,7 @@ quiet_cmd_uniLoader = LD $@.o
cmd_uniLoader = $(LD) $(main-y) $(uniLoader-libs) -o $@.o --script=arch/$(ARCH)/linker.lds cmd_uniLoader = $(LD) $(main-y) $(uniLoader-libs) -o $@.o --script=arch/$(ARCH)/linker.lds
arch/$(ARCH)/linker.lds: arch/$(ARCH)/linker.lds.S $(KERNEL_PATH) arch/$(ARCH)/linker.lds: arch/$(ARCH)/linker.lds.S $(KERNEL_PATH)
$(CPP) $< -DKERNEL_PATH=$(KERNEL_PATH) -DDTB_PATH=$(DT_PATH) -P -o $@ $(CPP) $< -DTEXT_BASE=$(TEXT_BASE) -DKERNEL_PATH=$(KERNEL_PATH) -DDTB_PATH=$(DT_PATH) -P -o $@
uniLoader: $(uniLoader-all) uniLoader: $(uniLoader-all)
$(call if_changed,uniLoader) $(call if_changed,uniLoader)

View File

@ -2,7 +2,9 @@
/* /*
* Copyright (c) 2022, Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com> * Copyright (c) 2022, Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com>
*/ */
.global _start
_start:
ldr r0, =dtb ldr r0, =dtb
ldr r1, =kernel ldr r1, =kernel
b main b main

View File

@ -9,7 +9,9 @@ INPUT(DTB_PATH)
SECTIONS SECTIONS
{ {
. = 0x80008000; /* The default TEXT_BASE address is 0x0 if not specified otherwise, so compare it to 0x1 */
__start_address = (TEXT_BASE > 0x1) ? TEXT_BASE : 0x80008000;
. = __start_address;
.boot : { .boot : {
arch/arm/Start.o arch/arm/Start.o

View File

@ -55,23 +55,27 @@ menu "Device Support"
help help
Say Y if you want to include support for Samsung Galaxy S20 Say Y if you want to include support for Samsung Galaxy S20
config SAMSUNG_J5LTE
bool "Support for Samsung Galaxy J5 2015"
default n
depends on QC32_8916
help
Say Y if you want to include arm32 support for Samsung Galaxy J5 2015
config SAMSUNG_J4LTE config SAMSUNG_J4LTE
bool "Support for Samsung Galaxy J4 2018" bool "Support for Samsung Galaxy J4 2018"
default n default n
depends on EXYNOS_7570 depends on EXYNOS_7570
help help
Say Y if you want to include arm64 support for Samsung Galaxy J4 2018 Say Y if you want to include arm64 support for Samsung Galaxy J4 2018
config SAMSUNG_J5LTE
bool "Support for Samsung Galaxy J5 2015"
default n
depends on QC32_8916
help
Say Y if you want to include arm32 support for Samsung Galaxy J5 2015
endmenu endmenu
menu "Device Specific Addresses" menu "Device Specific Addresses"
config TEXT_BASE
hex "UniLoader Text Base"
default 0x0
config PAYLOAD_ENTRY config PAYLOAD_ENTRY
hex "Payload Entry Address" hex "Payload Entry Address"
default 0x830000000 if APPLE_N61AP default 0x830000000 if APPLE_N61AP
@ -82,9 +86,8 @@ menu "Device Specific Addresses"
default 0x090000000 if SAMSUNG_DREAMLTE default 0x090000000 if SAMSUNG_DREAMLTE
default 0x090000000 if SAMSUNG_STARLTE default 0x090000000 if SAMSUNG_STARLTE
default 0x090000000 if SAMSUNG_X1S default 0x090000000 if SAMSUNG_X1S
default 0x090000000 if SAMSUNG_J5LTE
default 0x050000000 if SAMSUNG_J4LTE default 0x050000000 if SAMSUNG_J4LTE
default 0x090000000 if SAMSUNG_J5LTE
config FRAMEBUFFER_BASE config FRAMEBUFFER_BASE
hex "Framebuffer Base Address (for SimpleFB)" hex "Framebuffer Base Address (for SimpleFB)"
@ -97,8 +100,8 @@ menu "Device Specific Addresses"
default 0x0cc000000 if SAMSUNG_DREAMLTE default 0x0cc000000 if SAMSUNG_DREAMLTE
default 0x0cc000000 if SAMSUNG_STARLTE default 0x0cc000000 if SAMSUNG_STARLTE
default 0x0F1000000 if SAMSUNG_X1S default 0x0F1000000 if SAMSUNG_X1S
default 0x08e000000 if SAMSUNG_J5LTE
default 0x067000000 if SAMSUNG_J4LTE default 0x067000000 if SAMSUNG_J4LTE
default 0x08e000000 if SAMSUNG_J5LTE
config FRAMEBUFFER_WIDTH config FRAMEBUFFER_WIDTH
int "Framebuffer Width (for SimpleFB)" int "Framebuffer Width (for SimpleFB)"
@ -111,8 +114,8 @@ menu "Device Specific Addresses"
default 1440 if SAMSUNG_DREAMLTE default 1440 if SAMSUNG_DREAMLTE
default 1440 if SAMSUNG_STARLTE default 1440 if SAMSUNG_STARLTE
default 1440 if SAMSUNG_X1S default 1440 if SAMSUNG_X1S
default 720 if SAMSUNG_J5LTE
default 720 if SAMSUNG_J4LTE default 720 if SAMSUNG_J4LTE
default 720 if SAMSUNG_J5LTE
config FRAMEBUFFER_HEIGHT config FRAMEBUFFER_HEIGHT
int "Framebuffer Height (for SimpleFB)" int "Framebuffer Height (for SimpleFB)"
@ -125,8 +128,8 @@ menu "Device Specific Addresses"
default 2960 if SAMSUNG_DREAMLTE default 2960 if SAMSUNG_DREAMLTE
default 2960 if SAMSUNG_STARLTE default 2960 if SAMSUNG_STARLTE
default 3200 if SAMSUNG_X1S default 3200 if SAMSUNG_X1S
default 1280 if SAMSUNG_J5LTE
default 1280 if SAMSUNG_J4LTE default 1280 if SAMSUNG_J4LTE
default 1280 if SAMSUNG_J5LTE
config FRAMEBUFFER_STRIDE config FRAMEBUFFER_STRIDE
int "Framebuffer Stride (for SimpleFB)" int "Framebuffer Stride (for SimpleFB)"
@ -139,8 +142,8 @@ menu "Device Specific Addresses"
default 4 if SAMSUNG_DREAMLTE default 4 if SAMSUNG_DREAMLTE
default 4 if SAMSUNG_STARLTE default 4 if SAMSUNG_STARLTE
default 4 if SAMSUNG_X1S default 4 if SAMSUNG_X1S
default 3 if SAMSUNG_J5LTE
default 4 if SAMSUNG_J4LTE default 4 if SAMSUNG_J4LTE
default 3 if SAMSUNG_J5LTE
config FRAMEBUFFER_BGRA config FRAMEBUFFER_BGRA
bool "Framebuffer BGRA (for SimpleFB)" bool "Framebuffer BGRA (for SimpleFB)"

View File

@ -1,3 +1,4 @@
CONFIG_CROSS_COMPILE="arm-none-eabi-" CONFIG_CROSS_COMPILE="arm-none-eabi-"
CONFIG_TEXT_BASE=0x80008000
CONFIG_SAMSUNG_J5LTE=y CONFIG_SAMSUNG_J5LTE=y
CONFIG_QC32_8916=y CONFIG_QC32_8916=y