mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
Re-extract the kernel patches as a series. Re-extract the u-boot patches as "git format-patch" command. Unified patch extraction makes it easier to work with patches.
109 lines
3.6 KiB
Diff
109 lines
3.6 KiB
Diff
From 08916e4fe06451080a8882d6955df9e5947e352e Mon Sep 17 00:00:00 2001
|
|
From: James Deng <james.deng@spacemit.com>
|
|
Date: Sat, 7 Sep 2024 21:08:45 +0800
|
|
Subject: Update for v1.0.15
|
|
|
|
---
|
|
.../spacemit/plat/k1x/underly_implement.c | 20 ++++++++++++++
|
|
lib/utils/psci/spacemit/plat/plat_pm.c | 27 +++++++++++--------
|
|
.../psci/spacemit/plat/underly_implement.h | 1 +
|
|
3 files changed, 37 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/lib/utils/psci/spacemit/plat/k1x/underly_implement.c b/lib/utils/psci/spacemit/plat/k1x/underly_implement.c
|
|
index f87bacc7297d..825db86dddfe 100644
|
|
--- a/lib/utils/psci/spacemit/plat/k1x/underly_implement.c
|
|
+++ b/lib/utils/psci/spacemit/plat/k1x/underly_implement.c
|
|
@@ -319,6 +319,26 @@ int spacemit_core_enter_c2(u_register_t mpidr)
|
|
return 0;
|
|
}
|
|
|
|
+int spacemit_cluster_enter_m2(u_register_t mpidr)
|
|
+{
|
|
+ unsigned int value;
|
|
+
|
|
+ /* wait the cpu enter M2 */
|
|
+ value = readl((unsigned int *)0xd4282890);
|
|
+
|
|
+ if (mpidr == 0 || mpidr == 1 || mpidr == 2 || mpidr == 3) {
|
|
+ if (value & (1 << 3))
|
|
+ return 1;
|
|
+ } else if (mpidr == 4 || mpidr == 5 || mpidr == 6 || mpidr == 7) {
|
|
+ if (value & (1 << 19))
|
|
+ return 1;
|
|
+ } else {
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
void spacemit_wait_core_enter_c2(u_register_t mpidr)
|
|
{
|
|
unsigned int value;
|
|
diff --git a/lib/utils/psci/spacemit/plat/plat_pm.c b/lib/utils/psci/spacemit/plat/plat_pm.c
|
|
index 32aec9d308ab..e3f494065f23 100644
|
|
--- a/lib/utils/psci/spacemit/plat/plat_pm.c
|
|
+++ b/lib/utils/psci/spacemit/plat/plat_pm.c
|
|
@@ -228,7 +228,7 @@ static int spacemit_validate_power_state(unsigned int power_state,
|
|
static void spacemit_pwr_domain_suspend(const psci_power_state_t *target_state)
|
|
{
|
|
unsigned int hartid = current_hartid();
|
|
-
|
|
+
|
|
/*
|
|
* CSS currently supports retention only at cpu level. Just return
|
|
* as nothing is to be done for retention.
|
|
@@ -250,22 +250,27 @@ static void spacemit_pwr_domain_suspend(const psci_power_state_t *target_state)
|
|
/* disable the tcm */
|
|
csr_write(CSR_TCMCFG, 0);
|
|
#endif
|
|
- wake_idle_harts(NULL, hartid);
|
|
+ if (!spacemit_cluster_enter_m2(PLATFORM_MAX_CPUS_PER_CLUSTER)) {
|
|
+ wake_idle_harts(NULL, hartid);
|
|
|
|
- /* D1P & D2 */
|
|
- csi_flush_l2_cache_hart(0, 0);
|
|
- csi_flush_l2_cache_hart(0, PLATFORM_MAX_CPUS_PER_CLUSTER);
|
|
+ csi_flush_l2_cache_hart(0, 0);
|
|
+ csi_flush_l2_cache_hart(0, PLATFORM_MAX_CPUS_PER_CLUSTER);
|
|
|
|
- cci_disable_snoop_dvm_reqs(0);
|
|
- cci_disable_snoop_dvm_reqs(1);
|
|
+ cci_disable_snoop_dvm_reqs(0);
|
|
+ cci_disable_snoop_dvm_reqs(1);
|
|
|
|
- /* assert othter cpu & wait other cpu enter c2 */
|
|
- for (u32 i = 0; i < PLATFORM_MAX_CPUS_PER_CLUSTER * PLATFORM_CLUSTER_COUNT; i++) {
|
|
- if (i != hartid) {
|
|
- spacemit_wait_core_enter_c2(i);
|
|
+ /* assert othter cpu & wait other cpu enter c2 */
|
|
+ for (u32 i = 0; i < PLATFORM_MAX_CPUS_PER_CLUSTER * PLATFORM_CLUSTER_COUNT; i++) {
|
|
+ if (i != hartid) {
|
|
+ spacemit_wait_core_enter_c2(i);
|
|
+ }
|
|
}
|
|
+ } else {
|
|
+ csi_flush_l2_cache_hart(0, 0);
|
|
+ cci_disable_snoop_dvm_reqs(0);
|
|
}
|
|
|
|
+
|
|
spacemit_assert_cpu(hartid);
|
|
|
|
spacemit_top_off(hartid);
|
|
diff --git a/lib/utils/psci/spacemit/plat/underly_implement.h b/lib/utils/psci/spacemit/plat/underly_implement.h
|
|
index 7c11db518a3f..80f1377d1116 100644
|
|
--- a/lib/utils/psci/spacemit/plat/underly_implement.h
|
|
+++ b/lib/utils/psci/spacemit/plat/underly_implement.h
|
|
@@ -10,6 +10,7 @@ void spacemit_cluster_off(u_register_t mpidr);
|
|
void spacemit_wakeup_cpu(u_register_t mpidr);
|
|
void spacemit_assert_cpu(u_register_t mpidr);
|
|
int spacemit_core_enter_c2(u_register_t mpidr);
|
|
+int spacemit_cluster_enter_m2(u_register_t mpidr);
|
|
void spacemit_wait_core_enter_c2(u_register_t mpidr);
|
|
void spacemit_deassert_cpu(void);
|
|
|
|
--
|
|
2.35.3
|
|
|