hikey: support BL1

Initialize regulators, pins and eMMC in BL1. Only SRAM could be used in BL1.
So BL2 will be loaded from eMMC into SRAM later.

Change-Id: I8e7ef82ffa29a3c647c9d2d2981e8759ee85d833
Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
Signed-off-by: Dan Handley <dan.handley@arm.com>
This commit is contained in:
Haojian Zhuang 2017-05-24 08:45:05 +08:00 committed by Dan Handley
parent 2ab2e57a64
commit 08b167e93f
16 changed files with 2713 additions and 0 deletions

View File

@ -0,0 +1,113 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch_helpers.h>
#include <arm_gic.h>
#include <assert.h>
#include <bl_common.h>
#include <debug.h>
#include <mmio.h>
#include <platform.h>
#include <platform_def.h>
#include <xlat_tables.h>
#include "../hikey_def.h"
#define MAP_DDR MAP_REGION_FLAT(DDR_BASE, \
DDR_SIZE, \
MT_DEVICE | MT_RW | MT_NS)
#define MAP_DEVICE MAP_REGION_FLAT(DEVICE_BASE, \
DEVICE_SIZE, \
MT_DEVICE | MT_RW | MT_SECURE)
#define MAP_ROM_PARAM MAP_REGION_FLAT(XG2RAM0_BASE, \
BL1_XG2RAM0_OFFSET, \
MT_DEVICE | MT_RO | MT_SECURE)
#define MAP_SRAM MAP_REGION_FLAT(SRAM_BASE, \
SRAM_SIZE, \
MT_DEVICE | MT_RW | MT_SECURE)
/*
* BL1 needs to access the areas of MMC_SRAM.
* BL1 loads BL2 from eMMC into SRAM before DDR initialized.
*/
#define MAP_MMC_SRAM MAP_REGION_FLAT(HIKEY_BL1_MMC_DESC_BASE, \
HIKEY_BL1_MMC_DESC_SIZE + \
HIKEY_BL1_MMC_DATA_SIZE, \
MT_DEVICE | MT_RW | MT_SECURE)
/*
* Table of regions for different BL stages to map using the MMU.
* This doesn't include Trusted RAM as the 'mem_layout' argument passed to
* hikey_init_mmu_elx() will give the available subset of that,
*/
#if IMAGE_BL1
static const mmap_region_t hikey_mmap[] = {
MAP_DEVICE,
MAP_ROM_PARAM,
MAP_MMC_SRAM,
{0}
};
#endif
#if IMAGE_BL2
static const mmap_region_t hikey_mmap[] = {
MAP_DDR,
MAP_DEVICE,
{0}
};
#endif
#if IMAGE_BL31
static const mmap_region_t hikey_mmap[] = {
MAP_DEVICE,
MAP_SRAM,
{0}
};
#endif
/*
* Macro generating the code for the function setting up the pagetables as per
* the platform memory map & initialize the mmu, for the given exception level
*/
#define HIKEY_CONFIGURE_MMU_EL(_el) \
void hikey_init_mmu_el##_el(unsigned long total_base, \
unsigned long total_size, \
unsigned long ro_start, \
unsigned long ro_limit, \
unsigned long coh_start, \
unsigned long coh_limit) \
{ \
mmap_add_region(total_base, total_base, \
total_size, \
MT_MEMORY | MT_RW | MT_SECURE); \
mmap_add_region(ro_start, ro_start, \
ro_limit - ro_start, \
MT_MEMORY | MT_RO | MT_SECURE); \
mmap_add_region(coh_start, coh_start, \
coh_limit - coh_start, \
MT_DEVICE | MT_RW | MT_SECURE); \
mmap_add(hikey_mmap); \
init_xlat_tables(); \
\
enable_mmu_el##_el(0); \
}
/* Define EL1 and EL3 variants of the function initialising the MMU */
HIKEY_CONFIGURE_MMU_EL(1)
HIKEY_CONFIGURE_MMU_EL(3)
unsigned long plat_get_ns_image_entrypoint(void)
{
return HIKEY_NS_IMAGE_OFFSET;
}
unsigned int plat_get_syscnt_freq2(void)
{
return 1200000;
}

View File

@ -0,0 +1,145 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch.h>
#include <asm_macros.S>
#include "../hikey_def.h"
.globl plat_my_core_pos
.globl platform_mem_init
.globl plat_crash_console_init
.globl plat_crash_console_putc
.globl plat_report_exception
.globl plat_reset_handler
func plat_my_core_pos
mrs x0, mpidr_el1
and x1, x0, #MPIDR_CPU_MASK
and x0, x0, #MPIDR_CLUSTER_MASK
add x0, x1, x0, LSR #6
ret
endfunc plat_my_core_pos
/* -----------------------------------------------------
* void platform_mem_init(void);
*
* We don't need to carry out any memory initialization
* on HIKEY. The Secure RAM is accessible straight away.
* -----------------------------------------------------
*/
func platform_mem_init
ret
endfunc platform_mem_init
/* ---------------------------------------------
* int plat_crash_console_init(void)
* Function to initialize the crash console
* without a C Runtime to print crash report.
* Clobber list : x0, x1, x2
* ---------------------------------------------
*/
func plat_crash_console_init
mov_imm x0, CRASH_CONSOLE_BASE
mov_imm x1, PL011_UART_CLK_IN_HZ
mov_imm x2, PL011_BAUDRATE
b console_core_init
endfunc plat_crash_console_init
/* ---------------------------------------------
* int plat_crash_console_putc(int c)
* Function to print a character on the crash
* console without a C Runtime.
* Clobber list : x1, x2
* ---------------------------------------------
*/
func plat_crash_console_putc
mov_imm x1, CRASH_CONSOLE_BASE
b console_core_putc
endfunc plat_crash_console_putc
/* ---------------------------------------------
* void plat_report_exception(unsigned int type)
* Function to report an unhandled exception
* with platform-specific means.
* On HIKEY platform, it updates the LEDs
* to indicate where we are
* ---------------------------------------------
*/
func plat_report_exception
mov x8, x30
/* Turn on LED according to x0 (0 -- f) */
ldr x2, =0xf7020000
and x1, x0, #1
str w1, [x2, #4]
and x1, x0, #2
str w1, [x2, #8]
and x1, x0, #4
str w1, [x2, #16]
and x1, x0, #8
str w1, [x2, #32]
mrs x2, currentel
and x2, x2, #0xc0
/* Check EL1 */
cmp x2, #0x04
beq plat_report_el1
adr x4, plat_err_str
bl asm_print_str
adr x4, esr_el3_str
bl asm_print_str
mrs x4, esr_el3
bl asm_print_hex
adr x4, elr_el3_str
bl asm_print_str
mrs x4, elr_el3
bl asm_print_hex
b plat_report_end
plat_report_el1:
adr x4, plat_err_str
bl asm_print_str
adr x4, esr_el1_str
bl asm_print_str
mrs x4, esr_el1
bl asm_print_hex
adr x4, elr_el1_str
bl asm_print_str
mrs x4, elr_el1
bl asm_print_hex
plat_report_end:
mov x30, x8
ret
endfunc plat_report_exception
/* -----------------------------------------------------
* void plat_reset_handler(void);
* -----------------------------------------------------
*/
func plat_reset_handler
ret
endfunc plat_reset_handler
.section .rodata.rev_err_str, "aS"
plat_err_str:
.asciz "\nPlatform exception reporting:"
esr_el3_str:
.asciz "\nESR_EL3: "
elr_el3_str:
.asciz "\nELR_EL3: "
esr_el1_str:
.asciz "\nESR_EL1: "
elr_el1_str:
.asciz "\nELR_EL1: "

View File

@ -0,0 +1,551 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch_helpers.h>
#include <assert.h>
#include <bl_common.h>
#include <console.h>
#include <debug.h>
#include <dw_mmc.h>
#include <emmc.h>
#include <errno.h>
#include <gpio.h>
#include <hi6220.h>
#include <hi6553.h>
#include <mmio.h>
#include <pl061_gpio.h>
#include <platform.h>
#include <platform_def.h>
#include <sp804_delay_timer.h>
#include <string.h>
#include <tbbr/tbbr_img_desc.h>
#include "../../bl1/bl1_private.h"
#include "hikey_def.h"
#include "hikey_private.h"
/*
* Declarations of linker defined symbols which will help us find the layout
* of trusted RAM
*/
extern unsigned long __COHERENT_RAM_START__;
extern unsigned long __COHERENT_RAM_END__;
/*
* The next 2 constants identify the extents of the coherent memory region.
* These addresses are used by the MMU setup code and therefore they must be
* page-aligned. It is the responsibility of the linker script to ensure that
* __COHERENT_RAM_START__ and __COHERENT_RAM_END__ linker symbols refer to
* page-aligned addresses.
*/
#define BL1_COHERENT_RAM_BASE (unsigned long)(&__COHERENT_RAM_START__)
#define BL1_COHERENT_RAM_LIMIT (unsigned long)(&__COHERENT_RAM_END__)
/* Data structure which holds the extents of the trusted RAM for BL1 */
static meminfo_t bl1_tzram_layout;
enum {
BOOT_NORMAL = 0,
BOOT_USB_DOWNLOAD,
BOOT_UART_DOWNLOAD,
};
meminfo_t *bl1_plat_sec_mem_layout(void)
{
return &bl1_tzram_layout;
}
/*
* Perform any BL1 specific platform actions.
*/
void bl1_early_platform_setup(void)
{
const size_t bl1_size = BL1_RAM_LIMIT - BL1_RAM_BASE;
/* Initialize the console to provide early debug support */
console_init(CONSOLE_BASE, PL011_UART_CLK_IN_HZ, PL011_BAUDRATE);
/* Allow BL1 to see the whole Trusted RAM */
bl1_tzram_layout.total_base = BL1_RW_BASE;
bl1_tzram_layout.total_size = BL1_RW_SIZE;
/* Calculate how much RAM BL1 is using and how much remains free */
bl1_tzram_layout.free_base = BL1_RW_BASE;
bl1_tzram_layout.free_size = BL1_RW_SIZE;
reserve_mem(&bl1_tzram_layout.free_base,
&bl1_tzram_layout.free_size,
BL1_RAM_BASE,
bl1_size);
INFO("BL1: 0x%lx - 0x%lx [size = %lu]\n", BL1_RAM_BASE, BL1_RAM_LIMIT,
bl1_size);
}
/*
* Perform the very early platform specific architecture setup here. At the
* moment this only does basic initialization. Later architectural setup
* (bl1_arch_setup()) does not do anything platform specific.
*/
void bl1_plat_arch_setup(void)
{
hikey_init_mmu_el3(bl1_tzram_layout.total_base,
bl1_tzram_layout.total_size,
BL1_RO_BASE,
BL1_RO_LIMIT,
BL1_COHERENT_RAM_BASE,
BL1_COHERENT_RAM_LIMIT);
}
static void hikey_sp804_init(void)
{
uint32_t data;
/* select the clock of dual timer0 */
data = mmio_read_32(AO_SC_TIMER_EN0);
while (data & 3) {
data &= ~3;
data |= 3 << 16;
mmio_write_32(AO_SC_TIMER_EN0, data);
data = mmio_read_32(AO_SC_TIMER_EN0);
}
/* enable the pclk of dual timer0 */
data = mmio_read_32(AO_SC_PERIPH_CLKSTAT4);
while (!(data & PCLK_TIMER1) || !(data & PCLK_TIMER0)) {
mmio_write_32(AO_SC_PERIPH_CLKEN4, PCLK_TIMER1 | PCLK_TIMER0);
data = mmio_read_32(AO_SC_PERIPH_CLKSTAT4);
}
/* reset dual timer0 */
data = mmio_read_32(AO_SC_PERIPH_RSTSTAT4);
mmio_write_32(AO_SC_PERIPH_RSTEN4, PCLK_TIMER1 | PCLK_TIMER0);
do {
data = mmio_read_32(AO_SC_PERIPH_RSTSTAT4);
} while (!(data & PCLK_TIMER1) || !(data & PCLK_TIMER0));
/* unreset dual timer0 */
mmio_write_32(AO_SC_PERIPH_RSTDIS4, PCLK_TIMER1 | PCLK_TIMER0);
do {
data = mmio_read_32(AO_SC_PERIPH_RSTSTAT4);
} while ((data & PCLK_TIMER1) || (data & PCLK_TIMER0));
sp804_timer_init(SP804_TIMER0_BASE, 10, 192);
}
static void hikey_gpio_init(void)
{
pl061_gpio_init();
pl061_gpio_register(GPIO0_BASE, 0);
pl061_gpio_register(GPIO1_BASE, 1);
pl061_gpio_register(GPIO2_BASE, 2);
pl061_gpio_register(GPIO3_BASE, 3);
pl061_gpio_register(GPIO4_BASE, 4);
pl061_gpio_register(GPIO5_BASE, 5);
pl061_gpio_register(GPIO6_BASE, 6);
pl061_gpio_register(GPIO7_BASE, 7);
pl061_gpio_register(GPIO8_BASE, 8);
pl061_gpio_register(GPIO9_BASE, 9);
pl061_gpio_register(GPIO10_BASE, 10);
pl061_gpio_register(GPIO11_BASE, 11);
pl061_gpio_register(GPIO12_BASE, 12);
pl061_gpio_register(GPIO13_BASE, 13);
pl061_gpio_register(GPIO14_BASE, 14);
pl061_gpio_register(GPIO15_BASE, 15);
pl061_gpio_register(GPIO16_BASE, 16);
pl061_gpio_register(GPIO17_BASE, 17);
pl061_gpio_register(GPIO18_BASE, 18);
pl061_gpio_register(GPIO19_BASE, 19);
/* Power on indicator LED (USER_LED1). */
gpio_set_direction(32, GPIO_DIR_OUT); /* LED1 */
gpio_set_value(32, GPIO_LEVEL_HIGH);
gpio_set_direction(33, GPIO_DIR_OUT); /* LED2 */
gpio_set_value(33, GPIO_LEVEL_LOW);
gpio_set_direction(34, GPIO_DIR_OUT); /* LED3 */
gpio_set_direction(35, GPIO_DIR_OUT); /* LED4 */
}
static void hikey_pmussi_init(void)
{
uint32_t data;
/* Initialize PWR_HOLD GPIO */
gpio_set_direction(0, GPIO_DIR_OUT);
gpio_set_value(0, GPIO_LEVEL_LOW);
/*
* After reset, PMUSSI stays in reset mode.
* Now make it out of reset.
*/
mmio_write_32(AO_SC_PERIPH_RSTDIS4,
AO_SC_PERIPH_RSTDIS4_PRESET_PMUSSI_N);
do {
data = mmio_read_32(AO_SC_PERIPH_RSTSTAT4);
} while (data & AO_SC_PERIPH_RSTDIS4_PRESET_PMUSSI_N);
/* Set PMUSSI clock latency for read operation. */
data = mmio_read_32(AO_SC_MCU_SUBSYS_CTRL3);
data &= ~AO_SC_MCU_SUBSYS_CTRL3_RCLK_MASK;
data |= AO_SC_MCU_SUBSYS_CTRL3_RCLK_3;
mmio_write_32(AO_SC_MCU_SUBSYS_CTRL3, data);
/* enable PMUSSI clock */
data = AO_SC_PERIPH_CLKEN5_PCLK_PMUSSI_CCPU |
AO_SC_PERIPH_CLKEN5_PCLK_PMUSSI_MCU;
mmio_write_32(AO_SC_PERIPH_CLKEN5, data);
data = AO_SC_PERIPH_CLKEN4_PCLK_PMUSSI;
mmio_write_32(AO_SC_PERIPH_CLKEN4, data);
gpio_set_value(0, GPIO_LEVEL_HIGH);
}
static void hikey_hi6553_init(void)
{
uint8_t data;
mmio_write_8(HI6553_PERI_EN_MARK, 0x1e);
mmio_write_8(HI6553_NP_REG_ADJ1, 0);
data = DISABLE6_XO_CLK_CONN | DISABLE6_XO_CLK_NFC |
DISABLE6_XO_CLK_RF1 | DISABLE6_XO_CLK_RF2;
mmio_write_8(HI6553_DISABLE6_XO_CLK, data);
/* configure BUCK0 & BUCK1 */
mmio_write_8(HI6553_BUCK01_CTRL2, 0x5e);
mmio_write_8(HI6553_BUCK0_CTRL7, 0x10);
mmio_write_8(HI6553_BUCK1_CTRL7, 0x10);
mmio_write_8(HI6553_BUCK0_CTRL5, 0x1e);
mmio_write_8(HI6553_BUCK1_CTRL5, 0x1e);
mmio_write_8(HI6553_BUCK0_CTRL1, 0xfc);
mmio_write_8(HI6553_BUCK1_CTRL1, 0xfc);
/* configure BUCK2 */
mmio_write_8(HI6553_BUCK2_REG1, 0x4f);
mmio_write_8(HI6553_BUCK2_REG5, 0x99);
mmio_write_8(HI6553_BUCK2_REG6, 0x45);
mdelay(1);
mmio_write_8(HI6553_VSET_BUCK2_ADJ, 0x22);
mdelay(1);
/* configure BUCK3 */
mmio_write_8(HI6553_BUCK3_REG3, 0x02);
mmio_write_8(HI6553_BUCK3_REG5, 0x99);
mmio_write_8(HI6553_BUCK3_REG6, 0x41);
mmio_write_8(HI6553_VSET_BUCK3_ADJ, 0x02);
mdelay(1);
/* configure BUCK4 */
mmio_write_8(HI6553_BUCK4_REG2, 0x9a);
mmio_write_8(HI6553_BUCK4_REG5, 0x99);
mmio_write_8(HI6553_BUCK4_REG6, 0x45);
/* configure LDO20 */
mmio_write_8(HI6553_LDO20_REG_ADJ, 0x50);
mmio_write_8(HI6553_NP_REG_CHG, 0x0f);
mmio_write_8(HI6553_CLK_TOP0, 0x06);
mmio_write_8(HI6553_CLK_TOP3, 0xc0);
mmio_write_8(HI6553_CLK_TOP4, 0x00);
/* configure LDO7 & LDO10 for SD slot */
/* enable LDO7 */
data = mmio_read_8(HI6553_LDO7_REG_ADJ);
data = (data & 0xf8) | 0x2;
mmio_write_8(HI6553_LDO7_REG_ADJ, data);
mdelay(5);
mmio_write_8(HI6553_ENABLE2_LDO1_8, 1 << 6);
mdelay(5);
/* enable LDO10 */
data = mmio_read_8(HI6553_LDO10_REG_ADJ);
data = (data & 0xf8) | 0x5;
mmio_write_8(HI6553_LDO10_REG_ADJ, data);
mdelay(5);
mmio_write_8(HI6553_ENABLE3_LDO9_16, 1 << 1);
mdelay(5);
/* enable LDO15 */
data = mmio_read_8(HI6553_LDO15_REG_ADJ);
data = (data & 0xf8) | 0x4;
mmio_write_8(HI6553_LDO15_REG_ADJ, data);
mmio_write_8(HI6553_ENABLE3_LDO9_16, 1 << 6);
mdelay(5);
/* enable LDO19 */
data = mmio_read_8(HI6553_LDO19_REG_ADJ);
data |= 0x7;
mmio_write_8(HI6553_LDO19_REG_ADJ, data);
mmio_write_8(HI6553_ENABLE4_LDO17_22, 1 << 2);
mdelay(5);
/* enable LDO21 */
data = mmio_read_8(HI6553_LDO21_REG_ADJ);
data = (data & 0xf8) | 0x3;
mmio_write_8(HI6553_LDO21_REG_ADJ, data);
mmio_write_8(HI6553_ENABLE4_LDO17_22, 1 << 4);
mdelay(5);
/* enable LDO22 */
data = mmio_read_8(HI6553_LDO22_REG_ADJ);
data = (data & 0xf8) | 0x7;
mmio_write_8(HI6553_LDO22_REG_ADJ, data);
mmio_write_8(HI6553_ENABLE4_LDO17_22, 1 << 5);
mdelay(5);
/* select 32.764KHz */
mmio_write_8(HI6553_CLK19M2_600_586_EN, 0x01);
}
static void init_mmc0_pll(void)
{
unsigned int data;
/* select SYSPLL as the source of MMC0 */
/* select SYSPLL as the source of MUX1 (SC_CLK_SEL0) */
mmio_write_32(PERI_SC_CLK_SEL0, 1 << 5 | 1 << 21);
do {
data = mmio_read_32(PERI_SC_CLK_SEL0);
} while (!(data & (1 << 5)));
/* select MUX1 as the source of MUX2 (SC_CLK_SEL0) */
mmio_write_32(PERI_SC_CLK_SEL0, 1 << 29);
do {
data = mmio_read_32(PERI_SC_CLK_SEL0);
} while (data & (1 << 13));
mmio_write_32(PERI_SC_PERIPH_CLKEN0, (1 << 0));
do {
data = mmio_read_32(PERI_SC_PERIPH_CLKSTAT0);
} while (!(data & (1 << 0)));
data = mmio_read_32(PERI_SC_PERIPH_CLKEN12);
data |= 1 << 1;
mmio_write_32(PERI_SC_PERIPH_CLKEN12, data);
do {
mmio_write_32(PERI_SC_CLKCFG8BIT1, (1 << 7) | 0xb);
data = mmio_read_32(PERI_SC_CLKCFG8BIT1);
} while ((data & 0xb) != 0xb);
}
static void reset_mmc0_clk(void)
{
unsigned int data;
/* disable mmc0 bus clock */
mmio_write_32(PERI_SC_PERIPH_CLKDIS0, PERI_CLK0_MMC0);
do {
data = mmio_read_32(PERI_SC_PERIPH_CLKSTAT0);
} while (data & PERI_CLK0_MMC0);
/* enable mmc0 bus clock */
mmio_write_32(PERI_SC_PERIPH_CLKEN0, PERI_CLK0_MMC0);
do {
data = mmio_read_32(PERI_SC_PERIPH_CLKSTAT0);
} while (!(data & PERI_CLK0_MMC0));
/* reset mmc0 clock domain */
mmio_write_32(PERI_SC_PERIPH_RSTEN0, PERI_RST0_MMC0);
/* bypass mmc0 clock phase */
data = mmio_read_32(PERI_SC_PERIPH_CTRL2);
data |= 3;
mmio_write_32(PERI_SC_PERIPH_CTRL2, data);
/* disable low power */
data = mmio_read_32(PERI_SC_PERIPH_CTRL13);
data |= 1 << 3;
mmio_write_32(PERI_SC_PERIPH_CTRL13, data);
do {
data = mmio_read_32(PERI_SC_PERIPH_RSTSTAT0);
} while (!(data & PERI_RST0_MMC0));
/* unreset mmc0 clock domain */
mmio_write_32(PERI_SC_PERIPH_RSTDIS0, PERI_RST0_MMC0);
do {
data = mmio_read_32(PERI_SC_PERIPH_RSTSTAT0);
} while (data & PERI_RST0_MMC0);
}
static void init_media_clk(void)
{
unsigned int data, value;
data = mmio_read_32(PMCTRL_MEDPLLCTRL);
data |= 1;
mmio_write_32(PMCTRL_MEDPLLCTRL, data);
for (;;) {
data = mmio_read_32(PMCTRL_MEDPLLCTRL);
value = 1 << 28;
if ((data & value) == value)
break;
}
data = mmio_read_32(PERI_SC_PERIPH_CLKEN12);
data = 1 << 10;
mmio_write_32(PERI_SC_PERIPH_CLKEN12, data);
}
static void init_mmc1_pll(void)
{
uint32_t data;
/* select SYSPLL as the source of MMC1 */
/* select SYSPLL as the source of MUX1 (SC_CLK_SEL0) */
mmio_write_32(PERI_SC_CLK_SEL0, 1 << 11 | 1 << 27);
do {
data = mmio_read_32(PERI_SC_CLK_SEL0);
} while (!(data & (1 << 11)));
/* select MUX1 as the source of MUX2 (SC_CLK_SEL0) */
mmio_write_32(PERI_SC_CLK_SEL0, 1 << 30);
do {
data = mmio_read_32(PERI_SC_CLK_SEL0);
} while (data & (1 << 14));
mmio_write_32(PERI_SC_PERIPH_CLKEN0, (1 << 1));
do {
data = mmio_read_32(PERI_SC_PERIPH_CLKSTAT0);
} while (!(data & (1 << 1)));
data = mmio_read_32(PERI_SC_PERIPH_CLKEN12);
data |= 1 << 2;
mmio_write_32(PERI_SC_PERIPH_CLKEN12, data);
do {
/* 1.2GHz / 50 = 24MHz */
mmio_write_32(PERI_SC_CLKCFG8BIT2, 0x31 | (1 << 7));
data = mmio_read_32(PERI_SC_CLKCFG8BIT2);
} while ((data & 0x31) != 0x31);
}
static void reset_mmc1_clk(void)
{
unsigned int data;
/* disable mmc1 bus clock */
mmio_write_32(PERI_SC_PERIPH_CLKDIS0, PERI_CLK0_MMC1);
do {
data = mmio_read_32(PERI_SC_PERIPH_CLKSTAT0);
} while (data & PERI_CLK0_MMC1);
/* enable mmc1 bus clock */
mmio_write_32(PERI_SC_PERIPH_CLKEN0, PERI_CLK0_MMC1);
do {
data = mmio_read_32(PERI_SC_PERIPH_CLKSTAT0);
} while (!(data & PERI_CLK0_MMC1));
/* reset mmc1 clock domain */
mmio_write_32(PERI_SC_PERIPH_RSTEN0, PERI_RST0_MMC1);
/* bypass mmc1 clock phase */
data = mmio_read_32(PERI_SC_PERIPH_CTRL2);
data |= 3 << 2;
mmio_write_32(PERI_SC_PERIPH_CTRL2, data);
/* disable low power */
data = mmio_read_32(PERI_SC_PERIPH_CTRL13);
data |= 1 << 4;
mmio_write_32(PERI_SC_PERIPH_CTRL13, data);
do {
data = mmio_read_32(PERI_SC_PERIPH_RSTSTAT0);
} while (!(data & PERI_RST0_MMC1));
/* unreset mmc0 clock domain */
mmio_write_32(PERI_SC_PERIPH_RSTDIS0, PERI_RST0_MMC1);
do {
data = mmio_read_32(PERI_SC_PERIPH_RSTSTAT0);
} while (data & PERI_RST0_MMC1);
}
/* Initialize PLL of both eMMC and SD controllers. */
static void hikey_mmc_pll_init(void)
{
init_mmc0_pll();
reset_mmc0_clk();
init_media_clk();
dsb();
init_mmc1_pll();
reset_mmc1_clk();
}
/*
* Function which will perform any remaining platform-specific setup that can
* occur after the MMU and data cache have been enabled.
*/
void bl1_platform_setup(void)
{
dw_mmc_params_t params;
assert((HIKEY_BL1_MMC_DESC_BASE >= SRAM_BASE) &&
((SRAM_BASE + SRAM_SIZE) >=
(HIKEY_BL1_MMC_DATA_BASE + HIKEY_BL1_MMC_DATA_SIZE)));
hikey_sp804_init();
hikey_gpio_init();
hikey_pmussi_init();
hikey_hi6553_init();
hikey_mmc_pll_init();
memset(&params, 0, sizeof(dw_mmc_params_t));
params.reg_base = DWMMC0_BASE;
params.desc_base = HIKEY_BL1_MMC_DESC_BASE;
params.desc_size = 1 << 20;
params.clk_rate = 24 * 1000 * 1000;
params.bus_width = EMMC_BUS_WIDTH_8;
params.flags = EMMC_FLAG_CMD23;
dw_mmc_init(&params);
hikey_io_setup();
}
/*
* The following function checks if Firmware update is needed,
* by checking if TOC in FIP image is valid or not.
*/
unsigned int bl1_plat_get_next_image_id(void)
{
int32_t boot_mode;
unsigned int ret;
boot_mode = mmio_read_32(ONCHIPROM_PARAM_BASE);
switch (boot_mode) {
case BOOT_NORMAL:
ret = BL2_IMAGE_ID;
break;
case BOOT_USB_DOWNLOAD:
case BOOT_UART_DOWNLOAD:
ret = NS_BL1U_IMAGE_ID;
break;
default:
WARN("Invalid boot mode is found:%d\n", boot_mode);
panic();
}
return ret;
}
image_desc_t *bl1_plat_get_image_desc(unsigned int image_id)
{
unsigned int index = 0;
while (bl1_tbbr_image_descs[index].image_id != INVALID_IMAGE_ID) {
if (bl1_tbbr_image_descs[index].image_id == image_id)
return &bl1_tbbr_image_descs[index];
index++;
}
return NULL;
}
void bl1_plat_set_ep_info(unsigned int image_id,
entry_point_info_t *ep_info)
{
unsigned int data = 0;
if (image_id == BL2_IMAGE_ID)
return;
inv_dcache_range(NS_BL1U_BASE, NS_BL1U_SIZE);
__asm__ volatile ("mrs %0, cpacr_el1" : "=r"(data));
do {
data |= 3 << 20;
__asm__ volatile ("msr cpacr_el1, %0" : : "r"(data));
__asm__ volatile ("mrs %0, cpacr_el1" : "=r"(data));
} while ((data & (3 << 20)) != (3 << 20));
INFO("cpacr_el1:0x%x\n", data);
ep_info->args.arg0 = 0xffff & read_mpidr();
ep_info->spsr = SPSR_64(MODE_EL1, MODE_SP_ELX,
DISABLE_ALL_EXCEPTIONS);
}

View File

@ -0,0 +1,101 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __HIKEY_DEF_H__
#define __HIKEY_DEF_H__
#include <common_def.h>
#include <tbbr_img_def.h>
/* Always assume DDR is 1GB size. */
#define DDR_BASE 0x0
#define DDR_SIZE 0x80000000
#define DEVICE_BASE 0xF4000000
#define DEVICE_SIZE 0x05800000
#define XG2RAM0_BASE 0xF9800000
#define XG2RAM0_SIZE 0x00400000
#define SRAM_BASE 0xFFF80000
#define SRAM_SIZE 0x00012000
/*
* BL1 is stored in XG2RAM0_HIRQ that is 784KB large (0xF980_0000~0xF98C_4000).
*/
#define ONCHIPROM_PARAM_BASE (XG2RAM0_BASE + 0x700)
#define LOADER_RAM_BASE (XG2RAM0_BASE + 0x800)
#define BL1_XG2RAM0_OFFSET 0x1000
/*
* PL011 related constants
*/
#define PL011_UART0_BASE 0xF8015000
#define PL011_UART3_BASE 0xF7113000
#define PL011_BAUDRATE 115200
#define PL011_UART_CLK_IN_HZ 19200000
#define HIKEY_USB_DESC_BASE (DDR_BASE + 0x00800000)
#define HIKEY_USB_DESC_SIZE 0x00100000
#define HIKEY_USB_DATA_BASE (DDR_BASE + 0x10000000)
#define HIKEY_USB_DATA_SIZE 0x10000000
#define HIKEY_FB_BUFFER_BASE (HIKEY_USB_DATA_BASE)
#define HIKEY_FB_BUFFER_SIZE HIKEY_USB_DATA_SIZE
#define HIKEY_FB_DOWNLOAD_BASE (HIKEY_FB_BUFFER_BASE + \
HIKEY_FB_BUFFER_SIZE)
#define HIKEY_FB_DOWNLOAD_SIZE HIKEY_USB_DATA_SIZE
#define HIKEY_USB_DESC_IN_BASE (DDR_BASE + 0x00800000)
#define HIKEY_USB_DESC_IN_SIZE 0x00040000
#define HIKEY_USB_DESC_EP0_OUT_BASE (HIKEY_USB_DESC_IN_BASE + \
HIKEY_USB_DESC_IN_SIZE)
#define HIKEY_USB_DESC_EP0_OUT_SIZE 0x00040000
#define HIKEY_USB_DESC_EPX_OUT_BASE (HIKEY_USB_DESC_EP0_OUT_BASE + \
HIKEY_USB_DESC_EP0_OUT_SIZE)
#define HIKEY_USB_DESC_EPX_OUT_SIZE 0x00080000
#define HIKEY_MMC_DESC_BASE (DDR_BASE + 0x03000000)
#define HIKEY_MMC_DESC_SIZE 0x00100000
/*
* HIKEY_MMC_DATA_BASE & HIKEY_MMC_DATA_SIZE are shared between fastboot
* and eMMC driver. Since it could avoid to memory copy.
* So this SRAM region is used twice. First, it's used in BL1 as temporary
* buffer in eMMC driver. Second, it's used by MCU in BL2. The SRAM region
* needs to be clear before used in BL2.
*/
#define HIKEY_MMC_DATA_BASE (DDR_BASE + 0x10000000)
#define HIKEY_MMC_DATA_SIZE 0x20000000
#define HIKEY_NS_IMAGE_OFFSET (DDR_BASE + 0x35000000)
#define HIKEY_BL1_MMC_DESC_BASE (SRAM_BASE)
#define HIKEY_BL1_MMC_DESC_SIZE 0x00001000
#define HIKEY_BL1_MMC_DATA_BASE (HIKEY_BL1_MMC_DESC_BASE + \
HIKEY_BL1_MMC_DESC_SIZE)
#define HIKEY_BL1_MMC_DATA_SIZE 0x0000B000
#define EMMC_BASE 0
#define HIKEY_FIP_BASE (EMMC_BASE + (4 << 20))
#define HIKEY_FIP_MAX_SIZE (8 << 20)
#define HIKEY_EMMC_RPMB_BASE (EMMC_BASE + 0)
#define HIKEY_EMMC_RPMB_MAX_SIZE (128 << 10)
#define HIKEY_EMMC_USERDATA_BASE (EMMC_BASE + 0)
#define HIKEY_EMMC_USERDATA_MAX_SIZE (4 << 30)
/*
* GIC400 interrupt handling related constants
*/
#define IRQ_SEC_PHY_TIMER 29
#define IRQ_SEC_SGI_0 8
#define IRQ_SEC_SGI_1 9
#define IRQ_SEC_SGI_2 10
#define IRQ_SEC_SGI_3 11
#define IRQ_SEC_SGI_4 12
#define IRQ_SEC_SGI_5 13
#define IRQ_SEC_SGI_6 14
#define IRQ_SEC_SGI_7 15
#define IRQ_SEC_SGI_8 16
#endif /* __HIKEY_DEF_H__ */

View File

@ -0,0 +1,183 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch_helpers.h>
#include <assert.h>
#include <debug.h>
#include <emmc.h>
#include <errno.h>
#include <firmware_image_package.h>
#include <io_block.h>
#include <io_driver.h>
#include <io_fip.h>
#include <io_memmap.h>
#include <io_storage.h>
#include <mmio.h>
#include <platform_def.h>
#include <semihosting.h> /* For FOPEN_MODE_... */
#include <string.h>
#include "hikey_private.h"
#define EMMC_BLOCK_SHIFT 9
/* Page 1024, since only a few pages before 2048 are used as partition table */
#define SERIALNO_EMMC_OFFSET (1024 * 512)
struct plat_io_policy {
uintptr_t *dev_handle;
uintptr_t image_spec;
int (*check)(const uintptr_t spec);
};
static const io_dev_connector_t *emmc_dev_con;
static uintptr_t emmc_dev_handle;
static const io_dev_connector_t *fip_dev_con;
static uintptr_t fip_dev_handle;
static int check_emmc(const uintptr_t spec);
static int check_fip(const uintptr_t spec);
static const io_block_spec_t emmc_fip_spec = {
.offset = HIKEY_FIP_BASE,
.length = HIKEY_FIP_MAX_SIZE,
};
static const io_block_dev_spec_t emmc_dev_spec = {
/* It's used as temp buffer in block driver. */
#if IMAGE_BL1
.buffer = {
.offset = HIKEY_BL1_MMC_DATA_BASE,
.length = HIKEY_BL1_MMC_DATA_SIZE,
},
#else
.buffer = {
.offset = HIKEY_MMC_DATA_BASE,
.length = HIKEY_MMC_DATA_SIZE,
},
#endif
.ops = {
.read = emmc_read_blocks,
.write = emmc_write_blocks,
},
.block_size = EMMC_BLOCK_SIZE,
};
static const io_uuid_spec_t bl2_uuid_spec = {
.uuid = UUID_TRUSTED_BOOT_FIRMWARE_BL2,
};
static const io_uuid_spec_t bl31_uuid_spec = {
.uuid = UUID_EL3_RUNTIME_FIRMWARE_BL31,
};
static const io_uuid_spec_t bl33_uuid_spec = {
.uuid = UUID_NON_TRUSTED_FIRMWARE_BL33,
};
static const io_uuid_spec_t scp_bl2_uuid_spec = {
.uuid = UUID_SCP_FIRMWARE_SCP_BL2,
};
static const struct plat_io_policy policies[] = {
[FIP_IMAGE_ID] = {
&emmc_dev_handle,
(uintptr_t)&emmc_fip_spec,
check_emmc
},
[BL2_IMAGE_ID] = {
&fip_dev_handle,
(uintptr_t)&bl2_uuid_spec,
check_fip
},
[SCP_BL2_IMAGE_ID] = {
&fip_dev_handle,
(uintptr_t)&scp_bl2_uuid_spec,
check_fip
},
[BL31_IMAGE_ID] = {
&fip_dev_handle,
(uintptr_t)&bl31_uuid_spec,
check_fip
},
[BL33_IMAGE_ID] = {
&fip_dev_handle,
(uintptr_t)&bl33_uuid_spec,
check_fip
}
};
static int check_emmc(const uintptr_t spec)
{
int result;
uintptr_t local_handle;
result = io_dev_init(emmc_dev_handle, (uintptr_t)NULL);
if (result == 0) {
result = io_open(emmc_dev_handle, spec, &local_handle);
if (result == 0)
io_close(local_handle);
}
return result;
}
static int check_fip(const uintptr_t spec)
{
int result;
uintptr_t local_image_handle;
/* See if a Firmware Image Package is available */
result = io_dev_init(fip_dev_handle, (uintptr_t)FIP_IMAGE_ID);
if (result == 0) {
result = io_open(fip_dev_handle, spec, &local_image_handle);
if (result == 0) {
VERBOSE("Using FIP\n");
io_close(local_image_handle);
}
}
return result;
}
void hikey_io_setup(void)
{
int result;
result = register_io_dev_block(&emmc_dev_con);
assert(result == 0);
result = register_io_dev_fip(&fip_dev_con);
assert(result == 0);
result = io_dev_open(emmc_dev_con, (uintptr_t)&emmc_dev_spec,
&emmc_dev_handle);
assert(result == 0);
result = io_dev_open(fip_dev_con, (uintptr_t)NULL, &fip_dev_handle);
assert(result == 0);
/* Ignore improbable errors in release builds */
(void)result;
}
/* Return an IO device handle and specification which can be used to access
* an image. Use this to enforce platform load policy
*/
int plat_get_image_source(unsigned int image_id, uintptr_t *dev_handle,
uintptr_t *image_spec)
{
int result;
const struct plat_io_policy *policy;
assert(image_id < ARRAY_SIZE(policies));
policy = &policies[image_id];
result = policy->check(policy->image_spec);
assert(result == 0);
*image_spec = policy->image_spec;
*dev_handle = *(policy->dev_handle);
return result;
}

View File

@ -0,0 +1,54 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __HIKEY_PRIVATE_H__
#define __HIKEY_PRIVATE_H__
#include <bl_common.h>
#define RANDOM_MAX 0x7fffffffffffffff
#define RANDOM_MAGIC 0x9a4dbeaf
struct random_serial_num {
uint64_t magic;
uint64_t data;
char serialno[32];
};
/*
* Function and variable prototypes
*/
void hikey_init_mmu_el1(unsigned long total_base,
unsigned long total_size,
unsigned long ro_start,
unsigned long ro_limit,
unsigned long coh_start,
unsigned long coh_limit);
void hikey_init_mmu_el3(unsigned long total_base,
unsigned long total_size,
unsigned long ro_start,
unsigned long ro_limit,
unsigned long coh_start,
unsigned long coh_limit);
void hikey_ddr_init(void);
void hikey_io_setup(void);
int hikey_get_partition_size(const char *arg, int left, char *response);
int hikey_get_partition_type(const char *arg, int left, char *response);
int hikey_erase(const char *arg);
int hikey_flash(const char *arg);
int hikey_oem(const char *arg);
int hikey_reboot(const char *arg);
const char *hikey_init_serialno(void);
int hikey_read_serialno(struct random_serial_num *serialno);
int hikey_write_serialno(struct random_serial_num *serialno);
void init_acpu_dvfs(void);
#endif /* __HIKEY_PRIVATE_H__ */

View File

@ -0,0 +1,70 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __HI6220_H__
#define __HI6220_H__
#include <hi6220_regs_acpu.h>
#include <hi6220_regs_ao.h>
#include <hi6220_regs_peri.h>
#include <hi6220_regs_pin.h>
#include <hi6220_regs_pmctrl.h>
/*******************************************************************************
* Implementation defined ACTLR_EL2 bit definitions
******************************************************************************/
#define ACTLR_EL2_L2ACTLR_BIT (1 << 6)
#define ACTLR_EL2_L2ECTLR_BIT (1 << 5)
#define ACTLR_EL2_L2CTLR_BIT (1 << 4)
#define ACTLR_EL2_CPUECTLR_BIT (1 << 1)
#define ACTLR_EL2_CPUACTLR_BIT (1 << 0)
/*******************************************************************************
* Implementation defined ACTLR_EL3 bit definitions
******************************************************************************/
#define ACTLR_EL3_L2ACTLR_BIT (1 << 6)
#define ACTLR_EL3_L2ECTLR_BIT (1 << 5)
#define ACTLR_EL3_L2CTLR_BIT (1 << 4)
#define ACTLR_EL3_CPUECTLR_BIT (1 << 1)
#define ACTLR_EL3_CPUACTLR_BIT (1 << 0)
/*******************************************************************************
* CCI-400 related constants
******************************************************************************/
#define CCI400_BASE 0xF6E90000
#define CCI400_SL_IFACE3_CLUSTER_IX 3
#define CCI400_SL_IFACE4_CLUSTER_IX 4
#define DWMMC0_BASE 0xF723D000
#define DWUSB_BASE 0xF72C0000
#define PMUSSI_BASE 0xF8000000
#define SP804_TIMER0_BASE 0xF8008000
#define GPIO0_BASE 0xF8011000
#define GPIO1_BASE 0xF8012000
#define GPIO2_BASE 0xF8013000
#define GPIO3_BASE 0xF8014000
#define GPIO4_BASE 0xF7020000
#define GPIO5_BASE 0xF7021000
#define GPIO6_BASE 0xF7022000
#define GPIO7_BASE 0xF7023000
#define GPIO8_BASE 0xF7024000
#define GPIO9_BASE 0xF7025000
#define GPIO10_BASE 0xF7026000
#define GPIO11_BASE 0xF7027000
#define GPIO12_BASE 0xF7028000
#define GPIO13_BASE 0xF7029000
#define GPIO14_BASE 0xF702A000
#define GPIO15_BASE 0xF702B000
#define GPIO16_BASE 0xF702C000
#define GPIO17_BASE 0xF702D000
#define GPIO18_BASE 0xF702E000
#define GPIO19_BASE 0xF702F000
#endif /* __HI6220_H__ */

View File

@ -0,0 +1,300 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __HI6220_REGS_ACPU_H__
#define __HI6220_REGS_ACPU_H__
#define ACPU_CTRL_BASE 0xF6504000
#define ACPU_SC_CPU_CTRL (ACPU_CTRL_BASE + 0x000)
#define ACPU_SC_CPU_STAT (ACPU_CTRL_BASE + 0x008)
#define ACPU_SC_CPU_STAT_SC_STANDBYWFIL2 (1 << 0)
#define ACPU_SC_CPU_STAT_SC_STANDBYWFIL2_SHIFT (0)
#define ACPU_SC_CPU_STAT_SC_STANDBYWFI0 (1 << 1)
#define ACPU_SC_CPU_STAT_SC_STANDBYWFI0_SHIFT (1)
#define ACPU_SC_CPU_STAT_SC_STANDBYWFI1 (1 << 2)
#define ACPU_SC_CPU_STAT_SC_STANDBYWFI1_SHIFT (2)
#define ACPU_SC_CPU_STAT_SC_STANDBYWFI2 (1 << 3)
#define ACPU_SC_CPU_STAT_SC_STANDBYWFI2_SHIFT (3)
#define ACPU_SC_CPU_STAT_SC_STANDBYWFI3 (1 << 4)
#define ACPU_SC_CPU_STAT_SC_STANDBYWFI3_SHIFT (4)
#define ACPU_SC_CPU_STAT_A53_1_STANDBYWFIL2 (1 << 8)
#define ACPU_SC_CPU_STAT_A53_1_STANDBYWFIL2_SHIFT (8)
#define ACPU_SC_CPU_STAT_A53_1_STANDBYWFI (1 << 9)
#define ACPU_SC_CPU_STAT_A53_1_STANDBYWFI_SHIFT (9)
#define ACPU_SC_CPU_STAT_L2FLSHUDONE0 (1 << 16)
#define ACPU_SC_CPU_STAT_L2FLSHUDONE0_SHIFT (16)
#define ACPU_SC_CPU_STAT_L2FLSHUDONE1 (1 << 17)
#define ACPU_SC_CPU_STAT_L2FLSHUDONE1_SHIFT (17)
#define ACPU_SC_CPU_STAT_CCI400_ACTIVE (1 << 18)
#define ACPU_SC_CPU_STAT_CCI400_ACTIVE_SHIFT (18)
#define ACPU_SC_CPU_STAT_CLK_DIV_STATUS_VD (1 << 20)
#define ACPU_SC_CPU_STAT_CLK_DIV_STATUS_VD_SHIFT (20)
#define ACPU_SC_CLKEN (ACPU_CTRL_BASE + 0x00c)
#define HPM_L2_1_CLKEN (1 << 9)
#define G_CPU_1_CLKEN (1 << 8)
#define HPM_L2_CLKEN (1 << 1)
#define G_CPU_CLKEN (1 << 0)
#define ACPU_SC_CLKDIS (ACPU_CTRL_BASE + 0x010)
#define ACPU_SC_CLK_STAT (ACPU_CTRL_BASE + 0x014)
#define ACPU_SC_RSTEN (ACPU_CTRL_BASE + 0x018)
#define SRST_PRESET1_RSTEN (1 << 11)
#define SRST_PRESET0_RSTEN (1 << 10)
#define SRST_CLUSTER1_RSTEN (1 << 9)
#define SRST_CLUSTER0_RSTEN (1 << 8)
#define SRST_L2_HPM_1_RSTEN (1 << 5)
#define SRST_AARM_L2_1_RSTEN (1 << 4)
#define SRST_L2_HPM_0_RSTEN (1 << 3)
#define SRST_AARM_L2_0_RSTEN (1 << 1)
#define SRST_CLUSTER1 (SRST_PRESET1_RSTEN | \
SRST_CLUSTER1_RSTEN | \
SRST_L2_HPM_1_RSTEN | \
SRST_AARM_L2_1_RSTEN)
#define SRST_CLUSTER0 (SRST_PRESET0_RSTEN | \
SRST_CLUSTER0_RSTEN | \
SRST_L2_HPM_0_RSTEN | \
SRST_AARM_L2_0_RSTEN)
#define ACPU_SC_RSTDIS (ACPU_CTRL_BASE + 0x01c)
#define ACPU_SC_RST_STAT (ACPU_CTRL_BASE + 0x020)
#define ACPU_SC_PDBGUP_MBIST (ACPU_CTRL_BASE + 0x02c)
#define PDBGUP_CLUSTER1_SHIFT 8
#define ACPU_SC_VD_CTRL (ACPU_CTRL_BASE + 0x054)
#define ACPU_SC_VD_MASK_PATTERN_CTRL (ACPU_CTRL_BASE + 0x058)
#define ACPU_SC_VD_MASK_PATTERN_VAL (0xCCB << 12)
#define ACPU_SC_VD_MASK_PATTERN_MASK ((0x1 << 13) - 1)
#define ACPU_SC_VD_DLY_FIXED_CTRL (ACPU_CTRL_BASE + 0x05c)
#define ACPU_SC_VD_DLY_TABLE0_CTRL (ACPU_CTRL_BASE + 0x060)
#define ACPU_SC_VD_DLY_TABLE1_CTRL (ACPU_CTRL_BASE + 0x064)
#define ACPU_SC_VD_DLY_TABLE2_CTRL (ACPU_CTRL_BASE + 0x068)
#define ACPU_SC_VD_HPM_CTRL (ACPU_CTRL_BASE + 0x06c)
#define ACPU_SC_A53_CLUSTER_MTCMOS_EN (ACPU_CTRL_BASE + 0x088)
#define PW_MTCMOS_EN_A53_1_EN (1 << 1)
#define PW_MTCMOS_EN_A53_0_EN (1 << 0)
#define ACPU_SC_A53_CLUSTER_MTCMOS_STA (ACPU_CTRL_BASE + 0x090)
#define ACPU_SC_A53_CLUSTER_ISO_EN (ACPU_CTRL_BASE + 0x098)
#define PW_ISO_A53_1_EN (1 << 1)
#define PW_ISO_A53_0_EN (1 << 0)
#define ACPU_SC_A53_CLUSTER_ISO_DIS (ACPU_CTRL_BASE + 0x09c)
#define ACPU_SC_A53_CLUSTER_ISO_STA (ACPU_CTRL_BASE + 0x0a0)
#define ACPU_SC_A53_1_MTCMOS_TIMER (ACPU_CTRL_BASE + 0x0b4)
#define ACPU_SC_A53_0_MTCMOS_TIMER (ACPU_CTRL_BASE + 0x0bc)
#define ACPU_SC_A53_x_MTCMOS_TIMER(x) ((x) ? ACPU_SC_A53_1_MTCMOS_TIMER : ACPU_SC_A53_0_MTCMOS_TIMER)
#define ACPU_SC_SNOOP_PWD (ACPU_CTRL_BASE + 0xe4)
#define PD_DETECT_START1 (1 << 16)
#define PD_DETECT_START0 (1 << 0)
#define ACPU_SC_CPU0_CTRL (ACPU_CTRL_BASE + 0x100)
#define CPU_CTRL_AARCH64_MODE (1 << 7)
#define ACPU_SC_CPU0_STAT (ACPU_CTRL_BASE + 0x104)
#define ACPU_SC_CPU0_CLKEN (ACPU_CTRL_BASE + 0x108)
#define CPU_CLKEN_HPM (1 << 1)
#define ACPU_SC_CPU0_CLK_STAT (ACPU_CTRL_BASE + 0x110)
#define ACPU_SC_CPU0_RSTEN (ACPU_CTRL_BASE + 0x114)
#define ACPU_SC_CPU0_RSTDIS (ACPU_CTRL_BASE + 0x118)
#define ACPU_SC_CPU0_MTCMOS_EN (ACPU_CTRL_BASE + 0x120)
#define CPU_MTCMOS_PW (1 << 0)
#define ACPU_SC_CPU0_PW_ISOEN (ACPU_CTRL_BASE + 0x130)
#define CPU_PW_ISO (1 << 0)
#define ACPU_SC_CPU0_PW_ISODIS (ACPU_CTRL_BASE + 0x134)
#define ACPU_SC_CPU0_PW_ISO_STAT (ACPU_CTRL_BASE + 0x138)
#define ACPU_SC_CPU0_MTCMOS_TIMER_STAT (ACPU_CTRL_BASE + 0x154)
#define CPU_MTCMOS_TIMER_STA (1 << 0)
#define ACPU_SC_CPU0_RVBARADDR (ACPU_CTRL_BASE + 0x158)
#define ACPU_SC_CPU1_CTRL (ACPU_CTRL_BASE + 0x200)
#define ACPU_SC_CPU1_STAT (ACPU_CTRL_BASE + 0x204)
#define ACPU_SC_CPU1_CLKEN (ACPU_CTRL_BASE + 0x208)
#define ACPU_SC_CPU1_CLK_STAT (ACPU_CTRL_BASE + 0x210)
#define ACPU_SC_CPU1_RSTEN (ACPU_CTRL_BASE + 0x214)
#define ACPU_SC_CPU1_RSTDIS (ACPU_CTRL_BASE + 0x218)
#define ACPU_SC_CPU1_MTCMOS_EN (ACPU_CTRL_BASE + 0x220)
#define ACPU_SC_CPU1_PW_ISODIS (ACPU_CTRL_BASE + 0x234)
#define ACPU_SC_CPU1_PW_ISO_STAT (ACPU_CTRL_BASE + 0x238)
#define ACPU_SC_CPU1_MTCMOS_TIMER_STAT (ACPU_CTRL_BASE + 0x254)
#define ACPU_SC_CPU1_RVBARADDR (ACPU_CTRL_BASE + 0x258)
#define ACPU_SC_CPU2_CTRL (ACPU_CTRL_BASE + 0x300)
#define ACPU_SC_CPU2_STAT (ACPU_CTRL_BASE + 0x304)
#define ACPU_SC_CPU2_CLKEN (ACPU_CTRL_BASE + 0x308)
#define ACPU_SC_CPU2_CLK_STAT (ACPU_CTRL_BASE + 0x310)
#define ACPU_SC_CPU2_RSTEN (ACPU_CTRL_BASE + 0x314)
#define ACPU_SC_CPU2_RSTDIS (ACPU_CTRL_BASE + 0x318)
#define ACPU_SC_CPU2_MTCMOS_EN (ACPU_CTRL_BASE + 0x320)
#define ACPU_SC_CPU2_PW_ISODIS (ACPU_CTRL_BASE + 0x334)
#define ACPU_SC_CPU2_PW_ISO_STAT (ACPU_CTRL_BASE + 0x338)
#define ACPU_SC_CPU2_MTCMOS_TIMER_STAT (ACPU_CTRL_BASE + 0x354)
#define ACPU_SC_CPU2_RVBARADDR (ACPU_CTRL_BASE + 0x358)
#define ACPU_SC_CPU3_CTRL (ACPU_CTRL_BASE + 0x400)
#define ACPU_SC_CPU3_STAT (ACPU_CTRL_BASE + 0x404)
#define ACPU_SC_CPU3_CLKEN (ACPU_CTRL_BASE + 0x408)
#define ACPU_SC_CPU3_CLK_STAT (ACPU_CTRL_BASE + 0x410)
#define ACPU_SC_CPU3_RSTEN (ACPU_CTRL_BASE + 0x414)
#define ACPU_SC_CPU3_RSTDIS (ACPU_CTRL_BASE + 0x418)
#define ACPU_SC_CPU3_MTCMOS_EN (ACPU_CTRL_BASE + 0x420)
#define ACPU_SC_CPU3_PW_ISODIS (ACPU_CTRL_BASE + 0x434)
#define ACPU_SC_CPU3_PW_ISO_STAT (ACPU_CTRL_BASE + 0x438)
#define ACPU_SC_CPU3_MTCMOS_TIMER_STAT (ACPU_CTRL_BASE + 0x454)
#define ACPU_SC_CPU3_RVBARADDR (ACPU_CTRL_BASE + 0x458)
#define ACPU_SC_CPU4_CTRL (ACPU_CTRL_BASE + 0x500)
#define ACPU_SC_CPU4_STAT (ACPU_CTRL_BASE + 0x504)
#define ACPU_SC_CPU4_CLKEN (ACPU_CTRL_BASE + 0x508)
#define ACPU_SC_CPU4_CLK_STAT (ACPU_CTRL_BASE + 0x510)
#define ACPU_SC_CPU4_RSTEN (ACPU_CTRL_BASE + 0x514)
#define ACPU_SC_CPU4_RSTDIS (ACPU_CTRL_BASE + 0x518)
#define ACPU_SC_CPU4_MTCMOS_EN (ACPU_CTRL_BASE + 0x520)
#define ACPU_SC_CPU4_PW_ISODIS (ACPU_CTRL_BASE + 0x534)
#define ACPU_SC_CPU4_PW_ISO_STAT (ACPU_CTRL_BASE + 0x538)
#define ACPU_SC_CPU4_MTCMOS_TIMER_STAT (ACPU_CTRL_BASE + 0x554)
#define ACPU_SC_CPU4_RVBARADDR (ACPU_CTRL_BASE + 0x558)
#define ACPU_SC_CPU5_CTRL (ACPU_CTRL_BASE + 0x600)
#define ACPU_SC_CPU5_STAT (ACPU_CTRL_BASE + 0x604)
#define ACPU_SC_CPU5_CLKEN (ACPU_CTRL_BASE + 0x608)
#define ACPU_SC_CPU5_CLK_STAT (ACPU_CTRL_BASE + 0x610)
#define ACPU_SC_CPU5_RSTEN (ACPU_CTRL_BASE + 0x614)
#define ACPU_SC_CPU5_RSTDIS (ACPU_CTRL_BASE + 0x618)
#define ACPU_SC_CPU5_MTCMOS_EN (ACPU_CTRL_BASE + 0x620)
#define ACPU_SC_CPU5_PW_ISODIS (ACPU_CTRL_BASE + 0x634)
#define ACPU_SC_CPU5_PW_ISO_STAT (ACPU_CTRL_BASE + 0x638)
#define ACPU_SC_CPU5_MTCMOS_TIMER_STAT (ACPU_CTRL_BASE + 0x654)
#define ACPU_SC_CPU5_RVBARADDR (ACPU_CTRL_BASE + 0x658)
#define ACPU_SC_CPU6_CTRL (ACPU_CTRL_BASE + 0x700)
#define ACPU_SC_CPU6_STAT (ACPU_CTRL_BASE + 0x704)
#define ACPU_SC_CPU6_CLKEN (ACPU_CTRL_BASE + 0x708)
#define ACPU_SC_CPU6_CLK_STAT (ACPU_CTRL_BASE + 0x710)
#define ACPU_SC_CPU6_RSTEN (ACPU_CTRL_BASE + 0x714)
#define ACPU_SC_CPU6_RSTDIS (ACPU_CTRL_BASE + 0x718)
#define ACPU_SC_CPU6_MTCMOS_EN (ACPU_CTRL_BASE + 0x720)
#define ACPU_SC_CPU6_PW_ISODIS (ACPU_CTRL_BASE + 0x734)
#define ACPU_SC_CPU6_PW_ISO_STAT (ACPU_CTRL_BASE + 0x738)
#define ACPU_SC_CPU6_MTCMOS_TIMER_STAT (ACPU_CTRL_BASE + 0x754)
#define ACPU_SC_CPU6_RVBARADDR (ACPU_CTRL_BASE + 0x758)
#define ACPU_SC_CPU7_CTRL (ACPU_CTRL_BASE + 0x800)
#define ACPU_SC_CPU7_STAT (ACPU_CTRL_BASE + 0x804)
#define ACPU_SC_CPU7_CLKEN (ACPU_CTRL_BASE + 0x808)
#define ACPU_SC_CPU7_CLK_STAT (ACPU_CTRL_BASE + 0x810)
#define ACPU_SC_CPU7_RSTEN (ACPU_CTRL_BASE + 0x814)
#define ACPU_SC_CPU7_RSTDIS (ACPU_CTRL_BASE + 0x818)
#define ACPU_SC_CPU7_MTCMOS_EN (ACPU_CTRL_BASE + 0x820)
#define ACPU_SC_CPU7_PW_ISODIS (ACPU_CTRL_BASE + 0x834)
#define ACPU_SC_CPU7_PW_ISO_STAT (ACPU_CTRL_BASE + 0x838)
#define ACPU_SC_CPU7_MTCMOS_TIMER_STAT (ACPU_CTRL_BASE + 0x854)
#define ACPU_SC_CPU7_RVBARADDR (ACPU_CTRL_BASE + 0x858)
#define ACPU_SC_CPUx_CTRL(x) ((x < 8) ? (ACPU_SC_CPU0_CTRL + 0x100 * x) : ACPU_SC_CPU0_CTRL)
#define ACPU_SC_CPUx_STAT(x) ((x < 8) ? (ACPU_SC_CPU0_STAT + 0x100 * x) : ACPU_SC_CPU0_STAT)
#define ACPU_SC_CPUx_CLKEN(x) ((x < 8) ? (ACPU_SC_CPU0_CLKEN + 0x100 * x) : ACPU_SC_CPU0_CLKEN)
#define ACPU_SC_CPUx_CLK_STAT(x) ((x < 8) ? (ACPU_SC_CPU0_CLK_STAT + 0x100 * x) : ACPU_SC_CPU0_CLK_STAT)
#define ACPU_SC_CPUx_RSTEN(x) ((x < 8) ? (ACPU_SC_CPU0_RSTEN + 0x100 * x) : ACPU_SC_CPU0_RSTEN)
#define ACPU_SC_CPUx_RSTDIS(x) ((x < 8) ? (ACPU_SC_CPU0_RSTDIS + 0x100 * x) : ACPU_SC_CPU0_RSTDIS)
#define ACPU_SC_CPUx_MTCMOS_EN(x) ((x < 8) ? (ACPU_SC_CPU0_MTCMOS_EN + 0x100 * x) : ACPU_SC_CPU0_MTCMOS_EN)
#define ACPU_SC_CPUx_PW_ISODIS(x) ((x < 8) ? (ACPU_SC_CPU0_PW_ISODIS + 0x100 * x) : ACPU_SC_CPU0_PW_ISODIS)
#define ACPU_SC_CPUx_PW_ISO_STAT(x) ((x < 8) ? (ACPU_SC_CPU0_PW_ISO_STAT + 0x100 * x) : ACPU_SC_CPU0_PW_ISO_STAT)
#define ACPU_SC_CPUx_MTCMOS_TIMER_STAT(x) ((x < 8) ? (ACPU_SC_CPU0_MTCMOS_TIMER_STAT + 0x100 * x) : ACPU_SC_CPU0_MTCMOS_TIMER_STAT)
#define ACPU_SC_CPUx_RVBARADDR(x) ((x < 8) ? (ACPU_SC_CPU0_RVBARADDR + 0x100 * x) : ACPU_SC_CPU0_RVBARADDR)
#define ACPU_SC_CPU_STAT_CLKDIV_VD_MASK (3 << 20)
#define ACPU_SC_VD_CTRL_TUNE_EN_DIF (1 << 0)
#define ACPU_SC_VD_CTRL_TUNE_EN_DIF_SHIFT (0)
#define ACPU_SC_VD_CTRL_TUNE (1 << 1)
#define ACPU_SC_VD_CTRL_TUNE_SHIFT (1)
#define ACPU_SC_VD_CTRL_CALIBRATE_EN_DIF (1 << 7)
#define ACPU_SC_VD_CTRL_CALIBRATE_EN_DIF_SHIFT (7)
#define ACPU_SC_VD_CTRL_CALIBRATE_EN_INI (1 << 8)
#define ACPU_SC_VD_CTRL_CALIBRATE_EN_INI_SHIFT (8)
#define ACPU_SC_VD_CTRL_CLK_DIS_CNT_CLR (1 << 9)
#define ACPU_SC_VD_CTRL_CLK_DIS_CNT_CLR_SHIFT (9)
#define ACPU_SC_VD_CTRL_CLK_DIS_CNT_EN (1 << 10)
#define ACPU_SC_VD_CTRL_CLK_DIS_CNT_EN_SHIFT (10)
#define ACPU_SC_VD_CTRL_TUNE_EN_INT (1 << 11)
#define ACPU_SC_VD_CTRL_TUNE_EN_INT_SHIFT (11)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE0 (1 << 12)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE0_MASK (0xf << 12)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE0_SHIFT (12)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE1 (1 << 16)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE1_MASK (0xf << 16)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE1_SHIFT (16)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE2 (1 << 20)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE2_MASK (0xf << 20)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE2_SHIFT (20)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE3 (1 << 24)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE3_MASK (0xf << 24)
#define ACPU_SC_VD_CTRL_SHIFT_TABLE3_SHIFT (24)
#define ACPU_SC_VD_CTRL_FORCE_CLK_EN (1 << 28)
#define ACPU_SC_VD_CTRL_FORCE_CLK_EN_SHIFT (28)
#define ACPU_SC_VD_CTRL_DIV_EN_DIF (1 << 29)
#define ACPU_SC_VD_CTRL_DIV_EN_DIF_SHIFT (29)
#define ACPU_SC_VD_SHIFT_TABLE_TUNE_VAL \
((0x1 << ACPU_SC_VD_CTRL_SHIFT_TABLE0_SHIFT) | \
(0x3 << ACPU_SC_VD_CTRL_SHIFT_TABLE1_SHIFT) | \
(0x5 << ACPU_SC_VD_CTRL_SHIFT_TABLE2_SHIFT) | \
(0x6 << ACPU_SC_VD_CTRL_SHIFT_TABLE3_SHIFT) | \
(0x7 << ACPU_SC_VD_CTRL_TUNE_SHIFT))
#define ACPU_SC_VD_SHIFT_TABLE_TUNE_MASK \
((0xF << ACPU_SC_VD_CTRL_SHIFT_TABLE0_SHIFT) | \
(0xF << ACPU_SC_VD_CTRL_SHIFT_TABLE1_SHIFT) | \
(0xF << ACPU_SC_VD_CTRL_SHIFT_TABLE2_SHIFT) | \
(0xF << ACPU_SC_VD_CTRL_SHIFT_TABLE3_SHIFT) | \
(0x3F << ACPU_SC_VD_CTRL_TUNE_SHIFT))
#define ACPU_SC_VD_HPM_CTRL_OSC_DIV (1 << 0)
#define ACPU_SC_VD_HPM_CTRL_OSC_DIV_SHIFT (0)
#define ACPU_SC_VD_HPM_CTRL_OSC_DIV_MASK (0x000000FF)
#define ACPU_SC_VD_HPM_CTRL_DLY_EXP (1 << 8)
#define ACPU_SC_VD_HPM_CTRL_DLY_EXP_SHIFT (8)
#define ACPU_SC_VD_HPM_CTRL_DLY_EXP_MASK (0x001FFF00)
#define HPM_OSC_DIV_VAL \
(0x56 << ACPU_SC_VD_HPM_CTRL_OSC_DIV_SHIFT)
#define HPM_OSC_DIV_MASK \
(ACPU_SC_VD_HPM_CTRL_OSC_DIV_MASK)
#define HPM_DLY_EXP_VAL \
(0xC7A << ACPU_SC_VD_HPM_CTRL_DLY_EXP_SHIFT)
#define HPM_DLY_EXP_MASK \
(ACPU_SC_VD_HPM_CTRL_DLY_EXP_MASK)
#define ACPU_SC_VD_EN_ASIC_VAL \
((0x0 << ACPU_SC_VD_CTRL_FORCE_CLK_EN_SHIFT) | \
(0x0 << ACPU_SC_VD_CTRL_CLK_DIS_CNT_EN_SHIFT) | \
(0x0 << ACPU_SC_VD_CTRL_CALIBRATE_EN_INI_SHIFT) | \
(0x0 << ACPU_SC_VD_CTRL_CALIBRATE_EN_DIF_SHIFT) | \
(0X0 << ACPU_SC_VD_CTRL_DIV_EN_DIF_SHIFT) | \
(0X0 << ACPU_SC_VD_CTRL_TUNE_EN_INT_SHIFT) | \
(0x0 << ACPU_SC_VD_CTRL_TUNE_EN_DIF_SHIFT))
#define ACPU_SC_VD_EN_SFT_VAL \
((0x0 << ACPU_SC_VD_CTRL_FORCE_CLK_EN_SHIFT) | \
(0x0 << ACPU_SC_VD_CTRL_CLK_DIS_CNT_EN_SHIFT) | \
(0x0 << ACPU_SC_VD_CTRL_CALIBRATE_EN_INI_SHIFT) | \
(0x0 << ACPU_SC_VD_CTRL_CALIBRATE_EN_DIF_SHIFT) | \
(0x0 << ACPU_SC_VD_CTRL_DIV_EN_DIF_SHIFT) | \
(0x0 << ACPU_SC_VD_CTRL_TUNE_EN_INT_SHIFT) | \
(0x0 << ACPU_SC_VD_CTRL_TUNE_EN_DIF_SHIFT))
#define ACPU_SC_VD_EN_MASK \
((0x1 << ACPU_SC_VD_CTRL_FORCE_CLK_EN_SHIFT) | \
(0x1 << ACPU_SC_VD_CTRL_CLK_DIS_CNT_EN_SHIFT) | \
(0x1 << ACPU_SC_VD_CTRL_CALIBRATE_EN_INI_SHIFT) | \
(0x1 << ACPU_SC_VD_CTRL_CALIBRATE_EN_DIF_SHIFT) | \
(0x1 << ACPU_SC_VD_CTRL_DIV_EN_DIF_SHIFT) | \
(0x1 << ACPU_SC_VD_CTRL_TUNE_EN_INT_SHIFT) | \
(0x1 << ACPU_SC_VD_CTRL_TUNE_EN_DIF_SHIFT))
#endif /* __HI6220_REGS_ACPU_H__ */

View File

@ -0,0 +1,334 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __HI6220_AO_H__
#define __HI6220_AO_H__
#define AO_CTRL_BASE 0xF7800000
#define AO_SC_SYS_CTRL0 (AO_CTRL_BASE + 0x000)
#define AO_SC_SYS_CTRL1 (AO_CTRL_BASE + 0x004)
#define AO_SC_SYS_CTRL2 (AO_CTRL_BASE + 0x008)
#define AO_SC_SYS_STAT0 (AO_CTRL_BASE + 0x010)
#define AO_SC_SYS_STAT1 (AO_CTRL_BASE + 0x014)
#define AO_SC_MCU_IMCTRL (AO_CTRL_BASE + 0x018)
#define AO_SC_MCU_IMSTAT (AO_CTRL_BASE + 0x01C)
#define AO_SC_SECONDRY_INT_EN0 (AO_CTRL_BASE + 0x044)
#define AO_SC_SECONDRY_INT_STATR0 (AO_CTRL_BASE + 0x048)
#define AO_SC_SECONDRY_INT_STATM0 (AO_CTRL_BASE + 0x04C)
#define AO_SC_MCU_WKUP_INT_EN6 (AO_CTRL_BASE + 0x054)
#define AO_SC_MCU_WKUP_INT_STATR6 (AO_CTRL_BASE + 0x058)
#define AO_SC_MCU_WKUP_INT_STATM6 (AO_CTRL_BASE + 0x05C)
#define AO_SC_MCU_WKUP_INT_EN5 (AO_CTRL_BASE + 0x064)
#define AO_SC_MCU_WKUP_INT_STATR5 (AO_CTRL_BASE + 0x068)
#define AO_SC_MCU_WKUP_INT_STATM5 (AO_CTRL_BASE + 0x06C)
#define AO_SC_MCU_WKUP_INT_EN4 (AO_CTRL_BASE + 0x094)
#define AO_SC_MCU_WKUP_INT_STATR4 (AO_CTRL_BASE + 0x098)
#define AO_SC_MCU_WKUP_INT_STATM4 (AO_CTRL_BASE + 0x09C)
#define AO_SC_MCU_WKUP_INT_EN0 (AO_CTRL_BASE + 0x0A8)
#define AO_SC_MCU_WKUP_INT_STATR0 (AO_CTRL_BASE + 0x0AC)
#define AO_SC_MCU_WKUP_INT_STATM0 (AO_CTRL_BASE + 0x0B0)
#define AO_SC_MCU_WKUP_INT_EN1 (AO_CTRL_BASE + 0x0B4)
#define AO_SC_MCU_WKUP_INT_STATR1 (AO_CTRL_BASE + 0x0B8)
#define AO_SC_MCU_WKUP_INT_STATM1 (AO_CTRL_BASE + 0x0BC)
#define AO_SC_INT_STATR (AO_CTRL_BASE + 0x0C4)
#define AO_SC_INT_STATM (AO_CTRL_BASE + 0x0C8)
#define AO_SC_INT_CLEAR (AO_CTRL_BASE + 0x0CC)
#define AO_SC_INT_EN_SET (AO_CTRL_BASE + 0x0D0)
#define AO_SC_INT_EN_DIS (AO_CTRL_BASE + 0x0D4)
#define AO_SC_INT_EN_STAT (AO_CTRL_BASE + 0x0D8)
#define AO_SC_INT_STATR1 (AO_CTRL_BASE + 0x0E4)
#define AO_SC_INT_STATM1 (AO_CTRL_BASE + 0x0E8)
#define AO_SC_INT_CLEAR1 (AO_CTRL_BASE + 0x0EC)
#define AO_SC_INT_EN_SET1 (AO_CTRL_BASE + 0x0F0)
#define AO_SC_INT_EN_DIS1 (AO_CTRL_BASE + 0x0F4)
#define AO_SC_INT_EN_STAT1 (AO_CTRL_BASE + 0x0F8)
#define AO_SC_TIMER_EN0 (AO_CTRL_BASE + 0x1D0)
#define AO_SC_TIMER_EN1 (AO_CTRL_BASE + 0x1D4)
#define AO_SC_TIMER_EN4 (AO_CTRL_BASE + 0x1F0)
#define AO_SC_TIMER_EN5 (AO_CTRL_BASE + 0x1F4)
#define AO_SC_MCU_SUBSYS_CTRL0 (AO_CTRL_BASE + 0x400)
#define AO_SC_MCU_SUBSYS_CTRL1 (AO_CTRL_BASE + 0x404)
#define AO_SC_MCU_SUBSYS_CTRL2 (AO_CTRL_BASE + 0x408)
#define AO_SC_MCU_SUBSYS_CTRL3 (AO_CTRL_BASE + 0x40C)
#define AO_SC_MCU_SUBSYS_CTRL4 (AO_CTRL_BASE + 0x410)
#define AO_SC_MCU_SUBSYS_CTRL5 (AO_CTRL_BASE + 0x414)
#define AO_SC_MCU_SUBSYS_CTRL6 (AO_CTRL_BASE + 0x418)
#define AO_SC_MCU_SUBSYS_CTRL7 (AO_CTRL_BASE + 0x41C)
#define AO_SC_MCU_SUBSYS_STAT0 (AO_CTRL_BASE + 0x440)
#define AO_SC_MCU_SUBSYS_STAT1 (AO_CTRL_BASE + 0x444)
#define AO_SC_MCU_SUBSYS_STAT2 (AO_CTRL_BASE + 0x448)
#define AO_SC_MCU_SUBSYS_STAT3 (AO_CTRL_BASE + 0x44C)
#define AO_SC_MCU_SUBSYS_STAT4 (AO_CTRL_BASE + 0x450)
#define AO_SC_MCU_SUBSYS_STAT5 (AO_CTRL_BASE + 0x454)
#define AO_SC_MCU_SUBSYS_STAT6 (AO_CTRL_BASE + 0x458)
#define AO_SC_MCU_SUBSYS_STAT7 (AO_CTRL_BASE + 0x45C)
#define AO_SC_PERIPH_CLKEN4 (AO_CTRL_BASE + 0x630)
#define AO_SC_PERIPH_CLKDIS4 (AO_CTRL_BASE + 0x634)
#define AO_SC_PERIPH_CLKSTAT4 (AO_CTRL_BASE + 0x638)
#define AO_SC_PERIPH_CLKEN5 (AO_CTRL_BASE + 0x63C)
#define AO_SC_PERIPH_CLKDIS5 (AO_CTRL_BASE + 0x640)
#define AO_SC_PERIPH_CLKSTAT5 (AO_CTRL_BASE + 0x644)
#define AO_SC_PERIPH_RSTEN4 (AO_CTRL_BASE + 0x6F0)
#define AO_SC_PERIPH_RSTDIS4 (AO_CTRL_BASE + 0x6F4)
#define AO_SC_PERIPH_RSTSTAT4 (AO_CTRL_BASE + 0x6F8)
#define AO_SC_PERIPH_RSTEN5 (AO_CTRL_BASE + 0x6FC)
#define AO_SC_PERIPH_RSTDIS5 (AO_CTRL_BASE + 0x700)
#define AO_SC_PERIPH_RSTSTAT5 (AO_CTRL_BASE + 0x704)
#define AO_SC_PW_CLKEN0 (AO_CTRL_BASE + 0x800)
#define AO_SC_PW_CLKDIS0 (AO_CTRL_BASE + 0x804)
#define AO_SC_PW_CLK_STAT0 (AO_CTRL_BASE + 0x808)
#define AO_SC_PW_RSTEN0 (AO_CTRL_BASE + 0x810)
#define AO_SC_PW_RSTDIS0 (AO_CTRL_BASE + 0x814)
#define AO_SC_PW_RST_STAT0 (AO_CTRL_BASE + 0x818)
#define AO_SC_PW_ISOEN0 (AO_CTRL_BASE + 0x820)
#define AO_SC_PW_ISODIS0 (AO_CTRL_BASE + 0x824)
#define AO_SC_PW_ISO_STAT0 (AO_CTRL_BASE + 0x828)
#define AO_SC_PW_MTCMOS_EN0 (AO_CTRL_BASE + 0x830)
#define AO_SC_PW_MTCMOS_DIS0 (AO_CTRL_BASE + 0x834)
#define AO_SC_PW_MTCMOS_STAT0 (AO_CTRL_BASE + 0x838)
#define AO_SC_PW_MTCMOS_ACK_STAT0 (AO_CTRL_BASE + 0x83C)
#define AO_SC_PW_MTCMOS_TIMEOUT_STAT0 (AO_CTRL_BASE + 0x840)
#define AO_SC_PW_STAT0 (AO_CTRL_BASE + 0x850)
#define AO_SC_PW_STAT1 (AO_CTRL_BASE + 0x854)
#define AO_SC_SYSTEST_STAT (AO_CTRL_BASE + 0x880)
#define AO_SC_SYSTEST_SLICER_CNT0 (AO_CTRL_BASE + 0x890)
#define AO_SC_SYSTEST_SLICER_CNT1 (AO_CTRL_BASE + 0x894)
#define AO_SC_PW_CTRL1 (AO_CTRL_BASE + 0x8C8)
#define AO_SC_PW_CTRL (AO_CTRL_BASE + 0x8CC)
#define AO_SC_MCPU_VOTEEN (AO_CTRL_BASE + 0x8D0)
#define AO_SC_MCPU_VOTEDIS (AO_CTRL_BASE + 0x8D4)
#define AO_SC_MCPU_VOTESTAT (AO_CTRL_BASE + 0x8D8)
#define AO_SC_MCPU_VOTE_MSK0 (AO_CTRL_BASE + 0x8E0)
#define AO_SC_MCPU_VOTE_MSK1 (AO_CTRL_BASE + 0x8E4)
#define AO_SC_MCPU_VOTESTAT0_MSK (AO_CTRL_BASE + 0x8E8)
#define AO_SC_MCPU_VOTESTAT1_MSK (AO_CTRL_BASE + 0x8EC)
#define AO_SC_PERI_VOTEEN (AO_CTRL_BASE + 0x8F0)
#define AO_SC_PERI_VOTEDIS (AO_CTRL_BASE + 0x8F4)
#define AO_SC_PERI_VOTESTAT (AO_CTRL_BASE + 0x8F8)
#define AO_SC_PERI_VOTE_MSK0 (AO_CTRL_BASE + 0x900)
#define AO_SC_PERI_VOTE_MSK1 (AO_CTRL_BASE + 0x904)
#define AO_SC_PERI_VOTESTAT0_MSK (AO_CTRL_BASE + 0x908)
#define AO_SC_PERI_VOTESTAT1_MSK (AO_CTRL_BASE + 0x90C)
#define AO_SC_ACPU_VOTEEN (AO_CTRL_BASE + 0x910)
#define AO_SC_ACPU_VOTEDIS (AO_CTRL_BASE + 0x914)
#define AO_SC_ACPU_VOTESTAT (AO_CTRL_BASE + 0x918)
#define AO_SC_ACPU_VOTE_MSK0 (AO_CTRL_BASE + 0x920)
#define AO_SC_ACPU_VOTE_MSK1 (AO_CTRL_BASE + 0x924)
#define AO_SC_ACPU_VOTESTAT0_MSK (AO_CTRL_BASE + 0x928)
#define AO_SC_ACPU_VOTESTAT1_MSK (AO_CTRL_BASE + 0x92C)
#define AO_SC_MCU_VOTEEN (AO_CTRL_BASE + 0x930)
#define AO_SC_MCU_VOTEDIS (AO_CTRL_BASE + 0x934)
#define AO_SC_MCU_VOTESTAT (AO_CTRL_BASE + 0x938)
#define AO_SC_MCU_VOTE_MSK0 (AO_CTRL_BASE + 0x940)
#define AO_SC_MCU_VOTE_MSK1 (AO_CTRL_BASE + 0x944)
#define AO_SC_MCU_VOTESTAT0_MSK (AO_CTRL_BASE + 0x948)
#define AO_SC_MCU_VOTESTAT1_MSK (AO_CTRL_BASE + 0x94C)
#define AO_SC_MCU_VOTE1EN (AO_CTRL_BASE + 0x960)
#define AO_SC_MCU_VOTE1DIS (AO_CTRL_BASE + 0x964)
#define AO_SC_MCU_VOTE1STAT (AO_CTRL_BASE + 0x968)
#define AO_SC_MCU_VOTE1_MSK0 (AO_CTRL_BASE + 0x970)
#define AO_SC_MCU_VOTE1_MSK1 (AO_CTRL_BASE + 0x974)
#define AO_SC_MCU_VOTE1STAT0_MSK (AO_CTRL_BASE + 0x978)
#define AO_SC_MCU_VOTE1STAT1_MSK (AO_CTRL_BASE + 0x97C)
#define AO_SC_MCU_VOTE2EN (AO_CTRL_BASE + 0x980)
#define AO_SC_MCU_VOTE2DIS (AO_CTRL_BASE + 0x984)
#define AO_SC_MCU_VOTE2STAT (AO_CTRL_BASE + 0x988)
#define AO_SC_MCU_VOTE2_MSK0 (AO_CTRL_BASE + 0x990)
#define AO_SC_MCU_VOTE2_MSK1 (AO_CTRL_BASE + 0x994)
#define AO_SC_MCU_VOTE2STAT0_MSK (AO_CTRL_BASE + 0x998)
#define AO_SC_MCU_VOTE2STAT1_MSK (AO_CTRL_BASE + 0x99C)
#define AO_SC_VOTE_CTRL (AO_CTRL_BASE + 0x9A0)
#define AO_SC_VOTE_STAT (AO_CTRL_BASE + 0x9A4)
#define AO_SC_ECONUM (AO_CTRL_BASE + 0xF00)
#define AO_SCCHIPID (AO_CTRL_BASE + 0xF10)
#define AO_SCSOCID (AO_CTRL_BASE + 0xF1C)
#define AO_SC_SOC_FPGA_RTL_DEF (AO_CTRL_BASE + 0xFE0)
#define AO_SC_SOC_FPGA_PR_DEF (AO_CTRL_BASE + 0xFE4)
#define AO_SC_SOC_FPGA_RES_DEF0 (AO_CTRL_BASE + 0xFE8)
#define AO_SC_SOC_FPGA_RES_DEF1 (AO_CTRL_BASE + 0xFEC)
#define AO_SC_XTAL_CTRL0 (AO_CTRL_BASE + 0x102)
#define AO_SC_XTAL_CTRL1 (AO_CTRL_BASE + 0x102)
#define AO_SC_XTAL_CTRL3 (AO_CTRL_BASE + 0x103)
#define AO_SC_XTAL_CTRL5 (AO_CTRL_BASE + 0x103)
#define AO_SC_XTAL_STAT0 (AO_CTRL_BASE + 0x106)
#define AO_SC_XTAL_STAT1 (AO_CTRL_BASE + 0x107)
#define AO_SC_EFUSE_CHIPID0 (AO_CTRL_BASE + 0x108)
#define AO_SC_EFUSE_CHIPID1 (AO_CTRL_BASE + 0x108)
#define AO_SC_EFUSE_SYS_CTRL (AO_CTRL_BASE + 0x108)
#define AO_SC_DEBUG_CTRL1 (AO_CTRL_BASE + 0x128)
#define AO_SC_DBG_STAT (AO_CTRL_BASE + 0x12B)
#define AO_SC_ARM_DBG_KEY0 (AO_CTRL_BASE + 0x12B)
#define AO_SC_RESERVED31 (AO_CTRL_BASE + 0x13A)
#define AO_SC_RESERVED32 (AO_CTRL_BASE + 0x13A)
#define AO_SC_RESERVED33 (AO_CTRL_BASE + 0x13A)
#define AO_SC_RESERVED34 (AO_CTRL_BASE + 0x13A)
#define AO_SC_RESERVED35 (AO_CTRL_BASE + 0x13B)
#define AO_SC_RESERVED36 (AO_CTRL_BASE + 0x13B)
#define AO_SC_RESERVED37 (AO_CTRL_BASE + 0x13B)
#define AO_SC_RESERVED38 (AO_CTRL_BASE + 0x13B)
#define AO_SC_ALWAYSON_SYS_CTRL0 (AO_CTRL_BASE + 0x148)
#define AO_SC_ALWAYSON_SYS_CTRL1 (AO_CTRL_BASE + 0x148)
#define AO_SC_ALWAYSON_SYS_CTRL2 (AO_CTRL_BASE + 0x148)
#define AO_SC_ALWAYSON_SYS_CTRL3 (AO_CTRL_BASE + 0x148)
#define AO_SC_ALWAYSON_SYS_CTRL10 (AO_CTRL_BASE + 0x14A)
#define AO_SC_ALWAYSON_SYS_CTRL11 (AO_CTRL_BASE + 0x14A)
#define AO_SC_ALWAYSON_SYS_STAT0 (AO_CTRL_BASE + 0x14C)
#define AO_SC_ALWAYSON_SYS_STAT1 (AO_CTRL_BASE + 0x14C)
#define AO_SC_ALWAYSON_SYS_STAT2 (AO_CTRL_BASE + 0x14C)
#define AO_SC_ALWAYSON_SYS_STAT3 (AO_CTRL_BASE + 0x14C)
#define AO_SC_PWUP_TIME0 (AO_CTRL_BASE + 0x188)
#define AO_SC_PWUP_TIME1 (AO_CTRL_BASE + 0x188)
#define AO_SC_PWUP_TIME2 (AO_CTRL_BASE + 0x188)
#define AO_SC_PWUP_TIME3 (AO_CTRL_BASE + 0x188)
#define AO_SC_PWUP_TIME4 (AO_CTRL_BASE + 0x189)
#define AO_SC_PWUP_TIME5 (AO_CTRL_BASE + 0x189)
#define AO_SC_PWUP_TIME6 (AO_CTRL_BASE + 0x189)
#define AO_SC_PWUP_TIME7 (AO_CTRL_BASE + 0x189)
#define AO_SC_SECURITY_CTRL1 (AO_CTRL_BASE + 0x1C0)
#define AO_SC_SYSTEST_SLICER_CNT0 (AO_CTRL_BASE + 0x890)
#define AO_SC_SYSTEST_SLICER_CNT1 (AO_CTRL_BASE + 0x894)
#define AO_SC_SYS_CTRL0_MODE_NORMAL 0x004
#define AO_SC_SYS_CTRL0_MODE_MASK 0x007
#define AO_SC_SYS_CTRL1_AARM_WD_RST_CFG (1 << 0)
#define AO_SC_SYS_CTRL1_REMAP_SRAM_AARM (1 << 1)
#define AO_SC_SYS_CTRL1_EFUSEC_REMAP (1 << 2)
#define AO_SC_SYS_CTRL1_EXT_PLL_SEL (1 << 3)
#define AO_SC_SYS_CTRL1_MCU_WDG0_RSTMCU_CFG (1 << 4)
#define AO_SC_SYS_CTRL1_USIM0_HPD_DE_BOUNCE_CFG (1 << 6)
#define AO_SC_SYS_CTRL1_USIM0_HPD_OE_CFG (1 << 7)
#define AO_SC_SYS_CTRL1_USIM1_HPD_DE_BOUNCE_CFG (1 << 8)
#define AO_SC_SYS_CTRL1_USIM1_HPD_OE_CFG (1 << 9)
#define AO_SC_SYS_CTRL1_BUS_DFS_FORE_HD_CFG (1 << 10)
#define AO_SC_SYS_CTRL1_BUS_DFS_FORE_HD_CFG1 (1 << 11)
#define AO_SC_SYS_CTRL1_USIM0_HPD_OE_SFT (1 << 12)
#define AO_SC_SYS_CTRL1_USIM1_HPD_OE_SFT (1 << 13)
#define AO_SC_SYS_CTRL1_MCU_CLKEN_HARDCFG (1 << 15)
#define AO_SC_SYS_CTRL1_AARM_WD_RST_CFG_MSK (1 << 16)
#define AO_SC_SYS_CTRL1_REMAP_SRAM_AARM_MSK (1 << 17)
#define AO_SC_SYS_CTRL1_EFUSEC_REMAP_MSK (1 << 18)
#define AO_SC_SYS_CTRL1_EXT_PLL_SEL_MSK (1 << 19)
#define AO_SC_SYS_CTRL1_MCU_WDG0_RSTMCU_CFG_MSK (1 << 20)
#define AO_SC_SYS_CTRL1_USIM0_HPD_DE_BOUNCE_CFG_MSK (1 << 22)
#define AO_SC_SYS_CTRL1_USIM0_HPD_OE_CFG_MSK (1 << 23)
#define AO_SC_SYS_CTRL1_USIM1_HPD_DE_BOUNCE_CFG_MSK (1 << 24)
#define AO_SC_SYS_CTRL1_USIM1_HPD_OE_CFG_MSK (1 << 25)
#define AO_SC_SYS_CTRL1_BUS_DFS_FORE_HD_CFG_MSK (1 << 26)
#define AO_SC_SYS_CTRL1_BUS_DFS_FORE_HD_CFG1_MSK (1 << 27)
#define AO_SC_SYS_CTRL1_USIM0_HPD_OE_SFT_MSK (1 << 28)
#define AO_SC_SYS_CTRL1_USIM1_HPD_OE_SFT_MSK (1 << 29)
#define AO_SC_SYS_CTRL1_MCU_CLKEN_HARDCFG_MSK (1 << 31)
#define AO_SC_SYS_CTRL2_MCU_SFT_RST_STAT_CLEAR (1 << 26)
#define AO_SC_SYS_CTRL2_MCU_WDG0_RST_STAT_CLEAR (1 << 27)
#define AO_SC_SYS_CTRL2_TSENSOR_RST_STAT_CLEAR (1 << 28)
#define AO_SC_SYS_CTRL2_ACPU_WDG_RST_STAT_CLEAR (1 << 29)
#define AO_SC_SYS_CTRL2_MCU_WDG1_RST_STAT_CLEAR (1 << 30)
#define AO_SC_SYS_CTRL2_GLB_SRST_STAT_CLEAR (1 << 31)
#define AO_SC_SYS_STAT0_MCU_RST_STAT (1 << 25)
#define AO_SC_SYS_STAT0_MCU_SOFTRST_STAT (1 << 26)
#define AO_SC_SYS_STAT0_MCU_WDGRST_STAT (1 << 27)
#define AO_SC_SYS_STAT0_TSENSOR_HARDRST_STAT (1 << 28)
#define AO_SC_SYS_STAT0_ACPU_WD_GLB_RST_STAT (1 << 29)
#define AO_SC_SYS_STAT0_CM3_WDG1_RST_STAT (1 << 30)
#define AO_SC_SYS_STAT0_GLB_SRST_STAT (1 << 31)
#define AO_SC_SYS_STAT1_MODE_STATUS (1 << 0)
#define AO_SC_SYS_STAT1_BOOT_SEL_LOCK (1 << 16)
#define AO_SC_SYS_STAT1_FUNC_MODE_LOCK (1 << 17)
#define AO_SC_SYS_STAT1_BOOT_MODE_LOCK (1 << 19)
#define AO_SC_SYS_STAT1_FUN_JTAG_MODE_OUT (1 << 20)
#define AO_SC_SYS_STAT1_SECURITY_BOOT_FLG (1 << 27)
#define AO_SC_SYS_STAT1_EFUSE_NANDBOOT_MSK (1 << 28)
#define AO_SC_SYS_STAT1_EFUSE_NAND_BITWIDE (1 << 29)
#define AO_SC_PERIPH_RSTDIS4_RESET_MCU_ECTR_N (1 << 0)
#define AO_SC_PERIPH_RSTDIS4_RESET_MCU_SYS_N (1 << 1)
#define AO_SC_PERIPH_RSTDIS4_RESET_MCU_POR_N (1 << 2)
#define AO_SC_PERIPH_RSTDIS4_RESET_MCU_DAP_N (1 << 3)
#define AO_SC_PERIPH_RSTDIS4_PRESET_CM3_TIMER0_N (1 << 4)
#define AO_SC_PERIPH_RSTDIS4_PRESET_CM3_TIMER1_N (1 << 5)
#define AO_SC_PERIPH_RSTDIS4_PRESET_CM3_WDT0_N (1 << 6)
#define AO_SC_PERIPH_RSTDIS4_PRESET_CM3_WDT1_N (1 << 7)
#define AO_SC_PERIPH_RSTDIS4_HRESET_IPC_S_N (1 << 8)
#define AO_SC_PERIPH_RSTDIS4_HRESET_IPC_NS_N (1 << 9)
#define AO_SC_PERIPH_RSTDIS4_PRESET_EFUSEC_N (1 << 10)
#define AO_SC_PERIPH_RSTDIS4_PRESET_WDT0_N (1 << 12)
#define AO_SC_PERIPH_RSTDIS4_PRESET_WDT1_N (1 << 13)
#define AO_SC_PERIPH_RSTDIS4_PRESET_WDT2_N (1 << 14)
#define AO_SC_PERIPH_RSTDIS4_PRESET_TIMER0_N (1 << 15)
#define AO_SC_PERIPH_RSTDIS4_PRESET_TIMER1_N (1 << 16)
#define AO_SC_PERIPH_RSTDIS4_PRESET_TIMER2_N (1 << 17)
#define AO_SC_PERIPH_RSTDIS4_PRESET_TIMER3_N (1 << 18)
#define AO_SC_PERIPH_RSTDIS4_PRESET_TIMER4_N (1 << 19)
#define AO_SC_PERIPH_RSTDIS4_PRESET_TIMER5_N (1 << 20)
#define AO_SC_PERIPH_RSTDIS4_PRESET_TIMER6_N (1 << 21)
#define AO_SC_PERIPH_RSTDIS4_PRESET_TIMER7_N (1 << 22)
#define AO_SC_PERIPH_RSTDIS4_PRESET_TIMER8_N (1 << 23)
#define AO_SC_PERIPH_RSTDIS4_PRESET_UART0_N (1 << 24)
#define AO_SC_PERIPH_RSTDIS4_RESET_RTC0_N (1 << 25)
#define AO_SC_PERIPH_RSTDIS4_RESET_RTC1_N (1 << 26)
#define AO_SC_PERIPH_RSTDIS4_PRESET_PMUSSI_N (1 << 27)
#define AO_SC_PERIPH_RSTDIS4_RESET_JTAG_AUTH_N (1 << 28)
#define AO_SC_PERIPH_RSTDIS4_RESET_CS_DAPB_ON_N (1 << 29)
#define AO_SC_PERIPH_RSTDIS4_MDM_SUBSYS_GLB (1 << 30)
#define AO_SC_PERIPH_CLKEN4_HCLK_MCU (1 << 0)
#define AO_SC_PERIPH_CLKEN4_CLK_MCU_DAP (1 << 3)
#define AO_SC_PERIPH_CLKEN4_PCLK_CM3_TIMER0 (1 << 4)
#define AO_SC_PERIPH_CLKEN4_PCLK_CM3_TIMER1 (1 << 5)
#define AO_SC_PERIPH_CLKEN4_PCLK_CM3_WDT0 (1 << 6)
#define AO_SC_PERIPH_CLKEN4_PCLK_CM3_WDT1 (1 << 7)
#define AO_SC_PERIPH_CLKEN4_HCLK_IPC_S (1 << 8)
#define AO_SC_PERIPH_CLKEN4_HCLK_IPC_NS (1 << 9)
#define AO_SC_PERIPH_CLKEN4_PCLK_EFUSEC (1 << 10)
#define AO_SC_PERIPH_CLKEN4_PCLK_TZPC (1 << 11)
#define AO_SC_PERIPH_CLKEN4_PCLK_WDT0 (1 << 12)
#define AO_SC_PERIPH_CLKEN4_PCLK_WDT1 (1 << 13)
#define AO_SC_PERIPH_CLKEN4_PCLK_WDT2 (1 << 14)
#define AO_SC_PERIPH_CLKEN4_PCLK_TIMER0 (1 << 15)
#define AO_SC_PERIPH_CLKEN4_PCLK_TIMER1 (1 << 16)
#define AO_SC_PERIPH_CLKEN4_PCLK_TIMER2 (1 << 17)
#define AO_SC_PERIPH_CLKEN4_PCLK_TIMER3 (1 << 18)
#define AO_SC_PERIPH_CLKEN4_PCLK_TIMER4 (1 << 19)
#define AO_SC_PERIPH_CLKEN4_PCLK_TIMER5 (1 << 20)
#define AO_SC_PERIPH_CLKEN4_PCLK_TIMER6 (1 << 21)
#define AO_SC_PERIPH_CLKEN4_PCLK_TIMER7 (1 << 22)
#define AO_SC_PERIPH_CLKEN4_PCLK_TIMER8 (1 << 23)
#define AO_SC_PERIPH_CLKEN4_CLK_UART0 (1 << 24)
#define AO_SC_PERIPH_CLKEN4_CLK_RTC0 (1 << 25)
#define AO_SC_PERIPH_CLKEN4_CLK_RTC1 (1 << 26)
#define AO_SC_PERIPH_CLKEN4_PCLK_PMUSSI (1 << 27)
#define AO_SC_PERIPH_CLKEN4_CLK_JTAG_AUTH (1 << 28)
#define AO_SC_PERIPH_CLKEN4_CLK_CS_DAPB_ON (1 << 29)
#define AO_SC_PERIPH_CLKEN4_CLK_PDM (1 << 30)
#define AO_SC_PERIPH_CLKEN4_CLK_SSI_PAD (1 << 31)
#define AO_SC_PERIPH_CLKEN5_PCLK_PMUSSI_CCPU (1 << 0)
#define AO_SC_PERIPH_CLKEN5_PCLK_EFUSEC_CCPU (1 << 1)
#define AO_SC_PERIPH_CLKEN5_HCLK_IPC_CCPU (1 << 2)
#define AO_SC_PERIPH_CLKEN5_HCLK_IPC_NS_CCPU (1 << 3)
#define AO_SC_PERIPH_CLKEN5_PCLK_PMUSSI_MCU (1 << 16)
#define AO_SC_PERIPH_CLKEN5_PCLK_EFUSEC_MCU (1 << 17)
#define AO_SC_PERIPH_CLKEN5_HCLK_IPC_MCU (1 << 18)
#define AO_SC_PERIPH_CLKEN5_HCLK_IPC_NS_MCU (1 << 19)
#define AO_SC_MCU_SUBSYS_CTRL3_RCLK_3 0x003
#define AO_SC_MCU_SUBSYS_CTRL3_RCLK_MASK 0x007
#define AO_SC_MCU_SUBSYS_CTRL3_CSSYS_CTRL_PROT (1 << 3)
#define AO_SC_MCU_SUBSYS_CTRL3_TCXO_AFC_OEN_CRG (1 << 4)
#define AO_SC_MCU_SUBSYS_CTRL3_AOB_IO_SEL18_USIM1 (1 << 8)
#define AO_SC_MCU_SUBSYS_CTRL3_AOB_IO_SEL18_USIM0 (1 << 9)
#define AO_SC_MCU_SUBSYS_CTRL3_AOB_IO_SEL18_SD (1 << 10)
#define AO_SC_MCU_SUBSYS_CTRL3_MCU_SUBSYS_CTRL3_RESERVED (1 << 11)
#define PCLK_TIMER1 (1 << 16)
#define PCLK_TIMER0 (1 << 15)
#endif /* __HI6220_AO_H__ */

View File

@ -0,0 +1,380 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __HI6220_PERI_H__
#define __HI6220_PERI_H__
#define PERI_BASE 0xF7030000
#define PERI_SC_PERIPH_CTRL1 (PERI_BASE + 0x000)
#define PERI_SC_PERIPH_CTRL2 (PERI_BASE + 0x004)
#define PERI_SC_PERIPH_CTRL3 (PERI_BASE + 0x008)
#define PERI_SC_PERIPH_CTRL4 (PERI_BASE + 0x00c)
#define PERI_SC_PERIPH_CTRL5 (PERI_BASE + 0x010)
#define PERI_SC_PERIPH_CTRL6 (PERI_BASE + 0x014)
#define PERI_SC_PERIPH_CTRL8 (PERI_BASE + 0x018)
#define PERI_SC_PERIPH_CTRL9 (PERI_BASE + 0x01c)
#define PERI_SC_PERIPH_CTRL10 (PERI_BASE + 0x020)
#define PERI_SC_PERIPH_CTRL12 (PERI_BASE + 0x024)
#define PERI_SC_PERIPH_CTRL13 (PERI_BASE + 0x028)
#define PERI_SC_PERIPH_CTRL14 (PERI_BASE + 0x02c)
#define PERI_SC_DDR_CTRL0 (PERI_BASE + 0x050)
#define PERI_SC_PERIPH_STAT1 (PERI_BASE + 0x094)
#define PERI_SC_PERIPH_CLKEN0 (PERI_BASE + 0x200)
#define PERI_SC_PERIPH_CLKDIS0 (PERI_BASE + 0x204)
#define PERI_SC_PERIPH_CLKSTAT0 (PERI_BASE + 0x208)
#define PERI_SC_PERIPH_CLKEN1 (PERI_BASE + 0x210)
#define PERI_SC_PERIPH_CLKDIS1 (PERI_BASE + 0x214)
#define PERI_SC_PERIPH_CLKSTAT1 (PERI_BASE + 0x218)
#define PERI_SC_PERIPH_CLKEN2 (PERI_BASE + 0x220)
#define PERI_SC_PERIPH_CLKDIS2 (PERI_BASE + 0x224)
#define PERI_SC_PERIPH_CLKSTAT2 (PERI_BASE + 0x228)
#define PERI_SC_PERIPH_CLKEN3 (PERI_BASE + 0x230)
#define PERI_SC_PERIPH_CLKDIS3 (PERI_BASE + 0x234)
#define PERI_SC_PERIPH_CLKSTAT3 (PERI_BASE + 0x238)
#define PERI_SC_PERIPH_CLKEN8 (PERI_BASE + 0x240)
#define PERI_SC_PERIPH_CLKDIS8 (PERI_BASE + 0x244)
#define PERI_SC_PERIPH_CLKSTAT8 (PERI_BASE + 0x248)
#define PERI_SC_PERIPH_CLKEN9 (PERI_BASE + 0x250)
#define PERI_SC_PERIPH_CLKDIS9 (PERI_BASE + 0x254)
#define PERI_SC_PERIPH_CLKSTAT9 (PERI_BASE + 0x258)
#define PERI_SC_PERIPH_CLKEN10 (PERI_BASE + 0x260)
#define PERI_SC_PERIPH_CLKDIS10 (PERI_BASE + 0x264)
#define PERI_SC_PERIPH_CLKSTAT10 (PERI_BASE + 0x268)
#define PERI_SC_PERIPH_CLKEN12 (PERI_BASE + 0x270)
#define PERI_SC_PERIPH_CLKDIS12 (PERI_BASE + 0x274)
#define PERI_SC_PERIPH_CLKSTAT12 (PERI_BASE + 0x278)
#define PERI_SC_PERIPH_RSTEN0 (PERI_BASE + 0x300)
#define PERI_SC_PERIPH_RSTDIS0 (PERI_BASE + 0x304)
#define PERI_SC_PERIPH_RSTSTAT0 (PERI_BASE + 0x308)
#define PERI_SC_PERIPH_RSTEN1 (PERI_BASE + 0x310)
#define PERI_SC_PERIPH_RSTDIS1 (PERI_BASE + 0x314)
#define PERI_SC_PERIPH_RSTSTAT1 (PERI_BASE + 0x318)
#define PERI_SC_PERIPH_RSTEN2 (PERI_BASE + 0x320)
#define PERI_SC_PERIPH_RSTDIS2 (PERI_BASE + 0x324)
#define PERI_SC_PERIPH_RSTSTAT2 (PERI_BASE + 0x328)
#define PERI_SC_PERIPH_RSTEN3 (PERI_BASE + 0x330)
#define PERI_SC_PERIPH_RSTDIS3 (PERI_BASE + 0x334)
#define PERI_SC_PERIPH_RSTSTAT3 (PERI_BASE + 0x338)
#define PERI_SC_PERIPH_RSTEN8 (PERI_BASE + 0x340)
#define PERI_SC_PERIPH_RSTDIS8 (PERI_BASE + 0x344)
#define PERI_SC_PERIPH_RSTSTAT8 (PERI_BASE + 0x338)
#define PERI_SC_CLK_SEL0 (PERI_BASE + 0x400)
#define PERI_SC_CLKCFG8BIT1 (PERI_BASE + 0x494)
#define PERI_SC_CLKCFG8BIT2 (PERI_BASE + 0x498)
#define PERI_SC_RESERVED8_ADDR (PERI_BASE + 0xd04)
/* PERI_SC_PERIPH_CTRL1 */
#define PERI_CTRL1_ETR_AXI_CSYSREQ_N (1 << 0)
#define PERI_CTRL1_ETR_AXI_CSYSREQ_N (1 << 0)
#define PERI_CTRL1_HIFI_INT_MASK (1 << 1)
#define PERI_CTRL1_HIFI_ALL_INT_MASK (1 << 2)
#define PERI_CTRL1_ETR_AXI_CSYSREQ_N_MSK (1 << 16)
#define PERI_CTRL1_HIFI_INT_MASK_MSK (1 << 17)
#define PERI_CTRL1_HIFI_ALL_INT_MASK_MSK (1 << 18)
/* PERI_SC_PERIPH_CTRL2 */
#define PERI_CTRL2_MMC_CLK_PHASE_BYPASS_EN_MMC0 (1 << 0)
#define PERI_CTRL2_MMC_CLK_PHASE_BYPASS_EN_MMC1 (1 << 2)
#define PERI_CTRL2_NAND_SYS_MEM_SEL (1 << 6)
#define PERI_CTRL2_G3D_DDRT_AXI_SEL (1 << 7)
#define PERI_CTRL2_GU_MDM_BBP_TESTPIN_SEL (1 << 8)
#define PERI_CTRL2_CODEC_SSI_MASTER_CHECK (1 << 9)
#define PERI_CTRL2_FUNC_TEST_SOFT (1 << 12)
#define PERI_CTRL2_CSSYS_TS_ENABLE (1 << 15)
#define PERI_CTRL2_HIFI_RAMCTRL_S_EMA (1 << 16)
#define PERI_CTRL2_HIFI_RAMCTRL_S_EMAW (1 << 20)
#define PERI_CTRL2_HIFI_RAMCTRL_S_EMAS (1 << 22)
#define PERI_CTRL2_HIFI_RAMCTRL_S_RET1N (1 << 26)
#define PERI_CTRL2_HIFI_RAMCTRL_S_RET2N (1 << 27)
#define PERI_CTRL2_HIFI_RAMCTRL_S_PGEN (1 << 28)
/* PERI_SC_PERIPH_CTRL3 */
#define PERI_CTRL3_HIFI_DDR_HARQMEM_ADDR (1 << 0)
#define PERI_CTRL3_HIFI_HARQMEMRMP_EN (1 << 12)
#define PERI_CTRL3_HARQMEM_SYS_MED_SEL (1 << 13)
#define PERI_CTRL3_SOC_AP_OCCUPY_GRP1 (1 << 14)
#define PERI_CTRL3_SOC_AP_OCCUPY_GRP2 (1 << 16)
#define PERI_CTRL3_SOC_AP_OCCUPY_GRP3 (1 << 18)
#define PERI_CTRL3_SOC_AP_OCCUPY_GRP4 (1 << 20)
#define PERI_CTRL3_SOC_AP_OCCUPY_GRP5 (1 << 22)
#define PERI_CTRL3_SOC_AP_OCCUPY_GRP6 (1 << 24)
/* PERI_SC_PERIPH_CTRL4 */
#define PERI_CTRL4_PICO_FSELV (1 << 0)
#define PERI_CTRL4_FPGA_EXT_PHY_SEL (1 << 3)
#define PERI_CTRL4_PICO_REFCLKSEL (1 << 4)
#define PERI_CTRL4_PICO_SIDDQ (1 << 6)
#define PERI_CTRL4_PICO_SUSPENDM_SLEEPM (1 << 7)
#define PERI_CTRL4_PICO_OGDISABLE (1 << 8)
#define PERI_CTRL4_PICO_COMMONONN (1 << 9)
#define PERI_CTRL4_PICO_VBUSVLDEXT (1 << 10)
#define PERI_CTRL4_PICO_VBUSVLDEXTSEL (1 << 11)
#define PERI_CTRL4_PICO_VATESTENB (1 << 12)
#define PERI_CTRL4_PICO_SUSPENDM (1 << 14)
#define PERI_CTRL4_PICO_SLEEPM (1 << 15)
#define PERI_CTRL4_BC11_C (1 << 16)
#define PERI_CTRL4_BC11_B (1 << 17)
#define PERI_CTRL4_BC11_A (1 << 18)
#define PERI_CTRL4_BC11_GND (1 << 19)
#define PERI_CTRL4_BC11_FLOAT (1 << 20)
#define PERI_CTRL4_OTG_PHY_SEL (1 << 21)
#define PERI_CTRL4_USB_OTG_SS_SCALEDOWN_MODE (1 << 22)
#define PERI_CTRL4_OTG_DM_PULLDOWN (1 << 24)
#define PERI_CTRL4_OTG_DP_PULLDOWN (1 << 25)
#define PERI_CTRL4_OTG_IDPULLUP (1 << 26)
#define PERI_CTRL4_OTG_DRVBUS (1 << 27)
#define PERI_CTRL4_OTG_SESSEND (1 << 28)
#define PERI_CTRL4_OTG_BVALID (1 << 29)
#define PERI_CTRL4_OTG_AVALID (1 << 30)
#define PERI_CTRL4_OTG_VBUSVALID (1 << 31)
/* PERI_SC_PERIPH_CTRL5 */
#define PERI_CTRL5_USBOTG_RES_SEL (1 << 3)
#define PERI_CTRL5_PICOPHY_ACAENB (1 << 4)
#define PERI_CTRL5_PICOPHY_BC_MODE (1 << 5)
#define PERI_CTRL5_PICOPHY_CHRGSEL (1 << 6)
#define PERI_CTRL5_PICOPHY_VDATSRCEND (1 << 7)
#define PERI_CTRL5_PICOPHY_VDATDETENB (1 << 8)
#define PERI_CTRL5_PICOPHY_DCDENB (1 << 9)
#define PERI_CTRL5_PICOPHY_IDDIG (1 << 10)
#define PERI_CTRL5_DBG_MUX (1 << 11)
/* PERI_SC_PERIPH_CTRL6 */
#define PERI_CTRL6_CSSYSOFF_RAMCTRL_S_EMA (1 << 0)
#define PERI_CTRL6_CSSYSOFF_RAMCTRL_S_EMAW (1 << 4)
#define PERI_CTRL6_CSSYSOFF_RAMCTRL_S_EMAS (1 << 6)
#define PERI_CTRL6_CSSYSOFF_RAMCTRL_S_RET1N (1 << 10)
#define PERI_CTRL6_CSSYSOFF_RAMCTRL_S_RET2N (1 << 11)
#define PERI_CTRL6_CSSYSOFF_RAMCTRL_S_PGEN (1 << 12)
/* PERI_SC_PERIPH_CTRL8 */
#define PERI_CTRL8_PICOPHY_TXRISETUNE0 (1 << 0)
#define PERI_CTRL8_PICOPHY_TXPREEMPAMPTUNE0 (1 << 2)
#define PERI_CTRL8_PICOPHY_TXRESTUNE0 (1 << 4)
#define PERI_CTRL8_PICOPHY_TXHSSVTUNE0 (1 << 6)
#define PERI_CTRL8_PICOPHY_COMPDISTUNE0 (1 << 8)
#define PERI_CTRL8_PICOPHY_TXPREEMPPULSETUNE0 (1 << 11)
#define PERI_CTRL8_PICOPHY_OTGTUNE0 (1 << 12)
#define PERI_CTRL8_PICOPHY_SQRXTUNE0 (1 << 16)
#define PERI_CTRL8_PICOPHY_TXVREFTUNE0 (1 << 20)
#define PERI_CTRL8_PICOPHY_TXFSLSTUNE0 (1 << 28)
/* PERI_SC_PERIPH_CTRL9 */
#define PERI_CTRL9_PICOPLY_TESTCLKEN (1 << 0)
#define PERI_CTRL9_PICOPLY_TESTDATAOUTSEL (1 << 1)
#define PERI_CTRL9_PICOPLY_TESTADDR (1 << 4)
#define PERI_CTRL9_PICOPLY_TESTDATAIN (1 << 8)
/*
* PERI_SC_PERIPH_CLKEN0
* PERI_SC_PERIPH_CLKDIS0
* PERI_SC_PERIPH_CLKSTAT0
*/
#define PERI_CLK0_MMC0 (1 << 0)
#define PERI_CLK0_MMC1 (1 << 1)
#define PERI_CLK0_MMC2 (1 << 2)
#define PERI_CLK0_NANDC (1 << 3)
#define PERI_CLK0_USBOTG (1 << 4)
#define PERI_CLK0_PICOPHY (1 << 5)
#define PERI_CLK0_PLL (1 << 6)
/*
* PERI_SC_PERIPH_CLKEN1
* PERI_SC_PERIPH_CLKDIS1
* PERI_SC_PERIPH_CLKSTAT1
*/
#define PERI_CLK1_HIFI (1 << 0)
#define PERI_CLK1_DIGACODEC (1 << 5)
/*
* PERI_SC_PERIPH_CLKEN2
* PERI_SC_PERIPH_CLKDIS2
* PERI_SC_PERIPH_CLKSTAT2
*/
#define PERI_CLK2_IPF (1 << 0)
#define PERI_CLK2_SOCP (1 << 1)
#define PERI_CLK2_DMAC (1 << 2)
#define PERI_CLK2_SECENG (1 << 3)
#define PERI_CLK2_HPM0 (1 << 5)
#define PERI_CLK2_HPM1 (1 << 6)
#define PERI_CLK2_HPM2 (1 << 7)
#define PERI_CLK2_HPM3 (1 << 8)
/*
* PERI_SC_PERIPH_CLKEN3
* PERI_SC_PERIPH_CLKDIS3
* PERI_SC_PERIPH_CLKSTAT3
*/
#define PERI_CLK3_CSSYS (1 << 0)
#define PERI_CLK3_I2C0 (1 << 1)
#define PERI_CLK3_I2C1 (1 << 2)
#define PERI_CLK3_I2C2 (1 << 3)
#define PERI_CLK3_I2C3 (1 << 4)
#define PERI_CLK3_UART1 (1 << 5)
#define PERI_CLK3_UART2 (1 << 6)
#define PERI_CLK3_UART3 (1 << 7)
#define PERI_CLK3_UART4 (1 << 8)
#define PERI_CLK3_SSP (1 << 9)
#define PERI_CLK3_PWM (1 << 10)
#define PERI_CLK3_BLPWM (1 << 11)
#define PERI_CLK3_TSENSOR (1 << 12)
#define PERI_CLK3_GPS (1 << 15)
#define PERI_CLK3_TCXO_PAD0 (1 << 16)
#define PERI_CLK3_TCXO_PAD1 (1 << 17)
#define PERI_CLK3_DAPB (1 << 18)
#define PERI_CLK3_HKADC (1 << 19)
#define PERI_CLK3_CODEC_SSI (1 << 20)
#define PERI_CLK3_TZPC_DEP (1 << 21)
/*
* PERI_SC_PERIPH_CLKEN8
* PERI_SC_PERIPH_CLKDIS8
* PERI_SC_PERIPH_CLKSTAT8
*/
#define PERI_CLK8_RS0 (1 << 0)
#define PERI_CLK8_RS2 (1 << 1)
#define PERI_CLK8_RS3 (1 << 2)
#define PERI_CLK8_MS0 (1 << 3)
#define PERI_CLK8_MS2 (1 << 5)
#define PERI_CLK8_XG2RAM0 (1 << 6)
#define PERI_CLK8_X2SRAM (1 << 7)
#define PERI_CLK8_SRAM (1 << 8)
#define PERI_CLK8_ROM (1 << 9)
#define PERI_CLK8_HARQ (1 << 10)
#define PERI_CLK8_MMU (1 << 11)
#define PERI_CLK8_DDRC (1 << 12)
#define PERI_CLK8_DDRPHY (1 << 13)
#define PERI_CLK8_DDRPHY_REF (1 << 14)
#define PERI_CLK8_X2X_SYSNOC (1 << 15)
#define PERI_CLK8_X2X_CCPU (1 << 16)
#define PERI_CLK8_DDRT (1 << 17)
#define PERI_CLK8_DDRPACK_RS (1 << 18)
/*
* PERI_SC_PERIPH_CLKEN9
* PERI_SC_PERIPH_CLKDIS9
* PERI_SC_PERIPH_CLKSTAT9
*/
#define PERI_CLK9_CARM_DAP (1 << 0)
#define PERI_CLK9_CARM_ATB (1 << 1)
#define PERI_CLK9_CARM_LBUS (1 << 2)
#define PERI_CLK9_CARM_KERNEL (1 << 3)
/*
* PERI_SC_PERIPH_CLKEN10
* PERI_SC_PERIPH_CLKDIS10
* PERI_SC_PERIPH_CLKSTAT10
*/
#define PERI_CLK10_IPF_CCPU (1 << 0)
#define PERI_CLK10_SOCP_CCPU (1 << 1)
#define PERI_CLK10_SECENG_CCPU (1 << 2)
#define PERI_CLK10_HARQ_CCPU (1 << 3)
#define PERI_CLK10_IPF_MCU (1 << 16)
#define PERI_CLK10_SOCP_MCU (1 << 17)
#define PERI_CLK10_SECENG_MCU (1 << 18)
#define PERI_CLK10_HARQ_MCU (1 << 19)
/*
* PERI_SC_PERIPH_CLKEN12
* PERI_SC_PERIPH_CLKDIS12
* PERI_SC_PERIPH_CLKSTAT12
*/
#define PERI_CLK12_HIFI_SRC (1 << 0)
#define PERI_CLK12_MMC0_SRC (1 << 1)
#define PERI_CLK12_MMC1_SRC (1 << 2)
#define PERI_CLK12_MMC2_SRC (1 << 3)
#define PERI_CLK12_SYSPLL_DIV (1 << 4)
#define PERI_CLK12_TPIU_SRC (1 << 5)
#define PERI_CLK12_MMC0_HF (1 << 6)
#define PERI_CLK12_MMC1_HF (1 << 7)
#define PERI_CLK12_PLL_TEST_SRC (1 << 8)
#define PERI_CLK12_CODEC_SOC (1 << 9)
#define PERI_CLK12_MEDIA (1 << 10)
/*
* PERI_SC_PERIPH_RSTEN0
* PERI_SC_PERIPH_RSTDIS0
* PERI_SC_PERIPH_RSTSTAT0
*/
#define PERI_RST0_MMC0 (1 << 0)
#define PERI_RST0_MMC1 (1 << 1)
#define PERI_RST0_MMC2 (1 << 2)
#define PERI_RST0_NANDC (1 << 3)
#define PERI_RST0_USBOTG_BUS (1 << 4)
#define PERI_RST0_POR_PICOPHY (1 << 5)
#define PERI_RST0_USBOTG (1 << 6)
#define PERI_RST0_USBOTG_32K (1 << 7)
/*
* PERI_SC_PERIPH_RSTEN1
* PERI_SC_PERIPH_RSTDIS1
* PERI_SC_PERIPH_RSTSTAT1
*/
#define PERI_RST1_HIFI (1 << 0)
#define PERI_RST1_DIGACODEC (1 << 5)
/*
* PERI_SC_PERIPH_RSTEN2
* PERI_SC_PERIPH_RSTDIS2
* PERI_SC_PERIPH_RSTSTAT2
*/
#define PERI_RST2_IPF (1 << 0)
#define PERI_RST2_SOCP (1 << 1)
#define PERI_RST2_DMAC (1 << 2)
#define PERI_RST2_SECENG (1 << 3)
#define PERI_RST2_ABB (1 << 4)
#define PERI_RST2_HPM0 (1 << 5)
#define PERI_RST2_HPM1 (1 << 6)
#define PERI_RST2_HPM2 (1 << 7)
#define PERI_RST2_HPM3 (1 << 8)
/*
* PERI_SC_PERIPH_RSTEN3
* PERI_SC_PERIPH_RSTDIS3
* PERI_SC_PERIPH_RSTSTAT3
*/
#define PERI_RST3_CSSYS (1 << 0)
#define PERI_RST3_I2C0 (1 << 1)
#define PERI_RST3_I2C1 (1 << 2)
#define PERI_RST3_I2C2 (1 << 3)
#define PERI_RST3_I2C3 (1 << 4)
#define PERI_RST3_UART1 (1 << 5)
#define PERI_RST3_UART2 (1 << 6)
#define PERI_RST3_UART3 (1 << 7)
#define PERI_RST3_UART4 (1 << 8)
#define PERI_RST3_SSP (1 << 9)
#define PERI_RST3_PWM (1 << 10)
#define PERI_RST3_BLPWM (1 << 11)
#define PERI_RST3_TSENSOR (1 << 12)
#define PERI_RST3_DAPB (1 << 18)
#define PERI_RST3_HKADC (1 << 19)
#define PERI_RST3_CODEC (1 << 20)
/*
* PERI_SC_PERIPH_RSTEN8
* PERI_SC_PERIPH_RSTDIS8
* PERI_SC_PERIPH_RSTSTAT8
*/
#define PERI_RST8_RS0 (1 << 0)
#define PERI_RST8_RS2 (1 << 1)
#define PERI_RST8_RS3 (1 << 2)
#define PERI_RST8_MS0 (1 << 3)
#define PERI_RST8_MS2 (1 << 5)
#define PERI_RST8_XG2RAM0 (1 << 6)
#define PERI_RST8_X2SRAM_TZMA (1 << 7)
#define PERI_RST8_SRAM (1 << 8)
#define PERI_RST8_HARQ (1 << 10)
#define PERI_RST8_DDRC (1 << 12)
#define PERI_RST8_DDRC_APB (1 << 13)
#define PERI_RST8_DDRPACK_APB (1 << 14)
#define PERI_RST8_DDRT (1 << 17)
#endif /* __HI6220_PERI_H__ */

View File

@ -0,0 +1,43 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __HI6220_PIN_H__
#define __HI6220_PIN_H__
#define IOMG_BASE 0xF7010000
#define IOMG_SD_CLK (IOMG_BASE + 0x0C)
#define IOMG_SD_CMD (IOMG_BASE + 0x10)
#define IOMG_SD_DATA0 (IOMG_BASE + 0x14)
#define IOMG_SD_DATA1 (IOMG_BASE + 0x18)
#define IOMG_SD_DATA2 (IOMG_BASE + 0x1C)
#define IOMG_SD_DATA3 (IOMG_BASE + 0x20)
#define IOMG_GPIO24 (IOMG_BASE + 0x140)
#define IOMG_MUX_FUNC0 0
#define IOMG_MUX_FUNC1 1
#define IOMG_MUX_FUNC2 2
#define IOCG1_BASE 0xF7010800
#define IOCG2_BASE 0xF8001800
#define IOCG_SD_CLK (IOCG1_BASE + 0x0C)
#define IOCG_SD_CMD (IOCG1_BASE + 0x10)
#define IOCG_SD_DATA0 (IOCG1_BASE + 0x14)
#define IOCG_SD_DATA1 (IOCG1_BASE + 0x18)
#define IOCG_SD_DATA2 (IOCG1_BASE + 0x1C)
#define IOCG_SD_DATA3 (IOCG1_BASE + 0x20)
#define IOCG_GPIO24 (IOCG1_BASE + 0x150)
#define IOCG_GPIO8 (IOCG2_BASE + 0x30)
#define IOCG_DRIVE_8MA (2 << 4)
#define IOCG_DRIVE_10MA (3 << 4)
#define IOCG_INPUT_16MA 0x64
#define IOCG_INPUT_12MA 0x54
#define IOCG_PULLDOWN (1 << 1)
#define IOCG_PULLUP (1 << 0)
#endif /* __HI6220_PIN_H__ */

View File

@ -0,0 +1,101 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __HI6220_REGS_PMCTRL_H__
#define __HI6220_REGS_PMCTRL_H__
#define PMCTRL_BASE 0xF7032000
#define PMCTRL_ACPUPLLCTRL (PMCTRL_BASE + 0x000)
#define PMCTRL_ACPUPLLFREQ (PMCTRL_BASE + 0x004)
#define PMCTRL_DDRPLL1CTRL (PMCTRL_BASE + 0x010)
#define PMCTRL_DDRPLL0CTRL (PMCTRL_BASE + 0x030)
#define PMCTRL_MEDPLLCTRL (PMCTRL_BASE + 0x038)
#define PMCTRL_ACPUPLLSEL (PMCTRL_BASE + 0x100)
#define PMCTRL_ACPUCLKDIV (PMCTRL_BASE + 0x104)
#define PMCTRL_ACPUSYSPLLCFG (PMCTRL_BASE + 0x110)
#define PMCTRL_ACPUCLKOFFCFG (PMCTRL_BASE + 0x114)
#define PMCTRL_ACPUPLLFRAC (PMCTRL_BASE + 0x134)
#define PMCTRL_ACPUPMUVOLUPTIME (PMCTRL_BASE + 0x360)
#define PMCTRL_ACPUPMUVOLDNTIME (PMCTRL_BASE + 0x364)
#define PMCTRL_ACPUVOLPMUADDR (PMCTRL_BASE + 0x368)
#define PMCTRL_ACPUVOLUPSTEP (PMCTRL_BASE + 0x36c)
#define PMCTRL_ACPUVOLDNSTEP (PMCTRL_BASE + 0x370)
#define PMCTRL_ACPUDFTVOL (PMCTRL_BASE + 0x374)
#define PMCTRL_ACPUDESTVOL (PMCTRL_BASE + 0x378)
#define PMCTRL_ACPUVOLTTIMEOUT (PMCTRL_BASE + 0x37c)
#define PMCTRL_ACPUPLLCTRL_EN_CFG (1 << 0)
#define PMCTRL_ACPUCLKDIV_CPUEXT_CFG_MASK (3 << 0)
#define PMCTRL_ACPUCLKDIV_DDR_CFG_MASK (3 << 8)
#define PMCTRL_ACPUCLKDIV_CPUEXT_STAT_MASK (3 << 16)
#define PMCTRL_ACPUCLKDIV_DDR_STAT_MASK (3 << 24)
#define PMCTRL_ACPUPLLSEL_ACPUPLL_CFG (1 << 0)
#define PMCTRL_ACPUPLLSEL_ACPUPLL_STAT (1 << 1)
#define PMCTRL_ACPUPLLSEL_SYSPLL_STAT (1 << 2)
#define PMCTRL_ACPUSYSPLL_CLKDIV_CFG_MASK 0x7
#define PMCTRL_ACPUSYSPLL_CLKEN_CFG (1 << 4)
#define PMCTRL_ACPUSYSPLL_CLKDIV_SW (3 << 12)
#define PMCTRL_ACPUSYSPLLCFG_SYSPLL_CLKEN (1 << 4)
#define PMCTRL_ACPUSYSPLLCFG_CLKDIV_MASK (3 << 12)
#define PMCTRL_ACPUDESTVOL_DEST_VOL_MASK 0x7f
#define PMCTRL_ACPUDESTVOL_CURR_VOL_MASK (0x7f << 8)
#define SOC_PMCTRL_ACPUPLLCTRL_acpupll_en_cfg_START (0)
#define SOC_PMCTRL_ACPUPLLCTRL_acpupll_en_cfg_END (0)
#define SOC_PMCTRL_ACPUPLLCTRL_acpupll_rst_START (2)
#define SOC_PMCTRL_ACPUPLLCTRL_acpupll_rst_END (2)
#define SOC_PMCTRL_ACPUPLLCTRL_acpupll_time_START (4)
#define SOC_PMCTRL_ACPUPLLCTRL_acpupll_time_END (27)
#define SOC_PMCTRL_ACPUPLLCTRL_acpupll_timeout_START (28)
#define SOC_PMCTRL_ACPUPLLCTRL_acpupll_timeout_END (28)
#define SOC_PMCTRL_ACPUPLLCTRL_acpupll_lock_START (29)
#define SOC_PMCTRL_ACPUPLLCTRL_acpupll_lock_END (29)
#define SOC_PMCTRL_ACPUPLLFRAC_ADDR(base) ((base) + (0x134))
#define SOC_PMCTRL_ACPUSYSPLLCFG_acpu_subsys_clk_div_sw_START (12)
#define SOC_PMCTRL_ACPUPLLSEL_acpu_pllsw_cfg_START (0)
#define SOC_PMCTRL_ACPUPLLSEL_acpu_pllsw_cfg_END (0)
#define SOC_PMCTRL_ACPUPLLSEL_acpu_pllsw_stat_START (1)
#define SOC_PMCTRL_ACPUPLLSEL_acpu_pllsw_stat_END (1)
#define SOC_PMCTRL_ACPUPLLSEL_syspll_sw_stat_START (2)
#define SOC_PMCTRL_ACPUPLLSEL_syspll_sw_stat_END (2)
#define SOC_PMCTRL_ACPUCLKDIV_cpuext_clk_div_cfg_START (0)
#define SOC_PMCTRL_ACPUCLKDIV_cpuext_clk_div_cfg_END (1)
#define SOC_PMCTRL_ACPUCLKDIV_acpu_ddr_clk_div_cfg_START (8)
#define SOC_PMCTRL_ACPUCLKDIV_acpu_ddr_clk_div_cfg_END (9)
#define SOC_PMCTRL_ACPUCLKDIV_cpuext_clk_div_stat_START (16)
#define SOC_PMCTRL_ACPUCLKDIV_cpuext_clk_div_stat_END (17)
#define SOC_PMCTRL_ACPUCLKDIV_acpu_ddr_clk_div_stat_START (24)
#define SOC_PMCTRL_ACPUCLKDIV_acpu_ddr_clk_div_stat_END (25)
#define SOC_PMCTRL_ACPUDESTVOL_acpu_dest_vol_START (0)
#define SOC_PMCTRL_ACPUDESTVOL_acpu_dest_vol_END (6)
#define SOC_PMCTRL_ACPUDESTVOL_acpu_vol_using_START (8)
#define SOC_PMCTRL_ACPUDESTVOL_acpu_vol_using_END (14)
#define SOC_PMCTRL_ACPUVOLTIMEOUT_acpu_vol_timeout_START (0)
#define SOC_PMCTRL_ACPUVOLTIMEOUT_acpu_vol_timeout_END (0)
#define SOC_PMCTRL_ACPUSYSPLLCFG_acpu_syspll_div_cfg_START (0)
#define SOC_PMCTRL_ACPUSYSPLLCFG_acpu_syspll_div_cfg_END (2)
#define SOC_PMCTRL_ACPUSYSPLLCFG_acpu_syspll_clken_cfg_START (4)
#define SOC_PMCTRL_ACPUSYSPLLCFG_acpu_syspll_clken_cfg_END (4)
#define SOC_PMCTRL_ACPUSYSPLLCFG_acpu_subsys_clk_div_cfg_START (8)
#define SOC_PMCTRL_ACPUSYSPLLCFG_acpu_subsys_clk_div_cfg_END (9)
#define SOC_PMCTRL_ACPUSYSPLLCFG_acpu_syspll_div_stat_START (16)
#define SOC_PMCTRL_ACPUSYSPLLCFG_acpu_syspll_div_stat_END (19)
#define SOC_PMCTRL_ACPUSYSPLLCFG_acpu_syspll_clken_stat_START (20)
#define SOC_PMCTRL_ACPUSYSPLLCFG_acpu_syspll_clken_stat_END (20)
#endif /* __HI6220_REGS_PMCTRL_H__ */

View File

@ -0,0 +1,80 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __HI6553_H__
#define __HI6553_H__
#include <hi6220.h>
#include <mmio.h>
#define HI6553_DISABLE6_XO_CLK (PMUSSI_BASE + (0x036 << 2))
#define DISABLE6_XO_CLK_BB (1 << 0)
#define DISABLE6_XO_CLK_CONN (1 << 1)
#define DISABLE6_XO_CLK_NFC (1 << 2)
#define DISABLE6_XO_CLK_RF1 (1 << 3)
#define DISABLE6_XO_CLK_RF2 (1 << 4)
#define HI6553_VERSION_REG (PMUSSI_BASE + (0x000 << 2))
#define HI6553_ENABLE2_LDO1_8 (PMUSSI_BASE + (0x029 << 2))
#define HI6553_DISABLE2_LDO1_8 (PMUSSI_BASE + (0x02a << 2))
#define HI6553_ONOFF_STATUS2_LDO1_8 (PMUSSI_BASE + (0x02b << 2))
#define HI6553_ENABLE3_LDO9_16 (PMUSSI_BASE + (0x02c << 2))
#define HI6553_DISABLE3_LDO9_16 (PMUSSI_BASE + (0x02d << 2))
#define HI6553_ONOFF_STATUS3_LDO9_16 (PMUSSI_BASE + (0x02e << 2))
#define HI6553_ENABLE4_LDO17_22 (PMUSSI_BASE + (0x02f << 2))
#define HI6553_DISABLE4_LDO17_22 (PMUSSI_BASE + (0x030 << 2))
#define HI6553_ONOFF_STATUS4_LDO17_22 (PMUSSI_BASE + (0x031 << 2))
#define HI6553_PERI_EN_MARK (PMUSSI_BASE + (0x040 << 2))
#define HI6553_BUCK2_REG1 (PMUSSI_BASE + (0x04a << 2))
#define HI6553_BUCK2_REG5 (PMUSSI_BASE + (0x04e << 2))
#define HI6553_BUCK2_REG6 (PMUSSI_BASE + (0x04f << 2))
#define HI6553_BUCK3_REG3 (PMUSSI_BASE + (0x054 << 2))
#define HI6553_BUCK3_REG5 (PMUSSI_BASE + (0x056 << 2))
#define HI6553_BUCK3_REG6 (PMUSSI_BASE + (0x057 << 2))
#define HI6553_BUCK4_REG2 (PMUSSI_BASE + (0x05b << 2))
#define HI6553_BUCK4_REG5 (PMUSSI_BASE + (0x05e << 2))
#define HI6553_BUCK4_REG6 (PMUSSI_BASE + (0x05f << 2))
#define HI6553_CLK_TOP0 (PMUSSI_BASE + (0x063 << 2))
#define HI6553_CLK_TOP3 (PMUSSI_BASE + (0x066 << 2))
#define HI6553_CLK_TOP4 (PMUSSI_BASE + (0x067 << 2))
#define HI6553_VSET_BUCK2_ADJ (PMUSSI_BASE + (0x06d << 2))
#define HI6553_VSET_BUCK3_ADJ (PMUSSI_BASE + (0x06e << 2))
#define HI6553_LDO7_REG_ADJ (PMUSSI_BASE + (0x078 << 2))
#define HI6553_LDO10_REG_ADJ (PMUSSI_BASE + (0x07b << 2))
#define HI6553_LDO15_REG_ADJ (PMUSSI_BASE + (0x080 << 2))
#define HI6553_LDO19_REG_ADJ (PMUSSI_BASE + (0x084 << 2))
#define HI6553_LDO20_REG_ADJ (PMUSSI_BASE + (0x085 << 2))
#define HI6553_LDO21_REG_ADJ (PMUSSI_BASE + (0x086 << 2))
#define HI6553_LDO22_REG_ADJ (PMUSSI_BASE + (0x087 << 2))
#define HI6553_DR_LED_CTRL (PMUSSI_BASE + (0x098 << 2))
#define HI6553_DR_OUT_CTRL (PMUSSI_BASE + (0x099 << 2))
#define HI6553_DR3_ISET (PMUSSI_BASE + (0x09a << 2))
#define HI6553_DR3_START_DEL (PMUSSI_BASE + (0x09b << 2))
#define HI6553_DR4_ISET (PMUSSI_BASE + (0x09c << 2))
#define HI6553_DR4_START_DEL (PMUSSI_BASE + (0x09d << 2))
#define HI6553_DR345_TIM_CONF0 (PMUSSI_BASE + (0x0a0 << 2))
#define HI6553_NP_REG_ADJ1 (PMUSSI_BASE + (0x0be << 2))
#define HI6553_NP_REG_CHG (PMUSSI_BASE + (0x0c0 << 2))
#define HI6553_BUCK01_CTRL2 (PMUSSI_BASE + (0x0d9 << 2))
#define HI6553_BUCK0_CTRL1 (PMUSSI_BASE + (0x0dd << 2))
#define HI6553_BUCK0_CTRL5 (PMUSSI_BASE + (0x0e1 << 2))
#define HI6553_BUCK0_CTRL7 (PMUSSI_BASE + (0x0e3 << 2))
#define HI6553_BUCK1_CTRL1 (PMUSSI_BASE + (0x0e8 << 2))
#define HI6553_BUCK1_CTRL5 (PMUSSI_BASE + (0x0ec << 2))
#define HI6553_BUCK1_CTRL7 (PMUSSI_BASE + (0x0ef << 2))
#define HI6553_CLK19M2_600_586_EN (PMUSSI_BASE + (0x0fe << 2))
#define LED_START_DELAY_TIME 0x00
#define LED_ELEC_VALUE 0x07
#define LED_LIGHT_TIME 0xf0
#define LED_GREEN_ENABLE (1 << 1)
#define LED_OUT_CTRL 0x00
#define PMU_HI6552_V300 0x30
#define PMU_HI6552_V310 0x31
#endif /* __HI6553_H__ */

View File

@ -0,0 +1,79 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __PLAT_MACROS_S__
#define __PLAT_MACROS_S__
#include <cci.h>
#include <gic_v2.h>
#include <hi6220.h>
#include <platform_def.h>
.section .rodata.gic_reg_name, "aS"
gicc_regs:
.asciz "gicc_hppir", "gicc_ahppir", "gicc_ctlr", ""
gicd_pend_reg:
.asciz "gicd_ispendr regs (Offsets 0x200 - 0x278)\n" \
" Offset:\t\t\tvalue\n"
newline:
.asciz "\n"
spacer:
.asciz ":\t\t0x"
.section .rodata.cci_reg_name, "aS"
cci_iface_regs:
.asciz "cci_snoop_ctrl_cluster0", "cci_snoop_ctrl_cluster1" , ""
/* ---------------------------------------------
* The below macro prints out relevant GIC
* registers whenever an unhandled exception is
* taken in BL31.
* ---------------------------------------------
*/
.macro plat_crash_print_regs
mov_imm x16, PLAT_ARM_GICD_BASE
mov_imm x17, PLAT_ARM_GICC_BASE
/* Load the gicc reg list to x6 */
adr x6, gicc_regs
/* Load the gicc regs to gp regs used by str_in_crash_buf_print */
ldr w8, [x17, #GICC_HPPIR]
ldr w9, [x17, #GICC_AHPPIR]
ldr w10, [x17, #GICC_CTLR]
/* Store to the crash buf and print to cosole */
bl str_in_crash_buf_print
/* Print the GICD_ISPENDR regs */
add x7, x16, #GICD_ISPENDR
adr x4, gicd_pend_reg
bl asm_print_str
2:
sub x4, x7, x16
cmp x4, #0x280
b.eq 1f
bl asm_print_hex
adr x4, spacer
bl asm_print_str
ldr x4, [x7], #8
bl asm_print_hex
adr x4, newline
bl asm_print_str
b 2b
1:
adr x6, cci_iface_regs
/* Store in x7 the base address of the first interface */
mov_imm x7, (CCI400_BASE + SLAVE_IFACE_OFFSET( \
CCI400_SL_IFACE3_CLUSTER_IX))
ldr w8, [x7, #SNOOP_CTRL_REG]
/* Store in x7 the base address of the second interface */
mov_imm x7, (CCI400_BASE + SLAVE_IFACE_OFFSET( \
CCI400_SL_IFACE4_CLUSTER_IX))
ldr w9, [x7, #SNOOP_CTRL_REG]
/* Store to the crash buf and print to console */
bl str_in_crash_buf_print
.endm
#endif /* __PLAT_MACROS_S__ */

View File

@ -0,0 +1,136 @@
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __PLATFORM_DEF_H__
#define __PLATFORM_DEF_H__
#include <arch.h>
#include "../hikey_def.h"
/*
* Platform binary types for linking
*/
#define PLATFORM_LINKER_FORMAT "elf64-littleaarch64"
#define PLATFORM_LINKER_ARCH aarch64
/*
* Generic platform constants
*/
/* Size of cacheable stacks */
#define PLATFORM_STACK_SIZE 0x800
#define FIRMWARE_WELCOME_STR "Booting Trusted Firmware\n"
#define PLATFORM_CACHE_LINE_SIZE 64
#define PLATFORM_CLUSTER_COUNT 2
#define PLATFORM_CORE_COUNT_PER_CLUSTER 4
#define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER_COUNT * \
PLATFORM_CORE_COUNT_PER_CLUSTER)
#define PLAT_MAX_PWR_LVL MPIDR_AFFLVL2
#define PLAT_NUM_PWR_DOMAINS (PLATFORM_CORE_COUNT + \
PLATFORM_CLUSTER_COUNT + 1)
#define PLAT_MAX_RET_STATE 1
#define PLAT_MAX_OFF_STATE 2
#define MAX_IO_DEVICES 3
#define MAX_IO_HANDLES 4
/* eMMC RPMB and eMMC User Data */
#define MAX_IO_BLOCK_DEVICES 2
/* GIC related constants (no GICR in GIC-400) */
#define PLAT_ARM_GICD_BASE 0xF6801000
#define PLAT_ARM_GICC_BASE 0xF6802000
#define PLAT_ARM_GICH_BASE 0xF6804000
#define PLAT_ARM_GICV_BASE 0xF6806000
/*
* Platform memory map related constants
*/
/*
* BL1 is stored in XG2RAM0_HIRQ that is 784KB large (0xF980_0000~0xF98C_4000).
*/
#define ONCHIPROM_PARAM_BASE (XG2RAM0_BASE + 0x700)
#define LOADER_RAM_BASE (XG2RAM0_BASE + 0x800)
#define BL1_XG2RAM0_OFFSET 0x1000
/*
* BL1 specific defines.
*
* Both loader and BL1_RO region stay in SRAM since they are used to simulate
* ROM.
* Loader is used to switch Hi6220 SoC from 32-bit to 64-bit mode.
*
* ++++++++++ 0xF980_0000
* + loader +
* ++++++++++ 0xF980_1000
* + BL1_RO +
* ++++++++++ 0xF981_0000
* + BL1_RW +
* ++++++++++ 0xF989_8000
*/
#define BL1_RO_BASE (XG2RAM0_BASE + BL1_XG2RAM0_OFFSET)
#define BL1_RO_LIMIT (XG2RAM0_BASE + 0x10000)
#define BL1_RW_BASE (BL1_RO_LIMIT) /* 0xf981_0000 */
#define BL1_RW_SIZE (0x00088000)
#define BL1_RW_LIMIT (0xF9898000)
/*
* BL2 specific defines.
*/
#define BL2_BASE (BL1_RW_BASE + 0x8000) /* 0xf981_8000 */
#define BL2_LIMIT (BL2_BASE + 0x40000)
/*
* SCP_BL2 specific defines.
* In HiKey, SCP_BL2 means MCU firmware. It's loaded into the temporary buffer
* at 0x0100_0000. Then BL2 will parse the sections and loaded them into
* predefined separated buffers.
*/
#define SCP_BL2_BASE (DDR_BASE + 0x01000000)
#define SCP_BL2_LIMIT (SCP_BL2_BASE + 0x00100000)
#define SCP_BL2_SIZE (SCP_BL2_LIMIT - SCP_BL2_BASE)
/*
* BL31 specific defines.
*/
#define BL31_BASE BL2_LIMIT
#define BL31_LIMIT 0xF9898000
#define NS_BL1U_BASE (BL2_BASE)
#define NS_BL1U_SIZE (0x00010000)
#define NS_BL1U_LIMIT (NS_BL1U_BASE + NS_BL1U_SIZE)
/*
* Platform specific page table and MMU setup constants
*/
#define ADDR_SPACE_SIZE (1ull << 32)
#if IMAGE_BL1 || IMAGE_BL2 || IMAGE_BL31
#define MAX_XLAT_TABLES 3
#endif
#define MAX_MMAP_REGIONS 16
#define HIKEY_NS_IMAGE_OFFSET (DDR_BASE + 0x35000000)
/*
* Declarations and constants to access the mailboxes safely. Each mailbox is
* aligned on the biggest cache line size in the platform. This is known only
* to the platform as it might have a combination of integrated and external
* caches. Such alignment ensures that two maiboxes do not sit on the same cache
* line at any cache level. They could belong to different cpus/clusters &
* get written while being protected by different locks causing corruption of
* a valid mailbox address.
*/
#define CACHE_WRITEBACK_SHIFT 6
#define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT)
#endif /* __PLATFORM_DEF_H__ */

View File

@ -0,0 +1,43 @@
#
# Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
CONSOLE_BASE := PL011_UART3_BASE
CRASH_CONSOLE_BASE := PL011_UART3_BASE
PLAT_PL061_MAX_GPIOS := 160
COLD_BOOT_SINGLE_CPU := 1
PROGRAMMABLE_RESET_ADDRESS := 1
# Process flags
$(eval $(call add_define,CONSOLE_BASE))
$(eval $(call add_define,CRASH_CONSOLE_BASE))
$(eval $(call add_define,PLAT_PL061_MAX_GPIOS))
ENABLE_PLAT_COMPAT := 0
USE_COHERENT_MEM := 1
PLAT_INCLUDES := -Iinclude/common/tbbr \
-Iinclude/drivers/synopsys \
-Iplat/hisilicon/hikey/include
PLAT_BL_COMMON_SOURCES := drivers/arm/pl011/pl011_console.S \
lib/aarch64/xlat_tables.c \
plat/hisilicon/hikey/aarch64/hikey_common.c
BL1_SOURCES += bl1/tbbr/tbbr_img_desc.c \
drivers/arm/pl061/pl061_gpio.c \
drivers/arm/sp804/sp804_delay_timer.c \
drivers/delay_timer/delay_timer.c \
drivers/gpio/gpio.c \
drivers/io/io_block.c \
drivers/io/io_fip.c \
drivers/io/io_storage.c \
drivers/emmc/emmc.c \
drivers/synopsys/emmc/dw_mmc.c \
lib/cpus/aarch64/cortex_a53.S \
plat/hisilicon/hikey/aarch64/hikey_helpers.S \
plat/hisilicon/hikey/hikey_bl1_setup.c \
plat/hisilicon/hikey/hikey_io_storage.c