diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2018-09-24 01:33:43 -0700 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2018-09-24 01:33:43 -0700 |
commit | fb86605f6ff40447fb057ed0ed6142047eba27b2 (patch) | |
tree | facccc248d0943eb8c7041e105ecd02e41a4ad71 | |
parent | 9f90e37983c3de5c08ce900be3d576459743315e (diff) | |
parent | 01d21eddacfd957e34297f6ea95d0bf7c8a5dcaf (diff) |
Merge 01d21eddacfd957e34297f6ea95d0bf7c8a5dcaf on remote branchLA.UM.7.3.r1-05500-sdm845.0
Change-Id: Id65e9e654ef642ce2e99eca25224acc6a747cceb
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, ®); + + 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, ®); + + 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; |