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
1f915222
"plugins/vscode:/vscode.git/clone" did not exist on "b5093859af472c04dfca33adfeba49bfbe417c9d"
Commit
1f915222
authored
Apr 24, 2020
by
Sandrine Bailleux
Committed by
TrustedFirmware Code Review
Apr 24, 2020
Browse files
Merge "Provide a hint to power controller for DSU cluster power down" into integration
parents
f4701a77
9cf7f355
Changes
6
Show whitespace changes
Inline
Side-by-side
include/arch/aarch32/arch.h
View file @
1f915222
...
...
@@ -701,4 +701,14 @@
#define AMEVTYPER1E p15, 0, c13, c15, 6
#define AMEVTYPER1F p15, 0, c13, c15, 7
/*******************************************************************************
* Definitions for DynamicIQ Shared Unit registers
******************************************************************************/
#define CLUSTERPWRDN p15, 0, c15, c3, 6
/* CLUSTERPWRDN register definitions */
#define DSU_CLUSTER_PWR_OFF 0
#define DSU_CLUSTER_PWR_ON 1
#define DSU_CLUSTER_PWR_MASK U(1)
#endif
/* ARCH_H */
include/arch/aarch32/arch_helpers.h
View file @
1f915222
...
...
@@ -336,6 +336,11 @@ DEFINE_DCOP_PARAM_FUNC(cvac, DCCIMVAC)
DEFINE_DCOP_PARAM_FUNC
(
cvac
,
DCCMVAC
)
#endif
/*
* DynamIQ Shared Unit power management
*/
DEFINE_COPROCR_RW_FUNCS
(
clusterpwrdn
,
CLUSTERPWRDN
)
/* Previously defined accessor functions with incomplete register names */
#define dsb() dsbsy()
#define dmb() dmbsy()
...
...
include/arch/aarch64/arch.h
View file @
1f915222
...
...
@@ -947,4 +947,14 @@
#define RGSR_EL1 S3_0_C1_C0_5
#define GCR_EL1 S3_0_C1_C0_6
/*******************************************************************************
* Definitions for DynamicIQ Shared Unit registers
******************************************************************************/
#define CLUSTERPWRDN_EL1 S3_0_c15_c3_6
/* CLUSTERPWRDN_EL1 register definitions */
#define DSU_CLUSTER_PWR_OFF 0
#define DSU_CLUSTER_PWR_ON 1
#define DSU_CLUSTER_PWR_MASK U(1)
#endif
/* ARCH_H */
include/arch/aarch64/arch_helpers.h
View file @
1f915222
...
...
@@ -520,6 +520,9 @@ DEFINE_RENAME_SYSREG_RW_FUNCS(tfsr_el1, TFSR_EL1)
DEFINE_RENAME_SYSREG_RW_FUNCS
(
rgsr_el1
,
RGSR_EL1
)
DEFINE_RENAME_SYSREG_RW_FUNCS
(
gcr_el1
,
GCR_EL1
)
/* DynamIQ Shared Unit power management */
DEFINE_RENAME_SYSREG_RW_FUNCS
(
clusterpwrdn_el1
,
CLUSTERPWRDN_EL1
)
#define IS_IN_EL(x) \
(GET_EL(read_CurrentEl()) == MODE_EL##x)
...
...
@@ -582,4 +585,7 @@ static inline uint64_t el_implemented(unsigned int el)
#define read_cpacr() read_cpacr_el1()
#define write_cpacr(_v) write_cpacr_el1(_v)
#define read_clusterpwrdn() read_clusterpwrdn_el1()
#define write_clusterpwrdn(_v) write_clusterpwrdn_el1(_v)
#endif
/* ARCH_HELPERS_H */
plat/arm/board/fvp/fvp_pm.c
View file @
1f915222
...
...
@@ -64,6 +64,25 @@ static void fvp_cluster_pwrdwn_common(void)
/* Disable coherency if this cluster is to be turned off */
fvp_interconnect_disable
();
#if HW_ASSISTED_COHERENCY
uint32_t
reg
;
/*
* If we have determined this core to be the last man standing and we
* intend to power down the cluster proactively, we provide a hint to
* the power controller that cluster power is not required when all
* cores are powered down.
* Note that this is only an advisory to power controller and is supported
* by SoCs with DynamIQ Shared Units only.
*/
reg
=
read_clusterpwrdn
();
/* Clear and set bit 0 : Cluster power not required */
reg
&=
~
DSU_CLUSTER_PWR_MASK
;
reg
|=
DSU_CLUSTER_PWR_OFF
;
write_clusterpwrdn
(
reg
);
#endif
/* Program the power controller to turn the cluster off */
fvp_pwrc_write_pcoffr
(
mpidr
);
}
...
...
plat/arm/css/common/css_pm.c
View file @
1f915222
...
...
@@ -124,8 +124,28 @@ static void css_power_down_common(const psci_power_state_t *target_state)
plat_arm_gic_cpuif_disable
();
/* Cluster is to be turned off, so disable coherency */
if
(
CSS_CLUSTER_PWR_STATE
(
target_state
)
==
ARM_LOCAL_STATE_OFF
)
if
(
CSS_CLUSTER_PWR_STATE
(
target_state
)
==
ARM_LOCAL_STATE_OFF
)
{
plat_arm_interconnect_exit_coherency
();
#if HW_ASSISTED_COHERENCY
uint32_t
reg
;
/*
* If we have determined this core to be the last man standing and we
* intend to power down the cluster proactively, we provide a hint to
* the power controller that cluster power is not required when all
* cores are powered down.
* Note that this is only an advisory to power controller and is supported
* by SoCs with DynamIQ Shared Units only.
*/
reg
=
read_clusterpwrdn
();
/* Clear and set bit 0 : Cluster power not required */
reg
&=
~
DSU_CLUSTER_PWR_MASK
;
reg
|=
DSU_CLUSTER_PWR_OFF
;
write_clusterpwrdn
(
reg
);
#endif
}
}
/*******************************************************************************
...
...
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