arm: imx: imx-common: init: move arch init common setup
Move common imx6 arch init setup, init.c can be extended and reused to support imx7 SoC keeping init arch common code. Signed-off-by: Adrian Alonso <aalonso@freescale.com>
This commit is contained in:
parent
ab09e72866
commit
50a082a88c
@ -183,65 +183,6 @@ u32 __weak get_board_rev(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
void init_aips(void)
|
||||
{
|
||||
struct aipstz_regs *aips1, *aips2;
|
||||
#ifdef CONFIG_MX6SX
|
||||
struct aipstz_regs *aips3;
|
||||
#endif
|
||||
|
||||
aips1 = (struct aipstz_regs *)AIPS1_BASE_ADDR;
|
||||
aips2 = (struct aipstz_regs *)AIPS2_BASE_ADDR;
|
||||
#ifdef CONFIG_MX6SX
|
||||
aips3 = (struct aipstz_regs *)AIPS3_CONFIG_BASE_ADDR;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Set all MPROTx to be non-bufferable, trusted for R/W,
|
||||
* not forced to user-mode.
|
||||
*/
|
||||
writel(0x77777777, &aips1->mprot0);
|
||||
writel(0x77777777, &aips1->mprot1);
|
||||
writel(0x77777777, &aips2->mprot0);
|
||||
writel(0x77777777, &aips2->mprot1);
|
||||
|
||||
/*
|
||||
* Set all OPACRx to be non-bufferable, not require
|
||||
* supervisor privilege level for access,allow for
|
||||
* write access and untrusted master access.
|
||||
*/
|
||||
writel(0x00000000, &aips1->opacr0);
|
||||
writel(0x00000000, &aips1->opacr1);
|
||||
writel(0x00000000, &aips1->opacr2);
|
||||
writel(0x00000000, &aips1->opacr3);
|
||||
writel(0x00000000, &aips1->opacr4);
|
||||
writel(0x00000000, &aips2->opacr0);
|
||||
writel(0x00000000, &aips2->opacr1);
|
||||
writel(0x00000000, &aips2->opacr2);
|
||||
writel(0x00000000, &aips2->opacr3);
|
||||
writel(0x00000000, &aips2->opacr4);
|
||||
|
||||
#ifdef CONFIG_MX6SX
|
||||
/*
|
||||
* Set all MPROTx to be non-bufferable, trusted for R/W,
|
||||
* not forced to user-mode.
|
||||
*/
|
||||
writel(0x77777777, &aips3->mprot0);
|
||||
writel(0x77777777, &aips3->mprot1);
|
||||
|
||||
/*
|
||||
* Set all OPACRx to be non-bufferable, not require
|
||||
* supervisor privilege level for access,allow for
|
||||
* write access and untrusted master access.
|
||||
*/
|
||||
writel(0x00000000, &aips3->opacr0);
|
||||
writel(0x00000000, &aips3->opacr1);
|
||||
writel(0x00000000, &aips3->opacr2);
|
||||
writel(0x00000000, &aips3->opacr3);
|
||||
writel(0x00000000, &aips3->opacr4);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void clear_ldo_ramp(void)
|
||||
{
|
||||
struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
|
||||
@ -375,22 +316,6 @@ static void set_preclk_from_osc(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#define SRC_SCR_WARM_RESET_ENABLE 0
|
||||
|
||||
static void init_src(void)
|
||||
{
|
||||
struct src *src_regs = (struct src *)SRC_BASE_ADDR;
|
||||
u32 val;
|
||||
|
||||
/*
|
||||
* force warm reset sources to generate cold reset
|
||||
* for a more reliable restart
|
||||
*/
|
||||
val = readl(&src_regs->scr);
|
||||
val &= ~(1 << SRC_SCR_WARM_RESET_ENABLE);
|
||||
writel(val, &src_regs->scr);
|
||||
}
|
||||
|
||||
int arch_cpu_init(void)
|
||||
{
|
||||
init_aips();
|
||||
@ -458,18 +383,6 @@ void imx_get_mac_from_fuse(int dev_id, unsigned char *mac)
|
||||
}
|
||||
#endif
|
||||
|
||||
void boot_mode_apply(unsigned cfg_val)
|
||||
{
|
||||
unsigned reg;
|
||||
struct src *psrc = (struct src *)SRC_BASE_ADDR;
|
||||
writel(cfg_val, &psrc->gpr9);
|
||||
reg = readl(&psrc->gpr10);
|
||||
if (cfg_val)
|
||||
reg |= 1 << 28;
|
||||
else
|
||||
reg &= ~(1 << 28);
|
||||
writel(reg, &psrc->gpr10);
|
||||
}
|
||||
/*
|
||||
* cfg_val will be used for
|
||||
* Boot_cfg4[7:0]:Boot_cfg3[7:0]:Boot_cfg2[7:0]:Boot_cfg1[7:0]
|
||||
|
@ -19,7 +19,7 @@ obj-y += misc.o
|
||||
obj-$(CONFIG_SPL_BUILD) += spl.o
|
||||
endif
|
||||
ifeq ($(SOC),$(filter $(SOC),mx6))
|
||||
obj-y += cache.o
|
||||
obj-y += cache.o init.o
|
||||
obj-$(CONFIG_CMD_SATA) += sata.o
|
||||
obj-$(CONFIG_IMX_VIDEO_SKIP) += video.o
|
||||
endif
|
||||
|
100
arch/arm/imx-common/init.c
Normal file
100
arch/arm/imx-common/init.c
Normal file
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/imx-common/boot_mode.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
|
||||
void init_aips(void)
|
||||
{
|
||||
struct aipstz_regs *aips1, *aips2;
|
||||
#ifdef CONFIG_MX6SX
|
||||
struct aipstz_regs *aips3;
|
||||
#endif
|
||||
|
||||
aips1 = (struct aipstz_regs *)AIPS1_BASE_ADDR;
|
||||
aips2 = (struct aipstz_regs *)AIPS2_BASE_ADDR;
|
||||
#ifdef CONFIG_MX6SX
|
||||
aips3 = (struct aipstz_regs *)AIPS3_BASE_ADDR;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Set all MPROTx to be non-bufferable, trusted for R/W,
|
||||
* not forced to user-mode.
|
||||
*/
|
||||
writel(0x77777777, &aips1->mprot0);
|
||||
writel(0x77777777, &aips1->mprot1);
|
||||
writel(0x77777777, &aips2->mprot0);
|
||||
writel(0x77777777, &aips2->mprot1);
|
||||
|
||||
/*
|
||||
* Set all OPACRx to be non-bufferable, not require
|
||||
* supervisor privilege level for access,allow for
|
||||
* write access and untrusted master access.
|
||||
*/
|
||||
writel(0x00000000, &aips1->opacr0);
|
||||
writel(0x00000000, &aips1->opacr1);
|
||||
writel(0x00000000, &aips1->opacr2);
|
||||
writel(0x00000000, &aips1->opacr3);
|
||||
writel(0x00000000, &aips1->opacr4);
|
||||
writel(0x00000000, &aips2->opacr0);
|
||||
writel(0x00000000, &aips2->opacr1);
|
||||
writel(0x00000000, &aips2->opacr2);
|
||||
writel(0x00000000, &aips2->opacr3);
|
||||
writel(0x00000000, &aips2->opacr4);
|
||||
|
||||
#ifdef CONFIG_MX6SX
|
||||
/*
|
||||
* Set all MPROTx to be non-bufferable, trusted for R/W,
|
||||
* not forced to user-mode.
|
||||
*/
|
||||
writel(0x77777777, &aips3->mprot0);
|
||||
writel(0x77777777, &aips3->mprot1);
|
||||
|
||||
/*
|
||||
* Set all OPACRx to be non-bufferable, not require
|
||||
* supervisor privilege level for access,allow for
|
||||
* write access and untrusted master access.
|
||||
*/
|
||||
writel(0x00000000, &aips3->opacr0);
|
||||
writel(0x00000000, &aips3->opacr1);
|
||||
writel(0x00000000, &aips3->opacr2);
|
||||
writel(0x00000000, &aips3->opacr3);
|
||||
writel(0x00000000, &aips3->opacr4);
|
||||
#endif
|
||||
}
|
||||
|
||||
#define SRC_SCR_WARM_RESET_ENABLE 0
|
||||
|
||||
void init_src(void)
|
||||
{
|
||||
struct src *src_regs = (struct src *)SRC_BASE_ADDR;
|
||||
u32 val;
|
||||
|
||||
/*
|
||||
* force warm reset sources to generate cold reset
|
||||
* for a more reliable restart
|
||||
*/
|
||||
val = readl(&src_regs->scr);
|
||||
val &= ~(1 << SRC_SCR_WARM_RESET_ENABLE);
|
||||
writel(val, &src_regs->scr);
|
||||
}
|
||||
|
||||
void boot_mode_apply(unsigned cfg_val)
|
||||
{
|
||||
unsigned reg;
|
||||
struct src *psrc = (struct src *)SRC_BASE_ADDR;
|
||||
writel(cfg_val, &psrc->gpr9);
|
||||
reg = readl(&psrc->gpr10);
|
||||
if (cfg_val)
|
||||
reg |= 1 << 28;
|
||||
else
|
||||
reg &= ~(1 << 28);
|
||||
writel(reg, &psrc->gpr10);
|
||||
}
|
@ -137,8 +137,10 @@
|
||||
/* Defines for Blocks connected via AIPS (SkyBlue) */
|
||||
#define ATZ1_BASE_ADDR AIPS1_ARB_BASE_ADDR
|
||||
#define ATZ2_BASE_ADDR AIPS2_ARB_BASE_ADDR
|
||||
#define ATZ3_BASE_ADDR AIPS3_ARB_BASE_ADDR
|
||||
#define AIPS1_BASE_ADDR AIPS1_ON_BASE_ADDR
|
||||
#define AIPS2_BASE_ADDR AIPS2_ON_BASE_ADDR
|
||||
#define AIPS3_BASE_ADDR AIPS3_ON_BASE_ADDR
|
||||
|
||||
#define SPDIF_BASE_ADDR (ATZ1_BASE_ADDR + 0x04000)
|
||||
#define ECSPI1_BASE_ADDR (ATZ1_BASE_ADDR + 0x08000)
|
||||
@ -219,6 +221,8 @@
|
||||
|
||||
#define AIPS2_ON_BASE_ADDR (ATZ2_BASE_ADDR + 0x7C000)
|
||||
#define AIPS2_OFF_BASE_ADDR (ATZ2_BASE_ADDR + 0x80000)
|
||||
#define AIPS3_ON_BASE_ADDR (ATZ3_BASE_ADDR + 0x7C000)
|
||||
#define AIPS3_OFF_BASE_ADDR (ATZ3_BASE_ADDR + 0x80000)
|
||||
#define CAAM_BASE_ADDR (ATZ2_BASE_ADDR)
|
||||
#define ARM_BASE_ADDR (ATZ2_BASE_ADDR + 0x40000)
|
||||
|
||||
|
@ -35,6 +35,9 @@ u32 imx_ddr_size(void);
|
||||
void sdelay(unsigned long);
|
||||
void set_chipselect_size(int const);
|
||||
|
||||
void init_aips(void);
|
||||
void init_src(void);
|
||||
|
||||
/*
|
||||
* Initializes on-chip ethernet controllers.
|
||||
* to override, implement board_eth_init()
|
||||
|
Loading…
Reference in New Issue
Block a user