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");
+}