Merge "ARM: dts: qcom: Correct max voltage of Regulator L4"
diff --git a/arch/arm/configs/vendor/sdxprairie-perf_defconfig b/arch/arm/configs/vendor/sdxprairie-perf_defconfig
index ccd851b..9e5d542 100644
--- a/arch/arm/configs/vendor/sdxprairie-perf_defconfig
+++ b/arch/arm/configs/vendor/sdxprairie-perf_defconfig
@@ -160,12 +160,6 @@
 CONFIG_QRTR_SMD=y
 CONFIG_QRTR_MHI=y
 CONFIG_QRTR_MHI_DEV=y
-CONFIG_BT=y
-# CONFIG_BT_BREDR is not set
-# CONFIG_BT_LE is not set
-# CONFIG_BT_DEBUGFS is not set
-CONFIG_MSM_BT_POWER=y
-# CONFIG_BTFM_SLIM is not set
 CONFIG_CFG80211=y
 CONFIG_CFG80211_DEBUGFS=y
 CONFIG_CFG80211_INTERNAL_REGDB=y
@@ -464,6 +458,8 @@
 CONFIG_HARDENED_USERCOPY=y
 CONFIG_SECURITY_SELINUX=y
 # CONFIG_SECURITY_SELINUX_AVC_STATS is not set
+CONFIG_CRYPTO_ECDH=y
+CONFIG_CRYPTO_CMAC=y
 CONFIG_CRYPTO_DEV_QCOM_MSM_QCE=y
 CONFIG_CRYPTO_DEV_QCRYPTO=y
 CONFIG_CRYPTO_DEV_QCEDEV=y
diff --git a/arch/arm/configs/vendor/sdxprairie_defconfig b/arch/arm/configs/vendor/sdxprairie_defconfig
index 994ee3a..1823aba 100644
--- a/arch/arm/configs/vendor/sdxprairie_defconfig
+++ b/arch/arm/configs/vendor/sdxprairie_defconfig
@@ -160,12 +160,6 @@
 CONFIG_QRTR_SMD=y
 CONFIG_QRTR_MHI=y
 CONFIG_QRTR_MHI_DEV=y
-CONFIG_BT=y
-# CONFIG_BT_BREDR is not set
-# CONFIG_BT_LE is not set
-# CONFIG_BT_DEBUGFS is not set
-CONFIG_MSM_BT_POWER=y
-# CONFIG_BTFM_SLIM is not set
 CONFIG_CFG80211=y
 CONFIG_RFKILL=y
 CONFIG_DEVTMPFS=y
@@ -274,6 +268,9 @@
 CONFIG_REGULATOR_RPMH=y
 CONFIG_REGULATOR_STUB=y
 CONFIG_FB=y
+CONFIG_FB_MSM=y
+CONFIG_FB_MSM_MDP_NONE=y
+CONFIG_FB_MSM_QPIC_PANEL_DETECT=y
 CONFIG_SOUND=y
 CONFIG_SND=y
 CONFIG_SND_DYNAMIC_MINORS=y
@@ -338,6 +335,9 @@
 CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_PLTFM=y
 CONFIG_MMC_SDHCI_MSM=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_TRIGGERS=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_DRV_QPNP=y
 CONFIG_DMADEVICES=y
@@ -492,6 +492,8 @@
 CONFIG_HARDENED_USERCOPY_PAGESPAN=y
 CONFIG_SECURITY_SELINUX=y
 # CONFIG_SECURITY_SELINUX_AVC_STATS is not set
+CONFIG_CRYPTO_ECDH=y
+CONFIG_CRYPTO_CMAC=y
 CONFIG_CRYPTO_DEV_QCOM_MSM_QCE=y
 CONFIG_CRYPTO_DEV_QCRYPTO=y
 CONFIG_CRYPTO_DEV_QCEDEV=y
diff --git a/arch/arm64/boot/dts/qcom/atoll-atp.dtsi b/arch/arm64/boot/dts/qcom/atoll-atp.dtsi
index 840cdde..e8c9bcd 100644
--- a/arch/arm64/boot/dts/qcom/atoll-atp.dtsi
+++ b/arch/arm64/boot/dts/qcom/atoll-atp.dtsi
@@ -12,6 +12,7 @@
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/iio/qcom,spmi-vadc.h>
+#include "atoll-sde-display.dtsi"
 
 &soc {
 };
@@ -40,7 +41,7 @@
 };
 
 &usb0 {
-	extcon = <&pm6150_pdphy>, <&pm6150_charger>;
+	extcon = <&pm6150_pdphy>, <&pm6150_charger>, <&eud>;
 };
 
 &usb_qmp_dp_phy {
@@ -149,3 +150,67 @@
 				&nfc_clk_req_suspend>;
 	};
 };
+
+&qupv3_se7_i2c {
+	status = "ok";
+
+	synaptics_tcm@20 {
+		compatible = "synaptics,tcm-i2c";
+		reg = <0x20>;
+		interrupt-parent = <&tlmm>;
+		interrupts = <9 0x2008>;
+		pinctrl-names = "pmx_ts_active","pmx_ts_suspend",
+			"pmx_ts_release";
+		pinctrl-0 = <&ts_active>;
+		pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
+		pinctrl-2 = <&ts_release>;
+		vdd-supply = <&pm6150_l10>;
+		avdd-supply = <&pm6150l_l7>;
+		synaptics,pwr-reg-name = "avdd";
+		synaptics,bus-reg-name = "vdd";
+		synaptics,irq-gpio = <&tlmm 9 0x2008>;
+		synaptics,irq-on-state = <0>;
+		synaptics,reset-gpio = <&tlmm 8 0x00>;
+		synaptics,reset-on-state = <0>;
+		synaptics,reset-active-ms = <20>;
+		synaptics,reset-delay-ms = <200>;
+		synaptics,power-delay-ms = <200>;
+		synaptics,ubl-i2c-addr = <0x20>;
+	};
+};
+
+&dsi_rm69299_visionox_amoled_video {
+	qcom,panel-supply-entries = <&dsi_panel_pwr_supply_labibb_amoled>;
+	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
+	qcom,mdss-dsi-bl-min-level = <1>;
+	qcom,mdss-dsi-bl-max-level = <255>;
+	qcom,platform-te-gpio = <&tlmm 10 0>;
+	qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>;
+};
+
+&dsi_rm69299_visionox_amoled_cmd {
+	qcom,panel-supply-entries = <&dsi_panel_pwr_supply_labibb_amoled>;
+	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
+	qcom,mdss-dsi-bl-min-level = <1>;
+	qcom,mdss-dsi-bl-max-level = <255>;
+	qcom,platform-te-gpio = <&tlmm 10 0>;
+	qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>;
+};
+
+&dsi_sim_cmd {
+	qcom,panel-supply-entries = <&dsi_panel_pwr_supply_no_labibb>;
+	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
+	qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>;
+};
+
+&dsi_sim_vid {
+	qcom,panel-supply-entries = <&dsi_panel_pwr_supply_no_labibb>;
+	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
+	qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>;
+};
+
+&dsi_sim_dsc_375_cmd {
+	qcom,panel-supply-entries = <&dsi_panel_pwr_supply_no_labibb>;
+	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
+	qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>;
+};
diff --git a/arch/arm64/boot/dts/qcom/atoll-npu.dtsi b/arch/arm64/boot/dts/qcom/atoll-npu.dtsi
new file mode 100644
index 0000000..1b47cf5
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/atoll-npu.dtsi
@@ -0,0 +1,160 @@
+/* Copyright (c) 2019, The Linux Foundation.All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+&soc {
+	msm_npu: qcom,msm_npu@9800000 {
+		compatible = "qcom,msm-npu";
+		status = "ok";
+		reg = <0x9900000 0x20000>,
+			<0x99f0000 0x10000>,
+			<0x9980000 0x10000>,
+			<0x17c00000 0x10000>;
+		reg-names = "tcm", "core", "cc", "apss_shared";
+		interrupts = <GIC_SPI 583 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 585 IRQ_TYPE_EDGE_RISING>,
+			<GIC_SPI 587 IRQ_TYPE_EDGE_RISING>,
+			<GIC_SPI 584 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "error_irq", "wdg_bite_irq", "ipc_irq",
+			"general_irq";
+		iommus = <&apps_smmu 0x1461 0x0>, <&apps_smmu 0x1462 0x0>,
+			<&apps_smmu 0x1481 0x0>, <&apps_smmu 0x1482 0x0>;
+
+		clocks = <&clock_npucc NPU_CC_XO_CLK>,
+			<&clock_npucc NPU_CC_CORE_CLK>,
+			<&clock_npucc NPU_CC_CAL_HM0_CLK>,
+			<&clock_npucc NPU_CC_CAL_HM0_CDC_CLK>,
+			<&clock_npucc NPU_CC_NOC_AXI_CLK>,
+			<&clock_npucc NPU_CC_NOC_AHB_CLK>,
+			<&clock_npucc NPU_CC_NOC_DMA_CLK>,
+			<&clock_npucc NPU_CC_RSC_XO_CLK>,
+			<&clock_npucc NPU_CC_S2P_CLK>,
+			<&clock_npucc NPU_CC_BWMON_CLK>,
+			<&clock_npucc NPU_CC_CAL_HM0_PERF_CNT_CLK>,
+			<&clock_npucc NPU_CC_BTO_CORE_CLK>,
+			<&clock_npucc NPU_DSP_CORE_CLK_SRC>;
+		clock-names = "xo_clk",
+			"npu_core_clk",
+			"cal_hm0_clk",
+			"cal_hm0_cdc_clk",
+			"axi_clk",
+			"ahb_clk",
+			"dma_clk",
+			"rsc_xo_clk",
+			"s2p_clk",
+			"bwmon_clk",
+			"cal_hm0_perf_cnt_clk",
+			"bto_core_clk",
+			"dsp_core_clk_src";
+
+		vdd-supply = <&npu_core_gdsc>;
+		vdd_cx-supply = <&VDD_CX_LEVEL>;
+		qcom,proxy-reg-names ="vdd", "vdd_cx";
+		qcom,vdd_cx-uV-uA = <RPMH_REGULATOR_LEVEL_TURBO 100000>;
+		#cooling-cells = <2>;
+		qcom,src-dst-ports = <MSM_BUS_MASTER_NPU MSM_BUS_SLAVE_EBI_CH0>;
+		qcom,npu-pwrlevels {
+			#address-cells = <1>;
+			#size-cells = <0>;
+			compatible = "qcom,npu-pwrlevels";
+			initial-pwrlevel = <4>;
+			qcom,npu-pwrlevel@0 {
+				reg = <0>;
+				vreg = <1>;
+				clk-freq = <19200000
+					100000000
+					200000000
+					200000000
+					120000000
+					40000000
+					200000000
+					19200000
+					50000000
+					19200000
+					200000000
+					19200000
+					300000000>;
+			};
+
+			qcom,npu-pwrlevel@1 {
+				reg = <1>;
+				vreg = <2>;
+				clk-freq = <19200000
+					200000000
+					400000000
+					400000000
+					200000000
+					40000000
+					300000000
+					19200000
+					50000000
+					19200000
+					400000000
+					19200000
+					400000000>;
+			};
+
+			qcom,npu-pwrlevel@2 {
+				reg = <2>;
+				vreg = <3>;
+				clk-freq = <19200000
+					333000000
+					515000000
+					515000000
+					300000000
+					75000000
+					400000000
+					19200000
+					50000000
+					19200000
+					515000000
+					19200000
+					500000000>;
+			};
+
+			qcom,npu-pwrlevel@3 {
+				reg = <3>;
+				vreg = <4>;
+				clk-freq = <19200000
+					428000000
+					650000000
+					650000000
+					403000000
+					75000000
+					600000000
+					19200000
+					100000000
+					19200000
+					515000000
+					19200000
+					660000000>;
+			};
+
+			qcom,npu-pwrlevel@4 {
+				reg = <4>;
+				vreg = <6>;
+				clk-freq = <19200000
+					500000000
+					800000000
+					800000000
+					533000000
+					75000000
+					710000000
+					19200000
+					100000000
+					19200000
+					650000000
+					19200000
+					800000000>;
+			};
+		};
+	};
+};
diff --git a/arch/arm64/boot/dts/qcom/atoll-qrd.dtsi b/arch/arm64/boot/dts/qcom/atoll-qrd.dtsi
index ecc0cb92..ca49d9e 100644
--- a/arch/arm64/boot/dts/qcom/atoll-qrd.dtsi
+++ b/arch/arm64/boot/dts/qcom/atoll-qrd.dtsi
@@ -19,11 +19,72 @@
 #include "atoll-camera-sensor-qrd.dtsi"
 #include "atoll-sde-display.dtsi"
 
+&tlmm {
+	fpc_reset_int: fpc_reset_int {
+		fpc_reset_low: reset_low {
+			mux {
+				pins = "gpio91";
+				function = "gpio";
+			};
+			config {
+				pins = "gpio91";
+				drive-strength = <2>;
+				bias-disable;
+				output-low;
+			};
+		};
+
+		fpc_reset_high: reset_high {
+			mux {
+				pins = "gpio91";
+				function = "gpio";
+			};
+			config {
+				pins = "gpio91";
+				drive-strength = <2>;
+				bias-disable;
+				output-high;
+			};
+		};
+
+		fpc_int_low: int_low {
+			mux {
+				pins = "gpio90";
+				function = "gpio";
+			};
+			config {
+				pins = "gpio90";
+				drive-strength = <2>;
+				bias-pull-down;
+				input-enable;
+			};
+		};
+	};
+};
+
 &soc {
 	qrd_batterydata: qcom,battery-data {
 		qcom,batt-id-range-pct = <15>;
 		#include "qg-batterydata-atl466271_3300mAh.dtsi"
 	};
+
+	fingerprint: fpc1020 {
+		compatible = "fpc,fpc1020";
+		interrupt-parent = <&tlmm>;
+		interrupts = <90 0>;
+		fpc,gpio_rst = <&tlmm 91 0>;
+		fpc,gpio_irq = <&tlmm 90 0>;
+		vcc_spi-supply = <&pm6150_l10>;
+		vdd_io-supply  = <&pm6150_l10>;
+		vdd_ana-supply = <&pm6150_l10>;
+		fpc,enable-on-boot;
+		pinctrl-names = "fpc1020_reset_reset",
+				"fpc1020_reset_active",
+				"fpc1020_irq_active";
+		pinctrl-0 = <&fpc_reset_low>;
+		pinctrl-1 = <&fpc_reset_high>;
+		pinctrl-2 = <&fpc_int_low>;
+	};
 };
 
 &pm6150a_amoled {
diff --git a/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi b/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi
index 4d168ca..b0ad41b 100644
--- a/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi
+++ b/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi
@@ -12,6 +12,9 @@
 
 #include "dsi-panel-rm69299-visionox-amoled-fhd-plus-video.dtsi"
 #include "dsi-panel-rm69299-visionox-amoled-fhd-plus-cmd.dtsi"
+#include "dsi-panel-sim-video.dtsi"
+#include "dsi-panel-sim-cmd.dtsi"
+#include "dsi-panel-sim-dsc375-cmd.dtsi"
 #include <dt-bindings/clock/mdss-10nm-pll-clk.h>
 
 &soc {
@@ -105,6 +108,39 @@
 		qcom,dsi-panel = <&dsi_rm69299_visionox_amoled_cmd>;
 	};
 
+	dsi_sim_vid_display: qcom,dsi-display@2 {
+		label = "dsi_sim_vid_display";
+		qcom,display-type = "primary";
+
+		qcom,dsi-ctrl-num = <0>;
+		qcom,dsi-phy-num = <0>;
+		qcom,dsi-select-clocks = "mux_byte_clk0", "mux_pixel_clk0";
+
+		qcom,dsi-panel = <&dsi_sim_vid>;
+	};
+
+	dsi_sim_cmd_display: qcom,dsi-display@3 {
+		label = "dsi_sim_cmd_display";
+		qcom,display-type = "primary";
+
+		qcom,dsi-ctrl-num = <0>;
+		qcom,dsi-phy-num = <0>;
+		qcom,dsi-select-clocks = "mux_byte_clk0", "mux_pixel_clk0";
+
+		qcom,dsi-panel = <&dsi_sim_cmd>;
+	};
+
+	dsi_sim_dsc_375_cmd_display: qcom,dsi-display@4 {
+		label = "dsi_sim_dsc_375_cmd_display";
+		qcom,display-type = "primary";
+
+		qcom,dsi-ctrl-num = <0>;
+		qcom,dsi-phy-num = <0>;
+		qcom,dsi-select-clocks = "mux_byte_clk0", "mux_pixel_clk0";
+
+		qcom,dsi-panel = <&dsi_sim_dsc_375_cmd>;
+	};
+
 	sde_dsi: qcom,dsi-display {
 		compatible = "qcom,dsi-display";
 
@@ -136,7 +172,10 @@
 
 		qcom,dsi-display-list =
 			<&dsi_rm69299_visionox_amoled_vid_display
-			&dsi_rm69299_visionox_amoled_cmd_display>;
+			&dsi_rm69299_visionox_amoled_cmd_display
+			&dsi_sim_vid_display
+			&dsi_sim_cmd_display
+			&dsi_sim_dsc_375_cmd_display>;
 	};
 
 	sde_wb: qcom,wb-display@0 {
@@ -195,6 +234,7 @@
 };
 
 &dsi_rm69299_visionox_amoled_cmd {
+	qcom,ulps-enabled;
 	qcom,esd-check-enabled;
 	qcom,mdss-dsi-panel-status-check-mode = "reg_read";
 	qcom,mdss-dsi-panel-status-command = [06 01 00 01 00 00 01 0a];
@@ -213,3 +253,76 @@
 		};
 	};
 };
+
+&dsi_sim_vid {
+	qcom,mdss-dsi-t-clk-post = <0x0d>;
+	qcom,mdss-dsi-t-clk-pre = <0x2d>;
+	qcom,mdss-dsi-display-timings {
+		timing@0{
+			qcom,mdss-dsi-panel-phy-timings = [00 1c 07 07 23 21 07
+				07 05 02 04 00];
+			qcom,display-topology = <1 0 1>,
+						<2 0 1>;
+			qcom,default-topology-index = <0>;
+		};
+	};
+};
+
+&dsi_sim_cmd {
+	qcom,mdss-dsi-t-clk-post = <0x0c>;
+	qcom,mdss-dsi-t-clk-pre = <0x29>;
+	qcom,ulps-enabled;
+	qcom,mdss-dsi-display-timings {
+		timing@0{
+			qcom,mdss-dsi-panel-phy-timings = [00 1a 06 06 22 20 07
+				07 04 02 04 00];
+			qcom,display-topology = <1 1 1>,
+						<2 2 1>;
+			qcom,default-topology-index = <1>;
+			qcom,panel-roi-alignment = <720 40 720 40 720 40>;
+			qcom,partial-update-enabled = "single_roi";
+		};
+
+		timing@1{
+			qcom,mdss-dsi-panel-phy-timings = [00 1a 06 06 22 20 07
+				07 04 02 04 00];
+			qcom,display-topology = <1 1 1>,
+						<2 2 1>;
+			qcom,default-topology-index = <1>;
+			qcom,panel-roi-alignment = <540 40 540 40 540 40>;
+			qcom,partial-update-enabled = "single_roi";
+		};
+
+		timing@2{
+			qcom,mdss-dsi-panel-phy-timings = [00 1a 06 06 22 20 07
+				07 04 02 04 00];
+			qcom,display-topology = <1 1 1>,
+						<2 2 1>;
+			qcom,default-topology-index = <1>;
+			qcom,panel-roi-alignment = <360 40 360 40 360 40>;
+			qcom,partial-update-enabled = "single_roi";
+		};
+	};
+};
+
+&dsi_sim_dsc_375_cmd {
+	qcom,mdss-dsi-t-clk-post = <0x0d>;
+	qcom,mdss-dsi-t-clk-pre = <0x2d>;
+	qcom,ulps-enabled;
+	qcom,mdss-dsi-display-timings {
+		timing@0 { /* 1080p */
+			qcom,mdss-dsi-panel-phy-timings = [00 1a 06 06 22 20 07
+				07 04 02 04 00];
+			qcom,display-topology = <1 1 1>;
+			qcom,default-topology-index = <0>;
+		};
+		timing@1 { /* qhd */
+			qcom,mdss-dsi-panel-phy-timings = [00 15 05 05 20 1f 05
+				05 03 02 04 00];
+			qcom,display-topology = <1 1 1>,
+						<2 2 1>, /* dsc merge */
+						<2 1 1>; /* 3d mux */
+			qcom,default-topology-index = <0>;
+		};
+	};
+};
diff --git a/arch/arm64/boot/dts/qcom/atoll.dtsi b/arch/arm64/boot/dts/qcom/atoll.dtsi
index 7c3fa9d..02de803 100644
--- a/arch/arm64/boot/dts/qcom/atoll.dtsi
+++ b/arch/arm64/boot/dts/qcom/atoll.dtsi
@@ -532,16 +532,22 @@
 			reg = <0 0x80b00000 0 0x3900000>;
 		};
 
+		pil_modem_mem: modem_region@86000000 {
+			compatible = "removed-dma-pool";
+			no-map;
+			reg = <0 0x86000000 0 0x8400000>;
+		};
+
 		pil_camera_mem: camera_region@8e000000 {
 			compatible = "removed-dma-pool";
 			no-map;
 			reg = <0 0x8e400000 0 0x500000>;
 		};
 
-		pil_modem_mem: modem_region@86000000 {
+		pil_npu_mem: pil_npu_region@8e500000 {
 			compatible = "removed-dma-pool";
 			no-map;
-			reg = <0 0x86000000 0 0x8400000>;
+			reg = <0 0x8e900000 0 0x500000>;
 		};
 
 		pil_video_mem: pil_video_region@8ea00000 {
@@ -568,12 +574,6 @@
 			reg = <0 0x93900000 0 0x200000>;
 		};
 
-		npu_mem: npu_region@8e500000 {
-			compatible = "removed-dma-pool";
-			no-map;
-			reg = <0 0x8e900000 0 0x500000>;
-		};
-
 		pil_ipa_fw_mem: ipa_fw_region@93700000 {
 			compatible = "removed-dma-pool";
 			no-map;
@@ -620,6 +620,11 @@
 			size = <0 0x8c00000>;
 		};
 
+		cont_splash_memory: cont_splash_region@9bc00000 {
+			reg = <0x0 0x9bc00000 0x0 0x02400000>;
+			label = "cont_splash_region";
+		};
+
 		adsp_mem: adsp_region {
 			compatible = "shared-dma-pool";
 			alloc-ranges = <0x0 0x00000000 0x0 0xffffffff>;
@@ -1177,6 +1182,19 @@
 		mbox-names = "mss-pil";
 	};
 
+	qcom,npu@9800000 {
+		compatible = "qcom,pil-tz-generic";
+		reg = <0x9800000 0x800000>;
+
+		qcom,pas-id = <23>;
+		qcom,firmware-name = "npu";
+		memory-region = <&pil_npu_mem>;
+
+		/* Outputs to npu */
+		qcom,smem-states = <&npu_smp2p_out 0>;
+		qcom,smem-states-names = "qcom,force-stop";
+	};
+
 	qcom,turing@8300000 {
 		compatible = "qcom,pil-tz-generic";
 		reg = <0x8300000 0x100000>;
@@ -2926,7 +2944,8 @@
 			< 1113600 MHZ_TO_MBPS( 547, 4) >,
 			< 1267200 MHZ_TO_MBPS(1017, 4) >,
 			< 1708800 MHZ_TO_MBPS(1555, 4) >,
-			< 2400000 MHZ_TO_MBPS(1804, 4) >;
+			< 2208000 MHZ_TO_MBPS(1804, 4) >,
+			< 2400000 MHZ_TO_MBPS(2133, 4) >;
 	};
 
 	cpu0_cpu_ddr_latfloor: qcom,cpu0-cpu-ddr-latfloor {
@@ -3273,6 +3292,7 @@
 #include "atoll-regulator.dtsi"
 #include "atoll-usb.dtsi"
 #include "atoll-vidc.dtsi"
+#include "atoll-npu.dtsi"
 
 &pm6150_vadc {
 	pinctrl-names = "default";
diff --git a/arch/arm64/boot/dts/qcom/dm-verity-boot.dtsi b/arch/arm64/boot/dts/qcom/dm-verity-boot.dtsi
deleted file mode 100644
index 3aee6a4..0000000
--- a/arch/arm64/boot/dts/qcom/dm-verity-boot.dtsi
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-dm_verity {
-	dmname="disabled";
-	version="1";
-	data_device="/dev/sda6";
-	hash_device="/dev/sda6";
-	data_block_size="4096";
-	hash_block_size="4096";
-	number_of_data_blocks="262144";
-	hash_start_block="262145";
-	algorithm="sha256";
-	// root hash: 64 bytes long
-	digest=
-	"b0fe12d7da6e23a1e19b5a69252c7aaf7b249191eb13bba3f566d630b3f2828a";
-	salt="a2df040e00f02c3b2a19e90e5aa76fe1a303f4e08584aaf40e87f088a32b7709";
-	// restart_on_corruption ignore_corruption ignore_zero_blocks
-	opt="restart_on_corruption";
-};
diff --git a/drivers/md/dm-ioctrl.h b/arch/arm64/boot/dts/qcom/qpic-panel-ili-hvga.dtsi
similarity index 61%
rename from drivers/md/dm-ioctrl.h
rename to arch/arm64/boot/dts/qcom/qpic-panel-ili-hvga.dtsi
index d331fcd..08cde28 100644
--- a/drivers/md/dm-ioctrl.h
+++ b/arch/arm64/boot/dts/qcom/qpic-panel-ili-hvga.dtsi
@@ -1,4 +1,4 @@
-/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -10,11 +10,12 @@
  * GNU General Public License for more details.
  */
 
-#ifndef DM_IOCTRL_INTERNAL_H
-#define DM_IOCTRL_INTERNAL_H
-
-#include <linux/dm-ioctl.h>
-
-int dm_ioctrl(uint cmd, struct dm_ioctl *param);
-
-#endif
+&soc {
+	qcom,mdss_lcdc_ili_hvga {
+		compatible = "qcom,mdss-qpic-panel";
+		label = "ili9488 hvga lcdc panel";
+		qcom,mdss-pan-res = <320 480>;
+		qcom,mdss-pan-bpp = <18>;
+		qcom,refresh_rate = <60>;
+	};
+};
diff --git a/arch/arm64/boot/dts/qcom/sa8155.dtsi b/arch/arm64/boot/dts/qcom/sa8155.dtsi
index 0e7494b..4016bf6 100644
--- a/arch/arm64/boot/dts/qcom/sa8155.dtsi
+++ b/arch/arm64/boot/dts/qcom/sa8155.dtsi
@@ -656,8 +656,6 @@
 		read-only;
 		ranges;
 	};
-
-	/include/ "dm-verity-boot.dtsi"
 };
 
 &ipa_hw {
diff --git a/arch/arm64/boot/dts/qcom/sdmmagpie-sde-display.dtsi b/arch/arm64/boot/dts/qcom/sdmmagpie-sde-display.dtsi
index f39f94b..7b7f6ed 100644
--- a/arch/arm64/boot/dts/qcom/sdmmagpie-sde-display.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdmmagpie-sde-display.dtsi
@@ -788,6 +788,7 @@
 			qcom,mdss-dsi-panel-phy-timings = [00 20 08 08 24 23 08
 				08 05 02 04 00];
 			qcom,display-topology = <1 0 1>;
+			qcom,default-topology-index = <0>;
 		};
 	};
 };
diff --git a/arch/arm64/boot/dts/qcom/sdxprairie-cdp.dts b/arch/arm64/boot/dts/qcom/sdxprairie-cdp.dts
index 795a7f2..fe85c561 100644
--- a/arch/arm64/boot/dts/qcom/sdxprairie-cdp.dts
+++ b/arch/arm64/boot/dts/qcom/sdxprairie-cdp.dts
@@ -14,6 +14,8 @@
 
 #include "sdxprairie.dtsi"
 #include "sdxprairie-cdp.dtsi"
+#include "sdxprairie-display.dtsi"
+#include "qpic-panel-ili-hvga.dtsi"
 
 / {
 	model = "Qualcomm Technologies, Inc. SDXPRAIRIE CDP";
diff --git a/arch/arm64/boot/dts/qcom/sdxprairie-display.dtsi b/arch/arm64/boot/dts/qcom/sdxprairie-display.dtsi
new file mode 100644
index 0000000..d0128c4
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sdxprairie-display.dtsi
@@ -0,0 +1,46 @@
+/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+/ {
+	mdss_qpic: qcom,msm_qpic@1b00000 {
+		compatible = "qcom,mdss_qpic";
+		reg = <0x1B00000 0x24000>;
+		reg-names = "qpic_base";
+		interrupts = <0 251 0>;
+
+		qcom,msm-bus,name = "mdss_qpic";
+		qcom,msm-bus,num-cases = <2>;
+		qcom,msm-bus,num-paths = <1>;
+
+		qcom,msm-bus,vectors-KBps =
+			<91 512 0 0>,
+			/* Voting for max b/w on PNOC bus for now */
+			<91 512 400000 800000>;
+
+		vdd-supply = <&pmxprairie_l6>;
+
+		qcom,rst-gpio = <&tlmm 23 0>;
+		qcom,cs-gpio = <&tlmm 21 0>;
+		qcom,ad8-gpio = <&tlmm 20 0>;
+		qcom,te-gpio = <&tlmm 22 0>;
+		qcom,bl-gpio = <&pmxprairie_gpios 1 0>;
+
+		clock-names = "core_clk";
+		clocks = <&clock_rpmh RPMH_QPIC_CLK>;
+
+		pinctrl-names= "mdss_default", "mdss_sleep";
+		pinctrl-0 = <&mdss_cs_active &mdss_te_active
+			&mdss_rs_active &mdss_ad_active>;
+		pinctrl-1 = <&mdss_cs_sleep &mdss_te_sleep
+			&mdss_rs_sleep &mdss_ad_sleep>;
+	};
+};
diff --git a/arch/arm64/boot/dts/qcom/sdxprairie-pinctrl.dtsi b/arch/arm64/boot/dts/qcom/sdxprairie-pinctrl.dtsi
index a5addb2..63bb000 100644
--- a/arch/arm64/boot/dts/qcom/sdxprairie-pinctrl.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdxprairie-pinctrl.dtsi
@@ -698,6 +698,111 @@
 				};
 			};
 		};
+
+		mdss_cs_active: mdss_cs_active {
+				mux {
+					pins = "gpio21";
+					function = "ebi2_lcd";
+				};
+
+				config {
+					pins = "gpio21";
+					drive-strength = <10>; /* 10 mA */
+					bias-disable; /* NO pull */
+				};
+		};
+
+		mdss_cs_sleep: mdss_cs_sleep {
+				mux {
+					pins = "gpio21";
+					function = "ebi2_lcd";
+				};
+
+				config {
+					pins = "gpio21";
+					drive-strength = <2>; /* 2 mA */
+					bias-disable; /* NO pull */
+				};
+		};
+
+		mdss_te_active: mdss_te_active {
+				mux {
+					pins = "gpio22";
+					function = "ebi2_lcd";
+				};
+
+				config {
+					pins = "gpio22";
+					drive-strength = <10>; /* 10 mA */
+					bias-disable; /* NO pull */
+				};
+		};
+
+		mdss_te_sleep: mdss_te_sleep {
+				mux {
+					pins = "gpio22";
+					function = "ebi2_lcd";
+				};
+
+				config {
+					pins = "gpio22";
+					drive-strength = <2>; /* 2 mA */
+					bias-disable; /* NO pull */
+				};
+		};
+
+		mdss_rs_active: mdss_rs_active {
+				mux {
+					pins = "gpio23";
+					function = "ebi2_lcd";
+				};
+
+				config {
+					pins = "gpio23";
+					drive-strength = <10>; /* 10 mA */
+					bias-disable; /* NO pull */
+				};
+		};
+
+		mdss_rs_sleep: mdss_rs_sleep {
+				mux {
+					pins = "gpio23";
+					function = "ebi2_lcd";
+				};
+
+				config {
+					pins = "gpio23";
+					drive-strength = <2>; /* 2 mA */
+					bias-disable; /* NO pull */
+				};
+		};
+
+		mdss_ad_active: mdss_ad_active {
+				mux {
+					pins = "gpio20";
+					function = "ebi2_a";
+				};
+
+				config {
+					pins = "gpio20";
+					drive-strength = <10>; /* 10 mA */
+					bias-disable; /* NO pull */
+				};
+		};
+
+		mdss_ad_sleep: mdss_ad_sleep {
+				mux {
+					pins = "gpio20";
+					function = "ebi2_a";
+				};
+
+				config {
+					pins = "gpio20";
+					drive-strength = <2>; /* 2 mA */
+					bias-disable; /* NO pull */
+				};
+		};
+
 		pmx_sec_mi2s_aux_din {
 			sec_din_sleep: sec_din_sleep {
 				mux {
diff --git a/arch/arm64/boot/dts/qcom/sdxprairie-usb.dtsi b/arch/arm64/boot/dts/qcom/sdxprairie-usb.dtsi
index a09c1c5..2bb5ae2 100644
--- a/arch/arm64/boot/dts/qcom/sdxprairie-usb.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdxprairie-usb.dtsi
@@ -206,11 +206,11 @@
 		     USB3_UNI_QSERDES_COM_SSC_STEP_SIZE1_MODE0 0xde 0
 		     USB3_UNI_QSERDES_COM_SSC_STEP_SIZE2_MODE0 0x07 0
 		     USB3_UNI_QSERDES_COM_VCO_TUNE_MAP 0x02 0
-		     USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH4 0x8c 0
-		     USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH3 0x7f 0
-		     USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH2 0xff 0
-		     USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH 0x3f 0
-		     USB3_UNI_QSERDES_RX_RX_MODE_00_LOW 0xff 0
+		     USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH4 0xb8 0
+		     USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH3 0xff 0
+		     USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH2 0xbf 0
+		     USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH 0x7f 0
+		     USB3_UNI_QSERDES_RX_RX_MODE_00_LOW 0x7f 0
 		     USB3_UNI_QSERDES_RX_RX_MODE_01_HIGH4 0xb4 0
 		     USB3_UNI_QSERDES_RX_RX_MODE_01_HIGH3 0x7b 0
 		     USB3_UNI_QSERDES_RX_RX_MODE_01_HIGH2 0x5c 0
@@ -238,13 +238,13 @@
 		     USB3_UNI_QSERDES_RX_SIGDET_DEGLITCH_CNTRL 0x0e 0
 		     USB3_UNI_QSERDES_RX_RX_IDAC_TSETTLE_HIGH 0x00 0
 		     USB3_UNI_QSERDES_RX_RX_IDAC_TSETTLE_LOW 0xc0 0
-		     USB3_UNI_QSERDES_RX_DFE_CTLE_POST_CAL_OFFSET 0x00 0
+		     USB3_UNI_QSERDES_RX_DFE_CTLE_POST_CAL_OFFSET 0x38 0
 		     USB3_UNI_QSERDES_RX_UCDR_SO_GAIN 0x06 0
 		     USB3_UNI_QSERDES_RX_DCC_CTRL1 0x0c 0
 		     USB3_UNI_QSERDES_RX_GM_CAL 0x1f 0
 		     USB3_UNI_QSERDES_TX_RCV_DETECT_LVL_2 0x12 0
 		     USB3_UNI_QSERDES_TX_LANE_MODE_1 0xd5 0
-		     USB3_UNI_QSERDES_TX_PI_QEC_CTRL 0x20 0
+		     USB3_UNI_QSERDES_TX_PI_QEC_CTRL 0x40 0
 		     USB3_UNI_QSERDES_TX_RES_CODE_LANE_OFFSET_TX 0x08 0
 		     USB3_UNI_PCS_LOCK_DETECT_CONFIG1 0xd0 0
 		     USB3_UNI_PCS_LOCK_DETECT_CONFIG2 0x07 0
diff --git a/arch/arm64/boot/dts/qcom/sm8150-sdxprairie.dtsi b/arch/arm64/boot/dts/qcom/sm8150-sdxprairie.dtsi
index 19e713a..f3a2c94 100644
--- a/arch/arm64/boot/dts/qcom/sm8150-sdxprairie.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8150-sdxprairie.dtsi
@@ -11,6 +11,7 @@
  */
 
 #include <dt-bindings/thermal/qmi_thermal.h>
+#include <dt-bindings/msm/msm-bus-ids.h>
 
 &mdm3 {
 	compatible = "qcom,ext-sdxprairie";
@@ -128,9 +129,64 @@
 		qcom,testbus-collection-on-crash;
 		qcom,non-tn-collection-on-crash;
 		qcom,secure-debug-check-action = <0>;
+		qcom,msm-bus,name = "ipa";
+		qcom,msm-bus,num-cases = <5>;
+		qcom,msm-bus,num-paths = <6>;
+		qcom,msm-bus,vectors-KBps =
+		/* No vote */
+		<MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_SNOC_GEM_NOC_SF 0 0>,
+		<MSM_BUS_MASTER_SNOC_SF_MEM_NOC MSM_BUS_SLAVE_LLCC 0 0>,
+		<MSM_BUS_MASTER_LLCC MSM_BUS_SLAVE_EBI_CH0 0 0>,
+		<MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_OCIMEM 0 0>,
+		<MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_IPA_CFG 0 0>,
+		<MSM_BUS_MASTER_IPA_CORE MSM_BUS_SLAVE_IPA_CORE 0 0>,
+
+		/* SVS2 */
+		<MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_SNOC_GEM_NOC_SF
+			150000 1590000>,
+		<MSM_BUS_MASTER_SNOC_SF_MEM_NOC MSM_BUS_SLAVE_LLCC
+			150000 4789750>,
+		<MSM_BUS_MASTER_LLCC MSM_BUS_SLAVE_EBI_CH0 150000 1800000>,
+		<MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_OCIMEM 80000 350000>,
+		<MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_IPA_CFG 40000 40000>,
+		<MSM_BUS_MASTER_IPA_CORE MSM_BUS_SLAVE_IPA_CORE 0 125>,
+
+		/* SVS */
+		<MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_SNOC_GEM_NOC_SF
+			150000 3180000>,
+		<MSM_BUS_MASTER_SNOC_SF_MEM_NOC MSM_BUS_SLAVE_LLCC
+			150000 7429000>,
+		<MSM_BUS_MASTER_LLCC MSM_BUS_SLAVE_EBI_CH0 625000 3070000>,
+		<MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_OCIMEM 80000 640000>,
+		<MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_IPA_CFG 80000 80000>,
+		<MSM_BUS_MASTER_IPA_CORE MSM_BUS_SLAVE_IPA_CORE 0 250>,
+
+		/* NOMINAL */
+		<MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_SNOC_GEM_NOC_SF
+			150000 6413000>,
+		<MSM_BUS_MASTER_SNOC_SF_MEM_NOC MSM_BUS_SLAVE_LLCC
+			150000 8797500>,
+		<MSM_BUS_MASTER_LLCC MSM_BUS_SLAVE_EBI_CH0 1250000 6220000>,
+		<MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_OCIMEM 206000 960000>,
+		<MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_IPA_CFG 206000 160000>,
+		<MSM_BUS_MASTER_IPA_CORE MSM_BUS_SLAVE_IPA_CORE 0 500>,
+
+		/* TURBO */
+		<MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_SNOC_GEM_NOC_SF
+			150000 8480000>,
+		<MSM_BUS_MASTER_SNOC_SF_MEM_NOC MSM_BUS_SLAVE_LLCC
+			150000 15640000>,
+		<MSM_BUS_MASTER_LLCC MSM_BUS_SLAVE_EBI_CH0 2000000 7219000>,
+		<MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_OCIMEM 206000 1600000>,
+		<MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_IPA_CFG 206000 300000>,
+		<MSM_BUS_MASTER_IPA_CORE MSM_BUS_SLAVE_IPA_CORE 0 600>;
+
+		qcom,bus-vector-names = "MIN", "SVS2", "SVS", "NOMINAL",
+		"TURBO";
 		qcom,throughput-threshold = <600 2500 5000>;
-		qcom,scaling-exceptions = "USB DPL", "0", "2500",
-			"5000", "ODL", "0", "2500", "5000";
+		qcom,scaling-exceptions = "wdi", "0", "600", "1200",
+			"USB DPL", "0", "2500", "5000", "ODL", "0",
+			"2500", "5000";
 	};
 
 	qcom,ipa_fws {
diff --git a/drivers/clk/qcom/mdss/mdss-dsi-pll-10nm.c b/drivers/clk/qcom/mdss/mdss-dsi-pll-10nm.c
index ea69a14..a220506 100644
--- a/drivers/clk/qcom/mdss/mdss-dsi-pll-10nm.c
+++ b/drivers/clk/qcom/mdss/mdss-dsi-pll-10nm.c
@@ -410,7 +410,7 @@ static void dsi_pll_config_slave(struct mdss_pll_resources *rsc)
 	rsc->slave = NULL;
 
 	if (!orsc) {
-		pr_warn("slave PLL unavilable, assuming standalone config\n");
+		pr_debug("slave PLL unavilable, assuming standalone config\n");
 		return;
 	}
 
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
index 78fd2b6..7bde6c1 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.c
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
@@ -401,7 +401,8 @@ static void dp_display_hdcp_cb_work(struct work_struct *work)
 
 	dp_display_update_hdcp_status(dp, false);
 
-	if (dp->debug->force_encryption && ops && ops->force_encryption)
+	if (status->hdcp_state != HDCP_STATE_AUTHENTICATED &&
+		dp->debug->force_encryption && ops && ops->force_encryption)
 		ops->force_encryption(data, dp->debug->force_encryption);
 
 	switch (status->hdcp_state) {
diff --git a/drivers/gpu/drm/msm/dsi-staging/dsi_display.c b/drivers/gpu/drm/msm/dsi-staging/dsi_display.c
index a4c4e95..c6b2d35 100644
--- a/drivers/gpu/drm/msm/dsi-staging/dsi_display.c
+++ b/drivers/gpu/drm/msm/dsi-staging/dsi_display.c
@@ -3648,7 +3648,7 @@ static int dsi_display_res_init(struct dsi_display *display)
 	display->panel = dsi_panel_get(&display->pdev->dev,
 				display->panel_of,
 				display->parser_node,
-				display->display_type,
+				display->dsi_type,
 				display->cmdline_topology);
 	if (IS_ERR_OR_NULL(display->panel)) {
 		rc = PTR_ERR(display->panel);
@@ -5271,7 +5271,6 @@ int dsi_display_dev_probe(struct platform_device *pdev)
 
 	for (i = 0; i < count; i++) {
 		struct device_node *np;
-		const char *disp_type = NULL;
 
 		np = of_parse_phandle(node, disp_list, i);
 		name = of_get_property(np, "label", NULL);
@@ -5280,16 +5279,6 @@ int dsi_display_dev_probe(struct platform_device *pdev)
 			continue;
 		}
 
-		disp_type = of_get_property(np, "qcom,display-type", NULL);
-		if (!disp_type) {
-			pr_err("display type not defined for %s\n", name);
-			continue;
-		}
-
-		/* primary/secondary display should match with current dsi */
-		if (strcmp(dsi_type, disp_type))
-			continue;
-
 		if (boot_disp->boot_disp_en) {
 			if (!strcmp(boot_disp->name, name)) {
 				disp_node = np;
@@ -5319,6 +5308,7 @@ int dsi_display_dev_probe(struct platform_device *pdev)
 	display->name = name;
 	display->pdev = pdev;
 	display->boot_disp = boot_disp;
+	display->dsi_type = dsi_type;
 
 	dsi_display_parse_cmdline_topology(display, index);
 
@@ -5545,7 +5535,7 @@ static int dsi_display_ext_get_info(struct drm_connector *connector,
 
 	info->is_connected = connector->status != connector_status_disconnected;
 
-	if (!strcmp(display->display_type, "primary"))
+	if (!strcmp(display->dsi_type, "primary"))
 		info->is_primary = true;
 	else
 		info->is_primary = false;
@@ -5901,7 +5891,7 @@ int dsi_display_get_info(struct drm_connector *connector,
 	info->is_connected = true;
 	info->is_primary = false;
 
-	if (!strcmp(display->display_type, "primary"))
+	if (!strcmp(display->dsi_type, "primary"))
 		info->is_primary = true;
 
 	info->width_mm = phy_props.panel_width_mm;
diff --git a/drivers/gpu/drm/msm/dsi-staging/dsi_display.h b/drivers/gpu/drm/msm/dsi-staging/dsi_display.h
index 4cf3ceb..b4a5cf9 100644
--- a/drivers/gpu/drm/msm/dsi-staging/dsi_display.h
+++ b/drivers/gpu/drm/msm/dsi-staging/dsi_display.h
@@ -146,6 +146,7 @@ struct dsi_display_ext_bridge {
  * @ext_conn:         Pointer to external connector attached to DSI connector
  * @name:             Name of the display.
  * @display_type:     Display type as defined in device tree.
+ * @dsi_type:         Display label as defined in device tree.
  * @list:             List pointer.
  * @is_active:        Is display active.
  * @is_cont_splash_enabled:  Is continuous splash enabled
@@ -196,6 +197,7 @@ struct dsi_display {
 
 	const char *name;
 	const char *display_type;
+	const char *dsi_type;
 	struct list_head list;
 	bool is_cont_splash_enabled;
 	bool sw_te_using_wd;
diff --git a/drivers/gpu/drm/msm/sde/sde_connector.c b/drivers/gpu/drm/msm/sde/sde_connector.c
index 18ce981..5dad84b 100644
--- a/drivers/gpu/drm/msm/sde/sde_connector.c
+++ b/drivers/gpu/drm/msm/sde/sde_connector.c
@@ -135,7 +135,7 @@ static int sde_backlight_setup(struct sde_connector *c_conn,
 	if (!c_conn || !dev || !dev->dev) {
 		SDE_ERROR("invalid param\n");
 		return -EINVAL;
-	} else if (c_conn->connector_type != DRM_MODE_CONNECTOR_DSI) {
+	} else if (!c_conn->ops.set_backlight) {
 		return 0;
 	}
 
diff --git a/drivers/gpu/drm/msm/sde/sde_encoder.c b/drivers/gpu/drm/msm/sde/sde_encoder.c
index be06c3c..3ddc4bf 100644
--- a/drivers/gpu/drm/msm/sde/sde_encoder.c
+++ b/drivers/gpu/drm/msm/sde/sde_encoder.c
@@ -5376,7 +5376,7 @@ struct drm_encoder *sde_encoder_init_with_ops(
 	snprintf(name, SDE_NAME_SIZE, "rsc_enc%u", drm_enc->base.id);
 	sde_enc->rsc_client = sde_rsc_client_create(SDE_RSC_INDEX, name,
 		disp_info->is_primary ? SDE_RSC_PRIMARY_DISP_CLIENT :
-		SDE_RSC_EXTERNAL_DISP_CLIENT, intf_index);
+		SDE_RSC_EXTERNAL_DISP_CLIENT, intf_index + 1);
 	if (IS_ERR_OR_NULL(sde_enc->rsc_client)) {
 		SDE_DEBUG("sde rsc client create failed :%ld\n",
 						PTR_ERR(sde_enc->rsc_client));
diff --git a/drivers/gpu/drm/msm/sde_hdcp_1x.c b/drivers/gpu/drm/msm/sde_hdcp_1x.c
index 36484b2..6f3339e 100644
--- a/drivers/gpu/drm/msm/sde_hdcp_1x.c
+++ b/drivers/gpu/drm/msm/sde_hdcp_1x.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2010-2019, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -214,6 +214,7 @@ struct sde_hdcp_1x {
 	bool sink_r0_ready;
 	bool reauth;
 	bool ksv_ready;
+	bool force_encryption;
 	enum sde_hdcp_state hdcp_state;
 	struct HDCP_V2V1_MSG_TOPOLOGY current_tp;
 	struct delayed_work hdcp_auth_work;
@@ -1078,10 +1079,13 @@ static void sde_hdcp_1x_auth_work(struct work_struct *work)
 	}
 
 	/*
-	 * program hw to enable encryption as soon as
-	 * authentication is successful.
+	 * Program h/w to enable encryption as soon as authentication is
+	 * successful. This is applicable for HDMI sinks and HDCP 1.x compliance
+	 * test cases.
 	 */
-	hdcp1_set_enc(hdcp->hdcp1_handle, true);
+	if (hdcp->init_data.client_id == HDCP_CLIENT_HDMI ||
+			hdcp->force_encryption)
+		hdcp1_set_enc(hdcp->hdcp1_handle, true);
 
 	rc = sde_hdcp_1x_authentication_part1(hdcp);
 	if (rc)
@@ -1238,7 +1242,9 @@ static void sde_hdcp_1x_off(void *input)
 		pr_debug("%s: Deleted hdcp auth work\n",
 			SDE_HDCP_STATE_NAME);
 
-	hdcp1_set_enc(hdcp->hdcp1_handle, false);
+	if (hdcp->init_data.client_id == HDCP_CLIENT_HDMI ||
+			hdcp->force_encryption)
+		hdcp1_set_enc(hdcp->hdcp1_handle, false);
 
 	reg = DSS_REG_R(io, reg_set->reset);
 	DSS_REG_W(io, reg_set->reset, reg | reg_set->reset_bit);
@@ -1367,6 +1373,18 @@ static bool sde_hdcp_1x_feature_supported(void *input)
 	return feature_supported;
 }
 
+static void sde_hdcp_1x_force_encryption(void *input, bool enable)
+{
+	struct sde_hdcp_1x *hdcp = (struct sde_hdcp_1x *)input;
+
+	if (!hdcp) {
+		pr_err("invalid input\n");
+		return;
+	}
+	hdcp->force_encryption = enable;
+	pr_info("force_encryption=%d\n", hdcp->force_encryption);
+}
+
 static bool sde_hdcp_1x_sink_support(void *input)
 {
 	return true;
@@ -1490,6 +1508,7 @@ void *sde_hdcp_1x_init(struct sde_hdcp_init_data *init_data)
 		.reauthenticate = sde_hdcp_1x_reauthenticate,
 		.authenticate = sde_hdcp_1x_authenticate,
 		.feature_supported = sde_hdcp_1x_feature_supported,
+		.force_encryption = sde_hdcp_1x_force_encryption,
 		.sink_support = sde_hdcp_1x_sink_support,
 		.off = sde_hdcp_1x_off
 	};
@@ -1534,6 +1553,7 @@ void *sde_hdcp_1x_init(struct sde_hdcp_init_data *init_data)
 	hdcp->hdcp_state = HDCP_STATE_INACTIVE;
 	init_completion(&hdcp->r0_checked);
 	init_completion(&hdcp->sink_r0_available);
+	hdcp->force_encryption = false;
 
 	pr_debug("HDCP module initialized. HDCP_STATE=%s\n",
 		SDE_HDCP_STATE_NAME);
diff --git a/drivers/gpu/drm/msm/sde_rsc.c b/drivers/gpu/drm/msm/sde_rsc.c
index 674fbff..8f725ee 100644
--- a/drivers/gpu/drm/msm/sde_rsc.c
+++ b/drivers/gpu/drm/msm/sde_rsc.c
@@ -1097,7 +1097,9 @@ int sde_rsc_client_trigger_vote(struct sde_rsc_client *caller_client,
 		rpmh_flush(rsc->disp_rsc);
 	}
 
-	if (rsc->hw_ops.bwi_status && rsc->current_state == SDE_RSC_CMD_STATE)
+	if (rsc->hw_ops.bwi_status &&
+		(rsc->current_state == SDE_RSC_CMD_STATE ||
+		rsc->current_state == SDE_RSC_VID_STATE))
 		rsc->hw_ops.bwi_status(rsc, bw_increase);
 	else if (rsc->hw_ops.tcs_use_ok)
 		rsc->hw_ops.tcs_use_ok(rsc);
diff --git a/drivers/gpu/drm/msm/shd/shd_drm.c b/drivers/gpu/drm/msm/shd/shd_drm.c
index 738ba98..58ce011 100644
--- a/drivers/gpu/drm/msm/shd/shd_drm.c
+++ b/drivers/gpu/drm/msm/shd/shd_drm.c
@@ -335,6 +335,7 @@ static void shd_display_disable_base(struct drm_device *dev,
 
 	base->enabled = false;
 	base->connector->state->crtc = NULL;
+	base->connector->state->best_encoder = NULL;
 	drm_connector_put(base->connector);
 }
 
@@ -687,6 +688,9 @@ static int shd_conn_set_info_blob(struct drm_connector *connector,
 	sde_kms_info_add_keyint(info, "max_blendstages",
 				shd_display->stage_range.size);
 
+	sde_kms_info_add_keystr(info, "display type",
+				shd_display->display_type);
+
 	return 0;
 }
 
@@ -1120,6 +1124,11 @@ static int shd_parse_display(struct shd_display *display)
 		display->stage_range.start,
 		display->stage_range.size);
 
+	display->display_type = of_get_property(of_node,
+		"qcom,display-type", NULL);
+	if (!display->display_type)
+		display->display_type = "unknown";
+
 error:
 	return rc;
 }
diff --git a/drivers/gpu/drm/msm/shd/shd_drm.h b/drivers/gpu/drm/msm/shd/shd_drm.h
index 03aa95e..35a9278 100644
--- a/drivers/gpu/drm/msm/shd/shd_drm.h
+++ b/drivers/gpu/drm/msm/shd/shd_drm.h
@@ -53,6 +53,7 @@ struct shd_display_base {
 struct shd_display {
 	struct drm_device *drm_dev;
 	const char *name;
+	const char *display_type;
 
 	struct shd_display_base *base;
 	struct drm_bridge *bridge;
diff --git a/drivers/gpu/drm/msm/shd/shd_hw.c b/drivers/gpu/drm/msm/shd/shd_hw.c
index 6d11f25..1f6bd58 100644
--- a/drivers/gpu/drm/msm/shd/shd_hw.c
+++ b/drivers/gpu/drm/msm/shd/shd_hw.c
@@ -103,7 +103,6 @@ static void _sde_shd_hw_ctl_clear_blendstages_in_range(
 	u32 mixermask[4] = {0, 0, 0, 0};
 	u32 start = hw_ctl->range.start + SDE_STAGE_0;
 	u32 end = start + hw_ctl->range.size;
-	int pipes_per_stage;
 	int i, j;
 	u32 value, mask;
 	const struct ctl_sspp_stage_reg_map *sspp_cfg;
@@ -117,14 +116,8 @@ static void _sde_shd_hw_ctl_clear_blendstages_in_range(
 		mixercfg[1] | mixercfg[2] | mixercfg[3]))
 		goto end;
 
-	if (test_bit(SDE_MIXER_SOURCESPLIT,
-		&ctx->mixer_hw_caps->features))
-		pipes_per_stage = PIPES_PER_STAGE;
-	else
-		pipes_per_stage = 1;
-
 	for (i = 1; i < SSPP_MAX; i++) {
-		for (j = 0 ; j < pipes_per_stage; j++) {
+		for (j = 0 ; j < CTL_SSPP_MAX_RECTS; j++) {
 			sspp_cfg = &sspp_reg_cfg_tbl[i][j];
 			if (!sspp_cfg->bits)
 				continue;
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index 33d6011..787afba 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -6,7 +6,6 @@
  */
 
 #include "dm-core.h"
-#include "dm-ioctrl.h"
 
 #include <linux/module.h>
 #include <linux/vmalloc.h>
@@ -2057,37 +2056,3 @@ int dm_copy_name_and_uuid(struct mapped_device *md, char *name, char *uuid)
 
 	return r;
 }
-
-int __init dm_ioctrl(uint cmd, struct dm_ioctl *param)
-{
-	int r = 0;
-	int ioctl_flags;
-	ioctl_fn fn = NULL;
-	size_t input_param_size;
-
-	/*
-	 * Nothing more to do for the version command.
-	 */
-	if (cmd == DM_VERSION_CMD)
-		return 0;
-
-	DMDEBUG("dm_ctl_ioctl: command 0x%x", cmd);
-
-	fn = lookup_ioctl(cmd, &ioctl_flags);
-	if (!fn) {
-		DMWARN("dm_ctl_ioctl: unknown command 0x%x", cmd);
-		return -ENOTTY;
-	}
-
-	input_param_size = param->data_size;
-	param->data_size = sizeof(*param);
-
-	r = fn(NULL, param, input_param_size);
-
-	if (unlikely(param->flags & DM_BUFFER_FULL_FLAG) &&
-		unlikely(ioctl_flags & IOCTL_FLAGS_NO_PARAMS))
-		DMERR("ioctl %d  but has IOCTL_FLAGS_NO_PARAMS set", cmd);
-
-	return r;
-}
-EXPORT_SYMBOL(dm_ioctrl);
diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c
index 8f3ccf8f..cc1f2ce 100644
--- a/drivers/misc/qseecom.c
+++ b/drivers/misc/qseecom.c
@@ -7641,6 +7641,13 @@ static long qseecom_ioctl(struct file *file,
 		break;
 	}
 	case QSEECOM_IOCTL_APP_LOADED_QUERY_REQ: {
+		if ((data->type != QSEECOM_GENERIC) &&
+			(data->type != QSEECOM_CLIENT_APP)) {
+			pr_err("app loaded query req: invalid handle (%d)\n",
+								data->type);
+			ret = -EINVAL;
+			break;
+		}
 		data->type = QSEECOM_CLIENT_APP;
 		mutex_lock(&app_access_lock);
 		atomic_inc(&data->ioctl_count);
diff --git a/drivers/video/fbdev/msm/mdss_qpic.c b/drivers/video/fbdev/msm/mdss_qpic.c
index aa8d783..c15f017 100644
--- a/drivers/video/fbdev/msm/mdss_qpic.c
+++ b/drivers/video/fbdev/msm/mdss_qpic.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2016, 2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2016, 2018-2019, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -28,7 +28,6 @@
 #include <linux/uaccess.h>
 #include <linux/bootmem.h>
 #include <linux/dma-mapping.h>
-#include <linux/clk/msm-clk.h>
 
 #include <linux/msm-sps.h>
 #include <linux/msm-bus.h>
@@ -305,7 +304,7 @@ int qpic_init_sps(struct platform_device *pdev,
 	sps_config->source = SPS_DEV_HANDLE_MEM;
 	sps_config->destination = bam_handle;
 	sps_config->mode = SPS_MODE_DEST;
-	sps_config->dest_pipe_index = 6;
+	sps_config->dest_pipe_index = 8;
 
 	sps_config->options = SPS_O_AUTO_ENABLE | SPS_O_EOT;
 	sps_config->lock_group = 0;
diff --git a/drivers/video/fbdev/msm/mdss_qpic_panel.c b/drivers/video/fbdev/msm/mdss_qpic_panel.c
index 3637716..98bbb37 100644
--- a/drivers/video/fbdev/msm/mdss_qpic_panel.c
+++ b/drivers/video/fbdev/msm/mdss_qpic_panel.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2015, 2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014-2015, 2018-2019, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -15,7 +15,6 @@
 #include <linux/of.h>
 #include <linux/of_gpio.h>
 #include <linux/gpio.h>
-#include <linux/qpnp/pin.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/leds.h>
diff --git a/drivers/video/fbdev/msm/qpic_panel_ili_qvga.c b/drivers/video/fbdev/msm/qpic_panel_ili_qvga.c
index d644f4f..98d79cb 100644
--- a/drivers/video/fbdev/msm/qpic_panel_ili_qvga.c
+++ b/drivers/video/fbdev/msm/qpic_panel_ili_qvga.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2015, 2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2015, 2018-2019, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -217,6 +217,11 @@ static int mdss_qpic_pinctrl_set_state(struct qpic_panel_io_desc *qpic_panel_io,
 	if (IS_ERR_OR_NULL(qpic_panel_io->pin_res.pinctrl))
 		return PTR_ERR(qpic_panel_io->pin_res.pinctrl);
 
+	if (active)
+		gpio_direction_output(qpic_panel_io->bl_gpio, 1);
+	else
+		gpio_direction_output(qpic_panel_io->bl_gpio, 0);
+
 	pin_state = active ? qpic_panel_io->pin_res.gpio_state_active
 		: qpic_panel_io->pin_res.gpio_state_suspend;
 	if (!IS_ERR_OR_NULL(pin_state)) {
diff --git a/init/Makefile b/init/Makefile
index 00b39d4..0320e1a 100644
--- a/init/Makefile
+++ b/init/Makefile
@@ -19,7 +19,6 @@
 mounts-$(CONFIG_BLK_DEV_INITRD)	+= do_mounts_initrd.o
 mounts-$(CONFIG_BLK_DEV_MD)	+= do_mounts_md.o
 mounts-$(CONFIG_BLK_DEV_DM)	+= do_mounts_dm.o
-mounts-$(CONFIG_BLK_DEV_DM)	+= do_mounts_verity.o
 
 # dependencies on generated files need to be listed explicitly
 $(obj)/version.o: include/generated/compile.h
diff --git a/init/do_mounts.c b/init/do_mounts.c
index f44460b..ca5de99 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -576,7 +576,6 @@ void __init prepare_namespace(void)
 
 	md_run_setup();
 	dm_run_setup();
-	dm_verity_setup();
 
 	if (saved_root_name[0]) {
 		root_device_name = saved_root_name;
diff --git a/init/do_mounts.h b/init/do_mounts.h
index 9dfd413..cd20112 100644
--- a/init/do_mounts.h
+++ b/init/do_mounts.h
@@ -8,8 +8,6 @@
 #include <linux/mount.h>
 #include <linux/major.h>
 #include <linux/root_dev.h>
-#include "uapi/linux/dm-ioctl.h"
-#include <linux/device-mapper.h>
 
 void  change_floppy(char *fmt, ...);
 void  mount_block_root(char *name, int flags);
@@ -73,15 +71,3 @@ void dm_run_setup(void);
 static inline void dm_run_setup(void) {}
 
 #endif
-
-#ifdef CONFIG_BLK_DEV_DM
-
-void dm_verity_setup(void);
-extern int dm_ioctrl(uint cmd, struct dm_ioctl *param);
-extern void dm_table_destroy(struct dm_table *t);
-
-#else
-
-static inline void dm_verity_setup(void) {}
-
-#endif
diff --git a/init/do_mounts_verity.c b/init/do_mounts_verity.c
deleted file mode 100644
index aa5893d..0000000
--- a/init/do_mounts_verity.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#include <linux/device-mapper.h>
-#include <linux/fs.h>
-#include <linux/string.h>
-#include "uapi/linux/dm-ioctl.h"
-#include <linux/of_device.h>
-#include <linux/of_platform.h>
-#include "do_mounts.h"
-
-#define DM_BUF_SIZE 4096
-
-#define DM_MSG_PREFIX "verity"
-
-static void __init init_param(struct dm_ioctl *param, const char *name)
-{
-	memset(param, 0, DM_BUF_SIZE);
-	param->data_size = DM_BUF_SIZE;
-	param->data_start = sizeof(struct dm_ioctl);
-	param->version[0] = 4;
-	param->version[1] = 0;
-	param->version[2] = 0;
-	param->flags = DM_READONLY_FLAG;
-	strlcpy(param->name, name, sizeof(param->name));
-}
-
-static void __init dm_setup_drive(void)
-{
-	struct device_node *dt_node;
-	const char *name;
-	const char *version;
-	const char *data_device;
-	const char *hash_device;
-	const char *data_block_size;
-	const char *hash_block_size;
-	const char *number_of_data_blocks;
-	const char *hash_start_block;
-	const char *algorithm;
-	const char *digest;
-	const char *salt;
-	const char *opt;
-	int len;
-	unsigned long long data_blocks;
-	char dummy;
-	char *verity_params;
-	size_t bufsize;
-	char *buffer = kzalloc(DM_BUF_SIZE, GFP_KERNEL);
-	struct dm_ioctl *param = (struct dm_ioctl *) buffer;
-	size_t dm_sz = sizeof(struct dm_ioctl);
-	struct dm_target_spec *tgt = (struct dm_target_spec *) &buffer[dm_sz];
-
-	if (!buffer)
-		goto fail;
-	dt_node = of_find_node_by_path("/soc/dm_verity");
-	if (!dt_node) {
-		DMERR("(E) Failed to find device-tree node: /soc/dm_verity");
-		goto fail;
-	}
-
-	name = of_get_property(dt_node, "dmname", &len);
-	if (name == NULL)
-		goto fail;
-	DMDEBUG("(I) name=%s", name);
-
-	if (strcmp(name, "disabled") == 0) {
-		pr_info("dm: dm-verity is disabled.");
-		kfree(buffer);
-		return;
-	}
-
-	version = of_get_property(dt_node, "version", &len);
-	if (version == NULL)
-		goto fail;
-	DMDEBUG("(I) version=%s", version);
-
-	data_device = of_get_property(dt_node, "data_device", &len);
-	if (data_device == NULL)
-		goto fail;
-	DMDEBUG("(I) data_device=%s", data_device);
-
-	hash_device = of_get_property(dt_node, "hash_device", &len);
-	if (hash_device == NULL)
-		goto fail;
-	DMDEBUG("(I) hash_device=%s", hash_device);
-
-	data_block_size = of_get_property(dt_node, "data_block_size", &len);
-	if (data_block_size == NULL)
-		goto fail;
-	DMDEBUG("(I) data_block_size=%s", data_block_size);
-
-	hash_block_size = of_get_property(dt_node, "hash_block_size", &len);
-	if (hash_block_size == NULL)
-		goto fail;
-	DMDEBUG("(I) hash_block_size=%s", hash_block_size);
-
-	number_of_data_blocks = of_get_property(dt_node,
-						"number_of_data_blocks",
-						&len);
-	if (number_of_data_blocks == NULL)
-		goto fail;
-	DMDEBUG("(I) number_of_data_blocks=%s", number_of_data_blocks);
-
-	hash_start_block = of_get_property(dt_node, "hash_start_block", &len);
-	if (hash_start_block == NULL)
-		goto fail;
-	DMDEBUG("(I) hash_start_block=%s", hash_start_block);
-
-	algorithm = of_get_property(dt_node, "algorithm", &len);
-	if (algorithm == NULL)
-		goto fail;
-	DMDEBUG("(I) algorithm=%s", algorithm);
-
-	digest = of_get_property(dt_node, "digest", &len);
-	if (digest == NULL)
-		goto fail;
-	DMDEBUG("(I) digest=%s", digest);
-
-	salt = of_get_property(dt_node, "salt", &len);
-	if (salt == NULL)
-		goto fail;
-	DMDEBUG("(I) salt=%s", salt);
-
-	opt = of_get_property(dt_node, "opt", &len);
-	if (opt == NULL)
-		goto fail;
-	DMDEBUG("(I) opt=%s", opt);
-
-	init_param(param, name);
-	if (dm_ioctrl(DM_DEV_CREATE_CMD, param)) {
-		DMERR("(E) failed to create the device");
-		goto fail;
-	}
-
-	init_param(param, name);
-	param->target_count = 1;
-	/* set tgt arguments */
-	tgt->status = 0;
-	tgt->sector_start = 0;
-	if (sscanf(number_of_data_blocks, "%llu%c", &data_blocks, &dummy) != 1)
-		goto fail;
-
-	tgt->length = data_blocks*4096/512; /* size in sector of data dev */
-	strlcpy(tgt->target_type, "verity", sizeof(tgt->target_type));
-	/* build the verity params here */
-	verity_params = buffer + dm_sz + sizeof(struct dm_target_spec);
-	bufsize = DM_BUF_SIZE - (verity_params - buffer);
-
-	verity_params += snprintf(verity_params, bufsize,
-				  "%s %s %s %s %s %s %s %s %s %s 1 %s",
-				  version,
-				  data_device, hash_device,
-				  data_block_size, hash_block_size,
-				  number_of_data_blocks, hash_start_block,
-				  algorithm, digest, salt, opt);
-
-	tgt->next = verity_params - buffer;
-	if (dm_ioctrl(DM_TABLE_LOAD_CMD, param)) {
-		DMERR("(E) failed to load the device");
-		goto fail;
-	}
-
-	init_param(param, name);
-	if (dm_ioctrl(DM_DEV_SUSPEND_CMD, param)) {
-		DMERR("(E) failed to suspend the device");
-		goto fail;
-	}
-
-	pr_info("dm: dm-0 (%s) is ready", data_device);
-	kfree(buffer);
-	return;
-
-fail:
-	pr_info("dm: starting dm-0 failed");
-	kfree(buffer);
-	return;
-
-}
-
-void __init dm_verity_setup(void)
-{
-	pr_info("dm: attempting early device configuration.");
-	dm_setup_drive();
-}
diff --git a/sound/soc/Kconfig b/sound/soc/Kconfig
index 8c2096f..42d251e 100644
--- a/sound/soc/Kconfig
+++ b/sound/soc/Kconfig
@@ -7,6 +7,7 @@
 	select SND_PCM
 	select AC97_BUS if SND_SOC_AC97_BUS
 	select SND_JACK
+	select SND_TIMER
 	select SND_HWDEP
 	select SND_SOC_COMPRESS
 	select REGMAP_I2C if I2C