aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-09-24 01:33:43 -0700
committerLinux Build Service Account <lnxbuild@localhost>2018-09-24 01:33:43 -0700
commitfb86605f6ff40447fb057ed0ed6142047eba27b2 (patch)
treefacccc248d0943eb8c7041e105ecd02e41a4ad71
parent9f90e37983c3de5c08ce900be3d576459743315e (diff)
parent01d21eddacfd957e34297f6ea95d0bf7c8a5dcaf (diff)
Merge 01d21eddacfd957e34297f6ea95d0bf7c8a5dcaf on remote branchLA.UM.7.3.r1-05500-sdm845.0
Change-Id: Id65e9e654ef642ce2e99eca25224acc6a747cceb
-rw-r--r--Documentation/devicetree/bindings/arm/msm/msm.txt3
-rw-r--r--Documentation/driver-model/devres.txt1
-rw-r--r--arch/arm/configs/msm8909-perf_defconfig6
-rw-r--r--arch/arm/configs/msm8909_defconfig5
-rw-r--r--arch/arm/configs/msm8909w-perf_defconfig4
-rw-r--r--arch/arm/configs/msm8909w_defconfig7
-rw-r--r--arch/arm/configs/msm8937-perf_defconfig1
-rw-r--r--arch/arm/configs/msm8953-perf_defconfig2
-rw-r--r--arch/arm/configs/msm8953_defconfig2
-rw-r--r--arch/arm/mach-qcom/Kconfig4
-rw-r--r--arch/arm64/boot/dts/qcom/8909w-pm660.dtsi57
-rw-r--r--arch/arm64/boot/dts/qcom/Makefile7
-rw-r--r--arch/arm64/boot/dts/qcom/apq8009-dragon.dts4
-rw-r--r--arch/arm64/boot/dts/qcom/apq8009-robot-pronto-refboard.dts176
-rw-r--r--arch/arm64/boot/dts/qcom/apq8009-robot-rome-refboard.dts174
-rw-r--r--arch/arm64/boot/dts/qcom/msm8909-audio-bg_codec.dtsi4
-rw-r--r--arch/arm64/boot/dts/qcom/msm8909-mtp.dtsi4
-rw-r--r--arch/arm64/boot/dts/qcom/msm8909.dtsi41
-rw-r--r--arch/arm64/boot/dts/qcom/msm8917-cdp.dtsi2
-rw-r--r--arch/arm64/boot/dts/qcom/msm8917-mtp.dtsi2
-rw-r--r--arch/arm64/boot/dts/qcom/msm8937-coresight.dtsi2
-rw-r--r--arch/arm64/boot/dts/qcom/msm8937.dtsi1
-rw-r--r--arch/arm64/boot/dts/qcom/msm8953-gpu.dtsi6
-rw-r--r--arch/arm64/boot/dts/qcom/pmi632.dtsi7
-rw-r--r--arch/arm64/boot/dts/qcom/sdm429.dtsi28
-rw-r--r--arch/arm64/boot/dts/qcom/sdm439.dtsi4
-rw-r--r--arch/arm64/boot/dts/qcom/sxr1130-qrd-overlay.dts32
-rw-r--r--arch/arm64/boot/dts/qcom/sxr1130-qrd.dts26
-rw-r--r--arch/arm64/boot/dts/qcom/sxr1130-qrd.dtsi13
-rw-r--r--arch/arm64/configs/msm8937-perf_defconfig1
-rw-r--r--arch/arm64/configs/msm8937_defconfig1
-rw-r--r--arch/arm64/configs/msm8953-perf_defconfig1
-rw-r--r--arch/arm64/configs/msm8953_defconfig1
-rw-r--r--drivers/crypto/msm/ice.c30
-rw-r--r--drivers/gpu/msm/adreno-gpulist.h4
-rw-r--r--drivers/gpu/msm/adreno_a6xx_preempt.c49
-rw-r--r--drivers/gpu/msm/kgsl.c39
-rw-r--r--drivers/hwtracing/coresight/coresight-etm4x-sysfs.c20
-rw-r--r--drivers/media/platform/msm/vidc/msm_vidc.c2
-rw-r--r--drivers/media/platform/msm/vidc/msm_vidc_clocks.c6
-rw-r--r--drivers/media/platform/msm/vidc/msm_vidc_common.c6
-rw-r--r--drivers/media/platform/msm/vidc_3x/msm_vdec.c5
-rw-r--r--drivers/net/wireless/cnss_prealloc/cnss_prealloc.c2
-rw-r--r--drivers/power/reset/msm-poweroff.c15
-rw-r--r--drivers/power/supply/qcom/qpnp-linear-charger.c13
-rw-r--r--drivers/regulator/qpnp-lcdb-regulator.c3
-rw-r--r--drivers/soc/qcom/bg_rsb.c43
-rw-r--r--drivers/soc/qcom/bgcom_spi.c6
-rw-r--r--drivers/soc/qcom/glink_bgcom_xprt.c103
-rw-r--r--drivers/soc/qcom/secure_buffer.c5
-rw-r--r--drivers/usb/dwc3/dwc3-msm.c4
-rw-r--r--drivers/usb/gadget/function/f_qc_rndis.c23
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_ctl.c3
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c4
-rw-r--r--include/crypto/ice.h7
-rw-r--r--include/linux/irq_sim.h44
-rw-r--r--include/linux/pfk.h6
-rw-r--r--include/uapi/linux/msm_kgsl.h2
-rw-r--r--kernel/cpu.c3
-rw-r--r--kernel/irq/Kconfig5
-rw-r--r--kernel/irq/Makefile1
-rw-r--r--kernel/irq/irq_sim.c167
-rw-r--r--kernel/trace/trace.c2
-rw-r--r--security/pfe/pfk.c4
-rw-r--r--security/pfe/pfk_ice.c103
-rw-r--r--security/pfe/pfk_ice.h3
-rw-r--r--security/pfe/pfk_kc.c8
-rw-r--r--security/pfe/pfk_kc.h2
-rw-r--r--sound/soc/soc-ops.c4
69 files changed, 1069 insertions, 306 deletions
diff --git a/Documentation/devicetree/bindings/arm/msm/msm.txt b/Documentation/devicetree/bindings/arm/msm/msm.txt
index 74e90e64ee9d..f7df78dc7cde 100644
--- a/Documentation/devicetree/bindings/arm/msm/msm.txt
+++ b/Documentation/devicetree/bindings/arm/msm/msm.txt
@@ -104,6 +104,9 @@ SoCs:
- SXR1130
compatible = "qcom,sxr1130"
+- QRD1130
+ compatible = "qcom,sxr1130-qrd"
+
- MSM8952
compatible = "qcom,msm8952"
diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt
index 167070895498..ddcb90cee84f 100644
--- a/Documentation/driver-model/devres.txt
+++ b/Documentation/driver-model/devres.txt
@@ -306,6 +306,7 @@ IRQ
devm_request_any_context_irq()
devm_request_irq()
devm_request_threaded_irq()
+ devm_irq_sim_init()
LED
devm_led_classdev_register()
diff --git a/arch/arm/configs/msm8909-perf_defconfig b/arch/arm/configs/msm8909-perf_defconfig
index 442bc064ed50..4ee1f0ba991b 100644
--- a/arch/arm/configs/msm8909-perf_defconfig
+++ b/arch/arm/configs/msm8909-perf_defconfig
@@ -33,6 +33,7 @@ CONFIG_KALLSYMS_ALL=y
CONFIG_BPF_SYSCALL=y
# CONFIG_MEMBARRIER is not set
CONFIG_EMBEDDED=y
+# CONFIG_SLUB_DEBUG is not set
# CONFIG_COMPAT_BRK is not set
CONFIG_PROFILING=y
CONFIG_OPROFILE=m
@@ -150,8 +151,6 @@ CONFIG_NETFILTER_XT_MATCH_STRING=y
CONFIG_NETFILTER_XT_MATCH_TIME=y
CONFIG_NETFILTER_XT_MATCH_U32=y
CONFIG_NF_CONNTRACK_IPV4=y
-CONFIG_NF_DUP_IPV4=y
-CONFIG_NF_LOG_IPV4=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_AH=y
CONFIG_IP_NF_MATCH_ECN=y
@@ -170,8 +169,6 @@ CONFIG_IP_NF_ARPTABLES=y
CONFIG_IP_NF_ARPFILTER=y
CONFIG_IP_NF_ARP_MANGLE=y
CONFIG_NF_CONNTRACK_IPV6=y
-CONFIG_NF_DUP_IPV6=y
-CONFIG_NF_LOG_IPV6=y
CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_MATCH_RPFILTER=y
CONFIG_IP6_NF_FILTER=y
@@ -252,7 +249,6 @@ CONFIG_CNSS=y
CONFIG_CNSS_SDIO=y
CONFIG_CLD_HL_SDIO_CORE=y
CONFIG_INPUT_EVDEV=y
-CONFIG_INPUT_EVBUG=m
CONFIG_KEYBOARD_GPIO=y
CONFIG_INPUT_JOYSTICK=y
CONFIG_INPUT_TOUCHSCREEN=y
diff --git a/arch/arm/configs/msm8909_defconfig b/arch/arm/configs/msm8909_defconfig
index 787b38e0c357..428cd92dba78 100644
--- a/arch/arm/configs/msm8909_defconfig
+++ b/arch/arm/configs/msm8909_defconfig
@@ -36,6 +36,7 @@ CONFIG_PROFILING=y
CONFIG_OPROFILE=m
CONFIG_KPROBES=y
CONFIG_CC_STACKPROTECTOR_REGULAR=y
+CONFIG_ARCH_MMAP_RND_BITS=16
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
@@ -56,6 +57,7 @@ CONFIG_CMA=y
CONFIG_CMA_DEBUGFS=y
CONFIG_ZSMALLOC=y
CONFIG_BALANCE_ANON_FILE_RECLAIM=y
+CONFIG_PROCESS_RECLAIM=y
CONFIG_SECCOMP=y
CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE=y
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
@@ -573,13 +575,12 @@ CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SMACK=y
CONFIG_SECURITY_APPARMOR=y
CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_CRYPTO_CTR=y
-CONFIG_CRYPTO_XTS=y
CONFIG_CRYPTO_XCBC=y
CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_MD4=y
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRYPTO_DEV_QCE=y
CONFIG_CRYPTO_DEV_QCOM_MSM_QCE=y
CONFIG_CRYPTO_DEV_QCRYPTO=y
CONFIG_CRYPTO_DEV_QCEDEV=y
diff --git a/arch/arm/configs/msm8909w-perf_defconfig b/arch/arm/configs/msm8909w-perf_defconfig
index b17a802dff52..60efbebc52aa 100644
--- a/arch/arm/configs/msm8909w-perf_defconfig
+++ b/arch/arm/configs/msm8909w-perf_defconfig
@@ -80,6 +80,7 @@ CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
+CONFIG_NET_IPVTI=y
CONFIG_INET_AH=y
CONFIG_INET_ESP=y
CONFIG_INET_IPCOMP=y
@@ -91,6 +92,7 @@ CONFIG_INET6_AH=y
CONFIG_INET6_ESP=y
CONFIG_INET6_IPCOMP=y
CONFIG_IPV6_MIP6=y
+CONFIG_IPV6_VTI=y
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
CONFIG_NETFILTER=y
@@ -469,6 +471,7 @@ CONFIG_NLS_ISO8859_1=y
CONFIG_PRINTK_TIME=y
CONFIG_DEBUG_INFO=y
CONFIG_FRAME_WARN=2048
+CONFIG_MAGIC_SYSRQ=y
CONFIG_PAGE_EXTENSION=y
CONFIG_PANIC_ON_RECURSIVE_FAULT=y
CONFIG_WQ_WATCHDOG=y
@@ -487,6 +490,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=4096
CONFIG_HARDENED_USERCOPY=y
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SMACK=y
+CONFIG_CRYPTO_GCM=y
CONFIG_CRYPTO_XCBC=y
CONFIG_CRYPTO_MD4=y
CONFIG_CRYPTO_TWOFISH=y
diff --git a/arch/arm/configs/msm8909w_defconfig b/arch/arm/configs/msm8909w_defconfig
index 04c8ff1979f4..225e18e31172 100644
--- a/arch/arm/configs/msm8909w_defconfig
+++ b/arch/arm/configs/msm8909w_defconfig
@@ -81,6 +81,7 @@ CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
+CONFIG_NET_IPVTI=y
CONFIG_INET_AH=y
CONFIG_INET_ESP=y
CONFIG_INET_IPCOMP=y
@@ -92,6 +93,7 @@ CONFIG_INET6_AH=y
CONFIG_INET6_ESP=y
CONFIG_INET6_IPCOMP=y
CONFIG_IPV6_MIP6=y
+CONFIG_IPV6_VTI=y
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
CONFIG_NETFILTER=y
@@ -345,6 +347,8 @@ CONFIG_USB_CONFIGFS_NCM=y
CONFIG_USB_CONFIGFS_RMNET_BAM=y
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_CONFIGFS_F_MTP=y
+CONFIG_USB_CONFIGFS_F_PTP=y
CONFIG_USB_CONFIGFS_F_ACC=y
CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y
CONFIG_USB_CONFIGFS_UEVENT=y
@@ -464,6 +468,7 @@ CONFIG_DEBUG_INFO=y
CONFIG_FRAME_WARN=2048
CONFIG_PAGE_OWNER=y
CONFIG_PAGE_OWNER_ENABLE_DEFAULT=y
+CONFIG_MAGIC_SYSRQ=y
CONFIG_SLUB_DEBUG_PANIC_ON=y
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_DEBUG_MEMORY_INIT=y
@@ -514,7 +519,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=4096
CONFIG_HARDENED_USERCOPY=y
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SMACK=y
-CONFIG_CRYPTO_CTR=y
+CONFIG_CRYPTO_GCM=y
CONFIG_CRYPTO_XTS=y
CONFIG_CRYPTO_XCBC=y
CONFIG_CRYPTO_MD4=y
diff --git a/arch/arm/configs/msm8937-perf_defconfig b/arch/arm/configs/msm8937-perf_defconfig
index 26d0d06a3ffb..2f2ab4f2fc9c 100644
--- a/arch/arm/configs/msm8937-perf_defconfig
+++ b/arch/arm/configs/msm8937-perf_defconfig
@@ -623,6 +623,7 @@ CONFIG_SCHED_STACK_END_CHECK=y
# CONFIG_DEBUG_PREEMPT is not set
CONFIG_IPC_LOGGING=y
CONFIG_CPU_FREQ_SWITCH_PROFILER=y
+CONFIG_DEBUG_SET_MODULE_RONX=y
CONFIG_CORESIGHT=y
CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
CONFIG_CORESIGHT_REMOTE_ETM=y
diff --git a/arch/arm/configs/msm8953-perf_defconfig b/arch/arm/configs/msm8953-perf_defconfig
index 344ab3d60f51..2fbf8edfacb7 100644
--- a/arch/arm/configs/msm8953-perf_defconfig
+++ b/arch/arm/configs/msm8953-perf_defconfig
@@ -615,6 +615,7 @@ CONFIG_EXT4_FS_ENCRYPTION=y
CONFIG_EXT4_FS_ICE_ENCRYPTION=y
CONFIG_F2FS_FS=y
CONFIG_F2FS_FS_SECURITY=y
+CONFIG_F2FS_FS_ENCRYPTION=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_QFMT_V2=y
@@ -636,6 +637,7 @@ CONFIG_SCHED_STACK_END_CHECK=y
# CONFIG_DEBUG_PREEMPT is not set
CONFIG_IPC_LOGGING=y
CONFIG_CPU_FREQ_SWITCH_PROFILER=y
+CONFIG_DEBUG_SET_MODULE_RONX=y
CONFIG_CORESIGHT=y
CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
CONFIG_CORESIGHT_REMOTE_ETM=y
diff --git a/arch/arm/configs/msm8953_defconfig b/arch/arm/configs/msm8953_defconfig
index ff0a8a21a8cc..528cb27539b5 100644
--- a/arch/arm/configs/msm8953_defconfig
+++ b/arch/arm/configs/msm8953_defconfig
@@ -616,6 +616,7 @@ CONFIG_DEVFREQ_SIMPLE_DEV=y
CONFIG_QCOM_DEVFREQ_DEVBW=y
CONFIG_SPDM_SCM=y
CONFIG_DEVFREQ_SPDM=y
+CONFIG_EXTCON_USB_GPIO=y
CONFIG_IIO=y
CONFIG_PWM=y
CONFIG_PWM_QPNP=y
@@ -632,6 +633,7 @@ CONFIG_EXT4_FS_ENCRYPTION=y
CONFIG_EXT4_FS_ICE_ENCRYPTION=y
CONFIG_F2FS_FS=y
CONFIG_F2FS_FS_SECURITY=y
+CONFIG_F2FS_FS_ENCRYPTION=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_QFMT_V2=y
diff --git a/arch/arm/mach-qcom/Kconfig b/arch/arm/mach-qcom/Kconfig
index 7ca91802b274..6b4373368b62 100644
--- a/arch/arm/mach-qcom/Kconfig
+++ b/arch/arm/mach-qcom/Kconfig
@@ -107,8 +107,8 @@ config ARCH_MSM8909
select PM_OPP
select MSM_DEVFREQ_DEVBW
select DEVFREQ_SIMPLE_DEV
- select DEVFREQ_GOV_MSM_BW_HWMON
- select MSM_BIMC_BWMON
+ select DEVFREQ_GOV_QCOM_BW_HWMON
+ select QCOM_BIMC_BWMON
select CLKDEV_LOOKUP
select HAVE_CLK
select HAVE_CLK_PREPARE
diff --git a/arch/arm64/boot/dts/qcom/8909w-pm660.dtsi b/arch/arm64/boot/dts/qcom/8909w-pm660.dtsi
index c8330bd689d6..e4581c5e80d8 100644
--- a/arch/arm64/boot/dts/qcom/8909w-pm660.dtsi
+++ b/arch/arm64/boot/dts/qcom/8909w-pm660.dtsi
@@ -437,24 +437,55 @@
&pm660_1 {
pm660_haptics: qcom,haptics@c000 {
- compatible = "qcom,qpnp-haptics";
+ compatible = "qcom,pm660-haptics";
reg = <0xc000 0x100>;
interrupts = <0x1 0xc0 0x0 IRQ_TYPE_EDGE_BOTH>,
<0x1 0xc0 0x1 IRQ_TYPE_EDGE_BOTH>;
interrupt-names = "hap-sc-irq", "hap-play-irq";
- qcom,pmic-revid = <&pm660_revid>;
- qcom,pmic-misc = <&pm660_misc>;
- qcom,misc-clk-trim-error-reg = <0xf3>;
- qcom,actuator-type = <1>;
- qcom,play-mode = "direct";
+ qcom,actuator-type = "erm";
qcom,vmax-mv = <3200>;
- qcom,ilim-ma = <800>;
- qcom,sc-dbc-cycles = <8>;
- qcom,wave-play-rate-us = <6667>;
- qcom,en-brake;
- qcom,lra-high-z = "opt0";
- qcom,lra-auto-res-mode = "qwd";
- qcom,lra-res-cal-period = <4>;
+ qcom,ilim-ma = <400>;
+ qcom,play-rate-us = <10000>;
+ wf_0 {
+ /* CLICK */
+ qcom,effect-id = <0>;
+ qcom,wf-vmax-mv = <3600>;
+ qcom,wf-pattern = [3e 3e 3e];
+ qcom,wf-brake-pattern = [01 00 00 00];
+ };
+ wf_1 {
+ /* DOUBLE CLICK */
+ qcom,effect-id = <1>;
+ qcom,wf-vmax-mv = <3600>;
+ qcom,wf-pattern = [7e 7e 02 02 02 02 02 02];
+ qcom,wf-repeat-count = <2>;
+ qcom,wf-s-repeat-count = <1>;
+ };
+ wf_2 {
+ /* TICK */
+ qcom,effect-id = <2>;
+ qcom,wf-vmax-mv = <3600>;
+ qcom,wf-pattern = [7e 7e];
+ };
+ wf_3 {
+ /* THUD */
+ qcom,effect-id = <3>;
+ qcom,wf-vmax-mv = <3600>;
+ qcom,wf-pattern = [7e 7e 7e];
+ };
+ wf_4 {
+ /* POP */
+ qcom,effect-id = <4>;
+ qcom,wf-vmax-mv = <3600>;
+ qcom,wf-pattern = [7e 7e];
+ };
+ wf_5 {
+ /* HEAVY CLICK */
+ qcom,effect-id = <5>;
+ qcom,wf-vmax-mv = <3600>;
+ qcom,wf-pattern = [7e 7e 7e];
+ qcom,wf-play-rate-us = <6667>;
+ };
};
};
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index ef0ac4d43f80..8b0013f6c989 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -185,7 +185,8 @@ ifeq ($(CONFIG_BUILD_ARM64_DT_OVERLAY),y)
sxr1130-usbc-external-codec-mtp-overlay.dtbo \
sxr1130-usbc-external-codec-pm660a-mtp-overlay.dtbo \
sxr1130-usbc-mtp-overlay.dtbo \
- sxr1130-usbc-pm660a-mtp-overlay.dtbo
+ sxr1130-usbc-pm660a-mtp-overlay.dtbo \
+ sxr1130-qrd-overlay.dtbo
sdm670-cdp-overlay.dtbo-base := sdm670.dtb
sdm670-mtp-overlay.dtbo-base := sdm670.dtb
@@ -259,6 +260,7 @@ sxr1130-usbc-external-codec-mtp-overlay.dtbo-base := sxr1130.dtb
sxr1130-usbc-external-codec-pm660a-mtp-overlay.dtbo-base := sxr1130.dtb
sxr1130-usbc-mtp-overlay.dtbo-base := sxr1130.dtb
sxr1130-usbc-pm660a-mtp-overlay.dtbo-base := sxr1130.dtb
+sxr1130-qrd-overlay.dtbo-base := sxr1130.dtb
else
dtb-$(CONFIG_ARCH_SDM670) += sdm670-rumi.dtb \
@@ -328,7 +330,8 @@ dtb-$(CONFIG_ARCH_SDM670) += sdm670-rumi.dtb \
sxr1130-usbc-external-codec-mtp.dtb \
sxr1130-usbc-external-codec-pm660a-mtp.dtb \
sxr1130-usbc-mtp.dtb \
- sxr1130-usbc-pm660a-mtp.dtb
+ sxr1130-usbc-pm660a-mtp.dtb \
+ sxr1130-qrd.dtb
endif
ifeq ($(CONFIG_BUILD_ARM64_DT_OVERLAY),y)
diff --git a/arch/arm64/boot/dts/qcom/apq8009-dragon.dts b/arch/arm64/boot/dts/qcom/apq8009-dragon.dts
index 041563b0d08e..3cf3e8df0af7 100644
--- a/arch/arm64/boot/dts/qcom/apq8009-dragon.dts
+++ b/arch/arm64/boot/dts/qcom/apq8009-dragon.dts
@@ -156,8 +156,8 @@
};
&usb_otg {
- interrupts = <0 134 0>,<0 140 0>,<0 136 0>;
- interrupt-names = "core_irq", "async_irq", "phy_irq";
+ interrupts = <0 134 0>,<0 140 0>;
+ interrupt-names = "core_irq", "async_irq";
qcom,hsusb-otg-mode = <3>;
qcom,switch-vbus-w-id;
vbus_otg-supply = <&vph_pwr_vreg>;
diff --git a/arch/arm64/boot/dts/qcom/apq8009-robot-pronto-refboard.dts b/arch/arm64/boot/dts/qcom/apq8009-robot-pronto-refboard.dts
index 2c6daf12f532..4a625f896d00 100644
--- a/arch/arm64/boot/dts/qcom/apq8009-robot-pronto-refboard.dts
+++ b/arch/arm64/boot/dts/qcom/apq8009-robot-pronto-refboard.dts
@@ -15,7 +15,6 @@
#include "msm8909-mtp.dtsi"
#include "8909-pm8916.dtsi"
#include "msm8909-pm8916-mtp.dtsi"
-#include "apq8009-audio-external_codec.dtsi"
#include "apq8009-memory.dtsi"
#include <dt-bindings/pinctrl/qcom,pmic-mpp.h>
#include "msm8909-pm8916-camera.dtsi"
@@ -29,7 +28,46 @@
};
&audio_codec_mtp {
- status = "disabled";
+ qcom,model = "msm8909-pm8916-snd-card";
+ asoc-codec = <&stub_codec>, <&msm_digital_codec>,
+ <&pmic_analog_codec>;
+ asoc-codec-names = "msm-stub-codec.1", "msm-dig-codec",
+ "analog-codec";
+
+ qcom,pri-mi2s-gpios = <&cdc_pri_mi2s_gpios>;
+ asoc-platform = <&pcm0>, <&pcm1>, <&pcm2>, <&voip>, <&voice>,
+ <&loopback>, <&compress>, <&hostless>,
+ <&afe>, <&lsm>, <&routing>, <&lpa>,
+ <&voice_svc>,<&pcm_noirq>;
+
+ asoc-platform-names = "msm-pcm-dsp.0", "msm-pcm-dsp.1",
+ "msm-pcm-dsp.2", "msm-voip-dsp",
+ "msm-pcm-voice", "msm-pcm-loopback",
+ "msm-compress-dsp", "msm-pcm-hostless",
+ "msm-pcm-afe", "msm-lsm-client",
+ "msm-pcm-routing", "msm-pcm-lpa",
+ "msm-voice-svc", "msm-pcm-dsp-noirq";
+
+ asoc-cpu = <&dai_pri_auxpcm>,
+ <&dai_mi2s0>, <&dai_mi2s1>, <&dai_mi2s2>,
+ <&dai_mi2s3>, <&dai_mi2s4>, <&dai_mi2s5>,
+ <&bt_sco_rx>, <&bt_sco_tx>, <&bt_a2dp_rx>,
+ <&int_fm_rx>, <&int_fm_tx>, <&afe_pcm_rx>,
+ <&afe_pcm_tx>, <&afe_proxy_rx>, <&afe_proxy_tx>,
+ <&incall_record_rx>, <&incall_record_tx>,
+ <&incall_music_rx>, <&incall_music_2_rx>;
+
+ asoc-cpu-names = "msm-dai-q6-auxpcm.1",
+ "msm-dai-q6-mi2s.0", "msm-dai-q6-mi2s.1",
+ "msm-dai-q6-mi2s.2", "msm-dai-q6-mi2s.3",
+ "msm-dai-q6-mi2s.4", "msm-dai-q6-mi2s.6",
+ "msm-dai-q6-dev.12288", "msm-dai-q6-dev.12289",
+ "msm-dai-q6-dev.12290", "msm-dai-q6-dev.12292",
+ "msm-dai-q6-dev.12293", "msm-dai-q6-dev.224",
+ "msm-dai-q6-dev.225", "msm-dai-q6-dev.241",
+ "msm-dai-q6-dev.240", "msm-dai-q6-dev.32771",
+ "msm-dai-q6-dev.32772", "msm-dai-q6-dev.32773",
+ "msm-dai-q6-dev.32770";
};
&pm8916_gpios {
@@ -94,40 +132,79 @@
};
};
+&spmi_bus {
+ pm8916@1 {
+ pmic_analog_codec: analog-codec@f000 {
+ status = "okay";
+ compatible = "qcom,pmic-analog-codec";
+ reg = <0xf000 0x200>;
+ #address-cells = <2>;
+ #size-cells = <0>;
+ interrupt-parent = <&spmi_bus>;
+ interrupts = <0x1 0xf0 0x0 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x1 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x2 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x3 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x4 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x5 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x6 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x7 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x0 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x1 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x2 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x3 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x4 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x5 IRQ_TYPE_NONE>;
+ interrupt-names = "spk_cnp_int",
+ "spk_clip_int",
+ "spk_ocp_int",
+ "ins_rem_det1",
+ "but_rel_det",
+ "but_press_det",
+ "ins_rem_det",
+ "mbhc_int",
+ "ear_ocp_int",
+ "hphr_ocp_int",
+ "hphl_ocp_det",
+ "ear_cnp_int",
+ "hphr_cnp_int",
+ "hphl_cnp_int";
+
+ cdc-vdda-cp-supply = <&pm8916_s4>;
+ qcom,cdc-vdda-cp-voltage = <1800000 2100000>;
+ qcom,cdc-vdda-cp-current = <1800000>;
+
+ cdc-vdd-io-supply = <&pm8916_l5>;
+ qcom,cdc-vdd-io-voltage = <1800000 1800000>;
+ qcom,cdc-vdd-io-current = <5000>;
+
+ cdc-vdd-pa-supply = <&pm8916_s4>;
+ qcom,cdc-vdd-pa-voltage = <1800000 2100000>;
+ qcom,cdc-vdd-pa-current = <1800000>;
+
+ cdc-vdd-mic-bias-supply = <&pm8916_l13>;
+ qcom,cdc-vdd-mic-bias-voltage = <3075000 3075000>;
+ qcom,cdc-vdd-mic-bias-current = <5000>;
+
+ qcom,cdc-mclk-clk-rate = <9600000>;
+
+ qcom,cdc-static-supplies = "cdc-vdd-io",
+ "cdc-vdd-pa",
+ "cdc-vdda-cp";
+
+ qcom,cdc-on-demand-supplies = "cdc-vdd-mic-bias";
+
+ msm_digital_codec: msm-dig-codec {
+ compatible = "qcom,msm-digital-codec";
+ reg = <0x0771c000 0x0>;
+ };
+ };
+ };
+};
+
&soc {
ext_codec: sound-9335 {
- qcom,audio-routing =
- "AIF4 VI", "MCLK",
- "RX_BIAS", "MCLK",
- "MADINPUT", "MCLK",
- "AMIC2", "MIC BIAS2",
- "MIC BIAS2", "Headset Mic",
- "DMIC0", "MIC BIAS1",
- "MIC BIAS1", "Digital Mic0",
- "DMIC1", "MIC BIAS1",
- "MIC BIAS1", "Digital Mic1",
- "DMIC2", "MIC BIAS3",
- "MIC BIAS3", "Digital Mic2",
- "DMIC3", "MIC BIAS3",
- "MIC BIAS3", "Digital Mic3",
- "SpkrLeft IN", "SPK1 OUT",
- "SpkrRight IN", "SPK2 OUT";
-
- qcom,msm-gpios =
- "us_eu_gpio";
- qcom,pinctrl-names =
- "all_off",
- "us_eu_gpio_act";
- pinctrl-names =
- "all_off",
- "us_eu_gpio_act";
- pinctrl-0 = <&cross_conn_det_sus>;
- pinctrl-1 = <&cross_conn_det_act>;
- qcom,pri-mi2s-gpios = <&cdc_pri_mi2s_gpios>;
- qcom,quat-mi2s-gpios = <&cdc_quat_mi2s_gpios>;
-
- qcom,wsa-aux-dev-prefix = "SpkrLeft", "SpkrRight",
- "SpkrLeft", "SpkrRight";
+ status = "disabled";
};
i2c@78b9000 {
@@ -211,32 +288,15 @@
i2c@78b8000 {
wcd9xxx_codec@d {
- status = "okay";
- qcom,wcd-rst-gpio-node = <&wcd_rst_gpio>;
+ status = "disabled";
};
};
cdc_pri_mi2s_gpios: msm_cdc_pinctrl_pri {
compatible = "qcom,msm-cdc-pinctrl";
pinctrl-names = "aud_active", "aud_sleep";
- pinctrl-0 = <&pri_mi2s_active &pri_mi2s_ws_active
- &pri_mi2s_dout_active &pri_mi2s_din_active>;
- pinctrl-1 = <&pri_mi2s_sleep &pri_mi2s_ws_sleep
- &pri_mi2s_dout_sleep &pri_mi2s_din_sleep>;
- };
-
- cdc_quat_mi2s_gpios: msm_cdc_pinctrl_quat {
- compatible = "qcom,msm-cdc-pinctrl";
- pinctrl-names = "aud_active", "aud_sleep";
- pinctrl-0 = <&quat_mi2s_active &quat_mi2s_din_active>;
- pinctrl-1 = <&quat_mi2s_sleep &quat_mi2s_din_sleep>;
- };
-
- wcd_rst_gpio: wcd_gpio_ctrl {
- compatible = "qcom,msm-cdc-pinctrl";
- pinctrl-names = "aud_active", "aud_sleep";
- pinctrl-0 = <&cdc_reset_active>;
- pinctrl-1 = <&cdc_reset_sleep>;
+ pinctrl-0 = <&cdc_pdm_lines_act>;
+ pinctrl-1 = <&cdc_pdm_lines_sus>;
};
};
@@ -362,14 +422,6 @@
status = "disabled";
};
-&wcd_rst_gpio {
- status = "okay";
-};
-
-&ext_codec {
- status = "okay";
-};
-
&blsp1_uart2_hs {
status = "disabled";
};
diff --git a/arch/arm64/boot/dts/qcom/apq8009-robot-rome-refboard.dts b/arch/arm64/boot/dts/qcom/apq8009-robot-rome-refboard.dts
index 467744809317..0938d8645cae 100644
--- a/arch/arm64/boot/dts/qcom/apq8009-robot-rome-refboard.dts
+++ b/arch/arm64/boot/dts/qcom/apq8009-robot-rome-refboard.dts
@@ -15,7 +15,6 @@
#include "msm8909-mtp.dtsi"
#include "8909-pm8916.dtsi"
#include "msm8909-pm8916-mtp.dtsi"
-#include "apq8009-audio-external_codec.dtsi"
#include "apq8009-memory.dtsi"
#include <dt-bindings/pinctrl/qcom,pmic-mpp.h>
#include "msm8909-pm8916-camera.dtsi"
@@ -29,7 +28,43 @@
};
&audio_codec_mtp {
- status = "disabled";
+ qcom,model = "msm8909-pm8916-snd-card";
+ asoc-codec = <&stub_codec>, <&msm_digital_codec>,
+ <&pmic_analog_codec>;
+ asoc-codec-names = "msm-stub-codec.1", "msm-dig-codec",
+ "analog-codec";
+
+ qcom,pri-mi2s-gpios = <&cdc_pri_mi2s_gpios>;
+ asoc-platform = <&pcm0>, <&pcm1>, <&pcm2>, <&voip>, <&voice>,
+ <&loopback>, <&compress>, <&hostless>,
+ <&afe>, <&lsm>, <&routing>, <&lpa>,
+ <&voice_svc>,<&pcm_noirq>;
+ asoc-platform-names = "msm-pcm-dsp.0", "msm-pcm-dsp.1",
+ "msm-pcm-dsp.2", "msm-voip-dsp",
+ "msm-pcm-voice", "msm-pcm-loopback",
+ "msm-compress-dsp", "msm-pcm-hostless",
+ "msm-pcm-afe", "msm-lsm-client",
+ "msm-pcm-routing", "msm-pcm-lpa",
+ "msm-voice-svc","msm-pcm-dsp-noirq";
+ asoc-cpu = <&dai_pri_auxpcm>,
+ <&dai_mi2s0>, <&dai_mi2s1>, <&dai_mi2s2>,
+ <&dai_mi2s3>, <&dai_mi2s4>, <&dai_mi2s5>,
+ <&bt_sco_rx>, <&bt_sco_tx>, <&bt_a2dp_rx>,
+ <&int_fm_rx>, <&int_fm_tx>, <&afe_pcm_rx>,
+ <&afe_pcm_tx>, <&afe_proxy_rx>, <&afe_proxy_tx>,
+ <&incall_record_rx>, <&incall_record_tx>,
+ <&incall_music_rx>, <&incall_music_2_rx>;
+ asoc-cpu-names = "msm-dai-q6-auxpcm.1",
+ "msm-dai-q6-mi2s.0", "msm-dai-q6-mi2s.1",
+ "msm-dai-q6-mi2s.2", "msm-dai-q6-mi2s.3",
+ "msm-dai-q6-mi2s.4", "msm-dai-q6-mi2s.6",
+ "msm-dai-q6-dev.12288", "msm-dai-q6-dev.12289",
+ "msm-dai-q6-dev.12290", "msm-dai-q6-dev.12292",
+ "msm-dai-q6-dev.12293", "msm-dai-q6-dev.224",
+ "msm-dai-q6-dev.225", "msm-dai-q6-dev.241",
+ "msm-dai-q6-dev.240", "msm-dai-q6-dev.32771",
+ "msm-dai-q6-dev.32772", "msm-dai-q6-dev.32773",
+ "msm-dai-q6-dev.32770";
};
&pm8916_gpios {
@@ -93,41 +128,79 @@
};
};
};
+&spmi_bus {
+ pm8916@1 {
+ pmic_analog_codec: analog-codec@f000 {
+ status = "okay";
+ compatible = "qcom,pmic-analog-codec";
+ reg = <0xf000 0x200>;
+ #address-cells = <2>;
+ #size-cells = <0>;
+ interrupt-parent = <&spmi_bus>;
+ interrupts = <0x1 0xf0 0x0 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x1 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x2 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x3 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x4 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x5 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x6 IRQ_TYPE_NONE>,
+ <0x1 0xf0 0x7 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x0 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x1 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x2 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x3 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x4 IRQ_TYPE_NONE>,
+ <0x1 0xf1 0x5 IRQ_TYPE_NONE>;
+ interrupt-names = "spk_cnp_int",
+ "spk_clip_int",
+ "spk_ocp_int",
+ "ins_rem_det1",
+ "but_rel_det",
+ "but_press_det",
+ "ins_rem_det",
+ "mbhc_int",
+ "ear_ocp_int",
+ "hphr_ocp_int",
+ "hphl_ocp_det",
+ "ear_cnp_int",
+ "hphr_cnp_int",
+ "hphl_cnp_int";
+
+ cdc-vdda-cp-supply = <&pm8916_s4>;
+ qcom,cdc-vdda-cp-voltage = <1800000 2100000>;
+ qcom,cdc-vdda-cp-current = <1800000>;
+
+ cdc-vdd-io-supply = <&pm8916_l5>;
+ qcom,cdc-vdd-io-voltage = <1800000 1800000>;
+ qcom,cdc-vdd-io-current = <5000>;
+
+ cdc-vdd-pa-supply = <&pm8916_s4>;
+ qcom,cdc-vdd-pa-voltage = <1800000 2100000>;
+ qcom,cdc-vdd-pa-current = <1800000>;
+
+ cdc-vdd-mic-bias-supply = <&pm8916_l13>;
+ qcom,cdc-vdd-mic-bias-voltage = <3075000 3075000>;
+ qcom,cdc-vdd-mic-bias-current = <5000>;
+
+ qcom,cdc-mclk-clk-rate = <9600000>;
+
+ qcom,cdc-static-supplies = "cdc-vdd-io",
+ "cdc-vdd-pa",
+ "cdc-vdda-cp";
+
+ qcom,cdc-on-demand-supplies = "cdc-vdd-mic-bias";
+
+ msm_digital_codec: msm-dig-codec {
+ compatible = "qcom,msm-digital-codec";
+ reg = <0x0771c000 0x0>;
+ };
+ };
+ };
+};
&soc {
ext_codec: sound-9335 {
- qcom,audio-routing =
- "AIF4 VI", "MCLK",
- "RX_BIAS", "MCLK",
- "MADINPUT", "MCLK",
- "AMIC2", "MIC BIAS2",
- "MIC BIAS2", "Headset Mic",
- "DMIC0", "MIC BIAS1",
- "MIC BIAS1", "Digital Mic0",
- "DMIC1", "MIC BIAS1",
- "MIC BIAS1", "Digital Mic1",
- "DMIC2", "MIC BIAS3",
- "MIC BIAS3", "Digital Mic2",
- "DMIC3", "MIC BIAS3",
- "MIC BIAS3", "Digital Mic3",
- "SpkrLeft IN", "SPK1 OUT",
- "SpkrRight IN", "SPK2 OUT";
-
- qcom,msm-gpios =
- "us_eu_gpio";
- qcom,pinctrl-names =
- "all_off",
- "us_eu_gpio_act";
- pinctrl-names =
- "all_off",
- "us_eu_gpio_act";
- pinctrl-0 = <&cross_conn_det_sus>;
- pinctrl-1 = <&cross_conn_det_act>;
- qcom,pri-mi2s-gpios = <&cdc_pri_mi2s_gpios>;
- qcom,quat-mi2s-gpios = <&cdc_quat_mi2s_gpios>;
-
- qcom,wsa-aux-dev-prefix = "SpkrLeft", "SpkrRight",
- "SpkrLeft", "SpkrRight";
+ status = "disabled";
};
i2c@78b9000 {
@@ -210,32 +283,15 @@
i2c@78b8000 {
wcd9xxx_codec@d {
- status = "okay";
- qcom,wcd-rst-gpio-node = <&wcd_rst_gpio>;
+ status = "disabled";
};
};
cdc_pri_mi2s_gpios: msm_cdc_pinctrl_pri {
compatible = "qcom,msm-cdc-pinctrl";
pinctrl-names = "aud_active", "aud_sleep";
- pinctrl-0 = <&pri_mi2s_active &pri_mi2s_ws_active
- &pri_mi2s_dout_active &pri_mi2s_din_active>;
- pinctrl-1 = <&pri_mi2s_sleep &pri_mi2s_ws_sleep
- &pri_mi2s_dout_sleep &pri_mi2s_din_sleep>;
- };
-
- cdc_quat_mi2s_gpios: msm_cdc_pinctrl_quat {
- compatible = "qcom,msm-cdc-pinctrl";
- pinctrl-names = "aud_active", "aud_sleep";
- pinctrl-0 = <&quat_mi2s_active &quat_mi2s_din_active>;
- pinctrl-1 = <&quat_mi2s_sleep &quat_mi2s_din_sleep>;
- };
-
- wcd_rst_gpio: wcd_gpio_ctrl {
- compatible = "qcom,msm-cdc-pinctrl";
- pinctrl-names = "aud_active", "aud_sleep";
- pinctrl-0 = <&cdc_reset_active>;
- pinctrl-1 = <&cdc_reset_sleep>;
+ pinctrl-0 = <&cdc_pdm_lines_act>;
+ pinctrl-1 = <&cdc_pdm_lines_sus>;
};
};
@@ -365,16 +421,8 @@
status = "disabled";
};
-&wcd_rst_gpio {
- status = "okay";
-};
-
-&ext_codec {
- status = "okay";
-};
-
&blsp1_uart2_hs {
- status = "okay";
+ status= "okay";
};
/delete-node/ &cont_splash_mem;
diff --git a/arch/arm64/boot/dts/qcom/msm8909-audio-bg_codec.dtsi b/arch/arm64/boot/dts/qcom/msm8909-audio-bg_codec.dtsi
index fa6498edcd7d..ae3900efd393 100644
--- a/arch/arm64/boot/dts/qcom/msm8909-audio-bg_codec.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8909-audio-bg_codec.dtsi
@@ -50,7 +50,7 @@
"msm-voice-svc";
asoc-cpu = <&dai_pri_auxpcm>,
<&dai_mi2s0>, <&dai_mi2s1>, <&dai_mi2s2>,
- <&dai_mi2s3>, <&dai_mi2s5>, <&dai_mi2s6>,
+ <&dai_mi2s3>, <&dai_mi2s4>, <&dai_mi2s5>,
<&bt_sco_rx>, <&bt_sco_tx>, <&bt_a2dp_rx>,
<&int_fm_rx>, <&int_fm_tx>, <&afe_pcm_rx>,
<&afe_pcm_tx>, <&afe_proxy_rx>, <&afe_proxy_tx>,
@@ -63,7 +63,7 @@
asoc-cpu-names = "msm-dai-q6-auxpcm.1",
"msm-dai-q6-mi2s.0", "msm-dai-q6-mi2s.1",
"msm-dai-q6-mi2s.2", "msm-dai-q6-mi2s.3",
- "msm-dai-q6-mi2s.5", "msm-dai-q6-mi2s.6",
+ "msm-dai-q6-mi2s.4", "msm-dai-q6-mi2s.6",
"msm-dai-q6-dev.12288", "msm-dai-q6-dev.12289",
"msm-dai-q6-dev.12290", "msm-dai-q6-dev.12292",
"msm-dai-q6-dev.12293", "msm-dai-q6-dev.224",
diff --git a/arch/arm64/boot/dts/qcom/msm8909-mtp.dtsi b/arch/arm64/boot/dts/qcom/msm8909-mtp.dtsi
index ee2d0ac9e7a8..484488628871 100644
--- a/arch/arm64/boot/dts/qcom/msm8909-mtp.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8909-mtp.dtsi
@@ -211,7 +211,7 @@
"msm-voice-svc";
asoc-cpu = <&dai_pri_auxpcm>,
<&dai_mi2s0>, <&dai_mi2s1>, <&dai_mi2s2>,
- <&dai_mi2s3>, <&dai_mi2s5>, <&dai_mi2s6>,
+ <&dai_mi2s3>, <&dai_mi2s4>, <&dai_mi2s5>,
<&bt_sco_rx>, <&bt_sco_tx>, <&bt_a2dp_rx>,
<&int_fm_rx>, <&int_fm_tx>, <&afe_pcm_rx>,
<&afe_pcm_tx>, <&afe_proxy_rx>, <&afe_proxy_tx>,
@@ -220,7 +220,7 @@
asoc-cpu-names = "msm-dai-q6-auxpcm.1",
"msm-dai-q6-mi2s.0", "msm-dai-q6-mi2s.1",
"msm-dai-q6-mi2s.2", "msm-dai-q6-mi2s.3",
- "msm-dai-q6-mi2s.5", "msm-dai-q6-mi2s.6",
+ "msm-dai-q6-mi2s.4", "msm-dai-q6-mi2s.6",
"msm-dai-q6-dev.12288", "msm-dai-q6-dev.12289",
"msm-dai-q6-dev.12290", "msm-dai-q6-dev.12292",
"msm-dai-q6-dev.12293", "msm-dai-q6-dev.224",
diff --git a/arch/arm64/boot/dts/qcom/msm8909.dtsi b/arch/arm64/boot/dts/qcom/msm8909.dtsi
index 8c06c93783fa..4029415f19d6 100644
--- a/arch/arm64/boot/dts/qcom/msm8909.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8909.dtsi
@@ -139,6 +139,10 @@
firmware: firmware {
android {
compatible = "android,firmware";
+ vbmeta {
+ compatible = "android,vbmeta";
+ parts = "vbmeta,boot,system,vendor,recovery";
+ };
fstab {
compatible = "android,fstab";
vendor_fstab: vendor {
@@ -147,7 +151,7 @@
"/dev/block/platform/soc/7824900.sdhci/by-name/vendor";
type = "ext4";
mnt_flags = "ro,barrier=1,discard";
- fsmgr_flags = "wait,verify";
+ fsmgr_flags = "wait,avb";
status = "ok";
};
system_fstab: system {
@@ -156,7 +160,7 @@
"/dev/block/platform/soc/7824900.sdhci/by-name/system";
type = "ext4";
mnt_flags = "ro,barrier=1,discard";
- fsmgr_flags = "wait,verify";
+ fsmgr_flags = "wait,avb";
status = "ok";
};
};
@@ -1421,6 +1425,12 @@
qcom,latency-level = "ultra";
};
+ pcm_noirq: qcom,msm-pcm-dsp-noirq {
+ compatible = "qcom,msm-pcm-dsp-noirq";
+ qcom,msm-pcm-low-latency;
+ qcom,latency-level = "ultra";
+ };
+
lpa: qcom,msm-pcm-lpa {
compatible = "qcom,msm-pcm-lpa";
};
@@ -1475,6 +1485,13 @@
qcom,msm-mi2s-tx-lines = <0>;
};
+ dai_mi2s2: qcom,msm-dai-q6-mi2s-tert {
+ compatible = "qcom,msm-dai-q6-mi2s";
+ qcom,msm-dai-q6-mi2s-dev-id = <2>;
+ qcom,msm-mi2s-rx-lines = <0>;
+ qcom,msm-mi2s-tx-lines = <3>;
+ };
+
dai_mi2s3: qcom,msm-dai-q6-mi2s-quat {
compatible = "qcom,msm-dai-q6-mi2s";
qcom,msm-dai-q6-mi2s-dev-id = <3>;
@@ -1482,21 +1499,14 @@
qcom,msm-mi2s-tx-lines = <3>;
};
- dai_mi2s5: qcom,msm-dai-q6-mi2s-quin {
+ dai_mi2s4: qcom,msm-dai-q6-mi2s-quin {
compatible = "qcom,msm-dai-q6-mi2s";
- qcom,msm-dai-q6-mi2s-dev-id = <5>;
+ qcom,msm-dai-q6-mi2s-dev-id = <4>;
qcom,msm-mi2s-rx-lines = <1>;
qcom,msm-mi2s-tx-lines = <2>;
};
- dai_mi2s2: qcom,msm-dai-q6-mi2s-tert {
- compatible = "qcom,msm-dai-q6-mi2s";
- qcom,msm-dai-q6-mi2s-dev-id = <2>;
- qcom,msm-mi2s-rx-lines = <0>;
- qcom,msm-mi2s-tx-lines = <3>;
- };
-
- dai_mi2s6: qcom,msm-dai-q6-mi2s-senary {
+ dai_mi2s5: qcom,msm-dai-q6-mi2s-senary {
compatible = "qcom,msm-dai-q6-mi2s";
qcom,msm-dai-q6-mi2s-dev-id = <6>;
qcom,msm-mi2s-rx-lines = <0>;
@@ -1647,6 +1657,13 @@
compatible = "qcom,msm-audio-ion";
};
+ qcom,msm-audio-apr {
+ compatible = "qcom,msm-audio-apr";
+ msm_audio_apr_dummy {
+ compatible = "qcom,msm-audio-apr-dummy";
+ };
+ };
+
qcom,mdsprpc-mem {
compatible = "qcom,msm-mdsprpc-mem-region";
memory-region = <&adsp_mem>;
diff --git a/arch/arm64/boot/dts/qcom/msm8917-cdp.dtsi b/arch/arm64/boot/dts/qcom/msm8917-cdp.dtsi
index 7690931e65a3..761e2d235b57 100644
--- a/arch/arm64/boot/dts/qcom/msm8917-cdp.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8917-cdp.dtsi
@@ -116,6 +116,8 @@
&dsi_truly_720_vid {
qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
+ qcom,mdss-dsi-min-refresh-rate = <48>;
+ qcom,mdss-dsi-max-refresh-rate = <60>;
qcom,mdss-dsi-pan-enable-dynamic-fps;
qcom,mdss-dsi-pan-fps-update = "dfps_immediate_porch_mode_vfp";
};
diff --git a/arch/arm64/boot/dts/qcom/msm8917-mtp.dtsi b/arch/arm64/boot/dts/qcom/msm8917-mtp.dtsi
index 9a3b6daed188..2330c76e6c7c 100644
--- a/arch/arm64/boot/dts/qcom/msm8917-mtp.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8917-mtp.dtsi
@@ -175,6 +175,8 @@
&dsi_truly_720_vid {
qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
+ qcom,mdss-dsi-min-refresh-rate = <48>;
+ qcom,mdss-dsi-max-refresh-rate = <60>;
qcom,mdss-dsi-pan-enable-dynamic-fps;
qcom,mdss-dsi-pan-fps-update = "dfps_immediate_porch_mode_vfp";
};
diff --git a/arch/arm64/boot/dts/qcom/msm8937-coresight.dtsi b/arch/arm64/boot/dts/qcom/msm8937-coresight.dtsi
index e64af14bde3a..e599b31bb215 100644
--- a/arch/arm64/boot/dts/qcom/msm8937-coresight.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8937-coresight.dtsi
@@ -1083,7 +1083,7 @@
modem_etm0 {
compatible = "qcom,coresight-remote-etm";
coresight-name = "coresight-modem-etm0";
- qcom,inst-id = <11>;
+ qcom,inst-id = <2>;
port {
modem_etm0_out_funnel_right: endpoint {
diff --git a/arch/arm64/boot/dts/qcom/msm8937.dtsi b/arch/arm64/boot/dts/qcom/msm8937.dtsi
index 1c13051a7897..b440cb60c1d7 100644
--- a/arch/arm64/boot/dts/qcom/msm8937.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8937.dtsi
@@ -914,7 +914,6 @@
qcom,vdd-voltage-level = <0 1200000 1200000>;
vbus_otg-supply = <&smbcharger_charger_otg>;
- qcom,hsusb-otg-phy-init-seq = <0x06 0x82 0xffffffff>;
qcom,hsusb-otg-phy-type = <3>; /* SNPS Femto PHY */
qcom,hsusb-otg-mode = <3>; /* OTG mode */
qcom,hsusb-otg-otg-control = <2>; /* PMIC */
diff --git a/arch/arm64/boot/dts/qcom/msm8953-gpu.dtsi b/arch/arm64/boot/dts/qcom/msm8953-gpu.dtsi
index 14c4d2b6a24e..f82b68da03c3 100644
--- a/arch/arm64/boot/dts/qcom/msm8953-gpu.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8953-gpu.dtsi
@@ -231,8 +231,8 @@
qcom,gpu-pwrlevel@5 {
reg = <5>;
qcom,gpu-freq = <216000000>;
- qcom,bus-freq = <3>;
- qcom,bus-min = <2>;
+ qcom,bus-freq = <1>;
+ qcom,bus-min = <1>;
qcom,bus-max = <4>;
};
@@ -240,7 +240,7 @@
qcom,gpu-pwrlevel@6 {
reg = <6>;
qcom,gpu-freq = <133300000>;
- qcom,bus-freq = <3>;
+ qcom,bus-freq = <1>;
qcom,bus-min = <1>;
qcom,bus-max = <4>;
};
diff --git a/arch/arm64/boot/dts/qcom/pmi632.dtsi b/arch/arm64/boot/dts/qcom/pmi632.dtsi
index d175b8099df1..93516a1fd7cf 100644
--- a/arch/arm64/boot/dts/qcom/pmi632.dtsi
+++ b/arch/arm64/boot/dts/qcom/pmi632.dtsi
@@ -638,6 +638,13 @@
regulator-min-microvolt = <4000000>;
regulator-max-microvolt = <6000000>;
};
+
+ lcdb_bst_vreg: bst {
+ label = "bst";
+ regulator-name = "lcdb_bst";
+ regulator-min-microvolt = <4700000>;
+ regulator-max-microvolt = <6275000>;
+ };
};
flash_led: qcom,leds@d300 {
diff --git a/arch/arm64/boot/dts/qcom/sdm429.dtsi b/arch/arm64/boot/dts/qcom/sdm429.dtsi
index 9bb8a6cff0ee..0a8aab3f78ad 100644
--- a/arch/arm64/boot/dts/qcom/sdm429.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm429.dtsi
@@ -94,18 +94,6 @@
< 1804800 5712 >;
};
};
-
- qcom,ion {
- /delete-node/ qcom,ion-heap@8;
- };
-};
-
-&secure_mem {
- status = "disabled";
-};
-
-&kgsl_msm_iommu {
- /delete-node/ gfx3d_secure;
};
&funnel_apss {
@@ -217,6 +205,17 @@
#clock-cells = <1>;
};
+
+ /* Disable secure_mem node */
+ qcom,ion {
+ /delete-node/ qcom,ion-heap@8;
+ };
+ /* delete hypervisor node for GPU*/
+ /delete-node/ qcom,kgsl-hyp;
+};
+
+&secure_mem {
+ status = "disabled";
};
&clock_gcc_mdss {
@@ -238,3 +237,8 @@
/* disable mem pools */
/delete-node/qcom,gpu-mempools;
};
+
+/* Disable secure context for Graphics*/
+&kgsl_msm_iommu {
+ /delete-node/ gfx3d_secure;
+};
diff --git a/arch/arm64/boot/dts/qcom/sdm439.dtsi b/arch/arm64/boot/dts/qcom/sdm439.dtsi
index ef8ea1f30642..ef22440ca923 100644
--- a/arch/arm64/boot/dts/qcom/sdm439.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm439.dtsi
@@ -661,3 +661,7 @@
};
};
};
+
+&usb_otg {
+ qcom,hsusb-otg-phy-init-seq = <0x06 0x82 0xffffffff>;
+};
diff --git a/arch/arm64/boot/dts/qcom/sxr1130-qrd-overlay.dts b/arch/arm64/boot/dts/qcom/sxr1130-qrd-overlay.dts
new file mode 100644
index 000000000000..d5f2a3ee084d
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sxr1130-qrd-overlay.dts
@@ -0,0 +1,32 @@
+/* Copyright (c) 2017-2018, 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.
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/clock/qcom,gcc-sdm845.h>
+#include <dt-bindings/clock/qcom,camcc-sdm845.h>
+#include <dt-bindings/clock/qcom,dispcc-sdm845.h>
+#include <dt-bindings/clock/qcom,rpmh.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+#include "sxr1130-qrd.dtsi"
+
+/ {
+ model = "Qualcomm Technologies, Inc. SXR1130 PM660 + PM660L QRD";
+ compatible = "qcom,sxr1130-qrd", "qcom,sxr1130", "qcom,qrd";
+ qcom,msm-id = <371 0x0>;
+ qcom,board-id = <0x0003000b 0>;
+ qcom,pmic-id = <0x0001001b 0x0101011a 0x0 0x0>,
+ <0x0001001b 0x0102001a 0x0 0x0>,
+ <0x0001001b 0x0201011a 0x0 0x0>;
+};
diff --git a/arch/arm64/boot/dts/qcom/sxr1130-qrd.dts b/arch/arm64/boot/dts/qcom/sxr1130-qrd.dts
new file mode 100644
index 000000000000..dd9db959b619
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sxr1130-qrd.dts
@@ -0,0 +1,26 @@
+/* Copyright (c) 2017-2018, 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.
+ */
+
+
+/dts-v1/;
+
+#include "sxr1130.dtsi"
+#include "sxr1130-qrd.dtsi"
+
+/ {
+ model = "Qualcomm Technologies, Inc. SXR1130 PM660 + PM660L QRD";
+ compatible = "qcom,sxr1130-qrd", "qcom,sxr1130", "qcom,qrd";
+ qcom,board-id = <0x0003000b 0>;
+ qcom,pmic-id = <0x0001001b 0x0101011a 0x0 0x0>,
+ <0x0001001b 0x0102001a 0x0 0x0>,
+ <0x0001001b 0x0201011a 0x0 0x0>;
+};
diff --git a/arch/arm64/boot/dts/qcom/sxr1130-qrd.dtsi b/arch/arm64/boot/dts/qcom/sxr1130-qrd.dtsi
new file mode 100644
index 000000000000..3d25629c84c4
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sxr1130-qrd.dtsi
@@ -0,0 +1,13 @@
+/* Copyright (c) 2018, 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 "sdm670-qrd-sku1.dtsi"
diff --git a/arch/arm64/configs/msm8937-perf_defconfig b/arch/arm64/configs/msm8937-perf_defconfig
index 385714bf2df4..619c1cc7c3bb 100644
--- a/arch/arm64/configs/msm8937-perf_defconfig
+++ b/arch/arm64/configs/msm8937-perf_defconfig
@@ -601,6 +601,7 @@ CONFIG_EXT4_FS_ENCRYPTION=y
CONFIG_EXT4_FS_ICE_ENCRYPTION=y
CONFIG_F2FS_FS=y
CONFIG_F2FS_FS_SECURITY=y
+CONFIG_F2FS_FS_ENCRYPTION=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_QFMT_V2=y
diff --git a/arch/arm64/configs/msm8937_defconfig b/arch/arm64/configs/msm8937_defconfig
index cbf89b2c6b5f..eee8909c187c 100644
--- a/arch/arm64/configs/msm8937_defconfig
+++ b/arch/arm64/configs/msm8937_defconfig
@@ -620,6 +620,7 @@ CONFIG_EXT4_FS_ENCRYPTION=y
CONFIG_EXT4_FS_ICE_ENCRYPTION=y
CONFIG_F2FS_FS=y
CONFIG_F2FS_FS_SECURITY=y
+CONFIG_F2FS_FS_ENCRYPTION=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_QFMT_V2=y
diff --git a/arch/arm64/configs/msm8953-perf_defconfig b/arch/arm64/configs/msm8953-perf_defconfig
index 698857a98922..50daa50758ca 100644
--- a/arch/arm64/configs/msm8953-perf_defconfig
+++ b/arch/arm64/configs/msm8953-perf_defconfig
@@ -614,6 +614,7 @@ CONFIG_EXT4_FS_ENCRYPTION=y
CONFIG_EXT4_FS_ICE_ENCRYPTION=y
CONFIG_F2FS_FS=y
CONFIG_F2FS_FS_SECURITY=y
+CONFIG_F2FS_FS_ENCRYPTION=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_QFMT_V2=y
diff --git a/arch/arm64/configs/msm8953_defconfig b/arch/arm64/configs/msm8953_defconfig
index 6434a8e8ac9c..34d16db96d32 100644
--- a/arch/arm64/configs/msm8953_defconfig
+++ b/arch/arm64/configs/msm8953_defconfig
@@ -633,6 +633,7 @@ CONFIG_EXT4_FS_ENCRYPTION=y
CONFIG_EXT4_FS_ICE_ENCRYPTION=y
CONFIG_F2FS_FS=y
CONFIG_F2FS_FS_SECURITY=y
+CONFIG_F2FS_FS_ENCRYPTION=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_QFMT_V2=y
diff --git a/drivers/crypto/msm/ice.c b/drivers/crypto/msm/ice.c
index 199d57353801..3c90fe5527f7 100644
--- a/drivers/crypto/msm/ice.c
+++ b/drivers/crypto/msm/ice.c
@@ -31,7 +31,8 @@
#else
#include <linux/bio.h>
static inline int pfk_load_key_start(const struct bio *bio,
- struct ice_crypto_setting *ice_setting, bool *is_pfe, bool async)
+ struct ice_crypto_setting *ice_setting, bool *is_pfe,
+ bool async, int ice_ver)
{
return 0;
}
@@ -132,14 +133,10 @@ static int ice_fde_flag;
static struct ice_crypto_setting ice_data;
static int qti_ice_setting_config(struct request *req,
- struct platform_device *pdev,
+ struct ice_device *ice_dev,
struct ice_crypto_setting *crypto_data,
struct ice_data_setting *setting)
{
- struct ice_device *ice_dev = NULL;
-
- ice_dev = platform_get_drvdata(pdev);
-
if (!ice_dev) {
pr_debug("%s no ICE device\n", __func__);
@@ -1477,12 +1474,19 @@ static int qcom_ice_config_start(struct platform_device *pdev,
sector_t data_size;
union map_info *info;
unsigned long sec_end = 0;
+ struct ice_device *ice_dev = NULL;
+ int ice_rev = 0;
if (!pdev || !req) {
pr_err("%s: Invalid params passed\n", __func__);
return -EINVAL;
}
+ ice_dev = platform_get_drvdata(pdev);
+ if (!ice_dev) {
+ pr_err("%s: no ICE device\n", __func__);
+ return 0;
+ }
/*
* It is not an error to have a request with no bio
* Such requests must bypass ICE. So first set bypass and then
@@ -1497,9 +1501,11 @@ static int qcom_ice_config_start(struct platform_device *pdev,
/* It is not an error to have a request with no bio */
return 0;
}
- //pr_err("%s bio is %pK\n", __func__, req->bio);
- ret = pfk_load_key_start(req->bio, &pfk_crypto_data, &is_pfe, async);
+ ice_rev = ICE_REV(ice_dev->ice_hw_version, MAJOR);
+
+ ret = pfk_load_key_start(req->bio, &pfk_crypto_data,
+ &is_pfe, async, ice_rev);
if (is_pfe) {
if (ret) {
if (ret != -EBUSY && ret != -EAGAIN)
@@ -1508,7 +1514,7 @@ static int qcom_ice_config_start(struct platform_device *pdev,
return ret;
}
- return qti_ice_setting_config(req, pdev,
+ return qti_ice_setting_config(req, ice_dev,
&pfk_crypto_data, setting);
}
@@ -1526,7 +1532,7 @@ static int qcom_ice_config_start(struct platform_device *pdev,
__func__);
return -EINVAL;
}
- return qti_ice_setting_config(req, pdev,
+ return qti_ice_setting_config(req, ice_dev,
crypto_data, setting);
}
return 0;
@@ -1548,8 +1554,8 @@ static int qcom_ice_config_start(struct platform_device *pdev,
if ((req->__sector + data_size) > sec_end)
return 0;
else
- return qti_ice_setting_config(req, pdev,
- &ice_data, setting);
+ return qti_ice_setting_config(req,
+ ice_dev, &ice_data, setting);
}
}
}
diff --git a/drivers/gpu/msm/adreno-gpulist.h b/drivers/gpu/msm/adreno-gpulist.h
index 614b1c7697ef..0a5933432399 100644
--- a/drivers/gpu/msm/adreno-gpulist.h
+++ b/drivers/gpu/msm/adreno-gpulist.h
@@ -207,11 +207,9 @@ static const struct adreno_gpu_core adreno_gpulist[] = {
.major = 0,
.minor = 4,
.patchid = ANY_ID,
- .features = ADRENO_PREEMPTION | ADRENO_64BIT |
- ADRENO_CONTENT_PROTECTION | ADRENO_CPZ_RETENTION,
+ .features = ADRENO_PREEMPTION | ADRENO_64BIT,
.pm4fw_name = "a530_pm4.fw",
.pfpfw_name = "a530_pfp.fw",
- .zap_name = "a506_zap",
.gpudev = &adreno_a5xx_gpudev,
.gmem_size = (SZ_128K + SZ_8K),
.num_protected_regs = 0x20,
diff --git a/drivers/gpu/msm/adreno_a6xx_preempt.c b/drivers/gpu/msm/adreno_a6xx_preempt.c
index 132fb0231114..89965f2c9b06 100644
--- a/drivers/gpu/msm/adreno_a6xx_preempt.c
+++ b/drivers/gpu/msm/adreno_a6xx_preempt.c
@@ -232,6 +232,38 @@ static struct adreno_ringbuffer *a6xx_next_ringbuffer(
return NULL;
}
+#define GMU_ACTIVE_STATE_RETRY_MAX 100
+
+static int adreno_gmu_wait_for_active(struct adreno_device *adreno_dev)
+{
+ unsigned int reg, num_retries = 0;
+ struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
+
+ if (!kgsl_gmu_isenabled(device))
+ return 0;
+
+ kgsl_gmu_regread(device,
+ A6XX_GPU_GMU_CX_GMU_RPMH_POWER_STATE, &reg);
+
+ while (reg != GPU_HW_ACTIVE) {
+ /* Wait for small time before trying again */
+ udelay(5);
+ kgsl_gmu_regread(device,
+ A6XX_GPU_GMU_CX_GMU_RPMH_POWER_STATE, &reg);
+
+ if (num_retries == GMU_ACTIVE_STATE_RETRY_MAX &&
+ reg != GPU_HW_ACTIVE) {
+ dev_err(adreno_dev->dev.dev,
+ "GMU failed to move to ACTIVE state: 0x%x\n",
+ reg);
+ return -ETIMEDOUT;
+ }
+ num_retries++;
+ }
+
+ return 0;
+}
+
void a6xx_preemption_trigger(struct adreno_device *adreno_dev)
{
struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
@@ -361,6 +393,23 @@ void a6xx_preemption_trigger(struct adreno_device *adreno_dev)
upper_32_bits(gpuaddr),
FENCE_STATUS_WRITEDROPPED1_MASK);
+ /*
+ * Above fence writes will make sure GMU comes out of
+ * IFPC state if its was in IFPC state but it doesn't
+ * guarantee that GMU FW actually moved to ACTIVE state
+ * i.e. wake-up from IFPC is complete.
+ * Wait for GMU to move to ACTIVE state before triggering
+ * preemption. This is require to make sure CP doesn't
+ * interrupt GMU during wake-up from IFPC.
+ */
+ if (adreno_gmu_wait_for_active(adreno_dev)) {
+ adreno_set_preempt_state(adreno_dev, ADRENO_PREEMPT_NONE);
+
+ adreno_set_gpu_fault(adreno_dev, ADRENO_GMU_FAULT);
+ adreno_dispatcher_schedule(device);
+ return;
+ }
+
adreno_dev->next_rb = next;
/* Start the timer to detect a stuck preemption */
diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c
index d3bbea3bafe4..eb4c29d535d5 100644
--- a/drivers/gpu/msm/kgsl.c
+++ b/drivers/gpu/msm/kgsl.c
@@ -1397,6 +1397,45 @@ long kgsl_ioctl_device_getproperty(struct kgsl_device_private *dev_priv,
kgsl_context_put(context);
break;
}
+ case KGSL_PROP_SECURE_BUFFER_ALIGNMENT:
+ {
+ unsigned int align;
+
+ if (param->sizebytes != sizeof(unsigned int)) {
+ result = -EINVAL;
+ break;
+ }
+ /*
+ * XPUv2 impose the constraint of 1MB memory alignment,
+ * on the other hand Hypervisor does not have such
+ * constraints. So driver should fulfill such
+ * requirements when allocating secure memory.
+ */
+ align = MMU_FEATURE(&dev_priv->device->mmu,
+ KGSL_MMU_HYP_SECURE_ALLOC) ? PAGE_SIZE : SZ_1M;
+
+ if (copy_to_user(param->value, &align, sizeof(align)))
+ result = -EFAULT;
+
+ break;
+ }
+ case KGSL_PROP_SECURE_CTXT_SUPPORT:
+ {
+ unsigned int secure_ctxt;
+
+ if (param->sizebytes != sizeof(unsigned int)) {
+ result = -EINVAL;
+ break;
+ }
+
+ secure_ctxt = dev_priv->device->mmu.secured ? 1 : 0;
+
+ if (copy_to_user(param->value, &secure_ctxt,
+ sizeof(secure_ctxt)))
+ result = -EFAULT;
+
+ break;
+ }
default:
if (is_compat_task())
result = dev_priv->device->ftbl->getproperty_compat(
diff --git a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
index b9b1e9c8f4c4..9971fcd4586c 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
@@ -2073,16 +2073,16 @@ static u32 etmv4_cross_read(const struct device *dev, u32 offset)
coresight_simple_func(struct etmv4_drvdata, etmv4_cross_read, \
name, offset)
-coresight_etm4x_simple_func(trcpdcr, TRCPDCR);
-coresight_etm4x_simple_func(trcpdsr, TRCPDSR);
-coresight_etm4x_simple_func(trclsr, TRCLSR);
-coresight_etm4x_simple_func(trcauthstatus, TRCAUTHSTATUS);
-coresight_etm4x_simple_func(trcdevid, TRCDEVID);
-coresight_etm4x_simple_func(trcdevtype, TRCDEVTYPE);
-coresight_etm4x_simple_func(trcpidr0, TRCPIDR0);
-coresight_etm4x_simple_func(trcpidr1, TRCPIDR1);
-coresight_etm4x_simple_func(trcpidr2, TRCPIDR2);
-coresight_etm4x_simple_func(trcpidr3, TRCPIDR3);
+coresight_etm4x_cross_read(trcpdcr, TRCPDCR);
+coresight_etm4x_cross_read(trcpdsr, TRCPDSR);
+coresight_etm4x_cross_read(trclsr, TRCLSR);
+coresight_etm4x_cross_read(trcauthstatus, TRCAUTHSTATUS);
+coresight_etm4x_cross_read(trcdevid, TRCDEVID);
+coresight_etm4x_cross_read(trcdevtype, TRCDEVTYPE);
+coresight_etm4x_cross_read(trcpidr0, TRCPIDR0);
+coresight_etm4x_cross_read(trcpidr1, TRCPIDR1);
+coresight_etm4x_cross_read(trcpidr2, TRCPIDR2);
+coresight_etm4x_cross_read(trcpidr3, TRCPIDR3);
coresight_etm4x_cross_read(trcoslsr, TRCOSLSR);
coresight_etm4x_cross_read(trcconfig, TRCCONFIGR);
coresight_etm4x_cross_read(trctraceid, TRCTRACEIDR);
diff --git a/drivers/media/platform/msm/vidc/msm_vidc.c b/drivers/media/platform/msm/vidc/msm_vidc.c
index 651d0a2968c7..815d137d98ec 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc.c
@@ -1860,6 +1860,8 @@ static void msm_vidc_cleanup_instance(struct msm_vidc_inst *inst)
dprintk(VIDC_ERR,
"Failed to release mark_data buffers\n");
+ msm_comm_free_buffer_tags(inst);
+
msm_comm_release_eos_buffers(inst);
if (msm_comm_release_output_buffers(inst, true))
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_clocks.c b/drivers/media/platform/msm/vidc/msm_vidc_clocks.c
index c15a2e9d12fc..802e58140d85 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_clocks.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc_clocks.c
@@ -932,6 +932,12 @@ int msm_comm_init_clocks_and_bus_data(struct msm_vidc_inst *inst)
break;
}
}
+
+ if (!inst->clk_data.entry) {
+ dprintk(VIDC_ERR, "%s No match found\n", __func__);
+ rc = -EINVAL;
+ }
+
return rc;
}
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_common.c b/drivers/media/platform/msm/vidc/msm_vidc_common.c
index b8789711d3eb..176b9c647290 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_common.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc_common.c
@@ -3138,7 +3138,11 @@ static int msm_comm_session_init(int flipped_state,
return -EINVAL;
}
- msm_comm_init_clocks_and_bus_data(inst);
+ rc = msm_comm_init_clocks_and_bus_data(inst);
+ if (rc) {
+ dprintk(VIDC_ERR, "Failed to initialize clocks and bus data\n");
+ goto exit;
+ }
dprintk(VIDC_DBG, "%s: inst %pK\n", __func__, inst);
rc = call_hfi_op(hdev, session_init, hdev->hfi_device_data,
diff --git a/drivers/media/platform/msm/vidc_3x/msm_vdec.c b/drivers/media/platform/msm/vidc_3x/msm_vdec.c
index 04bdd65b898d..bb4b6c84f966 100644
--- a/drivers/media/platform/msm/vidc_3x/msm_vdec.c
+++ b/drivers/media/platform/msm/vidc_3x/msm_vdec.c
@@ -22,6 +22,7 @@
#define MSM_VDEC_DVC_NAME "msm_vdec_8974"
#define MIN_NUM_OUTPUT_BUFFERS 4
#define MIN_NUM_OUTPUT_BUFFERS_VP9 6
+#define MIN_NUM_OUTPUT_BUFFERS_HEVC 6
#define MIN_NUM_CAPTURE_BUFFERS 6
#define MIN_NUM_THUMBNAIL_MODE_CAPTURE_BUFFERS 1
#define MAX_NUM_OUTPUT_BUFFERS VB2_MAX_FRAME
@@ -1499,6 +1500,10 @@ static int msm_vdec_queue_setup(struct vb2_queue *q,
V4L2_PIX_FMT_VP9 &&
*num_buffers < MIN_NUM_OUTPUT_BUFFERS_VP9)
*num_buffers = MIN_NUM_OUTPUT_BUFFERS_VP9;
+ else if (inst->fmts[OUTPUT_PORT].fourcc ==
+ V4L2_PIX_FMT_HEVC &&
+ *num_buffers < MIN_NUM_OUTPUT_BUFFERS_HEVC)
+ *num_buffers = MIN_NUM_OUTPUT_BUFFERS_HEVC;
for (i = 0; i < *num_planes; i++) {
sizes[i] = get_frame_size(inst,
diff --git a/drivers/net/wireless/cnss_prealloc/cnss_prealloc.c b/drivers/net/wireless/cnss_prealloc/cnss_prealloc.c
index c09e61fe83d7..7eb2a070fd89 100644
--- a/drivers/net/wireless/cnss_prealloc/cnss_prealloc.c
+++ b/drivers/net/wireless/cnss_prealloc/cnss_prealloc.c
@@ -173,8 +173,6 @@ void *wcnss_prealloc_get(unsigned int size)
}
spin_unlock_irqrestore(&alloc_lock, flags);
- WARN(1, "wcnss_prealloc not available for size %d\n", size);
-
return NULL;
}
EXPORT_SYMBOL(wcnss_prealloc_get);
diff --git a/drivers/power/reset/msm-poweroff.c b/drivers/power/reset/msm-poweroff.c
index 0b8c212c84fe..37ae308afe5a 100644
--- a/drivers/power/reset/msm-poweroff.c
+++ b/drivers/power/reset/msm-poweroff.c
@@ -50,20 +50,23 @@
#define SCM_DLOAD_BOTHDUMPS (SCM_DLOAD_MINIDUMP | SCM_DLOAD_FULLDUMP)
static int restart_mode;
-static void __iomem *restart_reason, *dload_type_addr;
+static void *restart_reason;
static bool scm_pmic_arbiter_disable_supported;
static bool scm_deassert_ps_hold_supported;
/* Download mode master kill-switch */
static void __iomem *msm_ps_hold;
static phys_addr_t tcsr_boot_misc_detect;
+static void scm_disable_sdi(void);
+
+#ifdef CONFIG_QCOM_DLOAD_MODE
/* Runtime could be only changed value once.
* There is no API from TZ to re-enable the registers.
* So the SDI cannot be re-enabled when it already by-passed.
*/
static int download_mode = 1;
-static struct kobject dload_kobj;
-static void scm_disable_sdi(void);
-
+#else
+static const int download_mode;
+#endif
#ifdef CONFIG_QCOM_DLOAD_MODE
#define EDL_MODE_PROP "qcom,msm-imem-emergency_download_mode"
@@ -81,6 +84,8 @@ static void *emergency_dload_mode_addr;
static void *kaslr_imem_addr;
#endif
static bool scm_dload_supported;
+static struct kobject dload_kobj;
+static void *dload_type_addr;
static int dload_set(const char *val, const struct kernel_param *kp);
/* interface for exporting attributes */
@@ -431,6 +436,7 @@ static void do_msm_poweroff(void)
pr_err("Powering off has failed\n");
}
+#ifdef CONFIG_QCOM_DLOAD_MODE
static ssize_t attr_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
@@ -561,6 +567,7 @@ static struct attribute *reset_attrs[] = {
static struct attribute_group reset_attr_group = {
.attrs = reset_attrs,
};
+#endif
static int msm_restart_probe(struct platform_device *pdev)
{
diff --git a/drivers/power/supply/qcom/qpnp-linear-charger.c b/drivers/power/supply/qcom/qpnp-linear-charger.c
index 7815eba3209b..dff51dfb5e20 100644
--- a/drivers/power/supply/qcom/qpnp-linear-charger.c
+++ b/drivers/power/supply/qcom/qpnp-linear-charger.c
@@ -1472,6 +1472,9 @@ static int qpnp_lbc_configure_jeita(struct qpnp_lbc_chip *chip,
return -EINVAL;
}
+ if (chip->cfg_use_fake_battery)
+ return 0;
+
mutex_lock(&chip->jeita_configure_lock);
switch (psp) {
case POWER_SUPPLY_PROP_COOL_TEMP:
@@ -2634,15 +2637,15 @@ static irqreturn_t qpnp_lbc_batt_pres_irq_handler(int irq, void *_chip)
power_supply_changed(chip->batt_psy);
if ((chip->cfg_cool_bat_decidegc
- || chip->cfg_warm_bat_decidegc)
- && batt_present) {
+ || chip->cfg_warm_bat_decidegc)
+ && batt_present && !chip->cfg_use_fake_battery) {
pr_debug("enabling vadc notifications\n");
if (qpnp_adc_tm_channel_measure(chip->adc_tm_dev,
&chip->adc_param))
pr_err("request ADC error\n");
} else if ((chip->cfg_cool_bat_decidegc
- || chip->cfg_warm_bat_decidegc)
- && !batt_present) {
+ || chip->cfg_warm_bat_decidegc)
+ && !batt_present && !chip->cfg_use_fake_battery) {
qpnp_adc_tm_disable_chan_meas(chip->adc_tm_dev,
&chip->adc_param);
pr_debug("disabling vadc notifications\n");
@@ -3398,7 +3401,7 @@ static int qpnp_lbc_main_probe(struct platform_device *pdev)
}
if ((chip->cfg_cool_bat_decidegc || chip->cfg_warm_bat_decidegc)
- && chip->bat_if_base) {
+ && chip->bat_if_base && !chip->cfg_use_fake_battery) {
chip->adc_param.low_temp = chip->cfg_cool_bat_decidegc;
chip->adc_param.high_temp = chip->cfg_warm_bat_decidegc;
chip->adc_param.timer_interval = ADC_MEAS1_INTERVAL_1S;
diff --git a/drivers/regulator/qpnp-lcdb-regulator.c b/drivers/regulator/qpnp-lcdb-regulator.c
index 4e8d6f97b6a4..a0f0fcec9cdf 100644
--- a/drivers/regulator/qpnp-lcdb-regulator.c
+++ b/drivers/regulator/qpnp-lcdb-regulator.c
@@ -1151,6 +1151,7 @@ static int qpnp_lcdb_get_voltage(struct qpnp_lcdb *lcdb,
return rc;
}
+ val &= SET_OUTPUT_VOLTAGE_MASK;
if (val < VOLTAGE_STEP_50MV_OFFSET) {
*voltage_mv = VOLTAGE_MIN_STEP_100_MV +
(val * VOLTAGE_STEP_100_MV);
@@ -1826,7 +1827,7 @@ static int qpnp_lcdb_init_bst(struct qpnp_lcdb *lcdb)
if (lcdb->bst.pd_strength != -EINVAL) {
rc = qpnp_lcdb_masked_write(lcdb, lcdb->base +
- LCDB_NCP_PD_CTL_REG, BOOST_PD_STRENGTH_BIT,
+ LCDB_BST_PD_CTL_REG, BOOST_PD_STRENGTH_BIT,
lcdb->bst.pd_strength ?
BOOST_PD_STRENGTH_BIT : 0);
if (rc < 0) {
diff --git a/drivers/soc/qcom/bg_rsb.c b/drivers/soc/qcom/bg_rsb.c
index ffba37205976..1b5830a557b8 100644
--- a/drivers/soc/qcom/bg_rsb.c
+++ b/drivers/soc/qcom/bg_rsb.c
@@ -83,6 +83,8 @@ struct bgrsb_priv {
struct input_dev *input;
struct mutex glink_mutex;
+ struct mutex rsb_state_mutex;
+
enum bgrsb_state bgrsb_current_state;
enum glink_link_state link_state;
@@ -651,9 +653,10 @@ static void bgrsb_enable_rsb(struct work_struct *work)
struct bgrsb_priv *dev = container_of(work, struct bgrsb_priv,
rsb_up_work);
+ mutex_lock(&dev->rsb_state_mutex);
if (dev->bgrsb_current_state != BGRSB_STATE_RSB_CONFIGURED) {
pr_err("BG is not yet configured for RSB\n");
- return;
+ goto unlock;
}
if (bgrsb_ldo_work(dev, BGRSB_ENABLE_LDO15) == 0) {
@@ -663,7 +666,7 @@ static void bgrsb_enable_rsb(struct work_struct *work)
pr_err("Failed to send enable command to BG\n");
bgrsb_ldo_work(dev, BGRSB_DISABLE_LDO15);
dev->bgrsb_current_state = BGRSB_STATE_RSB_CONFIGURED;
- return;
+ goto unlock;
}
}
dev->bgrsb_current_state = BGRSB_STATE_RSB_ENABLED;
@@ -673,6 +676,9 @@ static void bgrsb_enable_rsb(struct work_struct *work)
dev->calibration_needed = false;
queue_work(dev->bgrsb_wq, &dev->rsb_calibration_work);
}
+unlock:
+ mutex_unlock(&dev->rsb_state_mutex);
+
}
static void bgrsb_disable_rsb(struct work_struct *work)
@@ -681,20 +687,24 @@ static void bgrsb_disable_rsb(struct work_struct *work)
struct bgrsb_priv *dev = container_of(work, struct bgrsb_priv,
rsb_down_work);
+ mutex_lock(&dev->rsb_state_mutex);
if (dev->bgrsb_current_state == BGRSB_STATE_RSB_ENABLED) {
rc = bgrsb_enable(dev, false);
if (rc != 0) {
pr_err("Failed to send disable command to BG\n");
- return;
+ goto unlock;
}
if (bgrsb_ldo_work(dev, BGRSB_DISABLE_LDO15) != 0)
- return;
+ goto unlock;
dev->bgrsb_current_state = BGRSB_STATE_RSB_CONFIGURED;
pr_debug("RSB Disabled\n");
}
+
+unlock:
+ mutex_unlock(&dev->rsb_state_mutex);
}
static void bgrsb_calibration(struct work_struct *work)
@@ -763,13 +773,9 @@ static int split_bg_work(struct bgrsb_priv *dev, char *str)
switch (val) {
case BGRSB_POWER_DISABLE:
- if (dev->bgrsb_current_state == BGRSB_STATE_RSB_CONFIGURED)
- return 0;
queue_work(dev->bgrsb_wq, &dev->rsb_down_work);
break;
case BGRSB_POWER_ENABLE:
- if (dev->bgrsb_current_state == BGRSB_STATE_RSB_ENABLED)
- return 0;
queue_work(dev->bgrsb_wq, &dev->rsb_up_work);
break;
case BGRSB_POWER_CALIBRATION:
@@ -857,6 +863,7 @@ static int bgrsb_init(struct bgrsb_priv *dev)
dev->chnl.chnl_edge = "bg";
dev->chnl.chnl_trnsprt = "bgcom";
mutex_init(&dev->glink_mutex);
+ mutex_init(&dev->rsb_state_mutex);
dev->link_state = GLINK_LINK_STATE_DOWN;
dev->ldo_action = BGRSB_NO_ACTION;
@@ -981,18 +988,24 @@ static int bg_rsb_resume(struct device *pldev)
struct platform_device *pdev = to_platform_device(pldev);
struct bgrsb_priv *dev = platform_get_drvdata(pdev);
+ mutex_lock(&dev->rsb_state_mutex);
if (dev->bgrsb_current_state == BGRSB_STATE_RSB_CONFIGURED)
- return 0;
+ goto ret_success;
if (dev->bgrsb_current_state == BGRSB_STATE_INIT) {
if (bgrsb_ldo_work(dev, BGRSB_ENABLE_LDO11) == 0) {
dev->bgrsb_current_state = BGRSB_STATE_RSB_CONFIGURED;
pr_debug("RSB Cofigured\n");
- return 0;
+ goto ret_success;
}
pr_err("RSB failed to resume\n");
}
+ mutex_unlock(&dev->rsb_state_mutex);
return -EINVAL;
+
+ret_success:
+ mutex_unlock(&dev->rsb_state_mutex);
+ return 0;
}
static int bg_rsb_suspend(struct device *pldev)
@@ -1000,8 +1013,9 @@ static int bg_rsb_suspend(struct device *pldev)
struct platform_device *pdev = to_platform_device(pldev);
struct bgrsb_priv *dev = platform_get_drvdata(pdev);
+ mutex_lock(&dev->rsb_state_mutex);
if (dev->bgrsb_current_state == BGRSB_STATE_INIT)
- return 0;
+ goto ret_success;
if (dev->bgrsb_current_state == BGRSB_STATE_RSB_ENABLED) {
if (bgrsb_ldo_work(dev, BGRSB_DISABLE_LDO15) != 0)
@@ -1011,12 +1025,17 @@ static int bg_rsb_suspend(struct device *pldev)
if (bgrsb_ldo_work(dev, BGRSB_DISABLE_LDO11) == 0) {
dev->bgrsb_current_state = BGRSB_STATE_INIT;
pr_debug("RSB Init\n");
- return 0;
+ goto ret_success;
}
ret_err:
pr_err("RSB failed to suspend\n");
+ mutex_unlock(&dev->rsb_state_mutex);
return -EINVAL;
+
+ret_success:
+ mutex_unlock(&dev->rsb_state_mutex);
+ return 0;
}
static const struct of_device_id bg_rsb_of_match[] = {
diff --git a/drivers/soc/qcom/bgcom_spi.c b/drivers/soc/qcom/bgcom_spi.c
index d21e2e944a91..7f8382a19c2d 100644
--- a/drivers/soc/qcom/bgcom_spi.c
+++ b/drivers/soc/qcom/bgcom_spi.c
@@ -1036,6 +1036,11 @@ static int bg_spi_remove(struct spi_device *spi)
return 0;
}
+static void bg_spi_shutdown(struct spi_device *spi)
+{
+ bg_spi_remove(spi);
+}
+
static int bgcom_pm_suspend(struct device *dev)
{
uint32_t cmnd_reg = 0;
@@ -1090,6 +1095,7 @@ static struct spi_driver bg_spi_driver = {
},
.probe = bg_spi_probe,
.remove = bg_spi_remove,
+ .shutdown = bg_spi_shutdown,
};
module_spi_driver(bg_spi_driver);
diff --git a/drivers/soc/qcom/glink_bgcom_xprt.c b/drivers/soc/qcom/glink_bgcom_xprt.c
index 290d6679a42f..9140ac1288c3 100644
--- a/drivers/soc/qcom/glink_bgcom_xprt.c
+++ b/drivers/soc/qcom/glink_bgcom_xprt.c
@@ -38,6 +38,8 @@
#define XPRT_NAME "bgcom"
#define FIFO_ALIGNMENT 16
#define TRACER_PKT_FEATURE BIT(2)
+#define SHORT_PKT_SIZE 16
+#define XPRT_ALIGNMENT 4
#define ACTIVE_TX BIT(0)
#define ACTIVE_RX BIT(1)
@@ -75,6 +77,7 @@
* @SIGNALS_CMD: Sideband signals
* @TRACER_PKT_CMD: Start of a Tracer Packet Command
* @TRACER_PKT_CONT_CMD: Continuation or end of a Tracer Packet Command
+ * @TX_SHORT_DATA_CMD: Transmit short packets
*/
enum command_types {
VERSION_CMD,
@@ -94,6 +97,7 @@ enum command_types {
SIGNALS_CMD,
TRACER_PKT_CMD,
TRACER_PKT_CONT_CMD,
+ TX_SHORT_DATA_CMD,
};
struct bgcom_fifo_size {
@@ -381,7 +385,11 @@ static void process_rx_data(struct edge_info *einfo, uint16_t cmd_id,
return;
}
- rc = bgcom_ahb_read(einfo->bgcom_handle, (uint32_t)(size_t)src,
+
+ if (cmd_id == TX_SHORT_DATA_CMD)
+ memcpy(intent->data + intent->write_offset, src, frag_size);
+ else
+ rc = bgcom_ahb_read(einfo->bgcom_handle, (uint32_t)(size_t)src,
ALIGN(frag_size, WORD_SIZE)/WORD_SIZE,
intent->data + intent->write_offset);
@@ -433,9 +441,13 @@ static void process_rx_cmd(struct edge_info *einfo,
uint32_t size_left;
uint64_t addr;
};
+ struct rx_short_data_desc {
+ unsigned char data[SHORT_PKT_SIZE];
+ };
struct command *cmd;
struct intent_desc *intents;
struct rx_desc *rx_descp;
+ struct rx_short_data_desc *rx_sd_descp;
int offset = 0;
int rcu_id;
uint16_t rcid;
@@ -538,6 +550,15 @@ static void process_rx_cmd(struct edge_info *einfo,
rx_descp->size, rx_descp->size_left);
break;
+ case TX_SHORT_DATA_CMD:
+ rx_sd_descp = (struct rx_short_data_desc *)
+ (rx_data + offset);
+ offset += sizeof(*rx_sd_descp);
+ process_rx_data(einfo, cmd->id, cmd->param1,
+ cmd->param2, (void *)rx_sd_descp->data,
+ cmd->param3, cmd->param4);
+ break;
+
case READ_NOTIF_CMD:
break;
@@ -1267,6 +1288,8 @@ static int tx_data(struct glink_transport_if *if_ptr, uint16_t cmd_id,
srcu_read_unlock(&einfo->use_ref, rcu_id);
return -EINVAL;
}
+ if (tx_size & (XPRT_ALIGNMENT - 1))
+ tx_size = ALIGN(tx_size - SHORT_PKT_SIZE, XPRT_ALIGNMENT);
if (likely(pctx->cookie))
dst = pctx->cookie + (pctx->size - pctx->size_remaining);
@@ -1301,6 +1324,82 @@ static int tx_data(struct glink_transport_if *if_ptr, uint16_t cmd_id,
}
/**
+ * tx_short_data() - Tansmit a short packet in band along with command
+ * @if_ptr: The transport to transmit on.
+ * @cmd_id: The command ID to transmit.
+ * @lcid: The local channel id to encode.
+ * @pctx: The data to encode.
+ *
+ * Return: Number of bytes written or standard Linux error code.
+ */
+static int tx_short_data(struct glink_transport_if *if_ptr,
+ uint32_t lcid, struct glink_core_tx_pkt *pctx)
+{
+ struct command {
+ uint16_t id;
+ uint16_t lcid;
+ uint32_t riid;
+ uint32_t size;
+ uint32_t size_left;
+ unsigned char data[SHORT_PKT_SIZE];
+ };
+ struct command cmd;
+ struct edge_info *einfo;
+ void *data_start;
+ size_t tx_size = 0;
+ int rcu_id;
+
+ if (pctx->size < pctx->size_remaining) {
+ GLINK_ERR("%s: size remaining exceeds size. Resetting.\n",
+ __func__);
+ pctx->size_remaining = pctx->size;
+ }
+ if (!pctx->size_remaining)
+ return 0;
+
+ memset(&cmd, 0, sizeof(cmd));
+ einfo = container_of(if_ptr, struct edge_info, xprt_if);
+
+ rcu_id = srcu_read_lock(&einfo->use_ref);
+ if (einfo->in_ssr) {
+ srcu_read_unlock(&einfo->use_ref, rcu_id);
+ return -EFAULT;
+ }
+
+ cmd.id = TX_SHORT_DATA_CMD;
+ cmd.lcid = lcid;
+ cmd.riid = pctx->riid;
+ data_start = get_tx_vaddr(pctx, pctx->size - pctx->size_remaining,
+ &tx_size);
+ if (unlikely(!data_start || tx_size > SHORT_PKT_SIZE)) {
+ GLINK_ERR("%s: invalid data_start %pK or tx_size %zu\n",
+ __func__, data_start, tx_size);
+ srcu_read_unlock(&einfo->use_ref, rcu_id);
+ return -EINVAL;
+ }
+
+ mutex_lock(&einfo->write_lock);
+ if (glink_bgcom_get_tx_avail(einfo) <= sizeof(cmd)/WORD_SIZE) {
+ einfo->tx_resume_needed = true;
+ mutex_unlock(&einfo->write_lock);
+ srcu_read_unlock(&einfo->use_ref, rcu_id);
+ return -EAGAIN;
+ }
+ cmd.size = tx_size;
+ pctx->size_remaining -= tx_size;
+ cmd.size_left = pctx->size_remaining;
+ memcpy(cmd.data, data_start, tx_size);
+ bgcom_resume(einfo->bgcom_handle);
+ glink_bgcom_xprt_tx_cmd_safe(einfo, &cmd, sizeof(cmd));
+ GLINK_DBG("%s %s: lcid[%u] riid[%u] cmd[%d], size[%d], size_left[%d]\n",
+ "<SPI>", __func__, cmd.lcid, cmd.riid, cmd.id, cmd.size,
+ cmd.size_left);
+ mutex_unlock(&einfo->write_lock);
+ srcu_read_unlock(&einfo->use_ref, rcu_id);
+ return cmd.size;
+}
+
+/**
* tx() - convert a data transmit cmd to wire format and transmit
* @if_ptr: The transport to transmit on.
* @lcid: The local channel id to encode.
@@ -1311,6 +1410,8 @@ static int tx_data(struct glink_transport_if *if_ptr, uint16_t cmd_id,
static int tx(struct glink_transport_if *if_ptr, uint32_t lcid,
struct glink_core_tx_pkt *pctx)
{
+ if (pctx->size_remaining <= SHORT_PKT_SIZE)
+ return tx_short_data(if_ptr, lcid, pctx);
return tx_data(if_ptr, TX_DATA_CMD, lcid, pctx);
}
diff --git a/drivers/soc/qcom/secure_buffer.c b/drivers/soc/qcom/secure_buffer.c
index 1c8bc5112256..5b82c0b25d38 100644
--- a/drivers/soc/qcom/secure_buffer.c
+++ b/drivers/soc/qcom/secure_buffer.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2011 Google, Inc
- * Copyright (c) 2011-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2018, 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
@@ -142,7 +142,8 @@ static int secure_buffer_change_table(struct sg_table *table, int lock)
* secure environment to ensure the data is actually present
* in RAM
*/
- dmac_flush_range(chunk_list, chunk_list + chunk_list_len);
+ dmac_flush_range(chunk_list,
+ (void *)chunk_list + chunk_list_len);
ret = secure_buffer_change_chunk(chunk_list_phys,
nchunks, V2_CHUNK_SIZE, lock);
diff --git a/drivers/usb/dwc3/dwc3-msm.c b/drivers/usb/dwc3/dwc3-msm.c
index 9bcfa38e893c..48017085567b 100644
--- a/drivers/usb/dwc3/dwc3-msm.c
+++ b/drivers/usb/dwc3/dwc3-msm.c
@@ -1340,7 +1340,7 @@ static void gsi_set_clear_dbell(struct usb_ep *ep,
*/
static bool gsi_check_ready_to_suspend(struct usb_ep *ep, bool f_suspend)
{
- u32 timeout = 1500;
+ u32 timeout = 500;
u32 reg = 0;
struct dwc3_ep *dep = to_dwc3_ep(ep);
struct dwc3 *dwc = dep->dwc;
@@ -1353,6 +1353,7 @@ static bool gsi_check_ready_to_suspend(struct usb_ep *ep, bool f_suspend)
"Unable to suspend GSI ch. WR_CTRL_STATE != 0\n");
return false;
}
+ usleep_range(20, 22);
}
/* Check for U3 only if we are not handling Function Suspend */
if (!f_suspend) {
@@ -2142,6 +2143,7 @@ static int dwc3_msm_prepare_suspend(struct dwc3_msm *mdwc)
reg = dwc3_msm_read_reg(mdwc->base, PWR_EVNT_IRQ_STAT_REG);
if (reg & PWR_EVNT_LPM_IN_L2_MASK)
break;
+ usleep_range(20, 30);
}
if (!(reg & PWR_EVNT_LPM_IN_L2_MASK))
dev_err(mdwc->dev, "could not transition HS PHY to L2\n");
diff --git a/drivers/usb/gadget/function/f_qc_rndis.c b/drivers/usb/gadget/function/f_qc_rndis.c
index df26403e1a31..dddf89ea41f5 100644
--- a/drivers/usb/gadget/function/f_qc_rndis.c
+++ b/drivers/usb/gadget/function/f_qc_rndis.c
@@ -6,7 +6,7 @@
* Copyright (C) 2008 Nokia Corporation
* Copyright (C) 2009 Samsung Electronics
* Author: Michal Nazarewicz (mina86@mina86.com)
- * Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2018, 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
@@ -913,6 +913,13 @@ rndis_qc_bind(struct usb_configuration *c, struct usb_function *f)
int status;
struct usb_ep *ep;
+ status = rndis_ipa_init(&rndis_ipa_params);
+ if (status) {
+ pr_err("%s: failed to init rndis_ipa\n", __func__);
+ return status;
+ }
+
+ rndis_ipa_supported = true;
/* maybe allocate device-global string IDs */
if (rndis_qc_string_defs[0].id == 0) {
@@ -1196,11 +1203,8 @@ usb_function *rndis_qc_bind_config_vendor(struct usb_function_instance *fi,
struct f_rndis_qc_opts *opts = container_of(fi,
struct f_rndis_qc_opts, func_inst);
struct f_rndis_qc *rndis;
- int status;
/* allocate and initialize one new instance */
- status = -ENOMEM;
-
opts = container_of(fi, struct f_rndis_qc_opts, func_inst);
opts->refcnt++;
@@ -1214,7 +1218,6 @@ usb_function *rndis_qc_bind_config_vendor(struct usb_function_instance *fi,
pr_debug("setting host_ethaddr=%pM, device_ethaddr=%pM\n",
rndis_ipa_params.host_ethaddr,
rndis_ipa_params.device_ethaddr);
- rndis_ipa_supported = true;
ether_addr_copy(rndis->ethaddr, rndis_ipa_params.host_ethaddr);
rndis_ipa_params.device_ready_notify = rndis_net_ready_notify;
@@ -1256,19 +1259,9 @@ usb_function *rndis_qc_bind_config_vendor(struct usb_function_instance *fi,
rndis->func.resume = rndis_qc_resume;
rndis->func.free_func = rndis_qc_free;
- status = rndis_ipa_init(&rndis_ipa_params);
- if (status) {
- pr_err("%s: failed to init rndis_ipa\n", __func__);
- goto fail;
- }
-
_rndis_qc = rndis;
return &rndis->func;
-fail:
- kfree(rndis);
- _rndis_qc = NULL;
- return ERR_PTR(status);
}
static struct usb_function *qcrndis_alloc(struct usb_function_instance *fi)
diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c
index bbffc0635cf9..029634bd06d3 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c
@@ -5825,7 +5825,8 @@ int mdss_mdp_display_commit(struct mdss_mdp_ctl *ctl, void *arg,
/* update backlight in commit */
if (ctl->intf_type == MDSS_INTF_DSI && !ctl->is_video_mode &&
- ctl->mfd && ctl->mfd->bl_extn_level > 0) {
+ ctl->mfd && ctl->mfd->bl_extn_level > 0 &&
+ ctl->mfd->bl_extn_level != U64_MAX) {
if (!IS_CALIB_MODE_BL(ctl->mfd) && (!ctl->mfd->ext_bl_ctrl ||
!ctl->mfd->bl_level)) {
mutex_lock(&ctl->mfd->bl_lock);
diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
index 0ffe89c724c4..8c5f407c6510 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
@@ -2142,10 +2142,6 @@ static int mdss_mdp_cmd_wait4pingpong(struct mdss_mdp_ctl *ctl, void *arg)
mdss_fb_report_panel_dead(ctl->mfd);
} else if (ctx->pp_timeout_report_cnt == 0) {
MDSS_XLOG(0xbad);
- MDSS_XLOG_TOUT_HANDLER("mdp", "dsi0_ctrl", "dsi0_phy",
- "dsi1_ctrl", "dsi1_phy", "vbif", "vbif_nrt",
- "dbg_bus", "vbif_dbg_bus",
- "dsi_dbg_bus", "panic");
} else if (ctx->pp_timeout_report_cnt == MAX_RECOVERY_TRIALS) {
MDSS_XLOG(0xbad2);
MDSS_XLOG_TOUT_HANDLER("mdp", "dsi0_ctrl", "dsi0_phy",
diff --git a/include/crypto/ice.h b/include/crypto/ice.h
index 0b8f048f39cb..4c8faf14ff15 100644
--- a/include/crypto/ice.h
+++ b/include/crypto/ice.h
@@ -61,6 +61,13 @@ enum ice_crypto_data_unit {
ICE_CRYPTO_DATA_UNIT_64_KB = 7,
};
+enum ice_capability_index {
+ ICE_CRYPTO_MODE_XTS_128 = 0,
+ ICE_CRYPTO_MODE_CBC_128 = 1,
+ ICE_CRYPTO_MODE_XTS_256 = 3,
+ ICE_CRYPTO_MODE_CBC_256 = 4
+};
+
typedef void (*ice_error_cb)(void *, u32 error);
struct qcom_ice_variant_ops *qcom_ice_get_variant_ops(struct device_node *node);
diff --git a/include/linux/irq_sim.h b/include/linux/irq_sim.h
new file mode 100644
index 000000000000..0380d899b955
--- /dev/null
+++ b/include/linux/irq_sim.h
@@ -0,0 +1,44 @@
+#ifndef _LINUX_IRQ_SIM_H
+#define _LINUX_IRQ_SIM_H
+/*
+ * Copyright (C) 2017 Bartosz Golaszewski <brgl@bgdev.pl>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ */
+
+#include <linux/irq_work.h>
+#include <linux/device.h>
+
+/*
+ * Provides a framework for allocating simulated interrupts which can be
+ * requested like normal irqs and enqueued from process context.
+ */
+
+struct irq_sim_work_ctx {
+ struct irq_work work;
+ int irq;
+};
+
+struct irq_sim_irq_ctx {
+ int irqnum;
+ bool enabled;
+};
+
+struct irq_sim {
+ struct irq_sim_work_ctx work_ctx;
+ int irq_base;
+ unsigned int irq_count;
+ struct irq_sim_irq_ctx *irqs;
+};
+
+int irq_sim_init(struct irq_sim *sim, unsigned int num_irqs);
+int devm_irq_sim_init(struct device *dev, struct irq_sim *sim,
+ unsigned int num_irqs);
+void irq_sim_fini(struct irq_sim *sim);
+void irq_sim_fire(struct irq_sim *sim, unsigned int offset);
+int irq_sim_irqnum(struct irq_sim *sim, unsigned int offset);
+
+#endif /* _LINUX_IRQ_SIM_H */
diff --git a/include/linux/pfk.h b/include/linux/pfk.h
index d7405eac1623..5be7d9e1f8a8 100644
--- a/include/linux/pfk.h
+++ b/include/linux/pfk.h
@@ -33,7 +33,8 @@ struct blk_encryption_key {
};
int pfk_load_key_start(const struct bio *bio,
- struct ice_crypto_setting *ice_setting, bool *is_pfe, bool);
+ struct ice_crypto_setting *ice_setting,
+ bool *is_pfe, bool async, int ice_rev);
int pfk_load_key_end(const struct bio *bio, bool *is_pfe);
int pfk_remove_key(const unsigned char *key, size_t key_size);
bool pfk_allow_merge_bio(const struct bio *bio1, const struct bio *bio2);
@@ -41,7 +42,8 @@ void pfk_clear_on_reset(void);
#else
static inline int pfk_load_key_start(const struct bio *bio,
- struct ice_crypto_setting *ice_setting, bool *is_pfe, bool async)
+ struct ice_crypto_setting *ice_setting, bool *is_pfe,
+ bool async, int ice_rev)
{
return -ENODEV;
}
diff --git a/include/uapi/linux/msm_kgsl.h b/include/uapi/linux/msm_kgsl.h
index 943ba9ec33f6..8ffef5936bc4 100644
--- a/include/uapi/linux/msm_kgsl.h
+++ b/include/uapi/linux/msm_kgsl.h
@@ -332,6 +332,8 @@ enum kgsl_timestamp_type {
#define KGSL_PROP_UBWC_MODE 0x1B
#define KGSL_PROP_DEVICE_QTIMER 0x20
#define KGSL_PROP_L3_PWR_CONSTRAINT 0x22
+#define KGSL_PROP_SECURE_BUFFER_ALIGNMENT 0x23
+#define KGSL_PROP_SECURE_CTXT_SUPPORT 0x24
struct kgsl_shadowprop {
unsigned long gpuaddr;
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 3f3b7f848efe..aa035154bb72 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -521,7 +521,6 @@ static int cpuhp_up_callbacks(unsigned int cpu, struct cpuhp_cpu_state *st,
if (ret) {
st->target = prev_state;
undo_cpu_up(cpu, st);
- cpu_notify(CPU_UP_CANCELED, cpu);
break;
}
}
@@ -1381,7 +1380,6 @@ static struct cpuhp_step cpuhp_bp_states[] = {
.name = "notify:prepare",
.startup.single = notify_prepare,
.teardown.single = notify_dead,
- .skip_onerr = true,
.cant_stop = true,
},
/*
@@ -1487,7 +1485,6 @@ static struct cpuhp_step cpuhp_ap_states[] = {
.name = "notify:online",
.startup.single = notify_online,
.teardown.single = notify_down_prepare,
- .skip_onerr = true,
},
#endif
/*
diff --git a/kernel/irq/Kconfig b/kernel/irq/Kconfig
index 3bbfd6a9c475..9b2d34f6887b 100644
--- a/kernel/irq/Kconfig
+++ b/kernel/irq/Kconfig
@@ -59,6 +59,11 @@ config GENERIC_IRQ_CHIP
config IRQ_DOMAIN
bool
+# Support for simulated interrupts
+config IRQ_SIM
+ bool
+ select IRQ_WORK
+
# Support for hierarchical irq domains
config IRQ_DOMAIN_HIERARCHY
bool
diff --git a/kernel/irq/Makefile b/kernel/irq/Makefile
index 1d3ee3169202..2c0ba4e66023 100644
--- a/kernel/irq/Makefile
+++ b/kernel/irq/Makefile
@@ -3,6 +3,7 @@ obj-y := irqdesc.o handle.o manage.o spurious.o resend.o chip.o dummychip.o devr
obj-$(CONFIG_GENERIC_IRQ_CHIP) += generic-chip.o
obj-$(CONFIG_GENERIC_IRQ_PROBE) += autoprobe.o
obj-$(CONFIG_IRQ_DOMAIN) += irqdomain.o
+obj-$(CONFIG_IRQ_SIM) += irq_sim.o
obj-$(CONFIG_PROC_FS) += proc.o
obj-$(CONFIG_GENERIC_PENDING_IRQ) += migration.o
obj-$(CONFIG_GENERIC_IRQ_MIGRATION) += cpuhotplug.o
diff --git a/kernel/irq/irq_sim.c b/kernel/irq/irq_sim.c
new file mode 100644
index 000000000000..85690859a2a8
--- /dev/null
+++ b/kernel/irq/irq_sim.c
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2017 Bartosz Golaszewski <brgl@bgdev.pl>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ */
+
+#include <linux/slab.h>
+#include <linux/irq_sim.h>
+#include <linux/irq.h>
+
+struct irq_sim_devres {
+ struct irq_sim *sim;
+};
+
+static void irq_sim_irqmask(struct irq_data *data)
+{
+ struct irq_sim_irq_ctx *irq_ctx = irq_data_get_irq_chip_data(data);
+
+ irq_ctx->enabled = false;
+}
+
+static void irq_sim_irqunmask(struct irq_data *data)
+{
+ struct irq_sim_irq_ctx *irq_ctx = irq_data_get_irq_chip_data(data);
+
+ irq_ctx->enabled = true;
+}
+
+static struct irq_chip irq_sim_irqchip = {
+ .name = "irq_sim",
+ .irq_mask = irq_sim_irqmask,
+ .irq_unmask = irq_sim_irqunmask,
+};
+
+static void irq_sim_handle_irq(struct irq_work *work)
+{
+ struct irq_sim_work_ctx *work_ctx;
+
+ work_ctx = container_of(work, struct irq_sim_work_ctx, work);
+ handle_simple_irq(irq_to_desc(work_ctx->irq));
+}
+
+/**
+ * irq_sim_init - Initialize the interrupt simulator: allocate a range of
+ * dummy interrupts.
+ *
+ * @sim: The interrupt simulator object to initialize.
+ * @num_irqs: Number of interrupts to allocate
+ *
+ * On success: return the base of the allocated interrupt range.
+ * On failure: a negative errno.
+ */
+int irq_sim_init(struct irq_sim *sim, unsigned int num_irqs)
+{
+ int i;
+
+ sim->irqs = kmalloc_array(num_irqs, sizeof(*sim->irqs), GFP_KERNEL);
+ if (!sim->irqs)
+ return -ENOMEM;
+
+ sim->irq_base = irq_alloc_descs(-1, 0, num_irqs, 0);
+ if (sim->irq_base < 0) {
+ kfree(sim->irqs);
+ return sim->irq_base;
+ }
+
+ for (i = 0; i < num_irqs; i++) {
+ sim->irqs[i].irqnum = sim->irq_base + i;
+ sim->irqs[i].enabled = false;
+ irq_set_chip(sim->irq_base + i, &irq_sim_irqchip);
+ irq_set_chip_data(sim->irq_base + i, &sim->irqs[i]);
+ irq_set_handler(sim->irq_base + i, &handle_simple_irq);
+ irq_modify_status(sim->irq_base + i,
+ IRQ_NOREQUEST | IRQ_NOAUTOEN, IRQ_NOPROBE);
+ }
+
+ init_irq_work(&sim->work_ctx.work, irq_sim_handle_irq);
+ sim->irq_count = num_irqs;
+
+ return sim->irq_base;
+}
+EXPORT_SYMBOL_GPL(irq_sim_init);
+
+/**
+ * irq_sim_fini - Deinitialize the interrupt simulator: free the interrupt
+ * descriptors and allocated memory.
+ *
+ * @sim: The interrupt simulator to tear down.
+ */
+void irq_sim_fini(struct irq_sim *sim)
+{
+ irq_work_sync(&sim->work_ctx.work);
+ irq_free_descs(sim->irq_base, sim->irq_count);
+ kfree(sim->irqs);
+}
+EXPORT_SYMBOL_GPL(irq_sim_fini);
+
+static void devm_irq_sim_release(struct device *dev, void *res)
+{
+ struct irq_sim_devres *this = res;
+
+ irq_sim_fini(this->sim);
+}
+
+/**
+ * irq_sim_init - Initialize the interrupt simulator for a managed device.
+ *
+ * @dev: Device to initialize the simulator object for.
+ * @sim: The interrupt simulator object to initialize.
+ * @num_irqs: Number of interrupts to allocate
+ *
+ * On success: return the base of the allocated interrupt range.
+ * On failure: a negative errno.
+ */
+int devm_irq_sim_init(struct device *dev, struct irq_sim *sim,
+ unsigned int num_irqs)
+{
+ struct irq_sim_devres *dr;
+ int rv;
+
+ dr = devres_alloc(devm_irq_sim_release, sizeof(*dr), GFP_KERNEL);
+ if (!dr)
+ return -ENOMEM;
+
+ rv = irq_sim_init(sim, num_irqs);
+ if (rv < 0) {
+ devres_free(dr);
+ return rv;
+ }
+
+ dr->sim = sim;
+ devres_add(dev, dr);
+
+ return rv;
+}
+EXPORT_SYMBOL_GPL(devm_irq_sim_init);
+
+/**
+ * irq_sim_fire - Enqueue an interrupt.
+ *
+ * @sim: The interrupt simulator object.
+ * @offset: Offset of the simulated interrupt which should be fired.
+ */
+void irq_sim_fire(struct irq_sim *sim, unsigned int offset)
+{
+ if (sim->irqs[offset].enabled) {
+ sim->work_ctx.irq = irq_sim_irqnum(sim, offset);
+ irq_work_queue(&sim->work_ctx.work);
+ }
+}
+EXPORT_SYMBOL_GPL(irq_sim_fire);
+
+/**
+ * irq_sim_irqnum - Get the allocated number of a dummy interrupt.
+ *
+ * @sim: The interrupt simulator object.
+ * @offset: Offset of the simulated interrupt for which to retrieve
+ * the number.
+ */
+int irq_sim_irqnum(struct irq_sim *sim, unsigned int offset)
+{
+ return sim->irqs[offset].irqnum;
+}
+EXPORT_SYMBOL_GPL(irq_sim_irqnum);
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index de11b815ad0e..2839d86117a2 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -4678,7 +4678,7 @@ tracing_saved_tgids_read(struct file *file, char __user *ubuf,
preempt_disable();
arch_spin_lock(&trace_cmdline_lock);
- pids = kmalloc_array(savedcmd->cmdline_num, 2*sizeof(int), GFP_KERNEL);
+ pids = kmalloc_array(savedcmd->cmdline_num, 2*sizeof(int), GFP_ATOMIC);
if (!pids) {
arch_spin_unlock(&trace_cmdline_lock);
preempt_enable();
diff --git a/security/pfe/pfk.c b/security/pfe/pfk.c
index 0e153f2c8dd1..f9a629214091 100644
--- a/security/pfe/pfk.c
+++ b/security/pfe/pfk.c
@@ -347,7 +347,7 @@ static int pfk_get_key_for_bio(const struct bio *bio,
*/
int pfk_load_key_start(const struct bio *bio,
struct ice_crypto_setting *ice_setting, bool *is_pfe,
- bool async)
+ bool async, int ice_rev)
{
int ret = 0;
struct pfk_key_info key_info = {NULL, NULL, 0, 0};
@@ -388,7 +388,7 @@ int pfk_load_key_start(const struct bio *bio,
ret = pfk_kc_load_key_start(key_info.key, key_info.key_size,
key_info.salt, key_info.salt_size, &key_index, async,
- data_unit);
+ data_unit, ice_rev);
if (ret) {
if (ret != -EBUSY && ret != -EAGAIN)
pr_err("start: could not load key into pfk key cache, error %d\n",
diff --git a/security/pfe/pfk_ice.c b/security/pfe/pfk_ice.c
index 59c4adeaee47..e5ed3d6f8765 100644
--- a/security/pfe/pfk_ice.c
+++ b/security/pfe/pfk_ice.c
@@ -26,13 +26,19 @@
#include "pfk_ice.h"
-#define TZ_ES_CONFIG_SET_ICE_KEY 0x4
-#define TZ_ES_INVALIDATE_ICE_KEY 0x3
+#define TZ_ES_SET_ICE_KEY 0x2
+#define TZ_ES_CONFIG_SET_ICE_KEY 0x4
+#define TZ_ES_INVALIDATE_ICE_KEY 0x3
/* index 0 and 1 is reserved for FDE */
-#define MIN_ICE_KEY_INDEX 2
+#define MIN_ICE_KEY_INDEX 2
-#define MAX_ICE_KEY_INDEX 31
+#define MAX_ICE_KEY_INDEX 31
+#define ICE20 2
+
+#define TZ_ES_SET_ICE_KEY_ID \
+ TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_ES, \
+ TZ_ES_SET_ICE_KEY)
#define TZ_ES_CONFIG_SET_ICE_KEY_ID \
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_ES, \
@@ -42,6 +48,12 @@
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, \
TZ_SVC_ES, TZ_ES_INVALIDATE_ICE_KEY)
+#define TZ_ES_SET_ICE_KEY_PARAM_ID \
+ TZ_SYSCALL_CREATE_PARAM_ID_5( \
+ TZ_SYSCALL_PARAM_TYPE_VAL, \
+ TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \
+ TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL)
+
#define TZ_ES_CONFIG_SET_ICE_KEY_PARAM_ID \
TZ_SYSCALL_CREATE_PARAM_ID_5( \
TZ_SYSCALL_PARAM_TYPE_VAL, \
@@ -54,22 +66,16 @@
#define ICE_BUFFER_SIZE 64
-enum {
- TZ_CIPHER_MODE_XTS_128 = 0,
- TZ_CIPHER_MODE_CBC_128 = 1,
- TZ_CIPHER_MODE_XTS_256 = 3,
- TZ_CIPHER_MODE_CBC_256 = 4
-};
-
-static uint8_t ice_buffer[ICE_BUFFER_SIZE];
-
int qti_pfk_ice_set_key(uint32_t index, uint8_t *key, uint8_t *salt,
- char *storage_type, unsigned int data_unit)
+ char *storage_type, unsigned int data_unit,
+ int ice_rev)
{
struct scm_desc desc = {0};
int ret, ret1;
- char *tzbuf = (char *)ice_buffer;
char *s_type = storage_type;
+ char *ice_buffer = NULL;
+ char *tzbuf_salt = NULL;
+ char *tzbuf_key = NULL;
uint32_t smc_id = 0;
u32 size = ICE_BUFFER_SIZE / 2;
@@ -83,31 +89,59 @@ int qti_pfk_ice_set_key(uint32_t index, uint8_t *key, uint8_t *salt,
return -EINVAL;
}
- if (!tzbuf) {
- pr_err("%s No Memory\n", __func__);
- return -ENOMEM;
- }
-
if (s_type == NULL) {
pr_err("%s Invalid Storage type\n", __func__);
return -EINVAL;
}
- memset(tzbuf, 0, ICE_BUFFER_SIZE);
+ if (ice_rev > ICE20) {
+ ice_buffer = kzalloc(ICE_BUFFER_SIZE, GFP_KERNEL);
+ if (!ice_buffer)
+ return -ENOMEM;
- memcpy(ice_buffer, key, size);
- memcpy(ice_buffer + size, salt, size);
+ memset(ice_buffer, 0, ICE_BUFFER_SIZE);
+ memcpy(ice_buffer, key, size);
+ memcpy(ice_buffer + size, salt, size);
- dmac_flush_range(tzbuf, tzbuf + ICE_BUFFER_SIZE);
+ dmac_flush_range(ice_buffer, ice_buffer + ICE_BUFFER_SIZE);
- smc_id = TZ_ES_CONFIG_SET_ICE_KEY_ID;
+ smc_id = TZ_ES_CONFIG_SET_ICE_KEY_ID;
- desc.arginfo = TZ_ES_CONFIG_SET_ICE_KEY_PARAM_ID;
- desc.args[0] = index;
- desc.args[1] = virt_to_phys(tzbuf);
- desc.args[2] = ICE_BUFFER_SIZE;
- desc.args[3] = TZ_CIPHER_MODE_XTS_256;
- desc.args[4] = data_unit;
+ desc.arginfo = TZ_ES_CONFIG_SET_ICE_KEY_PARAM_ID;
+ desc.args[0] = index;
+ desc.args[1] = virt_to_phys(ice_buffer);
+ desc.args[2] = ICE_BUFFER_SIZE;
+ desc.args[3] = ICE_CRYPTO_MODE_XTS_256;
+ desc.args[4] = data_unit;
+ } else {
+ tzbuf_key = kzalloc((ICE_BUFFER_SIZE / 2), GFP_KERNEL);
+ if (tzbuf_key) {
+ tzbuf_salt = kzalloc((ICE_BUFFER_SIZE / 2), GFP_KERNEL);
+ if (!tzbuf_salt) {
+ kfree(tzbuf_key);
+ return -ENOMEM;
+ }
+ } else {
+ return -ENOMEM;
+ }
+
+ memset(tzbuf_key, 0, size);
+ memset(tzbuf_salt, 0, size);
+ memcpy(tzbuf_key, key, size);
+ memcpy(tzbuf_salt, salt, size);
+
+ dmac_flush_range(tzbuf_key, tzbuf_key + size);
+ dmac_flush_range(tzbuf_salt, tzbuf_salt + size);
+
+ smc_id = TZ_ES_SET_ICE_KEY_ID;
+
+ desc.arginfo = TZ_ES_SET_ICE_KEY_PARAM_ID;
+ desc.args[0] = index;
+ desc.args[1] = virt_to_phys(tzbuf_key);
+ desc.args[2] = size;
+ desc.args[3] = virt_to_phys(tzbuf_salt);
+ desc.args[4] = size;
+ }
ret = qcom_ice_setup_ice_hw((const char *)s_type, true);
@@ -139,6 +173,13 @@ int qti_pfk_ice_set_key(uint32_t index, uint8_t *key, uint8_t *salt,
pr_err("%s: Error %d disabling clocks\n", __func__, ret1);
out:
+ if (ice_rev > ICE20) {
+ kfree(ice_buffer);
+ } else {
+ kfree(tzbuf_key);
+ kfree(tzbuf_salt);
+ }
+
return ret;
}
diff --git a/security/pfe/pfk_ice.h b/security/pfe/pfk_ice.h
index 8fd0d83b3ae0..5c85349ab02b 100644
--- a/security/pfe/pfk_ice.h
+++ b/security/pfe/pfk_ice.h
@@ -26,7 +26,8 @@ int pfk_ice_init(void);
int pfk_ice_deinit(void);
int qti_pfk_ice_set_key(uint32_t index, uint8_t *key, uint8_t *salt,
- char *storage_type, unsigned int data_unit);
+ char *storage_type, unsigned int data_unit,
+ int ice_rev);
int qti_pfk_ice_invalidate_key(uint32_t index, char *storage_type);
diff --git a/security/pfe/pfk_kc.c b/security/pfe/pfk_kc.c
index a8e990926af3..33b8d3d9b0af 100644
--- a/security/pfe/pfk_kc.c
+++ b/security/pfe/pfk_kc.c
@@ -407,7 +407,7 @@ static void kc_clear_entry(struct kc_entry *entry)
*/
static int kc_update_entry(struct kc_entry *entry, const unsigned char *key,
size_t key_size, const unsigned char *salt, size_t salt_size,
- unsigned int data_unit)
+ unsigned int data_unit, int ice_rev)
{
int ret;
@@ -424,7 +424,7 @@ static int kc_update_entry(struct kc_entry *entry, const unsigned char *key,
kc_spin_unlock();
ret = qti_pfk_ice_set_key(entry->key_index, entry->key,
- entry->salt, s_type, data_unit);
+ entry->salt, s_type, data_unit, ice_rev);
kc_spin_lock();
return ret;
@@ -490,7 +490,7 @@ int pfk_kc_deinit(void)
*/
int pfk_kc_load_key_start(const unsigned char *key, size_t key_size,
const unsigned char *salt, size_t salt_size, u32 *key_index,
- bool async, unsigned int data_unit)
+ bool async, unsigned int data_unit, int ice_rev)
{
int ret = 0;
struct kc_entry *entry = NULL;
@@ -556,7 +556,7 @@ int pfk_kc_load_key_start(const unsigned char *key, size_t key_size,
}
case (FREE):
ret = kc_update_entry(entry, key, key_size, salt, salt_size,
- data_unit);
+ data_unit, ice_rev);
if (ret) {
entry->state = SCM_ERROR;
entry->scm_error = ret;
diff --git a/security/pfe/pfk_kc.h b/security/pfe/pfk_kc.h
index 89d40be95fdf..0f50a60013a0 100644
--- a/security/pfe/pfk_kc.h
+++ b/security/pfe/pfk_kc.h
@@ -19,7 +19,7 @@ int pfk_kc_init(void);
int pfk_kc_deinit(void);
int pfk_kc_load_key_start(const unsigned char *key, size_t key_size,
const unsigned char *salt, size_t salt_size, u32 *key_index,
- bool async, unsigned int data_unit);
+ bool async, unsigned int data_unit, int ice_rev);
void pfk_kc_load_key_end(const unsigned char *key, size_t key_size,
const unsigned char *salt, size_t salt_size);
int pfk_kc_remove_key_with_salt(const unsigned char *key, size_t key_size,
diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c
index fc9c9b0ad5f6..63e40b5275a0 100644
--- a/sound/soc/soc-ops.c
+++ b/sound/soc/soc-ops.c
@@ -379,7 +379,7 @@ int snd_soc_get_volsw_sx(struct snd_kcontrol *kcontrol,
unsigned int rshift = mc->rshift;
int max = mc->max;
int min = mc->min;
- unsigned int mask = (1 << (fls(min + max) - 1)) - 1;
+ unsigned int mask = (1U << (fls(min + max) - 1)) - 1;
unsigned int val;
int ret;
@@ -424,7 +424,7 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,
unsigned int rshift = mc->rshift;
int max = mc->max;
int min = mc->min;
- unsigned int mask = (1 << (fls(min + max) - 1)) - 1;
+ unsigned int mask = (1U << (fls(min + max) - 1)) - 1;
int err = 0;
unsigned int val, val_mask, val2 = 0;