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
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
Hide 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