ARM64: zynqmp: Use the same U-Boot version with/without ATF
Remove SECURE_IOU option which is not needed. U-Boot itself can detect which EL level it is on and based on that use do platform setup. It also simplify usage because one Kconfig entry is gone. Signed-off-by: Michal Simek <michal.simek@xilinx.com>
This commit is contained in:
@@ -20,10 +20,6 @@ config SYS_SOC
|
|||||||
config SYS_CONFIG_NAME
|
config SYS_CONFIG_NAME
|
||||||
default "xilinx_zynqmp_ep" if TARGET_ZYNQMP_EP
|
default "xilinx_zynqmp_ep" if TARGET_ZYNQMP_EP
|
||||||
|
|
||||||
config SECURE_IOU
|
|
||||||
bool "Configure ZynqMP secure IOU"
|
|
||||||
default n
|
|
||||||
|
|
||||||
config ZYNQMP_USB
|
config ZYNQMP_USB
|
||||||
bool "Configure ZynqMP USB"
|
bool "Configure ZynqMP USB"
|
||||||
|
|
||||||
|
@@ -26,6 +26,22 @@ unsigned long get_uart_clk(int dev_id)
|
|||||||
return 133000000;
|
return 133000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long zynqmp_get_system_timer_freq(void)
|
||||||
|
{
|
||||||
|
u32 ver = zynqmp_get_silicon_version();
|
||||||
|
|
||||||
|
switch (ver) {
|
||||||
|
case ZYNQMP_CSU_VERSION_VELOCE:
|
||||||
|
return 10000;
|
||||||
|
case ZYNQMP_CSU_VERSION_EP108:
|
||||||
|
return 4000000;
|
||||||
|
case ZYNQMP_CSU_VERSION_QEMU:
|
||||||
|
return 50000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 100000000;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_CLOCKS
|
#ifdef CONFIG_CLOCKS
|
||||||
/**
|
/**
|
||||||
* set_cpu_clk_info() - Initialize clock framework
|
* set_cpu_clk_info() - Initialize clock framework
|
||||||
|
@@ -15,8 +15,22 @@
|
|||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
static unsigned int zynqmp_get_silicon_version_secure(void)
|
||||||
|
{
|
||||||
|
u32 ver;
|
||||||
|
|
||||||
|
ver = readl(&csu_base->version);
|
||||||
|
ver &= ZYNQMP_SILICON_VER_MASK;
|
||||||
|
ver >>= ZYNQMP_SILICON_VER_SHIFT;
|
||||||
|
|
||||||
|
return ver;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int zynqmp_get_silicon_version(void)
|
unsigned int zynqmp_get_silicon_version(void)
|
||||||
{
|
{
|
||||||
|
if (current_el() == 3)
|
||||||
|
return zynqmp_get_silicon_version_secure();
|
||||||
|
|
||||||
gd->cpu_clk = get_tbclk();
|
gd->cpu_clk = get_tbclk();
|
||||||
|
|
||||||
switch (gd->cpu_clk) {
|
switch (gd->cpu_clk) {
|
||||||
|
@@ -9,5 +9,6 @@
|
|||||||
#define _ASM_ARCH_CLK_H_
|
#define _ASM_ARCH_CLK_H_
|
||||||
|
|
||||||
unsigned long get_uart_clk(int dev_id);
|
unsigned long get_uart_clk(int dev_id);
|
||||||
|
unsigned long zynqmp_get_system_timer_freq(void);
|
||||||
|
|
||||||
#endif /* _ASM_ARCH_CLK_H_ */
|
#endif /* _ASM_ARCH_CLK_H_ */
|
||||||
|
@@ -41,11 +41,8 @@ struct crlapb_regs {
|
|||||||
|
|
||||||
#define crlapb_base ((struct crlapb_regs *)ZYNQMP_CRL_APB_BASEADDR)
|
#define crlapb_base ((struct crlapb_regs *)ZYNQMP_CRL_APB_BASEADDR)
|
||||||
|
|
||||||
#if defined(CONFIG_SECURE_IOU)
|
#define ZYNQMP_IOU_SCNTR_SECURE 0xFF260000
|
||||||
#define ZYNQMP_IOU_SCNTR 0xFF260000
|
|
||||||
#else
|
|
||||||
#define ZYNQMP_IOU_SCNTR 0xFF250000
|
#define ZYNQMP_IOU_SCNTR 0xFF250000
|
||||||
#endif
|
|
||||||
#define ZYNQMP_IOU_SCNTR_COUNTER_CONTROL_REGISTER_EN 0x1
|
#define ZYNQMP_IOU_SCNTR_COUNTER_CONTROL_REGISTER_EN 0x1
|
||||||
#define ZYNQMP_IOU_SCNTR_COUNTER_CONTROL_REGISTER_HDBG 0x2
|
#define ZYNQMP_IOU_SCNTR_COUNTER_CONTROL_REGISTER_HDBG 0x2
|
||||||
|
|
||||||
@@ -57,6 +54,14 @@ struct iou_scntr {
|
|||||||
|
|
||||||
#define iou_scntr ((struct iou_scntr *)ZYNQMP_IOU_SCNTR)
|
#define iou_scntr ((struct iou_scntr *)ZYNQMP_IOU_SCNTR)
|
||||||
|
|
||||||
|
struct iou_scntr_secure {
|
||||||
|
u32 counter_control_register;
|
||||||
|
u32 reserved0[7];
|
||||||
|
u32 base_frequency_id_register;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define iou_scntr_secure ((struct iou_scntr_secure *)ZYNQMP_IOU_SCNTR_SECURE)
|
||||||
|
|
||||||
/* Bootmode setting values */
|
/* Bootmode setting values */
|
||||||
#define BOOT_MODES_MASK 0x0000000F
|
#define BOOT_MODES_MASK 0x0000000F
|
||||||
#define SD_MODE 0x00000003
|
#define SD_MODE 0x00000003
|
||||||
@@ -106,9 +111,20 @@ struct apu_regs {
|
|||||||
#define apu_base ((struct apu_regs *)ZYNQMP_APU_BASEADDR)
|
#define apu_base ((struct apu_regs *)ZYNQMP_APU_BASEADDR)
|
||||||
|
|
||||||
/* Board version value */
|
/* Board version value */
|
||||||
|
#define ZYNQMP_CSU_BASEADDR 0xFFCA0000
|
||||||
#define ZYNQMP_CSU_VERSION_SILICON 0x0
|
#define ZYNQMP_CSU_VERSION_SILICON 0x0
|
||||||
#define ZYNQMP_CSU_VERSION_EP108 0x1
|
#define ZYNQMP_CSU_VERSION_EP108 0x1
|
||||||
#define ZYNQMP_CSU_VERSION_VELOCE 0x2
|
#define ZYNQMP_CSU_VERSION_VELOCE 0x2
|
||||||
#define ZYNQMP_CSU_VERSION_QEMU 0x3
|
#define ZYNQMP_CSU_VERSION_QEMU 0x3
|
||||||
|
|
||||||
|
#define ZYNQMP_SILICON_VER_MASK 0xF000
|
||||||
|
#define ZYNQMP_SILICON_VER_SHIFT 12
|
||||||
|
|
||||||
|
struct csu_regs {
|
||||||
|
u32 reserved0[17];
|
||||||
|
u32 version;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define csu_base ((struct csu_regs *)ZYNQMP_CSU_BASEADDR)
|
||||||
|
|
||||||
#endif /* _ASM_ARCH_HARDWARE_H */
|
#endif /* _ASM_ARCH_HARDWARE_H */
|
||||||
|
@@ -9,6 +9,7 @@
|
|||||||
#include <netdev.h>
|
#include <netdev.h>
|
||||||
#include <ahci.h>
|
#include <ahci.h>
|
||||||
#include <scsi.h>
|
#include <scsi.h>
|
||||||
|
#include <asm/arch/clk.h>
|
||||||
#include <asm/arch/hardware.h>
|
#include <asm/arch/hardware.h>
|
||||||
#include <asm/arch/sys_proto.h>
|
#include <asm/arch/sys_proto.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
@@ -28,10 +29,18 @@ int board_early_init_r(void)
|
|||||||
{
|
{
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
|
if (current_el() == 3) {
|
||||||
val = readl(&crlapb_base->timestamp_ref_ctrl);
|
val = readl(&crlapb_base->timestamp_ref_ctrl);
|
||||||
val |= ZYNQMP_CRL_APB_TIMESTAMP_REF_CTRL_CLKACT;
|
val |= ZYNQMP_CRL_APB_TIMESTAMP_REF_CTRL_CLKACT;
|
||||||
writel(val, &crlapb_base->timestamp_ref_ctrl);
|
writel(val, &crlapb_base->timestamp_ref_ctrl);
|
||||||
|
|
||||||
|
/* Program freq register in System counter */
|
||||||
|
writel(zynqmp_get_system_timer_freq(),
|
||||||
|
&iou_scntr_secure->base_frequency_id_register);
|
||||||
|
/* And enable system counter */
|
||||||
|
writel(ZYNQMP_IOU_SCNTR_COUNTER_CONTROL_REGISTER_EN,
|
||||||
|
&iou_scntr_secure->counter_control_register);
|
||||||
|
}
|
||||||
/* Program freq register in System counter and enable system counter */
|
/* Program freq register in System counter and enable system counter */
|
||||||
writel(gd->cpu_clk, &iou_scntr->base_frequency_id_register);
|
writel(gd->cpu_clk, &iou_scntr->base_frequency_id_register);
|
||||||
writel(ZYNQMP_IOU_SCNTR_COUNTER_CONTROL_REGISTER_HDBG |
|
writel(ZYNQMP_IOU_SCNTR_COUNTER_CONTROL_REGISTER_HDBG |
|
||||||
|
Reference in New Issue
Block a user