cnss2: Add GCC register read for debugging
Read GCC spare register after SOC reset to check device status. Change-Id: If25d8e42fcf6921744b1907e1abd4ef16ac95148 CRs-Fixed: 3290178
This commit is contained in:

committed by
Madan Koyyalamudi

parent
1296d41e40
commit
2d912a8ca2
50
cnss2/pci.c
50
cnss2/pci.c
@@ -1691,6 +1691,50 @@ static int cnss_pci_check_mhi_state_bit(struct cnss_pci_data *pci_priv,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cnss_rddm_trigger_debug(struct cnss_pci_data *pci_priv)
|
||||||
|
{
|
||||||
|
int read_val, ret;
|
||||||
|
|
||||||
|
switch (pci_priv->device_id) {
|
||||||
|
case QCA6490_DEVICE_ID:
|
||||||
|
case KIWI_DEVICE_ID:
|
||||||
|
case MANGO_DEVICE_ID:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cnss_pr_err("RDDM Trigger debug not supported");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
cnss_pr_err("Write GCC Spare with ACE55 Pattern");
|
||||||
|
cnss_pci_reg_write(pci_priv, GCC_GCC_SPARE_REG_1, 0xACE55);
|
||||||
|
ret = cnss_pci_reg_read(pci_priv, GCC_GCC_SPARE_REG_1, &read_val);
|
||||||
|
cnss_pr_err("Read back GCC Spare: 0x%x, ret: %d", read_val, ret);
|
||||||
|
ret = cnss_pci_reg_read(pci_priv, GCC_PRE_ARES_DEBUG_TIMER_VAL,
|
||||||
|
&read_val);
|
||||||
|
cnss_pr_err("Warm reset allowed check: 0x%x, ret: %d", read_val, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cnss_rddm_trigger_check(struct cnss_pci_data *pci_priv)
|
||||||
|
{
|
||||||
|
int read_val, ret;
|
||||||
|
|
||||||
|
switch (pci_priv->device_id) {
|
||||||
|
case QCA6490_DEVICE_ID:
|
||||||
|
case KIWI_DEVICE_ID:
|
||||||
|
case MANGO_DEVICE_ID:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cnss_pr_err("RDDM Trigger check not supported");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = cnss_pci_reg_read(pci_priv, GCC_GCC_SPARE_REG_1, &read_val);
|
||||||
|
cnss_pr_err("Read GCC spare to check reset status: 0x%x, ret: %d",
|
||||||
|
read_val, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void cnss_pci_set_mhi_state_bit(struct cnss_pci_data *pci_priv,
|
static void cnss_pci_set_mhi_state_bit(struct cnss_pci_data *pci_priv,
|
||||||
enum cnss_mhi_state mhi_state)
|
enum cnss_mhi_state mhi_state)
|
||||||
{
|
{
|
||||||
@@ -1808,12 +1852,14 @@ retry_mhi_suspend:
|
|||||||
mutex_unlock(&pci_priv->mhi_ctrl->pm_mutex);
|
mutex_unlock(&pci_priv->mhi_ctrl->pm_mutex);
|
||||||
break;
|
break;
|
||||||
case CNSS_MHI_TRIGGER_RDDM:
|
case CNSS_MHI_TRIGGER_RDDM:
|
||||||
|
cnss_rddm_trigger_debug(pci_priv);
|
||||||
ret = mhi_force_rddm_mode(pci_priv->mhi_ctrl);
|
ret = mhi_force_rddm_mode(pci_priv->mhi_ctrl);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
cnss_pr_err("Failed to trigger RDDM, err = %d\n", ret);
|
cnss_pr_err("Failed to trigger RDDM, err = %d\n", ret);
|
||||||
|
|
||||||
cnss_pr_dbg("Sending host reset req\n");
|
cnss_pr_dbg("Sending host reset req\n");
|
||||||
ret = cnss_mhi_force_reset(pci_priv);
|
ret = cnss_mhi_force_reset(pci_priv);
|
||||||
|
cnss_rddm_trigger_check(pci_priv);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CNSS_MHI_RDDM_DONE:
|
case CNSS_MHI_RDDM_DONE:
|
||||||
@@ -5035,16 +5081,18 @@ void cnss_pci_collect_dump_info(struct cnss_pci_data *pci_priv, bool in_panic)
|
|||||||
cnss_pci_dump_misc_reg(pci_priv);
|
cnss_pci_dump_misc_reg(pci_priv);
|
||||||
cnss_pci_dump_shadow_reg(pci_priv);
|
cnss_pci_dump_shadow_reg(pci_priv);
|
||||||
|
|
||||||
|
cnss_rddm_trigger_debug(pci_priv);
|
||||||
ret = mhi_download_rddm_image(pci_priv->mhi_ctrl, in_panic);
|
ret = mhi_download_rddm_image(pci_priv->mhi_ctrl, in_panic);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
cnss_fatal_err("Failed to download RDDM image, err = %d\n",
|
cnss_fatal_err("Failed to download RDDM image, err = %d\n",
|
||||||
ret);
|
ret);
|
||||||
if (!cnss_pci_assert_host_sol(pci_priv))
|
if (!cnss_pci_assert_host_sol(pci_priv))
|
||||||
return;
|
return;
|
||||||
|
cnss_rddm_trigger_check(pci_priv);
|
||||||
cnss_pci_dump_debug_reg(pci_priv);
|
cnss_pci_dump_debug_reg(pci_priv);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
cnss_rddm_trigger_check(pci_priv);
|
||||||
fw_image = pci_priv->mhi_ctrl->fbc_image;
|
fw_image = pci_priv->mhi_ctrl->fbc_image;
|
||||||
rddm_image = pci_priv->mhi_ctrl->rddm_image;
|
rddm_image = pci_priv->mhi_ctrl->rddm_image;
|
||||||
dump_data->nentries = 0;
|
dump_data->nentries = 0;
|
||||||
|
@@ -343,4 +343,7 @@
|
|||||||
#define PCIE_SCRATCH_0_SOC_PCIE_REG 0x1E04040
|
#define PCIE_SCRATCH_0_SOC_PCIE_REG 0x1E04040
|
||||||
#define PCIE_SCRATCH_1_SOC_PCIE_REG 0x1E04044
|
#define PCIE_SCRATCH_1_SOC_PCIE_REG 0x1E04044
|
||||||
#define PCIE_SCRATCH_2_SOC_PCIE_REG 0x1E0405C
|
#define PCIE_SCRATCH_2_SOC_PCIE_REG 0x1E0405C
|
||||||
|
|
||||||
|
#define GCC_GCC_SPARE_REG_1 0x1E40310
|
||||||
|
#define GCC_PRE_ARES_DEBUG_TIMER_VAL 0x1E40270
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user