Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
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
2bcaeab6
Commit
2bcaeab6
authored
5 years ago
by
Manish Pandey
Committed by
TrustedFirmware Code Review
5 years ago
Browse files
Options
Download
Plain Diff
Merge "adding support to enable different personality of the same soc." into integration
parents
953dc541
ab4df50c
master
v2.5
v2.5-rc1
v2.5-rc0
v2.4
v2.4-rc2
v2.4-rc1
v2.4-rc0
v2.3
v2.3-rc2
v2.3-rc1
v2.3-rc0
arm_cca_v0.2
arm_cca_v0.1
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
lib/psci/psci_common.c
+9
-8
lib/psci/psci_common.c
lib/psci/psci_private.h
+1
-0
lib/psci/psci_private.h
lib/psci/psci_setup.c
+8
-5
lib/psci/psci_setup.c
with
18 additions
and
13 deletions
+18
-13
lib/psci/psci_common.c
View file @
2bcaeab6
...
...
@@ -43,6 +43,7 @@ const spd_pm_ops_t *psci_spd_pm;
static
plat_local_state_t
psci_req_local_pwr_states
[
PLAT_MAX_PWR_LVL
][
PLATFORM_CORE_COUNT
];
unsigned
int
psci_plat_core_count
;
/*******************************************************************************
* Arrays that hold the platform's power domain tree information for state
...
...
@@ -161,7 +162,7 @@ unsigned int psci_is_last_on_cpu(void)
{
unsigned
int
cpu_idx
,
my_idx
=
plat_my_core_pos
();
for
(
cpu_idx
=
0
;
cpu_idx
<
(
unsigned
int
)
PLATFORM_CORE_COUNT
;
for
(
cpu_idx
=
0
;
cpu_idx
<
psci_plat_core_count
;
cpu_idx
++
)
{
if
(
cpu_idx
==
my_idx
)
{
assert
(
psci_get_aff_info_state
()
==
AFF_STATE_ON
);
...
...
@@ -208,7 +209,7 @@ static void psci_set_req_local_pwr_state(unsigned int pwrlvl,
{
assert
(
pwrlvl
>
PSCI_CPU_PWR_LVL
);
if
((
pwrlvl
>
PSCI_CPU_PWR_LVL
)
&&
(
pwrlvl
<=
PLAT_MAX_PWR_LVL
)
&&
(
cpu_idx
<
(
unsigned
int
)
PLATFORM_CORE_COUNT
))
{
(
cpu_idx
<
psci_plat_core_count
))
{
psci_req_local_pwr_states
[
pwrlvl
-
1U
][
cpu_idx
]
=
req_pwr_state
;
}
}
...
...
@@ -220,10 +221,10 @@ void __init psci_init_req_local_pwr_states(void)
{
/* Initialize the requested state of all non CPU power domains as OFF */
unsigned
int
pwrlvl
;
int
core
;
unsigned
int
core
;
for
(
pwrlvl
=
0U
;
pwrlvl
<
PLAT_MAX_PWR_LVL
;
pwrlvl
++
)
{
for
(
core
=
0
;
core
<
PLATFORM_CORE_COUNT
;
core
++
)
{
for
(
core
=
0
;
core
<
psci_plat_core_count
;
core
++
)
{
psci_req_local_pwr_states
[
pwrlvl
][
core
]
=
PLAT_MAX_OFF_STATE
;
}
...
...
@@ -244,7 +245,7 @@ static plat_local_state_t *psci_get_req_local_pwr_states(unsigned int pwrlvl,
assert
(
pwrlvl
>
PSCI_CPU_PWR_LVL
);
if
((
pwrlvl
>
PSCI_CPU_PWR_LVL
)
&&
(
pwrlvl
<=
PLAT_MAX_PWR_LVL
)
&&
(
cpu_idx
<
(
unsigned
int
)
PLATFORM_CORE_COUNT
))
{
(
cpu_idx
<
psci_plat_core_count
))
{
return
&
psci_req_local_pwr_states
[
pwrlvl
-
1U
][
cpu_idx
];
}
else
return
NULL
;
...
...
@@ -888,7 +889,7 @@ int psci_spd_migrate_info(u_register_t *mpidr)
void
psci_print_power_domain_map
(
void
)
{
#if LOG_LEVEL >= LOG_LEVEL_INFO
int
idx
;
unsigned
int
idx
;
plat_local_state_t
state
;
plat_local_state_type_t
state_type
;
...
...
@@ -900,7 +901,7 @@ void psci_print_power_domain_map(void)
};
INFO
(
"PSCI Power Domain Map:
\n
"
);
for
(
idx
=
0
;
idx
<
(
PSCI_NUM_PWR_DOMAINS
-
PLATFORM_CORE_COUNT
);
for
(
idx
=
0
;
idx
<
(
PSCI_NUM_PWR_DOMAINS
-
psci_plat_core_count
);
idx
++
)
{
state_type
=
find_local_state_type
(
psci_non_cpu_pd_nodes
[
idx
].
local_state
);
...
...
@@ -912,7 +913,7 @@ void psci_print_power_domain_map(void)
psci_non_cpu_pd_nodes
[
idx
].
local_state
);
}
for
(
idx
=
0
;
idx
<
PLATFORM_CORE_COUNT
;
idx
++
)
{
for
(
idx
=
0
;
idx
<
psci_plat_core_count
;
idx
++
)
{
state
=
psci_get_cpu_local_state_by_idx
(
idx
);
state_type
=
find_local_state_type
(
state
);
INFO
(
" CPU Node : MPID 0x%llx, parent_node %d,"
...
...
This diff is collapsed.
Click to expand it.
lib/psci/psci_private.h
View file @
2bcaeab6
...
...
@@ -251,6 +251,7 @@ extern const plat_psci_ops_t *psci_plat_pm_ops;
extern
non_cpu_pd_node_t
psci_non_cpu_pd_nodes
[
PSCI_NUM_NON_CPU_PWR_DOMAINS
];
extern
cpu_pd_node_t
psci_cpu_pd_nodes
[
PLATFORM_CORE_COUNT
];
extern
unsigned
int
psci_caps
;
extern
unsigned
int
psci_plat_core_count
;
/*******************************************************************************
* SPD's power management hooks registered with PSCI
...
...
This diff is collapsed.
Click to expand it.
lib/psci/psci_setup.c
View file @
2bcaeab6
...
...
@@ -84,11 +84,12 @@ static void __init psci_init_pwr_domain_node(unsigned char node_idx,
*******************************************************************************/
static
void
__init
psci_update_pwrlvl_limits
(
void
)
{
int
j
,
cpu_idx
;
unsigned
int
cpu_idx
;
int
j
;
unsigned
int
nodes_idx
[
PLAT_MAX_PWR_LVL
]
=
{
0
};
unsigned
int
temp_index
[
PLAT_MAX_PWR_LVL
];
for
(
cpu_idx
=
0
;
cpu_idx
<
PLATFORM_CORE_COUNT
;
cpu_idx
++
)
{
for
(
cpu_idx
=
0
;
cpu_idx
<
psci_plat_core_count
;
cpu_idx
++
)
{
psci_get_parent_pwr_domain_nodes
(
cpu_idx
,
(
unsigned
int
)
PLAT_MAX_PWR_LVL
,
temp_index
);
...
...
@@ -109,7 +110,8 @@ static void __init psci_update_pwrlvl_limits(void)
* informs the number of root power domains. The parent nodes of the root nodes
* will point to an invalid entry(-1).
******************************************************************************/
static
void
__init
populate_power_domain_tree
(
const
unsigned
char
*
topology
)
static
unsigned
int
__init
populate_power_domain_tree
(
const
unsigned
char
*
topology
)
{
unsigned
int
i
,
j
=
0U
,
num_nodes_at_lvl
=
1U
,
num_nodes_at_next_lvl
;
unsigned
int
node_index
=
0U
,
num_children
;
...
...
@@ -160,7 +162,8 @@ static void __init populate_power_domain_tree(const unsigned char *topology)
}
/* Validate the sanity of array exported by the platform */
assert
((
int
)
j
==
PLATFORM_CORE_COUNT
);
assert
(
j
<=
(
unsigned
int
)
PLATFORM_CORE_COUNT
);
return
j
;
}
/*******************************************************************************
...
...
@@ -199,7 +202,7 @@ int __init psci_setup(const psci_lib_args_t *lib_args)
topology_tree
=
plat_get_power_domain_tree_desc
();
/* Populate the power domain arrays using the platform topology map */
populate_power_domain_tree
(
topology_tree
);
psci_plat_core_count
=
populate_power_domain_tree
(
topology_tree
);
/* Update the CPU limits for each node in psci_non_cpu_pd_nodes */
psci_update_pwrlvl_limits
();
...
...
This diff is collapsed.
Click to expand it.
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
Menu
Projects
Groups
Snippets
Help