Compare commits
106 Commits
v2016.07-r
...
v2016.07-r
| Author | SHA1 | Date | |
|---|---|---|---|
| 0e1e587ff4 | |||
| 20a41043fb | |||
| d90bb43933 | |||
| df6b506f16 | |||
| 4632739202 | |||
| 09b9d9e55f | |||
| d8da8298ad | |||
| 2fbb8462b0 | |||
| 9060970f4d | |||
| ea72ee72f2 | |||
| 4aae64c22a | |||
| 8dfd6e2129 | |||
| e64a6b1141 | |||
| 1013aef330 | |||
| fc9da85c60 | |||
| 64c1cc4cc5 | |||
| 5e25b9d5d9 | |||
| 3379987e26 | |||
| 186c133444 | |||
| c4adc50ea6 | |||
| aac641bcf4 | |||
| 69da34c073 | |||
| 4d1065c8d8 | |||
| 4cb9399e9b | |||
| ff6e156966 | |||
| 44faff24f5 | |||
| 6f0aea39ae | |||
| dee01e426b | |||
| 49cdce1635 | |||
| 1483151e84 | |||
| 84ecdf6da9 | |||
| f53225cce4 | |||
| 68aaa980c4 | |||
| 581ff00bf7 | |||
| faaef73f7e | |||
| d14739ffe1 | |||
| 4a9a329277 | |||
| 0abd63b26d | |||
| 2c72404687 | |||
| 9bc34799c8 | |||
| cc0f08cd34 | |||
| 64ece84854 | |||
| ac6e5fed31 | |||
| ca2ec9adc9 | |||
| 8e6e8221c7 | |||
| 13ee789074 | |||
| ae21e964d8 | |||
| 289f979cc9 | |||
| ce9844ce17 | |||
| 968ebdf1ef | |||
| 2b1cdafa9f | |||
| 4141e85bcd | |||
| fba5f93c71 | |||
| a4d799939f | |||
| 2290fe0642 | |||
| 8ada4e0ee6 | |||
| 77a1a677a6 | |||
| 9d7f416ced | |||
| 202b84ae59 | |||
| df8b0a0373 | |||
| bd62e2419b | |||
| ec048369e2 | |||
| f1f9d4fac5 | |||
| b88d6f7614 | |||
| 62f8183f6a | |||
| 6441e3deb4 | |||
| afedf5488d | |||
| a2cfc8d593 | |||
| 96044745cb | |||
| 5847084f6b | |||
| 42ffa51fd4 | |||
| 1e23737df8 | |||
| 4b3ab59d21 | |||
| 4f1318b29c | |||
| f8f9107d97 | |||
| 92dfd9221c | |||
| 85a2f772c2 | |||
| a2fd238e49 | |||
| f3acaf438d | |||
| b66a5c03a0 | |||
| fc2661eebe | |||
| 96dccd9767 | |||
| f432c33f27 | |||
| 5cc42a5184 | |||
| 5030159e27 | |||
| 69fd0d4131 | |||
| 08e64cece2 | |||
| 79887749f8 | |||
| dad7b74045 | |||
| 9f823615af | |||
| 4257f5f8f6 | |||
| 3424c3f299 | |||
| 7579a3ec8c | |||
| 20e3d05370 | |||
| 57c2a25572 | |||
| d7d4e5ccd6 | |||
| 0f3b894426 | |||
| b56e06d343 | |||
| cbeeb2aebf | |||
| 778dc5f43e | |||
| dae08d2281 | |||
| 3da9536e8f | |||
| 3551b24f53 | |||
| cd38e3d1b4 | |||
| 8c7d22965d | |||
| da70b4d141 |
17
Kconfig
17
Kconfig
@ -53,6 +53,23 @@ config CC_OPTIMIZE_FOR_SIZE
|
||||
|
||||
This option is enabled by default for U-Boot.
|
||||
|
||||
config DISTRO_DEFAULTS
|
||||
bool "Select defaults suitable for booting general purpose Linux distributions"
|
||||
default y if ARCH_SUNXI
|
||||
default n
|
||||
select CMD_BOOTZ
|
||||
select CMD_DHCP
|
||||
select CMD_EXT2
|
||||
select CMD_EXT4
|
||||
select CMD_FAT
|
||||
select CMD_FS_GENERIC
|
||||
select CMD_MII
|
||||
select CMD_PING
|
||||
select HUSH_PARSER
|
||||
help
|
||||
Select this to enable various options and commands which are suitable
|
||||
for building u-boot for booting general purpose Linux distributions.
|
||||
|
||||
config SYS_MALLOC_F
|
||||
bool "Enable malloc() pool before relocation"
|
||||
default y if DM
|
||||
|
||||
10
Makefile
10
Makefile
@ -5,7 +5,7 @@
|
||||
VERSION = 2016
|
||||
PATCHLEVEL = 07
|
||||
SUBLEVEL =
|
||||
EXTRAVERSION = -rc2
|
||||
EXTRAVERSION = -rc3
|
||||
NAME =
|
||||
|
||||
# *DOCUMENTATION*
|
||||
@ -810,7 +810,9 @@ ifeq ($(CONFIG_DM_I2C_COMPAT),y)
|
||||
endif
|
||||
|
||||
PHONY += dtbs
|
||||
dtbs dts/dt.dtb: checkdtc u-boot
|
||||
dtbs: dts/dt.dtb
|
||||
@:
|
||||
dts/dt.dtb: checkdtc u-boot
|
||||
$(Q)$(MAKE) $(build)=dts dtbs
|
||||
|
||||
quiet_cmd_copy = COPY $@
|
||||
@ -1269,8 +1271,8 @@ prepare: prepare0
|
||||
define filechk_version.h
|
||||
(echo \#define PLAIN_VERSION \"$(UBOOTRELEASE)\"; \
|
||||
echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; \
|
||||
echo \#define CC_VERSION_STRING \"$$($(CC) --version | head -n 1)\"; \
|
||||
echo \#define LD_VERSION_STRING \"$$($(LD) --version | head -n 1)\"; )
|
||||
echo \#define CC_VERSION_STRING \"$$(LC_ALL=C $(CC) --version | head -n 1)\"; \
|
||||
echo \#define LD_VERSION_STRING \"$$(LC_ALL=C $(LD) --version | head -n 1)\"; )
|
||||
endef
|
||||
|
||||
# The SOURCE_DATE_EPOCH mechanism requires a date that behaves like GNU date.
|
||||
|
||||
17
README
17
README
@ -890,23 +890,6 @@ The following options need to be configured:
|
||||
'Sane' compilers will generate smaller code if
|
||||
CONFIG_PRE_CON_BUF_SZ is a power of 2
|
||||
|
||||
- Boot Delay: CONFIG_BOOTDELAY - in seconds
|
||||
Delay before automatically booting the default image;
|
||||
set to -1 to disable autoboot.
|
||||
set to -2 to autoboot with no delay and not check for abort
|
||||
(even when CONFIG_ZERO_BOOTDELAY_CHECK is defined).
|
||||
|
||||
See doc/README.autoboot for these options that
|
||||
work with CONFIG_BOOTDELAY. None are required.
|
||||
CONFIG_BOOT_RETRY_TIME
|
||||
CONFIG_BOOT_RETRY_MIN
|
||||
CONFIG_AUTOBOOT_KEYED
|
||||
CONFIG_AUTOBOOT_PROMPT
|
||||
CONFIG_AUTOBOOT_DELAY_STR
|
||||
CONFIG_AUTOBOOT_STOP_STR
|
||||
CONFIG_ZERO_BOOTDELAY_CHECK
|
||||
CONFIG_RESET_TO_RETRY
|
||||
|
||||
- Autoboot Command:
|
||||
CONFIG_BOOTCOMMAND
|
||||
Only needed when CONFIG_BOOTDELAY is enabled;
|
||||
|
||||
@ -304,13 +304,13 @@ config TARGET_VEXPRESS_CA9X4
|
||||
bool "Support vexpress_ca9x4"
|
||||
select CPU_V7
|
||||
|
||||
config TARGET_KWB
|
||||
bool "Support kwb"
|
||||
config TARGET_BRXRE1
|
||||
bool "Support BRXRE1"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
|
||||
config TARGET_TSERIES
|
||||
bool "Support tseries"
|
||||
config TARGET_BRPPT1
|
||||
bool "Support BRPPT1"
|
||||
select CPU_V7
|
||||
select SUPPORT_SPL
|
||||
|
||||
@ -610,16 +610,8 @@ config TARGET_CM_T43
|
||||
|
||||
config ARCH_SUNXI
|
||||
bool "Support sunxi (Allwinner) SoCs"
|
||||
select CMD_BOOTZ
|
||||
select CMD_DHCP
|
||||
select CMD_EXT2
|
||||
select CMD_EXT4
|
||||
select CMD_FAT
|
||||
select CMD_FS_GENERIC
|
||||
select CMD_GPIO
|
||||
select CMD_MII
|
||||
select CMD_MMC if MMC
|
||||
select CMD_PING
|
||||
select CMD_USB
|
||||
select DM
|
||||
select DM_ETH
|
||||
@ -627,7 +619,6 @@ config ARCH_SUNXI
|
||||
select DM_KEYBOARD
|
||||
select DM_SERIAL
|
||||
select DM_USB
|
||||
select HUSH_PARSER
|
||||
select OF_BOARD_SETUP
|
||||
select OF_CONTROL
|
||||
select OF_SEPARATE
|
||||
@ -637,6 +628,7 @@ config ARCH_SUNXI
|
||||
select USB
|
||||
select USB_STORAGE
|
||||
select USB_KEYBOARD
|
||||
select USE_TINY_PRINTF
|
||||
|
||||
config TARGET_TS4800
|
||||
bool "Support TS4800"
|
||||
@ -916,8 +908,8 @@ source "arch/arm/cpu/armv8/Kconfig"
|
||||
source "arch/arm/imx-common/Kconfig"
|
||||
|
||||
source "board/bosch/shc/Kconfig"
|
||||
source "board/BuR/kwb/Kconfig"
|
||||
source "board/BuR/tseries/Kconfig"
|
||||
source "board/BuR/brxre1/Kconfig"
|
||||
source "board/BuR/brppt1/Kconfig"
|
||||
source "board/CarMediaLab/flea3/Kconfig"
|
||||
source "board/Marvell/aspenite/Kconfig"
|
||||
source "board/Marvell/gplugd/Kconfig"
|
||||
|
||||
@ -526,7 +526,7 @@ u32 spl_boot_device(void)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
switch (spl_boot_device()) {
|
||||
case BOOT_DEVICE_MMC1:
|
||||
|
||||
@ -18,15 +18,8 @@ obj-y += lowlevel_init.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(CONFIG_ARMV7_NONSEC),)
|
||||
obj-y += nonsec_virt.o
|
||||
obj-y += virt-v7.o
|
||||
obj-y += virt-dt.o
|
||||
endif
|
||||
|
||||
ifneq ($(CONFIG_ARMV7_PSCI),)
|
||||
obj-y += psci.o
|
||||
endif
|
||||
obj-$(CONFIG_ARMV7_NONSEC) += nonsec_virt.o virt-v7.o virt-dt.o
|
||||
obj-$(CONFIG_ARMV7_PSCI) += psci.o
|
||||
|
||||
obj-$(CONFIG_IPROC) += iproc-common/
|
||||
obj-$(CONFIG_KONA) += kona-common/
|
||||
|
||||
@ -292,7 +292,7 @@ static struct ccu_clock kps_ccu_clk = {
|
||||
.ops = &ccu_clk_ops,
|
||||
.ccu_clk_mgr_base = KONA_SLV_CLK_BASE_ADDR,
|
||||
},
|
||||
.num_policy_masks = 2,
|
||||
.num_policy_masks = 1,
|
||||
.policy_freq_offset = 0x00000008,
|
||||
.freq_bit_shift = 8,
|
||||
.policy_ctl_offset = 0x0000000c,
|
||||
@ -300,10 +300,6 @@ static struct ccu_clock kps_ccu_clk = {
|
||||
.policy1_mask_offset = 0x00000014,
|
||||
.policy2_mask_offset = 0x00000018,
|
||||
.policy3_mask_offset = 0x0000001c,
|
||||
.policy0_mask2_offset = 0x00000048,
|
||||
.policy1_mask2_offset = 0x0000004c,
|
||||
.policy2_mask2_offset = 0x00000050,
|
||||
.policy3_mask2_offset = 0x00000054,
|
||||
.lvm_en_offset = 0x00000034,
|
||||
.freq_id = 2,
|
||||
.freq_tbl = slave_axi_freq_tbl,
|
||||
|
||||
@ -449,10 +449,9 @@ int clk_enable(struct clk *c)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (!c->use_cnt) {
|
||||
c->use_cnt++;
|
||||
if (!c->use_cnt)
|
||||
ret = c->ops->enable(c, 1);
|
||||
}
|
||||
c->use_cnt++;
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -464,9 +463,10 @@ void clk_disable(struct clk *c)
|
||||
if (!c->ops || !c->ops->enable)
|
||||
return;
|
||||
|
||||
if (c->use_cnt) {
|
||||
if (c->use_cnt > 0) {
|
||||
c->use_cnt--;
|
||||
c->ops->enable(c, 0);
|
||||
if (c->use_cnt == 0)
|
||||
c->ops->enable(c, 0);
|
||||
}
|
||||
|
||||
/* disable parent */
|
||||
|
||||
@ -15,7 +15,7 @@ u32 spl_boot_device(void)
|
||||
return BOOT_DEVICE_NAND;
|
||||
}
|
||||
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
switch (spl_boot_device()) {
|
||||
case BOOT_DEVICE_MMC1:
|
||||
|
||||
@ -166,7 +166,7 @@ u32 spl_boot_device(void)
|
||||
return gd->arch.omap_boot_device;
|
||||
}
|
||||
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
return gd->arch.omap_boot_mode;
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@ ulong get_timer_masked(void)
|
||||
/* move stamp fordward with absoulte diff ticks */
|
||||
gd->arch.tbl += (now - gd->arch.lastinc);
|
||||
} else { /* we have rollover of incrementer */
|
||||
gd->arch.tbl += ((TIMER_LOAD_VAL / (TIMER_CLOCK /
|
||||
gd->arch.tbl += ((TIMER_OVERFLOW_VAL / (TIMER_CLOCK /
|
||||
CONFIG_SYS_HZ)) - gd->arch.lastinc) + now;
|
||||
}
|
||||
gd->arch.lastinc = now;
|
||||
|
||||
@ -110,6 +110,7 @@ ENDPROC(psci_get_cpu_id)
|
||||
|
||||
/* Imported from Linux kernel */
|
||||
LENTRY(v7_flush_dcache_all)
|
||||
stmfd sp!, {r4-r5, r7, r9-r11, lr}
|
||||
dmb @ ensure ordering with previous memory accesses
|
||||
mrc p15, 1, r0, c0, c0, 1 @ read clidr
|
||||
ands r3, r0, #0x7000000 @ extract loc from clidr
|
||||
@ -153,6 +154,7 @@ finished:
|
||||
mcr p15, 2, r10, c0, c0, 0 @ select current cache level in cssr
|
||||
dsb st
|
||||
isb
|
||||
ldmfd sp!, {r4-r5, r7, r9-r11, lr}
|
||||
bx lr
|
||||
ENDPROC(v7_flush_dcache_all)
|
||||
|
||||
@ -196,15 +198,15 @@ ENDPROC(psci_cpu_off_common)
|
||||
|
||||
@ expects CPU ID in r0 and returns stack top in r0
|
||||
ENTRY(psci_get_cpu_stack_top)
|
||||
mov r5, #0x400 @ 1kB of stack per CPU
|
||||
mul r0, r0, r5
|
||||
mov r3, #0x400 @ 1kB of stack per CPU
|
||||
mul r0, r0, r3
|
||||
|
||||
ldr r5, =psci_text_end @ end of monitor text
|
||||
add r5, r5, #0x2000 @ Skip two pages
|
||||
lsr r5, r5, #12 @ Align to start of page
|
||||
lsl r5, r5, #12
|
||||
sub r5, r5, #4 @ reserve 1 word for target PC
|
||||
sub r0, r5, r0 @ here's our stack!
|
||||
ldr r3, =psci_text_end @ end of monitor text
|
||||
add r3, r3, #0x2000 @ Skip two pages
|
||||
lsr r3, r3, #12 @ Align to start of page
|
||||
lsl r3, r3, #12
|
||||
sub r3, r3, #4 @ reserve 1 word for target PC
|
||||
sub r0, r3, r0 @ here's our stack!
|
||||
|
||||
bx lr
|
||||
ENDPROC(psci_get_cpu_stack_top)
|
||||
|
||||
@ -13,11 +13,8 @@ obj-$(CONFIG_MACH_SUN6I) += tzpc.o
|
||||
obj-$(CONFIG_MACH_SUN8I_H3) += tzpc.o
|
||||
|
||||
ifndef CONFIG_SPL_BUILD
|
||||
ifdef CONFIG_ARMV7_PSCI
|
||||
obj-$(CONFIG_MACH_SUN6I) += psci_sun6i.o
|
||||
obj-$(CONFIG_MACH_SUN7I) += psci_sun7i.o
|
||||
obj-$(CONFIG_MACH_SUN8I) += psci_sun6i.o
|
||||
endif
|
||||
obj-$(CONFIG_ARMV7_PSCI) += psci.o
|
||||
obj-$(CONFIG_ARMV7_PSCI) += psci_head.o
|
||||
endif
|
||||
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
|
||||
273
arch/arm/cpu/armv7/sunxi/psci.c
Normal file
273
arch/arm/cpu/armv7/sunxi/psci.c
Normal file
@ -0,0 +1,273 @@
|
||||
/*
|
||||
* Copyright (C) 2016
|
||||
* Author: Chen-Yu Tsai <wens@csie.org>
|
||||
*
|
||||
* Based on assembly code by Marc Zyngier <marc.zyngier@arm.com>,
|
||||
* which was based on code by Carl van Schaik <carl@ok-labs.com>.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0
|
||||
*/
|
||||
#include <config.h>
|
||||
#include <common.h>
|
||||
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/cpucfg.h>
|
||||
#include <asm/arch/prcm.h>
|
||||
#include <asm/armv7.h>
|
||||
#include <asm/gic.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/psci.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#define __secure __attribute__ ((section ("._secure.text")))
|
||||
#define __irq __attribute__ ((interrupt ("IRQ")))
|
||||
|
||||
#define GICD_BASE (SUNXI_GIC400_BASE + GIC_DIST_OFFSET)
|
||||
#define GICC_BASE (SUNXI_GIC400_BASE + GIC_CPU_OFFSET_A15)
|
||||
|
||||
static void __secure cp15_write_cntp_tval(u32 tval)
|
||||
{
|
||||
asm volatile ("mcr p15, 0, %0, c14, c2, 0" : : "r" (tval));
|
||||
}
|
||||
|
||||
static void __secure cp15_write_cntp_ctl(u32 val)
|
||||
{
|
||||
asm volatile ("mcr p15, 0, %0, c14, c2, 1" : : "r" (val));
|
||||
}
|
||||
|
||||
static u32 __secure cp15_read_cntp_ctl(void)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
asm volatile ("mrc p15, 0, %0, c14, c2, 1" : "=r" (val));
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
#define ONE_MS (CONFIG_TIMER_CLK_FREQ / 1000)
|
||||
|
||||
static void __secure __mdelay(u32 ms)
|
||||
{
|
||||
u32 reg = ONE_MS * ms;
|
||||
|
||||
cp15_write_cntp_tval(reg);
|
||||
ISB;
|
||||
cp15_write_cntp_ctl(3);
|
||||
|
||||
do {
|
||||
ISB;
|
||||
reg = cp15_read_cntp_ctl();
|
||||
} while (!(reg & BIT(2)));
|
||||
|
||||
cp15_write_cntp_ctl(0);
|
||||
ISB;
|
||||
}
|
||||
|
||||
static void __secure clamp_release(u32 __maybe_unused *clamp)
|
||||
{
|
||||
#if defined(CONFIG_MACH_SUN6I) || defined(CONFIG_MACH_SUN7I) || \
|
||||
defined(CONFIG_MACH_SUN8I_H3)
|
||||
u32 tmp = 0x1ff;
|
||||
do {
|
||||
tmp >>= 1;
|
||||
writel(tmp, clamp);
|
||||
} while (tmp);
|
||||
|
||||
__mdelay(10);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void __secure clamp_set(u32 __maybe_unused *clamp)
|
||||
{
|
||||
#if defined(CONFIG_MACH_SUN6I) || defined(CONFIG_MACH_SUN7I) || \
|
||||
defined(CONFIG_MACH_SUN8I_H3)
|
||||
writel(0xff, clamp);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void __secure sunxi_power_switch(u32 *clamp, u32 *pwroff, bool on,
|
||||
int cpu)
|
||||
{
|
||||
if (on) {
|
||||
/* Release power clamp */
|
||||
clamp_release(clamp);
|
||||
|
||||
/* Clear power gating */
|
||||
clrbits_le32(pwroff, BIT(cpu));
|
||||
} else {
|
||||
/* Set power gating */
|
||||
setbits_le32(pwroff, BIT(cpu));
|
||||
|
||||
/* Activate power clamp */
|
||||
clamp_set(clamp);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MACH_SUN7I
|
||||
/* sun7i (A20) is different from other single cluster SoCs */
|
||||
static void __secure sunxi_cpu_set_power(int __always_unused cpu, bool on)
|
||||
{
|
||||
struct sunxi_cpucfg_reg *cpucfg =
|
||||
(struct sunxi_cpucfg_reg *)SUNXI_CPUCFG_BASE;
|
||||
|
||||
sunxi_power_switch(&cpucfg->cpu1_pwr_clamp, &cpucfg->cpu1_pwroff,
|
||||
on, 0);
|
||||
}
|
||||
#else /* ! CONFIG_MACH_SUN7I */
|
||||
static void __secure sunxi_cpu_set_power(int cpu, bool on)
|
||||
{
|
||||
struct sunxi_prcm_reg *prcm =
|
||||
(struct sunxi_prcm_reg *)SUNXI_PRCM_BASE;
|
||||
|
||||
sunxi_power_switch(&prcm->cpu_pwr_clamp[cpu], &prcm->cpu_pwroff,
|
||||
on, cpu);
|
||||
}
|
||||
#endif /* CONFIG_MACH_SUN7I */
|
||||
|
||||
void __secure sunxi_cpu_power_off(u32 cpuid)
|
||||
{
|
||||
struct sunxi_cpucfg_reg *cpucfg =
|
||||
(struct sunxi_cpucfg_reg *)SUNXI_CPUCFG_BASE;
|
||||
u32 cpu = cpuid & 0x3;
|
||||
|
||||
/* Wait for the core to enter WFI */
|
||||
while (1) {
|
||||
if (readl(&cpucfg->cpu[cpu].status) & BIT(2))
|
||||
break;
|
||||
__mdelay(1);
|
||||
}
|
||||
|
||||
/* Assert reset on target CPU */
|
||||
writel(0, &cpucfg->cpu[cpu].rst);
|
||||
|
||||
/* Lock CPU (Disable external debug access) */
|
||||
clrbits_le32(&cpucfg->dbg_ctrl1, BIT(cpu));
|
||||
|
||||
/* Power down CPU */
|
||||
sunxi_cpu_set_power(cpuid, false);
|
||||
|
||||
/* Unlock CPU (Disable external debug access) */
|
||||
setbits_le32(&cpucfg->dbg_ctrl1, BIT(cpu));
|
||||
}
|
||||
|
||||
static u32 __secure cp15_read_scr(void)
|
||||
{
|
||||
u32 scr;
|
||||
|
||||
asm volatile ("mrc p15, 0, %0, c1, c1, 0" : "=r" (scr));
|
||||
|
||||
return scr;
|
||||
}
|
||||
|
||||
static void __secure cp15_write_scr(u32 scr)
|
||||
{
|
||||
asm volatile ("mcr p15, 0, %0, c1, c1, 0" : : "r" (scr));
|
||||
ISB;
|
||||
}
|
||||
|
||||
/*
|
||||
* Although this is an FIQ handler, the FIQ is processed in monitor mode,
|
||||
* which means there's no FIQ banked registers. This is the same as IRQ
|
||||
* mode, so use the IRQ attribute to ask the compiler to handler entry
|
||||
* and return.
|
||||
*/
|
||||
void __secure __irq psci_fiq_enter(void)
|
||||
{
|
||||
u32 scr, reg, cpu;
|
||||
|
||||
/* Switch to secure mode */
|
||||
scr = cp15_read_scr();
|
||||
cp15_write_scr(scr & ~BIT(0));
|
||||
|
||||
/* Validate reason based on IAR and acknowledge */
|
||||
reg = readl(GICC_BASE + GICC_IAR);
|
||||
|
||||
/* Skip spurious interrupts 1022 and 1023 */
|
||||
if (reg == 1023 || reg == 1022)
|
||||
goto out;
|
||||
|
||||
/* End of interrupt */
|
||||
writel(reg, GICC_BASE + GICC_EOIR);
|
||||
DSB;
|
||||
|
||||
/* Get CPU number */
|
||||
cpu = (reg >> 10) & 0x7;
|
||||
|
||||
/* Power off the CPU */
|
||||
sunxi_cpu_power_off(cpu);
|
||||
|
||||
out:
|
||||
/* Restore security level */
|
||||
cp15_write_scr(scr);
|
||||
}
|
||||
|
||||
int __secure psci_cpu_on(u32 __always_unused unused, u32 mpidr, u32 pc)
|
||||
{
|
||||
struct sunxi_cpucfg_reg *cpucfg =
|
||||
(struct sunxi_cpucfg_reg *)SUNXI_CPUCFG_BASE;
|
||||
u32 cpu = (mpidr & 0x3);
|
||||
|
||||
/* store target PC at target CPU stack top */
|
||||
writel(pc, psci_get_cpu_stack_top(cpu));
|
||||
DSB;
|
||||
|
||||
/* Set secondary core power on PC */
|
||||
writel((u32)&psci_cpu_entry, &cpucfg->priv0);
|
||||
|
||||
/* Assert reset on target CPU */
|
||||
writel(0, &cpucfg->cpu[cpu].rst);
|
||||
|
||||
/* Invalidate L1 cache */
|
||||
clrbits_le32(&cpucfg->gen_ctrl, BIT(cpu));
|
||||
|
||||
/* Lock CPU (Disable external debug access) */
|
||||
clrbits_le32(&cpucfg->dbg_ctrl1, BIT(cpu));
|
||||
|
||||
/* Power up target CPU */
|
||||
sunxi_cpu_set_power(cpu, true);
|
||||
|
||||
/* De-assert reset on target CPU */
|
||||
writel(BIT(1) | BIT(0), &cpucfg->cpu[cpu].rst);
|
||||
|
||||
/* Unlock CPU (Disable external debug access) */
|
||||
setbits_le32(&cpucfg->dbg_ctrl1, BIT(cpu));
|
||||
|
||||
return ARM_PSCI_RET_SUCCESS;
|
||||
}
|
||||
|
||||
void __secure psci_cpu_off(void)
|
||||
{
|
||||
psci_cpu_off_common();
|
||||
|
||||
/* Ask CPU0 via SGI15 to pull the rug... */
|
||||
writel(BIT(16) | 15, GICD_BASE + GICD_SGIR);
|
||||
DSB;
|
||||
|
||||
/* Wait to be turned off */
|
||||
while (1)
|
||||
wfi();
|
||||
}
|
||||
|
||||
void __secure sunxi_gic_init(void)
|
||||
{
|
||||
u32 reg;
|
||||
|
||||
/* SGI15 as Group-0 */
|
||||
clrbits_le32(GICD_BASE + GICD_IGROUPRn, BIT(15));
|
||||
|
||||
/* Set SGI15 priority to 0 */
|
||||
writeb(0, GICD_BASE + GICD_IPRIORITYRn + 15);
|
||||
|
||||
/* Be cool with non-secure */
|
||||
writel(0xff, GICC_BASE + GICC_PMR);
|
||||
|
||||
/* Switch FIQEn on */
|
||||
setbits_le32(GICC_BASE + GICC_CTLR, BIT(3));
|
||||
|
||||
reg = cp15_read_scr();
|
||||
reg |= BIT(2); /* Enable FIQ in monitor mode */
|
||||
reg &= ~BIT(0); /* Secure mode */
|
||||
cp15_write_scr(reg);
|
||||
}
|
||||
66
arch/arm/cpu/armv7/sunxi/psci_head.S
Normal file
66
arch/arm/cpu/armv7/sunxi/psci_head.S
Normal file
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (C) 2013 - ARM Ltd
|
||||
* Author: Marc Zyngier <marc.zyngier@arm.com>
|
||||
*
|
||||
* Based on code by Carl van Schaik <carl@ok-labs.com>.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <linux/linkage.h>
|
||||
|
||||
#include <asm/arch-armv7/generictimer.h>
|
||||
#include <asm/gic.h>
|
||||
#include <asm/macro.h>
|
||||
#include <asm/psci.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
|
||||
/*
|
||||
* Memory layout:
|
||||
*
|
||||
* SECURE_RAM to text_end :
|
||||
* ._secure_text section
|
||||
* text_end to ALIGN_PAGE(text_end):
|
||||
* nothing
|
||||
* ALIGN_PAGE(text_end) to ALIGN_PAGE(text_end) + 0x1000)
|
||||
* 1kB of stack per CPU (4 CPUs max).
|
||||
*/
|
||||
|
||||
.pushsection ._secure.text, "ax"
|
||||
|
||||
.arch_extension sec
|
||||
|
||||
#define GICD_BASE (SUNXI_GIC400_BASE + 0x1000)
|
||||
#define GICC_BASE (SUNXI_GIC400_BASE + 0x2000)
|
||||
|
||||
@ {r0, r1, r2, ip} from _do_nonsec_entry(kernel_entry, 0, machid, r2) in
|
||||
@ arch/arm/lib/bootm.c:boot_jump_linux() must remain unchanged across
|
||||
@ this function.
|
||||
ENTRY(psci_arch_init)
|
||||
mov r6, lr
|
||||
mov r7, r0
|
||||
bl psci_get_cpu_id @ CPU ID => r0
|
||||
bl psci_get_cpu_stack_top @ stack top => r0
|
||||
sub r0, r0, #4 @ Save space for target PC
|
||||
mov sp, r0
|
||||
mov r0, r7
|
||||
mov lr, r6
|
||||
|
||||
push {r0, r1, r2, ip, lr}
|
||||
bl sunxi_gic_init
|
||||
pop {r0, r1, r2, ip, pc}
|
||||
ENDPROC(psci_arch_init)
|
||||
|
||||
ENTRY(psci_text_end)
|
||||
.popsection
|
||||
@ -1,262 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2015 - Chen-Yu Tsai
|
||||
* Author: Chen-Yu Tsai <wens@csie.org>
|
||||
*
|
||||
* Based on psci_sun7i.S by Marc Zyngier <marc.zyngier@arm.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <asm/arch-armv7/generictimer.h>
|
||||
#include <asm/gic.h>
|
||||
#include <asm/macro.h>
|
||||
#include <asm/psci.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
|
||||
/*
|
||||
* Memory layout:
|
||||
*
|
||||
* SECURE_RAM to text_end :
|
||||
* ._secure_text section
|
||||
* text_end to ALIGN_PAGE(text_end):
|
||||
* nothing
|
||||
* ALIGN_PAGE(text_end) to ALIGN_PAGE(text_end) + 0x1000)
|
||||
* 1kB of stack per CPU (4 CPUs max).
|
||||
*/
|
||||
|
||||
.pushsection ._secure.text, "ax"
|
||||
|
||||
.arch_extension sec
|
||||
|
||||
#define ONE_MS (CONFIG_TIMER_CLK_FREQ / 1000)
|
||||
#define TEN_MS (10 * ONE_MS)
|
||||
#define GICD_BASE 0x1c81000
|
||||
#define GICC_BASE 0x1c82000
|
||||
|
||||
.globl psci_fiq_enter
|
||||
psci_fiq_enter:
|
||||
push {r0-r12}
|
||||
|
||||
@ Switch to secure
|
||||
mrc p15, 0, r7, c1, c1, 0
|
||||
bic r8, r7, #1
|
||||
mcr p15, 0, r8, c1, c1, 0
|
||||
isb
|
||||
|
||||
@ Validate reason based on IAR and acknowledge
|
||||
movw r8, #(GICC_BASE & 0xffff)
|
||||
movt r8, #(GICC_BASE >> 16)
|
||||
ldr r9, [r8, #GICC_IAR]
|
||||
movw r10, #0x3ff
|
||||
movt r10, #0
|
||||
cmp r9, r10 @ skip spurious interrupt 1023
|
||||
beq out
|
||||
movw r10, #0x3fe @ ...and 1022
|
||||
cmp r9, r10
|
||||
beq out
|
||||
str r9, [r8, #GICC_EOIR] @ acknowledge the interrupt
|
||||
dsb
|
||||
|
||||
@ Compute CPU number
|
||||
lsr r9, r9, #10
|
||||
and r9, r9, #0xf
|
||||
|
||||
movw r8, #(SUN6I_CPUCFG_BASE & 0xffff)
|
||||
movt r8, #(SUN6I_CPUCFG_BASE >> 16)
|
||||
|
||||
@ Wait for the core to enter WFI
|
||||
lsl r11, r9, #6 @ x64
|
||||
add r11, r11, r8
|
||||
|
||||
1: ldr r10, [r11, #0x48]
|
||||
tst r10, #(1 << 2)
|
||||
bne 2f
|
||||
timer_wait r10, ONE_MS
|
||||
b 1b
|
||||
|
||||
@ Reset CPU
|
||||
2: mov r10, #0
|
||||
str r10, [r11, #0x40]
|
||||
|
||||
@ Lock CPU
|
||||
mov r10, #1
|
||||
lsl r11, r10, r9 @ r11 is now CPU mask
|
||||
ldr r10, [r8, #0x1e4]
|
||||
bic r10, r10, r11
|
||||
str r10, [r8, #0x1e4]
|
||||
|
||||
movw r8, #(SUNXI_PRCM_BASE & 0xffff)
|
||||
movt r8, #(SUNXI_PRCM_BASE >> 16)
|
||||
|
||||
@ Set power gating
|
||||
ldr r10, [r8, #0x100]
|
||||
orr r10, r10, r11
|
||||
str r10, [r8, #0x100]
|
||||
timer_wait r10, ONE_MS
|
||||
|
||||
#if defined(CONFIG_MACH_SUN6I) || defined(CONFIG_MACH_SUN8I_H3)
|
||||
@ Activate power clamp
|
||||
lsl r12, r9, #2 @ x4
|
||||
add r12, r12, r8
|
||||
mov r10, #0xff
|
||||
str r10, [r12, #0x140]
|
||||
#endif
|
||||
|
||||
movw r8, #(SUN6I_CPUCFG_BASE & 0xffff)
|
||||
movt r8, #(SUN6I_CPUCFG_BASE >> 16)
|
||||
|
||||
@ Unlock CPU
|
||||
ldr r10, [r8, #0x1e4]
|
||||
orr r10, r10, r11
|
||||
str r10, [r8, #0x1e4]
|
||||
|
||||
@ Restore security level
|
||||
out: mcr p15, 0, r7, c1, c1, 0
|
||||
|
||||
pop {r0-r12}
|
||||
subs pc, lr, #4
|
||||
|
||||
@ r1 = target CPU
|
||||
@ r2 = target PC
|
||||
.globl psci_cpu_on
|
||||
psci_cpu_on:
|
||||
push {lr}
|
||||
|
||||
mov r0, r1
|
||||
bl psci_get_cpu_stack_top @ get stack top of target CPU
|
||||
str r2, [r0] @ store target PC at stack top
|
||||
dsb
|
||||
|
||||
movw r0, #(SUN6I_CPUCFG_BASE & 0xffff)
|
||||
movt r0, #(SUN6I_CPUCFG_BASE >> 16)
|
||||
|
||||
@ CPU mask
|
||||
and r1, r1, #3 @ only care about first cluster
|
||||
mov r4, #1
|
||||
lsl r4, r4, r1
|
||||
|
||||
ldr r6, =psci_cpu_entry
|
||||
str r6, [r0, #0x1a4] @ PRIVATE_REG (boot vector)
|
||||
|
||||
@ Assert reset on target CPU
|
||||
mov r6, #0
|
||||
lsl r5, r1, #6 @ 64 bytes per CPU
|
||||
add r5, r5, #0x40 @ Offset from base
|
||||
add r5, r5, r0 @ CPU control block
|
||||
str r6, [r5] @ Reset CPU
|
||||
|
||||
@ l1 invalidate
|
||||
ldr r6, [r0, #0x184] @ CPUCFG_GEN_CTRL_REG
|
||||
bic r6, r6, r4
|
||||
str r6, [r0, #0x184]
|
||||
|
||||
@ Lock CPU (Disable external debug access)
|
||||
ldr r6, [r0, #0x1e4] @ CPUCFG_DBG_CTL1_REG
|
||||
bic r6, r6, r4
|
||||
str r6, [r0, #0x1e4]
|
||||
|
||||
movw r0, #(SUNXI_PRCM_BASE & 0xffff)
|
||||
movt r0, #(SUNXI_PRCM_BASE >> 16)
|
||||
|
||||
#if defined(CONFIG_MACH_SUN6I) || defined(CONFIG_MACH_SUN8I_H3)
|
||||
@ Release power clamp
|
||||
lsl r5, r1, #2 @ 1 register per CPU
|
||||
add r5, r5, r0 @ PRCM
|
||||
movw r6, #0x1ff
|
||||
movt r6, #0
|
||||
1: lsrs r6, r6, #1
|
||||
str r6, [r5, #0x140] @ CPUx_PWR_CLAMP
|
||||
bne 1b
|
||||
#endif
|
||||
|
||||
timer_wait r6, TEN_MS
|
||||
|
||||
@ Clear power gating
|
||||
ldr r6, [r0, #0x100] @ CPU_PWROFF_GATING
|
||||
bic r6, r6, r4
|
||||
str r6, [r0, #0x100]
|
||||
|
||||
@ re-calculate CPU control register address
|
||||
movw r0, #(SUN6I_CPUCFG_BASE & 0xffff)
|
||||
movt r0, #(SUN6I_CPUCFG_BASE >> 16)
|
||||
|
||||
@ Deassert reset on target CPU
|
||||
mov r6, #3
|
||||
lsl r5, r1, #6 @ 64 bytes per CPU
|
||||
add r5, r5, #0x40 @ Offset from base
|
||||
add r5, r5, r0 @ CPU control block
|
||||
str r6, [r5]
|
||||
|
||||
@ Unlock CPU (Enable external debug access)
|
||||
ldr r6, [r0, #0x1e4] @ CPUCFG_DBG_CTL1_REG
|
||||
orr r6, r6, r4
|
||||
str r6, [r0, #0x1e4]
|
||||
|
||||
mov r0, #ARM_PSCI_RET_SUCCESS @ Return PSCI_RET_SUCCESS
|
||||
pop {pc}
|
||||
|
||||
.globl psci_cpu_off
|
||||
psci_cpu_off:
|
||||
bl psci_cpu_off_common
|
||||
|
||||
@ Ask CPU0 to pull the rug...
|
||||
movw r0, #(GICD_BASE & 0xffff)
|
||||
movt r0, #(GICD_BASE >> 16)
|
||||
movw r1, #15 @ SGI15
|
||||
movt r1, #1 @ Target is CPU0
|
||||
str r1, [r0, #GICD_SGIR]
|
||||
dsb
|
||||
|
||||
1: wfi
|
||||
b 1b
|
||||
|
||||
.globl psci_arch_init
|
||||
psci_arch_init:
|
||||
mov r6, lr
|
||||
|
||||
movw r4, #(GICD_BASE & 0xffff)
|
||||
movt r4, #(GICD_BASE >> 16)
|
||||
|
||||
ldr r5, [r4, #GICD_IGROUPRn]
|
||||
bic r5, r5, #(1 << 15) @ SGI15 as Group-0
|
||||
str r5, [r4, #GICD_IGROUPRn]
|
||||
|
||||
mov r5, #0 @ Set SGI15 priority to 0
|
||||
strb r5, [r4, #(GICD_IPRIORITYRn + 15)]
|
||||
|
||||
add r4, r4, #0x1000 @ GICC address
|
||||
|
||||
mov r5, #0xff
|
||||
str r5, [r4, #GICC_PMR] @ Be cool with non-secure
|
||||
|
||||
ldr r5, [r4, #GICC_CTLR]
|
||||
orr r5, r5, #(1 << 3) @ Switch FIQEn on
|
||||
str r5, [r4, #GICC_CTLR]
|
||||
|
||||
mrc p15, 0, r5, c1, c1, 0 @ Read SCR
|
||||
orr r5, r5, #4 @ Enable FIQ in monitor mode
|
||||
bic r5, r5, #1 @ Secure mode
|
||||
mcr p15, 0, r5, c1, c1, 0 @ Write SCR
|
||||
isb
|
||||
|
||||
bl psci_get_cpu_id @ CPU ID => r0
|
||||
bl psci_get_cpu_stack_top @ stack top => r0
|
||||
mov sp, r0
|
||||
|
||||
bx r6
|
||||
|
||||
.globl psci_text_end
|
||||
psci_text_end:
|
||||
.popsection
|
||||
@ -1,237 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 - ARM Ltd
|
||||
* Author: Marc Zyngier <marc.zyngier@arm.com>
|
||||
*
|
||||
* Based on code by Carl van Schaik <carl@ok-labs.com>.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <asm/arch-armv7/generictimer.h>
|
||||
#include <asm/gic.h>
|
||||
#include <asm/macro.h>
|
||||
#include <asm/psci.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
|
||||
/*
|
||||
* Memory layout:
|
||||
*
|
||||
* SECURE_RAM to text_end :
|
||||
* ._secure_text section
|
||||
* text_end to ALIGN_PAGE(text_end):
|
||||
* nothing
|
||||
* ALIGN_PAGE(text_end) to ALIGN_PAGE(text_end) + 0x1000)
|
||||
* 1kB of stack per CPU (4 CPUs max).
|
||||
*/
|
||||
|
||||
.pushsection ._secure.text, "ax"
|
||||
|
||||
.arch_extension sec
|
||||
|
||||
#define ONE_MS (CONFIG_TIMER_CLK_FREQ / 1000)
|
||||
#define TEN_MS (10 * ONE_MS)
|
||||
#define GICD_BASE 0x1c81000
|
||||
#define GICC_BASE 0x1c82000
|
||||
|
||||
.globl psci_fiq_enter
|
||||
psci_fiq_enter:
|
||||
push {r0-r12}
|
||||
|
||||
@ Switch to secure
|
||||
mrc p15, 0, r7, c1, c1, 0
|
||||
bic r8, r7, #1
|
||||
mcr p15, 0, r8, c1, c1, 0
|
||||
isb
|
||||
|
||||
@ Validate reason based on IAR and acknowledge
|
||||
movw r8, #(GICC_BASE & 0xffff)
|
||||
movt r8, #(GICC_BASE >> 16)
|
||||
ldr r9, [r8, #GICC_IAR]
|
||||
movw r10, #0x3ff
|
||||
movt r10, #0
|
||||
cmp r9, r10 @ skip spurious interrupt 1023
|
||||
beq out
|
||||
movw r10, #0x3fe @ ...and 1022
|
||||
cmp r9, r10
|
||||
beq out
|
||||
str r9, [r8, #GICC_EOIR] @ acknowledge the interrupt
|
||||
dsb
|
||||
|
||||
@ Compute CPU number
|
||||
lsr r9, r9, #10
|
||||
and r9, r9, #0xf
|
||||
|
||||
movw r8, #(SUN7I_CPUCFG_BASE & 0xffff)
|
||||
movt r8, #(SUN7I_CPUCFG_BASE >> 16)
|
||||
|
||||
@ Wait for the core to enter WFI
|
||||
lsl r11, r9, #6 @ x64
|
||||
add r11, r11, r8
|
||||
|
||||
1: ldr r10, [r11, #0x48]
|
||||
tst r10, #(1 << 2)
|
||||
bne 2f
|
||||
timer_wait r10, ONE_MS
|
||||
b 1b
|
||||
|
||||
@ Reset CPU
|
||||
2: mov r10, #0
|
||||
str r10, [r11, #0x40]
|
||||
|
||||
@ Lock CPU
|
||||
mov r10, #1
|
||||
lsl r9, r10, r9 @ r9 is now CPU mask
|
||||
ldr r10, [r8, #0x1e4]
|
||||
bic r10, r10, r9
|
||||
str r10, [r8, #0x1e4]
|
||||
|
||||
@ Set power gating
|
||||
ldr r10, [r8, #0x1b4]
|
||||
orr r10, r10, #1
|
||||
str r10, [r8, #0x1b4]
|
||||
timer_wait r10, ONE_MS
|
||||
|
||||
@ Activate power clamp
|
||||
mov r10, #1
|
||||
1: str r10, [r8, #0x1b0]
|
||||
lsl r10, r10, #1
|
||||
orr r10, r10, #1
|
||||
tst r10, #0x100
|
||||
beq 1b
|
||||
|
||||
@ Restore security level
|
||||
out: mcr p15, 0, r7, c1, c1, 0
|
||||
|
||||
pop {r0-r12}
|
||||
subs pc, lr, #4
|
||||
|
||||
@ r1 = target CPU
|
||||
@ r2 = target PC
|
||||
.globl psci_cpu_on
|
||||
psci_cpu_on:
|
||||
push {lr}
|
||||
|
||||
mov r0, r1
|
||||
bl psci_get_cpu_stack_top @ get stack top of target CPU
|
||||
str r2, [r0] @ store target PC at stack top
|
||||
dsb
|
||||
|
||||
movw r0, #(SUN7I_CPUCFG_BASE & 0xffff)
|
||||
movt r0, #(SUN7I_CPUCFG_BASE >> 16)
|
||||
|
||||
@ CPU mask
|
||||
and r1, r1, #3 @ only care about first cluster
|
||||
mov r4, #1
|
||||
lsl r4, r4, r1
|
||||
|
||||
ldr r6, =psci_cpu_entry
|
||||
str r6, [r0, #0x1a4] @ PRIVATE_REG (boot vector)
|
||||
|
||||
@ Assert reset on target CPU
|
||||
mov r6, #0
|
||||
lsl r5, r1, #6 @ 64 bytes per CPU
|
||||
add r5, r5, #0x40 @ Offset from base
|
||||
add r5, r5, r0 @ CPU control block
|
||||
str r6, [r5] @ Reset CPU
|
||||
|
||||
@ l1 invalidate
|
||||
ldr r6, [r0, #0x184] @ CPUCFG_GEN_CTRL_REG
|
||||
bic r6, r6, r4
|
||||
str r6, [r0, #0x184]
|
||||
|
||||
@ Lock CPU (Disable external debug access)
|
||||
ldr r6, [r0, #0x1e4] @ CPUCFG_DBG_CTL1_REG
|
||||
bic r6, r6, r4
|
||||
str r6, [r0, #0x1e4]
|
||||
|
||||
@ Release power clamp
|
||||
movw r6, #0x1ff
|
||||
movt r6, #0
|
||||
1: lsrs r6, r6, #1
|
||||
str r6, [r0, #0x1b0] @ CPU1_PWR_CLAMP
|
||||
bne 1b
|
||||
|
||||
timer_wait r1, TEN_MS
|
||||
|
||||
@ Clear power gating
|
||||
ldr r6, [r0, #0x1b4] @ CPU1_PWROFF_REG
|
||||
bic r6, r6, #1
|
||||
str r6, [r0, #0x1b4]
|
||||
|
||||
@ Deassert reset on target CPU
|
||||
mov r6, #3
|
||||
str r6, [r5]
|
||||
|
||||
@ Unlock CPU (Enable external debug access)
|
||||
ldr r6, [r0, #0x1e4] @ CPUCFG_DBG_CTL1_REG
|
||||
orr r6, r6, r4
|
||||
str r6, [r0, #0x1e4]
|
||||
|
||||
mov r0, #ARM_PSCI_RET_SUCCESS @ Return PSCI_RET_SUCCESS
|
||||
pop {pc}
|
||||
|
||||
.globl psci_cpu_off
|
||||
psci_cpu_off:
|
||||
bl psci_cpu_off_common
|
||||
|
||||
@ Ask CPU0 to pull the rug...
|
||||
movw r0, #(GICD_BASE & 0xffff)
|
||||
movt r0, #(GICD_BASE >> 16)
|
||||
movw r1, #15 @ SGI15
|
||||
movt r1, #1 @ Target is CPU0
|
||||
str r1, [r0, #GICD_SGIR]
|
||||
dsb
|
||||
|
||||
1: wfi
|
||||
b 1b
|
||||
|
||||
.globl psci_arch_init
|
||||
psci_arch_init:
|
||||
mov r6, lr
|
||||
|
||||
movw r4, #(GICD_BASE & 0xffff)
|
||||
movt r4, #(GICD_BASE >> 16)
|
||||
|
||||
ldr r5, [r4, #GICD_IGROUPRn]
|
||||
bic r5, r5, #(1 << 15) @ SGI15 as Group-0
|
||||
str r5, [r4, #GICD_IGROUPRn]
|
||||
|
||||
mov r5, #0 @ Set SGI15 priority to 0
|
||||
strb r5, [r4, #(GICD_IPRIORITYRn + 15)]
|
||||
|
||||
add r4, r4, #0x1000 @ GICC address
|
||||
|
||||
mov r5, #0xff
|
||||
str r5, [r4, #GICC_PMR] @ Be cool with non-secure
|
||||
|
||||
ldr r5, [r4, #GICC_CTLR]
|
||||
orr r5, r5, #(1 << 3) @ Switch FIQEn on
|
||||
str r5, [r4, #GICC_CTLR]
|
||||
|
||||
mrc p15, 0, r5, c1, c1, 0 @ Read SCR
|
||||
orr r5, r5, #4 @ Enable FIQ in monitor mode
|
||||
bic r5, r5, #1 @ Secure mode
|
||||
mcr p15, 0, r5, c1, c1, 0 @ Write SCR
|
||||
isb
|
||||
|
||||
bl psci_get_cpu_id @ CPU ID => r0
|
||||
bl psci_get_cpu_stack_top @ stack top => r0
|
||||
mov sp, r0
|
||||
|
||||
bx r6
|
||||
|
||||
.globl psci_text_end
|
||||
psci_text_end:
|
||||
.popsection
|
||||
@ -11,6 +11,7 @@
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/soc.h>
|
||||
#include <fsl_ifc.h>
|
||||
#include "cpu.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
@ -47,7 +48,7 @@ void get_sys_info(struct sys_info *sys_info)
|
||||
[5] = 2, /* CC2 PPL / 2 */
|
||||
};
|
||||
|
||||
uint i;
|
||||
uint i, cluster;
|
||||
uint freq_c_pll[CONFIG_SYS_FSL_NUM_CC_PLLS];
|
||||
uint ratio[CONFIG_SYS_FSL_NUM_CC_PLLS];
|
||||
unsigned long sysclk = CONFIG_SYS_CLK_FREQ;
|
||||
@ -80,8 +81,9 @@ void get_sys_info(struct sys_info *sys_info)
|
||||
freq_c_pll[i] = sys_info->freq_systembus * ratio[i];
|
||||
}
|
||||
|
||||
for (cpu = 0; cpu < CONFIG_MAX_CPUS; cpu++) {
|
||||
u32 c_pll_sel = (in_be32(&clk->clkcsr[cpu].clkcncsr) >> 27)
|
||||
for_each_cpu(i, cpu, cpu_numcores(), cpu_mask()) {
|
||||
cluster = fsl_qoriq_core_to_cluster(cpu);
|
||||
u32 c_pll_sel = (in_be32(&clk->clkcsr[cluster].clkcncsr) >> 27)
|
||||
& 0xf;
|
||||
u32 cplx_pll = core_cplx_pll[c_pll_sel];
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@ bool soc_has_dp_ddr(void)
|
||||
u32 svr = gur_in32(&gur->svr);
|
||||
|
||||
/* LS2085A has DP_DDR */
|
||||
if (SVR_SOC_VER(svr) == SVR_LS2085)
|
||||
if (SVR_SOC_VER(svr) == SVR_LS2085A)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
@ -40,7 +40,7 @@ bool soc_has_aiop(void)
|
||||
u32 svr = gur_in32(&gur->svr);
|
||||
|
||||
/* LS2085A has AIOP */
|
||||
if (SVR_SOC_VER(svr) == SVR_LS2085)
|
||||
if (SVR_SOC_VER(svr) == SVR_LS2085A)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
||||
@ -24,7 +24,7 @@ u32 spl_boot_device(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
switch (spl_boot_device()) {
|
||||
case BOOT_DEVICE_MMC1:
|
||||
|
||||
@ -258,12 +258,10 @@ ENDPROC(lowlevel_init)
|
||||
|
||||
WEAK(smp_kick_all_cpus)
|
||||
/* Kick secondary cpus up by SGI 0 interrupt */
|
||||
mov x29, lr /* Save LR */
|
||||
#if defined(CONFIG_GICV2) || defined(CONFIG_GICV3)
|
||||
ldr x0, =GICD_BASE
|
||||
bl gic_kick_secondary_cpus
|
||||
b gic_kick_secondary_cpus
|
||||
#endif
|
||||
mov lr, x29 /* Restore LR */
|
||||
ret
|
||||
ENDPROC(smp_kick_all_cpus)
|
||||
|
||||
|
||||
@ -68,7 +68,7 @@ u32 spl_boot_device(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
switch (spl_boot_device()) {
|
||||
case BOOT_DEVICE_RAM:
|
||||
|
||||
@ -50,6 +50,7 @@ SECTIONS
|
||||
|
||||
#ifndef CONFIG_ARMV7_SECURE_BASE
|
||||
#define CONFIG_ARMV7_SECURE_BASE
|
||||
#define __ARMV7_PSCI_STACK_IN_RAM
|
||||
#endif
|
||||
|
||||
.__secure_start : {
|
||||
@ -67,6 +68,12 @@ SECTIONS
|
||||
SIZEOF(.__secure_start) +
|
||||
SIZEOF(.secure_text);
|
||||
|
||||
#ifdef __ARMV7_PSCI_STACK_IN_RAM
|
||||
/* Align to page boundary and skip 2 pages */
|
||||
. = (. & ~ 0xfff) + 0x2000;
|
||||
#undef __ARMV7_PSCI_STACK_IN_RAM
|
||||
#endif
|
||||
|
||||
__secure_end_lma = .;
|
||||
.__secure_end : AT(__secure_end_lma) {
|
||||
*(.__secure_end)
|
||||
|
||||
@ -2,7 +2,11 @@
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
dtb-$(CONFIG_AT91FAMILY) += at91sam9g45-gurnard.dtb
|
||||
dtb-$(CONFIG_AT91FAMILY) += at91sam9260-smartweb.dtb \
|
||||
at91sam9g20-taurus.dtb \
|
||||
at91sam9g45-corvus.dtb \
|
||||
at91sam9g45-gurnard.dtb
|
||||
|
||||
dtb-$(CONFIG_S5PC100) += s5pc1xx-smdkc100.dtb
|
||||
dtb-$(CONFIG_S5PC110) += s5pc1xx-goni.dtb
|
||||
dtb-$(CONFIG_EXYNOS4) += exynos4210-origen.dtb \
|
||||
@ -223,6 +227,8 @@ dtb-$(CONFIG_MACH_SUN7I) += \
|
||||
dtb-$(CONFIG_MACH_SUN8I_A23) += \
|
||||
sun8i-a23-evb.dtb \
|
||||
sun8i-a23-gt90h-v4.dtb \
|
||||
sun8i-a23-inet86dz.dtb \
|
||||
sun8i-a23-polaroid-mid2407pxe03.dtb \
|
||||
sun8i-a23-polaroid-mid2809pxe04.dtb \
|
||||
sun8i-a23-q8-tablet.dtb
|
||||
dtb-$(CONFIG_MACH_SUN8I_A33) += \
|
||||
|
||||
110
arch/arm/dts/at91sam9260-smartweb.dts
Normal file
110
arch/arm/dts/at91sam9260-smartweb.dts
Normal file
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* at91sam9260-smartweb.dts
|
||||
* (C) Copyright 2016
|
||||
* Heiko Schocher, DENX Software Engineering, hs@denx.de.
|
||||
*
|
||||
* Based on:
|
||||
* at91sam9g20ek.dts - Device Tree file for Atmel at91sam9g20ek board
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
/dts-v1/;
|
||||
#include "at91sam9260.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Siemens smartweb";
|
||||
compatible = "atmel,at91sam9260", "atmel,at91sam9";
|
||||
|
||||
chosen {
|
||||
stdout-path = &dbgu;
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x4000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
slow_xtal {
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
|
||||
main_xtal {
|
||||
clock-frequency = <18432000>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
pinctrl@fffff400 {
|
||||
board {
|
||||
pinctrl_pck0_as_mck: pck0_as_mck {
|
||||
atmel,pins =
|
||||
<AT91_PIOC 1 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PC1 periph B */
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
dbgu: serial@fffff200 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart0: serial@fffb0000 {
|
||||
pinctrl-0 =
|
||||
<&pinctrl_usart0
|
||||
&pinctrl_usart0_rts
|
||||
&pinctrl_usart0_cts
|
||||
&pinctrl_usart0_dtr_dsr
|
||||
&pinctrl_usart0_dcd
|
||||
&pinctrl_usart0_ri>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart1: serial@fffb4000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffc4000 {
|
||||
phy-mode = "rmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb1: gadget@fffa4000 {
|
||||
atmel,vbus-gpio = <&pioC 5 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ssc0: ssc@fffbc000 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&pinctrl_ssc0_tx>;
|
||||
};
|
||||
|
||||
rtc@fffffd20 {
|
||||
atmel,rtt-rtc-time-reg = <&gpbr 0x0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
watchdog@fffffd40 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gpbr: syscon@fffffd50 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-on-flash-bbt;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb0: ohci@00500000 {
|
||||
num-ports = <2>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
1034
arch/arm/dts/at91sam9260.dtsi
Normal file
1034
arch/arm/dts/at91sam9260.dtsi
Normal file
File diff suppressed because it is too large
Load Diff
876
arch/arm/dts/at91sam9261.dtsi
Normal file
876
arch/arm/dts/at91sam9261.dtsi
Normal file
@ -0,0 +1,876 @@
|
||||
/*
|
||||
* at91sam9261.dtsi - Device Tree Include file for AT91SAM9261 SoC
|
||||
*
|
||||
* Copyright (C) 2013 Jean-Jacques Hiblot <jjhiblot@traphandler.com>
|
||||
*
|
||||
* Licensed under GPLv2 only.
|
||||
*/
|
||||
|
||||
#include "skeleton.dtsi"
|
||||
#include <dt-bindings/pinctrl/at91.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/clock/at91.h>
|
||||
|
||||
/ {
|
||||
model = "Atmel AT91SAM9261 family SoC";
|
||||
compatible = "atmel,at91sam9261";
|
||||
interrupt-parent = <&aic>;
|
||||
|
||||
aliases {
|
||||
serial0 = &dbgu;
|
||||
serial1 = &usart0;
|
||||
serial2 = &usart1;
|
||||
serial3 = &usart2;
|
||||
gpio0 = &pioA;
|
||||
gpio1 = &pioB;
|
||||
gpio2 = &pioC;
|
||||
tcb0 = &tcb0;
|
||||
i2c0 = &i2c0;
|
||||
ssc0 = &ssc0;
|
||||
ssc1 = &ssc1;
|
||||
ssc2 = &ssc2;
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <0>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu {
|
||||
compatible = "arm,arm926ej-s";
|
||||
device_type = "cpu";
|
||||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x08000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
main_xtal: main_xtal {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <0>;
|
||||
};
|
||||
|
||||
slow_xtal: slow_xtal {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
sram: sram@00300000 {
|
||||
compatible = "mmio-sram";
|
||||
reg = <0x00300000 0x28000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
usb0: ohci@00500000 {
|
||||
compatible = "atmel,at91rm9200-ohci", "usb-ohci";
|
||||
reg = <0x00500000 0x100000>;
|
||||
interrupts = <20 IRQ_TYPE_LEVEL_HIGH 2>;
|
||||
clocks = <&ohci_clk>, <&hclk0>, <&uhpck>;
|
||||
clock-names = "ohci_clk", "hclk", "uhpck";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
fb0: fb@0x00600000 {
|
||||
compatible = "atmel,at91sam9261-lcdc";
|
||||
reg = <0x00600000 0x1000>;
|
||||
interrupts = <21 IRQ_TYPE_LEVEL_HIGH 3>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_fb>;
|
||||
clocks = <&lcd_clk>, <&hclk1>;
|
||||
clock-names = "lcdc_clk", "hclk";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
compatible = "atmel,at91rm9200-nand";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x40000000 0x10000000>;
|
||||
atmel,nand-addr-offset = <22>;
|
||||
atmel,nand-cmd-offset = <21>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_nand>;
|
||||
|
||||
gpios = <&pioC 15 GPIO_ACTIVE_HIGH>,
|
||||
<&pioC 14 GPIO_ACTIVE_HIGH>,
|
||||
<0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
apb {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
tcb0: timer@fffa0000 {
|
||||
compatible = "atmel,at91rm9200-tcb";
|
||||
reg = <0xfffa0000 0x100>;
|
||||
interrupts = <17 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
<18 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
<19 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
clocks = <&tc0_clk>, <&tc1_clk>, <&tc2_clk>, <&slow_xtal>;
|
||||
clock-names = "t0_clk", "t1_clk", "t2_clk", "slow_clk";
|
||||
};
|
||||
|
||||
usb1: gadget@fffa4000 {
|
||||
compatible = "atmel,at91sam9261-udc";
|
||||
reg = <0xfffa4000 0x4000>;
|
||||
interrupts = <10 IRQ_TYPE_LEVEL_HIGH 2>;
|
||||
clocks = <&udc_clk>, <&udpck>;
|
||||
clock-names = "pclk", "hclk";
|
||||
atmel,matrix = <&matrix>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
mmc0: mmc@fffa8000 {
|
||||
compatible = "atmel,hsmci";
|
||||
reg = <0xfffa8000 0x600>;
|
||||
interrupts = <9 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_mmc0_clk>, <&pinctrl_mmc0_slot0_cmd_dat0>, <&pinctrl_mmc0_slot0_dat1_3>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&mci0_clk>;
|
||||
clock-names = "mci_clk";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c0: i2c@fffac000 {
|
||||
compatible = "atmel,at91sam9261-i2c";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c_twi>;
|
||||
reg = <0xfffac000 0x100>;
|
||||
interrupts = <11 IRQ_TYPE_LEVEL_HIGH 6>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&twi0_clk>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart0: serial@fffb0000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffb0000 0x200>;
|
||||
interrupts = <6 IRQ_TYPE_LEVEL_HIGH 5>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usart0>;
|
||||
clocks = <&usart0_clk>;
|
||||
clock-names = "usart";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart1: serial@fffb4000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffb4000 0x200>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_HIGH 5>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usart1>;
|
||||
clocks = <&usart1_clk>;
|
||||
clock-names = "usart";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart2: serial@fffb8000{
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffb8000 0x200>;
|
||||
interrupts = <8 IRQ_TYPE_LEVEL_HIGH 5>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usart2>;
|
||||
clocks = <&usart2_clk>;
|
||||
clock-names = "usart";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ssc0: ssc@fffbc000 {
|
||||
compatible = "atmel,at91rm9200-ssc";
|
||||
reg = <0xfffbc000 0x4000>;
|
||||
interrupts = <14 IRQ_TYPE_LEVEL_HIGH 5>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_ssc0_tx &pinctrl_ssc0_rx>;
|
||||
clocks = <&ssc0_clk>;
|
||||
clock-names = "pclk";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ssc1: ssc@fffc0000 {
|
||||
compatible = "atmel,at91rm9200-ssc";
|
||||
reg = <0xfffc0000 0x4000>;
|
||||
interrupts = <15 IRQ_TYPE_LEVEL_HIGH 5>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_ssc1_tx &pinctrl_ssc1_rx>;
|
||||
clocks = <&ssc1_clk>;
|
||||
clock-names = "pclk";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ssc2: ssc@fffc4000 {
|
||||
compatible = "atmel,at91rm9200-ssc";
|
||||
reg = <0xfffc4000 0x4000>;
|
||||
interrupts = <16 IRQ_TYPE_LEVEL_HIGH 5>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_ssc2_tx &pinctrl_ssc2_rx>;
|
||||
clocks = <&ssc2_clk>;
|
||||
clock-names = "pclk";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi0: spi@fffc8000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "atmel,at91rm9200-spi";
|
||||
reg = <0xfffc8000 0x200>;
|
||||
cs-gpios = <0>, <0>, <0>, <0>;
|
||||
interrupts = <12 IRQ_TYPE_LEVEL_HIGH 3>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_spi0>;
|
||||
clocks = <&spi0_clk>;
|
||||
clock-names = "spi_clk";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi1: spi@fffcc000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "atmel,at91rm9200-spi";
|
||||
reg = <0xfffcc000 0x200>;
|
||||
interrupts = <13 IRQ_TYPE_LEVEL_HIGH 3>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_spi1>;
|
||||
clocks = <&spi1_clk>;
|
||||
clock-names = "spi_clk";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ramc: ramc@ffffea00 {
|
||||
compatible = "atmel,at91sam9260-sdramc";
|
||||
reg = <0xffffea00 0x200>;
|
||||
};
|
||||
|
||||
matrix: matrix@ffffee00 {
|
||||
compatible = "atmel,at91sam9260-bus-matrix", "syscon";
|
||||
reg = <0xffffee00 0x200>;
|
||||
};
|
||||
|
||||
aic: interrupt-controller@fffff000 {
|
||||
#interrupt-cells = <3>;
|
||||
compatible = "atmel,at91rm9200-aic";
|
||||
interrupt-controller;
|
||||
reg = <0xfffff000 0x200>;
|
||||
atmel,external-irqs = <29 30 31>;
|
||||
};
|
||||
|
||||
dbgu: serial@fffff200 {
|
||||
compatible = "atmel,at91sam9260-dbgu", "atmel,at91sam9260-usart";
|
||||
reg = <0xfffff200 0x200>;
|
||||
interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_dbgu>;
|
||||
clocks = <&mck>;
|
||||
clock-names = "usart";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pinctrl@fffff400 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "atmel,at91rm9200-pinctrl", "simple-bus";
|
||||
ranges = <0xfffff400 0xfffff400 0x600>;
|
||||
|
||||
atmel,mux-mask =
|
||||
/* A B */
|
||||
<0xffffffff 0xfffffff7>, /* pioA */
|
||||
<0xffffffff 0xfffffff4>, /* pioB */
|
||||
<0xffffffff 0xffffff07>; /* pioC */
|
||||
|
||||
/* shared pinctrl settings */
|
||||
dbgu {
|
||||
pinctrl_dbgu: dbgu-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 9 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOA 10 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>;
|
||||
};
|
||||
};
|
||||
|
||||
usart0 {
|
||||
pinctrl_usart0: usart0-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOC 8 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>,
|
||||
<AT91_PIOC 9 AT91_PERIPH_A AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_usart0_rts: usart0_rts-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOC 10 AT91_PERIPH_A AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_usart0_cts: usart0_cts-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOC 11 AT91_PERIPH_A AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
|
||||
usart1 {
|
||||
pinctrl_usart1: usart1-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOC 12 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>,
|
||||
<AT91_PIOC 13 AT91_PERIPH_A AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_usart1_rts: usart1_rts-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 12 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_usart1_cts: usart1_cts-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 13 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
|
||||
usart2 {
|
||||
pinctrl_usart2: usart2-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOC 14 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>,
|
||||
<AT91_PIOC 15 AT91_PERIPH_A AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_usart2_rts: usart2_rts-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 15 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_usart2_cts: usart2_cts-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 16 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
|
||||
nand {
|
||||
pinctrl_nand: nand-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOC 15 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>,
|
||||
<AT91_PIOC 14 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;
|
||||
};
|
||||
};
|
||||
|
||||
mmc0 {
|
||||
pinctrl_mmc0_clk: mmc0_clk-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 2 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_mmc0_slot0_cmd_dat0: mmc0_slot0_cmd_dat0-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 1 AT91_PERIPH_B AT91_PINCTRL_PULL_UP>,
|
||||
<AT91_PIOA 0 AT91_PERIPH_B AT91_PINCTRL_PULL_UP>;
|
||||
};
|
||||
|
||||
pinctrl_mmc0_slot0_dat1_3: mmc0_slot0_dat1_3-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 4 AT91_PERIPH_B AT91_PINCTRL_PULL_UP>,
|
||||
<AT91_PIOA 5 AT91_PERIPH_B AT91_PINCTRL_PULL_UP>,
|
||||
<AT91_PIOA 6 AT91_PERIPH_B AT91_PINCTRL_PULL_UP>;
|
||||
};
|
||||
};
|
||||
|
||||
ssc0 {
|
||||
pinctrl_ssc0_tx: ssc0_tx-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOB 21 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 22 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 23 AT91_PERIPH_A AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_ssc0_rx: ssc0_rx-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOB 24 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 25 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 26 AT91_PERIPH_A AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
|
||||
ssc1 {
|
||||
pinctrl_ssc1_tx: ssc1_tx-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 17 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOA 18 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOA 19 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_ssc1_rx: ssc1_rx-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 20 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOA 21 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOA 22 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
|
||||
ssc2 {
|
||||
pinctrl_ssc2_tx: ssc2_tx-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOC 25 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOC 26 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOC 27 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_ssc2_rx: ssc2_rx-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOC 28 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOC 29 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOC 30 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
|
||||
spi0 {
|
||||
pinctrl_spi0: spi0-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 0 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOA 1 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOA 2 AT91_PERIPH_A AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
|
||||
spi1 {
|
||||
pinctrl_spi1: spi1-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOB 30 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 31 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 29 AT91_PERIPH_A AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
|
||||
tcb0 {
|
||||
pinctrl_tcb0_tclk0: tcb0_tclk0-0 {
|
||||
atmel,pins = <AT91_PIOC 16 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_tcb0_tclk1: tcb0_tclk1-0 {
|
||||
atmel,pins = <AT91_PIOC 17 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_tcb0_tclk2: tcb0_tclk2-0 {
|
||||
atmel,pins = <AT91_PIOC 18 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_tcb0_tioa0: tcb0_tioa0-0 {
|
||||
atmel,pins = <AT91_PIOC 19 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_tcb0_tioa1: tcb0_tioa1-0 {
|
||||
atmel,pins = <AT91_PIOC 21 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_tcb0_tioa2: tcb0_tioa2-0 {
|
||||
atmel,pins = <AT91_PIOC 23 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_tcb0_tiob0: tcb0_tiob0-0 {
|
||||
atmel,pins = <AT91_PIOC 20 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_tcb0_tiob1: tcb0_tiob1-0 {
|
||||
atmel,pins = <AT91_PIOC 22 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
|
||||
pinctrl_tcb0_tiob2: tcb0_tiob2-0 {
|
||||
atmel,pins = <AT91_PIOC 24 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c0 {
|
||||
pinctrl_i2c_bitbang: i2c-0-bitbang {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 7 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOA 8 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
|
||||
};
|
||||
pinctrl_i2c_twi: i2c-0-twi {
|
||||
atmel,pins =
|
||||
<AT91_PIOA 7 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOA 8 AT91_PERIPH_A AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
|
||||
fb {
|
||||
pinctrl_fb: fb-0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOB 1 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 2 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 3 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 7 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 8 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 9 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 10 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 11 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 12 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 15 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 16 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 17 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 18 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 19 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 20 AT91_PERIPH_A AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 23 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 24 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 25 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 26 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 27 AT91_PERIPH_B AT91_PINCTRL_NONE>,
|
||||
<AT91_PIOB 28 AT91_PERIPH_B AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
|
||||
pioA: gpio@fffff400 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff400 0x200>;
|
||||
interrupts = <2 IRQ_TYPE_LEVEL_HIGH 1>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
clocks = <&pioA_clk>;
|
||||
};
|
||||
|
||||
pioB: gpio@fffff600 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff600 0x200>;
|
||||
interrupts = <3 IRQ_TYPE_LEVEL_HIGH 1>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
clocks = <&pioB_clk>;
|
||||
};
|
||||
|
||||
pioC: gpio@fffff800 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff800 0x200>;
|
||||
interrupts = <4 IRQ_TYPE_LEVEL_HIGH 1>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
clocks = <&pioC_clk>;
|
||||
};
|
||||
};
|
||||
|
||||
pmc: pmc@fffffc00 {
|
||||
compatible = "atmel,at91rm9200-pmc", "syscon";
|
||||
reg = <0xfffffc00 0x100>;
|
||||
interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
|
||||
interrupt-controller;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
#interrupt-cells = <1>;
|
||||
|
||||
main_osc: main_osc {
|
||||
compatible = "atmel,at91rm9200-clk-main-osc";
|
||||
#clock-cells = <0>;
|
||||
interrupts-extended = <&pmc AT91_PMC_MOSCS>;
|
||||
clocks = <&main_xtal>;
|
||||
};
|
||||
|
||||
main: mainck {
|
||||
compatible = "atmel,at91rm9200-clk-main";
|
||||
#clock-cells = <0>;
|
||||
clocks = <&main_osc>;
|
||||
};
|
||||
|
||||
plla: pllack {
|
||||
compatible = "atmel,at91rm9200-clk-pll";
|
||||
#clock-cells = <0>;
|
||||
interrupts-extended = <&pmc AT91_PMC_LOCKA>;
|
||||
clocks = <&main>;
|
||||
reg = <0>;
|
||||
atmel,clk-input-range = <1000000 32000000>;
|
||||
#atmel,pll-clk-output-range-cells = <4>;
|
||||
atmel,pll-clk-output-ranges = <80000000 200000000 0 1>,
|
||||
<190000000 240000000 2 1>;
|
||||
};
|
||||
|
||||
pllb: pllbck {
|
||||
compatible = "atmel,at91rm9200-clk-pll";
|
||||
#clock-cells = <0>;
|
||||
interrupts-extended = <&pmc AT91_PMC_LOCKB>;
|
||||
clocks = <&main>;
|
||||
reg = <1>;
|
||||
atmel,clk-input-range = <1000000 5000000>;
|
||||
#atmel,pll-clk-output-range-cells = <4>;
|
||||
atmel,pll-clk-output-ranges = <70000000 130000000 1 1>;
|
||||
};
|
||||
|
||||
mck: masterck {
|
||||
compatible = "atmel,at91rm9200-clk-master";
|
||||
#clock-cells = <0>;
|
||||
interrupts-extended = <&pmc AT91_PMC_MCKRDY>;
|
||||
clocks = <&slow_xtal>, <&main>, <&plla>, <&pllb>;
|
||||
atmel,clk-output-range = <0 94000000>;
|
||||
atmel,clk-divisors = <1 2 4 0>;
|
||||
};
|
||||
|
||||
usb: usbck {
|
||||
compatible = "atmel,at91rm9200-clk-usb";
|
||||
#clock-cells = <0>;
|
||||
atmel,clk-divisors = <1 2 4 0>;
|
||||
clocks = <&pllb>;
|
||||
};
|
||||
|
||||
prog: progck {
|
||||
compatible = "atmel,at91rm9200-clk-programmable";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupt-parent = <&pmc>;
|
||||
clocks = <&slow_xtal>, <&main>, <&plla>, <&pllb>;
|
||||
|
||||
prog0: prog0 {
|
||||
#clock-cells = <0>;
|
||||
reg = <0>;
|
||||
interrupts = <AT91_PMC_PCKRDY(0)>;
|
||||
};
|
||||
|
||||
prog1: prog1 {
|
||||
#clock-cells = <0>;
|
||||
reg = <1>;
|
||||
interrupts = <AT91_PMC_PCKRDY(1)>;
|
||||
};
|
||||
|
||||
prog2: prog2 {
|
||||
#clock-cells = <0>;
|
||||
reg = <2>;
|
||||
interrupts = <AT91_PMC_PCKRDY(2)>;
|
||||
};
|
||||
|
||||
prog3: prog3 {
|
||||
#clock-cells = <0>;
|
||||
reg = <3>;
|
||||
interrupts = <AT91_PMC_PCKRDY(3)>;
|
||||
};
|
||||
};
|
||||
|
||||
systemck {
|
||||
compatible = "atmel,at91rm9200-clk-system";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
uhpck: uhpck {
|
||||
#clock-cells = <0>;
|
||||
reg = <6>;
|
||||
clocks = <&usb>;
|
||||
};
|
||||
|
||||
udpck: udpck {
|
||||
#clock-cells = <0>;
|
||||
reg = <7>;
|
||||
clocks = <&usb>;
|
||||
};
|
||||
|
||||
pck0: pck0 {
|
||||
#clock-cells = <0>;
|
||||
reg = <8>;
|
||||
clocks = <&prog0>;
|
||||
};
|
||||
|
||||
pck1: pck1 {
|
||||
#clock-cells = <0>;
|
||||
reg = <9>;
|
||||
clocks = <&prog1>;
|
||||
};
|
||||
|
||||
pck2: pck2 {
|
||||
#clock-cells = <0>;
|
||||
reg = <10>;
|
||||
clocks = <&prog2>;
|
||||
};
|
||||
|
||||
pck3: pck3 {
|
||||
#clock-cells = <0>;
|
||||
reg = <11>;
|
||||
clocks = <&prog3>;
|
||||
};
|
||||
|
||||
hclk0: hclk0 {
|
||||
#clock-cells = <0>;
|
||||
reg = <16>;
|
||||
clocks = <&mck>;
|
||||
};
|
||||
|
||||
hclk1: hclk1 {
|
||||
#clock-cells = <0>;
|
||||
reg = <17>;
|
||||
clocks = <&mck>;
|
||||
};
|
||||
};
|
||||
|
||||
periphck {
|
||||
compatible = "atmel,at91rm9200-clk-peripheral";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&mck>;
|
||||
|
||||
pioA_clk: pioA_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <2>;
|
||||
};
|
||||
|
||||
pioB_clk: pioB_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <3>;
|
||||
};
|
||||
|
||||
pioC_clk: pioC_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <4>;
|
||||
};
|
||||
|
||||
usart0_clk: usart0_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <6>;
|
||||
};
|
||||
|
||||
usart1_clk: usart1_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <7>;
|
||||
};
|
||||
|
||||
usart2_clk: usart2_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <8>;
|
||||
};
|
||||
|
||||
mci0_clk: mci0_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <9>;
|
||||
};
|
||||
|
||||
udc_clk: udc_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <10>;
|
||||
};
|
||||
|
||||
twi0_clk: twi0_clk {
|
||||
reg = <11>;
|
||||
#clock-cells = <0>;
|
||||
};
|
||||
|
||||
spi0_clk: spi0_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <12>;
|
||||
};
|
||||
|
||||
spi1_clk: spi1_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <13>;
|
||||
};
|
||||
|
||||
ssc0_clk: ssc0_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <14>;
|
||||
};
|
||||
|
||||
ssc1_clk: ssc1_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <15>;
|
||||
};
|
||||
|
||||
ssc2_clk: ssc2_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <16>;
|
||||
};
|
||||
|
||||
tc0_clk: tc0_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <17>;
|
||||
};
|
||||
|
||||
tc1_clk: tc1_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <18>;
|
||||
};
|
||||
|
||||
tc2_clk: tc2_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <19>;
|
||||
};
|
||||
|
||||
ohci_clk: ohci_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <20>;
|
||||
};
|
||||
|
||||
lcd_clk: lcd_clk {
|
||||
#clock-cells = <0>;
|
||||
reg = <21>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
rstc@fffffd00 {
|
||||
compatible = "atmel,at91sam9260-rstc";
|
||||
reg = <0xfffffd00 0x10>;
|
||||
clocks = <&slow_xtal>;
|
||||
};
|
||||
|
||||
shdwc@fffffd10 {
|
||||
compatible = "atmel,at91sam9260-shdwc";
|
||||
reg = <0xfffffd10 0x10>;
|
||||
clocks = <&slow_xtal>;
|
||||
};
|
||||
|
||||
pit: timer@fffffd30 {
|
||||
compatible = "atmel,at91sam9260-pit";
|
||||
reg = <0xfffffd30 0xf>;
|
||||
interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
|
||||
clocks = <&mck>;
|
||||
};
|
||||
|
||||
rtc@fffffd20 {
|
||||
compatible = "atmel,at91sam9260-rtt";
|
||||
reg = <0xfffffd20 0x10>;
|
||||
interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
|
||||
clocks = <&slow_xtal>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
watchdog@fffffd40 {
|
||||
compatible = "atmel,at91sam9260-wdt";
|
||||
reg = <0xfffffd40 0x10>;
|
||||
interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
|
||||
clocks = <&slow_xtal>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gpbr: syscon@fffffd50 {
|
||||
compatible = "atmel,at91sam9260-gpbr", "syscon";
|
||||
reg = <0xfffffd50 0x10>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
compatible = "i2c-gpio";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c_bitbang>;
|
||||
gpios = <&pioA 7 GPIO_ACTIVE_HIGH>, /* sda */
|
||||
<&pioA 8 GPIO_ACTIVE_HIGH>; /* scl */
|
||||
i2c-gpio,sda-open-drain;
|
||||
i2c-gpio,scl-open-drain;
|
||||
i2c-gpio,delay-us = <2>; /* ~100 kHz */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
1034
arch/arm/dts/at91sam9263.dtsi
Normal file
1034
arch/arm/dts/at91sam9263.dtsi
Normal file
File diff suppressed because it is too large
Load Diff
119
arch/arm/dts/at91sam9g20-taurus.dts
Normal file
119
arch/arm/dts/at91sam9g20-taurus.dts
Normal file
@ -0,0 +1,119 @@
|
||||
/*
|
||||
* at91sam9g20-taurus.dts
|
||||
* (C) Copyright 2016
|
||||
* Heiko Schocher, DENX Software Engineering, hs@denx.de.
|
||||
*
|
||||
* Based on:
|
||||
* at91sam9g20ek.dts - Device Tree file for Atmel at91sam9g20ek board
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
/dts-v1/;
|
||||
#include "at91sam9g20.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Siemens taurus";
|
||||
compatible = "atmel,at91sam9g20ek", "atmel,at91sam9g20", "atmel,at91sam9";
|
||||
|
||||
chosen {
|
||||
stdout-path = &dbgu;
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x4000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
slow_xtal {
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
|
||||
main_xtal {
|
||||
clock-frequency = <18432000>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
pinctrl@fffff400 {
|
||||
board {
|
||||
pinctrl_pck0_as_mck: pck0_as_mck {
|
||||
atmel,pins =
|
||||
<AT91_PIOC 1 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PC1 periph B */
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
dbgu: serial@fffff200 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart0: serial@fffb0000 {
|
||||
pinctrl-0 =
|
||||
<&pinctrl_usart0
|
||||
&pinctrl_usart0_rts
|
||||
&pinctrl_usart0_cts
|
||||
&pinctrl_usart0_dtr_dsr
|
||||
&pinctrl_usart0_dcd
|
||||
&pinctrl_usart0_ri>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart1: serial@fffb4000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffc4000 {
|
||||
phy-mode = "rmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb1: gadget@fffa4000 {
|
||||
atmel,vbus-gpio = <&pioC 5 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ssc0: ssc@fffbc000 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&pinctrl_ssc0_tx>;
|
||||
};
|
||||
|
||||
spi0: spi@fffc8000 {
|
||||
cs-gpios = <0>, <&pioC 11 0>, <0>, <0>;
|
||||
mtd_dataflash@0 {
|
||||
compatible = "atmel,at45", "atmel,dataflash";
|
||||
spi-max-frequency = <50000000>;
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
rtc@fffffd20 {
|
||||
atmel,rtt-rtc-time-reg = <&gpbr 0x0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
watchdog@fffffd40 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gpbr: syscon@fffffd50 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-on-flash-bbt;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb0: ohci@00500000 {
|
||||
num-ports = <2>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
68
arch/arm/dts/at91sam9g20.dtsi
Normal file
68
arch/arm/dts/at91sam9g20.dtsi
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* at91sam9g20.dtsi - Device Tree Include file for AT91SAM9G20 family SoC
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
|
||||
#include "at91sam9260.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Atmel AT91SAM9G20 family SoC";
|
||||
compatible = "atmel,at91sam9g20";
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x08000000>;
|
||||
};
|
||||
|
||||
sram0: sram@002ff000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sram1: sram@002fc000 {
|
||||
compatible = "mmio-sram";
|
||||
reg = <0x002fc000 0x8000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
i2c0: i2c@fffac000 {
|
||||
compatible = "atmel,at91sam9g20-i2c";
|
||||
};
|
||||
|
||||
ssc0: ssc@fffbc000 {
|
||||
compatible = "atmel,at91sam9rl-ssc";
|
||||
};
|
||||
|
||||
adc0: adc@fffe0000 {
|
||||
atmel,adc-startup-time = <40>;
|
||||
};
|
||||
|
||||
pmc: pmc@fffffc00 {
|
||||
plla: pllack {
|
||||
atmel,clk-input-range = <2000000 32000000>;
|
||||
atmel,pll-clk-output-ranges = <745000000 800000000 0 0>,
|
||||
<695000000 750000000 1 0>,
|
||||
<645000000 700000000 2 0>,
|
||||
<595000000 650000000 3 0>,
|
||||
<545000000 600000000 0 1>,
|
||||
<495000000 550000000 1 1>,
|
||||
<445000000 500000000 2 1>,
|
||||
<400000000 450000000 3 1>;
|
||||
};
|
||||
|
||||
pllb: pllbck {
|
||||
compatible = "atmel,at91sam9g20-clk-pllb";
|
||||
atmel,clk-input-range = <2000000 32000000>;
|
||||
atmel,pll-clk-output-ranges = <30000000 100000000 0 0>;
|
||||
};
|
||||
|
||||
mck: masterck {
|
||||
atmel,clk-output-range = <0 133000000>;
|
||||
atmel,clk-divisors = <1 2 4 6>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
108
arch/arm/dts/at91sam9g45-corvus.dts
Normal file
108
arch/arm/dts/at91sam9g45-corvus.dts
Normal file
@ -0,0 +1,108 @@
|
||||
/*
|
||||
* at91sam9g45-corvus.dts Device Tree file fir Siemens corvus board
|
||||
* (C) Copyright 2016 Heiko Schocher <hs@denx.de>
|
||||
*
|
||||
* based on:
|
||||
* at91sam9m10g45ek.dts - Device Tree file for AT91SAM9M10G45-EK board
|
||||
*
|
||||
* Copyright (C) 2011 Atmel,
|
||||
* 2011 Nicolas Ferre <nicolas.ferre@atmel.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
/dts-v1/;
|
||||
#include "at91sam9g45.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Siemens corvus";
|
||||
compatible = "atmel,at91sam9m10g45ek", "atmel,at91sam9g45", "atmel,at91sam9";
|
||||
|
||||
chosen {
|
||||
stdout-path = &dbgu;
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x70000000 0x8000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
slow_xtal {
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
|
||||
main_xtal {
|
||||
clock-frequency = <12000000>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
dbgu: serial@ffffee00 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart1: serial@fff90000 {
|
||||
pinctrl-0 =
|
||||
<&pinctrl_usart1
|
||||
&pinctrl_usart1_rts
|
||||
&pinctrl_usart1_cts>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffbc000 {
|
||||
phy-mode = "rmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
watchdog@fffffd40 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
spi0: spi@fffa4000{
|
||||
status = "okay";
|
||||
cs-gpios = <&pioB 3 0>, <0>, <0>, <0>;
|
||||
mtd_dataflash@0 {
|
||||
compatible = "atmel,at45", "atmel,dataflash";
|
||||
spi-max-frequency = <13000000>;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
usb2: gadget@fff78000 {
|
||||
atmel,vbus-gpio = <&pioB 19 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
rtc@fffffd20 {
|
||||
atmel,rtt-rtc-time-reg = <&gpbr 0x0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gpbr: syscon@fffffd60 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
rtc@fffffdb0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-on-flash-bbt;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb0: ohci@00700000 {
|
||||
status = "okay";
|
||||
num-ports = <2>;
|
||||
atmel,vbus-gpio = <&pioD 1 GPIO_ACTIVE_LOW
|
||||
&pioD 3 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
usb1: ehci@00800000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -141,5 +141,15 @@
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-name = "rtc_ldo";
|
||||
};
|
||||
|
||||
reg_drivevbus: drivevbus {
|
||||
regulator-name = "drivevbus";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
usb_power_supply: usb_power_supply {
|
||||
compatible = "x-powers,axp221-usb-power-supply";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
@ -9,18 +9,6 @@
|
||||
/ {
|
||||
compatible = "fsl,ls1012a";
|
||||
interrupt-parent = <&gic>;
|
||||
cpus {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu0: cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a53";
|
||||
reg = <0x0 0x0>;
|
||||
clocks = <&clockgen 1 0>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
sysclk: sysclk {
|
||||
compatible = "fixed-clock";
|
||||
|
||||
@ -15,38 +15,6 @@
|
||||
/ {
|
||||
compatible = "fsl,ls1043a";
|
||||
interrupt-parent = <&gic>;
|
||||
cpus {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu0: cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a53";
|
||||
reg = <0x0 0x0>;
|
||||
clocks = <&clockgen 1 0>;
|
||||
};
|
||||
|
||||
cpu1: cpu@1 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a53";
|
||||
reg = <0x0 0x1>;
|
||||
clocks = <&clockgen 1 0>;
|
||||
};
|
||||
|
||||
cpu2: cpu@2 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a53";
|
||||
reg = <0x0 0x2>;
|
||||
clocks = <&clockgen 1 0>;
|
||||
};
|
||||
|
||||
cpu3: cpu@3 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a53";
|
||||
reg = <0x0 0x3>;
|
||||
clocks = <&clockgen 1 0>;
|
||||
};
|
||||
};
|
||||
|
||||
sysclk: sysclk {
|
||||
compatible = "fixed-clock";
|
||||
|
||||
@ -12,67 +12,6 @@
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
|
||||
cpus {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <0>;
|
||||
|
||||
/*
|
||||
* We expect the enable-method for cpu's to be "psci", but this
|
||||
* is dependent on the SoC FW, which will fill this in.
|
||||
*
|
||||
* Currently supported enable-method is psci v0.2
|
||||
*/
|
||||
|
||||
/* We have 4 clusters having 2 Cortex-A57 cores each */
|
||||
cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <0x0 0x0>;
|
||||
};
|
||||
|
||||
cpu@1 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <0x0 0x1>;
|
||||
};
|
||||
|
||||
cpu@100 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <0x0 0x100>;
|
||||
};
|
||||
|
||||
cpu@101 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <0x0 0x101>;
|
||||
};
|
||||
|
||||
cpu@200 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <0x0 0x200>;
|
||||
};
|
||||
|
||||
cpu@201 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <0x0 0x201>;
|
||||
};
|
||||
|
||||
cpu@300 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <0x0 0x300>;
|
||||
};
|
||||
|
||||
cpu@301 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <0x0 0x301>;
|
||||
};
|
||||
};
|
||||
|
||||
memory@80000000 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x80000000 0 0x80000000>;
|
||||
|
||||
293
arch/arm/dts/sun8i-a23-inet86dz.dts
Normal file
293
arch/arm/dts/sun8i-a23-inet86dz.dts
Normal file
@ -0,0 +1,293 @@
|
||||
/*
|
||||
* Copyright 2016 Hans de Goede <hdegoede@redhat.com>
|
||||
*
|
||||
* This file is dual-licensed: you can use it either under the terms
|
||||
* of the GPL or the X11 license, at your option. Note that this dual
|
||||
* licensing only applies to this file, and not this project as a
|
||||
* whole.
|
||||
*
|
||||
* a) This file is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* Or, alternatively,
|
||||
*
|
||||
* b) Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "sun8i-a23.dtsi"
|
||||
#include "sunxi-common-regulators.dtsi"
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/pinctrl/sun4i-a10.h>
|
||||
#include <dt-bindings/pwm/pwm.h>
|
||||
|
||||
/ {
|
||||
model = "INet-86DZ Rev 01";
|
||||
compatible = "primux,inet86dz", "allwinner,sun8i-a23";
|
||||
|
||||
aliases {
|
||||
serial0 = &r_uart;
|
||||
};
|
||||
|
||||
backlight: backlight {
|
||||
compatible = "pwm-backlight";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&bl_en_pin_inet86dz>;
|
||||
pwms = <&pwm 0 50000 PWM_POLARITY_INVERTED>;
|
||||
brightness-levels = <0 10 20 30 40 50 60 70 80 90 100>;
|
||||
default-brightness-level = <8>;
|
||||
enable-gpios = <&pio 7 6 GPIO_ACTIVE_HIGH>; /* PH6 */
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
};
|
||||
|
||||
&ehci0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c0_pins_a>;
|
||||
status = "okay";
|
||||
/*
|
||||
* The gsl1680 is rated at 400KHz and it will not work reliable at
|
||||
* 100KHz, this has been confirmed on multiple different tablets.
|
||||
* The gsl1680 is the only device on this bus.
|
||||
*/
|
||||
clock-frequency = <400000>;
|
||||
|
||||
gsl1680: touchscreen@40 {
|
||||
compatible = "silead,gsl1680";
|
||||
reg = <0x40>;
|
||||
interrupt-parent = <&pio>;
|
||||
interrupts = <1 5 IRQ_TYPE_EDGE_FALLING>; /* PB5 */
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&ts_power_pin_inet86dz>;
|
||||
power-gpios = <&pio 7 1 GPIO_ACTIVE_HIGH>; /* PH1 */
|
||||
touchscreen-size-x = <960>;
|
||||
touchscreen-size-y = <640>;
|
||||
touchscreen-max-fingers = <5>;
|
||||
touchscreen-fw-name = "silead/gsl1680-inet86dz.fw";
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c1_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&lradc {
|
||||
vref-supply = <®_vcc3v0>;
|
||||
status = "okay";
|
||||
|
||||
button@200 {
|
||||
label = "Volume Up";
|
||||
linux,code = <KEY_VOLUMEUP>;
|
||||
channel = <0>;
|
||||
voltage = <200000>;
|
||||
};
|
||||
|
||||
button@400 {
|
||||
label = "Volume Down";
|
||||
linux,code = <KEY_VOLUMEDOWN>;
|
||||
channel = <0>;
|
||||
voltage = <400000>;
|
||||
};
|
||||
};
|
||||
|
||||
&mmc0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_inet86dz>;
|
||||
vmmc-supply = <®_dcdc1>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>; /* PB4 */
|
||||
cd-inverted;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pio {
|
||||
bl_en_pin_inet86dz: bl_en_pin@0 {
|
||||
allwinner,pins = "PH6";
|
||||
allwinner,function = "gpio_in";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
mmc0_cd_pin_inet86dz: mmc0_cd_pin@0 {
|
||||
allwinner,pins = "PB4";
|
||||
allwinner,function = "gpio_in";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
|
||||
};
|
||||
|
||||
ts_power_pin_inet86dz: ts_power_pin@0 {
|
||||
allwinner,pins = "PH1";
|
||||
allwinner,function = "gpio_out";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
usb0_id_detect_pin: usb0_id_detect_pin@0 {
|
||||
allwinner,pins = "PH8";
|
||||
allwinner,function = "gpio_in";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
|
||||
};
|
||||
};
|
||||
|
||||
&pwm {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pwm0_pins>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&r_rsb {
|
||||
status = "okay";
|
||||
|
||||
axp22x: pmic@3a3 {
|
||||
compatible = "x-powers,axp223";
|
||||
reg = <0x3a3>;
|
||||
interrupt-parent = <&nmi_intc>;
|
||||
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
|
||||
eldoin-supply = <®_dcdc1>;
|
||||
x-powers,drive-vbus-en;
|
||||
};
|
||||
};
|
||||
|
||||
&r_uart {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&r_uart_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
#include "axp22x.dtsi"
|
||||
|
||||
®_aldo1 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-name = "vcc-io";
|
||||
};
|
||||
|
||||
®_aldo2 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <2350000>;
|
||||
regulator-max-microvolt = <2650000>;
|
||||
regulator-name = "vdd-dll";
|
||||
};
|
||||
|
||||
®_aldo3 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <2700000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-name = "vcc-pll-avcc";
|
||||
};
|
||||
|
||||
®_dc1sw {
|
||||
regulator-name = "vcc-lcd";
|
||||
};
|
||||
|
||||
®_dc5ldo {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <1400000>;
|
||||
regulator-name = "vdd-cpus";
|
||||
};
|
||||
|
||||
®_dcdc1 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-name = "vcc-3v0";
|
||||
};
|
||||
|
||||
®_dcdc2 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <1400000>;
|
||||
regulator-name = "vdd-sys";
|
||||
};
|
||||
|
||||
®_dcdc3 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <1400000>;
|
||||
regulator-name = "vdd-cpu";
|
||||
};
|
||||
|
||||
®_dcdc5 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <1500000>;
|
||||
regulator-max-microvolt = <1500000>;
|
||||
regulator-name = "vcc-dram";
|
||||
};
|
||||
|
||||
®_dldo1 {
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-name = "vcc-wifi";
|
||||
};
|
||||
|
||||
®_drivevbus {
|
||||
regulator-name = "usb0-vbus";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
®_rtc_ldo {
|
||||
regulator-name = "vcc-rtc";
|
||||
};
|
||||
|
||||
&simplefb_lcd {
|
||||
vcc-lcd-supply = <®_dc1sw>;
|
||||
};
|
||||
|
||||
&usb_otg {
|
||||
dr_mode = "otg";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_power_supply {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphy {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&usb0_id_detect_pin>;
|
||||
usb0_id_det-gpio = <&pio 7 8 GPIO_ACTIVE_HIGH>; /* PH8 */
|
||||
usb0_vbus_power-supply = <&usb_power_supply>;
|
||||
usb0_vbus-supply = <®_drivevbus>;
|
||||
usb1_vbus-supply = <®_dldo1>;
|
||||
status = "okay";
|
||||
};
|
||||
292
arch/arm/dts/sun8i-a23-polaroid-mid2407pxe03.dts
Normal file
292
arch/arm/dts/sun8i-a23-polaroid-mid2407pxe03.dts
Normal file
@ -0,0 +1,292 @@
|
||||
/*
|
||||
* Copyright 2016 Hans de Goede <hdegoede@redhat.com>
|
||||
*
|
||||
* This file is dual-licensed: you can use it either under the terms
|
||||
* of the GPL or the X11 license, at your option. Note that this dual
|
||||
* licensing only applies to this file, and not this project as a
|
||||
* whole.
|
||||
*
|
||||
* a) This file is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* Or, alternatively,
|
||||
*
|
||||
* b) Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "sun8i-a23.dtsi"
|
||||
#include "sunxi-common-regulators.dtsi"
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/pinctrl/sun4i-a10.h>
|
||||
#include <dt-bindings/pwm/pwm.h>
|
||||
|
||||
/ {
|
||||
model = "Polaroid MID2407PXE03 tablet";
|
||||
compatible = "polaroid,mid2407pxe03", "allwinner,sun8i-a23";
|
||||
|
||||
aliases {
|
||||
serial0 = &r_uart;
|
||||
};
|
||||
|
||||
backlight: backlight {
|
||||
compatible = "pwm-backlight";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&bl_en_pin_mid2407>;
|
||||
pwms = <&pwm 0 50000 PWM_POLARITY_INVERTED>;
|
||||
brightness-levels = <0 10 20 30 40 50 60 70 80 90 100>;
|
||||
default-brightness-level = <8>;
|
||||
enable-gpios = <&pio 7 6 GPIO_ACTIVE_HIGH>; /* PH6 */
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c0_pins_a>;
|
||||
status = "okay";
|
||||
/*
|
||||
* The gsl1680 is rated at 400KHz and it will not work reliable at
|
||||
* 100KHz, this has been confirmed on multiple different tablets.
|
||||
* The gsl1680 is the only device on this bus.
|
||||
*/
|
||||
clock-frequency = <400000>;
|
||||
|
||||
gsl1680: touchscreen@40 {
|
||||
compatible = "silead,gsl1680";
|
||||
reg = <0x40>;
|
||||
interrupt-parent = <&pio>;
|
||||
interrupts = <1 5 IRQ_TYPE_EDGE_FALLING>; /* PB5 */
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&ts_power_pin_mid2407>;
|
||||
power-gpios = <&pio 7 1 GPIO_ACTIVE_HIGH>; /* PH1 */
|
||||
touchscreen-size-x = <960>;
|
||||
touchscreen-size-y = <640>;
|
||||
touchscreen-inverted-x;
|
||||
touchscreen-inverted-y;
|
||||
touchscreen-max-fingers = <5>;
|
||||
touchscreen-fw-name = "silead/gsl1680-polaroid-mid2407pxe03.fw";
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c1_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&lradc {
|
||||
vref-supply = <®_vcc3v0>;
|
||||
status = "okay";
|
||||
|
||||
button@200 {
|
||||
label = "Volume Up";
|
||||
linux,code = <KEY_VOLUMEUP>;
|
||||
channel = <0>;
|
||||
voltage = <200000>;
|
||||
};
|
||||
|
||||
button@400 {
|
||||
label = "Volume Down";
|
||||
linux,code = <KEY_VOLUMEDOWN>;
|
||||
channel = <0>;
|
||||
voltage = <400000>;
|
||||
};
|
||||
};
|
||||
|
||||
&mmc0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_mid2407>;
|
||||
vmmc-supply = <®_dcdc1>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>; /* PB4 */
|
||||
cd-inverted;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pio {
|
||||
bl_en_pin_mid2407: bl_en_pin@0 {
|
||||
allwinner,pins = "PH6";
|
||||
allwinner,function = "gpio_in";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
mmc0_cd_pin_mid2407: mmc0_cd_pin@0 {
|
||||
allwinner,pins = "PB4";
|
||||
allwinner,function = "gpio_in";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
|
||||
};
|
||||
|
||||
ts_power_pin_mid2407: ts_power_pin@0 {
|
||||
allwinner,pins = "PH1";
|
||||
allwinner,function = "gpio_out";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
usb0_id_detect_pin: usb0_id_detect_pin@0 {
|
||||
allwinner,pins = "PH8";
|
||||
allwinner,function = "gpio_in";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
|
||||
};
|
||||
};
|
||||
|
||||
&pwm {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pwm0_pins>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&r_rsb {
|
||||
status = "okay";
|
||||
|
||||
axp22x: pmic@3a3 {
|
||||
compatible = "x-powers,axp223";
|
||||
reg = <0x3a3>;
|
||||
interrupt-parent = <&nmi_intc>;
|
||||
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
|
||||
eldoin-supply = <®_dcdc1>;
|
||||
x-powers,drive-vbus-en;
|
||||
};
|
||||
};
|
||||
|
||||
&r_uart {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&r_uart_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
#include "axp22x.dtsi"
|
||||
|
||||
®_aldo1 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-name = "vcc-io";
|
||||
};
|
||||
|
||||
®_aldo2 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <2350000>;
|
||||
regulator-max-microvolt = <2650000>;
|
||||
regulator-name = "vdd-dll";
|
||||
};
|
||||
|
||||
®_aldo3 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <2700000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-name = "vcc-pll-avcc";
|
||||
};
|
||||
|
||||
®_dc1sw {
|
||||
regulator-name = "vcc-lcd";
|
||||
};
|
||||
|
||||
®_dc5ldo {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <1400000>;
|
||||
regulator-name = "vdd-cpus";
|
||||
};
|
||||
|
||||
®_dcdc1 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-name = "vcc-3v0";
|
||||
};
|
||||
|
||||
®_dcdc2 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <1400000>;
|
||||
regulator-name = "vdd-sys";
|
||||
};
|
||||
|
||||
®_dcdc3 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <1400000>;
|
||||
regulator-name = "vdd-cpu";
|
||||
};
|
||||
|
||||
®_dcdc5 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <1500000>;
|
||||
regulator-max-microvolt = <1500000>;
|
||||
regulator-name = "vcc-dram";
|
||||
};
|
||||
|
||||
®_drivevbus {
|
||||
regulator-name = "usb0-vbus";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
®_ldo_io1 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-name = "vcc-touchscreen";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
®_rtc_ldo {
|
||||
regulator-name = "vcc-rtc";
|
||||
};
|
||||
|
||||
&simplefb_lcd {
|
||||
vcc-lcd-supply = <®_dc1sw>;
|
||||
};
|
||||
|
||||
&usb_otg {
|
||||
dr_mode = "otg";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_power_supply {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphy {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&usb0_id_detect_pin>;
|
||||
usb0_id_det-gpio = <&pio 7 8 GPIO_ACTIVE_HIGH>; /* PH8 */
|
||||
usb0_vbus_power-supply = <&usb_power_supply>;
|
||||
usb0_vbus-supply = <®_drivevbus>;
|
||||
status = "okay";
|
||||
};
|
||||
@ -22,6 +22,7 @@
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
interrupt-parent = <&intc>;
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
serial0: serial@54006800 {
|
||||
compatible = "socionext,uniphier-uart";
|
||||
@ -65,9 +66,12 @@
|
||||
|
||||
system_bus: system-bus@58c00000 {
|
||||
compatible = "socionext,uniphier-system-bus";
|
||||
status = "disabled";
|
||||
reg = <0x58c00000 0x400>;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_system_bus>;
|
||||
};
|
||||
|
||||
smpctrl@59800000 {
|
||||
@ -109,9 +113,15 @@
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
pinctrl: pinctrl@5f801000 {
|
||||
/* specify compatible in each SoC DTSI */
|
||||
reg = <0x5f801000 0xe00>;
|
||||
soc-glue@5f800000 {
|
||||
compatible = "simple-mfd", "syscon";
|
||||
reg = <0x5f800000 0x2000>;
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
pinctrl: pinctrl {
|
||||
/* specify compatible in each SoC DTSI */
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
sysctrl: sysctrl@61840000 {
|
||||
@ -124,8 +134,12 @@
|
||||
|
||||
nand: nand@68000000 {
|
||||
compatible = "denali,denali-nand-dt";
|
||||
reg = <0x68000000 0x20>, <0x68100000 0x1000>;
|
||||
status = "disabled";
|
||||
reg-names = "nand_data", "denali_reg";
|
||||
reg = <0x68000000 0x20>, <0x68100000 0x1000>;
|
||||
interrupts = <0 65 4>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_nand>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
/*
|
||||
* Device Tree Source for UniPhier PH1-LD11 Reference Board
|
||||
*
|
||||
* Copyright (C) 2016 Masahiro Yamada <yamada.masahiro@socionext.com>
|
||||
* Copyright (C) 2016 Socionext Inc.
|
||||
* Author: Masahiro Yamada <yamada.masahiro@socionext.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+ X11
|
||||
*/
|
||||
@ -62,20 +63,10 @@
|
||||
};
|
||||
|
||||
/* for U-Boot only */
|
||||
/ {
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&serial0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl_uart0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
/*
|
||||
* Device Tree Source for UniPhier PH1-LD11 SoC
|
||||
*
|
||||
* Copyright (C) 2016 Masahiro Yamada <yamada.masahiro@socionext.com>
|
||||
* Copyright (C) 2016 Socionext Inc.
|
||||
* Author: Masahiro Yamada <yamada.masahiro@socionext.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+ X11
|
||||
*/
|
||||
|
||||
/memreserve/ 0x80000000 0x00000008; /* cpu-release-addr */
|
||||
|
||||
/ {
|
||||
compatible = "socionext,ph1-ld11";
|
||||
#address-cells = <2>;
|
||||
@ -16,24 +19,41 @@
|
||||
#address-cells = <2>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu@0 {
|
||||
cpu-map {
|
||||
cluster0 {
|
||||
core0 {
|
||||
cpu = <&cpu0>;
|
||||
};
|
||||
core1 {
|
||||
cpu = <&cpu1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
cpu0: cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a53", "arm,armv8";
|
||||
reg = <0 0x000>;
|
||||
enable-method = "spin-table";
|
||||
cpu-release-addr = <0 0x80000100>;
|
||||
cpu-release-addr = <0 0x80000000>;
|
||||
};
|
||||
|
||||
cpu@1 {
|
||||
cpu1: cpu@1 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a53", "arm,armv8";
|
||||
reg = <0 0x001>;
|
||||
enable-method = "spin-table";
|
||||
cpu-release-addr = <0 0x80000100>;
|
||||
cpu-release-addr = <0 0x80000000>;
|
||||
};
|
||||
};
|
||||
|
||||
clocks {
|
||||
refclk: ref {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <25000000>;
|
||||
};
|
||||
|
||||
uart_clk: uart_clk {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
@ -60,6 +80,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0 0 0xffffffff>;
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
serial0: serial@54006800 {
|
||||
compatible = "socionext,uniphier-uart";
|
||||
@ -183,6 +204,8 @@
|
||||
reg = <0x58c00000 0x400>;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_system_bus>;
|
||||
};
|
||||
|
||||
smpctrl@59800000 {
|
||||
@ -226,9 +249,20 @@
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
pinctrl: pinctrl@5f801000 {
|
||||
compatible = "socionext,ph1-ld11-pinctrl", "syscon";
|
||||
reg = <0x5f801000 0xe00>;
|
||||
soc-glue@5f800000 {
|
||||
compatible = "simple-mfd", "syscon";
|
||||
reg = <0x5f800000 0x2000>;
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
pinctrl: pinctrl {
|
||||
compatible = "socionext,uniphier-ld11-pinctrl";
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
aidet@5fc20000 {
|
||||
compatible = "simple-mfd", "syscon";
|
||||
reg = <0x5fc20000 0x200>;
|
||||
};
|
||||
|
||||
gic: interrupt-controller@5fe00000 {
|
||||
|
||||
@ -51,20 +51,10 @@
|
||||
};
|
||||
|
||||
/* for U-Boot only */
|
||||
/ {
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&serial0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl_uart0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
@ -6,6 +6,8 @@
|
||||
* SPDX-License-Identifier: GPL-2.0+ X11
|
||||
*/
|
||||
|
||||
/memreserve/ 0x80000000 0x00000008; /* cpu-release-addr */
|
||||
|
||||
/ {
|
||||
compatible = "socionext,ph1-ld20";
|
||||
#address-cells = <2>;
|
||||
@ -41,7 +43,7 @@
|
||||
compatible = "arm,cortex-a72", "arm,armv8";
|
||||
reg = <0 0x000>;
|
||||
enable-method = "spin-table";
|
||||
cpu-release-addr = <0 0x80000100>;
|
||||
cpu-release-addr = <0 0x80000000>;
|
||||
};
|
||||
|
||||
cpu1: cpu@1 {
|
||||
@ -49,7 +51,7 @@
|
||||
compatible = "arm,cortex-a72", "arm,armv8";
|
||||
reg = <0 0x001>;
|
||||
enable-method = "spin-table";
|
||||
cpu-release-addr = <0 0x80000100>;
|
||||
cpu-release-addr = <0 0x80000000>;
|
||||
};
|
||||
|
||||
cpu2: cpu@100 {
|
||||
@ -57,7 +59,7 @@
|
||||
compatible = "arm,cortex-a53", "arm,armv8";
|
||||
reg = <0 0x100>;
|
||||
enable-method = "spin-table";
|
||||
cpu-release-addr = <0 0x80000100>;
|
||||
cpu-release-addr = <0 0x80000000>;
|
||||
};
|
||||
|
||||
cpu3: cpu@101 {
|
||||
@ -65,11 +67,17 @@
|
||||
compatible = "arm,cortex-a53", "arm,armv8";
|
||||
reg = <0 0x101>;
|
||||
enable-method = "spin-table";
|
||||
cpu-release-addr = <0 0x80000100>;
|
||||
cpu-release-addr = <0 0x80000000>;
|
||||
};
|
||||
};
|
||||
|
||||
clocks {
|
||||
refclk: ref {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <25000000>;
|
||||
};
|
||||
|
||||
uart_clk: uart_clk {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
@ -96,6 +104,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0 0 0xffffffff>;
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
serial0: serial@54006800 {
|
||||
compatible = "socionext,uniphier-uart";
|
||||
@ -219,6 +228,8 @@
|
||||
reg = <0x58c00000 0x400>;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_system_bus>;
|
||||
};
|
||||
|
||||
smpctrl@59800000 {
|
||||
@ -243,9 +254,20 @@
|
||||
bus-width = <4>;
|
||||
};
|
||||
|
||||
pinctrl: pinctrl@5f801000 {
|
||||
compatible = "socionext,ph1-ld20-pinctrl", "syscon";
|
||||
reg = <0x5f801000 0xe00>;
|
||||
soc-glue@5f800000 {
|
||||
compatible = "simple-mfd", "syscon";
|
||||
reg = <0x5f800000 0x2000>;
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
pinctrl: pinctrl {
|
||||
compatible = "socionext,uniphier-ld20-pinctrl";
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
aidet@5fc20000 {
|
||||
compatible = "simple-mfd", "syscon";
|
||||
reg = <0x5fc20000 0x200>;
|
||||
};
|
||||
|
||||
gic: interrupt-controller@5fe00000 {
|
||||
|
||||
@ -69,20 +69,10 @@
|
||||
};
|
||||
|
||||
/* for U-Boot only */
|
||||
/ {
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&serial0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl_uart0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
@ -274,6 +274,11 @@
|
||||
pinctrl-0 = <&pinctrl_usb2>;
|
||||
clocks = <&mio 5>, <&mio 6>;
|
||||
};
|
||||
|
||||
aidet@61830000 {
|
||||
compatible = "simple-mfd", "syscon";
|
||||
reg = <0x61830000 0x200>;
|
||||
};
|
||||
};
|
||||
|
||||
&refclk {
|
||||
@ -310,7 +315,7 @@
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
compatible = "socionext,ph1-ld4-pinctrl", "syscon";
|
||||
compatible = "socionext,uniphier-ld4-pinctrl";
|
||||
};
|
||||
|
||||
&sysctrl {
|
||||
|
||||
@ -71,20 +71,10 @@
|
||||
};
|
||||
|
||||
/* for U-Boot only */
|
||||
/ {
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&serial0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl_uart0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
compatible = "socionext,ph1-ld6b";
|
||||
};
|
||||
|
||||
/* UART3 unavilable: the pads are not wired to the package balls */
|
||||
/* UART3 unavailable: the pads are not wired to the package balls */
|
||||
&serial3 {
|
||||
status = "disabled";
|
||||
};
|
||||
@ -27,5 +27,5 @@
|
||||
* which makes the pinctrl driver unshareable.
|
||||
*/
|
||||
&pinctrl {
|
||||
compatible = "socionext,ph1-ld6b-pinctrl", "syscon";
|
||||
compatible = "socionext,uniphier-ld6b-pinctrl";
|
||||
};
|
||||
|
||||
@ -90,20 +90,10 @@
|
||||
};
|
||||
|
||||
/* for U-Boot only */
|
||||
/ {
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&serial0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl_uart0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
@ -80,20 +80,10 @@
|
||||
};
|
||||
|
||||
/* for U-Boot only */
|
||||
/ {
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&serial0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl_uart0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
@ -85,12 +85,6 @@
|
||||
};
|
||||
|
||||
/* for U-Boot only */
|
||||
/ {
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&serial0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
@ -103,10 +97,6 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl_uart0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
@ -400,6 +400,11 @@
|
||||
clocks = <&mio 4>, <&mio 6>;
|
||||
};
|
||||
|
||||
aidet@5fc20000 {
|
||||
compatible = "simple-mfd", "syscon";
|
||||
reg = <0x5fc20000 0x200>;
|
||||
};
|
||||
|
||||
usb0: usb@65a00000 {
|
||||
compatible = "socionext,uniphier-xhci", "generic-xhci";
|
||||
status = "disabled";
|
||||
@ -452,7 +457,7 @@
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
compatible = "socionext,ph1-pro4-pinctrl", "syscon";
|
||||
compatible = "socionext,uniphier-pro4-pinctrl";
|
||||
};
|
||||
|
||||
&sysctrl {
|
||||
|
||||
@ -56,20 +56,10 @@
|
||||
};
|
||||
|
||||
/* for U-Boot only */
|
||||
/ {
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&serial1 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl_uart1 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
@ -355,6 +355,11 @@
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
aidet@5fc20000 {
|
||||
compatible = "simple-mfd", "syscon";
|
||||
reg = <0x5fc20000 0x200>;
|
||||
};
|
||||
|
||||
emmc: sdhc@68400000 {
|
||||
compatible = "socionext,uniphier-sdhc";
|
||||
status = "disabled";
|
||||
@ -431,7 +436,7 @@
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
compatible = "socionext,ph1-pro5-pinctrl", "syscon";
|
||||
compatible = "socionext,uniphier-pro5-pinctrl";
|
||||
};
|
||||
|
||||
&sysctrl {
|
||||
|
||||
@ -349,6 +349,11 @@
|
||||
clocks = <&mio 7>, <&mio 6>;
|
||||
};
|
||||
|
||||
aidet@f1830000 {
|
||||
compatible = "simple-mfd", "syscon";
|
||||
reg = <0xf1830000 0x200>;
|
||||
};
|
||||
|
||||
sysctrl: sysctrl@f1840000 {
|
||||
compatible = "socionext,ph1-sld3-sysctrl";
|
||||
reg = <0xf1840000 0x4000>;
|
||||
|
||||
@ -73,20 +73,10 @@
|
||||
};
|
||||
|
||||
/* for U-Boot only */
|
||||
/ {
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&serial0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl_uart0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
@ -274,6 +274,11 @@
|
||||
pinctrl-0 = <&pinctrl_usb2>;
|
||||
clocks = <&mio 5>, <&mio 6>;
|
||||
};
|
||||
|
||||
aidet@61830000 {
|
||||
compatible = "simple-mfd", "syscon";
|
||||
reg = <0x61830000 0x200>;
|
||||
};
|
||||
};
|
||||
|
||||
&refclk {
|
||||
@ -310,7 +315,7 @@
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
compatible = "socionext,ph1-sld8-pinctrl", "syscon";
|
||||
compatible = "socionext,uniphier-sld8-pinctrl";
|
||||
};
|
||||
|
||||
&sysctrl {
|
||||
|
||||
@ -47,6 +47,11 @@
|
||||
function = "nand";
|
||||
};
|
||||
|
||||
pinctrl_nand2cs: nand2cs_grp {
|
||||
groups = "nand", "nand_cs1";
|
||||
function = "nand";
|
||||
};
|
||||
|
||||
pinctrl_sd: sd_grp {
|
||||
groups = "sd";
|
||||
function = "sd";
|
||||
@ -67,6 +72,11 @@
|
||||
function = "sd1";
|
||||
};
|
||||
|
||||
pinctrl_system_bus: system_bus_grp {
|
||||
groups = "system_bus", "system_bus_cs1";
|
||||
function = "system_bus";
|
||||
};
|
||||
|
||||
pinctrl_uart0: uart0_grp {
|
||||
groups = "uart0";
|
||||
function = "uart0";
|
||||
|
||||
@ -65,12 +65,6 @@
|
||||
};
|
||||
|
||||
/* for U-Boot only */
|
||||
/ {
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&serial2 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
@ -83,10 +77,6 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl_uart2 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
@ -50,12 +50,6 @@
|
||||
};
|
||||
|
||||
/* for U-Boot only */
|
||||
/ {
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&serial2 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
@ -68,10 +62,6 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pinctrl_uart2 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
@ -383,6 +383,11 @@
|
||||
bus-width = <4>;
|
||||
};
|
||||
|
||||
aidet@5fc20000 {
|
||||
compatible = "simple-mfd", "syscon";
|
||||
reg = <0x5fc20000 0x200>;
|
||||
};
|
||||
|
||||
usb0: usb@65a00000 {
|
||||
compatible = "socionext,uniphier-xhci", "generic-xhci";
|
||||
status = "disabled";
|
||||
@ -435,7 +440,7 @@
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
compatible = "socionext,proxstream2-pinctrl", "syscon";
|
||||
compatible = "socionext,uniphier-pxs2-pinctrl";
|
||||
};
|
||||
|
||||
&sysctrl {
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
*/
|
||||
|
||||
&i2c0 {
|
||||
eeprom {
|
||||
eeprom@50 {
|
||||
compatible = "microchip,24lc128", "i2c-eeprom";
|
||||
reg = <0x50>;
|
||||
u-boot,i2c-offset-len = <2>;
|
||||
|
||||
@ -70,7 +70,7 @@ u32 spl_boot_device(void)
|
||||
|
||||
#if defined(CONFIG_SPL_MMC_SUPPORT)
|
||||
/* called from spl_mmc to see type of boot mode for storage (RAW or FAT) */
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
switch (spl_boot_device()) {
|
||||
/* for MMC return either RAW or FAT mode */
|
||||
|
||||
15
arch/arm/include/asm/arch-bcm235xx/boot0.h
Normal file
15
arch/arm/include/asm/arch-bcm235xx/boot0.h
Normal file
@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright 2016 Broadcom Corporation.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef __BOOT0_H
|
||||
#define __BOOT0_H
|
||||
|
||||
/* BOOT0 header information */
|
||||
#define ARM_SOC_BOOT0_HOOK \
|
||||
.word 0xbabeface; \
|
||||
.word _end - _start
|
||||
|
||||
#endif /* __BOOT0_H */
|
||||
@ -8,13 +8,13 @@
|
||||
#define _FSL_LAYERSCAPE_CPU_H
|
||||
|
||||
static struct cpu_type cpu_type_list[] = {
|
||||
CPU_TYPE_ENTRY(LS2080, LS2080, 8),
|
||||
CPU_TYPE_ENTRY(LS2085, LS2085, 8),
|
||||
CPU_TYPE_ENTRY(LS2045, LS2045, 4),
|
||||
CPU_TYPE_ENTRY(LS1043, LS1043, 4),
|
||||
CPU_TYPE_ENTRY(LS1023, LS1023, 2),
|
||||
CPU_TYPE_ENTRY(LS2040, LS2040, 4),
|
||||
CPU_TYPE_ENTRY(LS1012, LS1012, 1),
|
||||
CPU_TYPE_ENTRY(LS2080A, LS2080A, 8),
|
||||
CPU_TYPE_ENTRY(LS2085A, LS2085A, 8),
|
||||
CPU_TYPE_ENTRY(LS2045A, LS2045A, 4),
|
||||
CPU_TYPE_ENTRY(LS1043A, LS1043A, 4),
|
||||
CPU_TYPE_ENTRY(LS1023A, LS1023A, 2),
|
||||
CPU_TYPE_ENTRY(LS2040A, LS2040A, 4),
|
||||
CPU_TYPE_ENTRY(LS1012A, LS1012A, 1),
|
||||
};
|
||||
|
||||
#ifndef CONFIG_SYS_DCACHE_OFF
|
||||
|
||||
@ -41,13 +41,13 @@ struct cpu_type {
|
||||
{ .name = #n, .soc_ver = SVR_##v, .num_cores = (nc)}
|
||||
|
||||
#define SVR_WO_E 0xFFFFFE
|
||||
#define SVR_LS1012 0x870400
|
||||
#define SVR_LS1043 0x879200
|
||||
#define SVR_LS1023 0x879208
|
||||
#define SVR_LS2045 0x870120
|
||||
#define SVR_LS2080 0x870110
|
||||
#define SVR_LS2085 0x870100
|
||||
#define SVR_LS2040 0x870130
|
||||
#define SVR_LS1012A 0x870400
|
||||
#define SVR_LS1043A 0x879200
|
||||
#define SVR_LS1023A 0x879208
|
||||
#define SVR_LS2045A 0x870120
|
||||
#define SVR_LS2080A 0x870110
|
||||
#define SVR_LS2085A 0x870100
|
||||
#define SVR_LS2040A 0x870130
|
||||
|
||||
#define SVR_MAJ(svr) (((svr) >> 4) & 0xf)
|
||||
#define SVR_MIN(svr) (((svr) >> 0) & 0xf)
|
||||
|
||||
@ -18,6 +18,10 @@
|
||||
#define SUNXI_SRAM_D_BASE 0x00010000 /* 4 kiB */
|
||||
#define SUNXI_SRAM_B_BASE 0x00020000 /* 64 kiB (secure) */
|
||||
|
||||
#ifdef CONFIG_MACH_SUN8I_A83T
|
||||
#define SUNXI_CPUCFG_BASE 0x01700000
|
||||
#endif
|
||||
|
||||
#define SUNXI_SRAMC_BASE 0x01c00000
|
||||
#define SUNXI_DRAMC_BASE 0x01c01000
|
||||
#define SUNXI_DMA_BASE 0x01c02000
|
||||
@ -94,7 +98,10 @@
|
||||
|
||||
#define SUNXI_TP_BASE 0x01c25000
|
||||
#define SUNXI_PMU_BASE 0x01c25400
|
||||
#define SUN7I_CPUCFG_BASE 0x01c25c00
|
||||
|
||||
#ifdef CONFIG_MACH_SUN7I
|
||||
#define SUNXI_CPUCFG_BASE 0x01c25c00
|
||||
#endif
|
||||
|
||||
#define SUNXI_UART0_BASE 0x01c28000
|
||||
#define SUNXI_UART1_BASE 0x01c28400
|
||||
@ -136,6 +143,8 @@
|
||||
#define SUNXI_DRAM_PHY0_BASE 0x01c65000
|
||||
#define SUNXI_DRAM_PHY1_BASE 0x01c66000
|
||||
|
||||
#define SUNXI_GIC400_BASE 0x01c80000
|
||||
|
||||
/* module sram */
|
||||
#define SUNXI_SRAM_C_BASE 0x01d00000
|
||||
|
||||
@ -148,7 +157,11 @@
|
||||
|
||||
#define SUNXI_RTC_BASE 0x01f00000
|
||||
#define SUNXI_PRCM_BASE 0x01f01400
|
||||
#define SUN6I_CPUCFG_BASE 0x01f01c00
|
||||
|
||||
#if defined CONFIG_SUNXI_GEN_SUN6I && !defined CONFIG_MACH_SUN8I_A83T
|
||||
#define SUNXI_CPUCFG_BASE 0x01f01c00
|
||||
#endif
|
||||
|
||||
#define SUNXI_R_TWI_BASE 0x01f02400
|
||||
#define SUNXI_R_UART_BASE 0x01f02800
|
||||
#define SUNXI_R_PIO_BASE 0x01f02c00
|
||||
|
||||
@ -9,35 +9,36 @@
|
||||
#ifndef _SUNXI_CPUCFG_H
|
||||
#define _SUNXI_CPUCFG_H
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
struct sunxi_cpucfg_reg {
|
||||
struct __packed sunxi_cpucfg_cpu {
|
||||
u32 rst; /* base + 0x0 */
|
||||
u32 ctrl; /* base + 0x4 */
|
||||
u32 status; /* base + 0x8 */
|
||||
u8 res[0x34]; /* base + 0xc */
|
||||
};
|
||||
|
||||
struct __packed sunxi_cpucfg_reg {
|
||||
u8 res0[0x40]; /* 0x000 */
|
||||
u32 cpu0_rst; /* 0x040 */
|
||||
u32 cpu0_ctrl; /* 0x044 */
|
||||
u32 cpu0_status; /* 0x048 */
|
||||
u8 res1[0x34]; /* 0x04c */
|
||||
u32 cpu1_rst; /* 0x080 */
|
||||
u32 cpu1_ctrl; /* 0x084 */
|
||||
u32 cpu1_status; /* 0x088 */
|
||||
u8 res2[0x34]; /* 0x08c */
|
||||
u32 cpu2_rst; /* 0x0c0 */
|
||||
u32 cpu2_ctrl; /* 0x0c4 */
|
||||
u32 cpu2_status; /* 0x0c8 */
|
||||
u8 res3[0x34]; /* 0x0cc */
|
||||
u32 cpu3_rst; /* 0x100 */
|
||||
u32 cpu3_ctrl; /* 0x104 */
|
||||
u32 cpu3_status; /* 0x108 */
|
||||
u8 res4[0x78]; /* 0x10c */
|
||||
struct sunxi_cpucfg_cpu cpu[4]; /* 0x040 */
|
||||
u8 res1[0x44]; /* 0x140 */
|
||||
u32 gen_ctrl; /* 0x184 */
|
||||
u32 l2_status; /* 0x188 */
|
||||
u8 res5[0x4]; /* 0x18c */
|
||||
u8 res2[0x4]; /* 0x18c */
|
||||
u32 event_in; /* 0x190 */
|
||||
u8 res6[0xc]; /* 0x194 */
|
||||
u8 res3[0xc]; /* 0x194 */
|
||||
u32 super_standy_flag; /* 0x1a0 */
|
||||
u32 priv0; /* 0x1a4 */
|
||||
u32 priv1; /* 0x1a8 */
|
||||
u8 res7[0x54]; /* 0x1ac */
|
||||
u8 res4[0x4]; /* 0x1ac */
|
||||
u32 cpu1_pwr_clamp; /* 0x1b0 sun7i only */
|
||||
u32 cpu1_pwroff; /* 0x1b4 sun7i only */
|
||||
u8 res5[0x2c]; /* 0x1b8 */
|
||||
u32 dbg_ctrl1; /* 0x1e4 */
|
||||
u8 res6[0x18]; /* 0x1e8 */
|
||||
u32 idle_cnt0_low; /* 0x200 */
|
||||
u32 idle_cnt0_high; /* 0x204 */
|
||||
u32 idle_cnt0_ctrl; /* 0x208 */
|
||||
@ -197,7 +197,9 @@
|
||||
#define PRCM_CPU3_PWR_CLAMP_MASK PRCM_CPU3_PWR_CLAMP(0xff)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
struct sunxi_prcm_reg {
|
||||
#include <linux/compiler.h>
|
||||
|
||||
struct __packed sunxi_prcm_reg {
|
||||
u32 cpus_cfg; /* 0x000 */
|
||||
u8 res0[0x8]; /* 0x004 */
|
||||
u32 apb0_ratio; /* 0x00c */
|
||||
@ -225,10 +227,8 @@ struct sunxi_prcm_reg {
|
||||
u32 gpu_pwroff; /* 0x118 */
|
||||
u8 res9[0x4]; /* 0x11c */
|
||||
u32 vdd_pwr_reset; /* 0x120 */
|
||||
u8 res10[0x20]; /* 0x124 */
|
||||
u32 cpu1_pwr_clamp; /* 0x144 */
|
||||
u32 cpu2_pwr_clamp; /* 0x148 */
|
||||
u32 cpu3_pwr_clamp; /* 0x14c */
|
||||
u8 res10[0x1c]; /* 0x124 */
|
||||
u32 cpu_pwr_clamp[4]; /* 0x140 but first one is actually unused */
|
||||
u8 res11[0x30]; /* 0x150 */
|
||||
u32 dram_pwr; /* 0x180 */
|
||||
u8 res12[0xc]; /* 0x184 */
|
||||
|
||||
@ -48,6 +48,13 @@
|
||||
#define ARM_PSCI_0_2_FN_SYSTEM_RESET ARM_PSCI_0_2_FN(9)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#include <asm/types.h>
|
||||
|
||||
void psci_cpu_entry(void);
|
||||
u32 psci_get_cpu_id(void);
|
||||
u32 psci_get_cpu_stack_top(int cpu);
|
||||
void psci_cpu_off_common(void);
|
||||
|
||||
int psci_update_dt(void *fdt);
|
||||
void psci_board_init(void);
|
||||
#endif /* ! __ASSEMBLY__ */
|
||||
|
||||
@ -42,11 +42,14 @@ int arch_fixup_fdt(void *blob)
|
||||
}
|
||||
|
||||
ret = fdt_fixup_memory_banks(blob, start, size, CONFIG_NR_DRAM_BANKS);
|
||||
#ifdef CONFIG_ARMV7_NONSEC
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
#ifdef CONFIG_ARMV7_NONSEC
|
||||
ret = psci_update_dt(blob);
|
||||
if (ret)
|
||||
return ret;
|
||||
#endif
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -122,16 +122,28 @@ config TARGET_CORVUS
|
||||
bool "Support corvus"
|
||||
select CPU_ARM926EJS
|
||||
select SUPPORT_SPL
|
||||
select DM
|
||||
select DM_SERIAL
|
||||
select DM_GPIO
|
||||
select DM_ETH
|
||||
|
||||
config TARGET_TAURUS
|
||||
bool "Support taurus"
|
||||
select CPU_ARM926EJS
|
||||
select SUPPORT_SPL
|
||||
select DM
|
||||
select DM_SERIAL
|
||||
select DM_GPIO
|
||||
select DM_ETH
|
||||
|
||||
config TARGET_SMARTWEB
|
||||
bool "Support smartweb"
|
||||
select CPU_ARM926EJS
|
||||
select SUPPORT_SPL
|
||||
select DM
|
||||
select DM_SERIAL
|
||||
select DM_GPIO
|
||||
select DM_ETH
|
||||
|
||||
config TARGET_VINCO
|
||||
bool "Support VINCO"
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
#define AT91_ASM_MATRIX_CSA0 (ATMEL_BASE_MATRIX + 0x30)
|
||||
#elif defined(CONFIG_AT91SAM9263)
|
||||
#define AT91_ASM_MATRIX_CSA0 (ATMEL_BASE_MATRIX + 0x120)
|
||||
#elif defined(CONFIG_AT91SAM9G45)
|
||||
#elif defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
|
||||
#define AT91_ASM_MATRIX_CSA0 (ATMEL_BASE_MATRIX + 0x128)
|
||||
#else
|
||||
#error AT91_ASM_MATRIX_CSA0 is not definied for current CPU
|
||||
@ -33,7 +33,7 @@
|
||||
#elif defined(CONFIG_AT91SAM9263)
|
||||
#define AT91_MATRIX_MASTERS 9
|
||||
#define AT91_MATRIX_SLAVES 7
|
||||
#elif defined(CONFIG_AT91SAM9G45)
|
||||
#elif defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
|
||||
#define AT91_MATRIX_MASTERS 11
|
||||
#define AT91_MATRIX_SLAVES 8
|
||||
#else
|
||||
@ -63,7 +63,7 @@ typedef struct at91_matrix {
|
||||
u32 reserve3[32 - (2 * AT91_MATRIX_SLAVES)];
|
||||
u32 mrcr; /* 0x100 Master Remap Control */
|
||||
u32 reserve4[3];
|
||||
#if defined(CONFIG_AT91SAM9G45)
|
||||
#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
|
||||
u32 ccr[52]; /* 0x110 - 0x1E0 Chip Configuration */
|
||||
u32 womr; /* 0x1E4 Write Protect Mode */
|
||||
u32 wpsr; /* 0x1E8 Write Protect Status */
|
||||
@ -106,14 +106,14 @@ typedef struct at91_matrix {
|
||||
|
||||
/* Undefined Length Burst Type */
|
||||
#if defined(CONFIG_AT91SAM9260) || defined(CONFIG_AT91SAM9263) || \
|
||||
defined(CONFIG_AT91SAM9G45)
|
||||
defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
|
||||
#define AT91_MATRIX_MCFG_ULBT_INFINITE 0x00000000
|
||||
#define AT91_MATRIX_MCFG_ULBT_SINGLE 0x00000001
|
||||
#define AT91_MATRIX_MCFG_ULBT_FOUR 0x00000002
|
||||
#define AT91_MATRIX_MCFG_ULBT_EIGHT 0x00000003
|
||||
#define AT91_MATRIX_MCFG_ULBT_SIXTEEN 0x00000004
|
||||
#endif
|
||||
#if defined(CONFIG_AT91SAM9G45)
|
||||
#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
|
||||
#define AT91_MATRIX_MCFG_ULBT_THIRTYTWO 0x00000005
|
||||
#define AT91_MATRIX_MCFG_ULBT_SIXTYFOUR 0x00000006
|
||||
#define AT91_MATRIX_MCFG_ULBT_128 0x00000007
|
||||
@ -125,14 +125,15 @@ typedef struct at91_matrix {
|
||||
#define AT91_MATRIX_SCFG_DEFMSTR_TYPE_FIXED 0x00020000
|
||||
|
||||
/* Fixed Index of Default Master */
|
||||
#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9263)
|
||||
#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9263) || \
|
||||
defined(CONFIG_AT91SAM9M10G45)
|
||||
#define AT91_MATRIX_SCFG_FIXED_DEFMSTR(x) ((x & 0xf) << 18)
|
||||
#elif defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9260)
|
||||
#define AT91_MATRIX_SCFG_FIXED_DEFMSTR(x) ((x & 7) << 18)
|
||||
#endif
|
||||
|
||||
/* Maximum Number of Allowed Cycles for a Burst */
|
||||
#if defined(CONFIG_AT91SAM9G45)
|
||||
#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
|
||||
#define AT91_MATRIX_SCFG_SLOT_CYCLE(x) ((x & 0x1ff) << 0)
|
||||
#elif defined(CONFIG_AT91SAM9260) || defined(CONFIG_AT91SAM9261) || \
|
||||
defined(CONFIG_AT91SAM9263)
|
||||
@ -147,13 +148,14 @@ typedef struct at91_matrix {
|
||||
|
||||
/* Master Remap Control Register */
|
||||
#if defined(CONFIG_AT91SAM9260) || defined(CONFIG_AT91SAM9263) || \
|
||||
defined(CONFIG_AT91SAM9G45)
|
||||
defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
|
||||
/* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
|
||||
#define AT91_MATRIX_MRCR_RCB0 (1 << 0)
|
||||
/* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
|
||||
#define AT91_MATRIX_MRCR_RCB1 (1 << 1)
|
||||
#endif
|
||||
#if defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G45)
|
||||
#if defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G45) || \
|
||||
defined(CONFIG_AT91SAM9M10G45)
|
||||
#define AT91_MATRIX_MRCR_RCB2 0x00000004
|
||||
#define AT91_MATRIX_MRCR_RCB3 0x00000008
|
||||
#define AT91_MATRIX_MRCR_RCB4 0x00000010
|
||||
@ -162,14 +164,14 @@ typedef struct at91_matrix {
|
||||
#define AT91_MATRIX_MRCR_RCB7 0x00000080
|
||||
#define AT91_MATRIX_MRCR_RCB8 0x00000100
|
||||
#endif
|
||||
#if defined(CONFIG_AT91SAM9G45)
|
||||
#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
|
||||
#define AT91_MATRIX_MRCR_RCB9 0x00000200
|
||||
#define AT91_MATRIX_MRCR_RCB10 0x00000400
|
||||
#define AT91_MATRIX_MRCR_RCB11 0x00000800
|
||||
#endif
|
||||
|
||||
/* TCM Configuration Register */
|
||||
#if defined(CONFIG_AT91SAM9G45)
|
||||
#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
|
||||
/* Size of ITCM enabled memory block */
|
||||
#define AT91_MATRIX_TCMR_ITCM_0 0x00000000
|
||||
#define AT91_MATRIX_TCMR_ITCM_32 0x00000040
|
||||
@ -204,7 +206,7 @@ typedef struct at91_matrix {
|
||||
#define AT91_MATRIX_TCMR_DTCM_64 0x00000070
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_AT91SAM9G45)
|
||||
#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
|
||||
/* Video Mode Configuration Register */
|
||||
#define AT91C_MATRIX_VDEC_SEL_OFF 0x00000000
|
||||
#define AT91C_MATRIX_VDEC_SEL_ON 0x00000001
|
||||
|
||||
@ -75,9 +75,9 @@ u32 spl_boot_device(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
switch (spl_boot_device()) {
|
||||
switch (boot_device) {
|
||||
#ifdef CONFIG_SYS_USE_MMC
|
||||
case BOOT_DEVICE_MMC1:
|
||||
case BOOT_DEVICE_MMC2:
|
||||
|
||||
@ -45,7 +45,7 @@ void spl_board_init(void)
|
||||
preloader_console_init();
|
||||
}
|
||||
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
return MMCSD_MODE_RAW;
|
||||
}
|
||||
|
||||
@ -26,6 +26,6 @@ config SYS_SOC
|
||||
config SYS_MALLOC_F_LEN
|
||||
default 0x1000
|
||||
|
||||
source "board/hardkernel/odroid-c2/Kconfig"
|
||||
source "board/amlogic/odroid-c2/Kconfig"
|
||||
|
||||
endif
|
||||
|
||||
@ -57,7 +57,7 @@ u32 spl_boot_device(void)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPL_MMC_SUPPORT
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
return MMCSD_MODE_RAW;
|
||||
}
|
||||
|
||||
@ -66,7 +66,7 @@ fallback:
|
||||
return BOOT_DEVICE_MMC1;
|
||||
}
|
||||
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
return MMCSD_MODE_RAW;
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ u32 spl_boot_device(void)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPL_MMC_SUPPORT
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
#if defined(CONFIG_SPL_FAT_SUPPORT) || defined(CONFIG_SPL_EXT_SUPPORT)
|
||||
return MMCSD_MODE_FS;
|
||||
|
||||
@ -257,7 +257,7 @@ void spl_board_announce_boot_device(void)
|
||||
}
|
||||
|
||||
/* No confirmation data available in SPL yet. Hardcode bootmode */
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
return MMCSD_MODE_RAW;
|
||||
}
|
||||
|
||||
@ -29,7 +29,7 @@ ENTRY(lowlevel_init)
|
||||
bl debug_ll_init
|
||||
#endif
|
||||
|
||||
bl setup_init_ram @ RAM area for stack and page talbe
|
||||
bl setup_init_ram @ RAM area for stack and page table
|
||||
|
||||
/*
|
||||
* Now we are using the page table embedded in the Boot ROM.
|
||||
|
||||
@ -4,10 +4,47 @@
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <libfdt.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "init.h"
|
||||
#include "micro-support-card.h"
|
||||
#include "soc-info.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
static void uniphier_setup_xirq(void)
|
||||
{
|
||||
const void *fdt = gd->fdt_blob;
|
||||
int soc_node, aidet_node;
|
||||
const u32 *val;
|
||||
unsigned long aidet_base;
|
||||
u32 tmp;
|
||||
|
||||
soc_node = fdt_path_offset(fdt, "/soc");
|
||||
if (soc_node < 0)
|
||||
return;
|
||||
|
||||
aidet_node = fdt_subnode_offset_namelen(fdt, soc_node, "aidet", 5);
|
||||
if (aidet_node < 0)
|
||||
return;
|
||||
|
||||
val = fdt_getprop(fdt, aidet_node, "reg", NULL);
|
||||
if (!val)
|
||||
return;
|
||||
|
||||
aidet_base = fdt32_to_cpu(*val);
|
||||
|
||||
tmp = readl(aidet_base + 8); /* AIDET DETCONFR2 */
|
||||
tmp |= 0x00ff0000; /* Set XIRQ0-7 low active */
|
||||
writel(tmp, aidet_base + 8);
|
||||
|
||||
tmp = readl(0x55000090); /* IRQCTL */
|
||||
tmp |= 0x000000ff;
|
||||
writel(tmp, 0x55000090);
|
||||
}
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
led_puts("U0");
|
||||
@ -81,6 +118,8 @@ int board_early_init_f(void)
|
||||
break;
|
||||
}
|
||||
|
||||
uniphier_setup_xirq();
|
||||
|
||||
led_puts("U2");
|
||||
|
||||
return 0;
|
||||
|
||||
@ -77,7 +77,7 @@ u32 spl_boot_device(void)
|
||||
return mode;
|
||||
}
|
||||
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
struct mmc *mmc;
|
||||
|
||||
|
||||
@ -43,4 +43,9 @@ void uniphier_ld20_pin_init(void)
|
||||
sg_set_pinsel(53, 0, 8, 4); /* USB3OD -> USB3OD */
|
||||
sg_set_iectrl_range(46, 53);
|
||||
#endif
|
||||
|
||||
sg_set_pinsel(149, 14, 8, 4); /* XIRQ0 -> XIRQ0 */
|
||||
sg_set_iectrl(149);
|
||||
sg_set_pinsel(153, 14, 8, 4); /* XIRQ4 -> XIRQ4 */
|
||||
sg_set_iectrl(153);
|
||||
}
|
||||
|
||||
@ -69,7 +69,7 @@ u32 spl_boot_device(void)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPL_MMC_SUPPORT
|
||||
u32 spl_boot_mode(void)
|
||||
u32 spl_boot_mode(const u32 boot_device)
|
||||
{
|
||||
return MMCSD_MODE_FS;
|
||||
}
|
||||
|
||||
@ -18,4 +18,3 @@ obj-y += coreboot.o
|
||||
obj-y += tables.o
|
||||
obj-y += sdram.o
|
||||
obj-y += timestamp.o
|
||||
obj-$(CONFIG_PCI) += pci.o
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2011 The Chromium OS Authors.
|
||||
* (C) Copyright 2008,2009
|
||||
* Graeme Russ, <graeme.russ@gmail.com>
|
||||
*
|
||||
* (C) Copyright 2002
|
||||
* Daniel Engström, Omicron Ceti AB, <daniel@omicron.se>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <pci.h>
|
||||
|
||||
static const struct udevice_id generic_pch_ids[] = {
|
||||
{ .compatible = "intel,pch7" },
|
||||
{ .compatible = "intel,pch9" },
|
||||
{ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(generic_pch_drv) = {
|
||||
.name = "pch",
|
||||
.id = UCLASS_PCH,
|
||||
.of_match = generic_pch_ids,
|
||||
};
|
||||
@ -1,7 +1,7 @@
|
||||
if TARGET_KWB
|
||||
if TARGET_BRPPT1
|
||||
|
||||
config SYS_BOARD
|
||||
default "kwb"
|
||||
default "brppt1"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "BuR"
|
||||
@ -10,6 +10,6 @@ config SYS_SOC
|
||||
default "am33xx"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "kwb"
|
||||
default "brppt1"
|
||||
|
||||
endif
|
||||
8
board/BuR/brppt1/MAINTAINERS
Normal file
8
board/BuR/brppt1/MAINTAINERS
Normal file
@ -0,0 +1,8 @@
|
||||
BRPPT1 BOARD
|
||||
M: Hannes Schmelzer <hannes.schmelzer@br-automation.com>
|
||||
S: Maintained
|
||||
F: board/BuR/brppt1/
|
||||
F: include/configs/brppt1.h
|
||||
F: configs/brppt1_mmc_defconfig
|
||||
F: configs/brppt1_nand_defconfig
|
||||
F: configs/brppt1_spi_defconfig
|
||||
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* board.c
|
||||
*
|
||||
* Board functions for B&R LEIT Board
|
||||
* Board functions for B&R BRPPT1
|
||||
*
|
||||
* Copyright (C) 2013 Hannes Schmelzer <oe5hpm@oevsv.at>
|
||||
* Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
|
||||
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* mux.c
|
||||
*
|
||||
* Pinmux Setting for B&R LEIT Board(s)
|
||||
* Pinmux Setting for B&R BRPPT1 Board(s)
|
||||
*
|
||||
* Copyright (C) 2013 Hannes Schmelzer <oe5hpm@oevsv.at>
|
||||
* Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
|
||||
@ -1,7 +1,7 @@
|
||||
if TARGET_TSERIES
|
||||
if TARGET_BRXRE1
|
||||
|
||||
config SYS_BOARD
|
||||
default "tseries"
|
||||
default "brxre1"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "BuR"
|
||||
@ -10,6 +10,6 @@ config SYS_SOC
|
||||
default "am33xx"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "tseries"
|
||||
default "brxre1"
|
||||
|
||||
endif
|
||||
6
board/BuR/brxre1/MAINTAINERS
Normal file
6
board/BuR/brxre1/MAINTAINERS
Normal file
@ -0,0 +1,6 @@
|
||||
BRXRE1 BOARD
|
||||
M: Hannes Schmelzer <hannes.schmelzer@br-automation.com>
|
||||
S: Maintained
|
||||
F: board/BuR/brxre1/
|
||||
F: include/configs/brxre1.h
|
||||
F: configs/brxre1_defconfig
|
||||
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* board.c
|
||||
*
|
||||
* Board functions for B&R KWB Board
|
||||
* Board functions for B&R BRXRE1 Board
|
||||
*
|
||||
* Copyright (C) 2013 Hannes Schmelzer <oe5hpm@oevsv.at>
|
||||
* Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
|
||||
@ -101,7 +101,7 @@ void am33xx_spl_board_init(void)
|
||||
*/
|
||||
u32 *const clk_domains[] = { 0 };
|
||||
|
||||
u32 *const clk_modules_kwbspecific[] = {
|
||||
u32 *const clk_modules_xre1specific[] = {
|
||||
&cmwkup->wkup_adctscctrl,
|
||||
&cmper->spi1clkctrl,
|
||||
&cmper->dcan0clkctrl,
|
||||
@ -113,7 +113,7 @@ void am33xx_spl_board_init(void)
|
||||
&cmper->lcdcclkstctrl,
|
||||
0
|
||||
};
|
||||
do_enable_clocks(clk_domains, clk_modules_kwbspecific, 1);
|
||||
do_enable_clocks(clk_domains, clk_modules_xre1specific, 1);
|
||||
/* setup LCD-Pixel Clock */
|
||||
writel(0x2, CM_DPLL + 0x34);
|
||||
/* power-OFF LCD-Display */
|
||||
@ -1,6 +0,0 @@
|
||||
KWB BOARD
|
||||
M: Hannes Schmelzer <hannes.schmelzer@br-automation.com>
|
||||
S: Maintained
|
||||
F: board/BuR/kwb/
|
||||
F: include/configs/kwb.h
|
||||
F: configs/kwb_defconfig
|
||||
@ -1,8 +0,0 @@
|
||||
TSERIES BOARD
|
||||
M: Hannes Schmelzer <hannes.schmelzer@br-automation.com>
|
||||
S: Maintained
|
||||
F: board/BuR/tseries/
|
||||
F: include/configs/tseries.h
|
||||
F: configs/tseries_mmc_defconfig
|
||||
F: configs/tseries_nand_defconfig
|
||||
F: configs/tseries_spi_defconfig
|
||||
@ -4,7 +4,7 @@ config SYS_BOARD
|
||||
default "odroid-c2"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "hardkernel"
|
||||
default "amlogic"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "odroid-c2"
|
||||
@ -1,6 +1,6 @@
|
||||
ODROID-C2
|
||||
M: Beniamino Galvani <b.galvani@gmail.com>
|
||||
S: Maintained
|
||||
F: board/hardkernel/odroid-c2/
|
||||
F: board/amlogic/odroid-c2/
|
||||
F: include/configs/odroid-c2.h
|
||||
F: configs/odroid-c2_defconfig
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user