Merge branch 'master' of git://git.denx.de/u-boot
Signed-off-by: Stefano Babic <sbabic@denx.de>
This commit is contained in:
commit
2d221489df
15
.travis.yml
15
.travis.yml
@ -29,6 +29,9 @@ addons:
|
||||
- gcc-arm-linux-gnueabihf
|
||||
- gcc-aarch64-linux-gnu
|
||||
- iasl
|
||||
- grub-efi-ia32-bin
|
||||
- rpm2cpio
|
||||
- wget
|
||||
|
||||
install:
|
||||
# install latest device tree compiler
|
||||
@ -45,10 +48,14 @@ install:
|
||||
- virtualenv /tmp/venv
|
||||
- . /tmp/venv/bin/activate
|
||||
- pip install pytest
|
||||
- grub-mkimage -o ~/grub_x86.efi -O i386-efi normal echo lsefimmap lsefi lsefisystab efinet tftp minicmd
|
||||
- mkdir ~/grub2-arm
|
||||
- ( cd ~/grub2-arm; wget -O - http://download.opensuse.org/ports/armv7hl/distribution/leap/42.2/repo/oss/suse/armv7hl/grub2-arm-efi-2.02~beta2-87.1.armv7hl.rpm | rpm2cpio | cpio -di )
|
||||
|
||||
env:
|
||||
global:
|
||||
- PATH=/tmp/dtc:/tmp/uboot-test-hooks/bin:$PATH
|
||||
- PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci
|
||||
- BUILD_DIR=build
|
||||
- HOSTCC="cc"
|
||||
- HOSTCXX="c++"
|
||||
@ -86,10 +93,13 @@ script:
|
||||
# never prevent any test from running. That way, we can always pass
|
||||
# "-k something" even when $TEST_PY_TEST_SPEC doesnt need a custom
|
||||
# value.
|
||||
- if [[ "${TEST_PY_BD}" != "" ]]; then
|
||||
- export UBOOT_TRAVIS_BUILD_DIR=`cd .. && pwd`/.bm-work/${TEST_PY_BD};
|
||||
cp ~/grub_x86.efi $UBOOT_TRAVIS_BUILD_DIR/;
|
||||
cp ~/grub2-arm/usr/lib/grub2/arm-efi/grub.efi $UBOOT_TRAVIS_BUILD_DIR/grub_arm.efi;
|
||||
if [[ "${TEST_PY_BD}" != "" ]]; then
|
||||
./test/py/test.py --bd ${TEST_PY_BD} ${TEST_PY_ID}
|
||||
-k "${TEST_PY_TEST_SPEC:-not a_test_which_does_not_exist}"
|
||||
--build-dir `cd .. && pwd`/.bm-work/${TEST_PY_BD};
|
||||
--build-dir "$UBOOT_TRAVIS_BUILD_DIR";
|
||||
fi
|
||||
|
||||
matrix:
|
||||
@ -242,6 +252,7 @@ matrix:
|
||||
BUILDMAN="^vexpress_ca9x4$"
|
||||
- env:
|
||||
- TEST_PY_BD="integratorcp_cm926ejs"
|
||||
TEST_PY_TEST_SPEC="not sleep"
|
||||
TEST_PY_ID="--id qemu"
|
||||
BUILDMAN="^integratorcp_cm926ejs$"
|
||||
- env:
|
||||
|
28
Kconfig
28
Kconfig
@ -56,6 +56,7 @@ config CC_OPTIMIZE_FOR_SIZE
|
||||
config DISTRO_DEFAULTS
|
||||
bool "Select defaults suitable for booting general purpose Linux distributions"
|
||||
default y if ARCH_SUNXI
|
||||
default y if ARCH_LS2080A
|
||||
default n
|
||||
select CMD_BOOTZ if ARM && !ARM64
|
||||
select CMD_BOOTI if ARM64
|
||||
@ -291,33 +292,6 @@ config FIT_IMAGE_POST_PROCESS
|
||||
injected into the FIT creation (i.e. the blobs would have been pre-
|
||||
processed before being added to the FIT image).
|
||||
|
||||
config SPL_DFU_SUPPORT
|
||||
bool "Enable SPL with DFU to load binaries to memory device"
|
||||
depends on USB
|
||||
help
|
||||
Currently the SPL does not have capability to load the
|
||||
binaries or boot images to boot devices like ram,eMMC,SPI,etc.
|
||||
This feature enables the DFU (Device Firmware Upgarde) in SPL with
|
||||
RAM memory device support. The ROM code will load and execute
|
||||
the SPL built with dfu. The user can load binaries (u-boot/kernel) to
|
||||
selected device partition from host-pc using dfu-utils.
|
||||
This feature will be useful to flash the binaries to factory
|
||||
or bare-metal boards using USB interface.
|
||||
|
||||
choice
|
||||
bool "DFU device selection"
|
||||
depends on SPL_DFU_SUPPORT
|
||||
|
||||
config SPL_DFU_RAM
|
||||
bool "RAM device"
|
||||
depends on SPL_DFU_SUPPORT
|
||||
help
|
||||
select RAM/DDR memory device for loading binary images
|
||||
(u-boot/kernel) to the selected device partition using
|
||||
DFU and execute the u-boot/kernel from RAM.
|
||||
|
||||
endchoice
|
||||
|
||||
config SYS_CLK_FREQ
|
||||
depends on ARC || ARCH_SUNXI
|
||||
int "CPU clock frequency"
|
||||
|
@ -167,7 +167,8 @@ F: arch/arm/cpu/armv7/stv0991/
|
||||
F: arch/arm/include/asm/arch-stv0991/
|
||||
|
||||
ARM SUNXI
|
||||
S: Orphan
|
||||
M: Jagan Teki <jagan@openedev.com>
|
||||
M: Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
T: git git://git.denx.de/u-boot-sunxi.git
|
||||
F: arch/arm/cpu/armv7/sunxi/
|
||||
F: arch/arm/include/asm/arch-sunxi/
|
||||
@ -271,7 +272,7 @@ F: lib/fdtdec*
|
||||
F: lib/libfdt/
|
||||
F: include/fdt*
|
||||
F: include/libfdt*
|
||||
F. common/cmd_fdt.c
|
||||
F: cmd/fdt.c
|
||||
F: common/fdt_support.c
|
||||
|
||||
FREEBSD
|
||||
|
11
Makefile
11
Makefile
@ -527,6 +527,15 @@ endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# These are set by the arch-specific config.mk. Make sure they are exported
|
||||
# so they can be used when building an EFI application.
|
||||
export EFI_LDS # Filename of EFI link script in arch/$(ARCH)/lib
|
||||
export EFI_CRT0 # Filename of EFI CRT0 in arch/$(ARCH)/lib
|
||||
export EFI_RELOC # Filename of EFU relocation code in arch/$(ARCH)/lib
|
||||
export CFLAGS_EFI # Compiler flags to add when building EFI app
|
||||
export CFLAGS_NON_EFI # Compiler flags to remove when building EFI app
|
||||
export EFI_TARGET # binutils target if EFI is natively supported
|
||||
|
||||
# If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use
|
||||
# that (or fail if absent). Otherwise, search for a linker script in a
|
||||
# standard location.
|
||||
@ -1131,7 +1140,7 @@ quiet_cmd_u-boot_payload ?= LD $@
|
||||
cmd_u-boot_payload ?= $(LD) $(LDFLAGS_EFI_PAYLOAD) -o $@ \
|
||||
-T u-boot-payload.lds arch/x86/cpu/call32.o \
|
||||
lib/efi/efi.o lib/efi/efi_stub.o u-boot.bin.o \
|
||||
$(addprefix arch/$(ARCH)/lib/efi/,$(EFISTUB))
|
||||
$(addprefix arch/$(ARCH)/lib/,$(EFISTUB))
|
||||
|
||||
u-boot-payload: u-boot.bin.o u-boot-payload.lds FORCE
|
||||
$(call if_changed,u-boot_payload)
|
||||
|
7
README
7
README
@ -3338,11 +3338,6 @@ FIT uImage format:
|
||||
CONFIG_SPL_INIT_MINIMAL
|
||||
Arch init code should be built for a very small image
|
||||
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR,
|
||||
CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS,
|
||||
Address and partition on the MMC to load U-Boot from
|
||||
when the MMC is being used in raw mode.
|
||||
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
|
||||
Partition on the MMC to load U-Boot from when the MMC is being
|
||||
used in raw mode
|
||||
@ -4115,7 +4110,7 @@ but it can not erase, write this NOR flash by SRIO or PCIE interface.
|
||||
|
||||
Define this to a string that is the name of the block device.
|
||||
|
||||
- FAT_ENV_DEV_AND_PART:
|
||||
- FAT_ENV_DEVICE_AND_PART:
|
||||
|
||||
Define this to a string to specify the partition of the device. It can
|
||||
be as following:
|
||||
|
@ -126,6 +126,17 @@ config ENABLE_ARM_SOC_BOOT0_HOOK
|
||||
ARM_SOC_BOOT0_HOOK which contains the required assembler
|
||||
preprocessor code.
|
||||
|
||||
config ARCH_OMAP2
|
||||
bool
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
|
||||
config ARM64_SUPPORT_AARCH32
|
||||
bool "ARM64 system support AArch32 execution state"
|
||||
default y if ARM64 && !TARGET_THUNDERX_88XX
|
||||
help
|
||||
This ARM64 system supports AArch32 execution state.
|
||||
|
||||
choice
|
||||
prompt "Target select"
|
||||
default TARGET_HIKEY
|
||||
@ -327,71 +338,61 @@ config TARGET_VEXPRESS_CA9X4
|
||||
|
||||
config TARGET_BRXRE1
|
||||
bool "Support BRXRE1"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
|
||||
config TARGET_BRPPT1
|
||||
bool "Support BRPPT1"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
|
||||
config TARGET_DRACO
|
||||
bool "Support draco"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
select DM
|
||||
select DM_SERIAL
|
||||
select DM_GPIO
|
||||
|
||||
config TARGET_THUBAN
|
||||
bool "Support thuban"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
select DM
|
||||
select DM_SERIAL
|
||||
select DM_GPIO
|
||||
|
||||
config TARGET_RASTABAN
|
||||
bool "Support rastaban"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
select DM
|
||||
select DM_SERIAL
|
||||
select DM_GPIO
|
||||
|
||||
config TARGET_ETAMIN
|
||||
bool "Support etamin"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
select DM
|
||||
select DM_SERIAL
|
||||
select DM_GPIO
|
||||
|
||||
config TARGET_PXM2
|
||||
bool "Support pxm2"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
select DM
|
||||
select DM_SERIAL
|
||||
select DM_GPIO
|
||||
|
||||
config TARGET_RUT
|
||||
bool "Support rut"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
select DM
|
||||
select DM_SERIAL
|
||||
select DM_GPIO
|
||||
|
||||
config TARGET_TI814X_EVM
|
||||
bool "Support ti814x_evm"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
|
||||
config TARGET_TI816X_EVM
|
||||
bool "Support ti816x_evm"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
|
||||
config TARGET_BCM23550_W1D
|
||||
bool "Support bcm23550_w1d"
|
||||
@ -486,25 +487,21 @@ config TARGET_MX53SMD
|
||||
|
||||
config OMAP34XX
|
||||
bool "OMAP34XX SoC"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
select USE_TINY_PRINTF
|
||||
|
||||
config OMAP44XX
|
||||
bool "OMAP44XX SoC"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
select USE_TINY_PRINTF
|
||||
|
||||
config OMAP54XX
|
||||
bool "OMAP54XX SoC"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
|
||||
config AM43XX
|
||||
bool "AM43XX SoC"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
help
|
||||
Support for AM43xx SOC from Texas Instruments.
|
||||
The AM43xx high performance SOC features a Cortex-A9
|
||||
@ -514,8 +511,7 @@ config AM43XX
|
||||
|
||||
config AM33XX
|
||||
bool "AM33XX SoC"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
help
|
||||
Support for AM335x SOC from Texas Instruments.
|
||||
The AM335x high performance SOC features a Cortex-A8
|
||||
@ -554,29 +550,28 @@ config ARCH_SOCFPGA
|
||||
|
||||
config TARGET_CM_T43
|
||||
bool "Support cm_t43"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
select ARCH_OMAP2
|
||||
|
||||
config ARCH_SUNXI
|
||||
bool "Support sunxi (Allwinner) SoCs"
|
||||
select CMD_GPIO
|
||||
select CMD_MMC if MMC
|
||||
select CMD_USB
|
||||
select CMD_USB if DISTRO_DEFAULTS
|
||||
select DM
|
||||
select DM_ETH
|
||||
select DM_GPIO
|
||||
select DM_KEYBOARD
|
||||
select DM_SERIAL
|
||||
select DM_USB
|
||||
select DM_USB if DISTRO_DEFAULTS
|
||||
select OF_BOARD_SETUP
|
||||
select OF_CONTROL
|
||||
select OF_SEPARATE
|
||||
select SPL_STACK_R if SUPPORT_SPL
|
||||
select SPL_SYS_MALLOC_SIMPLE if SUPPORT_SPL
|
||||
select SYS_NS16550
|
||||
select USB
|
||||
select USB_STORAGE
|
||||
select USB_KEYBOARD
|
||||
select USB if DISTRO_DEFAULTS
|
||||
select USB_STORAGE if DISTRO_DEFAULTS
|
||||
select USB_KEYBOARD if DISTRO_DEFAULTS
|
||||
select USE_TINY_PRINTF
|
||||
|
||||
config TARGET_TS4800
|
||||
@ -761,6 +756,20 @@ config TARGET_LS1021ATWR
|
||||
select ARCH_SUPPORT_PSCI
|
||||
select LS1_DEEP_SLEEP
|
||||
|
||||
config TARGET_LS1021AIOT
|
||||
bool "Support ls1021aiot"
|
||||
select CPU_V7
|
||||
select CPU_V7_HAS_NONSEC
|
||||
select CPU_V7_HAS_VIRT
|
||||
select SUPPORT_SPL
|
||||
select ARCH_LS1021A
|
||||
select ARCH_SUPPORT_PSCI
|
||||
help
|
||||
Support for Freescale LS1021AIOT platform.
|
||||
The LS1021A Freescale board (IOT) is a high-performance
|
||||
development platform that supports the QorIQ LS1021A
|
||||
Layerscape Architecture processor.
|
||||
|
||||
config TARGET_LS1043AQDS
|
||||
bool "Support ls1043aqds"
|
||||
select ARCH_LS1043A
|
||||
@ -901,7 +910,7 @@ source "arch/arm/cpu/armv7/mx6/Kconfig"
|
||||
|
||||
source "arch/arm/cpu/armv7/mx5/Kconfig"
|
||||
|
||||
source "arch/arm/cpu/armv7/omap-common/Kconfig"
|
||||
source "arch/arm/mach-omap2/Kconfig"
|
||||
|
||||
source "arch/arm/cpu/armv8/fsl-layerscape/Kconfig"
|
||||
|
||||
@ -962,6 +971,7 @@ source "board/freescale/ls2080ardb/Kconfig"
|
||||
source "board/freescale/ls1021aqds/Kconfig"
|
||||
source "board/freescale/ls1043aqds/Kconfig"
|
||||
source "board/freescale/ls1021atwr/Kconfig"
|
||||
source "board/freescale/ls1021aiot/Kconfig"
|
||||
source "board/freescale/ls1046aqds/Kconfig"
|
||||
source "board/freescale/ls1043ardb/Kconfig"
|
||||
source "board/freescale/ls1046ardb/Kconfig"
|
||||
|
@ -63,6 +63,7 @@ machine-$(CONFIG_ARCH_MVEBU) += mvebu
|
||||
# TODO: rename CONFIG_TEGRA -> CONFIG_ARCH_TEGRA
|
||||
# TODO: rename CONFIG_ORION5X -> CONFIG_ARCH_ORION5X
|
||||
machine-$(CONFIG_ORION5X) += orion5x
|
||||
machine-$(CONFIG_ARCH_OMAP2) += omap2
|
||||
machine-$(CONFIG_ARCH_S5PC1XX) += s5pc1xx
|
||||
machine-$(CONFIG_ARCH_SUNXI) += sunxi
|
||||
machine-$(CONFIG_ARCH_SNAPDRAGON) += snapdragon
|
||||
|
@ -6,13 +6,16 @@
|
||||
#
|
||||
|
||||
ifndef CONFIG_STANDALONE_LOAD_ADDR
|
||||
ifneq ($(CONFIG_OMAP_COMMON),)
|
||||
ifneq ($(CONFIG_ARCH_OMAP2),)
|
||||
CONFIG_STANDALONE_LOAD_ADDR = 0x80300000
|
||||
else
|
||||
CONFIG_STANDALONE_LOAD_ADDR = 0xc100000
|
||||
endif
|
||||
endif
|
||||
|
||||
CFLAGS_NON_EFI := -fno-pic -ffixed-r9 -ffunction-sections -fdata-sections
|
||||
CFLAGS_EFI := -fpic -fshort-wchar
|
||||
|
||||
LDFLAGS_FINAL += --gc-sections
|
||||
PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections \
|
||||
-fno-common -ffixed-r9
|
||||
@ -148,3 +151,7 @@ ifneq ($(CONFIG_VF610),)
|
||||
ALL-y += u-boot.vyb
|
||||
endif
|
||||
endif
|
||||
|
||||
EFI_LDS := elf_arm_efi.lds
|
||||
EFI_CRT0 := crt0_arm_efi.o
|
||||
EFI_RELOC := reloc_arm_efi.o
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
#include <asm-offsets.h>
|
||||
#include <config.h>
|
||||
#include <linux/linkage.h>
|
||||
|
||||
#ifndef CONFIG_SYS_PHY_UBOOT_BASE
|
||||
#define CONFIG_SYS_PHY_UBOOT_BASE CONFIG_SYS_UBOOT_BASE
|
||||
@ -37,6 +38,11 @@
|
||||
.globl reset
|
||||
|
||||
reset:
|
||||
/* Allow the board to save important registers */
|
||||
b save_boot_params
|
||||
.globl save_boot_params_ret
|
||||
save_boot_params_ret:
|
||||
|
||||
/*
|
||||
* set the cpu to SVC32 mode
|
||||
*/
|
||||
@ -110,3 +116,7 @@ mmu_disable_phys:
|
||||
c_runtime_cpu_setup:
|
||||
|
||||
mov pc, lr
|
||||
|
||||
WEAK(save_boot_params)
|
||||
b save_boot_params_ret /* back to my caller */
|
||||
ENDPROC(save_boot_params)
|
||||
|
@ -23,14 +23,12 @@ obj-$(CONFIG_ARMV7_PSCI) += psci.o psci-common.o
|
||||
|
||||
obj-$(CONFIG_IPROC) += iproc-common/
|
||||
obj-$(CONFIG_KONA) += kona-common/
|
||||
obj-$(CONFIG_OMAP_COMMON) += omap-common/
|
||||
obj-$(CONFIG_SYS_ARCH_TIMER) += arch_timer.o
|
||||
|
||||
ifneq (,$(filter s5pc1xx exynos,$(SOC)))
|
||||
obj-y += s5p-common/
|
||||
endif
|
||||
|
||||
obj-$(if $(filter am33xx,$(SOC)),y) += am33xx/
|
||||
obj-$(if $(filter bcm235xx,$(SOC)),y) += bcm235xx/
|
||||
obj-$(if $(filter bcm281xx,$(SOC)),y) += bcm281xx/
|
||||
obj-$(if $(filter bcmcygnus,$(SOC)),y) += bcmcygnus/
|
||||
@ -39,9 +37,6 @@ obj-$(if $(filter ls102xa,$(SOC)),y) += ls102xa/
|
||||
obj-$(if $(filter mx5,$(SOC)),y) += mx5/
|
||||
obj-$(CONFIG_MX6) += mx6/
|
||||
obj-$(CONFIG_MX7) += mx7/
|
||||
obj-$(CONFIG_OMAP34XX) += omap3/
|
||||
obj-$(CONFIG_OMAP44XX) += omap4/
|
||||
obj-$(CONFIG_OMAP54XX) += omap5/
|
||||
obj-$(CONFIG_RMOBILE) += rmobile/
|
||||
obj-$(if $(filter stv0991,$(SOC)),y) += stv0991/
|
||||
obj-$(CONFIG_ARCH_SUNXI) += sunxi/
|
||||
|
@ -1,15 +0,0 @@
|
||||
#
|
||||
# Copyright 2011 Linaro Limited
|
||||
#
|
||||
# (C) Copyright 2010
|
||||
# Texas Instruments, <www.ti.com>
|
||||
#
|
||||
# Aneesh V <aneesh@ti.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
ALL-y += MLO
|
||||
else
|
||||
ALL-y += u-boot.img
|
||||
endif
|
@ -1,15 +0,0 @@
|
||||
#
|
||||
# Copyright 2011 Linaro Limited
|
||||
#
|
||||
# (C) Copyright 2010
|
||||
# Texas Instruments, <www.ti.com>
|
||||
#
|
||||
# Aneesh V <aneesh@ti.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
ALL-y += MLO
|
||||
else
|
||||
ALL-y += u-boot.img
|
||||
endif
|
@ -1,22 +0,0 @@
|
||||
#
|
||||
# Copyright 2011 Linaro Limited
|
||||
#
|
||||
# Aneesh V <annesh@ti.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
include $(srctree)/$(CPUDIR)/omap-common/config_secure.mk
|
||||
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
ifeq ($(CONFIG_TI_SECURE_DEVICE),y)
|
||||
ALL-y += u-boot-spl_HS_MLO u-boot-spl_HS_X-LOADER
|
||||
else
|
||||
ALL-y += MLO
|
||||
endif
|
||||
else
|
||||
ifeq ($(CONFIG_TI_SECURE_DEVICE),y)
|
||||
ALL-$(CONFIG_SPL_LOAD_FIT) += u-boot_HS.img
|
||||
endif
|
||||
ALL-y += u-boot.img
|
||||
endif
|
@ -28,8 +28,9 @@ config PSCI_RESET
|
||||
!TARGET_LS2080A_SIMU && !TARGET_LS2080AQDS && \
|
||||
!TARGET_LS2080ARDB && !TARGET_LS1012AQDS && \
|
||||
!TARGET_LS1012ARDB && !TARGET_LS1012AFRDM && \
|
||||
!TARGET_LS1043ARDB && !ARCH_UNIPHIER && !ARCH_SNAPDRAGON && \
|
||||
!TARGET_S32V234EVB
|
||||
!TARGET_LS1043ARDB && !TARGET_LS1043AQDS && \
|
||||
!TARGET_LS1046ARDB && !TARGET_LS1046AQDS && \
|
||||
!ARCH_UNIPHIER && !ARCH_SNAPDRAGON && !TARGET_S32V234EVB
|
||||
help
|
||||
Most armv8 systems have PSCI support enabled in EL3, either through
|
||||
ARM Trusted Firmware or other firmware.
|
||||
|
@ -8,3 +8,7 @@ PLATFORM_RELFLAGS += -fno-common -ffixed-x18
|
||||
|
||||
PF_NO_UNALIGNED := $(call cc-option, -mstrict-align)
|
||||
PLATFORM_CPPFLAGS += $(PF_NO_UNALIGNED)
|
||||
|
||||
EFI_LDS := elf_aarch64_efi.lds
|
||||
EFI_CRT0 := crt0_aarch64_efi.o
|
||||
EFI_RELOC := reloc_aarch64_efi.o
|
||||
|
@ -17,6 +17,7 @@
|
||||
#ifdef CONFIG_MP
|
||||
#include <asm/arch/mp.h>
|
||||
#endif
|
||||
#include <efi_loader.h>
|
||||
#include <fm_eth.h>
|
||||
#include <fsl-mc/fsl_mc.h>
|
||||
#ifdef CONFIG_FSL_ESDHC
|
||||
@ -190,7 +191,7 @@ void enable_caches(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline u32 initiator_type(u32 cluster, int init_id)
|
||||
u32 initiator_type(u32 cluster, int init_id)
|
||||
{
|
||||
struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
|
||||
u32 idx = (cluster >> (init_id * 8)) & TP_CLUSTER_INIT_MASK;
|
||||
@ -305,12 +306,14 @@ u32 fsl_qoriq_core_to_type(unsigned int core)
|
||||
return -1; /* cannot identify the cluster */
|
||||
}
|
||||
|
||||
#ifndef CONFIG_FSL_LSCH3
|
||||
uint get_svr(void)
|
||||
{
|
||||
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
|
||||
|
||||
return gur_in32(&gur->svr);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DISPLAY_CPUINFO
|
||||
int print_cpuinfo(void)
|
||||
@ -430,6 +433,7 @@ int timer_init(void)
|
||||
#endif
|
||||
#ifdef CONFIG_LS2080A
|
||||
u32 __iomem *pctbenr = (u32 *)FSL_PMU_PCTBENR_OFFSET;
|
||||
u32 svr_dev_id;
|
||||
#endif
|
||||
#ifdef COUNTER_FREQUENCY_REAL
|
||||
unsigned long cntfrq = COUNTER_FREQUENCY_REAL;
|
||||
@ -452,6 +456,14 @@ int timer_init(void)
|
||||
* Register (PCTBENR), which allows the watchdog to operate.
|
||||
*/
|
||||
setbits_le32(pctbenr, 0xff);
|
||||
/*
|
||||
* For LS2080A SoC and its personalities, timer controller
|
||||
* offset is different
|
||||
*/
|
||||
svr_dev_id = get_svr() >> 16;
|
||||
if (svr_dev_id == SVR_DEV_LS2080A)
|
||||
cntcr = (u32 *)SYS_FSL_LS2080A_LS2085A_TIMER_ADDR;
|
||||
|
||||
#endif
|
||||
|
||||
/* Enable clock for timer
|
||||
@ -462,9 +474,10 @@ int timer_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void reset_cpu(ulong addr)
|
||||
__efi_runtime_data u32 __iomem *rstcr = (u32 *)CONFIG_SYS_FSL_RST_ADDR;
|
||||
|
||||
void __efi_runtime reset_cpu(ulong addr)
|
||||
{
|
||||
u32 __iomem *rstcr = (u32 *)CONFIG_SYS_FSL_RST_ADDR;
|
||||
u32 val;
|
||||
|
||||
/* Raise RESET_REQ_B */
|
||||
@ -473,6 +486,33 @@ void reset_cpu(ulong addr)
|
||||
scfg_out32(rstcr, val);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_EFI_LOADER
|
||||
|
||||
void __efi_runtime EFIAPI efi_reset_system(
|
||||
enum efi_reset_type reset_type,
|
||||
efi_status_t reset_status,
|
||||
unsigned long data_size, void *reset_data)
|
||||
{
|
||||
switch (reset_type) {
|
||||
case EFI_RESET_COLD:
|
||||
case EFI_RESET_WARM:
|
||||
reset_cpu(0);
|
||||
break;
|
||||
case EFI_RESET_SHUTDOWN:
|
||||
/* Nothing we can do */
|
||||
break;
|
||||
}
|
||||
|
||||
while (1) { }
|
||||
}
|
||||
|
||||
void efi_reset_system_init(void)
|
||||
{
|
||||
efi_add_runtime_mmio(&rstcr, sizeof(*rstcr));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
phys_size_t board_reserve_ram_top(phys_size_t ram_size)
|
||||
{
|
||||
phys_size_t ram_top = ram_size;
|
||||
|
@ -5,4 +5,5 @@
|
||||
*/
|
||||
|
||||
int fsl_qoriq_core_to_cluster(unsigned int core);
|
||||
u32 initiator_type(u32 cluster, int init_id);
|
||||
u32 cpu_mask(void);
|
||||
|
42
arch/arm/cpu/armv8/fsl-layerscape/doc/README.qspi
Normal file
42
arch/arm/cpu/armv8/fsl-layerscape/doc/README.qspi
Normal file
@ -0,0 +1,42 @@
|
||||
QSPI Boot source support Overview
|
||||
-------------------
|
||||
1. LS1043A
|
||||
LS1043AQDS
|
||||
2. LS2080A
|
||||
LS2080AQDS
|
||||
3. LS1012A
|
||||
LS1012AQDS
|
||||
LS1012ARDB
|
||||
4. LS1046A
|
||||
LS1046AQDS
|
||||
LS1046ARDB
|
||||
|
||||
Booting from QSPI
|
||||
-------------------
|
||||
Booting from QSPI requires two images, RCW and u-boot-dtb.bin.
|
||||
The difference between QSPI boot RCW image and NOR boot image is the PBI
|
||||
command sequence for setting the boot location pointer. It's should point
|
||||
to the address for u-boot in QSPI flash.
|
||||
|
||||
RCW image should be written to the beginning of QSPI flash device.
|
||||
Example of using u-boot command
|
||||
|
||||
=> sf probe 0:0
|
||||
SF: Detected S25FL256S_64K with page size 256 Bytes, erase size 64 KiB, total 32 MiB
|
||||
=> sf erase 0 +<size of rcw image>
|
||||
SF: 65536 bytes @ 0x0 Erased: OK
|
||||
=> sf write <rcw image in memory> 0 <size of rcw image>
|
||||
SF: 164 bytes @ 0x0 Written: OK
|
||||
|
||||
To get the QSPI image, build u-boot with QSPI config, for example,
|
||||
<board_name>_qspi_defconfig. The image needed is u-boot-dtb.bin.
|
||||
The u-boot image should be written to 0x10000(but 0x1000 for LS1043A, LS2080A).
|
||||
|
||||
=> sf probe 0:0
|
||||
SF: Detected S25FL256S_64K with page size 256 Bytes, erase size 64 KiB, total 32 MiB
|
||||
=> sf erase 10000 +<size of u-boot image>
|
||||
SF: 589824 bytes @ 0x10000 Erased: OK
|
||||
=> sf write <u-boot image in memory> 10000 <size of u-boot image>
|
||||
SF: 580966 bytes @ 0x10000 Written: OK
|
||||
|
||||
With these two images in QSPI flash device, the board can boot from QSPI.
|
@ -4,6 +4,7 @@ SoC overview
|
||||
2. LS2080A
|
||||
3. LS1012A
|
||||
4. LS1046A
|
||||
5. LS2088A
|
||||
|
||||
LS1043A
|
||||
---------
|
||||
@ -169,3 +170,60 @@ The LS1046A SoC includes the following function and features:
|
||||
- Two DUARTs
|
||||
- Integrated flash controller (IFC) supporting NAND and NOR flash
|
||||
- QorIQ platform's trust architecture 2.1
|
||||
|
||||
LS2088A
|
||||
--------
|
||||
The LS2088A integrated multicore processor combines eight ARM Cortex-A72
|
||||
processor cores with high-performance data path acceleration logic and network
|
||||
and peripheral bus interfaces required for networking, telecom/datacom,
|
||||
wireless infrastructure, and mil/aerospace applications.
|
||||
|
||||
The LS2088A SoC includes the following function and features:
|
||||
|
||||
- Eight 64-bit ARM Cortex-A72 CPUs
|
||||
- 1 MB platform cache with ECC
|
||||
- Two 64-bit DDR4 SDRAM memory controllers with ECC and interleaving support
|
||||
- One secondary 32-bit DDR4 SDRAM memory controller, intended for use by
|
||||
the AIOP
|
||||
- Data path acceleration architecture (DPAA2) incorporating acceleration for
|
||||
the following functions:
|
||||
- Packet parsing, classification, and distribution (WRIOP)
|
||||
- Queue and Hardware buffer management for scheduling, packet sequencing, and
|
||||
congestion management, buffer allocation and de-allocation (QBMan)
|
||||
- Cryptography acceleration (SEC) at up to 10 Gbps
|
||||
- RegEx pattern matching acceleration (PME) at up to 10 Gbps
|
||||
- Decompression/compression acceleration (DCE) at up to 20 Gbps
|
||||
- Accelerated I/O processing (AIOP) at up to 20 Gbps
|
||||
- QDMA engine
|
||||
- 16 SerDes lanes at up to 10.3125 GHz
|
||||
- Ethernet interfaces
|
||||
- Up to eight 10 Gbps Ethernet MACs
|
||||
- Up to eight 1 / 2.5 Gbps Ethernet MACs
|
||||
- High-speed peripheral interfaces
|
||||
- Four PCIe 3.0 controllers, one supporting SR-IOV
|
||||
- Additional peripheral interfaces
|
||||
- Two serial ATA (SATA 3.0) controllers
|
||||
- Two high-speed USB 3.0 controllers with integrated PHY
|
||||
- Enhanced secure digital host controller (eSDXC/eMMC)
|
||||
- Serial peripheral interface (SPI) controller
|
||||
- Quad Serial Peripheral Interface (QSPI) Controller
|
||||
- Four I2C controllers
|
||||
- Two DUARTs
|
||||
- Integrated flash controller (IFC 2.0) supporting NAND and NOR flash
|
||||
- Support for hardware virtualization and partitioning enforcement
|
||||
- QorIQ platform's trust architecture 3.0
|
||||
- Service processor (SP) provides pre-boot initialization and secure-boot
|
||||
capabilities
|
||||
|
||||
LS2088A SoC has 3 more similar SoC personalities
|
||||
1)LS2048A, few difference w.r.t. LS2088A:
|
||||
a) Four 64-bit ARM v8 Cortex-A72 CPUs
|
||||
|
||||
2)LS2084A, few difference w.r.t. LS2088A:
|
||||
a) No AIOP
|
||||
b) No 32-bit DDR3 SDRAM memory
|
||||
c) 5 * 1/10G + 5 *1G WRIOP
|
||||
d) No L2 switch
|
||||
|
||||
3)LS2044A, few difference w.r.t. LS2084A:
|
||||
a) Four 64-bit ARM v8 Cortex-A72 CPUs
|
||||
|
@ -5,6 +5,7 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <efi_loader.h>
|
||||
#include <libfdt.h>
|
||||
#include <fdt_support.h>
|
||||
#include <phy.h>
|
||||
@ -105,6 +106,11 @@ remove_psci_node:
|
||||
|
||||
fdt_add_mem_rsv(blob, (uintptr_t)&secondary_boot_code,
|
||||
*boot_code_size);
|
||||
#if defined(CONFIG_EFI_LOADER) && !defined(CONFIG_SPL_BUILD)
|
||||
efi_add_memory_map((uintptr_t)&secondary_boot_code,
|
||||
ALIGN(*boot_code_size, EFI_PAGE_SIZE) >> EFI_PAGE_SHIFT,
|
||||
EFI_RESERVED_MEMORY_TYPE, false);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -13,6 +13,11 @@
|
||||
#ifdef CONFIG_MP
|
||||
#include <asm/arch/mp.h>
|
||||
#endif
|
||||
#ifdef CONFIG_FSL_LSCH3
|
||||
#include <asm/arch-fsl-layerscape/immap_lsch3.h>
|
||||
#include <asm/arch-fsl-layerscape/soc.h>
|
||||
#endif
|
||||
#include <asm/u-boot.h>
|
||||
|
||||
ENTRY(lowlevel_init)
|
||||
mov x29, lr /* Save LR */
|
||||
@ -137,6 +142,16 @@ ENTRY(lowlevel_init)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FSL_TZASC_400
|
||||
/*
|
||||
* LS2080 and its personalities does not support TZASC
|
||||
* So skip TZASC related operations
|
||||
*/
|
||||
bl get_svr
|
||||
lsr w0, w0, #16
|
||||
ldr w1, =SVR_DEV_LS2080A
|
||||
cmp w0, w1
|
||||
b.eq 1f
|
||||
|
||||
/* Set TZASC so that:
|
||||
* a. We use only Region0 whose global secure write/read is EN
|
||||
* b. We use only Region0 whose NSAID write/read is EN
|
||||
@ -145,26 +160,26 @@ ENTRY(lowlevel_init)
|
||||
* placeholders.
|
||||
*/
|
||||
ldr x1, =TZASC_GATE_KEEPER(0)
|
||||
ldr x0, [x1] /* Filter 0 Gate Keeper Register */
|
||||
orr x0, x0, #1 << 0 /* Set open_request for Filter 0 */
|
||||
str x0, [x1]
|
||||
ldr w0, [x1] /* Filter 0 Gate Keeper Register */
|
||||
orr w0, w0, #1 << 0 /* Set open_request for Filter 0 */
|
||||
str w0, [x1]
|
||||
|
||||
ldr x1, =TZASC_GATE_KEEPER(1)
|
||||
ldr x0, [x1] /* Filter 0 Gate Keeper Register */
|
||||
orr x0, x0, #1 << 0 /* Set open_request for Filter 0 */
|
||||
str x0, [x1]
|
||||
ldr w0, [x1] /* Filter 0 Gate Keeper Register */
|
||||
orr w0, w0, #1 << 0 /* Set open_request for Filter 0 */
|
||||
str w0, [x1]
|
||||
|
||||
ldr x1, =TZASC_REGION_ATTRIBUTES_0(0)
|
||||
ldr x0, [x1] /* Region-0 Attributes Register */
|
||||
orr x0, x0, #1 << 31 /* Set Sec global write en, Bit[31] */
|
||||
orr x0, x0, #1 << 30 /* Set Sec global read en, Bit[30] */
|
||||
str x0, [x1]
|
||||
ldr w0, [x1] /* Region-0 Attributes Register */
|
||||
orr w0, w0, #1 << 31 /* Set Sec global write en, Bit[31] */
|
||||
orr w0, w0, #1 << 30 /* Set Sec global read en, Bit[30] */
|
||||
str w0, [x1]
|
||||
|
||||
ldr x1, =TZASC_REGION_ATTRIBUTES_0(1)
|
||||
ldr x0, [x1] /* Region-1 Attributes Register */
|
||||
orr x0, x0, #1 << 31 /* Set Sec global write en, Bit[31] */
|
||||
orr x0, x0, #1 << 30 /* Set Sec global read en, Bit[30] */
|
||||
str x0, [x1]
|
||||
ldr w0, [x1] /* Region-1 Attributes Register */
|
||||
orr w0, w0, #1 << 31 /* Set Sec global write en, Bit[31] */
|
||||
orr w0, w0, #1 << 30 /* Set Sec global read en, Bit[30] */
|
||||
str w0, [x1]
|
||||
|
||||
ldr x1, =TZASC_REGION_ID_ACCESS_0(0)
|
||||
ldr w0, [x1] /* Region-0 Access Register */
|
||||
@ -179,7 +194,7 @@ ENTRY(lowlevel_init)
|
||||
isb
|
||||
dsb sy
|
||||
#endif
|
||||
|
||||
1:
|
||||
#ifdef CONFIG_ARCH_LS1046A
|
||||
/* Initialize the L2 RAM latency */
|
||||
mrs x1, S3_1_c11_c0_2
|
||||
@ -199,6 +214,12 @@ ENTRY(lowlevel_init)
|
||||
ENDPROC(lowlevel_init)
|
||||
|
||||
#ifdef CONFIG_FSL_LSCH3
|
||||
.globl get_svr
|
||||
get_svr:
|
||||
ldr x1, =FSL_LSCH3_SVR
|
||||
ldr w0, [x1]
|
||||
ret
|
||||
|
||||
hnf_pstate_poll:
|
||||
/* x0 has the desired status, return 0 for success, 1 for timeout
|
||||
* clobber x1, x2, x3, x4, x6, x7
|
||||
@ -339,11 +360,6 @@ ENTRY(secondary_boot_func)
|
||||
gic_wait_for_interrupt_m x0, w1
|
||||
#endif
|
||||
|
||||
bl secondary_switch_to_el2
|
||||
#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
|
||||
bl secondary_switch_to_el1
|
||||
#endif
|
||||
|
||||
slave_cpu:
|
||||
wfe
|
||||
ldr x0, [x11]
|
||||
@ -356,19 +372,64 @@ slave_cpu:
|
||||
tbz x1, #25, cpu_is_le
|
||||
rev x0, x0 /* BE to LE conversion */
|
||||
cpu_is_le:
|
||||
br x0 /* branch to the given address */
|
||||
ldr x5, [x11, #24]
|
||||
ldr x6, =IH_ARCH_DEFAULT
|
||||
cmp x6, x5
|
||||
b.eq 1f
|
||||
|
||||
#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
|
||||
adr x3, secondary_switch_to_el1
|
||||
ldr x4, =ES_TO_AARCH64
|
||||
#else
|
||||
ldr x3, [x11]
|
||||
ldr x4, =ES_TO_AARCH32
|
||||
#endif
|
||||
bl secondary_switch_to_el2
|
||||
|
||||
1:
|
||||
#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
|
||||
adr x3, secondary_switch_to_el1
|
||||
#else
|
||||
ldr x3, [x11]
|
||||
#endif
|
||||
ldr x4, =ES_TO_AARCH64
|
||||
bl secondary_switch_to_el2
|
||||
|
||||
ENDPROC(secondary_boot_func)
|
||||
|
||||
ENTRY(secondary_switch_to_el2)
|
||||
switch_el x0, 1f, 0f, 0f
|
||||
switch_el x5, 1f, 0f, 0f
|
||||
0: ret
|
||||
1: armv8_switch_to_el2_m x0
|
||||
1: armv8_switch_to_el2_m x3, x4, x5
|
||||
ENDPROC(secondary_switch_to_el2)
|
||||
|
||||
ENTRY(secondary_switch_to_el1)
|
||||
switch_el x0, 0f, 1f, 0f
|
||||
mrs x0, mpidr_el1
|
||||
ubfm x1, x0, #8, #15
|
||||
ubfm x2, x0, #0, #1
|
||||
orr x10, x2, x1, lsl #2 /* x10 has LPID */
|
||||
|
||||
lsl x1, x10, #6
|
||||
ldr x0, =__spin_table
|
||||
/* physical address of this cpus spin table element */
|
||||
add x11, x1, x0
|
||||
|
||||
ldr x3, [x11]
|
||||
|
||||
ldr x5, [x11, #24]
|
||||
ldr x6, =IH_ARCH_DEFAULT
|
||||
cmp x6, x5
|
||||
b.eq 2f
|
||||
|
||||
ldr x4, =ES_TO_AARCH32
|
||||
bl switch_to_el1
|
||||
|
||||
2: ldr x4, =ES_TO_AARCH64
|
||||
|
||||
switch_to_el1:
|
||||
switch_el x5, 0f, 1f, 0f
|
||||
0: ret
|
||||
1: armv8_switch_to_el1_m x0, x1
|
||||
1: armv8_switch_to_el1_m x3, x4, x5
|
||||
ENDPROC(secondary_switch_to_el1)
|
||||
|
||||
/* Ensure that the literals used by the secondary boot code are
|
||||
|
@ -34,6 +34,11 @@ static struct serdes_config serdes1_cfg_tbl[] = {
|
||||
{0x33, {PCIE2, PCIE2, PCIE2, PCIE2, QSGMII_D, QSGMII_C, QSGMII_B,
|
||||
QSGMII_A} },
|
||||
{0x35, {QSGMII_D, QSGMII_C, QSGMII_B, PCIE2, XFI4, XFI3, XFI2, XFI1 } },
|
||||
{0x39, {SGMII8, SGMII7, SGMII6, PCIE2, SGMII4, SGMII3, SGMII2,
|
||||
PCIE1 } },
|
||||
{0x4B, {PCIE2, PCIE2, PCIE2, PCIE2, XFI4, XFI3, XFI2, XFI1 } },
|
||||
{0x4C, {XFI8, XFI7, XFI6, XFI5, PCIE1, PCIE1, PCIE1, PCIE1 } },
|
||||
{0x4D, {SGMII8, SGMII7, PCIE2, PCIE2, SGMII4, SGMII3, PCIE1, PCIE1 } },
|
||||
{}
|
||||
};
|
||||
static struct serdes_config serdes2_cfg_tbl[] = {
|
||||
@ -64,6 +69,7 @@ static struct serdes_config serdes2_cfg_tbl[] = {
|
||||
SATA2 } },
|
||||
{0x4A, {SGMII9, SGMII10, SGMII11, SGMII12, PCIE4, PCIE4, SATA1,
|
||||
SATA2 } },
|
||||
{0x57, {PCIE3, PCIE3, PCIE3, PCIE3, PCIE4, PCIE4, SGMII15, SGMII16 } },
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -9,6 +9,8 @@
|
||||
#include <asm/system.h>
|
||||
#include <asm/arch/mp.h>
|
||||
#include <asm/arch/soc.h>
|
||||
#include "cpu.h"
|
||||
#include <asm/arch-fsl-layerscape/soc.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
@ -22,11 +24,49 @@ phys_addr_t determine_mp_bootpg(void)
|
||||
return (phys_addr_t)&secondary_boot_code;
|
||||
}
|
||||
|
||||
void update_os_arch_secondary_cores(uint8_t os_arch)
|
||||
{
|
||||
u64 *table = get_spin_tbl_addr();
|
||||
int i;
|
||||
|
||||
for (i = 1; i < CONFIG_MAX_CPUS; i++)
|
||||
table[i * WORDS_PER_SPIN_TABLE_ENTRY +
|
||||
SPIN_TABLE_ELEM_OS_ARCH_IDX] = os_arch;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_FSL_LSCH3
|
||||
void wake_secondary_core_n(int cluster, int core, int cluster_cores)
|
||||
{
|
||||
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
|
||||
struct ccsr_reset __iomem *rst = (void *)(CONFIG_SYS_FSL_RST_ADDR);
|
||||
u32 mpidr = 0;
|
||||
|
||||
mpidr = ((cluster << 8) | core);
|
||||
/*
|
||||
* mpidr_el1 register value of core which needs to be released
|
||||
* is written to scratchrw[6] register
|
||||
*/
|
||||
gur_out32(&gur->scratchrw[6], mpidr);
|
||||
asm volatile("dsb st" : : : "memory");
|
||||
rst->brrl |= 1 << ((cluster * cluster_cores) + core);
|
||||
asm volatile("dsb st" : : : "memory");
|
||||
/*
|
||||
* scratchrw[6] register value is polled
|
||||
* when the value becomes zero, this means that this core is up
|
||||
* and running, next core can be released now
|
||||
*/
|
||||
while (gur_in32(&gur->scratchrw[6]) != 0)
|
||||
;
|
||||
}
|
||||
#endif
|
||||
|
||||
int fsl_layerscape_wake_seconday_cores(void)
|
||||
{
|
||||
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
|
||||
#ifdef CONFIG_FSL_LSCH3
|
||||
struct ccsr_reset __iomem *rst = (void *)(CONFIG_SYS_FSL_RST_ADDR);
|
||||
u32 svr, ver, cluster, type;
|
||||
int j = 0, cluster_cores = 0;
|
||||
#elif defined(CONFIG_FSL_LSCH2)
|
||||
struct ccsr_scfg __iomem *scfg = (void *)(CONFIG_SYS_FSL_SCFG_ADDR);
|
||||
#endif
|
||||
@ -55,10 +95,40 @@ int fsl_layerscape_wake_seconday_cores(void)
|
||||
#ifdef CONFIG_FSL_LSCH3
|
||||
gur_out32(&gur->bootlocptrh, (u32)(gd->relocaddr >> 32));
|
||||
gur_out32(&gur->bootlocptrl, (u32)gd->relocaddr);
|
||||
gur_out32(&gur->scratchrw[6], 1);
|
||||
asm volatile("dsb st" : : : "memory");
|
||||
rst->brrl = cores;
|
||||
asm volatile("dsb st" : : : "memory");
|
||||
|
||||
svr = gur_in32(&gur->svr);
|
||||
ver = SVR_SOC_VER(svr);
|
||||
if (ver == SVR_LS2080A || ver == SVR_LS2085A) {
|
||||
gur_out32(&gur->scratchrw[6], 1);
|
||||
asm volatile("dsb st" : : : "memory");
|
||||
rst->brrl = cores;
|
||||
asm volatile("dsb st" : : : "memory");
|
||||
} else {
|
||||
/*
|
||||
* Release the cores out of reset one-at-a-time to avoid
|
||||
* power spikes
|
||||
*/
|
||||
i = 0;
|
||||
cluster = in_le32(&gur->tp_cluster[i].lower);
|
||||
for (j = 0; j < TP_INIT_PER_CLUSTER; j++) {
|
||||
type = initiator_type(cluster, j);
|
||||
if (type &&
|
||||
TP_ITYP_TYPE(type) == TP_ITYP_TYPE_ARM)
|
||||
cluster_cores++;
|
||||
}
|
||||
|
||||
do {
|
||||
cluster = in_le32(&gur->tp_cluster[i].lower);
|
||||
for (j = 0; j < TP_INIT_PER_CLUSTER; j++) {
|
||||
type = initiator_type(cluster, j);
|
||||
if (type &&
|
||||
TP_ITYP_TYPE(type) == TP_ITYP_TYPE_ARM)
|
||||
wake_secondary_core_n(i, j,
|
||||
cluster_cores);
|
||||
}
|
||||
i++;
|
||||
} while ((cluster & TP_CLUSTER_EOC) != TP_CLUSTER_EOC);
|
||||
}
|
||||
#elif defined(CONFIG_FSL_LSCH2)
|
||||
scfg_out32(&scfg->scratchrw[0], (u32)(gd->relocaddr >> 32));
|
||||
scfg_out32(&scfg->scratchrw[1], (u32)gd->relocaddr);
|
||||
|
@ -31,8 +31,10 @@ bool soc_has_dp_ddr(void)
|
||||
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
|
||||
u32 svr = gur_in32(&gur->svr);
|
||||
|
||||
/* LS2085A has DP_DDR */
|
||||
if (SVR_SOC_VER(svr) == SVR_LS2085A)
|
||||
/* LS2085A, LS2088A, LS2048A has DP_DDR */
|
||||
if ((SVR_SOC_VER(svr) == SVR_LS2085A) ||
|
||||
(SVR_SOC_VER(svr) == SVR_LS2088A) ||
|
||||
(SVR_SOC_VER(svr) == SVR_LS2048A))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
@ -50,16 +52,16 @@ bool soc_has_aiop(void)
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_LS2080A
|
||||
#if defined(CONFIG_FSL_LSCH3)
|
||||
/*
|
||||
* This erratum requires setting a value to eddrtqcr1 to
|
||||
* optimal the DDR performance.
|
||||
*/
|
||||
static void erratum_a008336(void)
|
||||
{
|
||||
#ifdef CONFIG_SYS_FSL_ERRATUM_A008336
|
||||
u32 *eddrtqcr1;
|
||||
|
||||
#ifdef CONFIG_SYS_FSL_ERRATUM_A008336
|
||||
#ifdef CONFIG_SYS_FSL_DCSR_DDR_ADDR
|
||||
eddrtqcr1 = (void *)CONFIG_SYS_FSL_DCSR_DDR_ADDR + 0x800;
|
||||
if (fsl_ddr_get_version(0) == 0x50200)
|
||||
@ -79,9 +81,9 @@ static void erratum_a008336(void)
|
||||
*/
|
||||
static void erratum_a008514(void)
|
||||
{
|
||||
#ifdef CONFIG_SYS_FSL_ERRATUM_A008514
|
||||
u32 *eddrtqcr1;
|
||||
|
||||
#ifdef CONFIG_SYS_FSL_ERRATUM_A008514
|
||||
#ifdef CONFIG_SYS_FSL_DCSR_DDR3_ADDR
|
||||
eddrtqcr1 = (void *)CONFIG_SYS_FSL_DCSR_DDR3_ADDR + 0x800;
|
||||
out_le32(eddrtqcr1, 0x63b20002);
|
||||
@ -176,6 +178,7 @@ static void erratum_a009203(void)
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void bypass_smmu(void)
|
||||
{
|
||||
u32 val;
|
||||
|
@ -50,4 +50,27 @@ ENTRY(_sec_firmware_support_psci_version)
|
||||
smc #0
|
||||
ret
|
||||
ENDPROC(_sec_firmware_support_psci_version)
|
||||
|
||||
/*
|
||||
* Switch from AArch64 EL2 to AArch32 EL2
|
||||
* @param inputs:
|
||||
* x0: argument, zero
|
||||
* x1: machine nr
|
||||
* x2: fdt address
|
||||
* x3: kernel entry point
|
||||
* @param outputs for secure firmware:
|
||||
* x0: function id
|
||||
* x1: kernel entry point
|
||||
* x2: machine nr
|
||||
* x3: fdt address
|
||||
*/
|
||||
ENTRY(armv8_el2_to_aarch32)
|
||||
mov x0, x3
|
||||
mov x3, x2
|
||||
mov x2, x1
|
||||
mov x1, x0
|
||||
ldr x0, =0xc000ff04
|
||||
smc #0
|
||||
ret
|
||||
ENDPROC(armv8_el2_to_aarch32)
|
||||
#endif
|
||||
|
@ -251,9 +251,17 @@ WEAK(lowlevel_init)
|
||||
/*
|
||||
* All slaves will enter EL2 and optionally EL1.
|
||||
*/
|
||||
adr x3, lowlevel_in_el2
|
||||
ldr x4, =ES_TO_AARCH64
|
||||
bl armv8_switch_to_el2
|
||||
|
||||
lowlevel_in_el2:
|
||||
#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
|
||||
adr x3, lowlevel_in_el1
|
||||
ldr x4, =ES_TO_AARCH64
|
||||
bl armv8_switch_to_el1
|
||||
|
||||
lowlevel_in_el1:
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_ARMV8_MULTIENTRY */
|
||||
|
@ -11,13 +11,36 @@
|
||||
#include <asm/macro.h>
|
||||
|
||||
ENTRY(armv8_switch_to_el2)
|
||||
switch_el x0, 1f, 0f, 0f
|
||||
0: ret
|
||||
1: armv8_switch_to_el2_m x0
|
||||
switch_el x5, 1f, 0f, 0f
|
||||
0:
|
||||
cmp x4, #ES_TO_AARCH64
|
||||
b.eq 2f
|
||||
/*
|
||||
* When loading 32-bit kernel, it will jump
|
||||
* to secure firmware again, and never return.
|
||||
*/
|
||||
bl armv8_el2_to_aarch32
|
||||
2:
|
||||
/*
|
||||
* x3 is kernel entry point or switch_to_el1
|
||||
* if CONFIG_ARMV8_SWITCH_TO_EL1 is defined.
|
||||
* When running in EL2 now, jump to the
|
||||
* address saved in x3.
|
||||
*/
|
||||
br x3
|
||||
1: armv8_switch_to_el2_m x3, x4, x5
|
||||
ENDPROC(armv8_switch_to_el2)
|
||||
|
||||
ENTRY(armv8_switch_to_el1)
|
||||
switch_el x0, 0f, 1f, 0f
|
||||
0: ret
|
||||
1: armv8_switch_to_el1_m x0, x1
|
||||
switch_el x5, 0f, 1f, 0f
|
||||
0:
|
||||
/* x3 is kernel entry point. When running in EL1
|
||||
* now, jump to the address saved in x3.
|
||||
*/
|
||||
br x3
|
||||
1: armv8_switch_to_el1_m x3, x4, x5
|
||||
ENDPROC(armv8_switch_to_el1)
|
||||
|
||||
WEAK(armv8_el2_to_aarch32)
|
||||
ret
|
||||
ENDPROC(armv8_el2_to_aarch32)
|
||||
|
@ -41,6 +41,13 @@ config SYS_CONFIG_NAME
|
||||
Based on this option include/configs/<CONFIG_SYS_CONFIG_NAME>.h header
|
||||
will be used for board configuration.
|
||||
|
||||
config BOOT_INIT_FILE
|
||||
string "boot.bin init register filename"
|
||||
default ""
|
||||
help
|
||||
Add register writes to boot.bin format (max 256 pairs).
|
||||
Expect a table of register-value pairs, e.g. "0x12345678 0x4321"
|
||||
|
||||
config ZYNQMP_USB
|
||||
bool "Configure ZynqMP USB"
|
||||
|
||||
|
@ -69,12 +69,14 @@ u32 spl_boot_device(void)
|
||||
|
||||
#if defined(CONFIG_SPL_ZYNQMP_ALT_BOOTMODE_ENABLED)
|
||||
/* Change default boot mode at run-time */
|
||||
writel(BOOT_MODE_USE_ALT |
|
||||
CONFIG_SPL_ZYNQMP_ALT_BOOTMODE << BOOT_MODE_ALT_SHIFT,
|
||||
writel(CONFIG_SPL_ZYNQMP_ALT_BOOTMODE << BOOT_MODE_ALT_SHIFT,
|
||||
&crlapb_base->boot_mode);
|
||||
#endif
|
||||
|
||||
reg = readl(&crlapb_base->boot_mode);
|
||||
if (reg >> BOOT_MODE_ALT_SHIFT)
|
||||
reg >>= BOOT_MODE_ALT_SHIFT;
|
||||
|
||||
bootmode = reg & BOOT_MODES_MASK;
|
||||
|
||||
switch (bootmode) {
|
||||
|
@ -28,14 +28,16 @@ dtb-$(CONFIG_EXYNOS5) += exynos5250-arndale.dtb \
|
||||
exynos5422-odroidxu3.dtb
|
||||
dtb-$(CONFIG_EXYNOS7420) += exynos7420-espresso7420.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += \
|
||||
rk3036-sdk.dtb \
|
||||
rk3288-firefly.dtb \
|
||||
rk3288-jerry.dtb \
|
||||
rk3288-veyron-jerry.dtb \
|
||||
rk3288-veyron-mickey.dtb \
|
||||
rk3288-veyron-minnie.dtb \
|
||||
rk3288-rock2-square.dtb \
|
||||
rk3288-evb.dtb \
|
||||
rk3288-fennec.dtb \
|
||||
rk3288-miniarm.dtb \
|
||||
rk3288-popmetal.dtb \
|
||||
rk3036-sdk.dtb \
|
||||
rk3399-evb.dtb
|
||||
dtb-$(CONFIG_ARCH_MESON) += \
|
||||
meson-gxbb-odroidc2.dtb
|
||||
@ -97,6 +99,8 @@ dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb \
|
||||
zynq-zybo.dtb \
|
||||
zynq-microzed.dtb \
|
||||
zynq-picozed.dtb \
|
||||
zynq-topic-miami.dtb \
|
||||
zynq-topic-miamiplus.dtb \
|
||||
zynq-zc770-xm010.dtb \
|
||||
zynq-zc770-xm011.dtb \
|
||||
zynq-zc770-xm012.dtb \
|
||||
@ -141,13 +145,15 @@ dtb-$(CONFIG_TARGET_STV0991) += stv0991.dtb
|
||||
|
||||
dtb-$(CONFIG_LS102XA) += ls1021a-qds-duart.dtb \
|
||||
ls1021a-qds-lpuart.dtb \
|
||||
ls1021a-twr-duart.dtb ls1021a-twr-lpuart.dtb
|
||||
ls1021a-twr-duart.dtb ls1021a-twr-lpuart.dtb \
|
||||
ls1021a-iot-duart.dtb
|
||||
dtb-$(CONFIG_FSL_LSCH3) += fsl-ls2080a-qds.dtb \
|
||||
fsl-ls2080a-rdb.dtb
|
||||
dtb-$(CONFIG_FSL_LSCH2) += fsl-ls1043a-qds-duart.dtb \
|
||||
fsl-ls1043a-qds-lpuart.dtb \
|
||||
fsl-ls1043a-rdb.dtb \
|
||||
fsl-ls1046a-qds-duart.dtb \
|
||||
fsl-ls1046a-qds-lpuart.dtb \
|
||||
fsl-ls1046a-rdb.dtb \
|
||||
fsl-ls1012a-qds.dtb \
|
||||
fsl-ls1012a-rdb.dtb \
|
||||
@ -254,6 +260,7 @@ dtb-$(CONFIG_MACH_SUN8I_A33) += \
|
||||
sun8i-a33-olinuxino.dtb \
|
||||
sun8i-a33-q8-tablet.dtb \
|
||||
sun8i-a33-sinlinx-sina33.dtb \
|
||||
sun8i-r16-nintendo-nes-classic-edition.dtb \
|
||||
sun8i-r16-parrot.dtb
|
||||
dtb-$(CONFIG_MACH_SUN8I_A83T) += \
|
||||
sun8i-a83t-allwinner-h8homlet-v2.dtb \
|
||||
|
16
arch/arm/dts/fsl-ls1046a-qds-lpuart.dts
Normal file
16
arch/arm/dts/fsl-ls1046a-qds-lpuart.dts
Normal file
@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Device Tree file for Freescale Layerscape-1046A family SoC.
|
||||
*
|
||||
* Copyright (C) 2016, Freescale Semiconductor
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "fsl-ls1046a-qds.dtsi"
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
stdout-path = &lpuart0;
|
||||
};
|
||||
};
|
@ -75,3 +75,7 @@
|
||||
&duart1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&lpuart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -151,6 +151,60 @@
|
||||
clocks = <&clockgen 4 0>;
|
||||
};
|
||||
|
||||
lpuart0: serial@2950000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x2950000 0x0 0x1000>;
|
||||
interrupts = <0 48 0x4>;
|
||||
clocks = <&clockgen 4 0>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart1: serial@2960000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x2960000 0x0 0x1000>;
|
||||
interrupts = <0 49 0x4>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart2: serial@2970000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x2970000 0x0 0x1000>;
|
||||
interrupts = <0 50 0x4>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart3: serial@2980000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x2980000 0x0 0x1000>;
|
||||
interrupts = <0 51 0x4>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart4: serial@2990000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x2990000 0x0 0x1000>;
|
||||
interrupts = <0 52 0x4>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart5: serial@29a0000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x29a0000 0x0 0x1000>;
|
||||
interrupts = <0 53 0x4>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
qspi: quadspi@1550000 {
|
||||
compatible = "fsl,vf610-qspi";
|
||||
#address-cells = <1>;
|
||||
|
16
arch/arm/dts/ls1021a-iot-duart.dts
Normal file
16
arch/arm/dts/ls1021a-iot-duart.dts
Normal file
@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Freescale ls1021a IOT board device tree source
|
||||
*
|
||||
* Copyright 2016 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "ls1021a-iot.dtsi"
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
stdout-path = &uart0;
|
||||
};
|
||||
};
|
103
arch/arm/dts/ls1021a-iot.dtsi
Normal file
103
arch/arm/dts/ls1021a-iot.dtsi
Normal file
@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Freescale ls1021a IOT board device tree source
|
||||
*
|
||||
* Copyright 2016 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
|
||||
#include "ls1021a.dtsi"
|
||||
|
||||
/ {
|
||||
model = "LS1021A IOT Board";
|
||||
|
||||
aliases {
|
||||
enet2_rgmii_phy = &rgmii_phy1;
|
||||
enet0_sgmii_phy = &sgmii_phy2;
|
||||
enet1_sgmii_phy = &sgmii_phy0;
|
||||
spi0 = &qspi;
|
||||
spi1 = &dspi1;
|
||||
};
|
||||
};
|
||||
|
||||
&qspi {
|
||||
bus-num = <0>;
|
||||
status = "okay";
|
||||
|
||||
qflash0: n25q128a13@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "spi-flash";
|
||||
spi-max-frequency = <20000000>;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&dspi1 {
|
||||
bus-num = <0>;
|
||||
status = "okay";
|
||||
|
||||
dspiflash: at26df081a@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "spi-flash";
|
||||
spi-max-frequency = <16000000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ifc {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
/* NOR Flash on board */
|
||||
ranges = <0x0 0x0 0x60000000 0x08000000>;
|
||||
status = "okay";
|
||||
|
||||
nor@0,0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "cfi-flash";
|
||||
reg = <0x0 0x0 0x8000000>;
|
||||
bank-width = <2>;
|
||||
device-width = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
&lpuart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&mdio0 {
|
||||
sgmii_phy0: ethernet-phy@0 {
|
||||
reg = <0x0>;
|
||||
};
|
||||
rgmii_phy1: ethernet-phy@1 {
|
||||
reg = <0x1>;
|
||||
};
|
||||
sgmii_phy2: ethernet-phy@2 {
|
||||
reg = <0x2>;
|
||||
};
|
||||
tbi1: tbi-phy@1f {
|
||||
reg = <0x1f>;
|
||||
device_type = "tbi-phy";
|
||||
};
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
status = "okay";
|
||||
};
|
@ -16,10 +16,25 @@
|
||||
stdout-path = &uart2;
|
||||
};
|
||||
|
||||
usb_control {
|
||||
compatible = "rockchip,rk3036-usb-control";
|
||||
host_drv_gpio = <&gpio2 23 GPIO_ACTIVE_LOW>;
|
||||
otg_drv_gpio = <&gpio0 26 GPIO_ACTIVE_LOW>;
|
||||
vcc5v0_otg: vcc5v0-otg-drv {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc5v0_otg";
|
||||
gpio = <&gpio0 26 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&otg_vbus_drv>;
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
};
|
||||
|
||||
vcc5v0_host: vcc5v0-host-drv {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc5v0_host";
|
||||
gpio = <&gpio2 23 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&host_vbus_drv>;
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
|
||||
@ -42,3 +57,17 @@
|
||||
&usb_otg {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
usb_otg {
|
||||
otg_vbus_drv: host-vbus-drv {
|
||||
rockchip,pins = <0 26 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
||||
usb_host {
|
||||
host_vbus_drv: host-vbus-drv {
|
||||
rockchip,pins = <2 23 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -13,6 +13,8 @@
|
||||
/ {
|
||||
aliases {
|
||||
i2c20 = &i2c_tunnel;
|
||||
video0 = &vopl;
|
||||
video1 = &vopb;
|
||||
};
|
||||
|
||||
gpio_keys: gpio-keys {
|
||||
|
@ -55,6 +55,17 @@
|
||||
};
|
||||
};
|
||||
|
||||
&dmc {
|
||||
rockchip,pctl-timing = <0x29a 0xc8 0x1f4 0x42 0x4e 0x4 0xea 0xa
|
||||
0x5 0x0 0xa 0x7 0x19 0x24 0xa 0x7
|
||||
0x5 0xa 0x5 0x200 0x5 0x10 0x40 0x0
|
||||
0x1 0x7 0x7 0x4 0xc 0x43 0x100 0x0
|
||||
0x5 0x0>;
|
||||
rockchip,phy-timing = <0x48f9aab4 0xea0910 0x1002c200
|
||||
0xa60 0x40 0x10 0x0>;
|
||||
rockchip,sdram-params = <0x30B25564 0x627 3 666000000 3 9 1>;
|
||||
};
|
||||
|
||||
&gpio_keys {
|
||||
power {
|
||||
gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
|
||||
@ -108,11 +119,6 @@
|
||||
pinctrl-0 = <&vcc50_hdmi_en>;
|
||||
};
|
||||
|
||||
&vopb {
|
||||
/* Disable this so that we use vopl */
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&edp {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&edp_hpd>;
|
277
arch/arm/dts/rk3288-veyron-mickey.dts
Normal file
277
arch/arm/dts/rk3288-veyron-mickey.dts
Normal file
@ -0,0 +1,277 @@
|
||||
/*
|
||||
* Google Veyron Mickey Rev 0 board device tree source
|
||||
*
|
||||
* Copyright 2015 Google, Inc
|
||||
*
|
||||
* This file is dual-licensed: you can use it either under the terms
|
||||
* of the GPL or the X11 license, at your option. Note that this dual
|
||||
* licensing only applies to this file, and not this project as a
|
||||
* whole.
|
||||
*
|
||||
* a) This file is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* Or, alternatively,
|
||||
*
|
||||
* b) Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "rk3288-veyron-chromebook.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Google Mickey";
|
||||
compatible = "google,veyron-mickey-rev8", "google,veyron-mickey-rev7",
|
||||
"google,veyron-mickey-rev6", "google,veyron-mickey-rev5",
|
||||
"google,veyron-mickey-rev4", "google,veyron-mickey-rev3",
|
||||
"google,veyron-mickey-rev2", "google,veyron-mickey-rev1",
|
||||
"google,veyron-mickey-rev0", "google,veyron-mickey",
|
||||
"google,veyron", "rockchip,rk3288";
|
||||
|
||||
vcc_5v: vcc-5v {
|
||||
vin-supply = <&vcc33_sys>;
|
||||
};
|
||||
|
||||
vcc33_io: vcc33_io {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc33_io";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
vin-supply = <&vcc33_sys>;
|
||||
};
|
||||
};
|
||||
|
||||
&cpu_thermal {
|
||||
/delete-node/ trips;
|
||||
/delete-node/ cooling-maps;
|
||||
|
||||
trips {
|
||||
cpu_alert_almost_warm: cpu_alert_almost_warm {
|
||||
temperature = <63000>; /* millicelsius */
|
||||
hysteresis = <2000>; /* millicelsius */
|
||||
type = "passive";
|
||||
};
|
||||
cpu_alert_warm: cpu_alert_warm {
|
||||
temperature = <65000>; /* millicelsius */
|
||||
hysteresis = <2000>; /* millicelsius */
|
||||
type = "passive";
|
||||
};
|
||||
cpu_alert_almost_hot: cpu_alert_almost_hot {
|
||||
temperature = <80000>; /* millicelsius */
|
||||
hysteresis = <2000>; /* millicelsius */
|
||||
type = "passive";
|
||||
};
|
||||
cpu_alert_hot: cpu_alert_hot {
|
||||
temperature = <82000>; /* millicelsius */
|
||||
hysteresis = <2000>; /* millicelsius */
|
||||
type = "passive";
|
||||
};
|
||||
cpu_alert_hotter: cpu_alert_hotter {
|
||||
temperature = <84000>; /* millicelsius */
|
||||
hysteresis = <2000>; /* millicelsius */
|
||||
type = "passive";
|
||||
};
|
||||
cpu_alert_very_hot: cpu_alert_very_hot {
|
||||
temperature = <85000>; /* millicelsius */
|
||||
hysteresis = <2000>; /* millicelsius */
|
||||
type = "passive";
|
||||
};
|
||||
cpu_crit: cpu_crit {
|
||||
temperature = <90000>; /* millicelsius */
|
||||
hysteresis = <2000>; /* millicelsius */
|
||||
type = "critical";
|
||||
};
|
||||
};
|
||||
|
||||
cooling-maps {
|
||||
/*
|
||||
* After 1st level, throttle the CPU down to as low as 1.4 GHz
|
||||
* and don't let the GPU go faster than 400 MHz. Note that we
|
||||
* won't throttle the GPU lower than 400 MHz due to CPU
|
||||
* heat--we'll let the GPU do the rest itself.
|
||||
*/
|
||||
cpu_warm_limit_cpu {
|
||||
trip = <&cpu_alert_warm>;
|
||||
cooling-device =
|
||||
<&cpu0 THERMAL_NO_LIMIT 4>;
|
||||
};
|
||||
|
||||
/*
|
||||
* Add some discrete steps to help throttling system deal
|
||||
* with the fact that there are two passive cooling devices:
|
||||
* the CPU and the GPU.
|
||||
*
|
||||
* - 1.2 GHz - 1.0 GHz (almost hot)
|
||||
* - 800 MHz (hot)
|
||||
* - 800 MHz - 696 MHz (hotter)
|
||||
* - 696 MHz - min (very hot)
|
||||
*
|
||||
* Note:
|
||||
* - 800 MHz appears to be a "sweet spot" for me. I can run
|
||||
* some pretty serious workload here and be happy.
|
||||
* - After 696 MHz we stop lowering voltage, so throttling
|
||||
* past there is less effective.
|
||||
*/
|
||||
cpu_almost_hot_limit_cpu {
|
||||
trip = <&cpu_alert_almost_hot>;
|
||||
cooling-device =
|
||||
<&cpu0 5 6>;
|
||||
};
|
||||
cpu_hot_limit_cpu {
|
||||
trip = <&cpu_alert_hot>;
|
||||
cooling-device =
|
||||
<&cpu0 7 7>;
|
||||
};
|
||||
cpu_hotter_limit_cpu {
|
||||
trip = <&cpu_alert_hotter>;
|
||||
cooling-device =
|
||||
<&cpu0 7 8>;
|
||||
};
|
||||
cpu_very_hot_limit_cpu {
|
||||
trip = <&cpu_alert_very_hot>;
|
||||
cooling-device =
|
||||
<&cpu0 8 THERMAL_NO_LIMIT>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&dmc {
|
||||
rockchip,pctl-timing = <0x215 0xc8 0x0 0x35 0x26 0x2 0x70 0x2000d
|
||||
0x6 0x0 0x8 0x4 0x17 0x24 0xd 0x6
|
||||
0x4 0x8 0x4 0x76 0x4 0x0 0x30 0x0
|
||||
0x1 0x2 0x2 0x4 0x0 0x0 0xc0 0x4
|
||||
0x8 0x1f4>;
|
||||
rockchip,phy-timing = <0x48d7dd93 0x187008d8 0x121076
|
||||
0x0 0xc3 0x6 0x2>;
|
||||
rockchip,sdram-params = <0x20d266a4 0x5b6 2 533000000 6 9 1>;
|
||||
};
|
||||
|
||||
&emmc {
|
||||
/delete-property/mmc-hs200-1_8v;
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&i2s {
|
||||
status = "okay";
|
||||
clock-names = "i2s_hclk", "i2s_clk", "i2s_clk_out";
|
||||
clocks = <&cru HCLK_I2S0>, <&cru SCLK_I2S0>, <&cru SCLK_I2S0_OUT>;
|
||||
};
|
||||
|
||||
&rk808 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pmic_int_l &dvs_1 &dvs_2>;
|
||||
dvs-gpios = <&gpio7 12 GPIO_ACTIVE_HIGH>,
|
||||
<&gpio7 15 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
/delete-property/ vcc6-supply;
|
||||
/delete-property/ vcc12-supply;
|
||||
|
||||
vcc11-supply = <&vcc33_sys>;
|
||||
|
||||
regulators {
|
||||
/* vcc33_io is sourced directly from vcc33_sys */
|
||||
/delete-node/ LDO_REG1;
|
||||
/delete-node/ LDO_REG7;
|
||||
|
||||
/* This is not a pwren anymore, but the real power supply */
|
||||
vdd10_lcd: LDO_REG7 {
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <1000000>;
|
||||
regulator-name = "vdd10_lcd";
|
||||
regulator-suspend-mem-disabled;
|
||||
};
|
||||
|
||||
vcc18_lcd: LDO_REG8 {
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-name = "vcc18_lcd";
|
||||
regulator-suspend-mem-disabled;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
hdmi {
|
||||
power_hdmi_on: power-hdmi-on {
|
||||
rockchip,pins = <7 11 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
||||
pmic {
|
||||
dvs_1: dvs-1 {
|
||||
rockchip,pins = <7 12 RK_FUNC_GPIO &pcfg_pull_down>;
|
||||
};
|
||||
|
||||
dvs_2: dvs-2 {
|
||||
rockchip,pins = <7 15 RK_FUNC_GPIO &pcfg_pull_down>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&sdio0 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&sdmmc {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&spi0 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usb_host0_ehci {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usb_host1 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&vcc50_hdmi {
|
||||
enable-active-high;
|
||||
gpio = <&gpio7 11 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&power_hdmi_on>;
|
||||
};
|
301
arch/arm/dts/rk3288-veyron-minnie.dts
Normal file
301
arch/arm/dts/rk3288-veyron-minnie.dts
Normal file
@ -0,0 +1,301 @@
|
||||
/*
|
||||
* Google Veyron Minnie Rev 0+ board device tree source
|
||||
*
|
||||
* Copyright 2015 Google, Inc
|
||||
*
|
||||
* This file is dual-licensed: you can use it either under the terms
|
||||
* of the GPL or the X11 license, at your option. Note that this dual
|
||||
* licensing only applies to this file, and not this project as a
|
||||
* whole.
|
||||
*
|
||||
* a) This file is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* Or, alternatively,
|
||||
*
|
||||
* b) Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "rk3288-veyron-chromebook.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Google Minnie";
|
||||
compatible = "google,veyron-minnie-rev4", "google,veyron-minnie-rev3",
|
||||
"google,veyron-minnie-rev2", "google,veyron-minnie-rev1",
|
||||
"google,veyron-minnie-rev0", "google,veyron-minnie",
|
||||
"google,veyron", "rockchip,rk3288";
|
||||
|
||||
backlight_regulator: backlight-regulator {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-high;
|
||||
gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&bl_pwr_en>;
|
||||
regulator-name = "backlight_regulator";
|
||||
vin-supply = <&vcc33_sys>;
|
||||
startup-delay-us = <15000>;
|
||||
};
|
||||
|
||||
panel_regulator: panel-regulator {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-high;
|
||||
gpio = <&gpio7 14 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&lcd_enable_h>;
|
||||
regulator-name = "panel_regulator";
|
||||
startup-delay-us = <100000>;
|
||||
vin-supply = <&vcc33_sys>;
|
||||
};
|
||||
|
||||
vcc18_lcd: vcc18-lcd {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-high;
|
||||
gpio = <&gpio2 13 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&avdd_1v8_disp_en>;
|
||||
regulator-name = "vcc18_lcd";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
vin-supply = <&vcc18_wl>;
|
||||
};
|
||||
};
|
||||
|
||||
&backlight {
|
||||
/* Minnie panel PWM must be >= 1%, so start non-zero brightness at 3 */
|
||||
brightness-levels = <
|
||||
0 3 4 5 6 7
|
||||
8 9 10 11 12 13 14 15
|
||||
16 17 18 19 20 21 22 23
|
||||
24 25 26 27 28 29 30 31
|
||||
32 33 34 35 36 37 38 39
|
||||
40 41 42 43 44 45 46 47
|
||||
48 49 50 51 52 53 54 55
|
||||
56 57 58 59 60 61 62 63
|
||||
64 65 66 67 68 69 70 71
|
||||
72 73 74 75 76 77 78 79
|
||||
80 81 82 83 84 85 86 87
|
||||
88 89 90 91 92 93 94 95
|
||||
96 97 98 99 100 101 102 103
|
||||
104 105 106 107 108 109 110 111
|
||||
112 113 114 115 116 117 118 119
|
||||
120 121 122 123 124 125 126 127
|
||||
128 129 130 131 132 133 134 135
|
||||
136 137 138 139 140 141 142 143
|
||||
144 145 146 147 148 149 150 151
|
||||
152 153 154 155 156 157 158 159
|
||||
160 161 162 163 164 165 166 167
|
||||
168 169 170 171 172 173 174 175
|
||||
176 177 178 179 180 181 182 183
|
||||
184 185 186 187 188 189 190 191
|
||||
192 193 194 195 196 197 198 199
|
||||
200 201 202 203 204 205 206 207
|
||||
208 209 210 211 212 213 214 215
|
||||
216 217 218 219 220 221 222 223
|
||||
224 225 226 227 228 229 230 231
|
||||
232 233 234 235 236 237 238 239
|
||||
240 241 242 243 244 245 246 247
|
||||
248 249 250 251 252 253 254 255>;
|
||||
power-supply = <&backlight_regulator>;
|
||||
};
|
||||
|
||||
&dmc {
|
||||
rockchip,pctl-timing = <0x215 0xc8 0x0 0x35 0x26 0x2 0x70 0x2000d
|
||||
0x6 0x0 0x8 0x4 0x17 0x24 0xd 0x6
|
||||
0x4 0x8 0x4 0x76 0x4 0x0 0x30 0x0
|
||||
0x1 0x2 0x2 0x4 0x0 0x0 0xc0 0x4
|
||||
0x8 0x1f4>;
|
||||
rockchip,phy-timing = <0x48d7dd93 0x187008d8 0x121076
|
||||
0x0 0xc3 0x6 0x1>;
|
||||
rockchip,sdram-params = <0x20d266a4 0x5b6 6 533000000 6 13 0>;
|
||||
};
|
||||
|
||||
&emmc {
|
||||
/delete-property/mmc-hs200-1_8v;
|
||||
};
|
||||
|
||||
&gpio_keys {
|
||||
pinctrl-0 = <&pwr_key_h &ap_lid_int_l &volum_down_l &volum_up_l>;
|
||||
|
||||
volum_down {
|
||||
label = "Volum_down";
|
||||
gpios = <&gpio5 11 GPIO_ACTIVE_LOW>;
|
||||
linux,code = <KEY_VOLUMEDOWN>;
|
||||
debounce-interval = <100>;
|
||||
};
|
||||
|
||||
volum_up {
|
||||
label = "Volum_up";
|
||||
gpios = <&gpio5 10 GPIO_ACTIVE_LOW>;
|
||||
linux,code = <KEY_VOLUMEUP>;
|
||||
debounce-interval = <100>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c_tunnel {
|
||||
battery: bq27500@55 {
|
||||
compatible = "ti,bq27500";
|
||||
reg = <0x55>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
status = "okay";
|
||||
|
||||
clock-frequency = <400000>;
|
||||
i2c-scl-falling-time-ns = <50>;
|
||||
i2c-scl-rising-time-ns = <300>;
|
||||
|
||||
touchscreen@10 {
|
||||
compatible = "elan,ekth3500";
|
||||
reg = <0x10>;
|
||||
interrupt-parent = <&gpio2>;
|
||||
interrupts = <14 IRQ_TYPE_EDGE_FALLING>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&touch_int &touch_rst>;
|
||||
reset-gpios = <&gpio2 15 GPIO_ACTIVE_LOW>;
|
||||
vcc33-supply = <&vcc33_touch>;
|
||||
vccio-supply = <&vcc33_touch>;
|
||||
};
|
||||
};
|
||||
|
||||
&panel {
|
||||
compatible = "auo,b101ean01", "simple-panel";
|
||||
power-supply= <&panel_regulator>;
|
||||
};
|
||||
|
||||
&rk808 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pmic_int_l &dvs_1 &dvs_2>;
|
||||
|
||||
regulators {
|
||||
vcc33_touch: LDO_REG2 {
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-name = "vcc33_touch";
|
||||
regulator-state-mem {
|
||||
regulator-off-in-suspend;
|
||||
};
|
||||
};
|
||||
|
||||
vcc5v_touch: SWITCH_REG2 {
|
||||
regulator-name = "vcc5v_touch";
|
||||
regulator-state-mem {
|
||||
regulator-off-in-suspend;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc {
|
||||
disable-wp;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_gpio
|
||||
&sdmmc_bus4>;
|
||||
};
|
||||
|
||||
&vcc_5v {
|
||||
enable-active-high;
|
||||
gpio = <&gpio7 21 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&drv_5v>;
|
||||
};
|
||||
|
||||
&vcc50_hdmi {
|
||||
enable-active-high;
|
||||
gpio = <&gpio5 19 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&vcc50_hdmi_en>;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
backlight {
|
||||
bl_pwr_en: bl_pwr_en {
|
||||
rockchip,pins = <2 12 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
||||
buck-5v {
|
||||
drv_5v: drv-5v {
|
||||
rockchip,pins = <7 21 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
||||
buttons {
|
||||
volum_down_l: volum-down-l {
|
||||
rockchip,pins = <5 11 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
};
|
||||
|
||||
volum_up_l: volum-up-l {
|
||||
rockchip,pins = <5 10 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
};
|
||||
};
|
||||
|
||||
hdmi {
|
||||
vcc50_hdmi_en: vcc50-hdmi-en {
|
||||
rockchip,pins = <5 19 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
||||
lcd {
|
||||
lcd_enable_h: lcd-en {
|
||||
rockchip,pins = <7 14 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
avdd_1v8_disp_en: avdd-1v8-disp-en {
|
||||
rockchip,pins = <2 13 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
||||
pmic {
|
||||
dvs_1: dvs-1 {
|
||||
rockchip,pins = <7 12 RK_FUNC_GPIO &pcfg_pull_down>;
|
||||
};
|
||||
|
||||
dvs_2: dvs-2 {
|
||||
rockchip,pins = <7 15 RK_FUNC_GPIO &pcfg_pull_down>;
|
||||
};
|
||||
};
|
||||
|
||||
prochot {
|
||||
gpio_prochot: gpio-prochot {
|
||||
rockchip,pins = <2 8 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
||||
touchscreen {
|
||||
touch_int: touch-int {
|
||||
rockchip,pins = <2 14 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
touch_rst: touch-rst {
|
||||
rockchip,pins = <2 15 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
};
|
@ -245,14 +245,6 @@
|
||||
533000 1150000
|
||||
666000 1200000
|
||||
>;
|
||||
rockchip,pctl-timing = <0x29a 0xc8 0x1f4 0x42 0x4e 0x4 0xea 0xa
|
||||
0x5 0x0 0xa 0x7 0x19 0x24 0xa 0x7
|
||||
0x5 0xa 0x5 0x200 0x5 0x10 0x40 0x0
|
||||
0x1 0x7 0x7 0x4 0xc 0x43 0x100 0x0
|
||||
0x5 0x0>;
|
||||
rockchip,phy-timing = <0x48f9aab4 0xea0910 0x1002c200
|
||||
0xa60 0x40 0x10 0x0>;
|
||||
rockchip,sdram-params = <0x30B25564 0x627 3 666000000 3 9 1>;
|
||||
};
|
||||
|
||||
&efuse {
|
||||
|
63
arch/arm/dts/sun8i-r16-nintendo-nes-classic-edition.dts
Normal file
63
arch/arm/dts/sun8i-r16-nintendo-nes-classic-edition.dts
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (c) 2016 FUKAUMI Naoki <naobsd@gmail.com>
|
||||
*
|
||||
* This file is dual-licensed: you can use it either under the terms
|
||||
* of the GPL or the X11 license, at your option. Note that this dual
|
||||
* licensing only applies to this file, and not this project as a
|
||||
* whole.
|
||||
*
|
||||
* a) This file is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* Or, alternatively,
|
||||
*
|
||||
* b) Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "sun8i-a33.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Nintendo NES Classic Edition";
|
||||
compatible = "nintendo,nes-classic-edition", "allwinner,sun8i-a33";
|
||||
|
||||
aliases {
|
||||
serial0 = &uart0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart0_pins_a>;
|
||||
status = "okay";
|
||||
};
|
@ -6,9 +6,10 @@
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
/include/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "xlnx,zynq-7000";
|
||||
|
||||
cpus {
|
||||
@ -37,14 +38,14 @@
|
||||
};
|
||||
};
|
||||
|
||||
pmu {
|
||||
pmu@f8891000 {
|
||||
compatible = "arm,cortex-a9-pmu";
|
||||
interrupts = <0 5 4>, <0 6 4>;
|
||||
interrupt-parent = <&intc>;
|
||||
reg = < 0xf8891000 0x1000 0xf8893000 0x1000 >;
|
||||
};
|
||||
|
||||
regulator_vccpint: fixedregulator@0 {
|
||||
regulator_vccpint: fixedregulator {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "VCCPINT";
|
||||
regulator-min-microvolt = <1000000>;
|
||||
|
@ -18,7 +18,7 @@
|
||||
mmc0 = &sdhci0;
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0 0x40000000>;
|
||||
};
|
||||
|
@ -16,7 +16,7 @@
|
||||
serial0 = &uart1;
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0 0x40000000>;
|
||||
};
|
||||
|
97
arch/arm/dts/zynq-topic-miami.dts
Normal file
97
arch/arm/dts/zynq-topic-miami.dts
Normal file
@ -0,0 +1,97 @@
|
||||
/*
|
||||
* Topic Miami board DTS
|
||||
*
|
||||
* Copyright (C) 2014-2016 Topic Embedded Products
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
/dts-v1/;
|
||||
#include "zynq-7000.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Topic Miami Zynq Board";
|
||||
compatible = "topic,miami", "xlnx,zynq-7000";
|
||||
|
||||
aliases {
|
||||
ethernet0 = &gem0;
|
||||
serial0 = &uart0;
|
||||
spi0 = &qspi;
|
||||
i2c0 = &i2c0;
|
||||
i2c1 = &i2c1;
|
||||
mmc0 = &sdhci0;
|
||||
};
|
||||
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x40000000>;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
};
|
||||
|
||||
&qspi {
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
is-dual = <0>;
|
||||
num-cs = <1>;
|
||||
flash@0 {
|
||||
compatible = "st,m25p80", "n25q256a";
|
||||
m25p,fast-read;
|
||||
reg = <0x0>;
|
||||
spi-tx-bus-width = <1>;
|
||||
spi-rx-bus-width = <4>;
|
||||
spi-max-frequency = <100000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
partition@qspi-u-boot-spl {
|
||||
label = "qspi-u-boot-spl";
|
||||
reg = <0x00000 0x10000>;
|
||||
};
|
||||
partition@qspi-u-boot-img {
|
||||
label = "qspi-u-boot-img";
|
||||
reg = <0x10000 0x60000>;
|
||||
};
|
||||
partition@qspi-device-tree {
|
||||
label = "qspi-device-tree";
|
||||
reg = <0x70000 0x10000>;
|
||||
};
|
||||
partition@qspi-linux {
|
||||
label = "qspi-linux";
|
||||
reg = <0x80000 0x400000>;
|
||||
};
|
||||
partition@qspi-rootfs {
|
||||
label = "qspi-rootfs";
|
||||
reg = <0x480000 0x1b80000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
status = "okay";
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
status = "okay";
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
&clkc {
|
||||
ps-clk-frequency = <33333333>;
|
||||
};
|
||||
|
||||
&sdhci0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
status = "okay";
|
||||
};
|
17
arch/arm/dts/zynq-topic-miamiplus.dts
Normal file
17
arch/arm/dts/zynq-topic-miamiplus.dts
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Topic Miami Plus board DTS
|
||||
*
|
||||
* Copyright (C) 2016 Topic Embedded Products
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
#include "zynq-topic-miami.dts"
|
||||
|
||||
/ {
|
||||
model = "Topic Miami+ Zynq Board";
|
||||
compatible = "topic,miamiplus", "xlnx,zynq-7000";
|
||||
};
|
||||
|
||||
&qspi {
|
||||
is-dual = <1>;
|
||||
};
|
@ -21,7 +21,7 @@
|
||||
mmc0 = &sdhci0;
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x40000000>;
|
||||
};
|
||||
|
@ -21,7 +21,7 @@
|
||||
mmc0 = &sdhci0;
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x40000000>;
|
||||
};
|
||||
|
@ -25,7 +25,7 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x40000000>;
|
||||
};
|
||||
|
@ -23,7 +23,7 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x40000000>;
|
||||
};
|
||||
|
@ -24,7 +24,7 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x40000000>;
|
||||
};
|
||||
|
@ -25,7 +25,7 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x40000000>;
|
||||
};
|
||||
|
@ -20,7 +20,7 @@
|
||||
mmc0 = &sdhci0;
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x20000000>;
|
||||
};
|
||||
|
@ -20,7 +20,7 @@
|
||||
mmc0 = &sdhci0;
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x20000000>;
|
||||
};
|
||||
|
@ -114,6 +114,38 @@
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&lpd_dma_chan1 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&lpd_dma_chan2 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&lpd_dma_chan3 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&lpd_dma_chan4 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&lpd_dma_chan5 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&lpd_dma_chan6 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&lpd_dma_chan7 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&lpd_dma_chan8 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&nand0 {
|
||||
clocks = <&clk100 &clk100>;
|
||||
};
|
||||
|
@ -35,6 +35,18 @@
|
||||
clock-accuracy = <100>;
|
||||
};
|
||||
|
||||
clk100: clk100 {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <100000000>;
|
||||
};
|
||||
|
||||
clk600: clk600 {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <600000000>;
|
||||
};
|
||||
|
||||
dp_aud_clk: clock1 {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
@ -47,6 +59,42 @@
|
||||
clocks = <&misc_clk &misc_clk>;
|
||||
};
|
||||
|
||||
&can1 {
|
||||
clocks = <&misc_clk &misc_clk>;
|
||||
};
|
||||
|
||||
&fpd_dma_chan1 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&fpd_dma_chan2 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&fpd_dma_chan3 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&fpd_dma_chan4 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&fpd_dma_chan5 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&fpd_dma_chan6 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&fpd_dma_chan7 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&fpd_dma_chan8 {
|
||||
clocks = <&clk600>, <&clk100>;
|
||||
};
|
||||
|
||||
&gem0 {
|
||||
clocks = <&misc_clk>, <&misc_clk>, <&misc_clk>;
|
||||
};
|
||||
|
@ -31,7 +31,7 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x0 0x0 0x40000000>;
|
||||
};
|
||||
@ -41,6 +41,10 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&can1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gem0 {
|
||||
status = "okay";
|
||||
phy-handle = <&phy0>;
|
||||
@ -150,10 +154,12 @@
|
||||
&sdhci0 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
xlnx,mio_bank = <2>;
|
||||
};
|
||||
|
||||
&sdhci1 {
|
||||
status = "okay";
|
||||
xlnx,mio_bank = <1>;
|
||||
};
|
||||
|
||||
&spi0 {
|
||||
|
@ -34,7 +34,7 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x0 0x0 0x80000000>, <0x8 0x00000000 0x0 0x80000000>;
|
||||
};
|
||||
@ -159,12 +159,14 @@
|
||||
&sdhci0 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
xlnx,mio_bank = <0>;
|
||||
};
|
||||
|
||||
/* SD1 with level shifter */
|
||||
&sdhci1 {
|
||||
status = "okay";
|
||||
no-1-8-v; /* for 1.0 silicon */
|
||||
xlnx,mio_bank = <1>;
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
|
@ -36,7 +36,7 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x0 0x0 0x80000000>, <0x8 0x00000000 0x0 0x80000000>;
|
||||
};
|
||||
|
@ -41,7 +41,7 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x0 0x0 0x80000000>, <0x8 0x00000000 0x0 0x80000000>;
|
||||
};
|
||||
|
@ -32,7 +32,7 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x0 0x0 0x80000000>, <0x8 0x00000000 0x0 0x80000000>;
|
||||
};
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include "zynqmp.dtsi"
|
||||
#include "zynqmp-clk.dtsi"
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
/ {
|
||||
model = "ZynqMP ZCU102 RevA";
|
||||
@ -26,6 +27,7 @@
|
||||
rtc0 = &rtc;
|
||||
serial0 = &uart0;
|
||||
serial1 = &uart1;
|
||||
serial2 = &dcc;
|
||||
spi0 = &qspi;
|
||||
usb0 = &usb0;
|
||||
};
|
||||
@ -35,16 +37,43 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x0 0x0 0x80000000>, <0x8 0x00000000 0x0 0x80000000>;
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
autorepeat;
|
||||
sw19 {
|
||||
label = "sw19";
|
||||
gpios = <&gpio 22 GPIO_ACTIVE_HIGH>;
|
||||
linux,code = <108>; /* down */
|
||||
gpio-key,wakeup;
|
||||
autorepeat;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
heartbeat_led {
|
||||
label = "heartbeat";
|
||||
gpios = <&gpio 23 0>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&can1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dcc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* fpd_dma clk 667MHz, lpd_dma 500MHz */
|
||||
&fpd_dma_chan1 {
|
||||
status = "okay";
|
||||
@ -365,7 +394,7 @@ drivers/hwmon/pmbus/Makefile:11:obj-$(CONFIG_SENSORS_MAX20751) += max20751.o
|
||||
/* Bus 3 is not connected */
|
||||
};
|
||||
|
||||
/* FIXME PL connection - u55 , PMOD - j160 */
|
||||
/* FIXME PMOD - j160 */
|
||||
/* FIXME MSP430F - u41 - not detected */
|
||||
};
|
||||
|
||||
@ -576,6 +605,7 @@ drivers/hwmon/pmbus/Makefile:11:obj-$(CONFIG_SENSORS_MAX20751) += max20751.o
|
||||
&sdhci1 {
|
||||
status = "okay";
|
||||
no-1-8-v; /* for 1.0 silicon */
|
||||
xlnx,mio_bank = <1>;
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
|
@ -45,6 +45,12 @@
|
||||
};
|
||||
};
|
||||
|
||||
dcc: dcc {
|
||||
compatible = "arm,dcc";
|
||||
status = "disabled";
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
power-domains {
|
||||
compatible = "xlnx,zynqmp-genpd";
|
||||
|
||||
@ -184,34 +190,14 @@
|
||||
pd-id = <0x30>;
|
||||
};
|
||||
|
||||
pd_ddr: pd-ddr {
|
||||
pd_pcie: pd-pcie {
|
||||
#power-domain-cells = <0x0>;
|
||||
pd-id = <0x37>;
|
||||
pd-id = <0x3b>;
|
||||
};
|
||||
|
||||
pd_apll: pd-apll {
|
||||
pd_gpu: pd-gpu {
|
||||
#power-domain-cells = <0x0>;
|
||||
pd-id = <0x32>;
|
||||
};
|
||||
|
||||
pd_vpll: pd-vpll {
|
||||
#power-domain-cells = <0x0>;
|
||||
pd-id = <0x33>;
|
||||
};
|
||||
|
||||
pd_dpll: pd-dpll {
|
||||
#power-domain-cells = <0x0>;
|
||||
pd-id = <0x34>;
|
||||
};
|
||||
|
||||
pd_rpll: pd-rpll {
|
||||
#power-domain-cells = <0x0>;
|
||||
pd-id = <0x35>;
|
||||
};
|
||||
|
||||
pd_iopll: pd-iopll {
|
||||
#power-domain-cells = <0x0>;
|
||||
pd-id = <0x36>;
|
||||
pd-id = <0x3a 0x14 0x15>;
|
||||
};
|
||||
};
|
||||
|
||||
@ -243,7 +229,15 @@
|
||||
<1 10 0xf01>;
|
||||
};
|
||||
|
||||
amba_apu: amba_apu {
|
||||
edac {
|
||||
compatible = "arm,cortex-a53-edac";
|
||||
};
|
||||
|
||||
pcap {
|
||||
compatible = "xlnx,zynqmp-pcap-fpga";
|
||||
};
|
||||
|
||||
amba_apu: amba_apu@0 {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
@ -266,14 +260,14 @@
|
||||
compatible = "simple-bus";
|
||||
u-boot,dm-pre-reloc;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0 0 0 0xffffffff>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
can0: can@ff060000 {
|
||||
compatible = "xlnx,zynq-can-1.0";
|
||||
status = "disabled";
|
||||
clock-names = "can_clk", "pclk";
|
||||
reg = <0x0 0xff060000 0x1000>;
|
||||
reg = <0x0 0xff060000 0x0 0x1000>;
|
||||
interrupts = <0 23 4>;
|
||||
interrupt-parent = <&gic>;
|
||||
tx-fifo-depth = <0x40>;
|
||||
@ -285,7 +279,7 @@
|
||||
compatible = "xlnx,zynq-can-1.0";
|
||||
status = "disabled";
|
||||
clock-names = "can_clk", "pclk";
|
||||
reg = <0x0 0xff070000 0x1000>;
|
||||
reg = <0x0 0xff070000 0x0 0x1000>;
|
||||
interrupts = <0 24 4>;
|
||||
interrupt-parent = <&gic>;
|
||||
tx-fifo-depth = <0x40>;
|
||||
@ -295,7 +289,7 @@
|
||||
|
||||
cci: cci@fd6e0000 {
|
||||
compatible = "arm,cci-400";
|
||||
reg = <0x0 0xfd6e0000 0x9000>;
|
||||
reg = <0x0 0xfd6e0000 0x0 0x9000>;
|
||||
ranges = <0x0 0x0 0xfd6e0000 0x10000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
@ -316,200 +310,228 @@
|
||||
fpd_dma_chan1: dma@fd500000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xfd500000 0x1000>;
|
||||
reg = <0x0 0xfd500000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 124 4>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
xlnx,id = <0>;
|
||||
xlnx,bus-width = <128>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x14e8>;
|
||||
power-domains = <&pd_gdma>;
|
||||
};
|
||||
|
||||
fpd_dma_chan2: dma@fd510000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xfd510000 0x1000>;
|
||||
reg = <0x0 0xfd510000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 125 4>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
xlnx,id = <1>;
|
||||
xlnx,bus-width = <128>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x14e9>;
|
||||
power-domains = <&pd_gdma>;
|
||||
};
|
||||
|
||||
fpd_dma_chan3: dma@fd520000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xfd520000 0x1000>;
|
||||
reg = <0x0 0xfd520000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 126 4>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
xlnx,id = <2>;
|
||||
xlnx,bus-width = <128>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x14ea>;
|
||||
power-domains = <&pd_gdma>;
|
||||
};
|
||||
|
||||
fpd_dma_chan4: dma@fd530000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xfd530000 0x1000>;
|
||||
reg = <0x0 0xfd530000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 127 4>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
xlnx,id = <3>;
|
||||
xlnx,bus-width = <128>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x14eb>;
|
||||
power-domains = <&pd_gdma>;
|
||||
};
|
||||
|
||||
fpd_dma_chan5: dma@fd540000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xfd540000 0x1000>;
|
||||
reg = <0x0 0xfd540000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 128 4>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
xlnx,id = <4>;
|
||||
xlnx,bus-width = <128>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x14ec>;
|
||||
power-domains = <&pd_gdma>;
|
||||
};
|
||||
|
||||
fpd_dma_chan6: dma@fd550000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xfd550000 0x1000>;
|
||||
reg = <0x0 0xfd550000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 129 4>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
xlnx,id = <5>;
|
||||
xlnx,bus-width = <128>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x14ed>;
|
||||
power-domains = <&pd_gdma>;
|
||||
};
|
||||
|
||||
fpd_dma_chan7: dma@fd560000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xfd560000 0x1000>;
|
||||
reg = <0x0 0xfd560000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 130 4>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
xlnx,id = <6>;
|
||||
xlnx,bus-width = <128>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x14ee>;
|
||||
power-domains = <&pd_gdma>;
|
||||
};
|
||||
|
||||
fpd_dma_chan8: dma@fd570000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xfd570000 0x1000>;
|
||||
reg = <0x0 0xfd570000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 131 4>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
xlnx,id = <7>;
|
||||
xlnx,bus-width = <128>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x14ef>;
|
||||
power-domains = <&pd_gdma>;
|
||||
};
|
||||
|
||||
gpu: gpu@fd4b0000 {
|
||||
status = "disabled";
|
||||
compatible = "arm,mali-400", "arm,mali-utgard";
|
||||
reg = <0x0 0xfd4b0000 0x30000>;
|
||||
reg = <0x0 0xfd4b0000 0x0 0x30000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 132 4>, <0 132 4>, <0 132 4>, <0 132 4>, <0 132 4>, <0 132 4>;
|
||||
interrupt-names = "IRQGP", "IRQGPMMU", "IRQPP0", "IRQPPMMU0", "IRQPP1", "IRQPPMMU1";
|
||||
power-domains = <&pd_gpu>;
|
||||
};
|
||||
|
||||
/* ADMA */
|
||||
/* LPDDMA default allows only secured access. inorder to enable
|
||||
* These dma channels, Users should ensure that these dma
|
||||
* Channels are allowed for non secure access.
|
||||
*/
|
||||
lpd_dma_chan1: dma@ffa80000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xffa80000 0x1000>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
reg = <0x0 0xffa80000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 77 4>;
|
||||
xlnx,id = <0>;
|
||||
xlnx,bus-width = <64>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x868>;
|
||||
power-domains = <&pd_adma>;
|
||||
};
|
||||
|
||||
lpd_dma_chan2: dma@ffa90000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xffa90000 0x1000>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
reg = <0x0 0xffa90000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 78 4>;
|
||||
xlnx,id = <1>;
|
||||
xlnx,bus-width = <64>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x869>;
|
||||
power-domains = <&pd_adma>;
|
||||
};
|
||||
|
||||
lpd_dma_chan3: dma@ffaa0000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xffaa0000 0x1000>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
reg = <0x0 0xffaa0000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 79 4>;
|
||||
xlnx,id = <2>;
|
||||
xlnx,bus-width = <64>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x86a>;
|
||||
power-domains = <&pd_adma>;
|
||||
};
|
||||
|
||||
lpd_dma_chan4: dma@ffab0000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xffab0000 0x1000>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
reg = <0x0 0xffab0000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 80 4>;
|
||||
xlnx,id = <3>;
|
||||
xlnx,bus-width = <64>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x86b>;
|
||||
power-domains = <&pd_adma>;
|
||||
};
|
||||
|
||||
lpd_dma_chan5: dma@ffac0000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xffac0000 0x1000>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
reg = <0x0 0xffac0000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 81 4>;
|
||||
xlnx,id = <4>;
|
||||
xlnx,bus-width = <64>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x86c>;
|
||||
power-domains = <&pd_adma>;
|
||||
};
|
||||
|
||||
lpd_dma_chan6: dma@ffad0000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xffad0000 0x1000>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
reg = <0x0 0xffad0000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 82 4>;
|
||||
xlnx,id = <5>;
|
||||
xlnx,bus-width = <64>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x86d>;
|
||||
power-domains = <&pd_adma>;
|
||||
};
|
||||
|
||||
lpd_dma_chan7: dma@ffae0000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xffae0000 0x1000>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
reg = <0x0 0xffae0000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 83 4>;
|
||||
xlnx,id = <6>;
|
||||
xlnx,bus-width = <64>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x86e>;
|
||||
power-domains = <&pd_adma>;
|
||||
};
|
||||
|
||||
lpd_dma_chan8: dma@ffaf0000 {
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dma-1.0";
|
||||
reg = <0x0 0xffaf0000 0x1000>;
|
||||
clock-names = "clk_main", "clk_apb";
|
||||
reg = <0x0 0xffaf0000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 84 4>;
|
||||
xlnx,id = <7>;
|
||||
xlnx,bus-width = <64>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x86f>;
|
||||
power-domains = <&pd_adma>;
|
||||
};
|
||||
|
||||
mc: memory-controller@fd070000 {
|
||||
compatible = "xlnx,zynqmp-ddrc-2.40a";
|
||||
reg = <0x0 0xfd070000 0x30000>;
|
||||
reg = <0x0 0xfd070000 0x0 0x30000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 112 4>;
|
||||
};
|
||||
@ -517,12 +539,14 @@
|
||||
nand0: nand@ff100000 {
|
||||
compatible = "arasan,nfc-v3p10";
|
||||
status = "disabled";
|
||||
reg = <0x0 0xff100000 0x1000>;
|
||||
reg = <0x0 0xff100000 0x0 0x1000>;
|
||||
clock-names = "clk_sys", "clk_flash";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 14 4>;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x872>;
|
||||
power-domains = <&pd_nand>;
|
||||
};
|
||||
|
||||
@ -531,11 +555,12 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 57 4>, <0 57 4>;
|
||||
reg = <0x0 0xff0b0000 0x1000>;
|
||||
reg = <0x0 0xff0b0000 0x0 0x1000>;
|
||||
clock-names = "pclk", "hclk", "tx_clk";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x874>;
|
||||
power-domains = <&pd_eth0>;
|
||||
};
|
||||
|
||||
@ -544,11 +569,12 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 59 4>, <0 59 4>;
|
||||
reg = <0x0 0xff0c0000 0x1000>;
|
||||
reg = <0x0 0xff0c0000 0x0 0x1000>;
|
||||
clock-names = "pclk", "hclk", "tx_clk";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x875>;
|
||||
power-domains = <&pd_eth1>;
|
||||
};
|
||||
|
||||
@ -557,11 +583,12 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 61 4>, <0 61 4>;
|
||||
reg = <0x0 0xff0d0000 0x1000>;
|
||||
reg = <0x0 0xff0d0000 0x0 0x1000>;
|
||||
clock-names = "pclk", "hclk", "tx_clk";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x876>;
|
||||
power-domains = <&pd_eth2>;
|
||||
};
|
||||
|
||||
@ -570,11 +597,12 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 63 4>, <0 63 4>;
|
||||
reg = <0x0 0xff0e0000 0x1000>;
|
||||
reg = <0x0 0xff0e0000 0x0 0x1000>;
|
||||
clock-names = "pclk", "hclk", "tx_clk";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x877>;
|
||||
power-domains = <&pd_eth3>;
|
||||
};
|
||||
|
||||
@ -582,11 +610,11 @@
|
||||
compatible = "xlnx,zynqmp-gpio-1.0";
|
||||
status = "disabled";
|
||||
#gpio-cells = <0x2>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 16 4>;
|
||||
reg = <0x0 0xff0a0000 0x1000>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
reg = <0x0 0xff0a0000 0x0 0x1000>;
|
||||
power-domains = <&pd_gpio>;
|
||||
};
|
||||
|
||||
@ -595,7 +623,7 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 17 4>;
|
||||
reg = <0x0 0xff020000 0x1000>;
|
||||
reg = <0x0 0xff020000 0x0 0x1000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&pd_i2c0>;
|
||||
@ -606,35 +634,47 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 18 4>;
|
||||
reg = <0x0 0xff030000 0x1000>;
|
||||
reg = <0x0 0xff030000 0x0 0x1000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&pd_i2c1>;
|
||||
};
|
||||
|
||||
ocm: memory-controller@ff960000 {
|
||||
compatible = "xlnx,zynqmp-ocmc-1.0";
|
||||
reg = <0x0 0xff960000 0x0 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 10 4>;
|
||||
};
|
||||
|
||||
pcie: pcie@fd0e0000 {
|
||||
compatible = "xlnx,nwl-pcie-2.11";
|
||||
status = "disabled";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
msi-controller;
|
||||
device_type = "pci";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 118 4>,
|
||||
<0 117 4>,
|
||||
<0 116 4>,
|
||||
<0 115 4>, /* MSI_1 [63...32] */
|
||||
<0 114 4>; /* MSI_0 [31...0] */
|
||||
interrupt-names = "misc", "intx", "msi_1", "msi_0";
|
||||
reg = <0x0 0xfd0e0000 0x1000>,
|
||||
<0x0 0xfd480000 0x1000>,
|
||||
<0x0 0xe0000000 0x1000000>;
|
||||
interrupt-names = "misc","dummy","intx", "msi1", "msi0";
|
||||
msi-parent = <&pcie>;
|
||||
reg = <0x0 0xfd0e0000 0x0 0x1000>,
|
||||
<0x0 0xfd480000 0x0 0x1000>,
|
||||
<0x80 0x00000000 0x0 0x1000000>;
|
||||
reg-names = "breg", "pcireg", "cfg";
|
||||
ranges = <0x02000000 0x00000000 0xe1000000 0x00000000 0xe1000000 0 0x0f000000>;
|
||||
ranges = <0x02000000 0x00000000 0xe0000000 0x00000000 0xe0000000 0x00000000 0x10000000 /* non-prefetchable memory */
|
||||
0x43000000 0x00000006 0x00000000 0x00000006 0x00000000 0x00000002 0x00000000>;/* prefetchable memory */
|
||||
interrupt-map-mask = <0x0 0x0 0x0 0x7>;
|
||||
interrupt-map = <0x0 0x0 0x0 0x1 &pcie_intc 0x1>,
|
||||
<0x0 0x0 0x0 0x2 &pcie_intc 0x2>,
|
||||
<0x0 0x0 0x0 0x3 &pcie_intc 0x3>,
|
||||
<0x0 0x0 0x0 0x4 &pcie_intc 0x4>;
|
||||
power-domains = <&pd_pcie>;
|
||||
pcie_intc: legacy-interrupt-controller {
|
||||
interrupt-controller;
|
||||
#address-cells = <0>;
|
||||
@ -649,26 +689,51 @@
|
||||
interrupts = <0 15 4>;
|
||||
interrupt-parent = <&gic>;
|
||||
num-cs = <1>;
|
||||
reg = <0x0 0xff0f0000 0x1000>,
|
||||
<0x0 0xc0000000 0x8000000>;
|
||||
reg = <0x0 0xff0f0000 0x0 0x1000>,
|
||||
<0x0 0xc0000000 0x0 0x8000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x873>;
|
||||
power-domains = <&pd_qspi>;
|
||||
};
|
||||
|
||||
rtc: rtc@ffa60000 {
|
||||
compatible = "xlnx,zynqmp-rtc";
|
||||
status = "disabled";
|
||||
reg = <0x0 0xffa60000 0x100>;
|
||||
reg = <0x0 0xffa60000 0x0 0x100>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 26 4>, <0 27 4>;
|
||||
interrupt-names = "alarm", "sec";
|
||||
};
|
||||
|
||||
serdes: zynqmp_phy@fd400000 {
|
||||
compatible = "xlnx,zynqmp-psgtr";
|
||||
status = "disabled";
|
||||
reg = <0x0 0xfd400000 0x0 0x40000>,
|
||||
<0x0 0xfd3d0000 0x0 0x1000>,
|
||||
<0x0 0xfd1a0000 0x0 0x1000>,
|
||||
<0x0 0xff5e0000 0x0 0x1000>;
|
||||
reg-names = "serdes", "siou", "fpd", "lpd";
|
||||
xlnx,tx_termination_fix;
|
||||
lane0: lane0 {
|
||||
#phy-cells = <4>;
|
||||
};
|
||||
lane1: lane1 {
|
||||
#phy-cells = <4>;
|
||||
};
|
||||
lane2: lane2 {
|
||||
#phy-cells = <4>;
|
||||
};
|
||||
lane3: lane3 {
|
||||
#phy-cells = <4>;
|
||||
};
|
||||
};
|
||||
|
||||
sata: ahci@fd0c0000 {
|
||||
compatible = "ceva,ahci-1v84";
|
||||
status = "disabled";
|
||||
reg = <0x0 0xfd0c0000 0x2000>;
|
||||
reg = <0x0 0xfd0c0000 0x0 0x2000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 133 4>;
|
||||
power-domains = <&pd_sata>;
|
||||
@ -676,31 +741,36 @@
|
||||
|
||||
sdhci0: sdhci@ff160000 {
|
||||
u-boot,dm-pre-reloc;
|
||||
compatible = "arasan,sdhci-8.9a";
|
||||
compatible = "xlnx,zynqmp-8.9a", "arasan,sdhci-8.9a";
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 48 4>;
|
||||
reg = <0x0 0xff160000 0x1000>;
|
||||
reg = <0x0 0xff160000 0x0 0x1000>;
|
||||
clock-names = "clk_xin", "clk_ahb";
|
||||
broken-tuning;
|
||||
xlnx,device_id = <0>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x870>;
|
||||
power-domains = <&pd_sd0>;
|
||||
};
|
||||
|
||||
sdhci1: sdhci@ff170000 {
|
||||
u-boot,dm-pre-reloc;
|
||||
compatible = "arasan,sdhci-8.9a";
|
||||
compatible = "xlnx,zynqmp-8.9a", "arasan,sdhci-8.9a";
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 49 4>;
|
||||
reg = <0x0 0xff170000 0x1000>;
|
||||
reg = <0x0 0xff170000 0x0 0x1000>;
|
||||
clock-names = "clk_xin", "clk_ahb";
|
||||
broken-tuning;
|
||||
xlnx,device_id = <1>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x871>;
|
||||
power-domains = <&pd_sd1>;
|
||||
};
|
||||
|
||||
smmu: smmu@fd800000 {
|
||||
compatible = "arm,mmu-500";
|
||||
reg = <0x0 0xfd800000 0x20000>;
|
||||
reg = <0x0 0xfd800000 0x0 0x20000>;
|
||||
#iommu-cells = <1>;
|
||||
#global-interrupts = <1>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 155 4>,
|
||||
@ -711,7 +781,29 @@
|
||||
mmu-masters = < &gem0 0x874
|
||||
&gem1 0x875
|
||||
&gem2 0x876
|
||||
&gem3 0x877 >;
|
||||
&gem3 0x877
|
||||
&usb0 0x860
|
||||
&usb1 0x861
|
||||
&qspi 0x873
|
||||
&lpd_dma_chan1 0x868
|
||||
&lpd_dma_chan2 0x869
|
||||
&lpd_dma_chan3 0x86a
|
||||
&lpd_dma_chan4 0x86b
|
||||
&lpd_dma_chan5 0x86c
|
||||
&lpd_dma_chan6 0x86d
|
||||
&lpd_dma_chan7 0x86e
|
||||
&lpd_dma_chan8 0x86f
|
||||
&fpd_dma_chan1 0x14e8
|
||||
&fpd_dma_chan2 0x14e9
|
||||
&fpd_dma_chan3 0x14ea
|
||||
&fpd_dma_chan4 0x14eb
|
||||
&fpd_dma_chan5 0x14ec
|
||||
&fpd_dma_chan6 0x14ed
|
||||
&fpd_dma_chan7 0x14ee
|
||||
&fpd_dma_chan8 0x14ef
|
||||
&sdhci0 0x870
|
||||
&sdhci1 0x871
|
||||
&nand0 0x872>;
|
||||
};
|
||||
|
||||
spi0: spi@ff040000 {
|
||||
@ -719,7 +811,7 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 19 4>;
|
||||
reg = <0x0 0xff040000 0x1000>;
|
||||
reg = <0x0 0xff040000 0x0 0x1000>;
|
||||
clock-names = "ref_clk", "pclk";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
@ -731,7 +823,7 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 20 4>;
|
||||
reg = <0x0 0xff050000 0x1000>;
|
||||
reg = <0x0 0xff050000 0x0 0x1000>;
|
||||
clock-names = "ref_clk", "pclk";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
@ -743,7 +835,7 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 36 4>, <0 37 4>, <0 38 4>;
|
||||
reg = <0x0 0xff110000 0x1000>;
|
||||
reg = <0x0 0xff110000 0x0 0x1000>;
|
||||
timer-width = <32>;
|
||||
power-domains = <&pd_ttc0>;
|
||||
};
|
||||
@ -753,7 +845,7 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 39 4>, <0 40 4>, <0 41 4>;
|
||||
reg = <0x0 0xff120000 0x1000>;
|
||||
reg = <0x0 0xff120000 0x0 0x1000>;
|
||||
timer-width = <32>;
|
||||
power-domains = <&pd_ttc1>;
|
||||
};
|
||||
@ -763,7 +855,7 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 42 4>, <0 43 4>, <0 44 4>;
|
||||
reg = <0x0 0xff130000 0x1000>;
|
||||
reg = <0x0 0xff130000 0x0 0x1000>;
|
||||
timer-width = <32>;
|
||||
power-domains = <&pd_ttc2>;
|
||||
};
|
||||
@ -773,7 +865,7 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 45 4>, <0 46 4>, <0 47 4>;
|
||||
reg = <0x0 0xff140000 0x1000>;
|
||||
reg = <0x0 0xff140000 0x0 0x1000>;
|
||||
timer-width = <32>;
|
||||
power-domains = <&pd_ttc3>;
|
||||
};
|
||||
@ -784,7 +876,7 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 21 4>;
|
||||
reg = <0x0 0xff000000 0x1000>;
|
||||
reg = <0x0 0xff000000 0x0 0x1000>;
|
||||
clock-names = "uart_clk", "pclk";
|
||||
power-domains = <&pd_uart0>;
|
||||
};
|
||||
@ -795,25 +887,27 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 22 4>;
|
||||
reg = <0x0 0xff010000 0x1000>;
|
||||
reg = <0x0 0xff010000 0x0 0x1000>;
|
||||
clock-names = "uart_clk", "pclk";
|
||||
power-domains = <&pd_uart1>;
|
||||
};
|
||||
|
||||
usb0: usb@fe200000 {
|
||||
usb0: usb0 {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
#size-cells = <2>;
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dwc3";
|
||||
clock-names = "bus_clk", "ref_clk";
|
||||
clocks = <&clk125>, <&clk125>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x860>;
|
||||
power-domains = <&pd_usb0>;
|
||||
ranges;
|
||||
|
||||
dwc3_0: dwc3@fe200000 {
|
||||
compatible = "snps,dwc3";
|
||||
status = "disabled";
|
||||
reg = <0x0 0xfe200000 0x40000>;
|
||||
reg = <0x0 0xfe200000 0x0 0x40000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 65 4>;
|
||||
/* snps,quirk-frame-length-adjustment = <0x20>; */
|
||||
@ -821,20 +915,22 @@
|
||||
};
|
||||
};
|
||||
|
||||
usb1: usb@fe300000 {
|
||||
usb1: usb1 {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
#size-cells = <2>;
|
||||
status = "disabled";
|
||||
compatible = "xlnx,zynqmp-dwc3";
|
||||
clock-names = "bus_clk", "ref_clk";
|
||||
clocks = <&clk125>, <&clk125>;
|
||||
#stream-id-cells = <1>;
|
||||
iommus = <&smmu 0x861>;
|
||||
power-domains = <&pd_usb1>;
|
||||
ranges;
|
||||
|
||||
dwc3_1: dwc3@fe300000 {
|
||||
compatible = "snps,dwc3";
|
||||
status = "disabled";
|
||||
reg = <0x0 0xfe300000 0x40000>;
|
||||
reg = <0x0 0xfe300000 0x0 0x40000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 70 4>;
|
||||
/* snps,quirk-frame-length-adjustment = <0x20>; */
|
||||
@ -847,7 +943,7 @@
|
||||
status = "disabled";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 113 1>;
|
||||
reg = <0x0 0xfd4d0000 0x1000>;
|
||||
reg = <0x0 0xfd4d0000 0x0 0x1000>;
|
||||
timeout-sec = <10>;
|
||||
};
|
||||
|
||||
@ -861,11 +957,13 @@
|
||||
xlnx,pixel-format = "rgb565";
|
||||
plane0 {
|
||||
dmas = <&xlnx_dpdma 3>;
|
||||
dma-names = "dma";
|
||||
dma-names = "dma0";
|
||||
};
|
||||
plane1 {
|
||||
dmas = <&xlnx_dpdma 0>;
|
||||
dma-names = "dma";
|
||||
dmas = <&xlnx_dpdma 0>,
|
||||
<&xlnx_dpdma 1>,
|
||||
<&xlnx_dpdma 2>;
|
||||
dma-names = "dma0", "dma1", "dma2";
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -873,8 +971,7 @@
|
||||
xlnx_dp: dp@fd4a0000 {
|
||||
compatible = "xlnx,v-dp";
|
||||
status = "disabled";
|
||||
reg = <0x0 0xfd4a0000 0x1000>,
|
||||
<0x0 0xfd400000 0x20000>;
|
||||
reg = <0x0 0xfd4a0000 0x0 0x1000>;
|
||||
interrupts = <0 119 4>;
|
||||
interrupt-parent = <&gic>;
|
||||
clock-names = "aclk", "aud_clk";
|
||||
@ -920,9 +1017,9 @@
|
||||
xlnx_dp_sub: dp_sub@fd4aa000 {
|
||||
compatible = "xlnx,dp-sub";
|
||||
status = "disabled";
|
||||
reg = <0x0 0xfd4aa000 0x1000>,
|
||||
<0x0 0xfd4ab000 0x1000>,
|
||||
<0x0 0xfd4ac000 0x1000>;
|
||||
reg = <0x0 0xfd4aa000 0x0 0x1000>,
|
||||
<0x0 0xfd4ab000 0x0 0x1000>,
|
||||
<0x0 0xfd4ac000 0x0 0x1000>;
|
||||
reg-names = "blend", "av_buf", "aud";
|
||||
xlnx,output-fmt = "rgb";
|
||||
xlnx,vid-fmt = "yuyv";
|
||||
@ -932,28 +1029,28 @@
|
||||
xlnx_dpdma: dma@fd4c0000 {
|
||||
compatible = "xlnx,dpdma";
|
||||
status = "disabled";
|
||||
reg = <0x0 0xfd4c0000 0x1000>;
|
||||
reg = <0x0 0xfd4c0000 0x0 0x1000>;
|
||||
interrupts = <0 122 4>;
|
||||
interrupt-parent = <&gic>;
|
||||
clock-names = "axi_clk";
|
||||
dma-channels = <6>;
|
||||
#dma-cells = <1>;
|
||||
dma-video0channel@fd4c0000 {
|
||||
dma-video0channel {
|
||||
compatible = "xlnx,video0";
|
||||
};
|
||||
dma-video1channel@fd4c0000 {
|
||||
dma-video1channel {
|
||||
compatible = "xlnx,video1";
|
||||
};
|
||||
dma-video2channel@fd4c0000 {
|
||||
dma-video2channel {
|
||||
compatible = "xlnx,video2";
|
||||
};
|
||||
dma-graphicschannel@fd4c0000 {
|
||||
dma-graphicschannel {
|
||||
compatible = "xlnx,graphics";
|
||||
};
|
||||
dma-audio0channel@fd4c0000 {
|
||||
dma-audio0channel {
|
||||
compatible = "xlnx,audio0";
|
||||
};
|
||||
dma-audio1channel@fd4c0000 {
|
||||
dma-audio1channel {
|
||||
compatible = "xlnx,audio1";
|
||||
};
|
||||
};
|
||||
|
@ -19,6 +19,7 @@ u32 get_sysboot_value(void);
|
||||
extern struct ctrl_stat *cstat;
|
||||
u32 get_device_type(void);
|
||||
void save_omap_boot_params(void);
|
||||
void setup_early_clocks(void);
|
||||
void setup_clocks_for_console(void);
|
||||
void mpu_pll_config_val(int mpull_m);
|
||||
void ddr_pll_config(unsigned int ddrpll_M);
|
||||
@ -44,3 +45,4 @@ int am335x_get_tps65910_mpu_vdd(int sil_rev, int frequency);
|
||||
|
||||
void enable_usb_clocks(int index);
|
||||
void disable_usb_clocks(int index);
|
||||
void do_board_detect(void);
|
||||
|
@ -25,6 +25,7 @@
|
||||
#ifndef L1_CACHE_BYTES
|
||||
#define L1_CACHE_SHIFT 6
|
||||
#define L1_CACHE_BYTES BIT(L1_CACHE_SHIFT)
|
||||
#define CONFIG_FSL_TZASC_400
|
||||
#endif
|
||||
|
||||
#define CONFIG_SYS_FSL_OCRAM_BASE 0x18000000 /* initial RAM */
|
||||
|
@ -11,6 +11,10 @@ static struct cpu_type cpu_type_list[] = {
|
||||
CPU_TYPE_ENTRY(LS2080A, LS2080A, 8),
|
||||
CPU_TYPE_ENTRY(LS2085A, LS2085A, 8),
|
||||
CPU_TYPE_ENTRY(LS2045A, LS2045A, 4),
|
||||
CPU_TYPE_ENTRY(LS2088A, LS2088A, 8),
|
||||
CPU_TYPE_ENTRY(LS2084A, LS2084A, 8),
|
||||
CPU_TYPE_ENTRY(LS2048A, LS2048A, 4),
|
||||
CPU_TYPE_ENTRY(LS2044A, LS2044A, 4),
|
||||
CPU_TYPE_ENTRY(LS1043A, LS1043A, 4),
|
||||
CPU_TYPE_ENTRY(LS1023A, LS1023A, 2),
|
||||
CPU_TYPE_ENTRY(LS1046A, LS1046A, 4),
|
||||
|
@ -23,10 +23,12 @@
|
||||
#define CONFIG_SYS_IFC_ADDR (CONFIG_SYS_IMMR + 0x01240000)
|
||||
#define CONFIG_SYS_NS16550_COM1 (CONFIG_SYS_IMMR + 0x011C0500)
|
||||
#define CONFIG_SYS_NS16550_COM2 (CONFIG_SYS_IMMR + 0x011C0600)
|
||||
#define CONFIG_SYS_FSL_TIMER_ADDR 0x023d0000
|
||||
#define SYS_FSL_LS2080A_LS2085A_TIMER_ADDR 0x023d0000
|
||||
#define CONFIG_SYS_FSL_TIMER_ADDR 0x023e0000
|
||||
#define CONFIG_SYS_FSL_PMU_CLTBENR (CONFIG_SYS_FSL_PMU_ADDR + \
|
||||
0x18A0)
|
||||
#define FSL_PMU_PCTBENR_OFFSET (CONFIG_SYS_FSL_PMU_ADDR + 0x8A0)
|
||||
#define FSL_LSCH3_SVR (CONFIG_SYS_FSL_GUTS_ADDR + 0xA4)
|
||||
|
||||
#define CONFIG_SYS_FSL_WRIOP1_ADDR (CONFIG_SYS_IMMR + 0x7B80000)
|
||||
#define CONFIG_SYS_FSL_WRIOP1_MDIO1 (CONFIG_SYS_FSL_WRIOP1_ADDR + 0x16000)
|
||||
@ -153,7 +155,7 @@
|
||||
#define TP_CLUSTER_INIT_MASK 0x0000003f /* initiator mask */
|
||||
#define TP_INIT_PER_CLUSTER 4
|
||||
/* This is chassis generation 3 */
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
struct sys_info {
|
||||
unsigned long freq_processor[CONFIG_MAX_CPUS];
|
||||
unsigned long freq_systembus;
|
||||
@ -317,6 +319,5 @@ struct ccsr_reset {
|
||||
u32 ip_rev2; /* 0xbfc */
|
||||
};
|
||||
|
||||
uint get_svr(void);
|
||||
|
||||
#endif /*__ASSEMBLY__*/
|
||||
#endif /* __ARCH_FSL_LSCH3_IMMAP_H_ */
|
||||
|
@ -13,6 +13,7 @@
|
||||
* uint64_t entry_addr;
|
||||
* uint64_t status;
|
||||
* uint64_t lpid;
|
||||
* uint64_t os_arch;
|
||||
* };
|
||||
* we pad this struct to 64 bytes so each entry is in its own cacheline
|
||||
* the actual spin table is an array of these structures
|
||||
@ -20,6 +21,7 @@
|
||||
#define SPIN_TABLE_ELEM_ENTRY_ADDR_IDX 0
|
||||
#define SPIN_TABLE_ELEM_STATUS_IDX 1
|
||||
#define SPIN_TABLE_ELEM_LPID_IDX 2
|
||||
#define SPIN_TABLE_ELEM_OS_ARCH_IDX 3
|
||||
#define WORDS_PER_SPIN_TABLE_ENTRY 8 /* pad to 64 bytes */
|
||||
#define SPIN_TABLE_ELEM_SIZE 64
|
||||
|
||||
@ -36,4 +38,8 @@ void secondary_boot_func(void);
|
||||
int is_core_online(u64 cpu_id);
|
||||
u32 cpu_pos_mask(void);
|
||||
#endif
|
||||
|
||||
#define IH_ARCH_ARM 2 /* ARM */
|
||||
#define IH_ARCH_ARM64 22 /* ARM64 */
|
||||
|
||||
#endif /* _FSL_LAYERSCAPE_MP_H */
|
||||
|
@ -30,7 +30,7 @@
|
||||
#define pex_lut_in32(a) in_be32(a)
|
||||
#define pex_lut_out32(a, v) out_be32(a, v)
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
struct cpu_type {
|
||||
char name[15];
|
||||
u32 soc_ver;
|
||||
@ -39,7 +39,7 @@ struct cpu_type {
|
||||
|
||||
#define CPU_TYPE_ENTRY(n, v, nc) \
|
||||
{ .name = #n, .soc_ver = SVR_##v, .num_cores = (nc)}
|
||||
|
||||
#endif
|
||||
#define SVR_WO_E 0xFFFFFE
|
||||
#define SVR_LS1012A 0x870400
|
||||
#define SVR_LS1043A 0x879200
|
||||
@ -50,6 +50,12 @@ struct cpu_type {
|
||||
#define SVR_LS2080A 0x870110
|
||||
#define SVR_LS2085A 0x870100
|
||||
#define SVR_LS2040A 0x870130
|
||||
#define SVR_LS2088A 0x870900
|
||||
#define SVR_LS2084A 0x870910
|
||||
#define SVR_LS2048A 0x870920
|
||||
#define SVR_LS2044A 0x870930
|
||||
|
||||
#define SVR_DEV_LS2080A 0x8701
|
||||
|
||||
#define SVR_MAJ(svr) (((svr) >> 4) & 0xf)
|
||||
#define SVR_MIN(svr) (((svr) >> 0) & 0xf)
|
||||
@ -63,6 +69,7 @@ struct cpu_type {
|
||||
#define AHCI_PORT_TRANS_CFG 0x08000029
|
||||
#define AHCI_PORT_AXICC_CFG 0x3fffffff
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
/* AHCI (sata) register map */
|
||||
struct ccsr_ahci {
|
||||
u32 res1[0xa4/4]; /* 0x0 - 0xa4 */
|
||||
@ -105,4 +112,5 @@ void erratum_a010315(void);
|
||||
|
||||
bool soc_has_dp_ddr(void);
|
||||
bool soc_has_aiop(void);
|
||||
#endif
|
||||
#endif /* _ASM_ARMV8_FSL_LAYERSCAPE_SOC_H_ */
|
||||
|
@ -52,6 +52,10 @@ struct kwspi_registers {
|
||||
#define KWSPI_ADRLEN_3BYTE (2 << 8)
|
||||
#define KWSPI_ADRLEN_4BYTE (3 << 8)
|
||||
#define KWSPI_ADRLEN_MASK (3 << 8)
|
||||
#define KWSPI_CPOL (1 << 11)
|
||||
#define KWSPI_CPHA (1 << 12)
|
||||
#define KWSPI_TXLSBF (1 << 13)
|
||||
#define KWSPI_RXLSBF (1 << 14)
|
||||
|
||||
#define KWSPI_IRQUNMASK 1 /* unmask SPI interrupt */
|
||||
#define KWSPI_IRQMASK 0 /* mask SPI interrupt */
|
||||
|
@ -79,6 +79,7 @@ struct iou_scntr_secure {
|
||||
#define NAND_MODE 0x00000004
|
||||
#define EMMC_MODE 0x00000006
|
||||
#define USB_MODE 0x00000007
|
||||
#define SD1_LSHFT_MODE 0x0000000E /* SD1 Level shifter */
|
||||
#define JTAG_MODE 0x00000000
|
||||
#define BOOT_MODE_USE_ALT 0x100
|
||||
#define BOOT_MODE_ALT_SHIFT 12
|
||||
|
@ -60,7 +60,7 @@ struct arch_global_data {
|
||||
unsigned long tlb_allocated;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_OMAP_COMMON
|
||||
#ifdef CONFIG_ARCH_OMAP2
|
||||
u32 omap_boot_device;
|
||||
u32 omap_boot_mode;
|
||||
u8 omap_ch_flags;
|
||||
|
@ -8,6 +8,11 @@
|
||||
|
||||
#ifndef __ASM_ARM_MACRO_H__
|
||||
#define __ASM_ARM_MACRO_H__
|
||||
|
||||
#ifdef CONFIG_ARM64
|
||||
#include <asm/system.h>
|
||||
#endif
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
|
||||
/*
|
||||
@ -135,13 +140,21 @@ lr .req x30
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.macro armv8_switch_to_el2_m, xreg1
|
||||
/* 64bit EL2 | HCE | SMD | RES1 (Bits[5:4]) | Non-secure EL0/EL1 */
|
||||
mov \xreg1, #0x5b1
|
||||
msr scr_el3, \xreg1
|
||||
/*
|
||||
* Switch from EL3 to EL2 for ARMv8
|
||||
* @ep: kernel entry point
|
||||
* @flag: The execution state flag for lower exception
|
||||
* level, ES_TO_AARCH64 or ES_TO_AARCH32
|
||||
* @tmp: temporary register
|
||||
*
|
||||
* For loading 32-bit OS, x1 is machine nr and x2 is ftaddr.
|
||||
* For loading 64-bit OS, x0 is physical address to the FDT blob.
|
||||
* They will be passed to the guest.
|
||||
*/
|
||||
.macro armv8_switch_to_el2_m, ep, flag, tmp
|
||||
msr cptr_el3, xzr /* Disable coprocessor traps to EL3 */
|
||||
mov \xreg1, #0x33ff
|
||||
msr cptr_el2, \xreg1 /* Disable coprocessor traps to EL2 */
|
||||
mov \tmp, #CPTR_EL2_RES1
|
||||
msr cptr_el2, \tmp /* Disable coprocessor traps to EL2 */
|
||||
|
||||
/* Initialize Generic Timers */
|
||||
msr cntvoff_el2, xzr
|
||||
@ -152,45 +165,90 @@ lr .req x30
|
||||
* and RES0 bits (31,30,27,26,24,21,20,17,15-13,10-6) +
|
||||
* EE,WXN,I,SA,C,A,M to 0
|
||||
*/
|
||||
mov \xreg1, #0x0830
|
||||
movk \xreg1, #0x30C5, lsl #16
|
||||
msr sctlr_el2, \xreg1
|
||||
ldr \tmp, =(SCTLR_EL2_RES1 | SCTLR_EL2_EE_LE |\
|
||||
SCTLR_EL2_WXN_DIS | SCTLR_EL2_ICACHE_DIS |\
|
||||
SCTLR_EL2_SA_DIS | SCTLR_EL2_DCACHE_DIS |\
|
||||
SCTLR_EL2_ALIGN_DIS | SCTLR_EL2_MMU_DIS)
|
||||
msr sctlr_el2, \tmp
|
||||
|
||||
mov \tmp, sp
|
||||
msr sp_el2, \tmp /* Migrate SP */
|
||||
mrs \tmp, vbar_el3
|
||||
msr vbar_el2, \tmp /* Migrate VBAR */
|
||||
|
||||
/* Check switch to AArch64 EL2 or AArch32 Hypervisor mode */
|
||||
cmp \flag, #ES_TO_AARCH32
|
||||
b.eq 1f
|
||||
|
||||
/*
|
||||
* The next lower exception level is AArch64, 64bit EL2 | HCE |
|
||||
* SMD | RES1 (Bits[5:4]) | Non-secure EL0/EL1.
|
||||
*/
|
||||
ldr \tmp, =(SCR_EL3_RW_AARCH64 | SCR_EL3_HCE_EN |\
|
||||
SCR_EL3_SMD_DIS | SCR_EL3_RES1 |\
|
||||
SCR_EL3_NS_EN)
|
||||
msr scr_el3, \tmp
|
||||
|
||||
/* Return to the EL2_SP2 mode from EL3 */
|
||||
mov \xreg1, sp
|
||||
msr sp_el2, \xreg1 /* Migrate SP */
|
||||
mrs \xreg1, vbar_el3
|
||||
msr vbar_el2, \xreg1 /* Migrate VBAR */
|
||||
mov \xreg1, #0x3c9
|
||||
msr spsr_el3, \xreg1 /* EL2_SP2 | D | A | I | F */
|
||||
msr elr_el3, lr
|
||||
ldr \tmp, =(SPSR_EL_DEBUG_MASK | SPSR_EL_SERR_MASK |\
|
||||
SPSR_EL_IRQ_MASK | SPSR_EL_FIQ_MASK |\
|
||||
SPSR_EL_M_AARCH64 | SPSR_EL_M_EL2H)
|
||||
msr spsr_el3, \tmp
|
||||
msr elr_el3, \ep
|
||||
eret
|
||||
|
||||
1:
|
||||
/*
|
||||
* The next lower exception level is AArch32, 32bit EL2 | HCE |
|
||||
* SMD | RES1 (Bits[5:4]) | Non-secure EL0/EL1.
|
||||
*/
|
||||
ldr \tmp, =(SCR_EL3_RW_AARCH32 | SCR_EL3_HCE_EN |\
|
||||
SCR_EL3_SMD_DIS | SCR_EL3_RES1 |\
|
||||
SCR_EL3_NS_EN)
|
||||
msr scr_el3, \tmp
|
||||
|
||||
/* Return to AArch32 Hypervisor mode */
|
||||
ldr \tmp, =(SPSR_EL_END_LE | SPSR_EL_ASYN_MASK |\
|
||||
SPSR_EL_IRQ_MASK | SPSR_EL_FIQ_MASK |\
|
||||
SPSR_EL_T_A32 | SPSR_EL_M_AARCH32 |\
|
||||
SPSR_EL_M_HYP)
|
||||
msr spsr_el3, \tmp
|
||||
msr elr_el3, \ep
|
||||
eret
|
||||
.endm
|
||||
|
||||
.macro armv8_switch_to_el1_m, xreg1, xreg2
|
||||
/*
|
||||
* Switch from EL2 to EL1 for ARMv8
|
||||
* @ep: kernel entry point
|
||||
* @flag: The execution state flag for lower exception
|
||||
* level, ES_TO_AARCH64 or ES_TO_AARCH32
|
||||
* @tmp: temporary register
|
||||
*
|
||||
* For loading 32-bit OS, x1 is machine nr and x2 is ftaddr.
|
||||
* For loading 64-bit OS, x0 is physical address to the FDT blob.
|
||||
* They will be passed to the guest.
|
||||
*/
|
||||
.macro armv8_switch_to_el1_m, ep, flag, tmp
|
||||
/* Initialize Generic Timers */
|
||||
mrs \xreg1, cnthctl_el2
|
||||
orr \xreg1, \xreg1, #0x3 /* Enable EL1 access to timers */
|
||||
msr cnthctl_el2, \xreg1
|
||||
mrs \tmp, cnthctl_el2
|
||||
/* Enable EL1 access to timers */
|
||||
orr \tmp, \tmp, #(CNTHCTL_EL2_EL1PCEN_EN |\
|
||||
CNTHCTL_EL2_EL1PCTEN_EN)
|
||||
msr cnthctl_el2, \tmp
|
||||
msr cntvoff_el2, xzr
|
||||
|
||||
/* Initilize MPID/MPIDR registers */
|
||||
mrs \xreg1, midr_el1
|
||||
mrs \xreg2, mpidr_el1
|
||||
msr vpidr_el2, \xreg1
|
||||
msr vmpidr_el2, \xreg2
|
||||
mrs \tmp, midr_el1
|
||||
msr vpidr_el2, \tmp
|
||||
mrs \tmp, mpidr_el1
|
||||
msr vmpidr_el2, \tmp
|
||||
|
||||
/* Disable coprocessor traps */
|
||||
mov \xreg1, #0x33ff
|
||||
msr cptr_el2, \xreg1 /* Disable coprocessor traps to EL2 */
|
||||
mov \tmp, #CPTR_EL2_RES1
|
||||
msr cptr_el2, \tmp /* Disable coprocessor traps to EL2 */
|
||||
msr hstr_el2, xzr /* Disable coprocessor traps to EL2 */
|
||||
mov \xreg1, #3 << 20
|
||||
msr cpacr_el1, \xreg1 /* Enable FP/SIMD at EL1 */
|
||||
|
||||
/* Initialize HCR_EL2 */
|
||||
mov \xreg1, #(1 << 31) /* 64bit EL1 */
|
||||
orr \xreg1, \xreg1, #(1 << 29) /* Disable HVC */
|
||||
msr hcr_el2, \xreg1
|
||||
mov \tmp, #CPACR_EL1_FPEN_EN
|
||||
msr cpacr_el1, \tmp /* Enable FP/SIMD at EL1 */
|
||||
|
||||
/* SCTLR_EL1 initialization
|
||||
*
|
||||
@ -199,18 +257,50 @@ lr .req x30
|
||||
* UCI,EE,EOE,WXN,nTWE,nTWI,UCT,DZE,I,UMA,SED,ITD,
|
||||
* CP15BEN,SA0,SA,C,A,M to 0
|
||||
*/
|
||||
mov \xreg1, #0x0800
|
||||
movk \xreg1, #0x30d0, lsl #16
|
||||
msr sctlr_el1, \xreg1
|
||||
ldr \tmp, =(SCTLR_EL1_RES1 | SCTLR_EL1_UCI_DIS |\
|
||||
SCTLR_EL1_EE_LE | SCTLR_EL1_WXN_DIS |\
|
||||
SCTLR_EL1_NTWE_DIS | SCTLR_EL1_NTWI_DIS |\
|
||||
SCTLR_EL1_UCT_DIS | SCTLR_EL1_DZE_DIS |\
|
||||
SCTLR_EL1_ICACHE_DIS | SCTLR_EL1_UMA_DIS |\
|
||||
SCTLR_EL1_SED_EN | SCTLR_EL1_ITD_EN |\
|
||||
SCTLR_EL1_CP15BEN_DIS | SCTLR_EL1_SA0_DIS |\
|
||||
SCTLR_EL1_SA_DIS | SCTLR_EL1_DCACHE_DIS |\
|
||||
SCTLR_EL1_ALIGN_DIS | SCTLR_EL1_MMU_DIS)
|
||||
msr sctlr_el1, \tmp
|
||||
|
||||
mov \tmp, sp
|
||||
msr sp_el1, \tmp /* Migrate SP */
|
||||
mrs \tmp, vbar_el2
|
||||
msr vbar_el1, \tmp /* Migrate VBAR */
|
||||
|
||||
/* Check switch to AArch64 EL1 or AArch32 Supervisor mode */
|
||||
cmp \flag, #ES_TO_AARCH32
|
||||
b.eq 1f
|
||||
|
||||
/* Initialize HCR_EL2 */
|
||||
ldr \tmp, =(HCR_EL2_RW_AARCH64 | HCR_EL2_HCD_DIS)
|
||||
msr hcr_el2, \tmp
|
||||
|
||||
/* Return to the EL1_SP1 mode from EL2 */
|
||||
mov \xreg1, sp
|
||||
msr sp_el1, \xreg1 /* Migrate SP */
|
||||
mrs \xreg1, vbar_el2
|
||||
msr vbar_el1, \xreg1 /* Migrate VBAR */
|
||||
mov \xreg1, #0x3c5
|
||||
msr spsr_el2, \xreg1 /* EL1_SP1 | D | A | I | F */
|
||||
msr elr_el2, lr
|
||||
ldr \tmp, =(SPSR_EL_DEBUG_MASK | SPSR_EL_SERR_MASK |\
|
||||
SPSR_EL_IRQ_MASK | SPSR_EL_FIQ_MASK |\
|
||||
SPSR_EL_M_AARCH64 | SPSR_EL_M_EL1H)
|
||||
msr spsr_el2, \tmp
|
||||
msr elr_el2, \ep
|
||||
eret
|
||||
|
||||
1:
|
||||
/* Initialize HCR_EL2 */
|
||||
ldr \tmp, =(HCR_EL2_RW_AARCH32 | HCR_EL2_HCD_DIS)
|
||||
msr hcr_el2, \tmp
|
||||
|
||||
/* Return to AArch32 Supervisor mode from EL2 */
|
||||
ldr \tmp, =(SPSR_EL_END_LE | SPSR_EL_ASYN_MASK |\
|
||||
SPSR_EL_IRQ_MASK | SPSR_EL_FIQ_MASK |\
|
||||
SPSR_EL_T_A32 | SPSR_EL_M_AARCH32 |\
|
||||
SPSR_EL_M_SVC)
|
||||
msr spsr_el2, \tmp
|
||||
msr elr_el2, \ep
|
||||
eret
|
||||
.endm
|
||||
|
||||
|
@ -18,6 +18,95 @@
|
||||
#define CR_WXN (1 << 19) /* Write Permision Imply XN */
|
||||
#define CR_EE (1 << 25) /* Exception (Big) Endian */
|
||||
|
||||
#define ES_TO_AARCH64 1
|
||||
#define ES_TO_AARCH32 0
|
||||
|
||||
/*
|
||||
* SCR_EL3 bits definitions
|
||||
*/
|
||||
#define SCR_EL3_RW_AARCH64 (1 << 10) /* Next lower level is AArch64 */
|
||||
#define SCR_EL3_RW_AARCH32 (0 << 10) /* Lower lowers level are AArch32 */
|
||||
#define SCR_EL3_HCE_EN (1 << 8) /* Hypervisor Call enable */
|
||||
#define SCR_EL3_SMD_DIS (1 << 7) /* Secure Monitor Call disable */
|
||||
#define SCR_EL3_RES1 (3 << 4) /* Reserved, RES1 */
|
||||
#define SCR_EL3_NS_EN (1 << 0) /* EL0 and EL1 in Non-scure state */
|
||||
|
||||
/*
|
||||
* SPSR_EL3/SPSR_EL2 bits definitions
|
||||
*/
|
||||
#define SPSR_EL_END_LE (0 << 9) /* Exception Little-endian */
|
||||
#define SPSR_EL_DEBUG_MASK (1 << 9) /* Debug exception masked */
|
||||
#define SPSR_EL_ASYN_MASK (1 << 8) /* Asynchronous data abort masked */
|
||||
#define SPSR_EL_SERR_MASK (1 << 8) /* System Error exception masked */
|
||||
#define SPSR_EL_IRQ_MASK (1 << 7) /* IRQ exception masked */
|
||||
#define SPSR_EL_FIQ_MASK (1 << 6) /* FIQ exception masked */
|
||||
#define SPSR_EL_T_A32 (0 << 5) /* AArch32 instruction set A32 */
|
||||
#define SPSR_EL_M_AARCH64 (0 << 4) /* Exception taken from AArch64 */
|
||||
#define SPSR_EL_M_AARCH32 (1 << 4) /* Exception taken from AArch32 */
|
||||
#define SPSR_EL_M_SVC (0x3) /* Exception taken from SVC mode */
|
||||
#define SPSR_EL_M_HYP (0xa) /* Exception taken from HYP mode */
|
||||
#define SPSR_EL_M_EL1H (5) /* Exception taken from EL1h mode */
|
||||
#define SPSR_EL_M_EL2H (9) /* Exception taken from EL2h mode */
|
||||
|
||||
/*
|
||||
* CPTR_EL2 bits definitions
|
||||
*/
|
||||
#define CPTR_EL2_RES1 (3 << 12 | 0x3ff) /* Reserved, RES1 */
|
||||
|
||||
/*
|
||||
* SCTLR_EL2 bits definitions
|
||||
*/
|
||||
#define SCTLR_EL2_RES1 (3 << 28 | 3 << 22 | 1 << 18 | 1 << 16 |\
|
||||
1 << 11 | 3 << 4) /* Reserved, RES1 */
|
||||
#define SCTLR_EL2_EE_LE (0 << 25) /* Exception Little-endian */
|
||||
#define SCTLR_EL2_WXN_DIS (0 << 19) /* Write permission is not XN */
|
||||
#define SCTLR_EL2_ICACHE_DIS (0 << 12) /* Instruction cache disabled */
|
||||
#define SCTLR_EL2_SA_DIS (0 << 3) /* Stack Alignment Check disabled */
|
||||
#define SCTLR_EL2_DCACHE_DIS (0 << 2) /* Data cache disabled */
|
||||
#define SCTLR_EL2_ALIGN_DIS (0 << 1) /* Alignment check disabled */
|
||||
#define SCTLR_EL2_MMU_DIS (0) /* MMU disabled */
|
||||
|
||||
/*
|
||||
* CNTHCTL_EL2 bits definitions
|
||||
*/
|
||||
#define CNTHCTL_EL2_EL1PCEN_EN (1 << 1) /* Physical timer regs accessible */
|
||||
#define CNTHCTL_EL2_EL1PCTEN_EN (1 << 0) /* Physical counter accessible */
|
||||
|
||||
/*
|
||||
* HCR_EL2 bits definitions
|
||||
*/
|
||||
#define HCR_EL2_RW_AARCH64 (1 << 31) /* EL1 is AArch64 */
|
||||
#define HCR_EL2_RW_AARCH32 (0 << 31) /* Lower levels are AArch32 */
|
||||
#define HCR_EL2_HCD_DIS (1 << 29) /* Hypervisor Call disabled */
|
||||
|
||||
/*
|
||||
* CPACR_EL1 bits definitions
|
||||
*/
|
||||
#define CPACR_EL1_FPEN_EN (3 << 20) /* SIMD and FP instruction enabled */
|
||||
|
||||
/*
|
||||
* SCTLR_EL1 bits definitions
|
||||
*/
|
||||
#define SCTLR_EL1_RES1 (3 << 28 | 3 << 22 | 1 << 20 |\
|
||||
1 << 11) /* Reserved, RES1 */
|
||||
#define SCTLR_EL1_UCI_DIS (0 << 26) /* Cache instruction disabled */
|
||||
#define SCTLR_EL1_EE_LE (0 << 25) /* Exception Little-endian */
|
||||
#define SCTLR_EL1_WXN_DIS (0 << 19) /* Write permission is not XN */
|
||||
#define SCTLR_EL1_NTWE_DIS (0 << 18) /* WFE instruction disabled */
|
||||
#define SCTLR_EL1_NTWI_DIS (0 << 16) /* WFI instruction disabled */
|
||||
#define SCTLR_EL1_UCT_DIS (0 << 15) /* CTR_EL0 access disabled */
|
||||
#define SCTLR_EL1_DZE_DIS (0 << 14) /* DC ZVA instruction disabled */
|
||||
#define SCTLR_EL1_ICACHE_DIS (0 << 12) /* Instruction cache disabled */
|
||||
#define SCTLR_EL1_UMA_DIS (0 << 9) /* User Mask Access disabled */
|
||||
#define SCTLR_EL1_SED_EN (0 << 8) /* SETEND instruction enabled */
|
||||
#define SCTLR_EL1_ITD_EN (0 << 7) /* IT instruction enabled */
|
||||
#define SCTLR_EL1_CP15BEN_DIS (0 << 5) /* CP15 barrier operation disabled */
|
||||
#define SCTLR_EL1_SA0_DIS (0 << 4) /* Stack Alignment EL0 disabled */
|
||||
#define SCTLR_EL1_SA_DIS (0 << 3) /* Stack Alignment EL1 disabled */
|
||||
#define SCTLR_EL1_DCACHE_DIS (0 << 2) /* Data cache disabled */
|
||||
#define SCTLR_EL1_ALIGN_DIS (0 << 1) /* Alignment check disabled */
|
||||
#define SCTLR_EL1_MMU_DIS (0) /* MMU disabled */
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
u64 get_page_table_size(void);
|
||||
@ -98,8 +187,36 @@ int __asm_flush_l3_dcache(void);
|
||||
int __asm_invalidate_l3_icache(void);
|
||||
void __asm_switch_ttbr(u64 new_ttbr);
|
||||
|
||||
void armv8_switch_to_el2(void);
|
||||
void armv8_switch_to_el1(void);
|
||||
/*
|
||||
* Switch from EL3 to EL2 for ARMv8
|
||||
*
|
||||
* @args: For loading 64-bit OS, fdt address.
|
||||
* For loading 32-bit OS, zero.
|
||||
* @mach_nr: For loading 64-bit OS, zero.
|
||||
* For loading 32-bit OS, machine nr
|
||||
* @fdt_addr: For loading 64-bit OS, zero.
|
||||
* For loading 32-bit OS, fdt address.
|
||||
* @entry_point: kernel entry point
|
||||
* @es_flag: execution state flag, ES_TO_AARCH64 or ES_TO_AARCH32
|
||||
*/
|
||||
void armv8_switch_to_el2(u64 args, u64 mach_nr, u64 fdt_addr,
|
||||
u64 entry_point, u64 es_flag);
|
||||
/*
|
||||
* Switch from EL2 to EL1 for ARMv8
|
||||
*
|
||||
* @args: For loading 64-bit OS, fdt address.
|
||||
* For loading 32-bit OS, zero.
|
||||
* @mach_nr: For loading 64-bit OS, zero.
|
||||
* For loading 32-bit OS, machine nr
|
||||
* @fdt_addr: For loading 64-bit OS, zero.
|
||||
* For loading 32-bit OS, fdt address.
|
||||
* @entry_point: kernel entry point
|
||||
* @es_flag: execution state flag, ES_TO_AARCH64 or ES_TO_AARCH32
|
||||
*/
|
||||
void armv8_switch_to_el1(u64 args, u64 mach_nr, u64 fdt_addr,
|
||||
u64 entry_point, u64 es_flag);
|
||||
void armv8_el2_to_aarch32(u64 args, u64 mach_nr, u64 fdt_addr,
|
||||
u64 entry_point);
|
||||
void gic_init(void);
|
||||
void gic_send_sgi(unsigned long sgino);
|
||||
void wait_for_wakeup(void);
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#ifdef CONFIG_OMAP_COMMON
|
||||
#ifdef CONFIG_ARCH_OMAP2
|
||||
#define TI_ARMV7_DRAM_ADDR_SPACE_START 0x80000000
|
||||
#define TI_ARMV7_DRAM_ADDR_SPACE_END 0xFFFFFFFF
|
||||
|
||||
|
@ -37,6 +37,7 @@ int arch_early_init_r(void);
|
||||
/* board/.../... */
|
||||
int board_init(void);
|
||||
void dram_init_banksize (void);
|
||||
void board_quiesce_devices(void);
|
||||
|
||||
/* cpu/.../interrupt.c */
|
||||
int arch_interrupt_init (void);
|
||||
|
@ -92,3 +92,13 @@ AFLAGS_memset.o := -DMEMSET_NO_THUMB_BUILD
|
||||
AFLAGS_memcpy.o := -DMEMCPY_NO_THUMB_BUILD
|
||||
endif
|
||||
endif
|
||||
|
||||
# For building EFI apps
|
||||
CFLAGS_$(EFI_CRT0) := $(CFLAGS_EFI)
|
||||
CFLAGS_REMOVE_$(EFI_CRT0) := $(CFLAGS_NON_EFI)
|
||||
|
||||
CFLAGS_$(EFI_RELOC) := $(CFLAGS_EFI)
|
||||
CFLAGS_REMOVE_$(EFI_RELOC) := $(CFLAGS_NON_EFI)
|
||||
|
||||
extra-$(CONFIG_CMD_BOOTEFI_HELLO_COMPILE) += $(EFI_CRT0) $(EFI_RELOC)
|
||||
extra-$(CONFIG_EFI) += $(EFI_CRT0) $(EFI_RELOC)
|
||||
|
@ -64,6 +64,10 @@ void arch_lmb_reserve(struct lmb *lmb)
|
||||
gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size - sp);
|
||||
}
|
||||
|
||||
__weak void board_quiesce_devices(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* announce_and_cleanup() - Print message and prepare for kernel boot
|
||||
*
|
||||
@ -84,6 +88,9 @@ static void announce_and_cleanup(int fake)
|
||||
#ifdef CONFIG_USB_DEVICE
|
||||
udc_disconnect();
|
||||
#endif
|
||||
|
||||
board_quiesce_devices();
|
||||
|
||||
cleanup_before_linux();
|
||||
}
|
||||
|
||||
@ -193,10 +200,6 @@ static void do_nonsec_virt_switch(void)
|
||||
{
|
||||
smp_kick_all_cpus();
|
||||
dcache_disable(); /* flush cache before swtiching to EL2 */
|
||||
armv8_switch_to_el2();
|
||||
#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
|
||||
armv8_switch_to_el1();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -273,6 +276,28 @@ bool armv7_boot_nonsec(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARM64
|
||||
__weak void update_os_arch_secondary_cores(uint8_t os_arch)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
|
||||
static void switch_to_el1(void)
|
||||
{
|
||||
if ((IH_ARCH_DEFAULT == IH_ARCH_ARM64) &&
|
||||
(images.os.arch == IH_ARCH_ARM))
|
||||
armv8_switch_to_el1(0, (u64)gd->bd->bi_arch_number,
|
||||
(u64)images.ft_addr,
|
||||
(u64)images.ep,
|
||||
ES_TO_AARCH32);
|
||||
else
|
||||
armv8_switch_to_el1((u64)images.ft_addr, 0, 0,
|
||||
images.ep,
|
||||
ES_TO_AARCH64);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Subcommand: GO */
|
||||
static void boot_jump_linux(bootm_headers_t *images, int flag)
|
||||
{
|
||||
@ -292,7 +317,24 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
|
||||
|
||||
if (!fake) {
|
||||
do_nonsec_virt_switch();
|
||||
kernel_entry(images->ft_addr, NULL, NULL, NULL);
|
||||
|
||||
update_os_arch_secondary_cores(images->os.arch);
|
||||
|
||||
#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
|
||||
armv8_switch_to_el2((u64)images->ft_addr, 0, 0,
|
||||
(u64)switch_to_el1, ES_TO_AARCH64);
|
||||
#else
|
||||
if ((IH_ARCH_DEFAULT == IH_ARCH_ARM64) &&
|
||||
(images->os.arch == IH_ARCH_ARM))
|
||||
armv8_switch_to_el2(0, (u64)gd->bd->bi_arch_number,
|
||||
(u64)images->ft_addr,
|
||||
(u64)images->ep,
|
||||
ES_TO_AARCH32);
|
||||
else
|
||||
armv8_switch_to_el2((u64)images->ft_addr, 0, 0,
|
||||
images->ep,
|
||||
ES_TO_AARCH64);
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
unsigned long machid = gd->bd->bi_arch_number;
|
||||
|
135
arch/arm/lib/crt0_aarch64_efi.S
Normal file
135
arch/arm/lib/crt0_aarch64_efi.S
Normal file
@ -0,0 +1,135 @@
|
||||
/*
|
||||
* crt0-efi-aarch64.S - PE/COFF header for aarch64 EFI applications
|
||||
*
|
||||
* Copright (C) 2014 Linaro Ltd. <ard.biesheuvel@linaro.org>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+ BSD-2-Clause
|
||||
*
|
||||
* This file is taken and modified from the gnu-efi project.
|
||||
*/
|
||||
|
||||
.section .text.head
|
||||
|
||||
/*
|
||||
* Magic "MZ" signature for PE/COFF
|
||||
*/
|
||||
.globl ImageBase
|
||||
ImageBase:
|
||||
.ascii "MZ"
|
||||
.skip 58 /* 'MZ' + pad + offset == 64 */
|
||||
.long pe_header - ImageBase /* Offset to the PE header */
|
||||
pe_header:
|
||||
.ascii "PE"
|
||||
.short 0
|
||||
coff_header:
|
||||
.short 0xaa64 /* AArch64 */
|
||||
.short 2 /* nr_sections */
|
||||
.long 0 /* TimeDateStamp */
|
||||
.long 0 /* PointerToSymbolTable */
|
||||
.long 1 /* NumberOfSymbols */
|
||||
.short section_table - optional_header /* SizeOfOptionalHeader */
|
||||
/*
|
||||
* Characteristics: IMAGE_FILE_DEBUG_STRIPPED |
|
||||
* IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_LINE_NUMS_STRIPPED
|
||||
*/
|
||||
.short 0x206
|
||||
optional_header:
|
||||
.short 0x20b /* PE32+ format */
|
||||
.byte 0x02 /* MajorLinkerVersion */
|
||||
.byte 0x14 /* MinorLinkerVersion */
|
||||
.long _edata - _start /* SizeOfCode */
|
||||
.long 0 /* SizeOfInitializedData */
|
||||
.long 0 /* SizeOfUninitializedData */
|
||||
.long _start - ImageBase /* AddressOfEntryPoint */
|
||||
.long _start - ImageBase /* BaseOfCode */
|
||||
|
||||
extra_header_fields:
|
||||
.quad 0 /* ImageBase */
|
||||
.long 0x20 /* SectionAlignment */
|
||||
.long 0x8 /* FileAlignment */
|
||||
.short 0 /* MajorOperatingSystemVersion */
|
||||
.short 0 /* MinorOperatingSystemVersion */
|
||||
.short 0 /* MajorImageVersion */
|
||||
.short 0 /* MinorImageVersion */
|
||||
.short 0 /* MajorSubsystemVersion */
|
||||
.short 0 /* MinorSubsystemVersion */
|
||||
.long 0 /* Win32VersionValue */
|
||||
|
||||
.long _edata - ImageBase /* SizeOfImage */
|
||||
|
||||
/*
|
||||
* Everything before the kernel image is considered part of the header
|
||||
*/
|
||||
.long _start - ImageBase /* SizeOfHeaders */
|
||||
.long 0 /* CheckSum */
|
||||
.short EFI_SUBSYSTEM /* Subsystem */
|
||||
.short 0 /* DllCharacteristics */
|
||||
.quad 0 /* SizeOfStackReserve */
|
||||
.quad 0 /* SizeOfStackCommit */
|
||||
.quad 0 /* SizeOfHeapReserve */
|
||||
.quad 0 /* SizeOfHeapCommit */
|
||||
.long 0 /* LoaderFlags */
|
||||
.long 0x6 /* NumberOfRvaAndSizes */
|
||||
|
||||
.quad 0 /* ExportTable */
|
||||
.quad 0 /* ImportTable */
|
||||
.quad 0 /* ResourceTable */
|
||||
.quad 0 /* ExceptionTable */
|
||||
.quad 0 /* CertificationTable */
|
||||
.quad 0 /* BaseRelocationTable */
|
||||
|
||||
/* Section table */
|
||||
section_table:
|
||||
|
||||
/*
|
||||
* The EFI application loader requires a relocation section
|
||||
* because EFI applications must be relocatable. This is a
|
||||
* dummy section as far as we are concerned.
|
||||
*/
|
||||
.ascii ".reloc"
|
||||
.byte 0
|
||||
.byte 0 /* end of 0 padding of section name */
|
||||
.long 0
|
||||
.long 0
|
||||
.long 0 /* SizeOfRawData */
|
||||
.long 0 /* PointerToRawData */
|
||||
.long 0 /* PointerToRelocations */
|
||||
.long 0 /* PointerToLineNumbers */
|
||||
.short 0 /* NumberOfRelocations */
|
||||
.short 0 /* NumberOfLineNumbers */
|
||||
.long 0x42100040 /* Characteristics (section flags) */
|
||||
|
||||
|
||||
.ascii ".text"
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0 /* end of 0 padding of section name */
|
||||
.long _edata - _start /* VirtualSize */
|
||||
.long _start - ImageBase /* VirtualAddress */
|
||||
.long _edata - _start /* SizeOfRawData */
|
||||
.long _start - ImageBase /* PointerToRawData */
|
||||
|
||||
.long 0 /* PointerToRelocations (0 for executables) */
|
||||
.long 0 /* PointerToLineNumbers (0 for executables) */
|
||||
.short 0 /* NumberOfRelocations (0 for executables) */
|
||||
.short 0 /* NumberOfLineNumbers (0 for executables) */
|
||||
.long 0xe0500020 /* Characteristics (section flags) */
|
||||
|
||||
_start:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
|
||||
stp x0, x1, [sp, #16]
|
||||
mov x2, x0
|
||||
mov x3, x1
|
||||
adr x0, ImageBase
|
||||
adrp x1, _DYNAMIC
|
||||
add x1, x1, #:lo12:_DYNAMIC
|
||||
bl _relocate
|
||||
cbnz x0, 0f
|
||||
|
||||
ldp x0, x1, [sp, #16]
|
||||
bl efi_main
|
||||
|
||||
0: ldp x29, x30, [sp], #32
|
||||
ret
|
138
arch/arm/lib/crt0_arm_efi.S
Normal file
138
arch/arm/lib/crt0_arm_efi.S
Normal file
@ -0,0 +1,138 @@
|
||||
/*
|
||||
* crt0-efi-arm.S - PE/COFF header for ARM EFI applications
|
||||
*
|
||||
* Copright (C) 2014 Linaro Ltd. <ard.biesheuvel@linaro.org>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+ BSD-2-Clause
|
||||
*
|
||||
* This file is taken and modified from the gnu-efi project.
|
||||
*/
|
||||
|
||||
.section .text.head
|
||||
|
||||
/*
|
||||
* Magic "MZ" signature for PE/COFF
|
||||
*/
|
||||
.globl image_base
|
||||
image_base:
|
||||
.ascii "MZ"
|
||||
.skip 58 /* 'MZ' + pad + offset == 64 */
|
||||
.long pe_header - image_base /* Offset to the PE header */
|
||||
pe_header:
|
||||
.ascii "PE"
|
||||
.short 0
|
||||
coff_header:
|
||||
.short 0x1c2 /* Mixed ARM/Thumb */
|
||||
.short 2 /* nr_sections */
|
||||
.long 0 /* TimeDateStamp */
|
||||
.long 0 /* PointerToSymbolTable */
|
||||
.long 1 /* NumberOfSymbols */
|
||||
.short section_table - optional_header /* SizeOfOptionalHeader */
|
||||
/*
|
||||
* Characteristics: IMAGE_FILE_32BIT_MACHINE |
|
||||
* IMAGE_FILE_DEBUG_STRIPPED | IMAGE_FILE_EXECUTABLE_IMAGE |
|
||||
* IMAGE_FILE_LINE_NUMS_STRIPPED
|
||||
*/
|
||||
.short 0x306
|
||||
optional_header:
|
||||
.short 0x10b /* PE32+ format */
|
||||
.byte 0x02 /* MajorLinkerVersion */
|
||||
.byte 0x14 /* MinorLinkerVersion */
|
||||
.long _edata - _start /* SizeOfCode */
|
||||
.long 0 /* SizeOfInitializedData */
|
||||
.long 0 /* SizeOfUninitializedData */
|
||||
.long _start - image_base /* AddressOfEntryPoint */
|
||||
.long _start - image_base /* BaseOfCode */
|
||||
.long 0 /* BaseOfData */
|
||||
|
||||
extra_header_fields:
|
||||
.long 0 /* image_base */
|
||||
.long 0x20 /* SectionAlignment */
|
||||
.long 0x8 /* FileAlignment */
|
||||
.short 0 /* MajorOperatingSystemVersion */
|
||||
.short 0 /* MinorOperatingSystemVersion */
|
||||
.short 0 /* MajorImageVersion */
|
||||
.short 0 /* MinorImageVersion */
|
||||
.short 0 /* MajorSubsystemVersion */
|
||||
.short 0 /* MinorSubsystemVersion */
|
||||
.long 0 /* Win32VersionValue */
|
||||
|
||||
.long _edata - image_base /* SizeOfImage */
|
||||
|
||||
/*
|
||||
* Everything before the kernel image is considered part of the header
|
||||
*/
|
||||
.long _start - image_base /* SizeOfHeaders */
|
||||
.long 0 /* CheckSum */
|
||||
.short EFI_SUBSYSTEM /* Subsystem */
|
||||
.short 0 /* DllCharacteristics */
|
||||
.long 0 /* SizeOfStackReserve */
|
||||
.long 0 /* SizeOfStackCommit */
|
||||
.long 0 /* SizeOfHeapReserve */
|
||||
.long 0 /* SizeOfHeapCommit */
|
||||
.long 0 /* LoaderFlags */
|
||||
.long 0x6 /* NumberOfRvaAndSizes */
|
||||
|
||||
.quad 0 /* ExportTable */
|
||||
.quad 0 /* ImportTable */
|
||||
.quad 0 /* ResourceTable */
|
||||
.quad 0 /* ExceptionTable */
|
||||
.quad 0 /* CertificationTable */
|
||||
.quad 0 /* BaseRelocationTable */
|
||||
|
||||
section_table:
|
||||
|
||||
/*
|
||||
* The EFI application loader requires a relocation section
|
||||
* because EFI applications must be relocatable. This is a
|
||||
* dummy section as far as we are concerned.
|
||||
*/
|
||||
.ascii ".reloc"
|
||||
.byte 0
|
||||
.byte 0 /* end of 0 padding of section name */
|
||||
.long 0
|
||||
.long 0
|
||||
.long 0 /* SizeOfRawData */
|
||||
.long 0 /* PointerToRawData */
|
||||
.long 0 /* PointerToRelocations */
|
||||
.long 0 /* PointerToLineNumbers */
|
||||
.short 0 /* NumberOfRelocations */
|
||||
.short 0 /* NumberOfLineNumbers */
|
||||
.long 0x42100040 /* Characteristics (section flags) */
|
||||
|
||||
.ascii ".text"
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0 /* end of 0 padding of section name */
|
||||
.long _edata - _start /* VirtualSize */
|
||||
.long _start - image_base /* VirtualAddress */
|
||||
.long _edata - _start /* SizeOfRawData */
|
||||
.long _start - image_base /* PointerToRawData */
|
||||
|
||||
.long 0 /* PointerToRelocations (0 for executables) */
|
||||
.long 0 /* PointerToLineNumbers (0 for executables) */
|
||||
.short 0 /* NumberOfRelocations (0 for executables) */
|
||||
.short 0 /* NumberOfLineNumbers (0 for executables) */
|
||||
.long 0xe0500020 /* Characteristics (section flags) */
|
||||
|
||||
_start:
|
||||
stmfd sp!, {r0-r2, lr}
|
||||
|
||||
mov r2, r0
|
||||
mov r3, r1
|
||||
adr r1, .L_DYNAMIC
|
||||
ldr r0, [r1]
|
||||
add r1, r0, r1
|
||||
adr r0, image_base
|
||||
bl _relocate
|
||||
teq r0, #0
|
||||
bne 0f
|
||||
|
||||
ldmfd sp, {r0-r1}
|
||||
bl efi_main
|
||||
|
||||
0: add sp, sp, #12
|
||||
ldr pc, [sp], #4
|
||||
|
||||
.L_DYNAMIC:
|
||||
.word _DYNAMIC - .
|
70
arch/arm/lib/elf_aarch64_efi.lds
Normal file
70
arch/arm/lib/elf_aarch64_efi.lds
Normal file
@ -0,0 +1,70 @@
|
||||
/*
|
||||
* U-Boot aarch64 EFI linker script
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Modified from elf_aarch64_efi.lds in gnu-efi
|
||||
*/
|
||||
|
||||
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
|
||||
OUTPUT_ARCH(aarch64)
|
||||
ENTRY(_start)
|
||||
SECTIONS
|
||||
{
|
||||
.text 0x0 : {
|
||||
_text = .;
|
||||
*(.text.head)
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
*(.srodata)
|
||||
*(.rodata*)
|
||||
. = ALIGN(16);
|
||||
}
|
||||
_etext = .;
|
||||
_text_size = . - _text;
|
||||
.dynamic : { *(.dynamic) }
|
||||
.data : {
|
||||
_data = .;
|
||||
*(.sdata)
|
||||
*(.data)
|
||||
*(.data1)
|
||||
*(.data.*)
|
||||
*(.got.plt)
|
||||
*(.got)
|
||||
|
||||
/*
|
||||
* The EFI loader doesn't seem to like a .bss section, so we
|
||||
* stick it all into .data:
|
||||
*/
|
||||
. = ALIGN(16);
|
||||
_bss = .;
|
||||
*(.sbss)
|
||||
*(.scommon)
|
||||
*(.dynbss)
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(COMMON)
|
||||
. = ALIGN(16);
|
||||
_bss_end = .;
|
||||
_edata = .;
|
||||
}
|
||||
.rela.dyn : { *(.rela.dyn) }
|
||||
.rela.plt : { *(.rela.plt) }
|
||||
.rela.got : { *(.rela.got) }
|
||||
.rela.data : { *(.rela.data) *(.rela.data*) }
|
||||
_data_size = . - _etext;
|
||||
|
||||
. = ALIGN(4096);
|
||||
.dynsym : { *(.dynsym) }
|
||||
. = ALIGN(4096);
|
||||
.dynstr : { *(.dynstr) }
|
||||
. = ALIGN(4096);
|
||||
.note.gnu.build-id : { *(.note.gnu.build-id) }
|
||||
/DISCARD/ : {
|
||||
*(.rel.reloc)
|
||||
*(.eh_frame)
|
||||
*(.note.GNU-stack)
|
||||
}
|
||||
.comment 0 : { *(.comment) }
|
||||
}
|
70
arch/arm/lib/elf_arm_efi.lds
Normal file
70
arch/arm/lib/elf_arm_efi.lds
Normal file
@ -0,0 +1,70 @@
|
||||
/*
|
||||
* U-Boot ARM EFI linker script
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Modified from elf_arm_efi.lds in gnu-efi
|
||||
*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(_start)
|
||||
SECTIONS
|
||||
{
|
||||
.text 0x0 : {
|
||||
_text = .;
|
||||
*(.text.head)
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
*(.srodata)
|
||||
*(.rodata*)
|
||||
. = ALIGN(16);
|
||||
}
|
||||
_etext = .;
|
||||
_text_size = . - _text;
|
||||
.dynamic : { *(.dynamic) }
|
||||
.data : {
|
||||
_data = .;
|
||||
*(.sdata)
|
||||
*(.data)
|
||||
*(.data1)
|
||||
*(.data.*)
|
||||
*(.got.plt)
|
||||
*(.got)
|
||||
|
||||
/*
|
||||
* The EFI loader doesn't seem to like a .bss section, so we
|
||||
* stick it all into .data:
|
||||
*/
|
||||
. = ALIGN(16);
|
||||
_bss = .;
|
||||
*(.sbss)
|
||||
*(.scommon)
|
||||
*(.dynbss)
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(COMMON)
|
||||
. = ALIGN(16);
|
||||
_bss_end = .;
|
||||
_edata = .;
|
||||
}
|
||||
.rel.dyn : { *(.rel.dyn) }
|
||||
.rel.plt : { *(.rel.plt) }
|
||||
.rel.got : { *(.rel.got) }
|
||||
.rel.data : { *(.rel.data) *(.rel.data*) }
|
||||
_data_size = . - _etext;
|
||||
|
||||
. = ALIGN(4096);
|
||||
.dynsym : { *(.dynsym) }
|
||||
. = ALIGN(4096);
|
||||
.dynstr : { *(.dynstr) }
|
||||
. = ALIGN(4096);
|
||||
.note.gnu.build-id : { *(.note.gnu.build-id) }
|
||||
/DISCARD/ : {
|
||||
*(.rel.reloc)
|
||||
*(.eh_frame)
|
||||
*(.note.GNU-stack)
|
||||
}
|
||||
.comment 0 : { *(.comment) }
|
||||
}
|
87
arch/arm/lib/reloc_aarch64_efi.c
Normal file
87
arch/arm/lib/reloc_aarch64_efi.c
Normal file
@ -0,0 +1,87 @@
|
||||
/* reloc_aarch64.c - position independent x86 ELF shared object relocator
|
||||
Copyright (C) 2014 Linaro Ltd. <ard.biesheuvel@linaro.org>
|
||||
Copyright (C) 1999 Hewlett-Packard Co.
|
||||
Contributed by David Mosberger <davidm@hpl.hp.com>.
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials
|
||||
provided with the distribution.
|
||||
* Neither the name of Hewlett-Packard Co. nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <efi.h>
|
||||
|
||||
#include <elf.h>
|
||||
|
||||
efi_status_t _relocate(long ldbase, Elf64_Dyn *dyn, efi_handle_t image,
|
||||
struct efi_system_table *systab)
|
||||
{
|
||||
long relsz = 0, relent = 0;
|
||||
Elf64_Rela *rel = 0;
|
||||
unsigned long *addr;
|
||||
int i;
|
||||
|
||||
for (i = 0; dyn[i].d_tag != DT_NULL; ++i) {
|
||||
switch (dyn[i].d_tag) {
|
||||
case DT_RELA:
|
||||
rel = (Elf64_Rela *)((ulong)dyn[i].d_un.d_ptr + ldbase);
|
||||
break;
|
||||
case DT_RELASZ:
|
||||
relsz = dyn[i].d_un.d_val;
|
||||
break;
|
||||
case DT_RELAENT:
|
||||
relent = dyn[i].d_un.d_val;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!rel && relent == 0)
|
||||
return EFI_SUCCESS;
|
||||
|
||||
if (!rel || relent == 0)
|
||||
return EFI_LOAD_ERROR;
|
||||
|
||||
while (relsz > 0) {
|
||||
/* apply the relocs */
|
||||
switch (ELF64_R_TYPE(rel->r_info)) {
|
||||
case R_AARCH64_NONE:
|
||||
break;
|
||||
case R_AARCH64_RELATIVE:
|
||||
addr = (ulong *)(ldbase + rel->r_offset);
|
||||
*addr = ldbase + rel->r_addend;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
rel = (Elf64_Rela *)((char *)rel + relent);
|
||||
relsz -= relent;
|
||||
}
|
||||
return EFI_SUCCESS;
|
||||
}
|
66
arch/arm/lib/reloc_arm_efi.c
Normal file
66
arch/arm/lib/reloc_arm_efi.c
Normal file
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* reloc_arm.c - position-independent ARM ELF shared object relocator
|
||||
*
|
||||
* Copyright (C) 2014 Linaro Ltd. <ard.biesheuvel@linaro.org>
|
||||
* Copyright (C) 1999 Hewlett-Packard Co.
|
||||
* Contributed by David Mosberger <davidm@hpl.hp.com>.
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* This file is taken and modified from the gnu-efi project.
|
||||
*/
|
||||
|
||||
#include <efi.h>
|
||||
#include <elf.h>
|
||||
|
||||
efi_status_t _relocate(long ldbase, Elf32_Dyn *dyn, efi_handle_t image,
|
||||
struct efi_system_table *systab)
|
||||
{
|
||||
long relsz = 0, relent = 0;
|
||||
Elf32_Rel *rel = 0;
|
||||
ulong *addr;
|
||||
int i;
|
||||
|
||||
for (i = 0; dyn[i].d_tag != DT_NULL; ++i) {
|
||||
switch (dyn[i].d_tag) {
|
||||
case DT_REL:
|
||||
rel = (Elf32_Rel *)((ulong)dyn[i].d_un.d_ptr
|
||||
+ ldbase);
|
||||
break;
|
||||
case DT_RELSZ:
|
||||
relsz = dyn[i].d_un.d_val;
|
||||
break;
|
||||
case DT_RELENT:
|
||||
relent = dyn[i].d_un.d_val;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!rel && relent == 0)
|
||||
return EFI_SUCCESS;
|
||||
|
||||
if (!rel || relent == 0)
|
||||
return EFI_LOAD_ERROR;
|
||||
|
||||
while (relsz > 0) {
|
||||
/* apply the relocs */
|
||||
switch (ELF32_R_TYPE(rel->r_info)) {
|
||||
case R_ARM_NONE:
|
||||
break;
|
||||
case R_ARM_RELATIVE:
|
||||
addr = (ulong *)(ldbase + rel->r_offset);
|
||||
*addr += ldbase;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
rel = (Elf32_Rel *)((char *)rel + relent);
|
||||
relsz -= relent;
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
@ -8,6 +8,7 @@
|
||||
|
||||
#include <asm-offsets.h>
|
||||
#include <config.h>
|
||||
#include <elf.h>
|
||||
#include <linux/linkage.h>
|
||||
#ifdef CONFIG_CPU_V7M
|
||||
#include <asm/armv7m.h>
|
||||
@ -96,7 +97,7 @@ copy_loop:
|
||||
fixloop:
|
||||
ldmia r2!, {r0-r1} /* (r0,r1) <- (SRC location,fixup) */
|
||||
and r1, r1, #0xff
|
||||
cmp r1, #23 /* relative fixup? */
|
||||
cmp r1, #R_ARM_RELATIVE
|
||||
bne fixnext
|
||||
|
||||
/* relative fix: increase location by offset */
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include <asm-offsets.h>
|
||||
#include <config.h>
|
||||
#include <elf.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/macro.h>
|
||||
|
||||
@ -47,7 +48,7 @@ fixloop:
|
||||
ldp x0, x1, [x2], #16 /* (x0,x1) <- (SRC location, fixup) */
|
||||
ldr x4, [x2], #8 /* x4 <- addend */
|
||||
and x1, x1, #0xffffffff
|
||||
cmp x1, #1027 /* relative fixup? */
|
||||
cmp x1, #R_AARCH64_RELATIVE
|
||||
bne fixnext
|
||||
|
||||
/* relative fix: store addend plus offset at dest location */
|
||||
|
@ -126,6 +126,7 @@ choice
|
||||
config TARGET_ESPRESSO7420
|
||||
bool "ESPRESSO7420 board"
|
||||
select ARM64
|
||||
select ARMV8_MULTIENTRY
|
||||
select SUPPORT_SPL
|
||||
select OF_CONTROL
|
||||
select SPL_DISABLE_OF_CONTROL
|
||||
|
@ -9,6 +9,16 @@
|
||||
#include <asm/io.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#ifdef CONFIG_TARGET_ESPRESSO7420
|
||||
/*
|
||||
* Exynos7420 uses CPU0 of Cluster-1 as boot CPU. Due to this, branch_if_master
|
||||
* fails to identify as the boot CPU as the master CPU. As temporary workaround,
|
||||
* setup the slave CPU boot address as "_main".
|
||||
*/
|
||||
extern void _main(void);
|
||||
void *secondary_boot_addr = (void *)_main;
|
||||
#endif /* CONFIG_TARGET_ESPRESSO7420 */
|
||||
|
||||
void reset_cpu(ulong addr)
|
||||
{
|
||||
#ifdef CONFIG_CPU_V7
|
||||
@ -23,11 +33,3 @@ void enable_caches(void)
|
||||
dcache_enable();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARM64
|
||||
void lowlevel_init(void)
|
||||
{
|
||||
armv8_switch_to_el2();
|
||||
armv8_switch_to_el1();
|
||||
}
|
||||
#endif
|
||||
|
@ -18,5 +18,5 @@ endif
|
||||
obj-y += msmc.o
|
||||
obj-y += ddr3.o
|
||||
obj-y += keystone.o
|
||||
obj-$(CONFIG_K2E_EVM) += ddr3_spd.o
|
||||
obj-$(CONFIG_K2HK_EVM) += ddr3_spd.o
|
||||
obj-$(CONFIG_TARGET_K2E_EVM) += ddr3_spd.o
|
||||
obj-$(CONFIG_TARGET_K2HK_EVM) += ddr3_spd.o
|
||||
|
@ -8,10 +8,10 @@ config TI_SECURE_DEVICE
|
||||
authenticated) and the code. See the doc/README.ti-secure
|
||||
file for further details.
|
||||
|
||||
source "arch/arm/cpu/armv7/omap3/Kconfig"
|
||||
source "arch/arm/mach-omap2/omap3/Kconfig"
|
||||
|
||||
source "arch/arm/cpu/armv7/omap4/Kconfig"
|
||||
source "arch/arm/mach-omap2/omap4/Kconfig"
|
||||
|
||||
source "arch/arm/cpu/armv7/omap5/Kconfig"
|
||||
source "arch/arm/mach-omap2/omap5/Kconfig"
|
||||
|
||||
source "arch/arm/cpu/armv7/am33xx/Kconfig"
|
||||
source "arch/arm/mach-omap2/am33xx/Kconfig"
|
@ -5,7 +5,12 @@
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := reset.o
|
||||
obj-$(if $(filter am33xx,$(SOC)),y) += am33xx/
|
||||
obj-$(CONFIG_OMAP34XX) += omap3/
|
||||
obj-$(CONFIG_OMAP44XX) += omap4/
|
||||
obj-$(CONFIG_OMAP54XX) += omap5/
|
||||
|
||||
obj-y += reset.o
|
||||
ifeq ($(CONFIG_TIMER),)
|
||||
obj-y += timer.o
|
||||
else
|
@ -270,15 +270,11 @@ static void watchdog_disable(void)
|
||||
;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
void board_init_f(ulong dummy)
|
||||
{
|
||||
board_early_init_f();
|
||||
sdram_init();
|
||||
}
|
||||
#endif
|
||||
|
||||
void s_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
void early_system_init(void)
|
||||
{
|
||||
/*
|
||||
* The ROM will only have set up sufficient pinmux to allow for the
|
||||
@ -290,11 +286,32 @@ void s_init(void)
|
||||
#endif
|
||||
watchdog_disable();
|
||||
set_uart_mux_conf();
|
||||
setup_clocks_for_console();
|
||||
setup_early_clocks();
|
||||
uart_soft_reset();
|
||||
#ifdef CONFIG_TI_I2C_BOARD_DETECT
|
||||
do_board_detect();
|
||||
#endif
|
||||
#if defined(CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC)
|
||||
/* Enable RTC32K clock */
|
||||
rtc32k_enable();
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
void board_init_f(ulong dummy)
|
||||
{
|
||||
early_system_init();
|
||||
board_early_init_f();
|
||||
sdram_init();
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
int arch_cpu_init_dm(void)
|
||||
{
|
||||
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
|
||||
early_system_init();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
@ -232,10 +232,15 @@ __weak void scale_vcores(void)
|
||||
{
|
||||
}
|
||||
|
||||
void prcm_init()
|
||||
void setup_early_clocks(void)
|
||||
{
|
||||
setup_clocks_for_console();
|
||||
enable_basic_clocks();
|
||||
scale_vcores();
|
||||
setup_dplls();
|
||||
timer_init();
|
||||
}
|
||||
|
||||
void prcm_init(void)
|
||||
{
|
||||
scale_vcores();
|
||||
setup_dplls();
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user