Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
b514ee86
Commit
b514ee86
authored
Jul 19, 2019
by
Soby Mathew
Committed by
TrustedFirmware Code Review
Jul 19, 2019
Browse files
Merge "intel: Adds support for Agilex platform" into integration
parents
59e3df6e
2f11d548
Changes
33
Show whitespace changes
Inline
Side-by-side
docs/maintainers.rst
View file @
b514ee86
...
@@ -112,8 +112,11 @@ HiSilicon Poplar platform port
...
@@ -112,8 +112,11 @@ HiSilicon Poplar platform port
Intel SocFPGA platform ports
Intel SocFPGA platform ports
----------------------------
----------------------------
:M: Tien Hock Loh <tien.hock.loh@intel.com>
:M: Tien Hock Loh <tien.hock.loh@intel.com>
:G: `thloh85-intel`
:G: `thloh85-intel`_
:M: Hadi Asyrafi <muhammad.hadi.asyrafi.abdul.halim@intel.com>
:G: `mabdulha`_
:F: plat/intel/soc
:F: plat/intel/soc
:F: drivers/intel/soc/
MediaTek platform ports
MediaTek platform ports
-----------------------
-----------------------
...
...
docs/plat/intel-agilex.rst
0 → 100644
View file @
b514ee86
Intel Agilex SoCFPGA
========================
Agilex SoCFPGA is a FPGA with integrated quad-core 64-bit Arm Cortex A53 processor.
Upon boot, Boot ROM loads bl2 into OCRAM. Bl2 subsequently initializes
the hardware, then loads bl31 and bl33 (UEFI) into DDR and boots to bl33.
::
Boot ROM --> Trusted Firmware-A --> UEFI
How to build
------------
Code Locations
~~~~~~~~~~~~~~
- Trusted Firmware-A:
`link <https://github.com/ARM-software/arm-trusted-firmware>`__
- UEFI (to be updated with new upstreamed UEFI):
`link <https://github.com/altera-opensource/uefi-socfpga>`__
Build Procedure
~~~~~~~~~~~~~~~
- Fetch all the above 2 repositories into local host.
Make all the repositories in the same ${BUILD\_PATH}.
- Prepare the AARCH64 toolchain.
- Build UEFI using Agilex platform as configuration
This will be updated to use an updated UEFI using the latest EDK2 source
.. code:: bash
make CROSS_COMPILE=aarch64-linux-gnu- device=agx
- Build atf providing the previously generated UEFI as the BL33 image
.. code:: bash
make CROSS_COMPILE=aarch64-linux-gnu- bl2 fip PLAT=agilex
BL33=PEI.ROM
Install Procedure
~~~~~~~~~~~~~~~~~
- dd fip.bin to a A2 partition on the MMC drive to be booted in Agilex
board.
- Generate a SOF containing bl2
.. code:: bash
aarch64-linux-gnu-objcopy -I binary -O ihex --change-addresses 0xffe00000 bl2.bin bl2.hex
quartus_cpf --bootloader bl2.hex <quartus_generated_sof> <output_sof_with_bl2>
- Configure SOF to board
.. code:: bash
nios2-configure-sof <output_sof_with_bl2>
Boot trace
----------
::
INFO: DDR: DRAM calibration success.
INFO: ECC is disabled.
NOTICE: BL2: v2.1(debug)
NOTICE: BL2: Built
INFO: BL2: Doing platform setup
NOTICE: BL2: Booting BL31
INFO: Entry point address = 0xffe1c000
INFO: SPSR = 0x3cd
NOTICE: BL31: v2.1(debug)
NOTICE: BL31: Built
INFO: ARM GICv2 driver initialized
INFO: BL31: Initializing runtime services
WARNING: BL31: cortex_a53
INFO: BL31: Preparing for EL3 exit to normal world
INFO: Entry point address = 0x50000
INFO: SPSR = 0x3c9
plat/intel/soc/agilex/aarch64/plat_helpers.S
0 → 100644
View file @
b514ee86
/*
*
Copyright
(
c
)
2019
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
SPDX
-
License
-
Identifier
:
BSD
-
3
-
Clause
*/
#include <arch.h>
#include <asm_macros.S>
#include <cpu_macros.S>
#include <platform_def.h>
.
globl
plat_secondary_cold_boot_setup
.
globl
platform_is_primary_cpu
.
globl
plat_is_my_cpu_primary
.
globl
plat_my_core_pos
.
globl
plat_crash_console_init
.
globl
plat_crash_console_putc
.
globl
plat_crash_console_flush
.
globl
platform_mem_init
.
globl
plat_get_my_entrypoint
/
*
-----------------------------------------------------
*
void
plat_secondary_cold_boot_setup
(
void
)
;
*
*
This
function
performs
any
platform
specific
actions
*
needed
for
a
secondary
cpu
after
a
cold
reset
e
.
g
*
mark
the
cpu
's presence, mechanism to place it in a
*
holding
pen
etc
.
*
-----------------------------------------------------
*/
func
plat_secondary_cold_boot_setup
/
*
Wait
until
the
it
gets
reset
signal
from
rstmgr
gets
populated
*/
poll_mailbox
:
wfi
mov_imm
x0
,
PLAT_AGX_SEC_ENTRY
ldr
x1
,
[
x0
]
mov_imm
x2
,
PLAT_CPUID_RELEASE
ldr
x3
,
[
x2
]
mrs
x4
,
mpidr_el1
and
x4
,
x4
,
#
0xff
cmp
x3
,
x4
b.ne
poll_mailbox
br
x1
endfunc
plat_secondary_cold_boot_setup
func
platform_is_primary_cpu
and
x0
,
x0
,
#(
MPIDR_CLUSTER_MASK
|
MPIDR_CPU_MASK
)
cmp
x0
,
#
PLAT_PRIMARY_CPU
cset
x0
,
eq
ret
endfunc
platform_is_primary_cpu
func
plat_is_my_cpu_primary
mrs
x0
,
mpidr_el1
b
platform_is_primary_cpu
endfunc
plat_is_my_cpu_primary
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
func
plat_get_my_entrypoint
mov_imm
x1
,
PLAT_AGX_SEC_ENTRY
ldr
x0
,
[
x1
]
ret
endfunc
plat_get_my_entrypoint
/
*
---------------------------------------------
*
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
,
PLAT_UART0_BASE
mov_imm
x1
,
PLAT_UART_CLOCK
mov_imm
x2
,
PLAT_BAUDRATE
b
console_16550_core_init
endfunc
plat_crash_console_init
/
*
---------------------------------------------
*
int
plat_crash_console_putc
(
void
)
*
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
,
PLAT_UART0_BASE
b
console_16550_core_putc
endfunc
plat_crash_console_putc
func
plat_crash_console_flush
mov_imm
x0
,
CRASH_CONSOLE_BASE
b
console_16550_core_flush
endfunc
plat_crash_console_flush
/
*
--------------------------------------------------------
*
void
platform_mem_init
(
void
)
;
*
*
Any
memory
init
,
relocation
to
be
done
before
the
*
platform
boots
.
Called
very
early
in
the
boot
process
.
*
--------------------------------------------------------
*/
func
platform_mem_init
mov
x0
,
#
0
ret
endfunc
platform_mem_init
plat/intel/soc/agilex/aarch64/platform_common.c
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch.h>
#include <arch_helpers.h>
#include <platform_def.h>
#include <plat/common/platform.h>
#include <socfpga_private.h>
unsigned
int
plat_get_syscnt_freq2
(
void
)
{
return
PLAT_SYS_COUNTER_FREQ_IN_TICKS
;
}
unsigned
long
socfpga_get_ns_image_entrypoint
(
void
)
{
return
PLAT_NS_IMAGE_OFFSET
;
}
/******************************************************************************
* Gets SPSR for BL32 entry
*****************************************************************************/
uint32_t
socfpga_get_spsr_for_bl32_entry
(
void
)
{
/*
* The Secure Payload Dispatcher service is responsible for
* setting the SPSR prior to entry into the BL32 image.
*/
return
0
;
}
/******************************************************************************
* Gets SPSR for BL33 entry
*****************************************************************************/
uint32_t
socfpga_get_spsr_for_bl33_entry
(
void
)
{
unsigned
long
el_status
;
unsigned
int
mode
;
uint32_t
spsr
;
/* Figure out what mode we enter the non-secure world in */
el_status
=
read_id_aa64pfr0_el1
()
>>
ID_AA64PFR0_EL2_SHIFT
;
el_status
&=
ID_AA64PFR0_ELX_MASK
;
mode
=
(
el_status
)
?
MODE_EL2
:
MODE_EL1
;
/*
* TODO: Consider the possibility of specifying the SPSR in
* the FIP ToC and allowing the platform to have a say as
* well.
*/
spsr
=
SPSR_64
(
mode
,
MODE_SP_ELX
,
DISABLE_ALL_EXCEPTIONS
);
return
spsr
;
}
plat/intel/soc/agilex/bl2_plat_mem_params_desc.c
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <common/bl_common.h>
#include <common/desc_image_load.h>
#include <platform_def.h>
#include <plat/common/platform.h>
/*******************************************************************************
* Following descriptor provides BL image/ep information that gets used
* by BL2 to load the images and also subset of this information is
* passed to next BL image. The image loading sequence is managed by
* populating the images in required loading order. The image execution
* sequence is managed by populating the `next_handoff_image_id` with
* the next executable image id.
******************************************************************************/
static
bl_mem_params_node_t
bl2_mem_params_descs
[]
=
{
#ifdef SCP_BL2_BASE
/* Fill SCP_BL2 related information if it exists */
{
.
image_id
=
SCP_BL2_IMAGE_ID
,
SET_STATIC_PARAM_HEAD
(
ep_info
,
PARAM_IMAGE_BINARY
,
VERSION_2
,
entry_point_info_t
,
SECURE
|
NON_EXECUTABLE
),
SET_STATIC_PARAM_HEAD
(
image_info
,
PARAM_IMAGE_BINARY
,
VERSION_2
,
image_info_t
,
0
),
.
image_info
.
image_base
=
SCP_BL2_BASE
,
.
image_info
.
image_max_size
=
SCP_BL2_SIZE
,
.
next_handoff_image_id
=
INVALID_IMAGE_ID
,
},
#endif
/* SCP_BL2_BASE */
#ifdef EL3_PAYLOAD_BASE
/* Fill EL3 payload related information (BL31 is EL3 payload)*/
{
.
image_id
=
BL31_IMAGE_ID
,
SET_STATIC_PARAM_HEAD
(
ep_info
,
PARAM_EP
,
VERSION_2
,
entry_point_info_t
,
SECURE
|
EXECUTABLE
|
EP_FIRST_EXE
),
.
ep_info
.
pc
=
EL3_PAYLOAD_BASE
,
.
ep_info
.
spsr
=
SPSR_64
(
MODE_EL3
,
MODE_SP_ELX
,
DISABLE_ALL_EXCEPTIONS
),
SET_STATIC_PARAM_HEAD
(
image_info
,
PARAM_EP
,
VERSION_2
,
image_info_t
,
IMAGE_ATTRIB_PLAT_SETUP
|
IMAGE_ATTRIB_SKIP_LOADING
),
.
next_handoff_image_id
=
INVALID_IMAGE_ID
,
},
#else
/* EL3_PAYLOAD_BASE */
/* Fill BL31 related information */
{
.
image_id
=
BL31_IMAGE_ID
,
SET_STATIC_PARAM_HEAD
(
ep_info
,
PARAM_EP
,
VERSION_2
,
entry_point_info_t
,
SECURE
|
EXECUTABLE
|
EP_FIRST_EXE
),
.
ep_info
.
pc
=
BL31_BASE
,
.
ep_info
.
spsr
=
SPSR_64
(
MODE_EL3
,
MODE_SP_ELX
,
DISABLE_ALL_EXCEPTIONS
),
SET_STATIC_PARAM_HEAD
(
image_info
,
PARAM_EP
,
VERSION_2
,
image_info_t
,
IMAGE_ATTRIB_PLAT_SETUP
),
.
image_info
.
image_base
=
BL31_BASE
,
.
image_info
.
image_max_size
=
BL31_LIMIT
-
BL31_BASE
,
.
next_handoff_image_id
=
BL33_IMAGE_ID
,
},
#endif
/* EL3_PAYLOAD_BASE */
{
.
image_id
=
BL33_IMAGE_ID
,
SET_STATIC_PARAM_HEAD
(
ep_info
,
PARAM_EP
,
VERSION_2
,
entry_point_info_t
,
NON_SECURE
|
EXECUTABLE
),
.
ep_info
.
pc
=
PLAT_NS_IMAGE_OFFSET
,
SET_STATIC_PARAM_HEAD
(
image_info
,
PARAM_EP
,
VERSION_2
,
image_info_t
,
0
),
.
image_info
.
image_base
=
PLAT_NS_IMAGE_OFFSET
,
.
image_info
.
image_max_size
=
0x0
+
0x40000000
-
PLAT_NS_IMAGE_OFFSET
,
.
next_handoff_image_id
=
INVALID_IMAGE_ID
,
},
};
REGISTER_BL_IMAGE_DESCS
(
bl2_mem_params_descs
)
plat/intel/soc/agilex/bl2_plat_setup.c
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch.h>
#include <arch_helpers.h>
#include <common/bl_common.h>
#include <common/debug.h>
#include <common/desc_image_load.h>
#include <drivers/generic_delay_timer.h>
#include <drivers/synopsys/dw_mmc.h>
#include <drivers/ti/uart/uart_16550.h>
#include <lib/xlat_tables/xlat_tables.h>
#include <platform_def.h>
#include <socfpga_private.h>
#include "agilex_clock_manager.h"
#include "agilex_handoff.h"
#include "agilex_mailbox.h"
#include "agilex_memory_controller.h"
#include "agilex_pinmux.h"
#include "agilex_private.h"
#include "agilex_reset_manager.h"
#include "agilex_system_manager.h"
#include "ccu/ncore_ccu.h"
#include "qspi/cadence_qspi.h"
#include "wdt/watchdog.h"
const
mmap_region_t
agilex_plat_mmap
[]
=
{
MAP_REGION_FLAT
(
DRAM_BASE
,
DRAM_SIZE
,
MT_MEMORY
|
MT_RW
|
MT_NS
),
MAP_REGION_FLAT
(
DEVICE1_BASE
,
DEVICE1_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_NS
),
MAP_REGION_FLAT
(
DEVICE2_BASE
,
DEVICE2_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_SECURE
),
MAP_REGION_FLAT
(
OCRAM_BASE
,
OCRAM_SIZE
,
MT_NON_CACHEABLE
|
MT_RW
|
MT_SECURE
),
MAP_REGION_FLAT
(
DEVICE3_BASE
,
DEVICE3_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_SECURE
),
MAP_REGION_FLAT
(
MEM64_BASE
,
MEM64_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_NS
),
MAP_REGION_FLAT
(
DEVICE4_BASE
,
DEVICE4_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_NS
),
{
0
},
};
boot_source_type
boot_source
;
void
bl2_el3_early_platform_setup
(
u_register_t
x0
,
u_register_t
x1
,
u_register_t
x2
,
u_register_t
x4
)
{
static
console_16550_t
console
;
handoff
reverse_handoff_ptr
;
generic_delay_timer_init
();
if
(
agilex_get_handoff
(
&
reverse_handoff_ptr
))
return
;
config_pinmux
(
&
reverse_handoff_ptr
);
boot_source
=
reverse_handoff_ptr
.
boot_source
;
config_clkmgr_handoff
(
&
reverse_handoff_ptr
);
enable_nonsecure_access
();
deassert_peripheral_reset
();
config_hps_hs_before_warm_reset
();
watchdog_init
(
get_wdt_clk
(
&
reverse_handoff_ptr
));
console_16550_register
(
PLAT_UART0_BASE
,
PLAT_UART_CLOCK
,
PLAT_BAUDRATE
,
&
console
);
socfpga_delay_timer_init
();
init_ncore_ccu
();
init_hard_memory_controller
();
enable_ns_bridge_access
();
}
void
bl2_el3_plat_arch_setup
(
void
)
{
struct
mmc_device_info
info
;
const
mmap_region_t
bl_regions
[]
=
{
MAP_REGION_FLAT
(
BL2_BASE
,
BL2_END
-
BL2_BASE
,
MT_MEMORY
|
MT_RW
|
MT_SECURE
),
MAP_REGION_FLAT
(
BL_CODE_BASE
,
BL_CODE_END
-
BL_CODE_BASE
,
MT_CODE
|
MT_SECURE
),
MAP_REGION_FLAT
(
BL_RO_DATA_BASE
,
BL_RO_DATA_END
-
BL_RO_DATA_BASE
,
MT_RO_DATA
|
MT_SECURE
),
#if USE_COHERENT_MEM_BAR
MAP_REGION_FLAT
(
BL_COHERENT_RAM_BASE
,
BL_COHERENT_RAM_END
-
BL_COHERENT_RAM_BASE
,
MT_DEVICE
|
MT_RW
|
MT_SECURE
),
#endif
{
0
},
};
setup_page_tables
(
bl_regions
,
agilex_plat_mmap
);
enable_mmu_el3
(
0
);
dw_mmc_params_t
params
=
EMMC_INIT_PARAMS
(
0x100000
);
info
.
mmc_dev_type
=
MMC_IS_SD
;
info
.
ocr_voltage
=
OCR_3_3_3_4
|
OCR_3_2_3_3
;
mailbox_init
();
switch
(
boot_source
)
{
case
BOOT_SOURCE_SDMMC
:
dw_mmc_init
(
&
params
,
&
info
);
socfpga_io_setup
(
boot_source
);
break
;
case
BOOT_SOURCE_QSPI
:
mailbox_set_qspi_open
();
mailbox_set_qspi_direct
();
cad_qspi_init
(
0
,
QSPI_CONFIG_CPHA
,
QSPI_CONFIG_CPOL
,
QSPI_CONFIG_CSDA
,
QSPI_CONFIG_CSDADS
,
QSPI_CONFIG_CSEOT
,
QSPI_CONFIG_CSSOT
,
0
);
socfpga_io_setup
(
boot_source
);
break
;
default:
ERROR
(
"Unsupported boot source
\n
"
);
panic
();
break
;
}
}
uint32_t
get_spsr_for_bl33_entry
(
void
)
{
unsigned
long
el_status
;
unsigned
int
mode
;
uint32_t
spsr
;
/* Figure out what mode we enter the non-secure world in */
el_status
=
read_id_aa64pfr0_el1
()
>>
ID_AA64PFR0_EL2_SHIFT
;
el_status
&=
ID_AA64PFR0_ELX_MASK
;
mode
=
(
el_status
)
?
MODE_EL2
:
MODE_EL1
;
/*
* TODO: Consider the possibility of specifying the SPSR in
* the FIP ToC and allowing the platform to have a say as
* well.
*/
spsr
=
SPSR_64
(
mode
,
MODE_SP_ELX
,
DISABLE_ALL_EXCEPTIONS
);
return
spsr
;
}
int
bl2_plat_handle_post_image_load
(
unsigned
int
image_id
)
{
bl_mem_params_node_t
*
bl_mem_params
=
get_bl_mem_params_node
(
image_id
);
switch
(
image_id
)
{
case
BL33_IMAGE_ID
:
bl_mem_params
->
ep_info
.
args
.
arg0
=
0xffff
&
read_mpidr
();
bl_mem_params
->
ep_info
.
spsr
=
get_spsr_for_bl33_entry
();
break
;
default:
break
;
}
return
0
;
}
/*******************************************************************************
* Perform any BL3-1 platform setup code
******************************************************************************/
void
bl2_platform_setup
(
void
)
{
}
plat/intel/soc/agilex/bl31_plat_setup.c
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch.h>
#include <arch_helpers.h>
#include <assert.h>
#include <common/bl_common.h>
#include <drivers/arm/gicv2.h>
#include <drivers/ti/uart/uart_16550.h>
#include <lib/xlat_tables/xlat_tables.h>
#include <platform_def.h>
static
entry_point_info_t
bl32_image_ep_info
;
static
entry_point_info_t
bl33_image_ep_info
;
entry_point_info_t
*
bl31_plat_get_next_image_ep_info
(
uint32_t
type
)
{
entry_point_info_t
*
next_image_info
;
next_image_info
=
(
type
==
NON_SECURE
)
?
&
bl33_image_ep_info
:
&
bl32_image_ep_info
;
/* None of the images on this platform can have 0x0 as the entrypoint */
if
(
next_image_info
->
pc
)
return
next_image_info
;
else
return
NULL
;
}
void
bl31_early_platform_setup2
(
u_register_t
arg0
,
u_register_t
arg1
,
u_register_t
arg2
,
u_register_t
arg3
)
{
static
console_16550_t
console
;
console_16550_register
(
PLAT_UART0_BASE
,
PLAT_UART_CLOCK
,
PLAT_BAUDRATE
,
&
console
);
/*
* Check params passed from BL31 should not be NULL,
*/
void
*
from_bl2
=
(
void
*
)
arg0
;
bl_params_t
*
params_from_bl2
=
(
bl_params_t
*
)
from_bl2
;
assert
(
params_from_bl2
!=
NULL
);
assert
(
params_from_bl2
->
h
.
type
==
PARAM_BL_PARAMS
);
assert
(
params_from_bl2
->
h
.
version
>=
VERSION_2
);
/*
* Copy BL32 (if populated by BL31) and BL33 entry point information.
* They are stored in Secure RAM, in BL31's address space.
*/
bl_params_node_t
*
bl_params
=
params_from_bl2
->
head
;
while
(
bl_params
)
{
if
(
bl_params
->
image_id
==
BL33_IMAGE_ID
)
bl33_image_ep_info
=
*
bl_params
->
ep_info
;
bl_params
=
bl_params
->
next_params_info
;
}
SET_SECURITY_STATE
(
bl33_image_ep_info
.
h
.
attr
,
NON_SECURE
);
}
static
const
interrupt_prop_t
s10_interrupt_props
[]
=
{
PLAT_INTEL_AGX_G1S_IRQ_PROPS
(
GICV2_INTR_GROUP0
),
PLAT_INTEL_AGX_G0_IRQ_PROPS
(
GICV2_INTR_GROUP0
)
};
static
unsigned
int
target_mask_array
[
PLATFORM_CORE_COUNT
];
static
const
gicv2_driver_data_t
plat_gicv2_gic_data
=
{
.
gicd_base
=
PLAT_INTEL_AGX_GICD_BASE
,
.
gicc_base
=
PLAT_INTEL_AGX_GICC_BASE
,
.
interrupt_props
=
s10_interrupt_props
,
.
interrupt_props_num
=
ARRAY_SIZE
(
s10_interrupt_props
),
.
target_masks
=
target_mask_array
,
.
target_masks_num
=
ARRAY_SIZE
(
target_mask_array
),
};
/*******************************************************************************
* Perform any BL3-1 platform setup code
******************************************************************************/
void
bl31_platform_setup
(
void
)
{
/* Initialize the gic cpu and distributor interfaces */
gicv2_driver_init
(
&
plat_gicv2_gic_data
);
gicv2_distif_init
();
gicv2_pcpu_distif_init
();
gicv2_cpuif_enable
();
}
const
mmap_region_t
plat_agilex_mmap
[]
=
{
MAP_REGION_FLAT
(
DRAM_BASE
,
DRAM_SIZE
,
MT_MEMORY
|
MT_RW
|
MT_NS
),
MAP_REGION_FLAT
(
DEVICE1_BASE
,
DEVICE1_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_NS
),
MAP_REGION_FLAT
(
DEVICE2_BASE
,
DEVICE2_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_NS
),
MAP_REGION_FLAT
(
OCRAM_BASE
,
OCRAM_SIZE
,
MT_NON_CACHEABLE
|
MT_RW
|
MT_SECURE
),
MAP_REGION_FLAT
(
DEVICE3_BASE
,
DEVICE3_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_SECURE
),
MAP_REGION_FLAT
(
MEM64_BASE
,
MEM64_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_NS
),
MAP_REGION_FLAT
(
DEVICE4_BASE
,
DEVICE4_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_NS
),
{
0
},
};
/*******************************************************************************
* Perform the very early platform specific architectural setup here. At the
* moment this is only intializes the mmu in a quick and dirty way.
******************************************************************************/
void
bl31_plat_arch_setup
(
void
)
{
const
mmap_region_t
bl_regions
[]
=
{
MAP_REGION_FLAT
(
BL31_BASE
,
BL31_END
-
BL31_BASE
,
MT_MEMORY
|
MT_RW
|
MT_SECURE
),
MAP_REGION_FLAT
(
BL_CODE_BASE
,
BL_CODE_END
-
BL_CODE_BASE
,
MT_CODE
|
MT_SECURE
),
MAP_REGION_FLAT
(
BL_RO_DATA_BASE
,
BL_RO_DATA_END
-
BL_RO_DATA_BASE
,
MT_RO_DATA
|
MT_SECURE
),
#if USE_COHERENT_MEM
MAP_REGION_FLAT
(
BL_COHERENT_RAM_BASE
,
BL_COHERENT_RAM_END
-
BL_COHERENT_RAM_BASE
,
MT_DEVICE
|
MT_RW
|
MT_SECURE
),
#endif
{
0
},
};
setup_page_tables
(
bl_regions
,
plat_agilex_mmap
);
enable_mmu_el3
(
0
);
}
plat/intel/soc/agilex/include/agilex_clock_manager.h
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef CLOCKMANAGER_H
#define CLOCKMANAGER_H
#include "agilex_handoff.h"
/* Clock Manager Registers */
#define CLKMGR_OFFSET 0xffd10000
#define CLKMGR_CTRL 0x0
#define CLKMGR_STAT 0x4
#define CLKMGR_INTRCLR 0x14
/* Main PLL Group */
#define CLKMGR_MAINPLL 0xffd10024
#define CLKMGR_MAINPLL_EN 0x0
#define CLKMGR_MAINPLL_BYPASS 0xc
#define CLKMGR_MAINPLL_MPUCLK 0x18
#define CLKMGR_MAINPLL_NOCCLK 0x1c
#define CLKMGR_MAINPLL_NOCDIV 0x20
#define CLKMGR_MAINPLL_PLLGLOB 0x24
#define CLKMGR_MAINPLL_FDBCK 0x28
#define CLKMGR_MAINPLL_MEM 0x2c
#define CLKMGR_MAINPLL_MEMSTAT 0x30
#define CLKMGR_MAINPLL_PLLC0 0x34
#define CLKMGR_MAINPLL_PLLC1 0x38
#define CLKMGR_MAINPLL_VCOCALIB 0x3c
#define CLKMGR_MAINPLL_PLLC2 0x40
#define CLKMGR_MAINPLL_PLLC3 0x44
#define CLKMGR_MAINPLL_PLLM 0x48
/* Peripheral PLL Group */
#define CLKMGR_PERPLL 0xffd1007c
#define CLKMGR_PERPLL_EN 0x0
#define CLKMGR_PERPLL_BYPASS 0xc
#define CLKMGR_PERPLL_EMACCTL 0x18
#define CLKMGR_PERPLL_GPIODIV 0x1c
#define CLKMGR_PERPLL_PLLGLOB 0x20
#define CLKMGR_PERPLL_FDBCK 0x24
#define CLKMGR_PERPLL_MEM 0x28
#define CLKMGR_PERPLL_MEMSTAT 0x2c
#define CLKMGR_PERPLL_PLLC0 0x30
#define CLKMGR_PERPLL_PLLC1 0x34
#define CLKMGR_PERPLL_VCOCALIB 0x38
#define CLKMGR_PERPLL_PLLC2 0x3c
#define CLKMGR_PERPLL_PLLC3 0x40
#define CLKMGR_PERPLL_PLLM 0x44
/* Altera Group */
#define CLKMGR_ALTERA 0xffd100d0
#define CLKMGR_ALTERA_JTAG 0x0
#define CLKMGR_ALTERA_EMACACTR 0x4
#define CLKMGR_ALTERA_EMACBCTR 0x8
#define CLKMGR_ALTERA_EMACPTPCTR 0xc
#define CLKMGR_ALTERA_GPIODBCTR 0x10
#define CLKMGR_ALTERA_SDMMCCTR 0x14
#define CLKMGR_ALTERA_S2FUSER0CTR 0x18
#define CLKMGR_ALTERA_S2FUSER1CTR 0x1c
#define CLKMGR_ALTERA_PSIREFCTR 0x20
#define CLKMGR_ALTERA_EXTCNTRST 0x24
/* Membus */
#define CLKMGR_MEM_REQ BIT(24)
#define CLKMGR_MEM_WR BIT(25)
#define CLKMGR_MEM_ERR BIT(26)
#define CLKMGR_MEM_WDAT_OFFSET 16
#define CLKMGR_MEM_ADDR 0x4027
#define CLKMGR_MEM_WDAT 0x80
/* Clock Manager Macros */
#define CLKMGR_CTRL_BOOTMODE_SET_MSK 0x00000001
#define CLKMGR_STAT_BUSY_E_BUSY 0x1
#define CLKMGR_STAT_BUSY(x) (((x) & 0x00000001) >> 0)
#define CLKMGR_STAT_MAINPLLLOCKED(x) (((x) & 0x00000100) >> 8)
#define CLKMGR_STAT_PERPLLLOCKED(x) (((x) & 0x00010000) >> 16)
#define CLKMGR_INTRCLR_MAINLOCKLOST_SET_MSK 0x00000004
#define CLKMGR_INTRCLR_PERLOCKLOST_SET_MSK 0x00000008
/* Main PLL Macros */
#define CLKMGR_MAINPLL_EN_RESET 0x000000ff
#define CLKMGR_MAINPLL_PLLM_MDIV(x) ((x) & 0x000003ff)
#define CLKMGR_MAINPLL_PLLGLOB_PD_SET_MSK 0x00000001
#define CLKMGR_MAINPLL_PLLGLOB_RST_SET_MSK 0x00000002
#define CLKMGR_MAINPLL_PLLGLOB_REFCLKDIV(x) (((x) & 0x00003f00) >> 8)
#define CLKMGR_MAINPLL_PLLGLOB_AREFCLKDIV(x) (((x) & 0x00000f00) >> 8)
#define CLKMGR_MAINPLL_PLLGLOB_DREFCLKDIV(x) (((x) & 0x00003000) >> 12)
#define CLKMGR_MAINPLL_PLLGLOB_PSRC(x) (((x) & 0x00030000) >> 16)
#define CLKMGR_MAINPLL_PLLGLOB_PSRC_EOSC1 0x0
#define CLKMGR_MAINPLL_PLLGLOB_PSRC_INTOSC 0x1
#define CLKMGR_MAINPLL_PLLGLOB_PSRC_F2S 0x2
#define CLKMGR_MAINPLL_VCOCALIB_HSCNT_SET(x) (((x) << 0) & 0x000003ff)
#define CLKMGR_MAINPLL_VCOCALIB_MSCNT_SET(x) (((x) << 16) & 0x00ff0000)
/* Peripheral PLL Macros */
#define CLKMGR_PERPLL_EN_RESET 0x00000fff
#define CLKMGR_PERPLL_PLLM_MDIV(x) ((x) & 0x000003ff)
#define CLKMGR_PERPLL_GPIODIV_GPIODBCLK_SET(x) (((x) << 0) & 0x0000ffff)
#define CLKMGR_PERPLL_PLLGLOB_PD_SET_MSK 0x00000001
#define CLKMGR_PERPLL_PLLGLOB_REFCLKDIV(x) (((x) & 0x00003f00) >> 8)
#define CLKMGR_PERPLL_PLLGLOB_AREFCLKDIV(x) (((x) & 0x00000f00) >> 8)
#define CLKMGR_PERPLL_PLLGLOB_DREFCLKDIV(x) (((x) & 0x00003000) >> 12)
#define CLKMGR_PERPLL_PLLGLOB_RST_SET_MSK 0x00000002
#define CLKMGR_PERPLL_VCOCALIB_HSCNT_SET(x) (((x) << 0) & 0x000003ff)
#define CLKMGR_PERPLL_VCOCALIB_MSCNT_SET(x) (((x) << 16) & 0x00ff0000)
/* Altera Macros */
#define CLKMGR_ALTERA_EXTCNTRST_RESET 0xff
typedef
struct
{
uint32_t
clk_freq_of_eosc1
;
uint32_t
clk_freq_of_f2h_free
;
uint32_t
clk_freq_of_cb_intosc_ls
;
}
CLOCK_SOURCE_CONFIG
;
void
config_clkmgr_handoff
(
handoff
*
hoff_ptr
);
int
get_wdt_clk
(
handoff
*
hoff_ptr
);
#endif
plat/intel/soc/agilex/include/agilex_handoff.h
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef HANDOFF_H
#define HANDOFF_H
#define HANDOFF_MAGIC_HEADER 0x424f4f54
/* BOOT */
#define HANDOFF_MAGIC_PINMUX_SEL 0x504d5558
/* PMUX */
#define HANDOFF_MAGIC_IOCTLR 0x494f4354
/* IOCT */
#define HANDOFF_MAGIC_FPGA 0x46504741
/* FPGA */
#define HANDOFF_MAGIC_IODELAY 0x444c4159
/* DLAY */
#define HANDOFF_MAGIC_CLOCK 0x434c4b53
/* CLKS */
#define HANDOFF_MAGIC_MISC 0x4d495343
/* MISC */
typedef
struct
handoff_t
{
/* header */
uint32_t
header_magic
;
uint32_t
header_device
;
uint32_t
_pad_0x08_0x10
[
2
];
/* pinmux configuration - select */
uint32_t
pinmux_sel_magic
;
uint32_t
pinmux_sel_length
;
uint32_t
_pad_0x18_0x20
[
2
];
uint32_t
pinmux_sel_array
[
96
];
/* offset, value */
/* pinmux configuration - io control */
uint32_t
pinmux_io_magic
;
uint32_t
pinmux_io_length
;
uint32_t
_pad_0x1a8_0x1b0
[
2
];
uint32_t
pinmux_io_array
[
96
];
/* offset, value */
/* pinmux configuration - use fpga switch */
uint32_t
pinmux_fpga_magic
;
uint32_t
pinmux_fpga_length
;
uint32_t
_pad_0x338_0x340
[
2
];
uint32_t
pinmux_fpga_array
[
42
];
/* offset, value */
uint32_t
_pad_0x3e8_0x3f0
[
2
];
/* pinmux configuration - io delay */
uint32_t
pinmux_delay_magic
;
uint32_t
pinmux_delay_length
;
uint32_t
_pad_0x3f8_0x400
[
2
];
uint32_t
pinmux_iodelay_array
[
96
];
/* offset, value */
/* clock configuration */
uint32_t
clock_magic
;
uint32_t
clock_length
;
uint32_t
_pad_0x588_0x590
[
2
];
uint32_t
main_pll_mpuclk
;
uint32_t
main_pll_nocclk
;
uint32_t
main_pll_nocdiv
;
uint32_t
main_pll_pllglob
;
uint32_t
main_pll_fdbck
;
uint32_t
main_pll_pllc0
;
uint32_t
main_pll_pllc1
;
uint32_t
main_pll_pllc2
;
uint32_t
main_pll_pllc3
;
uint32_t
main_pll_pllm
;
uint32_t
per_pll_emacctl
;
uint32_t
per_pll_gpiodiv
;
uint32_t
per_pll_pllglob
;
uint32_t
per_pll_fdbck
;
uint32_t
per_pll_pllc0
;
uint32_t
per_pll_pllc1
;
uint32_t
per_pll_pllc2
;
uint32_t
per_pll_pllc3
;
uint32_t
per_pll_pllm
;
uint32_t
alt_emacactr
;
uint32_t
alt_emacbctr
;
uint32_t
alt_emacptpctr
;
uint32_t
alt_gpiodbctr
;
uint32_t
alt_sdmmcctr
;
uint32_t
alt_s2fuser0ctr
;
uint32_t
alt_s2fuser1ctr
;
uint32_t
alt_psirefctr
;
uint32_t
hps_osc_clk_h
;
uint32_t
fpga_clk_hz
;
uint32_t
_pad_0x604_0x610
[
3
];
/* misc configuration */
uint32_t
misc_magic
;
uint32_t
misc_length
;
uint32_t
_pad_0x618_0x620
[
2
];
uint32_t
boot_source
;
}
handoff
;
int
verify_handoff_image
(
handoff
*
hoff_ptr
,
handoff
*
reverse_hoff_ptr
);
int
agilex_get_handoff
(
handoff
*
hoff_ptr
);
#endif
plat/intel/soc/agilex/include/agilex_mailbox.h
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef AGX_MBOX_H
#define AGX_MBOX_H
#define MBOX_OFFSET 0xffa30000
#define MBOX_ATF_CLIENT_ID 0x1
#define MBOX_JOB_ID 0x1
/* Mailbox interrupt flags and masks */
#define MBOX_INT_FLAG_COE 0x1
#define MBOX_INT_FLAG_RIE 0x2
#define MBOX_INT_FLAG_UAE 0x100
#define MBOX_COE_BIT(INTERRUPT) ((INTERRUPT) & 0x3)
#define MBOX_UAE_BIT(INTERRUPT) (((INTERRUPT) & (1<<8)))
/* Mailbox response and status */
#define MBOX_RESP_BUFFER_SIZE 16
#define MBOX_RESP_ERR(BUFFER) ((BUFFER) & 0x00000fff)
#define MBOX_RESP_LEN(BUFFER) (((BUFFER) & 0x007ff000) >> 12)
#define MBOX_RESP_CLIENT_ID(BUFFER) (((BUFFER) & 0xf0000000) >> 28)
#define MBOX_RESP_JOB_ID(BUFFER) (((BUFFER) & 0x0f000000) >> 24)
#define MBOX_STATUS_UA_MASK (1<<8)
/* Mailbox command and response */
#define MBOX_CMD_FREE_OFFSET 0x14
#define MBOX_CMD_BUFFER_SIZE 32
#define MBOX_CLIENT_ID_CMD(CLIENT_ID) ((CLIENT_ID) << 28)
#define MBOX_JOB_ID_CMD(JOB_ID) (JOB_ID<<24)
#define MBOX_CMD_LEN_CMD(CMD_LEN) ((CMD_LEN) << 12)
#define MBOX_INDIRECT (1 << 11)
#define MBOX_INSUFFICIENT_BUFFER -2
#define MBOX_CIN 0x00
#define MBOX_ROUT 0x04
#define MBOX_URG 0x08
#define MBOX_INT 0x0C
#define MBOX_COUT 0x20
#define MBOX_RIN 0x24
#define MBOX_STATUS 0x2C
#define MBOX_CMD_BUFFER 0x40
#define MBOX_RESP_BUFFER 0xC0
#define MBOX_RESP_BUFFER_SIZE 16
#define MBOX_RESP_OK 0
#define MBOX_RESP_INVALID_CMD 1
#define MBOX_RESP_UNKNOWN_BR 2
#define MBOX_RESP_UNKNOWN 3
#define MBOX_RESP_NOT_CONFIGURED 256
/* Mailbox SDM doorbell */
#define MBOX_DOORBELL_TO_SDM 0x400
#define MBOX_DOORBELL_FROM_SDM 0x480
/* Mailbox QSPI commands */
#define MBOX_CMD_RESTART 2
#define MBOX_CMD_QSPI_OPEN 50
#define MBOX_CMD_QSPI_CLOSE 51
#define MBOX_CMD_QSPI_DIRECT 59
#define MBOX_CMD_GET_IDCODE 16
#define MBOX_CMD_QSPI_SET_CS 52
/* Mailbox REBOOT commands */
#define MBOX_CMD_REBOOT_HPS 71
/* Generic error handling */
#define MBOX_TIMEOUT -2047
#define MBOX_NO_RESPONSE -2
#define MBOX_WRONG_ID -3
/* Mailbox status */
#define RECONFIG_STATUS_STATE 0
#define RECONFIG_STATUS_PIN_STATUS 2
#define RECONFIG_STATUS_SOFTFUNC_STATUS 3
#define PIN_STATUS_NSTATUS (1 << 31)
#define SOFTFUNC_STATUS_SEU_ERROR (1 << 3)
#define SOFTFUNC_STATUS_INIT_DONE (1 << 1)
#define SOFTFUNC_STATUS_CONF_DONE (1 << 0)
#define MBOX_CFGSTAT_STATE_CONFIG 0x10000000
/* SMC function IDs for SiP Service queries */
#define SIP_SVC_CALL_COUNT 0x8200ff00
#define SIP_SVC_UID 0x8200ff01
#define SIP_SVC_VERSION 0x8200ff03
/* SiP Service Calls version numbers */
#define SIP_SVC_VERSION_MAJOR 0
#define SIP_SVC_VERSION_MINOR 1
/* Mailbox reconfiguration commands */
#define MBOX_RECONFIG 6
#define MBOX_RECONFIG_DATA 8
#define MBOX_RECONFIG_STATUS 9
/* Sip get memory */
#define INTEL_SIP_SMC_FPGA_CONFIG_START 0xC2000001
#define INTEL_SIP_SMC_FPGA_CONFIG_GET_MEM 0xC2000005
#define INTEL_SIP_SMC_FPGA_CONFIG_ISDONE 0xC2000004
#define INTEL_SIP_SMC_FPGA_CONFIG_WRITE 0x42000002
#define INTEL_SIP_SMC_FPGA_CONFIG_COMPLETED_WRITE 0xC2000003
#define INTEL_SIP_SMC_STATUS_OK 0
#define INTEL_SIP_SMC_STATUS_ERROR 0x4
#define INTEL_SIP_SMC_STATUS_BUSY 0x1
#define INTEL_SIP_SMC_STATUS_REJECTED 0x2
#define INTEL_SIP_SMC_FPGA_CONFIG_ADDR 0x1000
#define INTEL_SIP_SMC_FPGA_CONFIG_SIZE 16777216
void
mailbox_set_int
(
int
interrupt_input
);
int
mailbox_init
(
void
);
void
mailbox_set_qspi_close
(
void
);
void
mailbox_set_qspi_open
(
void
);
void
mailbox_set_qspi_direct
(
void
);
int
mailbox_send_cmd
(
int
job_id
,
unsigned
int
cmd
,
uint32_t
*
args
,
int
len
,
int
urgent
,
uint32_t
*
response
);
void
mailbox_send_cmd_async
(
int
job_id
,
unsigned
int
cmd
,
uint32_t
*
args
,
int
len
,
int
urgent
);
int
mailbox_read_response
(
int
job_id
,
uint32_t
*
response
);
int
mailbox_get_qspi_clock
(
void
);
void
mailbox_reset_cold
(
void
);
#endif
plat/intel/soc/agilex/include/agilex_memory_controller.h
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef AGX_MEMORYCONTROLLER_H
#define AGX_MEMORYCONTROLLER_H
#define AGX_MPFE_IOHMC_REG_DRAMADDRW 0xf80100a8
#define AGX_MPFE_IOHMC_CTRLCFG0 0xf8010028
#define AGX_MPFE_IOHMC_CTRLCFG1 0xf801002c
#define AGX_MPFE_IOHMC_DRAMADDRW 0xf80100a8
#define AGX_MPFE_IOHMC_DRAMTIMING0 0xf8010050
#define AGX_MPFE_IOHMC_CALTIMING0 0xf801007c
#define AGX_MPFE_IOHMC_CALTIMING1 0xf8010080
#define AGX_MPFE_IOHMC_CALTIMING2 0xf8010084
#define AGX_MPFE_IOHMC_CALTIMING3 0xf8010088
#define AGX_MPFE_IOHMC_CALTIMING4 0xf801008c
#define AGX_MPFE_IOHMC_CALTIMING9 0xf80100a0
#define AGX_MPFE_IOHMC_CALTIMING9_ACT_TO_ACT(x) (((x) & 0x000000ff) >> 0)
#define AGX_MPFE_IOHMC_CTRLCFG1_CFG_ADDR_ORDER(value) \
(((value) & 0x00000060) >> 5)
#define AGX_RSTMGR_BRGMODRST 0xffd1102c
#define AGX_RSTMGR_BRGMODRST_DDRSCH 0x00000040
#define AGX_MPFE_HMC_ADP_ECCCTRL1 0xf8011100
#define AGX_MPFE_HMC_ADP_ECCCTRL2 0xf8011104
#define AGX_MPFE_HMC_ADP_RSTHANDSHAKESTAT 0xf8011218
#define AGX_MPFE_HMC_ADP_RSTHANDSHAKESTAT_SEQ2CORE 0x000000ff
#define AGX_MPFE_HMC_ADP_RSTHANDSHAKECTRL 0xf8011214
#define AGX_MPFE_IOHMC_REG_CTRLCFG1 0xf801002c
#define AGX_MPFE_IOHMC_REG_NIOSRESERVE0_OFST 0xf8010110
#define IOHMC_DRAMADDRW_COL_ADDR_WIDTH(x) (((x) & 0x0000001f) >> 0)
#define IOHMC_DRAMADDRW_ROW_ADDR_WIDTH(x) (((x) & 0x000003e0) >> 5)
#define IOHMC_DRAMADDRW_CS_ADDR_WIDTH(x) (((x) & 0x00070000) >> 16)
#define IOHMC_DRAMADDRW_BANK_GRP_ADDR_WIDTH(x) (((x) & 0x0000c000) >> 14)
#define IOHMC_DRAMADDRW_BANK_ADDR_WIDTH(x) (((x) & 0x00003c00) >> 10)
#define AGX_MPFE_DDR(x) (0xf8000000 + x)
#define AGX_MPFE_HMC_ADP_DDRCALSTAT 0xf801100c
#define AGX_MPFE_DDR_MAIN_SCHED 0xf8000400
#define AGX_MPFE_DDR_MAIN_SCHED_DDRCONF 0xf8000408
#define AGX_MPFE_DDR_MAIN_SCHED_DDRTIMING 0xf800040c
#define AGX_MPFE_DDR_MAIN_SCHED_DDRCONF_SET_MSK 0x0000001f
#define AGX_MPFE_DDR_MAIN_SCHED_DDRMODE 0xf8000410
#define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV 0xf800043c
#define AGX_MPFE_DDR_MAIN_SCHED_READLATENCY 0xf8000414
#define AGX_MPFE_DDR_MAIN_SCHED_ACTIVATE 0xf8000438
#define AGX_MPFE_DDR_MAIN_SCHED_ACTIVATE_FAWBANK_OFST 10
#define AGX_MPFE_DDR_MAIN_SCHED_ACTIVATE_FAW_OFST 4
#define AGX_MPFE_DDR_MAIN_SCHED_ACTIVATE_RRD_OFST 0
#define AGX_MPFE_DDR_MAIN_SCHED_DDRCONF_SET(x) (((x) << 0) & 0x0000001f)
#define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSRDTORD_OFST 0
#define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSRDTORD_MSK (BIT(0) | BIT(1))
#define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSRDTOWR_OFST 2
#define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSRDTOWR_MSK (BIT(2) | BIT(3))
#define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSWRTORD_OFST 4
#define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSWRTORD_MSK (BIT(4) | BIT(5))
#define AGX_MPFE_HMC_ADP(x) (0xf8011000 + (x))
#define AGX_MPFE_HMC_ADP_HPSINTFCSEL 0xf8011210
#define AGX_MPFE_HMC_ADP_DDRIOCTRL 0xf8011008
#define HMC_ADP_DDRIOCTRL 0x8
#define HMC_ADP_DDRIOCTRL_IO_SIZE(x) (((x) & 0x00000003) >> 0)
#define HMC_ADP_DDRIOCTRL_CTRL_BURST_LENGTH(x) (((x) & 0x00003e00) >> 9)
#define ADP_DRAMADDRWIDTH 0xe0
#define ACT_TO_ACT_DIFF_BANK(value) (((value) & 0x00fc0000) >> 18)
#define ACT_TO_ACT(value) (((value) & 0x0003f000) >> 12)
#define ACT_TO_RDWR(value) (((value) & 0x0000003f) >> 0)
#define ACT_TO_ACT(value) (((value) & 0x0003f000) >> 12)
/* timing 2 */
#define RD_TO_RD_DIFF_CHIP(value) (((value) & 0x00000fc0) >> 6)
#define RD_TO_WR_DIFF_CHIP(value) (((value) & 0x3f000000) >> 24)
#define RD_TO_WR(value) (((value) & 0x00fc0000) >> 18)
#define RD_TO_PCH(value) (((value) & 0x00000fc0) >> 6)
/* timing 3 */
#define CALTIMING3_WR_TO_RD_DIFF_CHIP(value) (((value) & 0x0003f000) >> 12)
#define CALTIMING3_WR_TO_RD(value) (((value) & 0x00000fc0) >> 6)
/* timing 4 */
#define PCH_TO_VALID(value) (((value) & 0x00000fc0) >> 6)
#define DDRTIMING_BWRATIO_OFST 31
#define DDRTIMING_WRTORD_OFST 26
#define DDRTIMING_RDTOWR_OFST 21
#define DDRTIMING_BURSTLEN_OFST 18
#define DDRTIMING_WRTOMISS_OFST 12
#define DDRTIMING_RDTOMISS_OFST 6
#define DDRTIMING_ACTTOACT_OFST 0
#define ADP_DDRIOCTRL_IO_SIZE(x) (((x) & 0x3) >> 0)
#define DDRMODE_AUTOPRECHARGE_OFST 1
#define DDRMODE_BWRATIOEXTENDED_OFST 0
#define AGX_MPFE_IOHMC_REG_DRAMTIMING0_CFG_TCL(x) (((x) & 0x7f) >> 0)
#define AGX_MPFE_IOHMC_REG_CTRLCFG0_CFG_MEM_TYPE(x) (((x) & 0x0f) >> 0)
#define AGX_CCU_CPU0_MPRT_DDR 0xf7004400
#define AGX_CCU_CPU0_MPRT_MEM0 0xf70045c0
#define AGX_CCU_CPU0_MPRT_MEM1A 0xf70045e0
#define AGX_CCU_CPU0_MPRT_MEM1B 0xf7004600
#define AGX_CCU_CPU0_MPRT_MEM1C 0xf7004620
#define AGX_CCU_CPU0_MPRT_MEM1D 0xf7004640
#define AGX_CCU_CPU0_MPRT_MEM1E 0xf7004660
#define AGX_CCU_IOM_MPRT_MEM0 0xf7018560
#define AGX_CCU_IOM_MPRT_MEM1A 0xf7018580
#define AGX_CCU_IOM_MPRT_MEM1B 0xf70185a0
#define AGX_CCU_IOM_MPRT_MEM1C 0xf70185c0
#define AGX_CCU_IOM_MPRT_MEM1D 0xf70185e0
#define AGX_CCU_IOM_MPRT_MEM1E 0xf7018600
#define AGX_NOC_FW_DDR_SCR 0xf8020200
#define AGX_NOC_FW_DDR_SCR_MPUREGION0ADDR_LIMITEXT 0xf802021c
#define AGX_NOC_FW_DDR_SCR_MPUREGION0ADDR_LIMIT 0xf8020218
#define AGX_NOC_FW_DDR_SCR_NONMPUREGION0ADDR_LIMITEXT 0xf802029c
#define AGX_NOC_FW_DDR_SCR_NONMPUREGION0ADDR_LIMIT 0xf8020298
#define AGX_SOC_NOC_FW_DDR_SCR_ENABLE 0xf8020200
#define AGX_CCU_NOC_DI_SET_MSK 0x10
#define AGX_SYSMGR_CORE_HMC_CLK 0xffd120b4
#define AGX_SYSMGR_CORE_HMC_CLK_STATUS 0x00000001
#define AGX_MPFE_IOHMC_NIOSRESERVE0_NIOS_RESERVE0(x) (((x) & 0xffff) >> 0)
#define AGX_MPFE_HMC_ADP_DDRIOCTRL_IO_SIZE_MSK 0x00000003
#define AGX_MPFE_HMC_ADP_DDRIOCTRL_IO_SIZE_OFST 0
#define AGX_MPFE_HMC_ADP_HPSINTFCSEL_ENABLE 0x001f1f1f
#define AGX_IOHMC_CTRLCFG1_ENABLE_ECC_OFST 7
#define AGX_MPFE_HMC_ADP_ECCCTRL1_AUTOWB_CNT_RST_SET_MSK 0x00010000
#define AGX_MPFE_HMC_ADP_ECCCTRL1_CNT_RST_SET_MSK 0x00000100
#define AGX_MPFE_HMC_ADP_ECCCTRL1_ECC_EN_SET_MSK 0x00000001
#define AGX_MPFE_HMC_ADP_ECCCTRL2_AUTOWB_EN_SET_MSK 0x00000001
#define AGX_MPFE_HMC_ADP_ECCCTRL2_OVRW_RB_ECC_EN_SET_MSK 0x00010000
#define AGX_MPFE_HMC_ADP_ECCCTRL2_RMW_EN_SET_MSK 0x00000100
#define AGX_MPFE_HMC_ADP_DDRCALSTAT_CAL(value) (((value) & 0x1) >> 0)
#define AGX_MPFE_HMC_ADP_DDRIOCTRL_IO_SIZE(x) (((x) & 0x00003) >> 0)
#define IOHMC_DRAMADDRW_CFG_BANK_ADDR_WIDTH(x) (((x) & 0x03c00) >> 10)
#define IOHMC_DRAMADDRW_CFG_BANK_GROUP_ADDR_WIDTH(x) (((x) & 0x0c000) >> 14)
#define IOHMC_DRAMADDRW_CFG_COL_ADDR_WIDTH(x) (((x) & 0x0001f) >> 0)
#define IOHMC_DRAMADDRW_CFG_CS_ADDR_WIDTH(x) (((x) & 0x70000) >> 16)
#define IOHMC_DRAMADDRW_CFG_ROW_ADDR_WIDTH(x) (((x) & 0x003e0) >> 5)
#define AGX_SDRAM_0_LB_ADDR 0x0
int
init_hard_memory_controller
(
void
);
#endif
plat/intel/soc/agilex/include/agilex_noc.h
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef AGX_NOC_H
#define AGX_NOC_H
#define AXI_AP (1<<0)
#define FPGA2SOC (1<<16)
#define MPU (1<<24)
#define AGX_NOC_PER_SCR_NAND 0xffd21000
#define AGX_NOC_PER_SCR_NAND_DATA 0xffd21004
#define AGX_NOC_PER_SCR_USB0 0xffd2100c
#define AGX_NOC_PER_SCR_USB1 0xffd21010
#define AGX_NOC_PER_SCR_SPI_M0 0xffd2101c
#define AGX_NOC_PER_SCR_SPI_M1 0xffd21020
#define AGX_NOC_PER_SCR_SPI_S0 0xffd21024
#define AGX_NOC_PER_SCR_SPI_S1 0xffd21028
#define AGX_NOC_PER_SCR_EMAC0 0xffd2102c
#define AGX_NOC_PER_SCR_EMAC1 0xffd21030
#define AGX_NOC_PER_SCR_EMAC2 0xffd21034
#define AGX_NOC_PER_SCR_SDMMC 0xffd21040
#define AGX_NOC_PER_SCR_GPIO0 0xffd21044
#define AGX_NOC_PER_SCR_GPIO1 0xffd21048
#define AGX_NOC_PER_SCR_I2C0 0xffd21050
#define AGX_NOC_PER_SCR_I2C1 0xffd21058
#define AGX_NOC_PER_SCR_I2C2 0xffd2105c
#define AGX_NOC_PER_SCR_I2C3 0xffd21060
#define AGX_NOC_PER_SCR_SP_TIMER0 0xffd21064
#define AGX_NOC_PER_SCR_SP_TIMER1 0xffd21068
#define AGX_NOC_PER_SCR_UART0 0xffd2106c
#define AGX_NOC_PER_SCR_UART1 0xffd21070
#define AGX_NOC_SYS_SCR_DMA_ECC 0xffd21108
#define AGX_NOC_SYS_SCR_EMAC0RX_ECC 0xffd2110c
#define AGX_NOC_SYS_SCR_EMAC0TX_ECC 0xffd21110
#define AGX_NOC_SYS_SCR_EMAC1RX_ECC 0xffd21114
#define AGX_NOC_SYS_SCR_EMAC1TX_ECC 0xffd21118
#define AGX_NOC_SYS_SCR_EMAC2RX_ECC 0xffd2111c
#define AGX_NOC_SYS_SCR_EMAC2TX_ECC 0xffd21120
#define AGX_NOC_SYS_SCR_NAND_ECC 0xffd2112c
#define AGX_NOC_SYS_SCR_NAND_READ_ECC 0xffd21130
#define AGX_NOC_SYS_SCR_NAND_WRITE_ECC 0xffd21134
#define AGX_NOC_SYS_SCR_OCRAM_ECC 0xffd21138
#define AGX_NOC_SYS_SCR_SDMMC_ECC 0xffd21140
#define AGX_NOC_SYS_SCR_USB0_ECC 0xffd21144
#define AGX_NOC_SYS_SCR_USB1_ECC 0xffd21148
#define AGX_NOC_SYS_SCR_CLK_MGR 0xffd2114c
#define AGX_NOC_SYS_SCR_IO_MGR 0xffd21154
#define AGX_NOC_SYS_SCR_RST_MGR 0xffd21158
#define AGX_NOC_SYS_SCR_SYS_MGR 0xffd2115c
#define AGX_NOC_SYS_SCR_OSC0_TIMER 0xffd21160
#define AGX_NOC_SYS_SCR_OSC1_TIMER 0xffd21164
#define AGX_NOC_SYS_SCR_WATCHDOG0 0xffd21168
#define AGX_NOC_SYS_SCR_WATCHDOG1 0xffd2116c
#define AGX_NOC_SYS_SCR_WATCHDOG2 0xffd21170
#define AGX_NOC_SYS_SCR_WATCHDOG3 0xffd21174
#define AGX_NOC_SYS_SCR_DAP 0xffd21178
#define AGX_NOC_SYS_SCR_L4_NOC_PROBES 0xffd21190
#define AGX_NOC_SYS_SCR_L4_NOC_QOS 0xffd21194
#define AGX_CCU_NOC_BRIDGE_CPU0_RAM 0xf7004688
#define AGX_CCU_NOC_BRIDGE_IOM_RAM 0xf7004688
#endif
plat/intel/soc/agilex/include/agilex_pinmux.h
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef AGX_PINMUX_H
#define AGX_PINMUX_H
#define AGX_PINMUX_PIN0SEL 0xffd13000
#define AGX_PINMUX_IO0CTRL 0xffd13130
#define AGX_PINMUX_PINMUX_EMAC0_USEFPGA 0xffd13300
#define AGX_PINMUX_IO0_DELAY 0xffd13400
#include "agilex_handoff.h"
void
config_pinmux
(
handoff
*
handoff
);
#endif
plat/intel/soc/agilex/include/agilex_private.h
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef AGX_PRIVATE_H
#define AGX_PRIVATE_H
#define AGX_MMC_REG_BASE 0xff808000
#define EMMC_DESC_SIZE (1<<20)
#define EMMC_INIT_PARAMS(base) \
{ .bus_width = MMC_BUS_WIDTH_4, \
.clk_rate = 50000000, \
.desc_base = (base), \
.desc_size = EMMC_DESC_SIZE, \
.flags = 0, \
.reg_base = AGX_MMC_REG_BASE, \
\
}
typedef
enum
{
BOOT_SOURCE_FPGA
=
0
,
BOOT_SOURCE_SDMMC
,
BOOT_SOURCE_NAND
,
BOOT_SOURCE_RSVD
,
BOOT_SOURCE_QSPI
,
}
boot_source_type
;
void
enable_nonsecure_access
(
void
);
void
socfpga_io_setup
(
int
boot_source
);
#endif
plat/intel/soc/agilex/include/agilex_reset_manager.h
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef AGX_RESETMANAGER_H
#define AGX_RESETMANAGER_H
#define AGX_RSTMGR_HDSKEN 0xffd11010
#define AGX_RSTMGR_PER0MODRST 0xffd11024
#define AGX_RSTMGR_PER1MODRST 0xffd11028
#define AGX_RSTMGR_BRGMODRST 0xffd1102c
#define AGX_RSTMGR_PER0MODRST_EMAC0 0x00000001
#define AGX_RSTMGR_PER0MODRST_EMAC1 0x00000002
#define AGX_RSTMGR_PER0MODRST_EMAC2 0x00000004
#define AGX_RSTMGR_PER0MODRST_USB0 0x00000008
#define AGX_RSTMGR_PER0MODRST_USB1 0x00000010
#define AGX_RSTMGR_PER0MODRST_NAND 0x00000020
#define AGX_RSTMGR_PER0MODRST_SDMMC 0x00000080
#define AGX_RSTMGR_PER0MODRST_EMAC0OCP 0x00000100
#define AGX_RSTMGR_PER0MODRST_EMAC1OCP 0x00000200
#define AGX_RSTMGR_PER0MODRST_EMAC2OCP 0x00000400
#define AGX_RSTMGR_PER0MODRST_USB0OCP 0x00000800
#define AGX_RSTMGR_PER0MODRST_USB1OCP 0x00001000
#define AGX_RSTMGR_PER0MODRST_NANDOCP 0x00002000
#define AGX_RSTMGR_PER0MODRST_SDMMCOCP 0x00008000
#define AGX_RSTMGR_PER0MODRST_DMA 0x00010000
#define AGX_RSTMGR_PER0MODRST_SPIM0 0x00020000
#define AGX_RSTMGR_PER0MODRST_SPIM1 0x00040000
#define AGX_RSTMGR_PER0MODRST_SPIS0 0x00080000
#define AGX_RSTMGR_PER0MODRST_SPIS1 0x00100000
#define AGX_RSTMGR_PER0MODRST_DMAOCP 0x00200000
#define AGX_RSTMGR_PER0MODRST_EMACPTP 0x00400000
#define AGX_RSTMGR_PER0MODRST_DMAIF0 0x01000000
#define AGX_RSTMGR_PER0MODRST_DMAIF1 0x02000000
#define AGX_RSTMGR_PER0MODRST_DMAIF2 0x04000000
#define AGX_RSTMGR_PER0MODRST_DMAIF3 0x08000000
#define AGX_RSTMGR_PER0MODRST_DMAIF4 0x10000000
#define AGX_RSTMGR_PER0MODRST_DMAIF5 0x20000000
#define AGX_RSTMGR_PER0MODRST_DMAIF6 0x40000000
#define AGX_RSTMGR_PER0MODRST_DMAIF7 0x80000000
#define AGX_RSTMGR_PER1MODRST_WATCHDOG0 0x1
#define AGX_RSTMGR_PER1MODRST_WATCHDOG1 0x2
#define AGX_RSTMGR_PER1MODRST_WATCHDOG2 0x4
#define AGX_RSTMGR_PER1MODRST_WATCHDOG3 0x8
#define AGX_RSTMGR_PER1MODRST_L4SYSTIMER0 0x00000010
#define AGX_RSTMGR_PER1MODRST_L4SYSTIMER1 0x00000020
#define AGX_RSTMGR_PER1MODRST_SPTIMER0 0x00000040
#define AGX_RSTMGR_PER1MODRST_SPTIMER1 0x00000080
#define AGX_RSTMGR_PER1MODRST_I2C0 0x00000100
#define AGX_RSTMGR_PER1MODRST_I2C1 0x00000200
#define AGX_RSTMGR_PER1MODRST_I2C2 0x00000400
#define AGX_RSTMGR_PER1MODRST_I2C3 0x00000800
#define AGX_RSTMGR_PER1MODRST_I2C4 0x00001000
#define AGX_RSTMGR_PER1MODRST_UART0 0x00010000
#define AGX_RSTMGR_PER1MODRST_UART1 0x00020000
#define AGX_RSTMGR_PER1MODRST_GPIO0 0x01000000
#define AGX_RSTMGR_PER1MODRST_GPIO1 0x02000000
#define AGX_RSTMGR_HDSKEN_FPGAHSEN 0x00000004
#define AGX_RSTMGR_HDSKEN_ETRSTALLEN 0x00000008
#define AGX_RSTMGR_HDSKEN_L2FLUSHEN 0x00000100
#define AGX_RSTMGR_HDSKEN_L3NOC_DBG 0x00010000
#define AGX_RSTMGR_HDSKEN_DEBUG_L3NOC 0x00020000
#define AGX_RSTMGR_HDSKEN_SDRSELFREFEN 0x00000001
#define AGX_RSTMGR_BRGMODRST_SOC2FPGA 0x1
#define AGX_RSTMGR_BRGMODRST_LWHPS2FPGA 0x2
#define AGX_RSTMGR_BRGMODRST_FPGA2SOC 0x4
#define AGX_RSTMGR_BRGMODRST_MPFE 0x40
void
deassert_peripheral_reset
(
void
);
void
config_hps_hs_before_warm_reset
(
void
);
#endif
plat/intel/soc/agilex/include/agilex_system_manager.h
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef AGX_SYSTEMMANAGER_H
#define AGX_SYSTEMMANAGER_H
#define AGX_FIREWALL_SOC2FPGA 0xffd21200
#define AGX_FIREWALL_LWSOC2FPGA 0xffd21300
#define AGX_NOC_FW_L4_PER_SCR_NAND_REGISTER 0xffd21000
#define AGX_NOC_FW_L4_PER_SCR_NAND_DATA 0xffd21004
#define AGX_NOC_FW_L4_PER_SCR_USB0_REGISTER 0xffd2100c
#define AGX_NOC_FW_L4_PER_SCR_USB1_REGISTER 0xffd21010
#define AGX_NOC_FW_L4_PER_SCR_SPI_MASTER0 0xffd2101c
#define AGX_NOC_FW_L4_PER_SCR_SPI_MASTER1 0xffd21020
#define AGX_NOC_FW_L4_PER_SCR_SPI_SLAVE0 0xffd21024
#define AGX_NOC_FW_L4_PER_SCR_SPI_SLAVE1 0xffd21028
#define AGX_NOC_FW_L4_PER_SCR_EMAC0 0xffd2102c
#define AGX_NOC_FW_L4_PER_SCR_EMAC1 0xffd21030
#define AGX_NOC_FW_L4_PER_SCR_EMAC2 0xffd21034
#define AGX_NOC_FW_L4_PER_SCR_SDMMC 0xffd21040
#define AGX_NOC_FW_L4_PER_SCR_GPIO0 0xffd21044
#define AGX_NOC_FW_L4_PER_SCR_GPIO1 0xffd21048
#define AGX_NOC_FW_L4_PER_SCR_I2C0 0xffd21050
#define AGX_NOC_FW_L4_PER_SCR_I2C1 0xffd21054
#define AGX_NOC_FW_L4_PER_SCR_I2C2 0xffd21058
#define AGX_NOC_FW_L4_PER_SCR_I2C3 0xffd2105c
#define AGX_NOC_FW_L4_PER_SCR_I2C4 0xffd21060
#define AGX_NOC_FW_L4_PER_SCR_SP_TIMER0 0xffd21064
#define AGX_NOC_FW_L4_PER_SCR_SP_TIMER1 0xffd21068
#define AGX_NOC_FW_L4_PER_SCR_UART0 0xffd2106c
#define AGX_NOC_FW_L4_PER_SCR_UART1 0xffd21070
#define AGX_NOC_FW_L4_SYS_SCR_DMA_ECC 0xffd21108
#define AGX_NOC_FW_L4_SYS_SCR_EMAC0RX_ECC 0xffd2110c
#define AGX_NOC_FW_L4_SYS_SCR_EMAC0TX_ECC 0xffd21110
#define AGX_NOC_FW_L4_SYS_SCR_EMAC1RX_ECC 0xffd21114
#define AGX_NOC_FW_L4_SYS_SCR_EMAC1TX_ECC 0xffd21118
#define AGX_NOC_FW_L4_SYS_SCR_EMAC2RX_ECC 0xffd2111c
#define AGX_NOC_FW_L4_SYS_SCR_EMAC2TX_ECC 0xffd21120
#define AGX_NOC_FW_L4_SYS_SCR_NAND_ECC 0xffd2112c
#define AGX_NOC_FW_L4_SYS_SCR_NAND_READ_ECC 0xffd21130
#define AGX_NOC_FW_L4_SYS_SCR_NAND_WRITE_ECC 0xffd21134
#define AGX_NOC_FW_L4_SYS_SCR_OCRAM_ECC 0xffd21138
#define AGX_NOC_FW_L4_SYS_SCR_SDMMC_ECC 0xffd21140
#define AGX_NOC_FW_L4_SYS_SCR_USB0_ECC 0xffd21144
#define AGX_NOC_FW_L4_SYS_SCR_USB1_ECC 0xffd21148
#define AGX_NOC_FW_L4_SYS_SCR_CLK_MGR 0xffd2114c
#define AGX_NOC_FW_L4_SYS_SCR_IO_MGR 0xffd21154
#define AGX_NOC_FW_L4_SYS_SCR_RST_MGR 0xffd21158
#define AGX_NOC_FW_L4_SYS_SCR_SYS_MGR 0xffd2115c
#define AGX_NOC_FW_L4_SYS_SCR_OSC0_TIMER 0xffd21160
#define AGX_NOC_FW_L4_SYS_SCR_OSC1_TIMER 0xffd21164
#define AGX_NOC_FW_L4_SYS_SCR_WATCHDOG0 0xffd21168
#define AGX_NOC_FW_L4_SYS_SCR_WATCHDOG1 0xffd2116c
#define AGX_NOC_FW_L4_SYS_SCR_WATCHDOG2 0xffd21170
#define AGX_NOC_FW_L4_SYS_SCR_WATCHDOG3 0xffd21174
#define AGX_NOC_FW_L4_SYS_SCR_DAP 0xffd21178
#define AGX_NOC_FW_L4_SYS_SCR_L4_NOC_PROBES 0xffd21190
#define AGX_NOC_FW_L4_SYS_SCR_L4_NOC_QOS 0xffd21194
#define AGX_CCU_NOC_CPU0_RAMSPACE0_0 0xf7004688
#define AGX_CCU_NOC_IOM_RAMSPACE0_0 0xf7018628
#define DISABLE_BRIDGE_FIREWALL 0x0ffe0101
#define DISABLE_L4_FIREWALL (BIT(0) | BIT(16) | BIT(24))
void
enable_nonsecure_access
(
void
);
void
enable_ns_bridge_access
(
void
);
#endif
plat/intel/soc/agilex/include/plat_macros.S
0 → 100644
View file @
b514ee86
/*
*
Copyright
(
c
)
2019
,
Intel
Corporation
.
All
rights
reserved
.
*
*
SPDX
-
License
-
Identifier
:
BSD
-
3
-
Clause
*/
#ifndef PLAT_MACROS_S
#define PLAT_MACROS_S
#include <platform_def.h>
/
*
---------------------------------------------
*
The
below
required
platform
porting
macro
*
prints
out
relevant
platform
registers
*
whenever
an
unhandled
exception
is
taken
in
*
BL31
.
*
---------------------------------------------
*/
.
macro
plat_crash_print_regs
.
endm
#endif /* PLAT_MACROS_S */
plat/intel/soc/agilex/include/platform_def.h
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef PLATFORM_DEF_H
#define PLATFORM_DEF_H
#include <arch.h>
#include <common/interrupt_props.h>
#include <common/tbbr/tbbr_img_def.h>
#include <plat/common/common_def.h>
#define PLAT_CPUID_RELEASE 0xffe1b000
#define PLAT_AGX_SEC_ENTRY 0xffe1b008
/* Define next boot image name and offset */
#define PLAT_NS_IMAGE_OFFSET 0x50000
#define PLAT_HANDOFF_OFFSET 0xFFE3F000
/*******************************************************************************
* Platform binary types for linking
******************************************************************************/
#define PLATFORM_LINKER_FORMAT "elf64-littleaarch64"
#define PLATFORM_LINKER_ARCH aarch64
/* Agilex supports up to 124GB RAM */
#define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 39)
#define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 39)
/*******************************************************************************
* Generic platform constants
******************************************************************************/
#define PLAT_PRIMARY_CPU 0
#define PLAT_SECONDARY_ENTRY_BASE 0x01f78bf0
/* Size of cacheable stacks */
#define PLATFORM_STACK_SIZE 0x2000
/* PSCI related constant */
#define PLAT_NUM_POWER_DOMAINS 5
#define PLAT_MAX_PWR_LVL 1
#define PLAT_MAX_RET_STATE 1
#define PLAT_MAX_OFF_STATE 2
#define PLATFORM_SYSTEM_COUNT 1
#define PLATFORM_CLUSTER_COUNT 1
#define PLATFORM_CLUSTER0_CORE_COUNT 4
#define PLATFORM_CLUSTER1_CORE_COUNT 0
#define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER1_CORE_COUNT + \
PLATFORM_CLUSTER0_CORE_COUNT)
#define PLATFORM_MAX_CPUS_PER_CLUSTER 4
/* Interrupt related constant */
#define INTEL_AGX_IRQ_SEC_PHY_TIMER 29
#define INTEL_AGX_IRQ_SEC_SGI_0 8
#define INTEL_AGX_IRQ_SEC_SGI_1 9
#define INTEL_AGX_IRQ_SEC_SGI_2 10
#define INTEL_AGX_IRQ_SEC_SGI_3 11
#define INTEL_AGX_IRQ_SEC_SGI_4 12
#define INTEL_AGX_IRQ_SEC_SGI_5 13
#define INTEL_AGX_IRQ_SEC_SGI_6 14
#define INTEL_AGX_IRQ_SEC_SGI_7 15
#define TSP_IRQ_SEC_PHY_TIMER INTEL_AGX_IRQ_SEC_PHY_TIMER
#define TSP_SEC_MEM_BASE BL32_BASE
#define TSP_SEC_MEM_SIZE (BL32_LIMIT - BL32_BASE + 1)
/*******************************************************************************
* Platform memory map related constants
******************************************************************************/
#define DRAM_BASE (0x0)
#define DRAM_SIZE (0x80000000)
#define OCRAM_BASE (0xFFE00000)
#define OCRAM_SIZE (0x00040000)
#define MEM64_BASE (0x0100000000)
#define MEM64_SIZE (0x1F00000000)
#define DEVICE1_BASE (0x80000000)
#define DEVICE1_SIZE (0x60000000)
#define DEVICE2_BASE (0xF7000000)
#define DEVICE2_SIZE (0x08E00000)
#define DEVICE3_BASE (0xFFFC0000)
#define DEVICE3_SIZE (0x00008000)
#define DEVICE4_BASE (0x2000000000)
#define DEVICE4_SIZE (0x0100000000)
/*******************************************************************************
* BL31 specific defines.
******************************************************************************/
/*
* Put BL3-1 at the top of the Trusted SRAM (just below the shared memory, if
* present). BL31_BASE is calculated using the current BL3-1 debug size plus a
* little space for growth.
*/
#define FIRMWARE_WELCOME_STR "Booting Trusted Firmware\n"
#define BL1_RO_BASE (0xffe00000)
#define BL1_RO_LIMIT (0xffe0f000)
#define BL1_RW_BASE (0xffe10000)
#define BL1_RW_LIMIT (0xffe1ffff)
#define BL1_RW_SIZE (0x14000)
#define BL2_BASE (0xffe00000)
#define BL2_LIMIT (0xffe1b000)
#define BL31_BASE (0xffe1c000)
#define BL31_LIMIT (0xffe3bfff)
/*******************************************************************************
* Platform specific page table and MMU setup constants
******************************************************************************/
#define MAX_XLAT_TABLES 8
#define MAX_MMAP_REGIONS 16
/*******************************************************************************
* 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)
#define PLAT_GIC_BASE (0xFFFC0000)
#define PLAT_GICC_BASE (PLAT_GIC_BASE + 0x2000)
#define PLAT_GICD_BASE (PLAT_GIC_BASE + 0x1000)
#define PLAT_GICR_BASE 0
/*******************************************************************************
* UART related constants
******************************************************************************/
#define PLAT_UART0_BASE (0xFFC02000)
#define PLAT_UART1_BASE (0xFFC02100)
#define CRASH_CONSOLE_BASE PLAT_UART0_BASE
#define PLAT_BAUDRATE (115200)
#define PLAT_UART_CLOCK (100000000)
/*******************************************************************************
* System counter frequency related constants
******************************************************************************/
#define PLAT_SYS_COUNTER_FREQ_IN_TICKS (400000000)
#define PLAT_SYS_COUNTER_FREQ_IN_MHZ (400)
#define PLAT_INTEL_AGX_GICD_BASE PLAT_GICD_BASE
#define PLAT_INTEL_AGX_GICC_BASE PLAT_GICC_BASE
/*
* Define a list of Group 1 Secure and Group 0 interrupts as per GICv3
* terminology. On a GICv2 system or mode, the lists will be merged and treated
* as Group 0 interrupts.
*/
#define PLAT_INTEL_AGX_G1S_IRQ_PROPS(grp) \
INTR_PROP_DESC(INTEL_AGX_IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, \
grp, GIC_INTR_CFG_LEVEL), \
INTR_PROP_DESC(INTEL_AGX_IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY, grp, \
GIC_INTR_CFG_EDGE), \
INTR_PROP_DESC(INTEL_AGX_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, grp, \
GIC_INTR_CFG_EDGE), \
INTR_PROP_DESC(INTEL_AGX_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, grp, \
GIC_INTR_CFG_EDGE), \
INTR_PROP_DESC(INTEL_AGX_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, grp, \
GIC_INTR_CFG_EDGE), \
INTR_PROP_DESC(INTEL_AGX_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, grp, \
GIC_INTR_CFG_EDGE), \
INTR_PROP_DESC(INTEL_AGX_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, grp, \
GIC_INTR_CFG_EDGE), \
INTR_PROP_DESC(INTEL_AGX_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, grp, \
GIC_INTR_CFG_EDGE), \
INTR_PROP_DESC(INTEL_AGX_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, grp, \
GIC_INTR_CFG_EDGE)
#define PLAT_INTEL_AGX_G0_IRQ_PROPS(grp)
#define MAX_IO_HANDLES 4
#define MAX_IO_DEVICES 4
#define MAX_IO_BLOCK_DEVICES 2
#endif
/* PLATFORM_DEF_H */
plat/intel/soc/agilex/include/socfpga_private.h
0 → 100644
View file @
b514ee86
/*
* Copyright (c) 2019, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef PLATFORM_PRIVATE_H
#define PLATFORM_PRIVATE_H
/*******************************************************************************
* Function and variable prototypes
******************************************************************************/
void
socfgpa_configure_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
socfpga_configure_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
socfpga_delay_timer_init
(
void
);
void
socfpga_gic_driver_init
(
void
);
uint32_t
socfpga_get_spsr_for_bl32_entry
(
void
);
uint32_t
socfpga_get_spsr_for_bl33_entry
(
void
);
unsigned
long
socfpga_get_ns_image_entrypoint
(
void
);
#endif
/* PLATFORM_PRIVATE_H */
plat/intel/soc/agilex/platform.mk
0 → 100644
View file @
b514ee86
#
# Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
# Copyright (c) 2019, Intel Corporation. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
#
PLAT_INCLUDES
:=
\
-Iplat
/intel/soc/agilex/include/
\
-Iplat
/intel/soc/common/drivers/
PLAT_BL_COMMON_SOURCES
:=
\
drivers/arm/gic/common/gic_common.c
\
drivers/arm/gic/v2/gicv2_main.c
\
drivers/arm/gic/v2/gicv2_helpers.c
\
drivers/delay_timer/delay_timer.c
\
drivers/delay_timer/generic_delay_timer.c
\
drivers/ti/uart/aarch64/16550_console.S
\
lib/xlat_tables/aarch64/xlat_tables.c
\
lib/xlat_tables/xlat_tables_common.c
\
plat/common/plat_gicv2.c
\
plat/intel/soc/agilex/aarch64/platform_common.c
\
plat/intel/soc/agilex/aarch64/plat_helpers.S
\
BL2_SOURCES
+=
\
common/desc_image_load.c
\
drivers/partition/partition.c
\
drivers/partition/gpt.c
\
drivers/arm/pl061/pl061_gpio.c
\
drivers/mmc/mmc.c
\
drivers/synopsys/emmc/dw_mmc.c
\
drivers/io/io_storage.c
\
drivers/io/io_block.c
\
drivers/io/io_fip.c
\
drivers/gpio/gpio.c
\
drivers/intel/soc/stratix10/io/s10_memmap_qspi.c
\
lib/cpus/aarch64/cortex_a53.S
\
plat/intel/soc/agilex/bl2_plat_setup.c
\
plat/intel/soc/agilex/socfpga_storage.c
\
plat/intel/soc/agilex/bl2_plat_mem_params_desc.c
\
plat/intel/soc/agilex/soc/agilex_reset_manager.c
\
plat/intel/soc/agilex/soc/agilex_handoff.c
\
plat/intel/soc/agilex/soc/agilex_clock_manager.c
\
plat/intel/soc/agilex/soc/agilex_pinmux.c
\
plat/intel/soc/agilex/soc/agilex_memory_controller.c
\
plat/intel/soc/agilex/socfpga_delay_timer.c
\
plat/intel/soc/agilex/socfpga_image_load.c
\
plat/intel/soc/agilex/soc/agilex_system_manager.c
\
plat/intel/soc/agilex/soc/agilex_mailbox.c
\
plat/intel/soc/common/drivers/qspi/cadence_qspi.c
\
plat/intel/soc/common/drivers/wdt/watchdog.c
\
plat/intel/soc/common/drivers/ccu/ncore_ccu.c
BL31_SOURCES
+=
\
drivers/arm/cci/cci.c
\
lib/cpus/aarch64/cortex_a53.S
\
lib/cpus/aarch64/aem_generic.S
\
plat/common/plat_psci_common.c
\
plat/intel/soc/agilex/socfpga_sip_svc.c
\
plat/intel/soc/agilex/bl31_plat_setup.c
\
plat/intel/soc/agilex/socfpga_psci.c
\
plat/intel/soc/agilex/socfpga_topology.c
\
plat/intel/soc/agilex/socfpga_delay_timer.c
\
plat/intel/soc/agilex/soc/agilex_reset_manager.c
\
plat/intel/soc/agilex/soc/agilex_pinmux.c
\
plat/intel/soc/agilex/soc/agilex_clock_manager.c
\
plat/intel/soc/agilex/soc/agilex_handoff.c
\
plat/intel/soc/agilex/soc/agilex_mailbox.c
PROGRAMMABLE_RESET_ADDRESS
:=
0
BL2_AT_EL3
:=
1
MULTI_CONSOLE_API
:=
1
USE_COHERENT_MEM
:=
1
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment