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:
commit
1f47e2aca4
|
@ -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"
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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"
|
||||||
|
|
6
Kconfig
6
Kconfig
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
27
Makefile
27
Makefile
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 \
|
||||||
|
|
|
@ -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>
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -32,3 +32,6 @@
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
|
@ -80,3 +80,7 @@
|
||||||
&sata {
|
&sata {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
|
@ -43,3 +43,11 @@
|
||||||
&sata {
|
&sata {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c3 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
|
@ -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";
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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
|
@ -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;
|
||||||
|
|
|
@ -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 = ðernet0;
|
ethernet0 = ðernet0;
|
||||||
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>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
ðernet0 {
|
ðernet0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <ðernet0_rgmii_pins_a>;
|
pinctrl-0 = <ðernet0_rgmii_pins_b>;
|
||||||
pinctrl-1 = <ðernet0_rgmii_pins_sleep_a>;
|
pinctrl-1 = <ðernet0_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;
|
||||||
|
|
|
@ -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>;
|
||||||
|
|
|
@ -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>;
|
||||||
|
|
|
@ -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>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -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>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
zynq-zc770-xm011.dts
|
|
|
@ -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)";
|
||||||
|
};
|
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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>;
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
|
};
|
||||||
|
|
|
@ -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>;
|
|
||||||
};
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
|
||||||
};
|
|
||||||
|
|
|
@ -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";
|
||||||
|
};
|
|
@ -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";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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>;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
|
|
@ -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__);
|
||||||
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -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";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
ENTRY(CONFIG_PLATFORM_ELFENTRY)
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = CONFIG_PLATFORM_ELFENTRY;
|
||||||
|
|
||||||
|
.data : {
|
||||||
|
*(.data*)
|
||||||
|
}
|
||||||
|
}
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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, ®, 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, ®, 1);
|
||||||
|
|
||||||
|
/* Read device revision and ID */
|
||||||
|
dm_i2c_read(dev, 1, ®, 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, ®, 1);
|
||||||
|
|
||||||
|
/* Reset Channel Registers */
|
||||||
|
dm_i2c_read(dev, 0, ®, 1);
|
||||||
|
reg |= 0x4;
|
||||||
|
dm_i2c_write(dev, 0, ®, 1);
|
||||||
|
|
||||||
|
/* Enable override divider select and Enable Override Output Mux */
|
||||||
|
dm_i2c_read(dev, 9, ®, 1);
|
||||||
|
reg |= 0x24;
|
||||||
|
dm_i2c_write(dev, 9, ®, 1);
|
||||||
|
|
||||||
|
/* Select VCO Divider to full rate (000) */
|
||||||
|
dm_i2c_read(dev, 0x18, ®, 1);
|
||||||
|
reg &= 0x8f;
|
||||||
|
dm_i2c_write(dev, 0x18, ®, 1);
|
||||||
|
|
||||||
|
/* Selects active PFD MUX Input as Re-timed Data (001) */
|
||||||
|
dm_i2c_read(dev, 0x1e, ®, 1);
|
||||||
|
reg &= 0x3f;
|
||||||
|
reg |= 0x20;
|
||||||
|
dm_i2c_write(dev, 0x1e, ®, 1);
|
||||||
|
|
||||||
|
/* Set data rate as 10.3125 Gbps */
|
||||||
|
reg = 0x0;
|
||||||
|
dm_i2c_write(dev, 0x60, ®, 1);
|
||||||
|
reg = 0xb2;
|
||||||
|
dm_i2c_write(dev, 0x61, ®, 1);
|
||||||
|
reg = 0x90;
|
||||||
|
dm_i2c_write(dev, 0x62, ®, 1);
|
||||||
|
reg = 0xb3;
|
||||||
|
dm_i2c_write(dev, 0x63, ®, 1);
|
||||||
|
reg = 0xcd;
|
||||||
|
dm_i2c_write(dev, 0x64, ®, 1);
|
||||||
|
#else
|
||||||
i2c_write(I2C_MUX_PCA_ADDR_SEC, 0, 1, ®, 1);
|
i2c_write(I2C_MUX_PCA_ADDR_SEC, 0, 1, ®, 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, ®, 1);
|
i2c_write(I2C_RETIMER_ADDR, 0x63, 1, ®, 1);
|
||||||
reg = 0xcd;
|
reg = 0xcd;
|
||||||
i2c_write(I2C_RETIMER_ADDR, 0x64, 1, ®, 1);
|
i2c_write(I2C_RETIMER_ADDR, 0x64, 1, ®, 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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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] &&
|
||||||
|
|
|
@ -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));
|
|
||||||
}
|
|
||||||
|
|
|
@ -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
Loading…
Reference in New Issue