Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86680502 authored by Sabrina Kuo's avatar Sabrina Kuo Committed by damon.chu
Browse files

[ALPS08861573] smi: add bus status api and use dbg cmd to enable log



[Description]
add smi_bus_status_check api and use dbg cmd to enable log

[Test]
camera stress

MTK-Commit-Id: d7460949ad209a7fa39f6ba316df645b6bbedd41

Signed-off-by: default avatarSabrina Kuo <Yi.Kuo@mediatek.com>
CR-Id: ALPS08861573
Feature: smi driver
Change-Id: Idaa8d756aea4cb7d52add709d71f4e04e7e1ebfa
parent e7722eec
Loading
Loading
Loading
Loading
+52 −0
Original line number Diff line number Diff line
@@ -3140,6 +3140,58 @@ static int mtk_smi_pd_callback(struct notifier_block *nb,
	return NOTIFY_OK;
}

s32 mtk_smi_status_check(struct device *larbdev, bool log_enable)
{
	struct mtk_smi_larb *larb = dev_get_drvdata(larbdev);
	int i, ret = 0;
	u32 val;

	if (unlikely(!larb))
		return 0;

	/* check larb status */
	if (pm_runtime_get_if_in_use(larbdev)) {
		for (i = 0; i < SMI_LARB_PORT_NR_MAX; i++) {
			val = readl(larb->base + SMI_LARB_OSTD_MON_PORT(i));
			if (val) {
				pr_notice("[smi]%s:larb:%d port:%d ostd:%#x\n", __func__,
					larb->larbid, i, val);
				ret = 1;
			}
		}
		if (log_enable)
			pr_notice("[smi]%s:larb:%d check done.\n", __func__, larb->larbid);

		pm_runtime_put(larbdev);
	}

	/* check common status */
	for (i = 0; i < LARB_MAX_COMMON; i++) {
		if (larb->comm_port_id[i] >= 0 && larb->smi_common_dev[i]) {
			struct mtk_smi *common;

			common = dev_get_drvdata(larb->smi_common_dev[i]);
			if (pm_runtime_get_if_in_use(larb->smi_common_dev[i])) {
				val = readl(common->base + SMI_DEBUG_S(larb->comm_port_id[i]));
				if (val & 0x1ffe000) {
					pr_notice("[smi]%s:comm:%d port:%d ostd:%#x\n", __func__,
						common->commid, larb->comm_port_id[i], val);
					ret = 1;
				}
				if (log_enable)
					pr_notice("[smi]%s:comm:%d check done.\n",
								__func__, common->commid);
				pm_runtime_put(larb->smi_common_dev[i]);
			}
		}
	}
	if (log_enable)
		pr_notice("[smi]%s:check done, ret=%d\n", __func__, ret);

	return ret;
}
EXPORT_SYMBOL_GPL(mtk_smi_status_check);

static bool is_p2_lock;
void mtk_smi_larb_clamp_and_lock(struct device *larbdev, bool on)
{
+6 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ void mtk_smi_dbg_dump_for_vdec(void);
void mtk_smi_dbg_dump_for_mminfra(void);
void mtk_smi_init_power_off(void);
void mtk_smi_dump_last_pd(const char *user);
s32 mtk_smi_status_check(struct device *larbdev, bool log_enable);
void mtk_smi_larb_clamp_and_lock(struct device *larbdev, bool on);
s32 smi_sysram_enable(struct device *larbdev, const u32 master_id,
			const bool enable, const char *user);
@@ -105,6 +106,11 @@ static inline void mtk_smi_init_power_off(void) { }

static inline void mtk_smi_dump_last_pd(const char *user) { }

static inline s32 mtk_smi_status_check(struct device *larbdev, bool log_enable)
{
	return 0;
}

static inline void mtk_smi_larb_clamp_and_lock(struct device *larbdev, bool on) { }

static inline