Merge "platform: msm_shared: Change UFS_IRQ to level triggered IRQ"
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index c7522d6..b9d89f4 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -98,6 +98,7 @@
 
 #define RECOVERY_MODE   0x77665502
 #define FASTBOOT_MODE   0x77665500
+#define ALARM_BOOT      0x77665503
 
 /* make 4096 as default size to ensure EFS,EXT4's erasing */
 #define DEFAULT_ERASE_SIZE  4096
@@ -119,6 +120,7 @@
 #endif
 static const char *usb_sn_cmdline = " androidboot.serialno=";
 static const char *androidboot_mode = " androidboot.mode=";
+static const char *alarmboot_cmdline = " androidboot.alarmboot=true";
 static const char *loglevel         = " quiet";
 static const char *battchg_pause = " androidboot.mode=charger";
 static const char *auth_kernel = " androidboot.authorized_kernel=true";
@@ -141,6 +143,7 @@
 static char ffbm_mode_string[FFBM_MODE_BUF_SIZE];
 static bool boot_into_ffbm;
 static char target_boot_params[64];
+static bool boot_reason_alarm;
 
 /* Assuming unauthorized kernel image by default */
 static int auth_kernel_img = 0;
@@ -252,6 +255,8 @@
 		cmdline_len += strlen(ffbm_mode_string);
 		/* reduce kernel console messages to speed-up boot */
 		cmdline_len += strlen(loglevel);
+	} else if (boot_reason_alarm) {
+		cmdline_len += strlen(alarmboot_cmdline);
 	} else if (device.charger_screen_enabled &&
 			target_pause_for_battery_charge()) {
 		pause_at_bootup = 1;
@@ -383,6 +388,10 @@
 			src = loglevel;
 			if (have_cmdline) --dst;
 			while ((*dst++ = *src++));
+		} else if (boot_reason_alarm) {
+			src = alarmboot_cmdline;
+			if (have_cmdline) --dst;
+			while ((*dst++ = *src++));
 		} else if (pause_at_bootup) {
 			src = battchg_pause;
 			if (have_cmdline) --dst;
@@ -2669,6 +2678,8 @@
 		boot_into_recovery = 1;
 	} else if(reboot_mode == FASTBOOT_MODE) {
 		boot_into_fastboot = true;
+	} else if(reboot_mode == ALARM_BOOT) {
+		boot_reason_alarm = true;
 	}
 
 normal_boot:
diff --git a/dev/gcdb/display/gcdb_display.c b/dev/gcdb/display/gcdb_display.c
index dd77668..5a060c4 100755
--- a/dev/gcdb/display/gcdb_display.c
+++ b/dev/gcdb/display/gcdb_display.c
@@ -219,15 +219,14 @@
 
 	dsi_id_len = strlen(dsi_id);
 	panel_node_len = strlen(panel_node);
-	if (slave_panel_node)
-		slave_panel_node_len = strlen(slave_panel_node);
+	if (!slave_panel_node)
+		slave_panel_node = NO_PANEL_CONFIG;
+	slave_panel_node_len = strlen(slave_panel_node);
 
 	arg_size = prefix_string_len + dsi_id_len + panel_node_len +
 						LK_OVERRIDE_PANEL_LEN + 1;
 
-	/* For dual pipe or split display */
-	if (panel_mode)
-		arg_size += DSI_1_STRING_LEN + slave_panel_node_len;
+	arg_size += DSI_1_STRING_LEN + slave_panel_node_len;
 
 	if (buf_size < arg_size) {
 		dprintf(CRITICAL, "display command line buffer is small\n");
@@ -247,18 +246,13 @@
 
 		strlcpy(pbuf, panel_node, buf_size);
 
-		/* Return string for single dsi */
-		if (!panel_mode)
-			goto end;
-
 		pbuf += panel_node_len;
 		buf_size -= panel_node_len;
 
 		strlcpy(pbuf, DSI_1_STRING, buf_size);
 		pbuf += DSI_1_STRING_LEN;
 		buf_size -= DSI_1_STRING_LEN;
-		if (slave_panel_node)
-			strlcpy(pbuf, slave_panel_node, buf_size);
+		strlcpy(pbuf, slave_panel_node, buf_size);
 	}
 end:
 	return ret;
diff --git a/platform/msm8916/rules.mk b/platform/msm8916/rules.mk
index 1b737e7..b0a2070 100644
--- a/platform/msm8916/rules.mk
+++ b/platform/msm8916/rules.mk
@@ -13,8 +13,6 @@
 DEFINES += WITH_CPU_EARLY_INIT=0 WITH_CPU_WARM_BOOT=0 \
           MMC_SLOT=$(MMC_SLOT) SSD_ENABLE
 
-DEFINES += TZ_SAVE_KERNEL_HASH
-
 INCLUDES += -I$(LOCAL_DIR)/include -I$(LK_TOP_DIR)/platform/msm_shared/include
 
 DEVS += fbcon
diff --git a/platform/msm8994/acpuclock.c b/platform/msm8994/acpuclock.c
index ba316fa..46129d8 100644
--- a/platform/msm8994/acpuclock.c
+++ b/platform/msm8994/acpuclock.c
@@ -328,7 +328,7 @@
 		ASSERT(0);
 	}
 
-	ret = clk_get_set_enable("mdss_mdp_clk_src", 240000000, 1);
+	ret = clk_get_set_enable("mdss_mdp_clk_src", 300000000, 1);
 	if(ret)
 	{
 		dprintf(CRITICAL, "failed to set mdp_clk_src ret = %d\n", ret);
@@ -371,7 +371,7 @@
 {
 	int ret;
 	/* Configure MMSSNOC AXI clock */
-	ret = clk_get_set_enable("mmss_mmssnoc_axi_clk", 100000000, 1);
+	ret = clk_get_set_enable("mmss_mmssnoc_axi_clk", 300000000, 1);
 	if(ret)
 	{
 		dprintf(CRITICAL, "failed to set mmssnoc_axi_clk ret = %d\n", ret);
@@ -379,7 +379,7 @@
 	}
 
 	/* Configure S0 AXI clock */
-	ret = clk_get_set_enable("mmss_s0_axi_clk", 100000000, 1);
+	ret = clk_get_set_enable("mmss_s0_axi_clk", 300000000, 1);
 	if(ret)
 	{
 		dprintf(CRITICAL, "failed to set mmss_s0_axi_clk ret = %d\n", ret);
@@ -387,7 +387,7 @@
 	}
 
 	/* Configure AXI clock */
-	ret = clk_get_set_enable("mdss_axi_clk", 100000000, 1);
+	ret = clk_get_set_enable("mdss_axi_clk", 300000000, 1);
 	if(ret)
 	{
 		dprintf(CRITICAL, "failed to set mdss_axi_clk ret = %d\n", ret);
diff --git a/platform/msm8994/msm8994-clock.c b/platform/msm8994/msm8994-clock.c
index a28291a..5ee2d5c 100644
--- a/platform/msm8994/msm8994-clock.c
+++ b/platform/msm8994/msm8994-clock.c
@@ -554,12 +554,14 @@
 static struct clk_freq_tbl ftbl_mmss_axi_clk[] = {
 	F_MM(19200000,     cxo,     1,   0,   0),
 	F_MM(100000000,  gpll0,     6,   0,   0),
+	F_MM(300000000,  gpll0,     2,   0,   0),
 	F_END
 };
 
 static struct clk_freq_tbl ftbl_mdp_clk[] = {
 	F_MM( 75000000,  gpll0,   8,   0,   0),
 	F_MM( 240000000,  gpll0,   2.5,   0,   0),
+	F_MM(300000000,  gpll0,     2,   0,   0),
 	F_END
 };
 
diff --git a/platform/msm_shared/include/utp.h b/platform/msm_shared/include/utp.h
index e7a6df9..ff55f22 100644
--- a/platform/msm_shared/include/utp.h
+++ b/platform/msm_shared/include/utp.h
@@ -47,6 +47,7 @@
 #define UTP_MUTEX_ACQUIRE_TIMEOUT                          0x100000
 
 #define UTP_GENERIC_CMD_TIMEOUT                            40000
+#define UTP_MAX_COMMAND_RETRY                              5000000
 
 struct utp_prdt_entry
 {
diff --git a/platform/msm_shared/mdp5.c b/platform/msm_shared/mdp5.c
index 08ebafb..ff0709e 100755
--- a/platform/msm_shared/mdp5.c
+++ b/platform/msm_shared/mdp5.c
@@ -887,6 +887,11 @@
 		writel(0x1, MDP_REG_SPLIT_DISPLAY_EN);
 	}
 
+	if (pinfo->lcdc.dst_split) {
+		writel(BIT(16), MDP_REG_PPB0_CONFIG);
+		writel(BIT(5), MDP_REG_PPB0_CNTL);
+	}
+
 	mdss_mdp_intf_off = mdss_mdp_intf_offset();
 
 	mdp_clk_gating_ctrl();
@@ -918,8 +923,10 @@
 
 	if (pinfo->mipi.dual_dsi) {
 		writel(0x213F, MDP_INTF_2_BASE + MDP_PANEL_FORMAT + mdss_mdp_intf_off);
-		reg = 0x21f00 | mdss_mdp_ctl_out_sel(pinfo, 0);
-		writel(reg, MDP_CTL_1_BASE + CTL_TOP);
+		if (!pinfo->lcdc.dst_split) {
+			reg = 0x21f00 | mdss_mdp_ctl_out_sel(pinfo, 0);
+			writel(reg, MDP_CTL_1_BASE + CTL_TOP);
+		}
 	}
 
 	return ret;
diff --git a/platform/msm_shared/utp.c b/platform/msm_shared/utp.c
index 0c0e14b..317cd69 100644
--- a/platform/msm_shared/utp.c
+++ b/platform/msm_shared/utp.c
@@ -220,7 +220,7 @@
 {
 	int ret;
 	struct ufs_req_irq_type irq;
-	uint32_t val, base;
+	uint32_t val, base, retry = 0;
 	base = dev->base;
 	val = readl(UFS_IS(base));
 	irq.irq_handled = 0;
@@ -228,6 +228,13 @@
 	while(((val & UFS_IS_UTRCS) == 0) && ((val & UFS_IS_UTMRCS) == 0))
 	{
 		val = readl(UFS_IS(base));
+		retry++;
+		udelay(1);
+		if(retry == UTP_MAX_COMMAND_RETRY)
+		{
+			dprintf(CRITICAL, "UTP command never completed.\n");
+			return 1;
+		}
 #ifdef DEBUG_UFS
 		dprintf(INFO, "Waiting for UTRCS/URMRCS Completion...\n");
 #endif