platform: msm_shared: Dump UFS HC registers during failure
Dump the UFS host controller registers during failure.
Modified the debug prints.
CRs-Fixed: 573103
Change-Id: I31a97723b21f8f25767bdaf369b7887ce63be5e7
diff --git a/platform/msm_shared/include/ufs.h b/platform/msm_shared/include/ufs.h
index 7865271..01e6550 100644
--- a/platform/msm_shared/include/ufs.h
+++ b/platform/msm_shared/include/ufs.h
@@ -96,4 +96,5 @@
uint64_t ufs_get_dev_capacity(struct ufs_dev* dev);
uint32_t ufs_get_serial_num(struct ufs_dev* dev);
uint32_t ufs_get_erase_blk_size(struct ufs_dev* dev);
+void ufs_dump_hc_registers(struct ufs_dev* dev);
#endif
diff --git a/platform/msm_shared/include/ufs_hw.h b/platform/msm_shared/include/ufs_hw.h
index cf4da12..9b06a42 100644
--- a/platform/msm_shared/include/ufs_hw.h
+++ b/platform/msm_shared/include/ufs_hw.h
@@ -41,6 +41,9 @@
#define UFS_HCE(_base) (_base + 0x00000034)
#define UFS_UECPA(_base) (_base + 0x00000038)
#define UFS_UECDL(_base) (_base + 0x0000003C)
+#define UFS_UECN(_base) (_base + 0x00000040)
+#define UFS_UECT(_base) (_base + 0x00000044)
+#define UFS_UECDME(_base) (_base + 0x00000048)
#define UFS_UTRIACR(_base) (_base + 0x0000004C)
#define UFS_UTRLBA(_base) (_base + 0x00000050)
#define UFS_UTRLBAU(_base) (_base + 0x00000054)
diff --git a/platform/msm_shared/ucs.c b/platform/msm_shared/ucs.c
index baad9bd..65321db 100644
--- a/platform/msm_shared/ucs.c
+++ b/platform/msm_shared/ucs.c
@@ -60,7 +60,7 @@
if (utp_enqueue_upiu(dev, &req_upiu))
{
- dprintf(CRITICAL, "Data read failed\n");
+ dprintf(CRITICAL, "ucs_do_scsi_cmd: enqueue failed\n");
return -UFS_FAILURE;
}
@@ -73,7 +73,7 @@
dprintf(CRITICAL, "SCSI request sense failed.\n");
}
- dprintf(CRITICAL, "SCSI read failed. status = %x\n", resp_upiu.status);
+ dprintf(CRITICAL, "ucs_do_scsi_cmd failed status = %x\n", resp_upiu.status);
return -UFS_FAILURE;
}
@@ -132,7 +132,7 @@
if (ucs_do_scsi_cmd(dev, &req_upiu))
{
- dprintf(CRITICAL, "Data read failed\n");
+ dprintf(CRITICAL, "ucs_do_scsi_read: failed\n");
return -UFS_FAILURE;
}
@@ -195,7 +195,7 @@
if (ucs_do_scsi_cmd(dev, &req_upiu))
{
- dprintf(CRITICAL, "Data read failed\n");
+ dprintf(CRITICAL, "ucs_do_scsi_write: failed\n");
return -UFS_FAILURE;
}
@@ -334,7 +334,7 @@
if (ucs_do_scsi_cmd(dev, &req_upiu))
{
- dprintf(CRITICAL, "Data read failed\n");
+ dprintf(CRITICAL, "ucs_do_request_sense: failed\n");
return -UFS_FAILURE;
}
diff --git a/platform/msm_shared/ufs.c b/platform/msm_shared/ufs.c
index 79aa925..5728bf7 100644
--- a/platform/msm_shared/ufs.c
+++ b/platform/msm_shared/ufs.c
@@ -99,6 +99,7 @@
if (ret)
{
dprintf(CRITICAL, "UFS read failed.\n");
+ ufs_dump_hc_registers(dev);
}
return ret;
@@ -118,6 +119,7 @@
if (ret)
{
dprintf(CRITICAL, "UFS write failed.\n");
+ ufs_dump_hc_registers(dev);
}
return ret;
@@ -159,6 +161,7 @@
if (ret)
{
dprintf(CRITICAL, "UFS get serial number failed.\n");
+ ufs_dump_hc_registers(dev);
}
return dev->serial_num;
@@ -180,7 +183,7 @@
ret = ufs_dev_init(dev);
if (ret != UFS_SUCCESS)
{
- dprintf(CRITICAL, "UFS init failed\n");
+ dprintf(CRITICAL, "UFS dev_init failed\n");
goto ufs_init_err;
}
@@ -188,7 +191,7 @@
ret = uic_init(dev);
if (ret != UFS_SUCCESS)
{
- dprintf(CRITICAL, "UFS init failed\n");
+ dprintf(CRITICAL, "UFS uic_init failed\n");
goto ufs_init_err;
}
@@ -199,32 +202,53 @@
ret = dme_send_nop_query(dev);
if (ret != UFS_SUCCESS)
{
- dprintf(CRITICAL, "UFS init failed\n");
+ dprintf(CRITICAL, "UFS dme_send_nop_query failed\n");
goto ufs_init_err;
}
ret = dme_set_fdeviceinit(dev);
-
if (ret != UFS_SUCCESS)
{
- dprintf(CRITICAL, "UFS init failed\n");
+ dprintf(CRITICAL, "UFS dme_set_fdeviceinit failed\n");
goto ufs_init_err;
}
ret = ucs_scsi_send_inquiry(dev);
if (ret != UFS_SUCCESS)
{
- dprintf(CRITICAL, "UFS init failed\n");
+ dprintf(CRITICAL, "UFS ucs_scsi_send_inquiry failed\n");
goto ufs_init_err;
}
ret = dme_read_unit_desc(dev, 0);
if (ret != UFS_SUCCESS)
{
- dprintf(CRITICAL, "UFS init failed\n");
+ dprintf(CRITICAL, "UFS dme_read_unit_desc failed\n");
goto ufs_init_err;
}
+ dprintf(CRITICAL,"UFS init success\n");
+
ufs_init_err:
+
+ if(ret != UFS_SUCCESS)
+ {
+ ufs_dump_hc_registers(dev);
+ }
+
return ret;
}
+
+void ufs_dump_hc_registers(struct ufs_dev *dev)
+{
+ uint32_t base = dev->base;
+
+ dprintf(CRITICAL,"------Host controller register dump ---------\n");
+ dprintf(CRITICAL,"UFS_UECPA 0x%x\n",readl(UFS_UECPA(base)));
+ dprintf(CRITICAL,"UFS_UECDL 0x%x\n",readl(UFS_UECDL(base)));
+ dprintf(CRITICAL,"UFS_UECN 0x%x\n", readl(UFS_UECN(base)));
+ dprintf(CRITICAL,"UFS_UECT 0x%x\n",readl(UFS_UECT(base)));
+ dprintf(CRITICAL,"UFS_UECDME 0x%x\n",readl(UFS_UECDME(base)));
+ dprintf(CRITICAL,"UFS_HCS 0x%x\n", readl(UFS_HCS(base)));
+ dprintf(CRITICAL,"-----------End--------------------------------\n");
+}