Xilinx changes for v2020.07

common:
 - Align ENV_FAT_INTERFACE
 - Fix MAC address source print log
 - Improve based autodetection code
 
 xilinx:
 - Enable netconsole
 
 Microblaze:
 - Setup default ENV_OFFSET/ENV_SECT_SIZE
 
 Zynq:
 - Multiple DT updates/fixes
 - Use DEVICE_TREE environment variable for DTB selection
 - Switch to single zynq configuration
 - Enable NOR flash via DM
 - Minor SPL print removal
 - Enable i2c mux driver
 
 ZynqMP:
 - Print multiboot register
 - Enable cache commands in mini mtest
 - Multiple DT updates/fixes
 - Fix firmware probing when driver is not enabled
 - Specify 3rd backup RAM boot mode in SPL
 - Add SPL support for zcu102 v1.1 and zcu111 revA
 - Redesign debug uart enabling and psu_init delay
 - Enable full u-boot run from EL3
 - Enable u-boot.itb generation without ATF with U-Boot in EL3
 
 Versal:
 - Enable distro default
 - Enable others SPI flashes
 - Enable systems without DDR
 
 Drivers:
 - Gem:
   - Flush memory after freeing
   - Handle mdio bus separately
 - Watchdog:
   - Get rid of unused global data pointer
   - Enable window watchdog timer
 - Serial:
   - Change reinitialization logic in zynq serial driver
 -----BEGIN PGP SIGNATURE-----
 
 iF0EABECAB0WIQQbPNTMvXmYlBPRwx7KSWXLKUoMIQUCXoxw9wAKCRDKSWXLKUoM
 IbQxAKCK23yTy4FoN8oTGTYsbmLOA9kVUQCbBx8lg4nBeA8ihSaAnY+HMDF37YI=
 =Lg54
 -----END PGP SIGNATURE-----

Merge tag 'xilinx-for-v2020.07' of https://gitlab.denx.de/u-boot/custodians/u-boot-microblaze into next

Xilinx changes for v2020.07

common:
- Align ENV_FAT_INTERFACE
- Fix MAC address source print log
- Improve based autodetection code

xilinx:
- Enable netconsole

Microblaze:
- Setup default ENV_OFFSET/ENV_SECT_SIZE

Zynq:
- Multiple DT updates/fixes
- Use DEVICE_TREE environment variable for DTB selection
- Switch to single zynq configuration
- Enable NOR flash via DM
- Minor SPL print removal
- Enable i2c mux driver

ZynqMP:
- Print multiboot register
- Enable cache commands in mini mtest
- Multiple DT updates/fixes
- Fix firmware probing when driver is not enabled
- Specify 3rd backup RAM boot mode in SPL
- Add SPL support for zcu102 v1.1 and zcu111 revA
- Redesign debug uart enabling and psu_init delay
- Enable full u-boot run from EL3
- Enable u-boot.itb generation without ATF with U-Boot in EL3

Versal:
- Enable distro default
- Enable others SPI flashes
- Enable systems without DDR

Drivers:
- Gem:
  - Flush memory after freeing
  - Handle mdio bus separately
- Watchdog:
  - Get rid of unused global data pointer
  - Enable window watchdog timer
- Serial:
  - Change reinitialization logic in zynq serial driver

Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
Tom Rini 2020-04-07 11:58:44 -04:00
commit 1f47e2aca4
426 changed files with 6837 additions and 4492 deletions

View File

@ -228,11 +228,11 @@ jobs:
TEST_PY_BD: "qemu-x86_64" TEST_PY_BD: "qemu-x86_64"
TEST_PY_TEST_SPEC: "not sleep" TEST_PY_TEST_SPEC: "not sleep"
BUILDMAN: "^qemu-x86_64$" BUILDMAN: "^qemu-x86_64$"
zynq_zc702: xilinx_zynq_virt:
TEST_PY_BD: "zynq_zc702" TEST_PY_BD: "xilinx_zynq_virt"
TEST_PY_ID: "--id qemu" TEST_PY_ID: "--id qemu"
TEST_PY_TEST_SPEC: "not sleep" TEST_PY_TEST_SPEC: "not sleep"
BUILDMAN: "^zynq_zc702$" BUILDMAN: "^xilinx_zynq_virt$"
xilinx_versal_virt: xilinx_versal_virt:
TEST_PY_BD: "xilinx_versal_virt" TEST_PY_BD: "xilinx_versal_virt"
TEST_PY_ID: "--id qemu" TEST_PY_ID: "--id qemu"

View File

@ -321,13 +321,13 @@ qemu-x86_64 test.py:
BUILDMAN: "^qemu-x86_64$" BUILDMAN: "^qemu-x86_64$"
<<: *buildman_and_testpy_dfn <<: *buildman_and_testpy_dfn
zynq_zc702 test.py: xilinx_zynq_virt test.py:
tags: [ 'all' ] tags: [ 'all' ]
variables: variables:
TEST_PY_BD: "zynq_zc702" TEST_PY_BD: "xilinx_zynq_virt"
TEST_PY_TEST_SPEC: "not sleep" TEST_PY_TEST_SPEC: "not sleep"
TEST_PY_ID: "--id qemu" TEST_PY_ID: "--id qemu"
BUILDMAN: "^zynq_zc702$" BUILDMAN: "^xilinx_zynq_virt$"
<<: *buildman_and_testpy_dfn <<: *buildman_and_testpy_dfn
xilinx_versal_virt test.py: xilinx_versal_virt test.py:

View File

@ -505,13 +505,13 @@ matrix:
BUILDMAN="^qemu-x86_64$" BUILDMAN="^qemu-x86_64$"
TOOLCHAIN="i386" TOOLCHAIN="i386"
BUILD_ROM="yes" BUILD_ROM="yes"
- name: "test/py zynq_zc702" - name: "test/py xilinx_zynq_virt"
env: env:
- TEST_PY_BD="zynq_zc702" - TEST_PY_BD="xilinx_zynq_virt"
TEST_PY_TEST_SPEC="not sleep" TEST_PY_TEST_SPEC="not sleep"
QEMU_TARGET="arm-softmmu" QEMU_TARGET="arm-softmmu"
TEST_PY_ID="--id qemu" TEST_PY_ID="--id qemu"
BUILDMAN="^zynq_zc702$" BUILDMAN="^xilinx_zynq_virt$"
- name: "test/py xilinx_versal_virt" - name: "test/py xilinx_versal_virt"
env: env:
- TEST_PY_BD="xilinx_versal_virt" - TEST_PY_BD="xilinx_versal_virt"

View File

@ -111,6 +111,7 @@ config ENV_VARS_UBOOT_CONFIG
config NR_DRAM_BANKS config NR_DRAM_BANKS
int "Number of DRAM banks" int "Number of DRAM banks"
default 1 if ARCH_SUNXI
default 4 default 4
help help
This defines the number of DRAM banks. This defines the number of DRAM banks.
@ -294,6 +295,11 @@ config ERR_PTR_OFFSET
pointer values - up to 'MAX_ERRNO' bytes below this value must be pointer values - up to 'MAX_ERRNO' bytes below this value must be
unused/invalid addresses. unused/invalid addresses.
config PLATFORM_ELFENTRY
string
default "__start" if MIPS
default "_start"
endmenu # General setup endmenu # General setup
menu "Boot images" menu "Boot images"

View File

@ -447,6 +447,7 @@ M: Michal Simek <michal.simek@xilinx.com>
S: Maintained S: Maintained
T: git https://gitlab.denx.de/u-boot/custodians/u-boot-microblaze.git T: git https://gitlab.denx.de/u-boot/custodians/u-boot-microblaze.git
F: arch/arm/mach-versal/ F: arch/arm/mach-versal/
F: drivers/watchdog/xilinx_wwdt.c
N: (?<!uni)versal N: (?<!uni)versal
ARM VERSATILE EXPRESS DRIVERS ARM VERSATILE EXPRESS DRIVERS

View File

@ -3,7 +3,7 @@
VERSION = 2020 VERSION = 2020
PATCHLEVEL = 04 PATCHLEVEL = 04
SUBLEVEL = SUBLEVEL =
EXTRAVERSION = -rc3 EXTRAVERSION = -rc4
NAME = NAME =
# *DOCUMENTATION* # *DOCUMENTATION*
@ -485,6 +485,7 @@ endif
version_h := include/generated/version_autogenerated.h version_h := include/generated/version_autogenerated.h
timestamp_h := include/generated/timestamp_autogenerated.h timestamp_h := include/generated/timestamp_autogenerated.h
defaultenv_h := include/generated/defaultenv_autogenerated.h defaultenv_h := include/generated/defaultenv_autogenerated.h
dt_h := include/generated/dt.h
no-dot-config-targets := clean clobber mrproper distclean \ no-dot-config-targets := clean clobber mrproper distclean \
help %docs check% coccicheck \ help %docs check% coccicheck \
@ -1654,18 +1655,17 @@ OBJCOPYFLAGS_u-boot-img-spl-at-end.bin := -I binary -O binary \
u-boot-img-spl-at-end.bin: u-boot.img spl/u-boot-spl.bin FORCE u-boot-img-spl-at-end.bin: u-boot.img spl/u-boot-spl.bin FORCE
$(call if_changed,pad_cat) $(call if_changed,pad_cat)
# Create a new ELF from a raw binary file.
ifndef PLATFORM_ELFENTRY
PLATFORM_ELFENTRY = "_start"
endif
quiet_cmd_u-boot-elf ?= LD $@ quiet_cmd_u-boot-elf ?= LD $@
cmd_u-boot-elf ?= $(LD) u-boot-elf.o -o $@ \ cmd_u-boot-elf ?= $(LD) u-boot-elf.o -o $@ \
--defsym=$(PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \ -T u-boot-elf.lds --defsym=$(CONFIG_PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \
-Ttext=$(CONFIG_SYS_TEXT_BASE) -Ttext=$(CONFIG_SYS_TEXT_BASE)
u-boot.elf: u-boot.bin u-boot.elf: u-boot.bin u-boot-elf.lds
$(Q)$(OBJCOPY) -I binary $(PLATFORM_ELFFLAGS) $< u-boot-elf.o $(Q)$(OBJCOPY) -I binary $(PLATFORM_ELFFLAGS) $< u-boot-elf.o
$(call if_changed,u-boot-elf) $(call if_changed,u-boot-elf)
u-boot-elf.lds: arch/u-boot-elf.lds prepare FORCE
$(call if_changed_dep,cpp_lds)
# MediaTek's ARM-based u-boot needs a header to contains its load address # MediaTek's ARM-based u-boot needs a header to contains its load address
# which is parsed by the BootROM. # which is parsed by the BootROM.
# If the SPL build is enabled, the header will be added to the spl binary, # If the SPL build is enabled, the header will be added to the spl binary,
@ -1775,7 +1775,7 @@ endif
# prepare2 creates a makefile if using a separate output directory # prepare2 creates a makefile if using a separate output directory
prepare2: prepare3 outputmakefile cfg prepare2: prepare3 outputmakefile cfg
prepare1: prepare2 $(version_h) $(timestamp_h) \ prepare1: prepare2 $(version_h) $(timestamp_h) $(dt_h) \
include/config/auto.conf include/config/auto.conf
ifeq ($(wildcard $(LDSCRIPT)),) ifeq ($(wildcard $(LDSCRIPT)),)
@echo >&2 " Could not find linker script." @echo >&2 " Could not find linker script."
@ -1841,12 +1841,23 @@ define filechk_defaultenv.h
xxd -i ; echo ", 0x00" ; ) xxd -i ; echo ", 0x00" ; )
endef endef
define filechk_dt.h
(if test -n "$${DEVICE_TREE}"; then \
echo \#define DEVICE_TREE \"$(DEVICE_TREE)\"; \
else \
echo \#define DEVICE_TREE CONFIG_DEFAULT_DEVICE_TREE; \
fi)
endef
$(version_h): include/config/uboot.release FORCE $(version_h): include/config/uboot.release FORCE
$(call filechk,version.h) $(call filechk,version.h)
$(timestamp_h): $(srctree)/Makefile FORCE $(timestamp_h): $(srctree)/Makefile FORCE
$(call filechk,timestamp.h) $(call filechk,timestamp.h)
$(dt_h): $(srctree)/Makefile FORCE
$(call filechk,dt.h)
$(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE $(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE
$(call filechk,defaultenv.h) $(call filechk,defaultenv.h)

View File

@ -9,6 +9,12 @@
#include <linux/types.h> #include <linux/types.h>
#include <asm/byteorder.h> #include <asm/byteorder.h>
/*
* Compiler barrier. It prevents compiler from reordering instructions before
* and after it. It doesn't prevent HW (CPU) from any reordering though.
*/
#define __comp_b() asm volatile("" : : : "memory")
#ifdef __ARCHS__ #ifdef __ARCHS__
/* /*
@ -45,8 +51,8 @@
#define __iormb() rmb() #define __iormb() rmb()
#define __iowmb() wmb() #define __iowmb() wmb()
#else #else
#define __iormb() asm volatile("" : : : "memory") #define __iormb() __comp_b()
#define __iowmb() asm volatile("" : : : "memory") #define __iowmb() __comp_b()
#endif #endif
static inline void sync(void) static inline void sync(void)
@ -54,31 +60,47 @@ static inline void sync(void)
/* Not yet implemented */ /* Not yet implemented */
} }
#define __arch_getb(a) (*(unsigned char *)(a)) /*
#define __arch_getw(a) (*(unsigned short *)(a)) * We must use 'volatile' in C-version read/write IO accessors implementation
#define __arch_getl(a) (*(unsigned int *)(a)) * to avoid merging several reads (writes) into one read (write), or optimizing
#define __arch_getq(a) (*(unsigned long long *)(a)) * them out by compiler.
* We must use compiler barriers before and after operation (read or write) so
* it won't be reordered by compiler.
*/
#define __arch_getb(a) ({ u8 __v; __comp_b(); __v = *(volatile u8 *)(a); __comp_b(); __v; })
#define __arch_getw(a) ({ u16 __v; __comp_b(); __v = *(volatile u16 *)(a); __comp_b(); __v; })
#define __arch_getl(a) ({ u32 __v; __comp_b(); __v = *(volatile u32 *)(a); __comp_b(); __v; })
#define __arch_getq(a) ({ u64 __v; __comp_b(); __v = *(volatile u64 *)(a); __comp_b(); __v; })
#define __arch_putb(v, a) (*(unsigned char *)(a) = (v)) #define __arch_putb(v, a) ({ __comp_b(); *(volatile u8 *)(a) = (v); __comp_b(); })
#define __arch_putw(v, a) (*(unsigned short *)(a) = (v)) #define __arch_putw(v, a) ({ __comp_b(); *(volatile u16 *)(a) = (v); __comp_b(); })
#define __arch_putl(v, a) (*(unsigned int *)(a) = (v)) #define __arch_putl(v, a) ({ __comp_b(); *(volatile u32 *)(a) = (v); __comp_b(); })
#define __arch_putq(v, a) (*(unsigned long long *)(a) = (v)) #define __arch_putq(v, a) ({ __comp_b(); *(volatile u64 *)(a) = (v); __comp_b(); })
#define __raw_writeb(v, a) __arch_putb(v, a)
#define __raw_writew(v, a) __arch_putw(v, a)
#define __raw_writel(v, a) __arch_putl(v, a)
#define __raw_writeq(v, a) __arch_putq(v, a)
#define __raw_readb(a) __arch_getb(a) /*
#define __raw_readw(a) __arch_getw(a) * We add memory barriers for __raw_readX / __raw_writeX accessors same way as
#define __raw_readl(a) __arch_getl(a) * it is done for readX and writeX accessors as lots of U-boot driver uses
#define __raw_readq(a) __arch_getq(a) * __raw_readX / __raw_writeX instead of proper accessor with barrier.
*/
#define __raw_writeb(v, c) ({ __iowmb(); __arch_putb(v, c); })
#define __raw_writew(v, c) ({ __iowmb(); __arch_putw(v, c); })
#define __raw_writel(v, c) ({ __iowmb(); __arch_putl(v, c); })
#define __raw_writeq(v, c) ({ __iowmb(); __arch_putq(v, c); })
#define __raw_readb(c) ({ u8 __v = __arch_getb(c); __iormb(); __v; })
#define __raw_readw(c) ({ u16 __v = __arch_getw(c); __iormb(); __v; })
#define __raw_readl(c) ({ u32 __v = __arch_getl(c); __iormb(); __v; })
#define __raw_readq(c) ({ u64 __v = __arch_getq(c); __iormb(); __v; })
static inline void __raw_writesb(unsigned long addr, const void *data, static inline void __raw_writesb(unsigned long addr, const void *data,
int bytelen) int bytelen)
{ {
u8 *buf = (uint8_t *)data; u8 *buf = (uint8_t *)data;
__iowmb();
while (bytelen--) while (bytelen--)
__arch_putb(*buf++, addr); __arch_putb(*buf++, addr);
} }
@ -88,6 +110,8 @@ static inline void __raw_writesw(unsigned long addr, const void *data,
{ {
u16 *buf = (uint16_t *)data; u16 *buf = (uint16_t *)data;
__iowmb();
while (wordlen--) while (wordlen--)
__arch_putw(*buf++, addr); __arch_putw(*buf++, addr);
} }
@ -97,6 +121,8 @@ static inline void __raw_writesl(unsigned long addr, const void *data,
{ {
u32 *buf = (uint32_t *)data; u32 *buf = (uint32_t *)data;
__iowmb();
while (longlen--) while (longlen--)
__arch_putl(*buf++, addr); __arch_putl(*buf++, addr);
} }
@ -107,6 +133,8 @@ static inline void __raw_readsb(unsigned long addr, void *data, int bytelen)
while (bytelen--) while (bytelen--)
*buf++ = __arch_getb(addr); *buf++ = __arch_getb(addr);
__iormb();
} }
static inline void __raw_readsw(unsigned long addr, void *data, int wordlen) static inline void __raw_readsw(unsigned long addr, void *data, int wordlen)
@ -115,6 +143,8 @@ static inline void __raw_readsw(unsigned long addr, void *data, int wordlen)
while (wordlen--) while (wordlen--)
*buf++ = __arch_getw(addr); *buf++ = __arch_getw(addr);
__iormb();
} }
static inline void __raw_readsl(unsigned long addr, void *data, int longlen) static inline void __raw_readsl(unsigned long addr, void *data, int longlen)
@ -123,6 +153,8 @@ static inline void __raw_readsl(unsigned long addr, void *data, int longlen)
while (longlen--) while (longlen--)
*buf++ = __arch_getl(addr); *buf++ = __arch_getl(addr);
__iormb();
} }
/* /*
@ -130,21 +162,15 @@ static inline void __raw_readsl(unsigned long addr, void *data, int longlen)
* ordering rules but do not guarantee any ordering relative to Normal memory * ordering rules but do not guarantee any ordering relative to Normal memory
* accesses. * accesses.
*/ */
#define readb_relaxed(c) ({ u8 __r = __raw_readb(c); __r; }) #define readb_relaxed(c) ({ u8 __r = __arch_getb(c); __r; })
#define readw_relaxed(c) ({ u16 __r = le16_to_cpu((__force __le16) \ #define readw_relaxed(c) ({ u16 __r = le16_to_cpu((__force __le16)__arch_getw(c)); __r; })
__raw_readw(c)); __r; }) #define readl_relaxed(c) ({ u32 __r = le32_to_cpu((__force __le32)__arch_getl(c)); __r; })
#define readl_relaxed(c) ({ u32 __r = le32_to_cpu((__force __le32) \ #define readq_relaxed(c) ({ u64 __r = le64_to_cpu((__force __le64)__arch_getq(c)); __r; })
__raw_readl(c)); __r; })
#define readq_relaxed(c) ({ u64 __r = le64_to_cpu((__force __le64) \
__raw_readq(c)); __r; })
#define writeb_relaxed(v, c) ((void)__raw_writeb((v), (c))) #define writeb_relaxed(v, c) ((void)__arch_putb((v), (c)))
#define writew_relaxed(v, c) ((void)__raw_writew((__force u16) \ #define writew_relaxed(v, c) ((void)__arch_putw((__force u16)cpu_to_le16(v), (c)))
cpu_to_le16(v), (c))) #define writel_relaxed(v, c) ((void)__arch_putl((__force u32)cpu_to_le32(v), (c)))
#define writel_relaxed(v, c) ((void)__raw_writel((__force u32) \ #define writeq_relaxed(v, c) ((void)__arch_putq((__force u64)cpu_to_le64(v), (c)))
cpu_to_le32(v), (c)))
#define writeq_relaxed(v, c) ((void)__raw_writeq((__force u64) \
cpu_to_le64(v), (c)))
/* /*
* MMIO can also get buffered/optimized in micro-arch, so barriers needed * MMIO can also get buffered/optimized in micro-arch, so barriers needed

View File

@ -989,6 +989,8 @@ config ARCH_SUNXI
select USB_KEYBOARD if DISTRO_DEFAULTS select USB_KEYBOARD if DISTRO_DEFAULTS
select USB_STORAGE if DISTRO_DEFAULTS select USB_STORAGE if DISTRO_DEFAULTS
select SPL_USE_TINY_PRINTF select SPL_USE_TINY_PRINTF
select USE_PREBOOT
select SYS_RELOC_GD_ENV_ADDR
imply CMD_DM imply CMD_DM
imply CMD_GPT imply CMD_GPT
imply CMD_UBI if MTD_RAW_NAND imply CMD_UBI if MTD_RAW_NAND
@ -1366,6 +1368,7 @@ config TARGET_LS1028ARDB
select ARM64 select ARM64
select ARMV8_MULTIENTRY select ARMV8_MULTIENTRY
select ARCH_SUPPORT_TFABOOT select ARCH_SUPPORT_TFABOOT
select BOARD_LATE_INIT
help help
Support for Freescale LS1028ARDB platform Support for Freescale LS1028ARDB platform
The LS1028A Development System (RDB) is a high-performance The LS1028A Development System (RDB) is a high-performance

View File

@ -32,6 +32,8 @@ void sdelay(unsigned long loops)
"b.ne 1b" : "=r" (loops) : "0"(loops) : "cc"); "b.ne 1b" : "=r" (loops) : "0"(loops) : "cc");
} }
void __weak board_cleanup_before_linux(void){}
int cleanup_before_linux(void) int cleanup_before_linux(void)
{ {
/* /*
@ -40,6 +42,9 @@ int cleanup_before_linux(void)
* *
* disable interrupt and turn off caches etc ... * disable interrupt and turn off caches etc ...
*/ */
board_cleanup_before_linux();
disable_interrupts(); disable_interrupts();
/* /*

View File

@ -74,11 +74,11 @@ config ARCH_LS1043A
select SYS_FSL_HAS_DDR4 select SYS_FSL_HAS_DDR4
select ARCH_EARLY_INIT_R select ARCH_EARLY_INIT_R
select BOARD_EARLY_INIT_F select BOARD_EARLY_INIT_F
select SYS_I2C_MXC select SYS_I2C_MXC if !DM_I2C
select SYS_I2C_MXC_I2C1 select SYS_I2C_MXC_I2C1 if !DM_I2C
select SYS_I2C_MXC_I2C2 select SYS_I2C_MXC_I2C2 if !DM_I2C
select SYS_I2C_MXC_I2C3 select SYS_I2C_MXC_I2C3 if !DM_I2C
select SYS_I2C_MXC_I2C4 select SYS_I2C_MXC_I2C4 if !DM_I2C
imply CMD_PCI imply CMD_PCI
config ARCH_LS1046A config ARCH_LS1046A
@ -107,11 +107,11 @@ config ARCH_LS1046A
select SYS_FSL_SRDS_2 select SYS_FSL_SRDS_2
select ARCH_EARLY_INIT_R select ARCH_EARLY_INIT_R
select BOARD_EARLY_INIT_F select BOARD_EARLY_INIT_F
select SYS_I2C_MXC select SYS_I2C_MXC if !DM_I2C
select SYS_I2C_MXC_I2C1 select SYS_I2C_MXC_I2C1 if !DM_I2C
select SYS_I2C_MXC_I2C2 select SYS_I2C_MXC_I2C2 if !DM_I2C
select SYS_I2C_MXC_I2C3 select SYS_I2C_MXC_I2C3 if !DM_I2C
select SYS_I2C_MXC_I2C4 select SYS_I2C_MXC_I2C4 if !DM_I2C
imply SCSI imply SCSI
imply SCSI_AHCI imply SCSI_AHCI

View File

@ -180,7 +180,8 @@ dtb-$(CONFIG_TEGRA) += tegra20-harmony.dtb \
tegra210-e2220-1170.dtb \ tegra210-e2220-1170.dtb \
tegra210-p2371-0000.dtb \ tegra210-p2371-0000.dtb \
tegra210-p2371-2180.dtb \ tegra210-p2371-2180.dtb \
tegra210-p2571.dtb tegra210-p2571.dtb \
tegra210-p3450-0000.dtb
dtb-$(CONFIG_ARCH_MVEBU) += \ dtb-$(CONFIG_ARCH_MVEBU) += \
armada-3720-db.dtb \ armada-3720-db.dtb \
@ -276,6 +277,7 @@ dtb-$(CONFIG_ARCH_ZYNQMP) += \
zynqmp-zcu102-revA.dtb \ zynqmp-zcu102-revA.dtb \
zynqmp-zcu102-revB.dtb \ zynqmp-zcu102-revB.dtb \
zynqmp-zcu102-rev1.0.dtb \ zynqmp-zcu102-rev1.0.dtb \
zynqmp-zcu102-rev1.1.dtb \
zynqmp-zcu104-revA.dtb \ zynqmp-zcu104-revA.dtb \
zynqmp-zcu104-revC.dtb \ zynqmp-zcu104-revC.dtb \
zynqmp-zcu106-revA.dtb \ zynqmp-zcu106-revA.dtb \

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Avnet Ultra96 rev1 * dts file for Avnet Ultra96 rev1
* *
* (C) Copyright 2018, Xilinx, Inc. * (C) Copyright 2018 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */

View File

@ -49,6 +49,8 @@
compatible = "jedec,spi-nor"; compatible = "jedec,spi-nor";
spi-max-frequency = <50000000>; spi-max-frequency = <50000000>;
reg = <0>; reg = <0>;
spi-rx-bus-width = <8>;
spi-tx-bus-width = <1>;
}; };
}; };

View File

@ -48,6 +48,8 @@
compatible = "jedec,spi-nor"; compatible = "jedec,spi-nor";
spi-max-frequency = <50000000>; spi-max-frequency = <50000000>;
reg = <0>; reg = <0>;
spi-rx-bus-width = <8>;
spi-tx-bus-width = <1>;
}; };
}; };

View File

@ -32,3 +32,6 @@
}; };
&i2c0 {
status = "okay";
};

View File

@ -80,3 +80,7 @@
&sata { &sata {
status = "okay"; status = "okay";
}; };
&i2c0 {
status = "okay";
};

View File

@ -43,3 +43,11 @@
&sata { &sata {
status = "okay"; status = "okay";
}; };
&i2c0 {
status = "okay";
};
&i2c3 {
status = "okay";
};

View File

@ -13,6 +13,9 @@
/ { / {
model = "NXP Layerscape LX2160AQDS Board"; model = "NXP Layerscape LX2160AQDS Board";
compatible = "fsl,lx2160aqds", "fsl,lx2160a"; compatible = "fsl,lx2160aqds", "fsl,lx2160a";
aliases {
spi0 = &fspi;
};
}; };
&esdhc0 { &esdhc0 {
@ -46,6 +49,20 @@
}; };
}; };
&fspi {
status = "okay";
mt35xu512aba0: flash@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "jedec,spi-nor";
spi-max-frequency = <50000000>;
reg = <0>;
spi-rx-bus-width = <8>;
spi-tx-bus-width = <1>;
};
};
&sata0 { &sata0 {
status = "okay"; status = "okay";
}; };

View File

@ -39,6 +39,8 @@
compatible = "jedec,spi-nor"; compatible = "jedec,spi-nor";
spi-max-frequency = <50000000>; spi-max-frequency = <50000000>;
reg = <0>; reg = <0>;
spi-rx-bus-width = <8>;
spi-tx-bus-width = <1>;
}; };
mt35xu512aba1: flash@1 { mt35xu512aba1: flash@1 {
@ -47,6 +49,8 @@
compatible = "jedec,spi-nor"; compatible = "jedec,spi-nor";
spi-max-frequency = <50000000>; spi-max-frequency = <50000000>;
reg = <1>; reg = <1>;
spi-rx-bus-width = <8>;
spi-tx-bus-width = <1>;
}; };
}; };

View File

@ -8,6 +8,10 @@
#include "r8a7792-blanche.dts" #include "r8a7792-blanche.dts"
#include "r8a7792-u-boot.dtsi" #include "r8a7792-u-boot.dtsi"
&iic3 {
status = "okay";
};
&scif0 { &scif0 {
u-boot,dm-pre-reloc; u-boot,dm-pre-reloc;
}; };

View File

@ -444,6 +444,23 @@
status = "disabled"; status = "disabled";
}; };
iic3: i2c@e60b0000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "renesas,iic-r8a7792",
"renesas,rcar-gen2-iic",
"renesas,rmobile-iic";
reg = <0 0xe60b0000 0 0x425>;
interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cpg CPG_MOD 926>;
dmas = <&dmac0 0x77>, <&dmac0 0x78>,
<&dmac1 0x77>, <&dmac1 0x78>;
dma-names = "tx", "rx", "tx", "rx";
power-domains = <&sysc R8A7792_PD_ALWAYS_ON>;
resets = <&cpg 926>;
status = "disabled";
};
dmac0: dma-controller@e6700000 { dmac0: dma-controller@e6700000 {
compatible = "renesas,dmac-r8a7792", compatible = "renesas,dmac-r8a7792",
"renesas,rcar-dmac"; "renesas,rcar-dmac";

View File

@ -37,3 +37,6 @@
u-boot,dm-pre-reloc; u-boot,dm-pre-reloc;
}; };
&qspi {
status = "okay";
};

File diff suppressed because it is too large Load Diff

View File

@ -153,9 +153,12 @@
}; };
}; };
&sdmmc1_dir_pins_a { &sdmmc1_dir_pins_b {
u-boot,dm-spl; u-boot,dm-spl;
pins { pins1 {
u-boot,dm-spl;
};
pins2 {
u-boot,dm-spl; u-boot,dm-spl;
}; };
}; };
@ -174,7 +177,7 @@
}; };
}; };
&sdmmc2_d47_pins_a { &sdmmc2_d47_pins_b {
u-boot,dm-spl; u-boot,dm-spl;
pins { pins {
u-boot,dm-spl; u-boot,dm-spl;

View File

@ -8,6 +8,7 @@
#include "stm32mp157.dtsi" #include "stm32mp157.dtsi"
#include "stm32mp15-pinctrl.dtsi" #include "stm32mp15-pinctrl.dtsi"
#include "stm32mp157-pinctrl.dtsi"
#include "stm32mp15xxac-pinctrl.dtsi" #include "stm32mp15xxac-pinctrl.dtsi"
#include <dt-bindings/gpio/gpio.h> #include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/mfd/st,stpmic1.h> #include <dt-bindings/mfd/st,stpmic1.h>
@ -17,10 +18,12 @@
compatible = "arrow,stm32mp157a-avenger96", "st,stm32mp157"; compatible = "arrow,stm32mp157a-avenger96", "st,stm32mp157";
aliases { aliases {
eeprom0 = &eeprom0;
ethernet0 = &ethernet0; ethernet0 = &ethernet0;
mmc0 = &sdmmc1; mmc0 = &sdmmc1;
serial0 = &uart4; serial0 = &uart4;
serial1 = &uart7; serial1 = &uart7;
spi0 = &qspi;
}; };
chosen { chosen {
@ -77,16 +80,42 @@
default-state = "off"; default-state = "off";
}; };
}; };
sd_switch: regulator-sd_switch {
compatible = "regulator-gpio";
regulator-name = "sd_switch";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <2900000>;
regulator-type = "voltage";
regulator-always-on;
gpios = <&gpioi 5 GPIO_ACTIVE_HIGH>;
gpios-states = <0>;
states = <1800000 0x1>,
<2900000 0x0>;
};
/* Enpirion EP3A8LQI U2 on the DHCOR */
vdd_io: regulator-buck-io {
compatible = "regulator-fixed";
regulator-name = "buck-io";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
vin-supply = <&vdd>;
};
}; };
&ethernet0 { &ethernet0 {
status = "okay"; status = "okay";
pinctrl-0 = <&ethernet0_rgmii_pins_a>; pinctrl-0 = <&ethernet0_rgmii_pins_b>;
pinctrl-1 = <&ethernet0_rgmii_pins_sleep_a>; pinctrl-1 = <&ethernet0_rgmii_pins_sleep_b>;
pinctrl-names = "default", "sleep"; pinctrl-names = "default", "sleep";
phy-mode = "rgmii"; phy-mode = "rgmii";
max-speed = <1000>; max-speed = <1000>;
phy-handle = <&phy0>; phy-handle = <&phy0>;
phy-reset-gpios = <&gpioz 2 GPIO_ACTIVE_LOW>;
mdio0 { mdio0 {
#address-cells = <1>; #address-cells = <1>;
@ -152,7 +181,7 @@
vddcore: buck1 { vddcore: buck1 {
regulator-name = "vddcore"; regulator-name = "vddcore";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <800000>;
regulator-max-microvolt = <1350000>; regulator-max-microvolt = <1350000>;
regulator-always-on; regulator-always-on;
regulator-initial-mode = <0>; regulator-initial-mode = <0>;
@ -170,8 +199,8 @@
vdd: buck3 { vdd: buck3 {
regulator-name = "vdd"; regulator-name = "vdd";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <2900000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <2900000>;
regulator-always-on; regulator-always-on;
st,mask_reset; st,mask_reset;
regulator-initial-mode = <0>; regulator-initial-mode = <0>;
@ -253,6 +282,7 @@
regulator-name = "vbus_otg"; regulator-name = "vbus_otg";
interrupts = <IT_OCP_OTG 0>; interrupts = <IT_OCP_OTG 0>;
interrupt-parent = <&pmic>; interrupt-parent = <&pmic>;
regulator-active-discharge = <1>;
}; };
vbus_sw: pwr_sw2 { vbus_sw: pwr_sw2 {
@ -275,6 +305,12 @@
status = "disabled"; status = "disabled";
}; };
}; };
eeprom0: eeprom@53 {
compatible = "atmel,24c02";
reg = <0x53>;
pagesize = <16>;
};
}; };
&iwdg2 { &iwdg2 {
@ -283,10 +319,29 @@
}; };
&pwr_regulators { &pwr_regulators {
vdd-supply = <&vdd>; vdd-supply = <&vdd_io>;
vdd_3v3_usbfs-supply = <&vdd_usb>; vdd_3v3_usbfs-supply = <&vdd_usb>;
}; };
&qspi {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&qspi_clk_pins_a &qspi_bk1_pins_a>;
pinctrl-1 = <&qspi_clk_sleep_pins_a &qspi_bk1_sleep_pins_a>;
reg = <0x58003000 0x1000>, <0x70000000 0x200000>;
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
flash0: spi-flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-rx-bus-width = <4>;
spi-max-frequency = <108000000>;
#address-cells = <1>;
#size-cells = <1>;
};
};
&rng1 { &rng1 {
status = "okay"; status = "okay";
}; };
@ -297,21 +352,24 @@
&sdmmc1 { &sdmmc1 {
pinctrl-names = "default", "opendrain", "sleep"; pinctrl-names = "default", "opendrain", "sleep";
pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_dir_pins_a>; pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_dir_pins_b>;
pinctrl-1 = <&sdmmc1_b4_od_pins_a>; pinctrl-1 = <&sdmmc1_b4_od_pins_a &sdmmc1_dir_pins_b>;
pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>; pinctrl-2 = <&sdmmc1_b4_sleep_pins_a &sdmmc1_dir_sleep_pins_b>;
broken-cd; cd-gpios = <&gpioi 8 GPIO_ACTIVE_LOW>;
disable-wp;
st,sig-dir; st,sig-dir;
st,neg-edge; st,neg-edge;
st,use-ckin; st,use-ckin;
sd-uhs-sdr104;
bus-width = <4>; bus-width = <4>;
vmmc-supply = <&vdd_sd>; vmmc-supply = <&vdd_sd>;
vqmmc-supply = <&sd_switch>;
status = "okay"; status = "okay";
}; };
&sdmmc2 { &sdmmc2 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_a>; pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_b>;
non-removable; non-removable;
no-sd; no-sd;
no-sdio; no-sdio;

View File

@ -12,6 +12,10 @@
#include <dt-bindings/mfd/st,stpmic1.h> #include <dt-bindings/mfd/st,stpmic1.h>
/ { / {
aliases {
eeprom0 = &eeprom0;
};
memory@c0000000 { memory@c0000000 {
device_type = "memory"; device_type = "memory";
reg = <0xC0000000 0x40000000>; reg = <0xC0000000 0x40000000>;
@ -189,7 +193,7 @@
}; };
}; };
eeprom@50 { eeprom0: eeprom@50 {
compatible = "atmel,24c02"; compatible = "atmel,24c02";
reg = <0x50>; reg = <0x50>;
pagesize = <16>; pagesize = <16>;

View File

@ -12,6 +12,8 @@
aliases { aliases {
i2c0 = "/i2c@7000d000"; i2c0 = "/i2c@7000d000";
i2c2 = "/i2c@7000c400";
i2c3 = "/i2c@7000c500";
mmc0 = "/sdhci@700b0600"; mmc0 = "/sdhci@700b0600";
mmc1 = "/sdhci@700b0000"; mmc1 = "/sdhci@700b0000";
usb0 = "/usb@7d000000"; usb0 = "/usb@7d000000";
@ -85,6 +87,16 @@
non-removable; non-removable;
}; };
i2c@7000c400 {
status = "okay";
clock-frequency = <400000>;
};
i2c@7000c500 {
status = "okay";
clock-frequency = <400000>;
};
i2c@7000d000 { i2c@7000d000 {
status = "okay"; status = "okay";
clock-frequency = <400000>; clock-frequency = <400000>;

View File

@ -0,0 +1,147 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* (C) Copyright 2019-2020 NVIDIA Corporation <www.nvidia.com>
*/
/dts-v1/;
#include "tegra210.dtsi"
/ {
model = "NVIDIA Jetson Nano Developer Kit";
compatible = "nvidia,p3450-0000", "nvidia,tegra210";
chosen {
stdout-path = &uarta;
};
aliases {
ethernet = "/pcie@1003000/pci@2,0/ethernet@0,0";
i2c0 = "/i2c@7000d000";
i2c2 = "/i2c@7000c400";
i2c3 = "/i2c@7000c500";
i2c4 = "/i2c@7000c700";
mmc0 = "/sdhci@700b0600";
mmc1 = "/sdhci@700b0000";
spi0 = "/spi@70410000";
usb0 = "/usb@7d000000";
};
memory {
reg = <0x0 0x80000000 0x0 0xc0000000>;
};
pcie@1003000 {
status = "okay";
pci@1,0 {
status = "okay";
};
pci@2,0 {
status = "okay";
ethernet@0,0 {
reg = <0x000000 0 0 0 0>;
local-mac-address = [ 00 00 00 00 00 00 ];
};
};
};
serial@70006000 {
status = "okay";
};
padctl@7009f000 {
pinctrl-0 = <&padctl_default>;
pinctrl-names = "default";
padctl_default: pinmux {
xusb {
nvidia,lanes = "otg-1", "otg-2";
nvidia,function = "xusb";
nvidia,iddq = <0>;
};
usb3 {
nvidia,lanes = "pcie-5", "pcie-6";
nvidia,function = "usb3";
nvidia,iddq = <0>;
};
pcie-x1 {
nvidia,lanes = "pcie-0";
nvidia,function = "pcie-x1";
nvidia,iddq = <0>;
};
pcie-x4 {
nvidia,lanes = "pcie-1", "pcie-2",
"pcie-3", "pcie-4";
nvidia,function = "pcie-x4";
nvidia,iddq = <0>;
};
sata {
nvidia,lanes = "sata-0";
nvidia,function = "sata";
nvidia,iddq = <0>;
};
};
};
sdhci@700b0000 {
status = "okay";
cd-gpios = <&gpio TEGRA_GPIO(Z, 1) GPIO_ACTIVE_LOW>;
power-gpios = <&gpio TEGRA_GPIO(Z, 3) GPIO_ACTIVE_HIGH>;
bus-width = <4>;
};
sdhci@700b0600 {
status = "okay";
bus-width = <8>;
non-removable;
};
i2c@7000c400 {
status = "okay";
clock-frequency = <400000>;
};
i2c@7000c500 {
status = "okay";
clock-frequency = <400000>;
};
i2c@7000c700 {
status = "okay";
clock-frequency = <400000>;
};
i2c@7000d000 {
status = "okay";
clock-frequency = <400000>;
};
spi@70410000 {
status = "okay";
spi-max-frequency = <80000000>;
};
usb@7d000000 {
status = "okay";
dr_mode = "peripheral";
};
clocks {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
clk32k_in: clock@0 {
compatible = "fixed-clock";
reg = <0>;
#clock-cells = <0>;
clock-frequency = <32768>;
};
};
};

View File

@ -5,7 +5,6 @@
* Copyright (C) 2018 Xilinx, Inc. * Copyright (C) 2018 Xilinx, Inc.
*/ */
/dts-v1/; /dts-v1/;
#include "zynq-7000.dtsi"
/ { / {
#address-cells = <1>; #address-cells = <1>;
@ -33,27 +32,21 @@
}; };
amba: amba { amba: amba {
u-boot,dm-pre-reloc;
compatible = "simple-bus"; compatible = "simple-bus";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
interrupt-parent = <&intc>;
ranges; ranges;
intc: interrupt-controller@f8f01000 {
compatible = "arm,cortex-a9-gic";
#interrupt-cells = <3>;
interrupt-controller;
reg = <0xF8F01000 0x1000>,
<0xF8F00100 0x100>;
};
slcr: slcr@f8000000 { slcr: slcr@f8000000 {
u-boot,dm-pre-reloc;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
compatible = "xlnx,zynq-slcr", "syscon", "simple-bus"; compatible = "xlnx,zynq-slcr", "syscon", "simple-bus";
reg = <0xF8000000 0x1000>; reg = <0xF8000000 0x1000>;
ranges; ranges;
clkc: clkc@100 { clkc: clkc@100 {
u-boot,dm-pre-reloc;
#clock-cells = <1>; #clock-cells = <1>;
compatible = "xlnx,ps7-clkc"; compatible = "xlnx,ps7-clkc";
clock-output-names = "armpll", "ddrpll", clock-output-names = "armpll", "ddrpll",
@ -78,6 +71,20 @@
reg = <0x100 0x100>; reg = <0x100 0x100>;
}; };
}; };
/*
* This is partially hack because it is normally subnode of smcc
* but for mini U-Boot there is no reason to enable SMCC driver
* which does almost nothing in NOR flash configuration that's
* why place cfi-flash directly here.
*/
flash@e2000000 {
u-boot,dm-pre-reloc;
compatible = "cfi-flash";
reg = <0xe2000000 0x2000000>;
#address-cells = <1>;
#size-cells = <1>;
};
}; };
}; };

View File

@ -67,23 +67,23 @@
spi-max-frequency = <50000000>; spi-max-frequency = <50000000>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
partition@qspi-fsbl-uboot { partition@0 {
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { partition@100000 {
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { partition@600000 {
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { partition@620000 {
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };
partition@qspi-bitstream { partition@c00000 {
label = "qspi-bitstream"; label = "qspi-bitstream";
reg = <0xC00000 0x400000>; reg = <0xC00000 0x400000>;
}; };

View File

@ -44,23 +44,23 @@
spi-max-frequency = <100000000>; spi-max-frequency = <100000000>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
partition@qspi-u-boot-spl { partition@0 {
label = "qspi-u-boot-spl"; label = "qspi-u-boot-spl";
reg = <0x00000 0x10000>; reg = <0x00000 0x10000>;
}; };
partition@qspi-u-boot-img { partition@10000 {
label = "qspi-u-boot-img"; label = "qspi-u-boot-img";
reg = <0x10000 0x60000>; reg = <0x10000 0x60000>;
}; };
partition@qspi-device-tree { partition@70000 {
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x70000 0x10000>; reg = <0x70000 0x10000>;
}; };
partition@qspi-linux { partition@80000 {
label = "qspi-linux"; label = "qspi-linux";
reg = <0x80000 0x400000>; reg = <0x80000 0x400000>;
}; };
partition@qspi-rootfs { partition@480000 {
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x480000 0x1b80000>; reg = <0x480000 0x1b80000>;
}; };

View File

@ -181,17 +181,17 @@
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
reg = <7>; reg = <7>;
hwmon@52 { hwmon@34 {
compatible = "ti,ucd9248"; compatible = "ti,ucd9248";
reg = <52>; reg = <0x34>;
}; };
hwmon@53 { hwmon@35 {
compatible = "ti,ucd9248"; compatible = "ti,ucd9248";
reg = <53>; reg = <0x35>;
}; };
hwmon@54 { hwmon@36 {
compatible = "ti,ucd9248"; compatible = "ti,ucd9248";
reg = <54>; reg = <0x36>;
}; };
}; };
}; };

View File

@ -72,7 +72,7 @@
status = "okay"; status = "okay";
num-cs = <4>; num-cs = <4>;
is-decoded-cs = <0>; is-decoded-cs = <0>;
flash@0 { flash@1 {
compatible = "sst25wf080", "jedec,spi-nor"; compatible = "sst25wf080", "jedec,spi-nor";
reg = <1>; reg = <1>;
spi-max-frequency = <1000000>; spi-max-frequency = <1000000>;

View File

@ -1 +0,0 @@
zynq-zc770-xm011.dts

View File

@ -0,0 +1,11 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Xilinx ZC770 XM011 board DTS with NAND x16
*
* Copyright (C) 2013-2018 Xilinx, Inc.
*/
#include "zynq-zc770-xm011.dts"
/ {
model = "Xilinx ZC770 XM011 board (NAND x16)";
};

View File

@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0+ // SPDX-License-Identifier: GPL-2.0+
/* /*
* Xilinx ZC770 XM013 board DTS * Xilinx ZC770 XM011 board DTS
* *
* Copyright (C) 2013-2018 Xilinx, Inc. * Copyright (C) 2013-2018 Xilinx, Inc.
*/ */

View File

@ -67,7 +67,7 @@
status = "okay"; status = "okay";
num-cs = <4>; num-cs = <4>;
is-decoded-cs = <0>; is-decoded-cs = <0>;
eeprom: eeprom@0 { eeprom: eeprom@2 {
at25,byte-len = <8192>; at25,byte-len = <8192>;
at25,addr-mode = <2>; at25,addr-mode = <2>;
at25,page-size = <32>; at25,page-size = <32>;

View File

@ -54,7 +54,7 @@
label = "K1"; label = "K1";
gpios = <&gpio0 0x32 0x1>; gpios = <&gpio0 0x32 0x1>;
linux,code = <0x66>; linux,code = <0x66>;
gpio-key,wakeup; wakeup-source;
autorepeat; autorepeat;
}; };
}; };

View File

@ -2,7 +2,7 @@
/* /*
* Clock specification for Xilinx ZynqMP * Clock specification for Xilinx ZynqMP
* *
* (C) Copyright 2017 - 2019, Xilinx, Inc. * (C) Copyright 2017 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -284,10 +284,18 @@
clocks = <&zynqmp_clk AMS_REF>; clocks = <&zynqmp_clk AMS_REF>;
}; };
&zynqmp_dpsub {
clocks = <&dp_aclk>, <&zynqmp_clk DP_AUDIO_REF>, <&zynqmp_clk DP_VIDEO_REF>;
};
&xlnx_dpdma { &xlnx_dpdma {
clocks = <&zynqmp_clk DPDMA_REF>; clocks = <&zynqmp_clk DPDMA_REF>;
}; };
&xlnx_dp_snd_codec0 { &zynqmp_dp_snd_codec0 {
clocks = <&zynqmp_clk DP_AUDIO_REF>; clocks = <&zynqmp_clk DP_AUDIO_REF>;
}; };
&zynqmp_pcap {
clocks = <&zynqmp_clk PCAP>;
};

View File

@ -1,244 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Clock specification for Xilinx ZynqMP
*
* (C) Copyright 2015 - 2018, Xilinx, Inc.
*
* Michal Simek <michal.simek@xilinx.com>
*/
/ {
clk100: clk100 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <100000000>;
u-boot,dm-pre-reloc;
};
clk125: clk125 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <125000000>;
};
clk200: clk200 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <200000000>;
u-boot,dm-pre-reloc;
};
clk250: clk250 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <250000000>;
};
clk300: clk300 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <300000000>;
u-boot,dm-pre-reloc;
};
clk600: clk600 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <600000000>;
};
dp_aclk: clock0 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <100000000>;
clock-accuracy = <100>;
};
dp_aud_clk: clock1 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <24576000>;
clock-accuracy = <100>;
};
dpdma_clk: dpdma-clk {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <533000000>;
};
drm_clock: drm-clock {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <262750000>;
clock-accuracy = <0x64>;
};
};
&can0 {
clocks = <&clk100 &clk100>;
};
&can1 {
clocks = <&clk100 &clk100>;
};
&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>;
};
&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>;
};
&gem0 {
clocks = <&clk125>, <&clk125>, <&clk125>;
};
&gem1 {
clocks = <&clk125>, <&clk125>, <&clk125>;
};
&gem2 {
clocks = <&clk125>, <&clk125>, <&clk125>;
};
&gem3 {
clocks = <&clk125>, <&clk125>, <&clk125>;
};
&gpio {
clocks = <&clk100>;
};
&i2c0 {
clocks = <&clk100>;
};
&i2c1 {
clocks = <&clk100>;
};
&qspi {
clocks = <&clk300 &clk300>;
};
&sata {
clocks = <&clk250>;
};
&sdhci0 {
clocks = <&clk200 &clk200>;
};
&sdhci1 {
clocks = <&clk200 &clk200>;
};
&spi0 {
clocks = <&clk200 &clk200>;
};
&spi1 {
clocks = <&clk200 &clk200>;
};
&uart0 {
clocks = <&clk100 &clk100>;
};
&uart1 {
clocks = <&clk100 &clk100>;
};
&usb0 {
clocks = <&clk250>, <&clk250>;
};
&usb1 {
clocks = <&clk250>, <&clk250>;
};
&watchdog0 {
clocks = <&clk100>;
};
&lpd_watchdog {
clocks = <&clk250>;
};
&xilinx_drm {
clocks = <&drm_clock>;
};
&xlnx_dp {
clocks = <&dp_aclk>, <&dp_aud_clk>;
};
&xlnx_dpdma {
clocks = <&dpdma_clk>;
};
&xlnx_dp_snd_codec0 {
clocks = <&dp_aud_clk>;
};

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP Mini Configuration * dts file for Xilinx ZynqMP Mini Configuration
* *
* (C) Copyright 2015 - 2018, Xilinx, Inc. * (C) Copyright 2015 - 2020, Xilinx, Inc.
* *
* Siva Durga Prasad <siva.durga.paladugu@xilinx.com> * Siva Durga Prasad <siva.durga.paladugu@xilinx.com>
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZC1232 * dts file for Xilinx ZynqMP ZC1232
* *
* (C) Copyright 2017 - 2018, Xilinx, Inc. * (C) Copyright 2017 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -48,19 +48,19 @@
spi-tx-bus-width = <1>; spi-tx-bus-width = <1>;
spi-rx-bus-width = <4>; spi-rx-bus-width = <4>;
spi-max-frequency = <108000000>; /* Based on DC1 spec */ spi-max-frequency = <108000000>; /* Based on DC1 spec */
partition@qspi-fsbl-uboot { /* for testing purpose */ partition@0 { /* for testing purpose */
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { /* for testing purpose */ partition@100000 { /* for testing purpose */
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { /* for testing purpose */ partition@600000 { /* for testing purpose */
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { /* for testing purpose */ partition@620000 { /* for testing purpose */
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZC1254 * dts file for Xilinx ZynqMP ZC1254
* *
* (C) Copyright 2015 - 2018, Xilinx, Inc. * (C) Copyright 2015 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
* Siva Durga Prasad Paladugu <sivadur@xilinx.com> * Siva Durga Prasad Paladugu <sivadur@xilinx.com>
@ -48,19 +48,19 @@
spi-tx-bus-width = <1>; spi-tx-bus-width = <1>;
spi-rx-bus-width = <4>; /* FIXME also DUAL configuration possible */ spi-rx-bus-width = <4>; /* FIXME also DUAL configuration possible */
spi-max-frequency = <108000000>; /* Based on DC1 spec */ spi-max-frequency = <108000000>; /* Based on DC1 spec */
partition@qspi-fsbl-uboot { /* for testing purpose */ partition@0 { /* for testing purpose */
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { /* for testing purpose */ partition@100000 { /* for testing purpose */
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { /* for testing purpose */ partition@600000 { /* for testing purpose */
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { /* for testing purpose */ partition@620000 { /* for testing purpose */
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP zc1751-xm015-dc1 * dts file for Xilinx ZynqMP zc1751-xm015-dc1
* *
* (C) Copyright 2015 - 2018, Xilinx, Inc. * (C) Copyright 2015 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -108,19 +108,19 @@
spi-tx-bus-width = <1>; spi-tx-bus-width = <1>;
spi-rx-bus-width = <4>; spi-rx-bus-width = <4>;
spi-max-frequency = <108000000>; /* Based on DC1 spec */ spi-max-frequency = <108000000>; /* Based on DC1 spec */
partition@qspi-fsbl-uboot { /* for testing purpose */ partition@0 { /* for testing purpose */
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { /* for testing purpose */ partition@100000 { /* for testing purpose */
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { /* for testing purpose */ partition@600000 { /* for testing purpose */
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { /* for testing purpose */ partition@620000 { /* for testing purpose */
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };
@ -154,7 +154,10 @@
/* SD1 with level shifter */ /* SD1 with level shifter */
&sdhci1 { &sdhci1 {
status = "okay"; status = "okay";
no-1-8-v; /* for 1.0 silicon */ /*
* This property should be removed for supporting UHS mode
*/
no-1-8-v;
xlnx,mio_bank = <1>; xlnx,mio_bank = <1>;
}; };
@ -172,32 +175,23 @@
dr_mode = "host"; dr_mode = "host";
}; };
&xilinx_drm { &zynqmp_dpsub {
status = "okay"; status = "okay";
}; };
&xlnx_dp { &zynqmp_dp_snd_pcm0 {
status = "okay"; status = "okay";
}; };
&xlnx_dp_sub { &zynqmp_dp_snd_pcm1 {
status = "okay";
xlnx,vid-clk-pl;
};
&xlnx_dp_snd_pcm0 {
status = "okay"; status = "okay";
}; };
&xlnx_dp_snd_pcm1 { &zynqmp_dp_snd_card0 {
status = "okay"; status = "okay";
}; };
&xlnx_dp_snd_card { &zynqmp_dp_snd_codec0 {
status = "okay";
};
&xlnx_dp_snd_codec0 {
status = "okay"; status = "okay";
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP zc1751-xm016-dc2 * dts file for Xilinx ZynqMP zc1751-xm016-dc2
* *
* (C) Copyright 2015 - 2018, Xilinx, Inc. * (C) Copyright 2015 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -197,7 +197,7 @@
reg = <0>; reg = <0>;
partition@0 { partition@0 {
label = "data"; label = "spi0-data";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
}; };
@ -214,7 +214,7 @@
reg = <0>; reg = <0>;
partition@0 { partition@0 {
label = "data"; label = "spi1-data";
reg = <0x0 0x84000>; reg = <0x0 0x84000>;
}; };
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP zc1751-xm017-dc3 * dts file for Xilinx ZynqMP zc1751-xm017-dc3
* *
* (C) Copyright 2016 - 2018, Xilinx, Inc. * (C) Copyright 2016 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP zc1751-xm018-dc4 * dts file for Xilinx ZynqMP zc1751-xm018-dc4
* *
* (C) Copyright 2015 - 2018, Xilinx, Inc. * (C) Copyright 2015 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -115,7 +115,7 @@
status = "okay"; status = "okay";
}; };
&xlnx_dp { &zynqmp_dpsub {
status = "okay"; status = "okay";
}; };
@ -187,19 +187,19 @@
spi-tx-bus-width = <1>; spi-tx-bus-width = <1>;
spi-rx-bus-width = <4>; /* also DUAL configuration possible */ spi-rx-bus-width = <4>; /* also DUAL configuration possible */
spi-max-frequency = <108000000>; /* Based on DC1 spec */ spi-max-frequency = <108000000>; /* Based on DC1 spec */
partition@qspi-fsbl-uboot { /* for testing purpose */ partition@0 { /* for testing purpose */
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { /* for testing purpose */ partition@100000 { /* for testing purpose */
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { /* for testing purpose */ partition@600000 { /* for testing purpose */
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { /* for testing purpose */ partition@620000 { /* for testing purpose */
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP zc1751-xm019-dc5 * dts file for Xilinx ZynqMP zc1751-xm019-dc5
* *
* (C) Copyright 2015 - 2018, Xilinx, Inc. * (C) Copyright 2015 - 2020, Xilinx, Inc.
* *
* Siva Durga Prasad <siva.durga.paladugu@xilinx.com> * Siva Durga Prasad <siva.durga.paladugu@xilinx.com>
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU100 revC * dts file for Xilinx ZynqMP ZCU100 revC
* *
* (C) Copyright 2016 - 2018, Xilinx, Inc. * (C) Copyright 2016 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
* Nathalie Chan King Choy * Nathalie Chan King Choy

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU102 Rev1.0 * dts file for Xilinx ZynqMP ZCU102 Rev1.0
* *
* (C) Copyright 2016 - 2018, Xilinx, Inc. * (C) Copyright 2016 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -34,7 +34,3 @@
reg = <0xe0 0x3>; reg = <0xe0 0x3>;
}; };
}; };
&sdhci1 {
/delete-property/ no-1-8-v;
};

View File

@ -0,0 +1,15 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* dts file for Xilinx ZynqMP ZCU102 Rev1.1
*
* (C) Copyright 2016 - 2020, Xilinx, Inc.
*
* Michal Simek <michal.simek@xilinx.com>
*/
#include "zynqmp-zcu102-rev1.0.dts"
/ {
model = "ZynqMP ZCU102 Rev1.1";
compatible = "xlnx,zynqmp-zcu102-rev1.1", "xlnx,zynqmp-zcu102", "xlnx,zynqmp";
};

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU102 RevA * dts file for Xilinx ZynqMP ZCU102 RevA
* *
* (C) Copyright 2015 - 2018, Xilinx, Inc. * (C) Copyright 2015 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -614,19 +614,19 @@
spi-tx-bus-width = <1>; spi-tx-bus-width = <1>;
spi-rx-bus-width = <4>; /* FIXME also DUAL configuration possible */ spi-rx-bus-width = <4>; /* FIXME also DUAL configuration possible */
spi-max-frequency = <108000000>; /* Based on DC1 spec */ spi-max-frequency = <108000000>; /* Based on DC1 spec */
partition@qspi-fsbl-uboot { /* for testing purpose */ partition@0 { /* for testing purpose */
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { /* for testing purpose */ partition@100000 { /* for testing purpose */
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { /* for testing purpose */ partition@600000 { /* for testing purpose */
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { /* for testing purpose */ partition@620000 { /* for testing purpose */
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };
@ -655,7 +655,11 @@
/* SD1 with level shifter */ /* SD1 with level shifter */
&sdhci1 { &sdhci1 {
status = "okay"; status = "okay";
no-1-8-v; /* for 1.0 silicon */ /*
* 1.0 revision has level shifter and this property should be
* removed for supporting UHS mode
*/
no-1-8-v;
xlnx,mio_bank = <1>; xlnx,mio_bank = <1>;
}; };
@ -701,33 +705,23 @@
status = "okay"; status = "okay";
}; };
&xilinx_drm { &zynqmp_dpsub {
status = "okay";
clocks = <&si570_1>;
};
&xlnx_dp {
status = "okay"; status = "okay";
}; };
&xlnx_dp_sub { &zynqmp_dp_snd_codec0 {
status = "okay";
xlnx,vid-clk-pl;
};
&xlnx_dp_snd_pcm0 {
status = "okay"; status = "okay";
}; };
&xlnx_dp_snd_pcm1 { &zynqmp_dp_snd_pcm0 {
status = "okay"; status = "okay";
}; };
&xlnx_dp_snd_card { &zynqmp_dp_snd_pcm1 {
status = "okay"; status = "okay";
}; };
&xlnx_dp_snd_codec0 { &zynqmp_dp_snd_card0 {
status = "okay"; status = "okay";
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU102 RevB * dts file for Xilinx ZynqMP ZCU102 RevB
* *
* (C) Copyright 2016 - 2018, Xilinx, Inc. * (C) Copyright 2016 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU104 * dts file for Xilinx ZynqMP ZCU104
* *
* (C) Copyright 2017 - 2018, Xilinx, Inc. * (C) Copyright 2017 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -209,19 +209,19 @@
spi-tx-bus-width = <1>; spi-tx-bus-width = <1>;
spi-rx-bus-width = <4>; spi-rx-bus-width = <4>;
spi-max-frequency = <108000000>; /* Based on DC1 spec */ spi-max-frequency = <108000000>; /* Based on DC1 spec */
partition@qspi-fsbl-uboot { /* for testing purpose */ partition@0 { /* for testing purpose */
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { /* for testing purpose */ partition@100000 { /* for testing purpose */
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { /* for testing purpose */ partition@600000 { /* for testing purpose */
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { /* for testing purpose */ partition@620000 { /* for testing purpose */
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU104 * dts file for Xilinx ZynqMP ZCU104
* *
* (C) Copyright 2017 - 2018, Xilinx, Inc. * (C) Copyright 2017 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -222,19 +222,19 @@
spi-tx-bus-width = <1>; spi-tx-bus-width = <1>;
spi-rx-bus-width = <4>; spi-rx-bus-width = <4>;
spi-max-frequency = <108000000>; /* Based on DC1 spec */ spi-max-frequency = <108000000>; /* Based on DC1 spec */
partition@qspi-fsbl-uboot { /* for testing purpose */ partition@0 { /* for testing purpose */
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { /* for testing purpose */ partition@100000 { /* for testing purpose */
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { /* for testing purpose */ partition@600000 { /* for testing purpose */
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { /* for testing purpose */ partition@620000 { /* for testing purpose */
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU106 * dts file for Xilinx ZynqMP ZCU106
* *
* (C) Copyright 2016, Xilinx, Inc. * (C) Copyright 2016 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -612,19 +612,19 @@
spi-tx-bus-width = <1>; spi-tx-bus-width = <1>;
spi-rx-bus-width = <4>; /* FIXME also DUAL configuration possible */ spi-rx-bus-width = <4>; /* FIXME also DUAL configuration possible */
spi-max-frequency = <108000000>; /* Based on DC1 spec */ spi-max-frequency = <108000000>; /* Based on DC1 spec */
partition@qspi-fsbl-uboot { /* for testing purpose */ partition@0 { /* for testing purpose */
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { /* for testing purpose */ partition@100000 { /* for testing purpose */
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { /* for testing purpose */ partition@600000 { /* for testing purpose */
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { /* for testing purpose */ partition@620000 { /* for testing purpose */
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };
@ -653,6 +653,10 @@
/* SD1 with level shifter */ /* SD1 with level shifter */
&sdhci1 { &sdhci1 {
status = "okay"; status = "okay";
/*
* This property should be removed for supporting UHS mode
*/
no-1-8-v;
xlnx,mio_bank = <1>; xlnx,mio_bank = <1>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU111 * dts file for Xilinx ZynqMP ZCU111
* *
* (C) Copyright 2017 - 2018, Xilinx, Inc. * (C) Copyright 2017 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -525,19 +525,19 @@
spi-tx-bus-width = <1>; spi-tx-bus-width = <1>;
spi-rx-bus-width = <4>; /* FIXME also DUAL configuration possible */ spi-rx-bus-width = <4>; /* FIXME also DUAL configuration possible */
spi-max-frequency = <108000000>; /* Based on DC1 spec */ spi-max-frequency = <108000000>; /* Based on DC1 spec */
partition@qspi-fsbl-uboot { /* for testing purpose */ partition@0 { /* for testing purpose */
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { /* for testing purpose */ partition@100000 { /* for testing purpose */
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { /* for testing purpose */ partition@600000 { /* for testing purpose */
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { /* for testing purpose */ partition@620000 { /* for testing purpose */
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };
@ -567,6 +567,10 @@
&sdhci1 { &sdhci1 {
status = "okay"; status = "okay";
disable-wp; disable-wp;
/*
* This property should be removed for supporting UHS mode
*/
no-1-8-v;
xlnx,mio_bank = <1>; xlnx,mio_bank = <1>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU1275 * dts file for Xilinx ZynqMP ZCU1275
* *
* (C) Copyright 2017 - 2018, Xilinx, Inc. * (C) Copyright 2017 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
* Siva Durga Prasad Paladugu <sivadur@xilinx.com> * Siva Durga Prasad Paladugu <sivadur@xilinx.com>
@ -49,19 +49,19 @@
spi-tx-bus-width = <1>; spi-tx-bus-width = <1>;
spi-rx-bus-width = <4>; /* FIXME also DUAL configuration possible */ spi-rx-bus-width = <4>; /* FIXME also DUAL configuration possible */
spi-max-frequency = <108000000>; /* Based on DC1 spec */ spi-max-frequency = <108000000>; /* Based on DC1 spec */
partition@qspi-fsbl-uboot { /* for testing purpose */ partition@0 { /* for testing purpose */
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { /* for testing purpose */ partition@100000 { /* for testing purpose */
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { /* for testing purpose */ partition@600000 { /* for testing purpose */
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { /* for testing purpose */ partition@620000 { /* for testing purpose */
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU1275 RevB * dts file for Xilinx ZynqMP ZCU1275 RevB
* *
* (C) Copyright 2018, Xilinx, Inc. * (C) Copyright 2018 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
* Siva Durga Prasad Paladugu <sivadur@xilinx.com> * Siva Durga Prasad Paladugu <sivadur@xilinx.com>
@ -50,19 +50,19 @@
spi-tx-bus-width = <1>; spi-tx-bus-width = <1>;
spi-rx-bus-width = <1>; spi-rx-bus-width = <1>;
spi-max-frequency = <108000000>; /* Based on DC1 spec */ spi-max-frequency = <108000000>; /* Based on DC1 spec */
partition@qspi-fsbl-uboot { /* for testing purpose */ partition@0 { /* for testing purpose */
label = "qspi-fsbl-uboot"; label = "qspi-fsbl-uboot";
reg = <0x0 0x100000>; reg = <0x0 0x100000>;
}; };
partition@qspi-linux { /* for testing purpose */ partition@100000 { /* for testing purpose */
label = "qspi-linux"; label = "qspi-linux";
reg = <0x100000 0x500000>; reg = <0x100000 0x500000>;
}; };
partition@qspi-device-tree { /* for testing purpose */ partition@600000 { /* for testing purpose */
label = "qspi-device-tree"; label = "qspi-device-tree";
reg = <0x600000 0x20000>; reg = <0x600000 0x20000>;
}; };
partition@qspi-rootfs { /* for testing purpose */ partition@620000 { /* for testing purpose */
label = "qspi-rootfs"; label = "qspi-rootfs";
reg = <0x620000 0x5E0000>; reg = <0x620000 0x5E0000>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU1285 RevA * dts file for Xilinx ZynqMP ZCU1285 RevA
* *
* (C) Copyright 2018 - 2019, Xilinx, Inc. * (C) Copyright 2018 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
* Siva Durga Prasad Paladugu <sivadur@xilinx.com> * Siva Durga Prasad Paladugu <sivadur@xilinx.com>
@ -241,5 +241,9 @@
&sdhci1 { &sdhci1 {
status = "okay"; status = "okay";
/*
* This property should be removed for supporting UHS mode
*/
no-1-8-v;
xlnx,mio_bank = <1>; xlnx,mio_bank = <1>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU208 * dts file for Xilinx ZynqMP ZCU208
* *
* (C) Copyright 2017 - 2019, Xilinx, Inc. * (C) Copyright 2017 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -50,7 +50,7 @@
label = "sw19"; label = "sw19";
gpios = <&gpio 22 GPIO_ACTIVE_HIGH>; gpios = <&gpio 22 GPIO_ACTIVE_HIGH>;
linux,code = <KEY_DOWN>; linux,code = <KEY_DOWN>;
gpio-key,wakeup; wakeup-source;
autorepeat; autorepeat;
}; };
}; };
@ -563,6 +563,10 @@
&sdhci1 { &sdhci1 {
status = "okay"; status = "okay";
disable-wp; disable-wp;
/*
* This property should be removed for supporting UHS mode
*/
no-1-8-v;
xlnx,mio_bank = <1>; xlnx,mio_bank = <1>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP ZCU216 * dts file for Xilinx ZynqMP ZCU216
* *
* (C) Copyright 2017 - 2019, Xilinx, Inc. * (C) Copyright 2017 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
*/ */
@ -50,7 +50,7 @@
label = "sw19"; label = "sw19";
gpios = <&gpio 22 GPIO_ACTIVE_HIGH>; gpios = <&gpio 22 GPIO_ACTIVE_HIGH>;
linux,code = <KEY_DOWN>; linux,code = <KEY_DOWN>;
gpio-key,wakeup; wakeup-source;
autorepeat; autorepeat;
}; };
}; };
@ -567,6 +567,10 @@
&sdhci1 { &sdhci1 {
status = "okay"; status = "okay";
disable-wp; disable-wp;
/*
* This property should be removed for supporting UHS mode
*/
no-1-8-v;
xlnx,mio_bank = <1>; xlnx,mio_bank = <1>;
}; };

View File

@ -2,7 +2,7 @@
/* /*
* dts file for Xilinx ZynqMP * dts file for Xilinx ZynqMP
* *
* (C) Copyright 2014 - 2015, Xilinx, Inc. * (C) Copyright 2014 - 2020, Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
* *
@ -149,6 +149,11 @@
#power-domain-cells = <0x1>; #power-domain-cells = <0x1>;
u-boot,dm-pre-reloc; u-boot,dm-pre-reloc;
zynqmp_pcap: pcap {
compatible = "xlnx,zynqmp-pcap-fpga";
clock-names = "ref_clk";
};
zynqmp_power: zynqmp-power { zynqmp_power: zynqmp-power {
u-boot,dm-pre-reloc; u-boot,dm-pre-reloc;
compatible = "xlnx,zynqmp-power"; compatible = "xlnx,zynqmp-power";
@ -162,6 +167,11 @@
compatible = "xlnx,zynqmp-reset"; compatible = "xlnx,zynqmp-reset";
#reset-cells = <1>; #reset-cells = <1>;
}; };
pinctrl0: pinctrl {
compatible = "xlnx,zynqmp-pinctrl";
status = "disabled";
};
}; };
}; };
@ -180,9 +190,10 @@
fpga_full: fpga-full { fpga_full: fpga-full {
compatible = "fpga-region"; compatible = "fpga-region";
fpga-mgr = <&pcap>; fpga-mgr = <&zynqmp_pcap>;
#address-cells = <2>; #address-cells = <2>;
#size-cells = <2>; #size-cells = <2>;
ranges;
}; };
nvmem_firmware { nvmem_firmware {
@ -195,63 +206,6 @@
}; };
}; };
pcap: pcap {
compatible = "xlnx,zynqmp-pcap-fpga";
};
rst: reset-controller {
compatible = "xlnx,zynqmp-reset";
#reset-cells = <1>;
};
xlnx_dp_snd_card: dp_snd_card {
compatible = "xlnx,dp-snd-card";
status = "disabled";
xlnx,dp-snd-pcm = <&xlnx_dp_snd_pcm0>, <&xlnx_dp_snd_pcm1>;
xlnx,dp-snd-codec = <&xlnx_dp_snd_codec0>;
};
xlnx_dp_snd_codec0: dp_snd_codec0 {
compatible = "xlnx,dp-snd-codec";
status = "disabled";
clock-names = "aud_clk";
};
xlnx_dp_snd_pcm0: dp_snd_pcm0 {
compatible = "xlnx,dp-snd-pcm";
status = "disabled";
dmas = <&xlnx_dpdma 4>;
dma-names = "tx";
};
xlnx_dp_snd_pcm1: dp_snd_pcm1 {
compatible = "xlnx,dp-snd-pcm";
status = "disabled";
dmas = <&xlnx_dpdma 5>;
dma-names = "tx";
};
xilinx_drm: xilinx_drm {
compatible = "xlnx,drm";
status = "disabled";
xlnx,encoder-slave = <&xlnx_dp>;
xlnx,connector-type = "DisplayPort";
xlnx,dp-sub = <&xlnx_dp_sub>;
planes {
xlnx,pixel-format = "rgb565";
plane0 {
dmas = <&xlnx_dpdma 3>;
dma-names = "dma0";
};
plane1 {
dmas = <&xlnx_dpdma 0>,
<&xlnx_dpdma 1>,
<&xlnx_dpdma 2>;
dma-names = "dma0", "dma1", "dma2";
};
};
};
amba_apu: amba-apu@0 { amba_apu: amba-apu@0 {
compatible = "simple-bus"; compatible = "simple-bus";
#address-cells = <2>; #address-cells = <2>;
@ -259,7 +213,7 @@
ranges = <0 0 0 0 0xffffffff>; ranges = <0 0 0 0 0xffffffff>;
gic: interrupt-controller@f9010000 { gic: interrupt-controller@f9010000 {
compatible = "arm,gic-400", "arm,cortex-a15-gic"; compatible = "arm,gic-400";
#interrupt-cells = <3>; #interrupt-cells = <3>;
reg = <0x0 0xf9010000 0x10000>, reg = <0x0 0xf9010000 0x10000>,
<0x0 0xf9020000 0x20000>, <0x0 0xf9020000 0x20000>,
@ -794,6 +748,8 @@
power-domains = <&zynqmp_firmware PD_SD_0>; power-domains = <&zynqmp_firmware PD_SD_0>;
nvmem-cells = <&soc_revision>; nvmem-cells = <&soc_revision>;
nvmem-cell-names = "soc_revision"; nvmem-cell-names = "soc_revision";
#clock-cells = <1>;
clock-output-names = "clk_out_sd0", "clk_in_sd0";
}; };
sdhci1: mmc@ff170000 { sdhci1: mmc@ff170000 {
@ -810,12 +766,8 @@
power-domains = <&zynqmp_firmware PD_SD_1>; power-domains = <&zynqmp_firmware PD_SD_1>;
nvmem-cells = <&soc_revision>; nvmem-cells = <&soc_revision>;
nvmem-cell-names = "soc_revision"; nvmem-cell-names = "soc_revision";
}; #clock-cells = <1>;
clock-output-names = "clk_out_sd1", "clk_in_sd1";
pinctrl0: pinctrl@ff180000 {
compatible = "xlnx,pinctrl-zynqmp";
status = "disabled";
reg = <0x0 0xff180000 0x0 0x1000>;
}; };
smmu: smmu@fd800000 { smmu: smmu@fd800000 {
@ -1015,37 +967,6 @@
}; };
}; };
xlnx_dp: dp@fd4a0000 {
compatible = "xlnx,v-dp";
status = "disabled";
reg = <0x0 0xfd4a0000 0x0 0x1000>;
interrupts = <0 119 4>;
interrupt-parent = <&gic>;
clock-names = "aclk", "aud_clk";
xlnx,dp-version = "v1.2";
xlnx,max-lanes = <2>;
xlnx,max-link-rate = <540000>;
xlnx,max-bpc = <16>;
xlnx,enable-ycrcb;
xlnx,colormetry = "rgb";
xlnx,bpc = <8>;
xlnx,audio-chan = <2>;
xlnx,dp-sub = <&xlnx_dp_sub>;
xlnx,max-pclock-frequency = <300000>;
};
xlnx_dp_sub: dp_sub@fd4aa000 {
compatible = "xlnx,dp-sub";
status = "disabled";
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";
xlnx,gfx-fmt = "rgb565";
};
xlnx_dpdma: dma@fd4c0000 { xlnx_dpdma: dma@fd4c0000 {
compatible = "xlnx,dpdma"; compatible = "xlnx,dpdma";
status = "disabled"; status = "disabled";
@ -1075,5 +996,62 @@
compatible = "xlnx,audio1"; compatible = "xlnx,audio1";
}; };
}; };
zynqmp_dpsub: zynqmp-display@fd4a0000 {
compatible = "xlnx,zynqmp-dpsub-1.7";
status = "disabled";
reg = <0x0 0xfd4a0000 0x0 0x1000>,
<0x0 0xfd4aa000 0x0 0x1000>,
<0x0 0xfd4ab000 0x0 0x1000>,
<0x0 0xfd4ac000 0x0 0x1000>;
reg-names = "dp", "blend", "av_buf", "aud";
interrupts = <0 119 4>;
interrupt-parent = <&gic>;
clock-names = "dp_apb_clk", "dp_aud_clk",
"dp_vtc_pixel_clk_in";
power-domains = <&zynqmp_firmware PD_DP>;
vid-layer {
dma-names = "vid0", "vid1", "vid2";
dmas = <&xlnx_dpdma 0>,
<&xlnx_dpdma 1>,
<&xlnx_dpdma 2>;
};
gfx-layer {
dma-names = "gfx0";
dmas = <&xlnx_dpdma 3>;
};
/* dummy node to indicate there's no child i2c device */
i2c-bus {
};
zynqmp_dp_snd_codec0: zynqmp_dp_snd_codec0 {
compatible = "xlnx,dp-snd-codec";
clock-names = "aud_clk";
};
zynqmp_dp_snd_pcm0: zynqmp_dp_snd_pcm0 {
compatible = "xlnx,dp-snd-pcm";
dmas = <&xlnx_dpdma 4>;
dma-names = "tx";
};
zynqmp_dp_snd_pcm1: zynqmp_dp_snd_pcm1 {
compatible = "xlnx,dp-snd-pcm";
dmas = <&xlnx_dpdma 5>;
dma-names = "tx";
};
zynqmp_dp_snd_card0: zynqmp_dp_snd_card {
compatible = "xlnx,dp-snd-card";
xlnx,dp-snd-pcm = <&zynqmp_dp_snd_pcm0>,
<&zynqmp_dp_snd_pcm1>;
xlnx,dp-snd-codec = <&zynqmp_dp_snd_codec0>;
};
};
}; };
}; };

View File

@ -85,6 +85,16 @@ enum {
LB_RGB_1280X8 = 0x5 LB_RGB_1280X8 = 0x5
}; };
#if defined(CONFIG_ROCKCHIP_RK3399)
enum vop_modes {
VOP_MODE_EDP = 0,
VOP_MODE_MIPI,
VOP_MODE_HDMI,
VOP_MODE_MIPI1,
VOP_MODE_DP,
VOP_MODE_NONE,
};
#else
enum vop_modes { enum vop_modes {
VOP_MODE_EDP = 0, VOP_MODE_EDP = 0,
VOP_MODE_HDMI, VOP_MODE_HDMI,
@ -94,6 +104,7 @@ enum vop_modes {
VOP_MODE_AUTO_DETECT, VOP_MODE_AUTO_DETECT,
VOP_MODE_UNKNOWN, VOP_MODE_UNKNOWN,
}; };
#endif
/* VOP_VERSION_INFO */ /* VOP_VERSION_INFO */
#define M_FPGA_VERSION (0xffff << 16) #define M_FPGA_VERSION (0xffff << 16)

View File

@ -2,7 +2,7 @@
/* /*
* (C) Copyright 2009 SAMSUNG Electronics * (C) Copyright 2009 SAMSUNG Electronics
* Minkyu Kang <mk7.kang@samsung.com> * Minkyu Kang <mk7.kang@samsung.com>
* Portions Copyright (C) 2011-2012 NVIDIA Corporation * Portions Copyright (C) 2011-2012,2019 NVIDIA Corporation
*/ */
#ifndef __TEGRA_MMC_H_ #ifndef __TEGRA_MMC_H_
@ -52,7 +52,7 @@ struct tegra_mmc {
unsigned char admaerr; /* offset 54h */ unsigned char admaerr; /* offset 54h */
unsigned char res4[3]; /* RESERVED, offset 55h-57h */ unsigned char res4[3]; /* RESERVED, offset 55h-57h */
unsigned long admaaddr; /* offset 58h-5Fh */ unsigned long admaaddr; /* offset 58h-5Fh */
unsigned char res5[0xa0]; /* RESERVED, offset 60h-FBh */ unsigned char res5[0x9c]; /* RESERVED, offset 60h-FBh */
unsigned short slotintstatus; /* offset FCh */ unsigned short slotintstatus; /* offset FCh */
unsigned short hcver; /* HOST Version */ unsigned short hcver; /* HOST Version */
unsigned int venclkctl; /* _VENDOR_CLOCK_CNTRL_0, 100h */ unsigned int venclkctl; /* _VENDOR_CLOCK_CNTRL_0, 100h */
@ -127,11 +127,23 @@ struct tegra_mmc {
#define TEGRA_MMC_NORINTSIGEN_XFER_COMPLETE (1 << 1) #define TEGRA_MMC_NORINTSIGEN_XFER_COMPLETE (1 << 1)
/* SDMMC1/3 settings from section 24.6 of T30 TRM */ /* SDMMC1/3 settings from SDMMCx Initialization Sequence of TRM */
#define MEMCOMP_PADCTRL_VREF 7 #define MEMCOMP_PADCTRL_VREF 7
#define AUTO_CAL_ENABLED (1 << 29) #define AUTO_CAL_ENABLE (1 << 29)
#define AUTO_CAL_ACTIVE (1 << 31)
#define AUTO_CAL_START (1 << 31)
#if defined(CONFIG_TEGRA210)
#define AUTO_CAL_PD_OFFSET (0x7D << 8)
#define AUTO_CAL_PU_OFFSET (0 << 0)
#define IO_TRIM_BYPASS_MASK (1 << 2)
#define TRIM_VAL_SHIFT 24
#define TRIM_VAL_MASK (0x1F << TRIM_VAL_SHIFT)
#define TAP_VAL_SHIFT 16
#define TAP_VAL_MASK (0xFF << TAP_VAL_SHIFT)
#else
#define AUTO_CAL_PD_OFFSET (0x70 << 8) #define AUTO_CAL_PD_OFFSET (0x70 << 8)
#define AUTO_CAL_PU_OFFSET (0x62 << 0) #define AUTO_CAL_PU_OFFSET (0x62 << 0)
#endif
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#endif /* __TEGRA_MMC_H_ */ #endif /* __TEGRA_MMC_H_ */

View File

@ -16,6 +16,7 @@ struct tegra_xusb_phy;
struct tegra_xusb_phy *tegra_xusb_phy_get(unsigned int type); struct tegra_xusb_phy *tegra_xusb_phy_get(unsigned int type);
void tegra_xusb_padctl_init(void); void tegra_xusb_padctl_init(void);
void tegra_xusb_padctl_exit(void);
int tegra_xusb_phy_prepare(struct tegra_xusb_phy *phy); int tegra_xusb_phy_prepare(struct tegra_xusb_phy *phy);
int tegra_xusb_phy_enable(struct tegra_xusb_phy *phy); int tegra_xusb_phy_enable(struct tegra_xusb_phy *phy);
int tegra_xusb_phy_disable(struct tegra_xusb_phy *phy); int tegra_xusb_phy_disable(struct tegra_xusb_phy *phy);

View File

@ -4,7 +4,8 @@
!defined(CONFIG_ARCH_ROCKCHIP) && !defined(CONFIG_ARCH_LX2160A) && \ !defined(CONFIG_ARCH_ROCKCHIP) && !defined(CONFIG_ARCH_LX2160A) && \
!defined(CONFIG_ARCH_LS1028A) && !defined(CONFIG_ARCH_LS2080A) && \ !defined(CONFIG_ARCH_LS1028A) && !defined(CONFIG_ARCH_LS2080A) && \
!defined(CONFIG_ARCH_LS1088A) && !defined(CONFIG_ARCH_ASPEED) && \ !defined(CONFIG_ARCH_LS1088A) && !defined(CONFIG_ARCH_ASPEED) && \
!defined(CONFIG_ARCH_LS1012A) && !defined(CONFIG_ARCH_U8500) && \ !defined(CONFIG_ARCH_LS1012A) && !defined(CONFIG_ARCH_LS1043A) && \
!defined(CONFIG_ARCH_LS1046A) && !defined(CONFIG_ARCH_U8500) && \
!defined(CONFIG_CORTINA_PLATFORM) !defined(CONFIG_CORTINA_PLATFORM)
#include <asm/arch/gpio.h> #include <asm/arch/gpio.h>
#endif #endif

View File

@ -229,6 +229,7 @@ config ROCKCHIP_RK3399
select DM_PMIC select DM_PMIC
select DM_REGULATOR_FIXED select DM_REGULATOR_FIXED
select BOARD_LATE_INIT select BOARD_LATE_INIT
imply PRE_CONSOLE_BUFFER
imply ROCKCHIP_COMMON_BOARD imply ROCKCHIP_COMMON_BOARD
imply ROCKCHIP_SDRAM_COMMON imply ROCKCHIP_SDRAM_COMMON
imply SPL_ROCKCHIP_COMMON_BOARD imply SPL_ROCKCHIP_COMMON_BOARD

View File

@ -41,7 +41,7 @@ void msm_generate_mac_addr(u8 *mac)
int i; int i;
char sn[9]; char sn[9];
snprintf(sn, 8, "%08x", msm_board_serial()); snprintf(sn, 9, "%08x", msm_board_serial());
/* fill in the mac with serialno, use locally adminstrated pool */ /* fill in the mac with serialno, use locally adminstrated pool */
mac[0] = 0x02; mac[0] = 0x02;

View File

@ -47,4 +47,6 @@
#define SOCFPGA_SDR_FIREWALL_L3_ADDRESS 0xffd13400 #define SOCFPGA_SDR_FIREWALL_L3_ADDRESS 0xffd13400
#define SOCFPGA_NOC_FW_H2F_SCR_OFST 0xffd13500 #define SOCFPGA_NOC_FW_H2F_SCR_OFST 0xffd13500
#define SOCFPGA_PHYS_OCRAM_SIZE 0x40000
#endif /* _SOCFPGA_A10_BASE_HARDWARE_H_ */ #endif /* _SOCFPGA_A10_BASE_HARDWARE_H_ */

View File

@ -59,4 +59,6 @@
#define SOCFPGA_DMANONSECURE_ADDRESS 0xffe00000 #define SOCFPGA_DMANONSECURE_ADDRESS 0xffe00000
#define SOCFPGA_DMASECURE_ADDRESS 0xffe01000 #define SOCFPGA_DMASECURE_ADDRESS 0xffe01000
#define SOCFPGA_PHYS_OCRAM_SIZE 0x10000
#endif /* _SOCFPGA_BASE_ADDRS_H_ */ #endif /* _SOCFPGA_BASE_ADDRS_H_ */

View File

@ -33,6 +33,38 @@
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
#define BOOTROM_SHARED_MEM_SIZE 0x800 /* 2KB */
#define BOOTROM_SHARED_MEM_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \
SOCFPGA_PHYS_OCRAM_SIZE - \
BOOTROM_SHARED_MEM_SIZE)
#define RST_STATUS_SHARED_ADDR (BOOTROM_SHARED_MEM_ADDR + 0x438)
static u32 rst_mgr_status __section(.data);
/*
* Bootrom will clear the status register in reset manager and stores the
* reset status value in shared memory. Bootrom stores shared data at last
* 2KB of onchip RAM.
* This function save reset status provided by BootROM to rst_mgr_status.
* More information about reset status register value can be found in reset
* manager register description.
* When running in debugger without Bootrom, r0 to r3 are random values.
* So, skip save the value when r0 is not BootROM shared data address.
*
* r0 - Contains the pointer to the shared memory block. The shared
* memory block is located in the top 2 KB of on-chip RAM.
* r1 - contains the length of the shared memory.
* r2 - unused and set to 0x0.
* r3 - points to the version block.
*/
void save_boot_params(unsigned long r0, unsigned long r1, unsigned long r2,
unsigned long r3)
{
if (r0 == BOOTROM_SHARED_MEM_ADDR)
rst_mgr_status = readl(RST_STATUS_SHARED_ADDR);
save_boot_params_ret();
}
u32 spl_boot_device(void) u32 spl_boot_device(void)
{ {
const u32 bsel = readl(socfpga_get_sysmgr_addr() + SYSMGR_A10_BOOTINFO); const u32 bsel = readl(socfpga_get_sysmgr_addr() + SYSMGR_A10_BOOTINFO);

View File

@ -994,7 +994,7 @@ config SPL_STACK_R_ADDR
config SPL_SPI_SUNXI config SPL_SPI_SUNXI
bool "Support for SPI Flash on Allwinner SoCs in SPL" bool "Support for SPI Flash on Allwinner SoCs in SPL"
depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUNXI_H3_H5 || MACH_SUN50I depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUNXI_H3_H5 || MACH_SUN50I || MACH_SUN8I_R40 || MACH_SUN50I_H6
help help
Enable support for SPI Flash. This option allows SPL to read from Enable support for SPI Flash. This option allows SPL to read from
sunxi SPI Flash. It uses the same method as the boot ROM, so does sunxi SPI Flash. It uses the same method as the boot ROM, so does

View File

@ -36,13 +36,13 @@
/* SUN4I variant of the SPI controller */ /* SUN4I variant of the SPI controller */
/*****************************************************************************/ /*****************************************************************************/
#define SUN4I_SPI0_CCTL (0x01C05000 + 0x1C) #define SUN4I_SPI0_CCTL 0x1C
#define SUN4I_SPI0_CTL (0x01C05000 + 0x08) #define SUN4I_SPI0_CTL 0x08
#define SUN4I_SPI0_RX (0x01C05000 + 0x00) #define SUN4I_SPI0_RX 0x00
#define SUN4I_SPI0_TX (0x01C05000 + 0x04) #define SUN4I_SPI0_TX 0x04
#define SUN4I_SPI0_FIFO_STA (0x01C05000 + 0x28) #define SUN4I_SPI0_FIFO_STA 0x28
#define SUN4I_SPI0_BC (0x01C05000 + 0x20) #define SUN4I_SPI0_BC 0x20
#define SUN4I_SPI0_TC (0x01C05000 + 0x24) #define SUN4I_SPI0_TC 0x24
#define SUN4I_CTL_ENABLE BIT(0) #define SUN4I_CTL_ENABLE BIT(0)
#define SUN4I_CTL_MASTER BIT(1) #define SUN4I_CTL_MASTER BIT(1)
@ -54,15 +54,15 @@
/* SUN6I variant of the SPI controller */ /* SUN6I variant of the SPI controller */
/*****************************************************************************/ /*****************************************************************************/
#define SUN6I_SPI0_CCTL (0x01C68000 + 0x24) #define SUN6I_SPI0_CCTL 0x24
#define SUN6I_SPI0_GCR (0x01C68000 + 0x04) #define SUN6I_SPI0_GCR 0x04
#define SUN6I_SPI0_TCR (0x01C68000 + 0x08) #define SUN6I_SPI0_TCR 0x08
#define SUN6I_SPI0_FIFO_STA (0x01C68000 + 0x1C) #define SUN6I_SPI0_FIFO_STA 0x1C
#define SUN6I_SPI0_MBC (0x01C68000 + 0x30) #define SUN6I_SPI0_MBC 0x30
#define SUN6I_SPI0_MTC (0x01C68000 + 0x34) #define SUN6I_SPI0_MTC 0x34
#define SUN6I_SPI0_BCC (0x01C68000 + 0x38) #define SUN6I_SPI0_BCC 0x38
#define SUN6I_SPI0_TXD (0x01C68000 + 0x200) #define SUN6I_SPI0_TXD 0x200
#define SUN6I_SPI0_RXD (0x01C68000 + 0x300) #define SUN6I_SPI0_RXD 0x300
#define SUN6I_CTL_ENABLE BIT(0) #define SUN6I_CTL_ENABLE BIT(0)
#define SUN6I_CTL_MASTER BIT(1) #define SUN6I_CTL_MASTER BIT(1)
@ -72,7 +72,12 @@
/*****************************************************************************/ /*****************************************************************************/
#define CCM_AHB_GATING0 (0x01C20000 + 0x60) #define CCM_AHB_GATING0 (0x01C20000 + 0x60)
#define CCM_H6_SPI_BGR_REG (0x03001000 + 0x96c)
#ifdef CONFIG_MACH_SUN50I_H6
#define CCM_SPI0_CLK (0x03001000 + 0x940)
#else
#define CCM_SPI0_CLK (0x01C20000 + 0xA0) #define CCM_SPI0_CLK (0x01C20000 + 0xA0)
#endif
#define SUN6I_BUS_SOFT_RST_REG0 (0x01C20000 + 0x2C0) #define SUN6I_BUS_SOFT_RST_REG0 (0x01C20000 + 0x2C0)
#define AHB_RESET_SPI0_SHIFT 20 #define AHB_RESET_SPI0_SHIFT 20
@ -86,74 +91,111 @@
/* /*
* Allwinner A10/A20 SoCs were using pins PC0,PC1,PC2,PC23 for booting * Allwinner A10/A20 SoCs were using pins PC0,PC1,PC2,PC23 for booting
* from SPI Flash, everything else is using pins PC0,PC1,PC2,PC3. * from SPI Flash, everything else is using pins PC0,PC1,PC2,PC3.
* The H6 uses PC0, PC2, PC3, PC5.
*/ */
static void spi0_pinmux_setup(unsigned int pin_function) static void spi0_pinmux_setup(unsigned int pin_function)
{ {
unsigned int pin; /* All chips use PC0 and PC2. */
sunxi_gpio_set_cfgpin(SUNXI_GPC(0), pin_function);
sunxi_gpio_set_cfgpin(SUNXI_GPC(2), pin_function);
for (pin = SUNXI_GPC(0); pin <= SUNXI_GPC(2); pin++) /* All chips except H6 use PC1, and only H6 uses PC5. */
sunxi_gpio_set_cfgpin(pin, pin_function); if (!IS_ENABLED(CONFIG_MACH_SUN50I_H6))
sunxi_gpio_set_cfgpin(SUNXI_GPC(1), pin_function);
else
sunxi_gpio_set_cfgpin(SUNXI_GPC(5), pin_function);
if (IS_ENABLED(CONFIG_MACH_SUN4I) || IS_ENABLED(CONFIG_MACH_SUN7I)) /* Older generations use PC23 for CS, newer ones use PC3. */
if (IS_ENABLED(CONFIG_MACH_SUN4I) || IS_ENABLED(CONFIG_MACH_SUN7I) ||
IS_ENABLED(CONFIG_MACH_SUN8I_R40))
sunxi_gpio_set_cfgpin(SUNXI_GPC(23), pin_function); sunxi_gpio_set_cfgpin(SUNXI_GPC(23), pin_function);
else else
sunxi_gpio_set_cfgpin(SUNXI_GPC(3), pin_function); sunxi_gpio_set_cfgpin(SUNXI_GPC(3), pin_function);
} }
static bool is_sun6i_gen_spi(void)
{
return IS_ENABLED(CONFIG_SUNXI_GEN_SUN6I) ||
IS_ENABLED(CONFIG_MACH_SUN50I_H6);
}
static uintptr_t spi0_base_address(void)
{
if (IS_ENABLED(CONFIG_MACH_SUN8I_R40))
return 0x01C05000;
if (IS_ENABLED(CONFIG_MACH_SUN50I_H6))
return 0x05010000;
if (!is_sun6i_gen_spi())
return 0x01C05000;
return 0x01C68000;
}
/* /*
* Setup 6 MHz from OSC24M (because the BROM is doing the same). * Setup 6 MHz from OSC24M (because the BROM is doing the same).
*/ */
static void spi0_enable_clock(void) static void spi0_enable_clock(void)
{ {
uintptr_t base = spi0_base_address();
/* Deassert SPI0 reset on SUN6I */ /* Deassert SPI0 reset on SUN6I */
if (IS_ENABLED(CONFIG_SUNXI_GEN_SUN6I)) if (IS_ENABLED(CONFIG_MACH_SUN50I_H6))
setbits_le32(CCM_H6_SPI_BGR_REG, (1U << 16) | 0x1);
else if (is_sun6i_gen_spi())
setbits_le32(SUN6I_BUS_SOFT_RST_REG0, setbits_le32(SUN6I_BUS_SOFT_RST_REG0,
(1 << AHB_RESET_SPI0_SHIFT)); (1 << AHB_RESET_SPI0_SHIFT));
/* Open the SPI0 gate */ /* Open the SPI0 gate */
setbits_le32(CCM_AHB_GATING0, (1 << AHB_GATE_OFFSET_SPI0)); if (!IS_ENABLED(CONFIG_MACH_SUN50I_H6))
setbits_le32(CCM_AHB_GATING0, (1 << AHB_GATE_OFFSET_SPI0));
/* Divide by 4 */ /* Divide by 4 */
writel(SPI0_CLK_DIV_BY_4, IS_ENABLED(CONFIG_SUNXI_GEN_SUN6I) ? writel(SPI0_CLK_DIV_BY_4, base + (is_sun6i_gen_spi() ?
SUN6I_SPI0_CCTL : SUN4I_SPI0_CCTL); SUN6I_SPI0_CCTL : SUN4I_SPI0_CCTL));
/* 24MHz from OSC24M */ /* 24MHz from OSC24M */
writel((1 << 31), CCM_SPI0_CLK); writel((1 << 31), CCM_SPI0_CLK);
if (IS_ENABLED(CONFIG_SUNXI_GEN_SUN6I)) { if (is_sun6i_gen_spi()) {
/* Enable SPI in the master mode and do a soft reset */ /* Enable SPI in the master mode and do a soft reset */
setbits_le32(SUN6I_SPI0_GCR, SUN6I_CTL_MASTER | setbits_le32(base + SUN6I_SPI0_GCR, SUN6I_CTL_MASTER |
SUN6I_CTL_ENABLE | SUN6I_CTL_ENABLE | SUN6I_CTL_SRST);
SUN6I_CTL_SRST);
/* Wait for completion */ /* Wait for completion */
while (readl(SUN6I_SPI0_GCR) & SUN6I_CTL_SRST) while (readl(base + SUN6I_SPI0_GCR) & SUN6I_CTL_SRST)
; ;
} else { } else {
/* Enable SPI in the master mode and reset FIFO */ /* Enable SPI in the master mode and reset FIFO */
setbits_le32(SUN4I_SPI0_CTL, SUN4I_CTL_MASTER | setbits_le32(base + SUN4I_SPI0_CTL, SUN4I_CTL_MASTER |
SUN4I_CTL_ENABLE | SUN4I_CTL_ENABLE |
SUN4I_CTL_TF_RST | SUN4I_CTL_TF_RST |
SUN4I_CTL_RF_RST); SUN4I_CTL_RF_RST);
} }
} }
static void spi0_disable_clock(void) static void spi0_disable_clock(void)
{ {
uintptr_t base = spi0_base_address();
/* Disable the SPI0 controller */ /* Disable the SPI0 controller */
if (IS_ENABLED(CONFIG_SUNXI_GEN_SUN6I)) if (is_sun6i_gen_spi())
clrbits_le32(SUN6I_SPI0_GCR, SUN6I_CTL_MASTER | clrbits_le32(base + SUN6I_SPI0_GCR, SUN6I_CTL_MASTER |
SUN6I_CTL_ENABLE); SUN6I_CTL_ENABLE);
else else
clrbits_le32(SUN4I_SPI0_CTL, SUN4I_CTL_MASTER | clrbits_le32(base + SUN4I_SPI0_CTL, SUN4I_CTL_MASTER |
SUN4I_CTL_ENABLE); SUN4I_CTL_ENABLE);
/* Disable the SPI0 clock */ /* Disable the SPI0 clock */
writel(0, CCM_SPI0_CLK); writel(0, CCM_SPI0_CLK);
/* Close the SPI0 gate */ /* Close the SPI0 gate */
clrbits_le32(CCM_AHB_GATING0, (1 << AHB_GATE_OFFSET_SPI0)); if (!IS_ENABLED(CONFIG_MACH_SUN50I_H6))
clrbits_le32(CCM_AHB_GATING0, (1 << AHB_GATE_OFFSET_SPI0));
/* Assert SPI0 reset on SUN6I */ /* Assert SPI0 reset on SUN6I */
if (IS_ENABLED(CONFIG_SUNXI_GEN_SUN6I)) if (IS_ENABLED(CONFIG_MACH_SUN50I_H6))
clrbits_le32(CCM_H6_SPI_BGR_REG, (1U << 16) | 0x1);
else if (is_sun6i_gen_spi())
clrbits_le32(SUN6I_BUS_SOFT_RST_REG0, clrbits_le32(SUN6I_BUS_SOFT_RST_REG0,
(1 << AHB_RESET_SPI0_SHIFT)); (1 << AHB_RESET_SPI0_SHIFT));
} }
@ -162,7 +204,8 @@ static void spi0_init(void)
{ {
unsigned int pin_function = SUNXI_GPC_SPI0; unsigned int pin_function = SUNXI_GPC_SPI0;
if (IS_ENABLED(CONFIG_MACH_SUN50I)) if (IS_ENABLED(CONFIG_MACH_SUN50I) ||
IS_ENABLED(CONFIG_MACH_SUN50I_H6))
pin_function = SUN50I_GPC_SPI0; pin_function = SUN50I_GPC_SPI0;
spi0_pinmux_setup(pin_function); spi0_pinmux_setup(pin_function);
@ -173,7 +216,8 @@ static void spi0_deinit(void)
{ {
/* New SoCs can disable pins, older could only set them as input */ /* New SoCs can disable pins, older could only set them as input */
unsigned int pin_function = SUNXI_GPIO_INPUT; unsigned int pin_function = SUNXI_GPIO_INPUT;
if (IS_ENABLED(CONFIG_SUNXI_GEN_SUN6I))
if (is_sun6i_gen_spi())
pin_function = SUNXI_GPIO_DISABLE; pin_function = SUNXI_GPIO_DISABLE;
spi0_disable_clock(); spi0_disable_clock();
@ -227,31 +271,32 @@ static void spi0_read_data(void *buf, u32 addr, u32 len)
{ {
u8 *buf8 = buf; u8 *buf8 = buf;
u32 chunk_len; u32 chunk_len;
uintptr_t base = spi0_base_address();
while (len > 0) { while (len > 0) {
chunk_len = len; chunk_len = len;
if (chunk_len > SPI_READ_MAX_SIZE) if (chunk_len > SPI_READ_MAX_SIZE)
chunk_len = SPI_READ_MAX_SIZE; chunk_len = SPI_READ_MAX_SIZE;
if (IS_ENABLED(CONFIG_SUNXI_GEN_SUN6I)) { if (is_sun6i_gen_spi()) {
sunxi_spi0_read_data(buf8, addr, chunk_len, sunxi_spi0_read_data(buf8, addr, chunk_len,
SUN6I_SPI0_TCR, base + SUN6I_SPI0_TCR,
SUN6I_TCR_XCH, SUN6I_TCR_XCH,
SUN6I_SPI0_FIFO_STA, base + SUN6I_SPI0_FIFO_STA,
SUN6I_SPI0_TXD, base + SUN6I_SPI0_TXD,
SUN6I_SPI0_RXD, base + SUN6I_SPI0_RXD,
SUN6I_SPI0_MBC, base + SUN6I_SPI0_MBC,
SUN6I_SPI0_MTC, base + SUN6I_SPI0_MTC,
SUN6I_SPI0_BCC); base + SUN6I_SPI0_BCC);
} else { } else {
sunxi_spi0_read_data(buf8, addr, chunk_len, sunxi_spi0_read_data(buf8, addr, chunk_len,
SUN4I_SPI0_CTL, base + SUN4I_SPI0_CTL,
SUN4I_CTL_XCH, SUN4I_CTL_XCH,
SUN4I_SPI0_FIFO_STA, base + SUN4I_SPI0_FIFO_STA,
SUN4I_SPI0_TX, base + SUN4I_SPI0_TX,
SUN4I_SPI0_RX, base + SUN4I_SPI0_RX,
SUN4I_SPI0_BC, base + SUN4I_SPI0_BC,
SUN4I_SPI0_TC, base + SUN4I_SPI0_TC,
0); 0);
} }

View File

@ -181,6 +181,12 @@ int board_init(void)
return nvidia_board_init(); return nvidia_board_init();
} }
void board_cleanup_before_linux(void)
{
/* power down UPHY PLL */
tegra_xusb_padctl_exit();
}
#ifdef CONFIG_BOARD_EARLY_INIT_F #ifdef CONFIG_BOARD_EARLY_INIT_F
static void __gpio_early_init(void) static void __gpio_early_init(void)
{ {
@ -211,6 +217,31 @@ int board_early_init_f(void)
arch_timer_init(); arch_timer_init();
#endif #endif
#if defined(CONFIG_DISABLE_SDMMC1_EARLY)
/*
* Turn off (reset/disable) SDMMC1 on Nano here, before GPIO INIT.
* We do this because earlier bootloaders have enabled power to
* SDMMC1 on Nano, and toggling power-gpio (PZ3) in pinmux_init()
* results in power being back-driven into the SD-card and SDMMC1
* HW, which is 'bad' as per the HW team.
*
* From the HW team: "LDO2 from the PMIC has already been set to 3.3v in
* nvtboot/CBoot on Nano (for SD-card boot). So when U-Boot's GPIO_INIT
* table sets PZ3 to OUT0 as per the pinmux spreadsheet, it turns off
* the loadswitch. When PZ3 is 0 and not driving, essentially the SDCard
* voltage turns off. Since the SDCard voltage is no longer there, the
* SDMMC CLK/DAT lines are backdriving into what essentially is a
* powered-off SDCard, that's why the voltage drops from 3.3V to ~1.6V"
*
* Note that this can probably be removed when we change over to storing
* all BL components on QSPI on Nano, and U-Boot then becomes the first
* one to turn on SDMMC1 power. Another fix would be to have CBoot
* disable power/gate SDMMC1 off before handing off to U-Boot/kernel.
*/
reset_set_enable(PERIPH_ID_SDMMC1, 1);
clock_set_enable(PERIPH_ID_SDMMC1, 0);
#endif /* CONFIG_DISABLE_SDMMC1_EARLY */
pinmux_init(); pinmux_init();
board_init_uart_f(); board_init_uart_f();

View File

@ -35,6 +35,12 @@ config TARGET_P2571
help help
P2571 is a P2530 married to a P1963 I/O board P2571 is a P2530 married to a P1963 I/O board
config TARGET_P3450_0000
bool "NVIDIA Jetson Nano Developer Kit"
select BOARD_LATE_INIT
help
P3450-0000 is a P3448 CPU board married to a P3449 I/O board.
endchoice endchoice
config SYS_SOC config SYS_SOC
@ -44,5 +50,6 @@ source "board/nvidia/e2220-1170/Kconfig"
source "board/nvidia/p2371-0000/Kconfig" source "board/nvidia/p2371-0000/Kconfig"
source "board/nvidia/p2371-2180/Kconfig" source "board/nvidia/p2371-2180/Kconfig"
source "board/nvidia/p2571/Kconfig" source "board/nvidia/p2571/Kconfig"
source "board/nvidia/p3450-0000/Kconfig"
endif endif

View File

@ -1,5 +1,5 @@
# #
# (C) Copyright 2013-2015 # (C) Copyright 2013-2020
# NVIDIA Corporation <www.nvidia.com> # NVIDIA Corporation <www.nvidia.com>
# #
# SPDX-License-Identifier: GPL-2.0+ # SPDX-License-Identifier: GPL-2.0+
@ -7,6 +7,5 @@
obj-y += clock.o obj-y += clock.o
obj-y += funcmux.o obj-y += funcmux.o
obj-y += pinmux.o
obj-y += xusb-padctl.o obj-y += xusb-padctl.o
obj-y += ../xusb-padctl-common.o obj-y += ../xusb-padctl-common.o

View File

@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0+ // SPDX-License-Identifier: GPL-2.0+
/* /*
* (C) Copyright 2013-2015 * (C) Copyright 2013-2020
* NVIDIA Corporation <www.nvidia.com> * NVIDIA Corporation <www.nvidia.com>
*/ */
@ -333,7 +333,7 @@ static enum clock_type_id clock_periph_type[PERIPHC_COUNT] = {
TYPE(PERIPHC_DMIC3, CLOCK_TYPE_NONE), TYPE(PERIPHC_DMIC3, CLOCK_TYPE_NONE),
TYPE(PERIPHC_APE, CLOCK_TYPE_NONE), TYPE(PERIPHC_APE, CLOCK_TYPE_NONE),
TYPE(PERIPHC_QSPI, CLOCK_TYPE_PC01C00_C42C41TC40), TYPE(PERIPHC_QSPI, CLOCK_TYPE_PC01C00_C42C41TC40),
TYPE(PERIPHC_VI_I2C, CLOCK_TYPE_NONE), TYPE(PERIPHC_VI_I2C, CLOCK_TYPE_PC2CC3M_T16),
TYPE(PERIPHC_USB2_HSIC_TRK, CLOCK_TYPE_NONE), TYPE(PERIPHC_USB2_HSIC_TRK, CLOCK_TYPE_NONE),
TYPE(PERIPHC_PEX_SATA_USB_RX_BYP, CLOCK_TYPE_NONE), TYPE(PERIPHC_PEX_SATA_USB_RX_BYP, CLOCK_TYPE_NONE),
@ -739,7 +739,7 @@ int get_periph_clock_info(enum periph_id periph_id, int *mux_bits,
if (!clock_periph_id_isvalid(periph_id)) if (!clock_periph_id_isvalid(periph_id))
return -1; return -1;
internal_id = periph_id_to_internal_id[periph_id]; internal_id = INTERNAL_ID(periph_id_to_internal_id[periph_id]);
if (!periphc_internal_id_isvalid(internal_id)) if (!periphc_internal_id_isvalid(internal_id))
return -1; return -1;
@ -765,7 +765,7 @@ enum clock_id get_periph_clock_id(enum periph_id periph_id, int source)
if (!clock_periph_id_isvalid(periph_id)) if (!clock_periph_id_isvalid(periph_id))
return CLOCK_ID_NONE; return CLOCK_ID_NONE;
internal_id = periph_id_to_internal_id[periph_id]; internal_id = INTERNAL_ID(periph_id_to_internal_id[periph_id]);
if (!periphc_internal_id_isvalid(internal_id)) if (!periphc_internal_id_isvalid(internal_id))
return CLOCK_ID_NONE; return CLOCK_ID_NONE;
@ -1235,25 +1235,6 @@ int tegra_plle_enable(void)
value &= ~PLLE_SS_CNTL_INTERP_RESET; value &= ~PLLE_SS_CNTL_INTERP_RESET;
writel(value, NV_PA_CLK_RST_BASE + PLLE_SS_CNTL); writel(value, NV_PA_CLK_RST_BASE + PLLE_SS_CNTL);
/* 7. Enable HW power sequencer for PLLE */
value = readl(NV_PA_CLK_RST_BASE + PLLE_MISC);
value &= ~PLLE_MISC_IDDQ_SWCTL;
writel(value, NV_PA_CLK_RST_BASE + PLLE_MISC);
value = readl(NV_PA_CLK_RST_BASE + PLLE_AUX);
value &= ~PLLE_AUX_SS_SWCTL;
value &= ~PLLE_AUX_ENABLE_SWCTL;
value |= PLLE_AUX_SS_SEQ_INCLUDE;
value |= PLLE_AUX_USE_LOCKDET;
writel(value, NV_PA_CLK_RST_BASE + PLLE_AUX);
/* 8. Wait 1 us */
udelay(1);
value |= PLLE_AUX_SEQ_ENABLE;
writel(value, NV_PA_CLK_RST_BASE + PLLE_AUX);
return 0; return 0;
} }

View File

@ -1,194 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved.
*/
#include <common.h>
#include <asm/io.h>
#include <asm/arch/pinmux.h>
#define PIN(pin, f0, f1, f2, f3) \
{ \
.funcs = { \
PMUX_FUNC_##f0, \
PMUX_FUNC_##f1, \
PMUX_FUNC_##f2, \
PMUX_FUNC_##f3, \
}, \
}
#define PIN_RESERVED {}
static const struct pmux_pingrp_desc tegra210_pingroups[] = {
/* pin, f0, f1, f2, f3 */
/* Offset 0x3000 */
PIN(SDMMC1_CLK_PM0, SDMMC1, RSVD1, RSVD2, RSVD3),
PIN(SDMMC1_CMD_PM1, SDMMC1, SPI3, RSVD2, RSVD3),
PIN(SDMMC1_DAT3_PM2, SDMMC1, SPI3, RSVD2, RSVD3),
PIN(SDMMC1_DAT2_PM3, SDMMC1, SPI3, RSVD2, RSVD3),
PIN(SDMMC1_DAT1_PM4, SDMMC1, SPI3, RSVD2, RSVD3),
PIN(SDMMC1_DAT0_PM5, SDMMC1, RSVD1, RSVD2, RSVD3),
PIN_RESERVED,
/* Offset 0x301c */
PIN(SDMMC3_CLK_PP0, SDMMC3, RSVD1, RSVD2, RSVD3),
PIN(SDMMC3_CMD_PP1, SDMMC3, RSVD1, RSVD2, RSVD3),
PIN(SDMMC3_DAT0_PP5, SDMMC3, RSVD1, RSVD2, RSVD3),
PIN(SDMMC3_DAT1_PP4, SDMMC3, RSVD1, RSVD2, RSVD3),
PIN(SDMMC3_DAT2_PP3, SDMMC3, RSVD1, RSVD2, RSVD3),
PIN(SDMMC3_DAT3_PP2, SDMMC3, RSVD1, RSVD2, RSVD3),
PIN_RESERVED,
/* Offset 0x3038 */
PIN(PEX_L0_RST_N_PA0, PE0, RSVD1, RSVD2, RSVD3),
PIN(PEX_L0_CLKREQ_N_PA1, PE0, RSVD1, RSVD2, RSVD3),
PIN(PEX_WAKE_N_PA2, PE, RSVD1, RSVD2, RSVD3),
PIN(PEX_L1_RST_N_PA3, PE1, RSVD1, RSVD2, RSVD3),
PIN(PEX_L1_CLKREQ_N_PA4, PE1, RSVD1, RSVD2, RSVD3),
PIN(SATA_LED_ACTIVE_PA5, SATA, RSVD1, RSVD2, RSVD3),
PIN(SPI1_MOSI_PC0, SPI1, RSVD1, RSVD2, RSVD3),
PIN(SPI1_MISO_PC1, SPI1, RSVD1, RSVD2, RSVD3),
PIN(SPI1_SCK_PC2, SPI1, RSVD1, RSVD2, RSVD3),
PIN(SPI1_CS0_PC3, SPI1, RSVD1, RSVD2, RSVD3),
PIN(SPI1_CS1_PC4, SPI1, RSVD1, RSVD2, RSVD3),
PIN(SPI2_MOSI_PB4, SPI2, DTV, RSVD2, RSVD3),
PIN(SPI2_MISO_PB5, SPI2, DTV, RSVD2, RSVD3),
PIN(SPI2_SCK_PB6, SPI2, DTV, RSVD2, RSVD3),
PIN(SPI2_CS0_PB7, SPI2, DTV, RSVD2, RSVD3),
PIN(SPI2_CS1_PDD0, SPI2, RSVD1, RSVD2, RSVD3),
PIN(SPI4_MOSI_PC7, SPI4, RSVD1, RSVD2, RSVD3),
PIN(SPI4_MISO_PD0, SPI4, RSVD1, RSVD2, RSVD3),
PIN(SPI4_SCK_PC5, SPI4, RSVD1, RSVD2, RSVD3),
PIN(SPI4_CS0_PC6, SPI4, RSVD1, RSVD2, RSVD3),
PIN(QSPI_SCK_PEE0, QSPI, RSVD1, RSVD2, RSVD3),
PIN(QSPI_CS_N_PEE1, QSPI, RSVD1, RSVD2, RSVD3),
PIN(QSPI_IO0_PEE2, QSPI, RSVD1, RSVD2, RSVD3),
PIN(QSPI_IO1_PEE3, QSPI, RSVD1, RSVD2, RSVD3),
PIN(QSPI_IO2_PEE4, QSPI, RSVD1, RSVD2, RSVD3),
PIN(QSPI_IO3_PEE5, QSPI, RSVD1, RSVD2, RSVD3),
PIN_RESERVED,
/* Offset 0x30a4 */
PIN(DMIC1_CLK_PE0, DMIC1, I2S3, RSVD2, RSVD3),
PIN(DMIC1_DAT_PE1, DMIC1, I2S3, RSVD2, RSVD3),
PIN(DMIC2_CLK_PE2, DMIC2, I2S3, RSVD2, RSVD3),
PIN(DMIC2_DAT_PE3, DMIC2, I2S3, RSVD2, RSVD3),
PIN(DMIC3_CLK_PE4, DMIC3, I2S5A, RSVD2, RSVD3),
PIN(DMIC3_DAT_PE5, DMIC3, I2S5A, RSVD2, RSVD3),
PIN(GEN1_I2C_SCL_PJ1, I2C1, RSVD1, RSVD2, RSVD3),
PIN(GEN1_I2C_SDA_PJ0, I2C1, RSVD1, RSVD2, RSVD3),
PIN(GEN2_I2C_SCL_PJ2, I2C2, RSVD1, RSVD2, RSVD3),
PIN(GEN2_I2C_SDA_PJ3, I2C2, RSVD1, RSVD2, RSVD3),
PIN(GEN3_I2C_SCL_PF0, I2C3, RSVD1, RSVD2, RSVD3),
PIN(GEN3_I2C_SDA_PF1, I2C3, RSVD1, RSVD2, RSVD3),
PIN(CAM_I2C_SCL_PS2, I2C3, I2CVI, RSVD2, RSVD3),
PIN(CAM_I2C_SDA_PS3, I2C3, I2CVI, RSVD2, RSVD3),
PIN(PWR_I2C_SCL_PY3, I2CPMU, RSVD1, RSVD2, RSVD3),
PIN(PWR_I2C_SDA_PY4, I2CPMU, RSVD1, RSVD2, RSVD3),
PIN(UART1_TX_PU0, UARTA, RSVD1, RSVD2, RSVD3),
PIN(UART1_RX_PU1, UARTA, RSVD1, RSVD2, RSVD3),
PIN(UART1_RTS_PU2, UARTA, RSVD1, RSVD2, RSVD3),
PIN(UART1_CTS_PU3, UARTA, RSVD1, RSVD2, RSVD3),
PIN(UART2_TX_PG0, UARTB, I2S4A, SPDIF, UART),
PIN(UART2_RX_PG1, UARTB, I2S4A, SPDIF, UART),
PIN(UART2_RTS_PG2, UARTB, I2S4A, RSVD2, UART),
PIN(UART2_CTS_PG3, UARTB, I2S4A, RSVD2, UART),
PIN(UART3_TX_PD1, UARTC, SPI4, RSVD2, RSVD3),
PIN(UART3_RX_PD2, UARTC, SPI4, RSVD2, RSVD3),
PIN(UART3_RTS_PD3, UARTC, SPI4, RSVD2, RSVD3),
PIN(UART3_CTS_PD4, UARTC, SPI4, RSVD2, RSVD3),
PIN(UART4_TX_PI4, UARTD, UART, RSVD2, RSVD3),
PIN(UART4_RX_PI5, UARTD, UART, RSVD2, RSVD3),
PIN(UART4_RTS_PI6, UARTD, UART, RSVD2, RSVD3),
PIN(UART4_CTS_PI7, UARTD, UART, RSVD2, RSVD3),
PIN(DAP1_FS_PB0, I2S1, RSVD1, RSVD2, RSVD3),
PIN(DAP1_DIN_PB1, I2S1, RSVD1, RSVD2, RSVD3),
PIN(DAP1_DOUT_PB2, I2S1, RSVD1, RSVD2, RSVD3),
PIN(DAP1_SCLK_PB3, I2S1, RSVD1, RSVD2, RSVD3),
PIN(DAP2_FS_PAA0, I2S2, RSVD1, RSVD2, RSVD3),
PIN(DAP2_DIN_PAA2, I2S2, RSVD1, RSVD2, RSVD3),
PIN(DAP2_DOUT_PAA3, I2S2, RSVD1, RSVD2, RSVD3),
PIN(DAP2_SCLK_PAA1, I2S2, RSVD1, RSVD2, RSVD3),
PIN(DAP4_FS_PJ4, I2S4B, RSVD1, RSVD2, RSVD3),
PIN(DAP4_DIN_PJ5, I2S4B, RSVD1, RSVD2, RSVD3),
PIN(DAP4_DOUT_PJ6, I2S4B, RSVD1, RSVD2, RSVD3),
PIN(DAP4_SCLK_PJ7, I2S4B, RSVD1, RSVD2, RSVD3),
PIN(CAM1_MCLK_PS0, EXTPERIPH3, RSVD1, RSVD2, RSVD3),
PIN(CAM2_MCLK_PS1, EXTPERIPH3, RSVD1, RSVD2, RSVD3),
PIN(JTAG_RTCK, JTAG, RSVD1, RSVD2, RSVD3),
PIN(CLK_32K_IN, CLK, RSVD1, RSVD2, RSVD3),
PIN(CLK_32K_OUT_PY5, SOC, BLINK, RSVD2, RSVD3),
PIN(BATT_BCL, BCL, RSVD1, RSVD2, RSVD3),
PIN(CLK_REQ, SYS, RSVD1, RSVD2, RSVD3),
PIN(CPU_PWR_REQ, CPU, RSVD1, RSVD2, RSVD3),
PIN(PWR_INT_N, PMI, RSVD1, RSVD2, RSVD3),
PIN(SHUTDOWN, SHUTDOWN, RSVD1, RSVD2, RSVD3),
PIN(CORE_PWR_REQ, CORE, RSVD1, RSVD2, RSVD3),
PIN(AUD_MCLK_PBB0, AUD, RSVD1, RSVD2, RSVD3),
PIN(DVFS_PWM_PBB1, RSVD0, CLDVFS, SPI3, RSVD3),
PIN(DVFS_CLK_PBB2, RSVD0, CLDVFS, SPI3, RSVD3),
PIN(GPIO_X1_AUD_PBB3, RSVD0, RSVD1, SPI3, RSVD3),
PIN(GPIO_X3_AUD_PBB4, RSVD0, RSVD1, SPI3, RSVD3),
PIN(PCC7, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(HDMI_CEC_PCC0, CEC, RSVD1, RSVD2, RSVD3),
PIN(HDMI_INT_DP_HPD_PCC1, DP, RSVD1, RSVD2, RSVD3),
PIN(SPDIF_OUT_PCC2, SPDIF, RSVD1, RSVD2, RSVD3),
PIN(SPDIF_IN_PCC3, SPDIF, RSVD1, RSVD2, RSVD3),
PIN(USB_VBUS_EN0_PCC4, USB, RSVD1, RSVD2, RSVD3),
PIN(USB_VBUS_EN1_PCC5, USB, RSVD1, RSVD2, RSVD3),
PIN(DP_HPD0_PCC6, DP, RSVD1, RSVD2, RSVD3),
PIN(WIFI_EN_PH0, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(WIFI_RST_PH1, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(WIFI_WAKE_AP_PH2, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(AP_WAKE_BT_PH3, RSVD0, UARTB, SPDIF, RSVD3),
PIN(BT_RST_PH4, RSVD0, UARTB, SPDIF, RSVD3),
PIN(BT_WAKE_AP_PH5, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(AP_WAKE_NFC_PH7, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(NFC_EN_PI0, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(NFC_INT_PI1, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(GPS_EN_PI2, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(GPS_RST_PI3, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(CAM_RST_PS4, VGP1, RSVD1, RSVD2, RSVD3),
PIN(CAM_AF_EN_PS5, VIMCLK, VGP2, RSVD2, RSVD3),
PIN(CAM_FLASH_EN_PS6, VIMCLK, VGP3, RSVD2, RSVD3),
PIN(CAM1_PWDN_PS7, VGP4, RSVD1, RSVD2, RSVD3),
PIN(CAM2_PWDN_PT0, VGP5, RSVD1, RSVD2, RSVD3),
PIN(CAM1_STROBE_PT1, VGP6, RSVD1, RSVD2, RSVD3),
PIN(LCD_TE_PY2, DISPLAYA, RSVD1, RSVD2, RSVD3),
PIN(LCD_BL_PWM_PV0, DISPLAYA, PWM0, SOR0, RSVD3),
PIN(LCD_BL_EN_PV1, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(LCD_RST_PV2, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(LCD_GPIO1_PV3, DISPLAYB, RSVD1, RSVD2, RSVD3),
PIN(LCD_GPIO2_PV4, DISPLAYB, PWM1, RSVD2, SOR1),
PIN(AP_READY_PV5, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(TOUCH_RST_PV6, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(TOUCH_CLK_PV7, TOUCH, RSVD1, RSVD2, RSVD3),
PIN(MODEM_WAKE_AP_PX0, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(TOUCH_INT_PX1, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(MOTION_INT_PX2, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(ALS_PROX_INT_PX3, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(TEMP_ALERT_PX4, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(BUTTON_POWER_ON_PX5, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(BUTTON_VOL_UP_PX6, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(BUTTON_VOL_DOWN_PX7, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(BUTTON_SLIDE_SW_PY0, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(BUTTON_HOME_PY1, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(PA6, SATA, RSVD1, RSVD2, RSVD3),
PIN(PE6, RSVD0, I2S5A, PWM2, RSVD3),
PIN(PE7, RSVD0, I2S5A, PWM3, RSVD3),
PIN(PH6, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(PK0, IQC0, I2S5B, RSVD2, RSVD3),
PIN(PK1, IQC0, I2S5B, RSVD2, RSVD3),
PIN(PK2, IQC0, I2S5B, RSVD2, RSVD3),
PIN(PK3, IQC0, I2S5B, RSVD2, RSVD3),
PIN(PK4, IQC1, RSVD1, RSVD2, RSVD3),
PIN(PK5, IQC1, RSVD1, RSVD2, RSVD3),
PIN(PK6, IQC1, RSVD1, RSVD2, RSVD3),
PIN(PK7, IQC1, RSVD1, RSVD2, RSVD3),
PIN(PL0, RSVD0, RSVD1, RSVD2, RSVD3),
PIN(PL1, SOC, RSVD1, RSVD2, RSVD3),
PIN(PZ0, VIMCLK2, RSVD1, RSVD2, RSVD3),
PIN(PZ1, VIMCLK2, SDMMC1, RSVD2, RSVD3),
PIN(PZ2, SDMMC3, CCLA, RSVD2, RSVD3),
PIN(PZ3, SDMMC3, RSVD1, RSVD2, RSVD3),
PIN(PZ4, SDMMC1, RSVD1, RSVD2, RSVD3),
PIN(PZ5, SOC, RSVD1, RSVD2, RSVD3),
};
const struct pmux_pingrp_desc *tegra_soc_pingroups = tegra210_pingroups;

View File

@ -170,6 +170,17 @@ static int phy_unprepare(struct tegra_xusb_phy *phy)
return tegra_xusb_padctl_disable(phy->padctl); return tegra_xusb_padctl_disable(phy->padctl);
} }
#define XUSB_PADCTL_USB3_PAD_MUX 0x28
#define XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE (1 << 0)
#define XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0 (1 << 1)
#define XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK1 (1 << 2)
#define XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2 (1 << 3)
#define XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK3 (1 << 4)
#define XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK4 (1 << 5)
#define XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK5 (1 << 6)
#define XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK6 (1 << 7)
#define XUSB_PADCTL_USB3_PAD_MUX_FORCE_SATA_PAD_IDDQ_DISABLE_MASK0 (1 << 8)
#define XUSB_PADCTL_UPHY_PLL_P0_CTL1 0x360 #define XUSB_PADCTL_UPHY_PLL_P0_CTL1 0x360
#define XUSB_PADCTL_UPHY_PLL_P0_CTL1_FREQ_NDIV_MASK (0xff << 20) #define XUSB_PADCTL_UPHY_PLL_P0_CTL1_FREQ_NDIV_MASK (0xff << 20)
#define XUSB_PADCTL_UPHY_PLL_P0_CTL1_FREQ_NDIV(x) (((x) & 0xff) << 20) #define XUSB_PADCTL_UPHY_PLL_P0_CTL1_FREQ_NDIV(x) (((x) & 0xff) << 20)
@ -366,31 +377,6 @@ static int pcie_phy_enable(struct tegra_xusb_phy *phy)
value &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL8_RCAL_CLK_EN; value &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL8_RCAL_CLK_EN;
padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8); padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
value = readl(NV_PA_CLK_RST_BASE + CLK_RST_XUSBIO_PLL_CFG0);
value &= ~CLK_RST_XUSBIO_PLL_CFG0_PADPLL_RESET_SWCTL;
value &= ~CLK_RST_XUSBIO_PLL_CFG0_CLK_ENABLE_SWCTL;
value |= CLK_RST_XUSBIO_PLL_CFG0_PADPLL_USE_LOCKDET;
value |= CLK_RST_XUSBIO_PLL_CFG0_PADPLL_SLEEP_IDDQ;
writel(value, NV_PA_CLK_RST_BASE + CLK_RST_XUSBIO_PLL_CFG0);
value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
value &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL1_PWR_OVRD;
padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
value &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL2_CAL_OVRD;
padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
value &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL8_RCAL_OVRD;
padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
udelay(1);
value = readl(NV_PA_CLK_RST_BASE + CLK_RST_XUSBIO_PLL_CFG0);
value |= CLK_RST_XUSBIO_PLL_CFG0_SEQ_ENABLE;
writel(value, NV_PA_CLK_RST_BASE + CLK_RST_XUSBIO_PLL_CFG0);
debug("< %s()\n", __func__); debug("< %s()\n", __func__);
return 0; return 0;
} }
@ -454,3 +440,35 @@ void tegra_xusb_padctl_init(void)
ret = tegra_xusb_process_nodes(nodes, count, &tegra210_socdata); ret = tegra_xusb_process_nodes(nodes, count, &tegra210_socdata);
debug("%s: done, ret=%d\n", __func__, ret); debug("%s: done, ret=%d\n", __func__, ret);
} }
void tegra_xusb_padctl_exit(void)
{
u32 value;
debug("> %s\n", __func__);
value = padctl_readl(&padctl, XUSB_PADCTL_USB3_PAD_MUX);
value &= ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE;
value &= ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0;
value &= ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK1;
value &= ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2;
value &= ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK3;
value &= ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK4;
value &= ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK5;
value &= ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK6;
value &= ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_SATA_PAD_IDDQ_DISABLE_MASK0;
padctl_writel(&padctl, value, XUSB_PADCTL_USB3_PAD_MUX);
value = padctl_readl(&padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
value &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL1_IDDQ;
value &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL1_SLEEP_MASK;
value |= XUSB_PADCTL_UPHY_PLL_P0_CTL1_SLEEP(3);
value &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL1_ENABLE;
padctl_writel(&padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
reset_set_enable(PERIPH_ID_PEX_USB_UPHY, 1);
while (padctl.enable)
tegra_xusb_padctl_disable(&padctl);
debug("< %s()\n", __func__);
}

View File

@ -36,3 +36,7 @@ int __weak tegra_xusb_phy_unprepare(struct tegra_xusb_phy *phy)
void __weak tegra_xusb_padctl_init(void) void __weak tegra_xusb_padctl_init(void)
{ {
} }
void __weak tegra_xusb_padctl_exit(void)
{
}

View File

@ -56,4 +56,10 @@ config DEFINE_TCM_OCM_MMAP
This option if enabled defines the TCM and OCM memory and its This option if enabled defines the TCM and OCM memory and its
memory attributes in MMU table entry. memory attributes in MMU table entry.
config VERSAL_NO_DDR
bool "Disable DDR MMU mapping"
help
This option configures MMU with no DDR to avoid speculative
access to DDR memory where DDR is not present.
endif endif

View File

@ -81,6 +81,15 @@ void mem_map_fill(void)
if (!gd->bd->bi_dram[i].size) if (!gd->bd->bi_dram[i].size)
break; break;
#if defined(CONFIG_VERSAL_NO_DDR)
if (gd->bd->bi_dram[i].start < 0x80000000UL ||
gd->bd->bi_dram[i].start > 0x100000000UL) {
printf("Ignore caches over %llx/%llx\n",
gd->bd->bi_dram[i].start,
gd->bd->bi_dram[i].size);
continue;
}
#endif
versal_mem_map[banks].virt = gd->bd->bi_dram[i].start; versal_mem_map[banks].virt = gd->bd->bi_dram[i].start;
versal_mem_map[banks].phys = gd->bd->bi_dram[i].start; versal_mem_map[banks].phys = gd->bd->bi_dram[i].start;
versal_mem_map[banks].size = gd->bd->bi_dram[i].size; versal_mem_map[banks].size = gd->bd->bi_dram[i].size;

View File

@ -6,6 +6,7 @@
#include <debug_uart.h> #include <debug_uart.h>
#include <hang.h> #include <hang.h>
#include <spl.h> #include <spl.h>
#include <generated/dt.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/spl.h> #include <asm/spl.h>
@ -44,7 +45,6 @@ u32 spl_boot_device(void)
switch ((zynq_slcr_get_boot_mode()) & ZYNQ_BM_MASK) { switch ((zynq_slcr_get_boot_mode()) & ZYNQ_BM_MASK) {
#ifdef CONFIG_SPL_SPI_SUPPORT #ifdef CONFIG_SPL_SPI_SUPPORT
case ZYNQ_BM_QSPI: case ZYNQ_BM_QSPI:
puts("qspi boot\n");
mode = BOOT_DEVICE_SPI; mode = BOOT_DEVICE_SPI;
break; break;
#endif #endif
@ -56,7 +56,6 @@ u32 spl_boot_device(void)
break; break;
#ifdef CONFIG_SPL_MMC_SUPPORT #ifdef CONFIG_SPL_MMC_SUPPORT
case ZYNQ_BM_SD: case ZYNQ_BM_SD:
puts("mmc boot\n");
mode = BOOT_DEVICE_MMC1; mode = BOOT_DEVICE_MMC1;
break; break;
#endif #endif
@ -89,8 +88,11 @@ void spl_board_prepare_for_boot(void)
int board_fit_config_name_match(const char *name) int board_fit_config_name_match(const char *name)
{ {
/* Just empty function now - can't decide what to choose */ /* Just empty function now - can't decide what to choose */
debug("%s: %s\n", __func__, name); debug("%s: Check %s, default %s\n", __func__, name, DEVICE_TREE);
return 0; if (!strcmp(name, DEVICE_TREE))
return 0;
return -1;
} }
#endif #endif

View File

@ -128,7 +128,9 @@ struct apu_regs {
#define ZYNQMP_SILICON_VER_SHIFT 12 #define ZYNQMP_SILICON_VER_SHIFT 12
struct csu_regs { struct csu_regs {
u32 reserved0[17]; u32 reserved0[4];
u32 multi_boot;
u32 reserved1[12];
u32 version; u32 version;
}; };

View File

@ -29,11 +29,8 @@ else
fi fi
if [ ! -f $BL31 ]; then if [ ! -f $BL31 ]; then
echo "WARNING: BL31 file $BL31 NOT found, resulting binary is non-functional" >&2 echo "WARNING: BL31 file $BL31 NOT found, U-Boot will run in EL3" >&2
BL31=/dev/null BL31=/dev/null
# But U-Boot proper could be loaded in EL3 by specifying
# firmware = "uboot";
# instead of "atf" in config node
fi fi
cat << __HEADER_EOF cat << __HEADER_EOF
@ -58,6 +55,10 @@ cat << __HEADER_EOF
algo = "md5"; algo = "md5";
}; };
}; };
__HEADER_EOF
if [ -f $BL31 ]; then
cat << __ATF
atf { atf {
description = "ARM Trusted Firmware"; description = "ARM Trusted Firmware";
data = /incbin/("$BL31"); data = /incbin/("$BL31");
@ -71,7 +72,8 @@ cat << __HEADER_EOF
algo = "md5"; algo = "md5";
}; };
}; };
__HEADER_EOF __ATF
fi
DEFAULT=1 DEFAULT=1
cnt=1 cnt=1
@ -106,6 +108,15 @@ __CONF_HEADER_EOF
cnt=1 cnt=1
for dtname in $DT for dtname in $DT
do do
if [ ! -f $BL31 ]; then
cat << __CONF_SECTION1_EOF
config_$cnt {
description = "$(basename $dtname .dtb)";
firmware = "uboot";
fdt = "fdt_$cnt";
};
__CONF_SECTION1_EOF
else
cat << __CONF_SECTION1_EOF cat << __CONF_SECTION1_EOF
config_$cnt { config_$cnt {
description = "$(basename $dtname .dtb)"; description = "$(basename $dtname .dtb)";
@ -114,6 +125,8 @@ cat << __CONF_SECTION1_EOF
fdt = "fdt_$cnt"; fdt = "fdt_$cnt";
}; };
__CONF_SECTION1_EOF __CONF_SECTION1_EOF
fi
cnt=$((cnt+1)) cnt=$((cnt+1))
done done

View File

@ -6,7 +6,6 @@
*/ */
#include <common.h> #include <common.h>
#include <debug_uart.h>
#include <init.h> #include <init.h>
#include <spl.h> #include <spl.h>
@ -20,14 +19,6 @@ void board_init_f(ulong dummy)
{ {
board_early_init_f(); board_early_init_f();
board_early_init_r(); board_early_init_r();
#ifdef CONFIG_DEBUG_UART
/* Uart debug for sure */
debug_uart_init();
puts("Debug uart enabled\n"); /* or printch() */
#endif
/* Delay is required for clocks to be propagated */
udelay(1000000);
} }
static void ps_mode_reset(ulong mode) static void ps_mode_reset(ulong mode)
@ -66,6 +57,8 @@ void board_boot_order(u32 *spl_boot_list)
spl_boot_list[1] = BOOT_DEVICE_MMC2; spl_boot_list[1] = BOOT_DEVICE_MMC2;
if (spl_boot_list[0] == BOOT_DEVICE_MMC2) if (spl_boot_list[0] == BOOT_DEVICE_MMC2)
spl_boot_list[1] = BOOT_DEVICE_MMC1; spl_boot_list[1] = BOOT_DEVICE_MMC1;
spl_boot_list[2] = BOOT_DEVICE_RAM;
} }
u32 spl_boot_device(void) u32 spl_boot_device(void)

View File

@ -36,7 +36,6 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0xffffffff80200000
endif endif
PLATFORM_CPPFLAGS += -D__MIPS__ PLATFORM_CPPFLAGS += -D__MIPS__
PLATFORM_ELFENTRY = "__start"
PLATFORM_ELFFLAGS += -B mips $(OBJCOPYFLAGS) PLATFORM_ELFFLAGS += -B mips $(OBJCOPYFLAGS)
# #

View File

@ -17,6 +17,7 @@
/dts-v1/; /dts-v1/;
#include <dt-bindings/memory/mpc83xx-sdram.h> #include <dt-bindings/memory/mpc83xx-sdram.h>
#include <dt-bindings/clk/mpc83xx-clk.h>
/ { / {
compatible = "fsl,mpc8308rdb"; compatible = "fsl,mpc8308rdb";
@ -50,6 +51,11 @@
}; };
}; };
socclocks: clocks {
compatible = "fsl,mpc8308-clk";
#clock-cells = <1>;
};
board_lbc: localbus@e0005000 { board_lbc: localbus@e0005000 {
#address-cells = <2>; #address-cells = <2>;
#size-cells = <1>; #size-cells = <1>;
@ -173,6 +179,7 @@
reg = <0x7000 0x1000>; reg = <0x7000 0x1000>;
interrupts = <16 0x8>; interrupts = <16 0x8>;
interrupt-parent = <&ipic>; interrupt-parent = <&ipic>;
clocks = <&socclocks MPC83XX_CLK_CSB>;
mode = "cpu"; mode = "cpu";
}; };

9
arch/u-boot-elf.lds Normal file
View File

@ -0,0 +1,9 @@
ENTRY(CONFIG_PLATFORM_ELFENTRY)
SECTIONS
{
. = CONFIG_PLATFORM_ELFENTRY;
.data : {
*(.data*)
}
}

View File

@ -240,6 +240,21 @@ Device (PCI0)
Return (STA_VISIBLE) Return (STA_VISIBLE)
} }
Name (SSCN, Package ()
{
0x02F8, 0x037B, Zero,
})
Name (FMCN, Package ()
{
0x0087, 0x010A, Zero,
})
Name (HSCN, Package ()
{
0x0008, 0x0020, Zero,
})
Name (RBUF, ResourceTemplate() Name (RBUF, ResourceTemplate()
{ {
FixedDMA(0x0009, 0x0000, Width32bit, ) FixedDMA(0x0009, 0x0000, Width32bit, )
@ -260,6 +275,21 @@ Device (PCI0)
{ {
Return (STA_VISIBLE) Return (STA_VISIBLE)
} }
Name (SSCN, Package ()
{
0x02F8, 0x037B, Zero,
})
Name (FMCN, Package ()
{
0x0087, 0x010A, Zero,
})
Name (HSCN, Package ()
{
0x0008, 0x0020, Zero,
})
} }
Device (GPIO) Device (GPIO)
@ -291,6 +321,53 @@ Device (PCI0)
} }
} }
Device (DWC3)
{
Name (_ADR, 0x00110000)
Name (_DEP, Package ()
{
^IPC1.PMIC
})
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Device (RHUB)
{
Name (_ADR, Zero)
/* GPLD: Generate Port Location Data (PLD) */
Method (GPLD, 1, Serialized) {
Name (PCKG, Package () {
Buffer (0x14) {}
})
/* REV: Revision 0x02 for ACPI 5.0 */
CreateField (DerefOf (Index (PCKG, Zero)), Zero, 0x07, REV)
Store (0x0002, REV)
/* VISI: Port visibility to user per port */
CreateField (DerefOf (Index (PCKG, Zero)), 0x40, One, VISI)
Store (Arg0, VISI)
/* VOFF: Vertical offset is not supplied */
CreateField (DerefOf (Index (PCKG, Zero)), 0x80, 0x10, VOFF)
Store (0xFFFF, VOFF)
/* HOFF: Horizontal offset is not supplied */
CreateField (DerefOf (Index (PCKG, Zero)), 0x90, 0x10, HOFF)
Store (0xFFFF, HOFF)
Return (PCKG)
}
Device (HS01) { Name (_ADR, 1) }
Device (SS01) { Name (_ADR, 2) }
}
}
Device (PWM0) Device (PWM0)
{ {
Name (_ADR, 0x00170000) Name (_ADR, 0x00170000)

View File

@ -109,14 +109,11 @@ static void acpi_add_table(struct acpi_rsdp *rsdp, void *table)
{ {
int i, entries_num; int i, entries_num;
struct acpi_rsdt *rsdt; struct acpi_rsdt *rsdt;
struct acpi_xsdt *xsdt = NULL; struct acpi_xsdt *xsdt;
/* The RSDT is mandatory while the XSDT is not */ /* The RSDT is mandatory while the XSDT is not */
rsdt = (struct acpi_rsdt *)rsdp->rsdt_address; rsdt = (struct acpi_rsdt *)rsdp->rsdt_address;
if (rsdp->xsdt_address)
xsdt = (struct acpi_xsdt *)((u32)rsdp->xsdt_address);
/* This should always be MAX_ACPI_TABLES */ /* This should always be MAX_ACPI_TABLES */
entries_num = ARRAY_SIZE(rsdt->entry); entries_num = ARRAY_SIZE(rsdt->entry);
@ -135,30 +132,34 @@ static void acpi_add_table(struct acpi_rsdp *rsdp, void *table)
/* Fix RSDT length or the kernel will assume invalid entries */ /* Fix RSDT length or the kernel will assume invalid entries */
rsdt->header.length = sizeof(struct acpi_table_header) + rsdt->header.length = sizeof(struct acpi_table_header) +
(sizeof(u32) * (i + 1)); sizeof(u32) * (i + 1);
/* Re-calculate checksum */ /* Re-calculate checksum */
rsdt->header.checksum = 0; rsdt->header.checksum = 0;
rsdt->header.checksum = table_compute_checksum((u8 *)rsdt, rsdt->header.checksum = table_compute_checksum((u8 *)rsdt,
rsdt->header.length); rsdt->header.length);
/* The RSDT is mandatory while the XSDT is not */
if (!rsdp->xsdt_address)
return;
/* /*
* And now the same thing for the XSDT. We use the same index as for * And now the same thing for the XSDT. We use the same index as for
* now we want the XSDT and RSDT to always be in sync in U-Boot * now we want the XSDT and RSDT to always be in sync in U-Boot
*/ */
if (xsdt) { xsdt = (struct acpi_xsdt *)((u32)rsdp->xsdt_address);
/* Add table to the XSDT */
xsdt->entry[i] = (u64)(u32)table;
/* Fix XSDT length */ /* Add table to the XSDT */
xsdt->header.length = sizeof(struct acpi_table_header) + xsdt->entry[i] = (u64)(u32)table;
(sizeof(u64) * (i + 1));
/* Re-calculate checksum */ /* Fix XSDT length */
xsdt->header.checksum = 0; xsdt->header.length = sizeof(struct acpi_table_header) +
xsdt->header.checksum = table_compute_checksum((u8 *)xsdt, sizeof(u64) * (i + 1);
xsdt->header.length);
} /* Re-calculate checksum */
xsdt->header.checksum = 0;
xsdt->header.checksum = table_compute_checksum((u8 *)xsdt,
xsdt->header.length);
} }
static void acpi_create_facs(struct acpi_facs *facs) static void acpi_create_facs(struct acpi_facs *facs)

View File

@ -78,22 +78,21 @@ DECLARE_GLOBAL_DATA_PTR;
int setup_mac_address(void) int setup_mac_address(void)
{ {
struct udevice *dev;
ofnode eeprom;
unsigned char enetaddr[6]; unsigned char enetaddr[6];
int ret; struct udevice *dev;
int off, ret;
ret = eth_env_get_enetaddr("ethaddr", enetaddr); ret = eth_env_get_enetaddr("ethaddr", enetaddr);
if (ret) /* ethaddr is already set */ if (ret) /* ethaddr is already set */
return 0; return 0;
eeprom = ofnode_path("/soc/i2c@5c002000/eeprom@50"); off = fdt_path_offset(gd->fdt_blob, "eeprom0");
if (!ofnode_valid(eeprom)) { if (off < 0) {
printf("Invalid hardware path to EEPROM!\n"); printf("%s: No eeprom0 path offset\n", __func__);
return -ENODEV; return off;
} }
ret = uclass_get_device_by_ofnode(UCLASS_I2C_EEPROM, eeprom, &dev); ret = uclass_get_device_by_of_offset(UCLASS_I2C_EEPROM, off, &dev);
if (ret) { if (ret) {
printf("Cannot find EEPROM!\n"); printf("Cannot find EEPROM!\n");
return ret; return ret;

View File

@ -35,7 +35,7 @@ config SYS_LS_PFE_FW_ADDR
config SYS_LS_PFE_ESBC_ADDR config SYS_LS_PFE_ESBC_ADDR
hex "PFE Firmware HDR Addr" hex "PFE Firmware HDR Addr"
default 0x40700000 default 0x40640000
config DDR_PFE_PHYS_BASEADDR config DDR_PFE_PHYS_BASEADDR
hex "PFE DDR physical base address" hex "PFE DDR physical base address"

View File

@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-2.0+ // SPDX-License-Identifier: GPL-2.0+
/* /*
* Copyright 2015 Freescale Semiconductor, Inc. * Copyright 2015 Freescale Semiconductor, Inc.
* Copyright 2019 NXP
*/ */
#include <common.h> #include <common.h>
@ -271,11 +272,24 @@ unsigned long get_board_ddr_clk(void)
return 66666666; return 66666666;
} }
int select_i2c_ch_pca9547(u8 ch) int select_i2c_ch_pca9547(u8 ch, int bus_num)
{ {
int ret; int ret;
#ifdef CONFIG_DM_I2C
struct udevice *dev;
ret = i2c_get_chip_for_busnum(bus_num, I2C_MUX_PCA_ADDR_PRI,
1, &dev);
if (ret) {
printf("%s: Cannot find udev for a bus %d\n", __func__,
bus_num);
return ret;
}
ret = dm_i2c_write(dev, 0, &ch, 1);
#else
ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1); ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1);
#endif
if (ret) { if (ret) {
puts("PCA: failed to select proper channel\n"); puts("PCA: failed to select proper channel\n");
return ret; return ret;
@ -290,8 +304,10 @@ int dram_init(void)
* When resuming from deep sleep, the I2C channel may not be * When resuming from deep sleep, the I2C channel may not be
* in the default channel. So, switch to the default channel * in the default channel. So, switch to the default channel
* before accessing DDR SPD. * before accessing DDR SPD.
*
* PCA9547 mount on I2C1 bus
*/ */
select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0);
fsl_initdram(); fsl_initdram();
#if (!defined(CONFIG_SPL) && !defined(CONFIG_TFABOOT)) || \ #if (!defined(CONFIG_SPL) && !defined(CONFIG_TFABOOT)) || \
defined(CONFIG_SPL_BUILD) defined(CONFIG_SPL_BUILD)
@ -304,16 +320,83 @@ int dram_init(void)
int i2c_multiplexer_select_vid_channel(u8 channel) int i2c_multiplexer_select_vid_channel(u8 channel)
{ {
return select_i2c_ch_pca9547(channel); return select_i2c_ch_pca9547(channel, 0);
} }
void board_retimer_init(void) void board_retimer_init(void)
{ {
u8 reg; u8 reg;
int bus_num = 0;
/* Retimer is connected to I2C1_CH7_CH5 */ /* Retimer is connected to I2C1_CH7_CH5 */
select_i2c_ch_pca9547(I2C_MUX_CH7); select_i2c_ch_pca9547(I2C_MUX_CH7, bus_num);
reg = I2C_MUX_CH5; reg = I2C_MUX_CH5;
#ifdef CONFIG_DM_I2C
struct udevice *dev;
int ret;
ret = i2c_get_chip_for_busnum(bus_num, I2C_MUX_PCA_ADDR_SEC,
1, &dev);
if (ret) {
printf("%s: Cannot find udev for a bus %d\n", __func__,
bus_num);
return;
}
dm_i2c_write(dev, 0, &reg, 1);
/* Access to Control/Shared register */
ret = i2c_get_chip_for_busnum(bus_num, I2C_RETIMER_ADDR,
1, &dev);
if (ret) {
printf("%s: Cannot find udev for a bus %d\n", __func__,
bus_num);
return;
}
reg = 0x0;
dm_i2c_write(dev, 0xff, &reg, 1);
/* Read device revision and ID */
dm_i2c_read(dev, 1, &reg, 1);
debug("Retimer version id = 0x%x\n", reg);
/* Enable Broadcast. All writes target all channel register sets */
reg = 0x0c;
dm_i2c_write(dev, 0xff, &reg, 1);
/* Reset Channel Registers */
dm_i2c_read(dev, 0, &reg, 1);
reg |= 0x4;
dm_i2c_write(dev, 0, &reg, 1);
/* Enable override divider select and Enable Override Output Mux */
dm_i2c_read(dev, 9, &reg, 1);
reg |= 0x24;
dm_i2c_write(dev, 9, &reg, 1);
/* Select VCO Divider to full rate (000) */
dm_i2c_read(dev, 0x18, &reg, 1);
reg &= 0x8f;
dm_i2c_write(dev, 0x18, &reg, 1);
/* Selects active PFD MUX Input as Re-timed Data (001) */
dm_i2c_read(dev, 0x1e, &reg, 1);
reg &= 0x3f;
reg |= 0x20;
dm_i2c_write(dev, 0x1e, &reg, 1);
/* Set data rate as 10.3125 Gbps */
reg = 0x0;
dm_i2c_write(dev, 0x60, &reg, 1);
reg = 0xb2;
dm_i2c_write(dev, 0x61, &reg, 1);
reg = 0x90;
dm_i2c_write(dev, 0x62, &reg, 1);
reg = 0xb3;
dm_i2c_write(dev, 0x63, &reg, 1);
reg = 0xcd;
dm_i2c_write(dev, 0x64, &reg, 1);
#else
i2c_write(I2C_MUX_PCA_ADDR_SEC, 0, 1, &reg, 1); i2c_write(I2C_MUX_PCA_ADDR_SEC, 0, 1, &reg, 1);
/* Access to Control/Shared register */ /* Access to Control/Shared register */
@ -360,9 +443,10 @@ void board_retimer_init(void)
i2c_write(I2C_RETIMER_ADDR, 0x63, 1, &reg, 1); i2c_write(I2C_RETIMER_ADDR, 0x63, 1, &reg, 1);
reg = 0xcd; reg = 0xcd;
i2c_write(I2C_RETIMER_ADDR, 0x64, 1, &reg, 1); i2c_write(I2C_RETIMER_ADDR, 0x64, 1, &reg, 1);
#endif
/* Return the default channel */ /* Return the default channel */
select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, bus_num);
} }
int board_early_init_f(void) int board_early_init_f(void)
@ -375,8 +459,10 @@ int board_early_init_f(void)
u8 uart; u8 uart;
#endif #endif
#ifdef CONFIG_SYS_I2C
#ifdef CONFIG_SYS_I2C_EARLY_INIT #ifdef CONFIG_SYS_I2C_EARLY_INIT
i2c_early_init_f(); i2c_early_init_f();
#endif
#endif #endif
fsl_lsch2_early_init_f(); fsl_lsch2_early_init_f();
@ -457,7 +543,7 @@ int board_init(void)
erratum_a010315(); erratum_a010315();
#endif #endif
select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0);
board_retimer_init(); board_retimer_init();
#ifdef CONFIG_SYS_FSL_SERDES #ifdef CONFIG_SYS_FSL_SERDES

View File

@ -36,11 +36,24 @@
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
int select_i2c_ch_pca9547(u8 ch) int select_i2c_ch_pca9547(u8 ch, int bus_num)
{ {
int ret; int ret;
#ifdef CONFIG_DM_I2C
struct udevice *dev;
ret = i2c_get_chip_for_busnum(bus_num, I2C_MUX_PCA_ADDR_PRI,
1, &dev);
if (ret) {
printf("%s: Cannot find udev for a bus %d\n", __func__,
bus_num);
return ret;
}
ret = dm_i2c_write(dev, 0, &ch, 1);
#else
ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1); ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1);
#endif
if (ret) { if (ret) {
puts("PCA: failed to select proper channel\n"); puts("PCA: failed to select proper channel\n");
return ret; return ret;
@ -149,7 +162,7 @@ val = (in_le32(SMMU_SCR0) | SCR0_CLIENTPD_MASK) & ~(SCR0_USFCFG_MASK);
sec_init(); sec_init();
#endif #endif
select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0);
return 0; return 0;
} }

View File

@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-2.0+ // SPDX-License-Identifier: GPL-2.0+
/* /*
* Copyright 2016 Freescale Semiconductor, Inc. * Copyright 2016 Freescale Semiconductor, Inc.
* Copyright 2019 NXP
*/ */
#include <common.h> #include <common.h>
@ -269,11 +270,23 @@ u32 get_lpuart_clk(void)
} }
#endif #endif
int select_i2c_ch_pca9547(u8 ch) int select_i2c_ch_pca9547(u8 ch, int bus_num)
{ {
int ret; int ret;
#ifdef CONFIG_DM_I2C
struct udevice *dev;
ret = i2c_get_chip_for_busnum(bus_num, I2C_MUX_PCA_ADDR_PRI,
1, &dev);
if (ret) {
printf("%s: Cannot find udev for a bus %d\n", __func__,
bus_num);
return ret;
}
ret = dm_i2c_write(dev, 0, &ch, 1);
#else
ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1); ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1);
#endif
if (ret) { if (ret) {
puts("PCA: failed to select proper channel\n"); puts("PCA: failed to select proper channel\n");
return ret; return ret;
@ -288,8 +301,10 @@ int dram_init(void)
* When resuming from deep sleep, the I2C channel may not be * When resuming from deep sleep, the I2C channel may not be
* in the default channel. So, switch to the default channel * in the default channel. So, switch to the default channel
* before accessing DDR SPD. * before accessing DDR SPD.
*
* PCA9547 mount on I2C1 bus
*/ */
select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0);
fsl_initdram(); fsl_initdram();
#if (!defined(CONFIG_SPL) && !defined(CONFIG_TFABOOT)) || \ #if (!defined(CONFIG_SPL) && !defined(CONFIG_TFABOOT)) || \
defined(CONFIG_SPL_BUILD) defined(CONFIG_SPL_BUILD)
@ -302,7 +317,7 @@ int dram_init(void)
int i2c_multiplexer_select_vid_channel(u8 channel) int i2c_multiplexer_select_vid_channel(u8 channel)
{ {
return select_i2c_ch_pca9547(channel); return select_i2c_ch_pca9547(channel, 0);
} }
int board_early_init_f(void) int board_early_init_f(void)
@ -315,8 +330,10 @@ int board_early_init_f(void)
u8 uart; u8 uart;
#endif #endif
#ifdef CONFIG_SYS_I2C
#ifdef CONFIG_SYS_I2C_EARLY_INIT #ifdef CONFIG_SYS_I2C_EARLY_INIT
i2c_early_init_f(); i2c_early_init_f();
#endif
#endif #endif
fsl_lsch2_early_init_f(); fsl_lsch2_early_init_f();
@ -394,7 +411,7 @@ int misc_init_r(void)
int board_init(void) int board_init(void)
{ {
select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0);
#ifdef CONFIG_SYS_FSL_SERDES #ifdef CONFIG_SYS_FSL_SERDES
config_serdes_mux(); config_serdes_mux();

View File

@ -29,11 +29,14 @@
#include "../common/vid.h" #include "../common/vid.h"
#include <fsl_immap.h> #include <fsl_immap.h>
#include <asm/arch-fsl-layerscape/fsl_icid.h> #include <asm/arch-fsl-layerscape/fsl_icid.h>
#include <asm/gic-v3.h>
#include <cpu_func.h>
#ifdef CONFIG_EMC2305 #ifdef CONFIG_EMC2305
#include "../common/emc2305.h" #include "../common/emc2305.h"
#endif #endif
#define GIC_LPI_SIZE 0x200000
#ifdef CONFIG_TARGET_LX2160AQDS #ifdef CONFIG_TARGET_LX2160AQDS
#define CFG_MUX_I2C_SDHC(reg, value) ((reg & 0x3f) | value) #define CFG_MUX_I2C_SDHC(reg, value) ((reg & 0x3f) | value)
#define SET_CFG_MUX1_SDHC1_SDHC(reg) (reg & 0x3f) #define SET_CFG_MUX1_SDHC1_SDHC(reg) (reg & 0x3f)
@ -149,6 +152,7 @@ int board_fix_fdt(void *fdt)
reg_name = reg_names; reg_name = reg_names;
remaining_names_len = names_len - (reg_name - reg_names); remaining_names_len = names_len - (reg_name - reg_names);
i = 0;
while ((i < ARRAY_SIZE(reg_names_map)) && remaining_names_len) { while ((i < ARRAY_SIZE(reg_names_map)) && remaining_names_len) {
old_name_len = strlen(reg_names_map[i].old_str); old_name_len = strlen(reg_names_map[i].old_str);
new_name_len = strlen(reg_names_map[i].new_str); new_name_len = strlen(reg_names_map[i].new_str);
@ -274,7 +278,14 @@ int i2c_multiplexer_select_vid_channel(u8 channel)
int init_func_vid(void) int init_func_vid(void)
{ {
if (adjust_vdd(0) < 0) int set_vid;
if (IS_SVR_REV(get_svr(), 1, 0))
set_vid = adjust_vdd(800);
else
set_vid = adjust_vdd(0);
if (set_vid < 0)
printf("core voltage not adjusted\n"); printf("core voltage not adjusted\n");
return 0; return 0;
@ -469,10 +480,16 @@ int config_board_mux(void)
reg11 = SET_CFG_MUX3_SDHC1_SPI(reg11, 0x01); reg11 = SET_CFG_MUX3_SDHC1_SPI(reg11, 0x01);
QIXIS_WRITE(brdcfg[11], reg11); QIXIS_WRITE(brdcfg[11], reg11);
} else { } else {
/* Routes {SDHC1_DAT4} to SDHC1 adapter slot */ /*
* If {SDHC1_DAT4} has been configured to route to SDHC1_VS,
* do not change it.
* Otherwise route {SDHC1_DAT4} to SDHC1 adapter slot.
*/
reg11 = QIXIS_READ(brdcfg[11]); reg11 = QIXIS_READ(brdcfg[11]);
reg11 = SET_CFG_MUX2_SDHC1_SPI(reg11, 0x00); if ((reg11 & 0x30) != 0x30) {
QIXIS_WRITE(brdcfg[11], reg11); reg11 = SET_CFG_MUX2_SDHC1_SPI(reg11, 0x00);
QIXIS_WRITE(brdcfg[11], reg11);
}
/* - Routes {SDHC1_DAT5, SDHC1_DAT6} to SDHC1 adapter slot. /* - Routes {SDHC1_DAT5, SDHC1_DAT6} to SDHC1 adapter slot.
* {SDHC1_DAT7, SDHC1_DS } to SDHC1 adapter slot. * {SDHC1_DAT7, SDHC1_DS } to SDHC1 adapter slot.
@ -627,8 +644,22 @@ void board_quiesce_devices(void)
} }
#endif #endif
#ifdef CONFIG_OF_BOARD_SETUP #ifdef CONFIG_GIC_V3_ITS
void fdt_fixup_gic_lpi_memory(void *blob, u64 gic_lpi_base)
{
u32 phandle;
int err;
struct fdt_memory gic_lpi;
gic_lpi.start = gic_lpi_base;
gic_lpi.end = gic_lpi_base + GIC_LPI_SIZE - 1;
err = fdtdec_add_reserved_memory(blob, "gic-lpi", &gic_lpi, &phandle);
if (err < 0)
debug("failed to add reserved memory: %d\n", err);
}
#endif
#ifdef CONFIG_OF_BOARD_SETUP
int ft_board_setup(void *blob, bd_t *bd) int ft_board_setup(void *blob, bd_t *bd)
{ {
int i; int i;
@ -639,6 +670,7 @@ int ft_board_setup(void *blob, bd_t *bd)
u64 mc_memory_base = 0; u64 mc_memory_base = 0;
u64 mc_memory_size = 0; u64 mc_memory_size = 0;
u16 total_memory_banks; u16 total_memory_banks;
u64 gic_lpi_base;
ft_cpu_setup(blob, bd); ft_cpu_setup(blob, bd);
@ -658,6 +690,12 @@ int ft_board_setup(void *blob, bd_t *bd)
size[i] = gd->bd->bi_dram[i].size; size[i] = gd->bd->bi_dram[i].size;
} }
#ifdef CONFIG_GIC_V3_ITS
gic_lpi_base = gd->arch.resv_ram - GIC_LPI_SIZE;
gic_lpi_tables_init(gic_lpi_base, cpu_numcores());
fdt_fixup_gic_lpi_memory(blob, gic_lpi_base);
#endif
#ifdef CONFIG_RESV_RAM #ifdef CONFIG_RESV_RAM
/* reduce size if reserved memory is within this bank */ /* reduce size if reserved memory is within this bank */
if (gd->arch.resv_ram >= base[0] && if (gd->arch.resv_ram >= base[0] &&

View File

@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0+ // SPDX-License-Identifier: GPL-2.0+
/* /*
* (C) Copyright 2013-2015 * (C) Copyright 2013-2019
* NVIDIA Corporation <www.nvidia.com> * NVIDIA Corporation <www.nvidia.com>
*/ */
@ -9,7 +9,6 @@
#include <asm/arch/gpio.h> #include <asm/arch/gpio.h>
#include <asm/arch/pinmux.h> #include <asm/arch/pinmux.h>
#include "../p2571/max77620_init.h" #include "../p2571/max77620_init.h"
#include "pinmux-config-e2220-1170.h"
void pin_mux_mmc(void) void pin_mux_mmc(void)
{ {
@ -30,21 +29,3 @@ void pin_mux_mmc(void)
if (ret) if (ret)
printf("i2c_write 0 0x3c 0x27 failed: %d\n", ret); printf("i2c_write 0 0x3c 0x27 failed: %d\n", ret);
} }
/*
* Routine: pinmux_init
* Description: Do individual peripheral pinmux configs
*/
void pinmux_init(void)
{
pinmux_clear_tristate_input_clamping();
gpio_config_table(e2220_1170_gpio_inits,
ARRAY_SIZE(e2220_1170_gpio_inits));
pinmux_config_pingrp_table(e2220_1170_pingrps,
ARRAY_SIZE(e2220_1170_pingrps));
pinmux_config_drvgrp_table(e2220_1170_drvgrps,
ARRAY_SIZE(e2220_1170_drvgrps));
}

View File

@ -1,276 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved.
*/
/*
* THIS FILE IS AUTO-GENERATED - DO NOT EDIT!
*
* To generate this file, use the tegra-pinmux-scripts tool available from
* https://github.com/NVIDIA/tegra-pinmux-scripts
* Run "board-to-uboot.py e2220-1170".
*/
#ifndef _PINMUX_CONFIG_E2220_1170_H_
#define _PINMUX_CONFIG_E2220_1170_H_
#define GPIO_INIT(_port, _gpio, _init) \
{ \
.gpio = TEGRA_GPIO(_port, _gpio), \
.init = TEGRA_GPIO_INIT_##_init, \
}
static const struct tegra_gpio_config e2220_1170_gpio_inits[] = {
/* port, pin, init_val */
GPIO_INIT(A, 5, IN),
GPIO_INIT(A, 6, IN),
GPIO_INIT(B, 4, IN),
GPIO_INIT(E, 6, IN),
GPIO_INIT(G, 2, OUT0),
GPIO_INIT(G, 3, OUT0),
GPIO_INIT(H, 0, OUT0),
GPIO_INIT(H, 1, OUT0),
GPIO_INIT(H, 2, IN),
GPIO_INIT(H, 3, OUT0),
GPIO_INIT(H, 4, OUT0),
GPIO_INIT(H, 5, IN),
GPIO_INIT(H, 6, OUT0),
GPIO_INIT(H, 7, OUT0),
GPIO_INIT(I, 0, OUT0),
GPIO_INIT(I, 1, IN),
GPIO_INIT(I, 2, OUT0),
GPIO_INIT(I, 3, OUT0),
GPIO_INIT(K, 0, IN),
GPIO_INIT(K, 1, OUT0),
GPIO_INIT(K, 2, OUT0),
GPIO_INIT(K, 3, OUT0),
GPIO_INIT(K, 4, IN),
GPIO_INIT(K, 5, OUT0),
GPIO_INIT(K, 6, IN),
GPIO_INIT(K, 7, OUT0),
GPIO_INIT(L, 0, OUT0),
GPIO_INIT(S, 4, OUT0),
GPIO_INIT(S, 5, OUT0),
GPIO_INIT(S, 6, OUT0),
GPIO_INIT(S, 7, OUT0),
GPIO_INIT(T, 0, OUT0),
GPIO_INIT(T, 1, OUT0),
GPIO_INIT(V, 1, OUT0),
GPIO_INIT(V, 2, OUT0),
GPIO_INIT(V, 3, IN),
GPIO_INIT(V, 5, OUT0),
GPIO_INIT(V, 6, OUT0),
GPIO_INIT(X, 0, IN),
GPIO_INIT(X, 1, IN),
GPIO_INIT(X, 2, IN),
GPIO_INIT(X, 3, IN),
GPIO_INIT(X, 4, IN),
GPIO_INIT(X, 5, IN),
GPIO_INIT(X, 6, IN),
GPIO_INIT(X, 7, IN),
GPIO_INIT(Y, 0, IN),
GPIO_INIT(Y, 1, IN),
GPIO_INIT(Z, 0, IN),
GPIO_INIT(Z, 4, OUT0),
GPIO_INIT(BB, 2, OUT0),
GPIO_INIT(BB, 3, OUT0),
GPIO_INIT(BB, 4, IN),
GPIO_INIT(CC, 1, IN),
GPIO_INIT(CC, 5, OUT0),
GPIO_INIT(CC, 6, IN),
GPIO_INIT(CC, 7, OUT0),
};
#define PINCFG(_pingrp, _mux, _pull, _tri, _io, _od, _e_io_hv) \
{ \
.pingrp = PMUX_PINGRP_##_pingrp, \
.func = PMUX_FUNC_##_mux, \
.pull = PMUX_PULL_##_pull, \
.tristate = PMUX_TRI_##_tri, \
.io = PMUX_PIN_##_io, \
.od = PMUX_PIN_OD_##_od, \
.e_io_hv = PMUX_PIN_E_IO_HV_##_e_io_hv, \
.lock = PMUX_PIN_LOCK_DEFAULT, \
}
static const struct pmux_pingrp_config e2220_1170_pingrps[] = {
/* pingrp, mux, pull, tri, e_input, od, e_io_hv */
PINCFG(PEX_L0_RST_N_PA0, PE0, NORMAL, NORMAL, OUTPUT, DISABLE, NORMAL),
PINCFG(PEX_L0_CLKREQ_N_PA1, PE0, UP, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(PEX_WAKE_N_PA2, PE, UP, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(PEX_L1_RST_N_PA3, PE1, NORMAL, NORMAL, OUTPUT, DISABLE, NORMAL),
PINCFG(PEX_L1_CLKREQ_N_PA4, PE1, UP, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(SATA_LED_ACTIVE_PA5, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PA6, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DAP1_FS_PB0, I2S1, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DAP1_DIN_PB1, I2S1, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DAP1_DOUT_PB2, I2S1, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DAP1_SCLK_PB3, I2S1, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SPI2_MOSI_PB4, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SPI2_MISO_PB5, RSVD2, DOWN, TRISTATE, OUTPUT, DISABLE, DEFAULT),
PINCFG(SPI2_SCK_PB6, RSVD2, DOWN, TRISTATE, OUTPUT, DISABLE, DEFAULT),
PINCFG(SPI2_CS0_PB7, RSVD2, DOWN, TRISTATE, OUTPUT, DISABLE, DEFAULT),
PINCFG(SPI1_MOSI_PC0, SPI1, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(SPI1_MISO_PC1, SPI1, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SPI1_SCK_PC2, SPI1, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(SPI1_CS0_PC3, SPI1, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(SPI1_CS1_PC4, SPI1, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(SPI4_SCK_PC5, SPI4, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(SPI4_CS0_PC6, SPI4, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(SPI4_MOSI_PC7, SPI4, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(SPI4_MISO_PD0, SPI4, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(UART3_TX_PD1, UARTC, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(UART3_RX_PD2, UARTC, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(UART3_RTS_PD3, UARTC, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(UART3_CTS_PD4, UARTC, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DMIC1_CLK_PE0, DMIC1, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(DMIC1_DAT_PE1, DMIC1, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DMIC2_CLK_PE2, DMIC2, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(DMIC2_DAT_PE3, DMIC2, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DMIC3_CLK_PE4, DMIC3, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(DMIC3_DAT_PE5, DMIC3, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PE6, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PE7, PWM3, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(GEN3_I2C_SCL_PF0, I2C3, NORMAL, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(GEN3_I2C_SDA_PF1, I2C3, NORMAL, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(UART2_TX_PG0, UART, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(UART2_RX_PG1, UART, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(UART2_RTS_PG2, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(UART2_CTS_PG3, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(WIFI_EN_PH0, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(WIFI_RST_PH1, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(WIFI_WAKE_AP_PH2, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(AP_WAKE_BT_PH3, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(BT_RST_PH4, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(BT_WAKE_AP_PH5, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PH6, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(AP_WAKE_NFC_PH7, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(NFC_EN_PI0, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(NFC_INT_PI1, DEFAULT, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(GPS_EN_PI2, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(GPS_RST_PI3, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(UART4_TX_PI4, UARTD, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(UART4_RX_PI5, UARTD, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(UART4_RTS_PI6, UARTD, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(UART4_CTS_PI7, UARTD, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(GEN1_I2C_SDA_PJ0, I2C1, NORMAL, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(GEN1_I2C_SCL_PJ1, I2C1, NORMAL, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(GEN2_I2C_SCL_PJ2, I2C2, NORMAL, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(GEN2_I2C_SDA_PJ3, I2C2, NORMAL, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(DAP4_FS_PJ4, I2S4B, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DAP4_DIN_PJ5, I2S4B, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DAP4_DOUT_PJ6, I2S4B, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DAP4_SCLK_PJ7, I2S4B, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PK0, DEFAULT, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PK1, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(PK2, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(PK3, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(PK4, DEFAULT, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PK5, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(PK6, DEFAULT, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PK7, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(PL0, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(PL1, SOC, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC1_CLK_PM0, SDMMC1, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC1_CMD_PM1, SDMMC1, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC1_DAT3_PM2, SDMMC1, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC1_DAT2_PM3, SDMMC1, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC1_DAT1_PM4, SDMMC1, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC1_DAT0_PM5, SDMMC1, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC3_CLK_PP0, SDMMC3, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC3_CMD_PP1, SDMMC3, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC3_DAT3_PP2, SDMMC3, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC3_DAT2_PP3, SDMMC3, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC3_DAT1_PP4, SDMMC3, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(SDMMC3_DAT0_PP5, SDMMC3, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(CAM1_MCLK_PS0, EXTPERIPH3, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(CAM2_MCLK_PS1, EXTPERIPH3, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(CAM_I2C_SCL_PS2, I2CVI, NORMAL, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(CAM_I2C_SDA_PS3, I2CVI, NORMAL, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(CAM_RST_PS4, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(CAM_AF_EN_PS5, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(CAM_FLASH_EN_PS6, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(CAM1_PWDN_PS7, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(CAM2_PWDN_PT0, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(CAM1_STROBE_PT1, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(UART1_TX_PU0, UARTA, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(UART1_RX_PU1, UARTA, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(UART1_RTS_PU2, UARTA, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(UART1_CTS_PU3, UARTA, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(LCD_BL_PWM_PV0, PWM0, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(LCD_BL_EN_PV1, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(LCD_RST_PV2, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(LCD_GPIO1_PV3, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(LCD_GPIO2_PV4, PWM1, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(AP_READY_PV5, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(TOUCH_RST_PV6, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(TOUCH_CLK_PV7, TOUCH, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(MODEM_WAKE_AP_PX0, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(TOUCH_INT_PX1, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(MOTION_INT_PX2, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(ALS_PROX_INT_PX3, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(TEMP_ALERT_PX4, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(BUTTON_POWER_ON_PX5, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(BUTTON_VOL_UP_PX6, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(BUTTON_VOL_DOWN_PX7, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(BUTTON_SLIDE_SW_PY0, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(BUTTON_HOME_PY1, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(LCD_TE_PY2, DISPLAYA, DOWN, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PWR_I2C_SCL_PY3, I2CPMU, NORMAL, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(PWR_I2C_SDA_PY4, I2CPMU, NORMAL, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(CLK_32K_OUT_PY5, SOC, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PZ0, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PZ1, SDMMC1, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PZ2, SDMMC3, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PZ3, SDMMC3, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PZ4, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(PZ5, SOC, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DAP2_FS_PAA0, I2S2, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DAP2_SCLK_PAA1, I2S2, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DAP2_DIN_PAA2, I2S2, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(DAP2_DOUT_PAA3, I2S2, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(AUD_MCLK_PBB0, AUD, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(DVFS_PWM_PBB1, CLDVFS, NORMAL, TRISTATE, OUTPUT, DISABLE, DEFAULT),
PINCFG(DVFS_CLK_PBB2, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(GPIO_X1_AUD_PBB3, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(GPIO_X3_AUD_PBB4, DEFAULT, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(HDMI_CEC_PCC0, CEC, NORMAL, NORMAL, INPUT, DISABLE, HIGH),
PINCFG(HDMI_INT_DP_HPD_PCC1, DEFAULT, DOWN, NORMAL, INPUT, DISABLE, NORMAL),
PINCFG(SPDIF_OUT_PCC2, SPDIF, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(SPDIF_IN_PCC3, SPDIF, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(USB_VBUS_EN0_PCC4, USB, NORMAL, NORMAL, INPUT, DISABLE, HIGH),
PINCFG(USB_VBUS_EN1_PCC5, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, NORMAL),
PINCFG(DP_HPD0_PCC6, DEFAULT, DOWN, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(PCC7, DEFAULT, NORMAL, NORMAL, OUTPUT, DISABLE, NORMAL),
PINCFG(SPI2_CS1_PDD0, RSVD1, DOWN, TRISTATE, OUTPUT, DISABLE, DEFAULT),
PINCFG(QSPI_SCK_PEE0, QSPI, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(QSPI_CS_N_PEE1, QSPI, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(QSPI_IO0_PEE2, QSPI, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(QSPI_IO1_PEE3, QSPI, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(QSPI_IO2_PEE4, QSPI, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(QSPI_IO3_PEE5, QSPI, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(CORE_PWR_REQ, CORE, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(CPU_PWR_REQ, CPU, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(PWR_INT_N, PMI, UP, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(CLK_32K_IN, CLK, NORMAL, NORMAL, INPUT, DISABLE, DEFAULT),
PINCFG(JTAG_RTCK, JTAG, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(CLK_REQ, SYS, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
PINCFG(SHUTDOWN, SHUTDOWN, NORMAL, NORMAL, OUTPUT, DISABLE, DEFAULT),
};
#define DRVCFG(_drvgrp, _slwf, _slwr, _drvup, _drvdn, _lpmd, _schmt, _hsm) \
{ \
.drvgrp = PMUX_DRVGRP_##_drvgrp, \
.slwf = _slwf, \
.slwr = _slwr, \
.drvup = _drvup, \
.drvdn = _drvdn, \
.lpmd = PMUX_LPMD_##_lpmd, \
.schmt = PMUX_SCHMT_##_schmt, \
.hsm = PMUX_HSM_##_hsm, \
}
static const struct pmux_drvgrp_config e2220_1170_drvgrps[] = {
};
#endif /* PINMUX_CONFIG_E2220_1170_H */

Some files were not shown because too many files have changed in this diff Show More