Merge "[Bugfix][API-879]GPIO 004 is not high after sleeping" into MR3.0-merge
diff --git a/src/bsp/trustzone/atf/v1.6/mt2xxx/plat/mediatek/mt2735/drivers/spm/mt_spm_suspend.c b/src/bsp/trustzone/atf/v1.6/mt2xxx/plat/mediatek/mt2735/drivers/spm/mt_spm_suspend.c
index 1a3263f..2638448 100644
--- a/src/bsp/trustzone/atf/v1.6/mt2xxx/plat/mediatek/mt2735/drivers/spm/mt_spm_suspend.c
+++ b/src/bsp/trustzone/atf/v1.6/mt2xxx/plat/mediatek/mt2735/drivers/spm/mt_spm_suspend.c
@@ -27,9 +27,10 @@
(SPM_FLAG_DISABLE_VCORE_DFS) | \
(SPM_FLAG_ENABLE_LVTS_WORKAROUND) | \
(SPM_FLAG_ENABLE_PCIE_0P6V_WORKAROUND) | \
+ (SPM_FLAG_ENABLE_MD_MUMTAS) | \
(SPM_FLAG_USE_SRCCLKENO2) | \
(SPM_FLAG_NETSYS_DVFS_ENABLE))
-
+//jb.qi change for abnormal resume on 20230328
#define SPM_SUSPEND_SLEEP_PCM_FLAG1 (0)
#define SPM_SUSPEND_PCM_FLAG ( \
@@ -37,8 +38,9 @@
(SPM_FLAG_DISABLE_VCORE_DFS) | \
(SPM_FLAG_ENABLE_LVTS_WORKAROUND) | \
(SPM_FLAG_ENABLE_PCIE_0P6V_WORKAROUND) | \
+ (SPM_FLAG_ENABLE_MD_MUMTAS) | \
(SPM_FLAG_NETSYS_DVFS_ENABLE))
-
+//jb.qi change for abnormal resume on 20230328
#define SPM_SUSPEND_PCM_FLAG1 (0)
/* Suspend spm power control */
diff --git a/src/kernel/linux/v4.19/drivers/misc/mediatek/eccci/hif/ccci_hif_ccif.c b/src/kernel/linux/v4.19/drivers/misc/mediatek/eccci/hif/ccci_hif_ccif.c
index c00d4f7..0e491ff 100644
--- a/src/kernel/linux/v4.19/drivers/misc/mediatek/eccci/hif/ccci_hif_ccif.c
+++ b/src/kernel/linux/v4.19/drivers/misc/mediatek/eccci/hif/ccci_hif_ccif.c
@@ -202,8 +202,7 @@
i += 4;
}
- if (atomic_cmpxchg(&md_ctrl->wakeup_src, 1, 0) == 1) {
- md_ctrl->wakeup_count++;
+ if (test_and_clear_bit((D2H_SRAM), &md_ctrl->wakeup_ch)) { //jb.qi change for abnormal resume on 20230328
CCCI_NOTICE_LOG(md_ctrl->md_id, TAG,
"CCIF_MD wakeup source:(SRX_IDX/%d)(%u)\n",
ccci_h->channel, md_ctrl->wakeup_count);
@@ -375,12 +374,15 @@
}
ccci_h = (struct ccci_header *)skb->data;
- if (atomic_cmpxchg(&md_ctrl->wakeup_src, 1, 0) == 1) {
- md_ctrl->wakeup_count++;
+ if (test_and_clear_bit(queue->index, &md_ctrl->wakeup_ch)) { //jb.qi change for abnormal resume on 20230328
CCCI_NOTICE_LOG(md_ctrl->md_id, TAG,
"CCIF_MD wakeup source:(%d/%d/%x)(%u)\n",
queue->index, ccci_h->channel,
ccci_h->reserved, md_ctrl->wakeup_count);
+ /*jb.qi change for abnormal resume start on 20230328*/
+ if (ccci_h->channel == CCCI_FS_RX)
+ ccci_h->data[0] |= CCCI_FS_AP_CCCI_WAKEUP;
+ /*jb.qi change for abnormal resume end on 20230328*/
}
ccci_hdr = *ccci_h;
@@ -713,8 +715,7 @@
if (md_ctrl->channel_id & (1 << AP_MD_CCB_WAKEUP)) {
clear_bit(AP_MD_CCB_WAKEUP, &md_ctrl->channel_id);
CCCI_DEBUG_LOG(md_ctrl->md_id, TAG, "CCB wakeup\n");
- if (atomic_cmpxchg(&md_ctrl->wakeup_src, 1, 0) == 1) {
- md_ctrl->wakeup_count++;
+ if (test_and_clear_bit(AP_MD_CCB_WAKEUP, &md_ctrl->wakeup_ch)) { //jb.qi change for abnormal resume on 20230328
CCCI_NOTICE_LOG(md_ctrl->md_id, TAG,
"CCIF_MD wakeup source:(CCB)(%u)\n",
md_ctrl->wakeup_count);
@@ -1259,7 +1260,7 @@
md_ctrl->md_id = md_id;
md_ctrl->hif_id = hif_id;
atomic_set(&md_ctrl->reset_on_going, 1);
- atomic_set(&md_ctrl->wakeup_src, 0);
+ md_ctrl->wakeup_ch = 0; //jb.qi change for abnormal resume on 20230328
ccci_reset_seq_num(&md_ctrl->traffic_info);
/*init queue */
diff --git a/src/kernel/linux/v4.19/drivers/misc/mediatek/eccci/hif/ccci_hif_ccif.h b/src/kernel/linux/v4.19/drivers/misc/mediatek/eccci/hif/ccci_hif_ccif.h
index e79c0c0..29b2286 100644
--- a/src/kernel/linux/v4.19/drivers/misc/mediatek/eccci/hif/ccci_hif_ccif.h
+++ b/src/kernel/linux/v4.19/drivers/misc/mediatek/eccci/hif/ccci_hif_ccif.h
@@ -21,7 +21,11 @@
#else
#define QUEUE_NUM 8
#endif
-
+/*jb.qi change for abnormal resume start on 20230328*/
+/* speciall for user: ccci_fsd data[0] */
+#define CCCI_FS_AP_CCCI_WAKEUP (0x40000000)
+#define CCCI_FS_REQ_SEND_AGAIN 0x80000000
+/*jb.qi change for abnormal resume end on 20230328*/
/*#define FLOW_CTRL_ENABLE*/
#define FLOW_CTRL_HEAD 0x464C4F57 /*FLOW*/
#define FLOW_CTRL_TAIL 0x4354524C /*CTRL*/
@@ -91,7 +95,7 @@
struct timer_list bus_timeout_timer;
void __iomem *ccif_ap_base;
void __iomem *ccif_md_base;
- atomic_t wakeup_src;
+ unsigned long wakeup_ch; //jb.qi change for abnormal resume on 20230328
unsigned int wakeup_count;
struct work_struct wdt_work;
@@ -229,9 +233,18 @@
{
struct md_ccif_ctrl *md_ctrl =
(struct md_ccif_ctrl *)ccci_hif_get_by_id(hif_id);
-
- if (md_ctrl)
- return atomic_set(&md_ctrl->wakeup_src, value);
+ unsigned int ccif_ch = 0; //jb.qi change for abnormal resume on 20230328
+ /*jb.qi change for abnormal resume start on 20230328 */
+ if (md_ctrl) {
+ ccif_ch = ccif_read32(md_ctrl->ccif_ap_base, APCCIF_RCHNUM);
+ pr_notice("[ccci1/cif] CCIF wakeup channel: 0x%x\n", ccif_ch);
+ if (value == 1) {
+ md_ctrl->wakeup_ch = ccif_ch;
+ md_ctrl->wakeup_count++;
+ }
+ return value;
+ }
+ /*jb.qi change for abnormal resume end on 20230328 */
else
return -1;
}
diff --git a/src/telephonyware/3.0/ccci_fsd/src/ccci_fsd.c b/src/telephonyware/3.0/ccci_fsd/src/ccci_fsd.c
index a16e649..badf0d2 100644
--- a/src/telephonyware/3.0/ccci_fsd/src/ccci_fsd.c
+++ b/src/telephonyware/3.0/ccci_fsd/src/ccci_fsd.c
@@ -84,6 +84,8 @@
#define FS_WAKE_UNLOCK() release_wake_lock(FS_WAKE_LOCK_NAME)
static char md_id = 0;
+static char debug_wakeup = 0; // jb.qi change for abnormal resume on 20230328
+
/*
* The maximum log level for messages to be logged to the syslog.
* Only messages with a level lower than this will be printed to the console.
@@ -94,32 +96,36 @@
LOG_LEVEL_INFO,
LOG_LEVEL_DEBUG,
};
-
+/*jb.qi change for abnormal resume start on 20230328*/
#define DEBUGLEVEL LOG_LEVEL_ERR
#define LOGD(fmt, ...) \
do { \
- if (LOG_LEVEL_DEBUG <= DEBUGLEVEL) \
+ if (debug_wakeup) \
+ ERROR(fmt, ##__VA_ARGS__); \
+ else if (LOG_LEVEL_DEBUG <= DEBUGLEVEL) \
LOG(fmt, ##__VA_ARGS__); \
} while(0)
#define LOGI(fmt, ...) \
do { \
- if (LOG_LEVEL_INFO <= DEBUGLEVEL) \
+ if (debug_wakeup) \
+ ERROR(fmt, ##__VA_ARGS__); \
+ else if (LOG_LEVEL_INFO <= DEBUGLEVEL) \
LOG(fmt, ##__VA_ARGS__); \
} while(0)
#define LOGW(fmt, ...) \
do { \
- if (LOG_LEVEL_WARNING <= DEBUGLEVEL) \
+ if (debug_wakeup || LOG_LEVEL_WARNING <= DEBUGLEVEL) \
ERROR(fmt, ##__VA_ARGS__); \
} while(0)
#define LOGE(fmt, ...) \
do { \
- if (LOG_LEVEL_ERR <= DEBUGLEVEL) \
+ if (debug_wakeup || LOG_LEVEL_ERR <= DEBUGLEVEL) \
ERROR(fmt, ##__VA_ARGS__); \
} while(0)
-
+/*jb.qi change for abnormal resume end on 20230328*/
#ifdef CCCI_FSD_UT
#define dbg_printf(...) printf(__VA_ARGS__) //__android_log_print(ANDROID_LOG_DEBUG, MD_COMN_TAG, __VA_ARGS__);
#else
@@ -738,7 +744,26 @@
return;
}
-
+/*jb.qi change for abnormal resume start on 20230328*/
+static void print_file_name(const char *op_str, char *str, int len)
+{
+ if (!op_str || len < 0)
+ return;
+ if (len >= 8 && str)
+ if (str[0] == 0x2F)
+ LOGW("%s: [%02X%02X%02X%02X%02X%02X%02X%02X]\n", op_str,
+ (str[len-8]-32), (str[len-7]-32), (str[len-6]-32),
+ (str[len-5]-32), (str[len-4]-32), (str[len-3]-32),
+ (str[len-2]-32),(str[len-1]-32));
+ else
+ LOGW("%s: [%02X][%02X%02X%02X%02X%02X%02X%02X%02X]\n", op_str, str[0],
+ (str[len-8]-32), (str[len-7]-32), (str[len-6]-32),
+ (str[len-5]-32), (str[len-4]-32), (str[len-3]-32),
+ (str[len-2]-32),(str[len-1]-32));
+ else
+ LOGW("%s: [str_len = %d or no sub str]\n", op_str, len);
+}
+/*jb.qi change for abnormal resume end on 20230328*/
static bool FS_GetPackInfo(FS_PACKET_INFO* pPackInfo, char* pData)
{
unsigned int PackNum = *((unsigned int*)pData);
@@ -4433,10 +4458,25 @@
stream = (STREAM_DATA *)pkt_buff;
ccci_h = (CCCI_BUFF_T *)&stream->header;
ReqBufIndex = ccci_h->reserved;
- LOGD("Read %d bytes from slot %d, CCCI_H data[0]=0x%X "
- "data[1]=0x%X channel=0x%X reserved=0x%X\n", RetVal,
- ReqBufIndex, ccci_h->data[0], ccci_h->data[1],
- ccci_h->channel, ccci_h->reserved);
+ /*jb.qi change for abnormal resume start on 20230328*/
+ if (ccci_h->data[0] & CCCI_FS_AP_CCCI_WAKEUP) {
+ debug_wakeup = 1;
+ ccci_h->data[0] &= (~CCCI_FS_AP_CCCI_WAKEUP);
+ } else if (debug_wakeup) {
+ debug_wakeup = 0;
+ }
+
+ if (debug_wakeup)
+ LOGW("wakeup: Read %d bytes from slot %d, CCCI_H(0x%X)(0x%X)(0x%X)(0x%X), 0x%X\n",
+ RetVal, ReqBufIndex,
+ ccci_h->data[0], ccci_h->data[1], ccci_h->channel, ccci_h->reserved,
+ RetVal > sizeof(CCCI_BUFF_T) ? stream->payload.OperateID : -1);
+ else
+ LOGD("Read %d bytes from slot %d, CCCI_H data[0]=0x%X "
+ "data[1]=0x%X channel=0x%X reserved=0x%X\n", RetVal,
+ ReqBufIndex, ccci_h->data[0], ccci_h->data[1],
+ ccci_h->channel, ccci_h->reserved);
+ /*jb.qi change for abnormal resume end on 20230328*/
buffer_slot = (STREAM_DATA *)((char *)g_FsInfo.pFsBuf + (FS_MAX_BUF_SIZE + sizeof(STREAM_DATA))*ReqBufIndex);
p_fs_buff = (char *)buffer_slot;
/******************************************
@@ -4518,7 +4558,54 @@
}
LOGD("OpID = 0X%X\n", pFsBuf->OperateID);
-
+ /*jb.qi change for abnormal resume start on 20230328*/
+ if (debug_wakeup) {
+ LOGW("[wakeup message] OpID = 0X%X\n", pFsBuf->OperateID);
+ switch (pFsBuf->OperateID) {
+ case FS_CCCI_OP_OPEN: // O
+ case FS_CCCI_OP_CREATEDIR: // CD
+ case FS_CCCI_OP_REMOVEDIR: // MD
+ case FS_CCCI_OP_RENAME: // RN_0
+ case FS_CCCI_OP_DELETE: // D
+ case FS_CCCI_OP_GETFOLDERSIZE: // FS
+ case FS_CCCI_OP_COUNT: // CN
+ case FS_CCCI_OP_GETATTRIBUTES: // A
+ case FS_CCCI_OP_GETFILEDETAIL: // GetFileDetail
+ case FS_CCCI_OP_XDELETE: // X
+ case FS_CCCI_OP_MOVE: // M_0
+ case FS_CCCI_OP_FINDFIRST: // FF
+ case FS_CCCI_OP_RESTORE: // RS
+ {
+ wchar_t* FileName = (wchar_t*)PackInfo[0].pData;
+ char ConvFileName[PATH_MAX] = {0};
+ FS_ConvWcsToCs(FileName, ConvFileName);
+ print_file_name("FILE", ConvFileName, strlen(ConvFileName));
+ break;
+ }
+ case FS_CCCI_OP_SEEK: // S
+ case FS_CCCI_OP_READ: // R
+ case FS_CCCI_OP_WRITE: // W
+ case FS_CCCI_OP_CLOSE: // C
+ case FS_CCCI_OP_GETFILESIZE: // F
+ case FS_CCCI_OP_FINDCLOSE: // FC
+ case FS_CCCI_OP_FINDNEXT: // FN
+ {
+ int HandleIndex = *((unsigned int*)PackInfo[0].pData);
+ if (HandleIndex < FS_FILE_MAX && HandleIndex >= 0) {
+ print_file_name("HANDLE", g_FsInfo.hFileHandle[HandleIndex].pFsFileName,
+ strlen(g_FsInfo.hFileHandle[HandleIndex].pFsFileName));
+ }
+ break;
+ }
+ case FS_CCCI_OP_GETCLUSTERSIZE: // CS
+ case FS_CCCI_OP_GETDRIVE: // GD
+ case FS_CCCI_OP_CLOSEALL: // CA
+ case FS_CCCI_OP_GETDISKINFO: // I
+ default:
+ break;
+ }
+ }
+ /*jb.qi change for abnormal resume end on 20230328*/
switch(pFsBuf->OperateID) {
#ifdef CCCI_FSD_UT
/*ut test*/
diff --git a/src/telephonyware/3.0/ccci_fsd/src/ccci_fsd.h b/src/telephonyware/3.0/ccci_fsd/src/ccci_fsd.h
index 0d5317c..46967d3 100644
--- a/src/telephonyware/3.0/ccci_fsd/src/ccci_fsd.h
+++ b/src/telephonyware/3.0/ccci_fsd/src/ccci_fsd.h
@@ -376,6 +376,7 @@
#define MAX_FS_PKT_BYTE (3584-128)
#define MAX_FS_BUF_BYTE 4096
+#define CCCI_FS_AP_CCCI_WAKEUP (0x40000000) //jb.qi change for abnormal resume on 20230328
#define CCCI_FS_REQ_SEND_AGAIN 0x80000000
#define CCCI_FS_PEER_REQ_SEND_AGAIN(_p) (((((CCCI_BUFF_T*)(_p))->data[0] & CCCI_FS_REQ_SEND_AGAIN) != 0)? 1: 0)