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
1081e9c8
Commit
1081e9c8
authored
Jun 02, 2015
by
Achin Gupta
Browse files
Merge pull request #308 from vwadekar/tegra-soc-support-v4
Tegra soc support v4
parents
c163ec45
08438e24
Changes
25
Hide whitespace changes
Inline
Side-by-side
plat/nvidia/tegra/platform.mk
0 → 100644
View file @
1081e9c8
#
# Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# Neither the name of ARM nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
SOC_DIR
:=
plat/nvidia/tegra/soc/
${TARGET_SOC}
include
plat/nvidia/tegra/common/tegra_common.mk
include
${SOC_DIR}/platform_${TARGET_SOC}.mk
plat/nvidia/tegra/soc/t210/plat_psci_handlers.c
0 → 100644
View file @
1081e9c8
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of ARM nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <arch_helpers.h>
#include <assert.h>
#include <debug.h>
#include <mmio.h>
#include <platform.h>
#include <platform_def.h>
#include <psci.h>
#include <pmc.h>
#include <flowctrl.h>
#include <tegra_def.h>
#include <tegra_private.h>
/* Power down state IDs */
#define PSTATE_ID_CORE_POWERDN 7
#define PSTATE_ID_CLUSTER_IDLE 16
#define PSTATE_ID_CLUSTER_POWERDN 17
#define PSTATE_ID_SOC_POWERDN 27
static
int
cpu_powergate_mask
[
PLATFORM_MAX_CPUS_PER_CLUSTER
];
int
tegra_prepare_cpu_suspend
(
unsigned
int
id
,
unsigned
int
afflvl
)
{
/* There's nothing to be done for affinity level 1 */
if
(
afflvl
==
MPIDR_AFFLVL1
)
return
PSCI_E_SUCCESS
;
switch
(
id
)
{
/* Prepare for cpu idle */
case
PSTATE_ID_CORE_POWERDN
:
tegra_fc_cpu_idle
(
read_mpidr
());
return
PSCI_E_SUCCESS
;
/* Prepare for cluster idle */
case
PSTATE_ID_CLUSTER_IDLE
:
tegra_fc_cluster_idle
(
read_mpidr
());
return
PSCI_E_SUCCESS
;
/* Prepare for cluster powerdn */
case
PSTATE_ID_CLUSTER_POWERDN
:
tegra_fc_cluster_powerdn
(
read_mpidr
());
return
PSCI_E_SUCCESS
;
/* Prepare for system idle */
case
PSTATE_ID_SOC_POWERDN
:
/* Enter system suspend state */
tegra_pm_system_suspend_entry
();
/* suspend the entire soc */
tegra_fc_soc_powerdn
(
read_mpidr
());
return
PSCI_E_SUCCESS
;
default:
ERROR
(
"Unknown state id (%d)
\n
"
,
id
);
break
;
}
return
PSCI_E_NOT_SUPPORTED
;
}
int
tegra_prepare_cpu_on_finish
(
unsigned
long
mpidr
)
{
/*
* Check if we are exiting from SOC_POWERDN.
*/
if
(
tegra_system_suspended
())
{
/*
* Restore Boot and Power Management Processor (BPMP) reset
* address and reset it.
*/
tegra_fc_reset_bpmp
();
/*
* System resume complete.
*/
tegra_pm_system_suspend_exit
();
}
/*
* T210 has a dedicated ARMv7 boot and power mgmt processor, BPMP. It's
* used for power management and boot purposes. Inform the BPMP that
* we have completed the cluster power up.
*/
if
(
psci_get_max_phys_off_afflvl
()
==
MPIDR_AFFLVL1
)
tegra_fc_lock_active_cluster
();
return
PSCI_E_SUCCESS
;
}
int
tegra_prepare_cpu_on
(
unsigned
long
mpidr
)
{
int
cpu
=
mpidr
&
MPIDR_CPU_MASK
;
/* Turn on CPU using flow controller or PMC */
if
(
cpu_powergate_mask
[
cpu
]
==
0
)
{
tegra_pmc_cpu_on
(
cpu
);
cpu_powergate_mask
[
cpu
]
=
1
;
}
else
{
tegra_fc_cpu_on
(
cpu
);
}
return
PSCI_E_SUCCESS
;
}
int
tegra_prepare_cpu_off
(
unsigned
long
mpidr
)
{
tegra_fc_cpu_off
(
mpidr
&
MPIDR_CPU_MASK
);
return
PSCI_E_SUCCESS
;
}
plat/nvidia/tegra/soc/t210/plat_secondary.c
0 → 100644
View file @
1081e9c8
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of ARM nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <debug.h>
#include <mmio.h>
#include <pmc.h>
#include <tegra_def.h>
#define SB_CSR 0x0
#define SB_CSR_NS_RST_VEC_WR_DIS (1 << 1)
/* CPU reset vector */
#define SB_AA64_RESET_LOW 0x30
/* width = 31:0 */
#define SB_AA64_RESET_HI 0x34
/* width = 11:0 */
extern
void
tegra_secure_entrypoint
(
void
);
/*******************************************************************************
* Setup secondary CPU vectors
******************************************************************************/
void
plat_secondary_setup
(
void
)
{
uint32_t
val
;
uint64_t
reset_addr
=
(
uint64_t
)
tegra_secure_entrypoint
;
INFO
(
"Setting up secondary CPU boot
\n
"
);
/* setup secondary CPU vector */
mmio_write_32
(
TEGRA_SB_BASE
+
SB_AA64_RESET_LOW
,
(
reset_addr
&
0xFFFFFFFF
)
|
1
);
val
=
reset_addr
>>
32
;
mmio_write_32
(
TEGRA_SB_BASE
+
SB_AA64_RESET_HI
,
val
&
0x7FF
);
/* configure PMC */
tegra_pmc_cpu_setup
(
reset_addr
);
}
plat/nvidia/tegra/soc/t210/plat_setup.c
0 → 100644
View file @
1081e9c8
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of ARM nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <console.h>
#include <tegra_def.h>
#include <xlat_tables.h>
/* sets of MMIO ranges setup */
#define MMIO_RANGE_0_ADDR 0x50000000
#define MMIO_RANGE_1_ADDR 0x60000000
#define MMIO_RANGE_2_ADDR 0x70000000
#define MMIO_RANGE_SIZE 0x200000
/*
* Table of regions to map using the MMU.
*/
static
const
mmap_region_t
tegra_mmap
[]
=
{
MAP_REGION_FLAT
(
MMIO_RANGE_0_ADDR
,
MMIO_RANGE_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_SECURE
),
MAP_REGION_FLAT
(
MMIO_RANGE_1_ADDR
,
MMIO_RANGE_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_SECURE
),
MAP_REGION_FLAT
(
MMIO_RANGE_2_ADDR
,
MMIO_RANGE_SIZE
,
MT_DEVICE
|
MT_RW
|
MT_SECURE
),
{
0
}
};
/*******************************************************************************
* Set up the pagetables as per the platform memory map & initialize the MMU
******************************************************************************/
const
mmap_region_t
*
plat_get_mmio_map
(
void
)
{
/* MMIO space */
return
tegra_mmap
;
}
/*******************************************************************************
* Handler to get the System Counter Frequency
******************************************************************************/
uint64_t
plat_get_syscnt_freq
(
void
)
{
return
19200000
;
}
plat/nvidia/tegra/soc/t210/platform_t210.mk
0 → 100644
View file @
1081e9c8
#
# Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# Neither the name of ARM nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
TEGRA_BOOT_UART_BASE
:=
0x70006000
$(eval
$(call
add_define,TEGRA_BOOT_UART_BASE))
TZDRAM_BASE
:=
0xFDC00000
$(eval
$(call
add_define,TZDRAM_BASE))
ERRATA_TEGRA_INVALIDATE_BTB_AT_BOOT
:=
1
$(eval
$(call
add_define,ERRATA_TEGRA_INVALIDATE_BTB_AT_BOOT))
PLATFORM_CLUSTER_COUNT
:=
2
$(eval
$(call
add_define,PLATFORM_CLUSTER_COUNT))
PLATFORM_MAX_CPUS_PER_CLUSTER
:=
4
$(eval
$(call
add_define,PLATFORM_MAX_CPUS_PER_CLUSTER))
BL31_SOURCES
+=
${SOC_DIR}
/plat_psci_handlers.c
\
${SOC_DIR}
/plat_setup.c
\
${SOC_DIR}
/plat_secondary.c
# Enable workarounds for selected Cortex-A53 erratas.
ERRATA_A53_826319
:=
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