diff options
Diffstat (limited to 'recipes-kernel/linux')
113 files changed, 10383 insertions, 128 deletions
diff --git a/recipes-kernel/linux/linux-linaro-qcom.inc b/recipes-kernel/linux/linux-linaro-qcom.inc index 21f0ae6..f7c1c96 100644 --- a/recipes-kernel/linux/linux-linaro-qcom.inc +++ b/recipes-kernel/linux/linux-linaro-qcom.inc @@ -1,27 +1,33 @@ -# Copyright (C) 2014 Linaro +# Copyright (C) 2014-2021 Linaro # Copyright (C) 2012, 2013 O.S. Systems Software LTDA. # Released under the MIT license (see COPYING.MIT for the terms) -DESCRIPTION = "Linux kernel for MSM platforms" -LICENSE = "GPLv2" +DESCRIPTION ??= "Linaro Qualcomm Landing team ${PV} Kernel" +LICENSE = "GPL-2.0-only" +LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" inherit kernel -# Put a local version until we have a true SRCREV to point to -LOCALVERSION ?= "+linaro" +LOCALVERSION ?= "-linaro-lt-qcom" SCMVERSION ?= "y" -LINUX_LINARO_QCOM_GIT ?= "git://git.linaro.org/landing-teams/working/qualcomm/kernel.git;protocol=https" +SRCBRANCH = "release/qcomlt-${PV}" + +COMPATIBLE_MACHINE = "(qcom)" + +LINUX_LINARO_QCOM_GIT ?= "git://git.codelinaro.org/linaro/qcomlt/kernel.git;protocol=https" SRC_URI = "${LINUX_LINARO_QCOM_GIT};branch=${SRCBRANCH}" S = "${WORKDIR}/git" -KERNEL_DEFCONFIG_aarch64 ?= "${S}/arch/arm64/configs/defconfig" -KERNEL_DEFCONFIG_apq8064 ?= "${S}/arch/arm/configs/qcom_defconfig" +KERNEL_DEFCONFIG:aarch64 ?= "${S}/arch/arm64/configs/defconfig" +KERNEL_DEFCONFIG:arm ?= "${S}/arch/arm/configs/qcom_defconfig" KERNEL_CONFIG_FRAGMENTS += "${S}/kernel/configs/distro.config" +inherit linux-qcom-bootimg + kernel_conf_variable() { - CONF_SED_SCRIPT="$CONF_SED_SCRIPT /CONFIG_$1[ =]/d;" + sed -e "/CONFIG_$1[ =]/d;" -i ${B}/.config if test "$2" = "n" then echo "# CONFIG_$1 is not set" >> ${B}/.config @@ -30,19 +36,16 @@ kernel_conf_variable() { fi } -do_configure_prepend() { - echo "" > ${B}/.config - CONF_SED_SCRIPT="" - - kernel_conf_variable LOCALVERSION "\"${LOCALVERSION}\"" - kernel_conf_variable LOCALVERSION_AUTO y - +do_configure:prepend() { if [ -f '${WORKDIR}/defconfig' ]; then - sed -e "${CONF_SED_SCRIPT}" < '${WORKDIR}/defconfig' >> '${B}/.config' + cp '${WORKDIR}/defconfig' '${B}/.config' else - sed -e "${CONF_SED_SCRIPT}" < '${KERNEL_DEFCONFIG}' >> '${B}/.config' + cp '${KERNEL_DEFCONFIG}' '${B}/.config' fi + kernel_conf_variable LOCALVERSION "\"${LOCALVERSION}\"" + kernel_conf_variable LOCALVERSION_AUTO y + if [ "${SCMVERSION}" = "y" ]; then # Add GIT revision to the local version head=`git --git-dir=${S}/.git rev-parse --verify --short HEAD 2> /dev/null` @@ -76,17 +79,8 @@ do_configure_prepend() { # Now that all the fragments are located merge them. ( cd ${WORKDIR} && ${S}/scripts/kconfig/merge_config.sh -m -r -O ${B} ${B}/.config ${KERNEL_CONFIG_FRAGMENTS} 1>&2 ) fi - - yes '' | oe_runmake -C ${S} O=${B} oldconfig - oe_runmake -C ${S} O=${B} savedefconfig && cp ${B}/defconfig ${WORKDIR}/defconfig.saved } -# append DTB -do_compile_append() { - if ! [ -e ${B}/arch/${ARCH}/boot/dts/${KERNEL_DEVICETREE} ] ; then - oe_runmake ${KERNEL_DEVICETREE} - fi - cp arch/${ARCH}/boot/${KERNEL_IMAGETYPE} arch/${ARCH}/boot/${KERNEL_IMAGETYPE}.backup - cat arch/${ARCH}/boot/${KERNEL_IMAGETYPE}.backup arch/${ARCH}/boot/dts/${KERNEL_DEVICETREE} > arch/${ARCH}/boot/${KERNEL_IMAGETYPE} - rm -f arch/${ARCH}/boot/${KERNEL_IMAGETYPE}.backup +do_configure:append() { + oe_runmake -C ${S} O=${B} savedefconfig && cp ${B}/defconfig ${WORKDIR}/defconfig.saved } diff --git a/recipes-kernel/linux/linux-linaro-qcomlt_4.14.bb b/recipes-kernel/linux/linux-linaro-qcomlt_4.14.bb deleted file mode 100644 index 1cc27c7..0000000 --- a/recipes-kernel/linux/linux-linaro-qcomlt_4.14.bb +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (C) 2014-2018 Linaro -# Released under the MIT license (see COPYING.MIT for the terms) - -DESCRIPTION = "Linaro Qualcomm Landing team 4.14 Kernel" -LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7" - -require recipes-kernel/linux/linux-linaro-qcom.inc -require recipes-kernel/linux/linux-qcom-bootimg.inc - -LOCALVERSION ?= "-linaro-lt-qcom" -SRCBRANCH ?= "release/qcomlt-4.14" -SRCREV ?= "8bdd343f96dc838eefba94a051e84c6db4d1c55d" - -COMPATIBLE_MACHINE = "(apq8064|apq8016|apq8096)" - -# Wifi firmware has a recognizable arch :( -ERROR_QA_remove = "arch" diff --git a/recipes-kernel/linux/linux-linaro-qcomlt_5.2.bb b/recipes-kernel/linux/linux-linaro-qcomlt_5.2.bb deleted file mode 100644 index 77dfbcd..0000000 --- a/recipes-kernel/linux/linux-linaro-qcomlt_5.2.bb +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (C) 2014-2019 Linaro -# Released under the MIT license (see COPYING.MIT for the terms) - -DESCRIPTION = "Linaro Qualcomm Landing team 5.2 Kernel" -LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814" - -require recipes-kernel/linux/linux-linaro-qcom.inc -require recipes-kernel/linux/linux-qcom-bootimg.inc - -LOCALVERSION ?= "-linaro-lt-qcom" -SRCBRANCH ?= "release/db845c/qcomlt-5.2" -SRCREV ?= "13e8268d9b5cf3980b6e2766bf00439001c363fd" - -COMPATIBLE_MACHINE = "(sdm845|qcs404)" - -# Wifi firmware has a recognizable arch :( -ERROR_QA_remove = "arch" diff --git a/recipes-kernel/linux/linux-linaro-qcomlt_5.4.bb b/recipes-kernel/linux/linux-linaro-qcomlt_5.4.bb deleted file mode 100644 index 130cfb3..0000000 --- a/recipes-kernel/linux/linux-linaro-qcomlt_5.4.bb +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (C) 2014-2019 Linaro -# Released under the MIT license (see COPYING.MIT for the terms) - -DESCRIPTION = "Linaro Qualcomm Landing team 5.4 Kernel" -LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814" - -require recipes-kernel/linux/linux-linaro-qcom.inc -require recipes-kernel/linux/linux-qcom-bootimg.inc - -LOCALVERSION ?= "-linaro-lt-qcom" -SRCBRANCH ?= "release/qcomlt-5.4" -SRCREV ?= "8c79b3d123550fde184d9ef6b3d5e2e530abe0bd" - -COMPATIBLE_MACHINE = "(apq8016|apq8096|sdm845)" - -# Wifi firmware has a recognizable arch :( -ERROR_QA_remove = "arch" diff --git a/recipes-kernel/linux/linux-linaro-qcomlt_6.6.bb b/recipes-kernel/linux/linux-linaro-qcomlt_6.6.bb new file mode 100644 index 0000000..37e0cc4 --- /dev/null +++ b/recipes-kernel/linux/linux-linaro-qcomlt_6.6.bb @@ -0,0 +1,6 @@ +# Copyright (C) 2021 Linaro +# Released under the MIT license (see COPYING.MIT for the terms) + +require recipes-kernel/linux/linux-linaro-qcom.inc + +SRCREV = "3565a579b97814fdc93898c9279f6a05106f9a14" diff --git a/recipes-kernel/linux/linux-qcom-bootimg.inc b/recipes-kernel/linux/linux-qcom-bootimg.inc deleted file mode 100644 index 5177feb..0000000 --- a/recipes-kernel/linux/linux-qcom-bootimg.inc +++ /dev/null @@ -1,48 +0,0 @@ -DEPENDS += "skales-native" - -QCOM_BOOTIMG_ROOTFS ?= "undefined" -SD_QCOM_BOOTIMG_ROOTFS ?= "undefined" - -# set output file names -BOOT_IMAGE_BASE_NAME = "boot-${KERNEL_IMAGE_NAME}" -BOOT_IMAGE_SYMLINK_NAME = "boot-${KERNEL_IMAGE_LINK_NAME}" -SD_BOOT_IMAGE_BASE_NAME = "boot-sd${KERNEL_IMAGE_NAME}" -SD_BOOT_IMAGE_SYMLINK_NAME = "boot-sd-${KERNEL_IMAGE_LINK_NAME}" -KERNEL_CMDLINE = "root=/dev/${1} rw rootwait console=${ttydev},${baudrate}n8" -KERNEL_CMDLINE_append_dragonboard-845c = " clk_ignore_unused pd_ignore_unused" - -# param ${1} partition where rootfs is located -# param ${2} output boot image file name -priv_make_image() { - ${STAGING_BINDIR_NATIVE}/skales/mkbootimg --kernel ${B}/arch/${ARCH}/boot/${KERNEL_IMAGETYPE} \ - --ramdisk ${B}/initrd.img \ - --output ${DEPLOYDIR}/${2}.img \ - --pagesize ${QCOM_BOOTIMG_PAGE_SIZE} \ - --base ${QCOM_BOOTIMG_KERNEL_BASE} \ - --cmdline "${KERNEL_CMDLINE}" -} - -do_deploy_append() { - - tmp="${SERIAL_CONSOLES}" - baudrate=`echo $tmp | sed 's/\;.*//'` - ttydev=`echo $tmp | sed -e 's/^[0-9]*\;//' -e 's/\s.*//' -e 's/\;.*//'` - - # mkbootimg requires an initrd file, make fake one that will be ignored - # during boot - echo "This is not an initrd" > ${B}/initrd.img - - # don't build bootimg if rootfs partition is not defined - if [ "${QCOM_BOOTIMG_ROOTFS}" == "undefined"]; then - bbfatal "Rootfs partition must be defined" - fi - - priv_make_image ${QCOM_BOOTIMG_ROOTFS} ${BOOT_IMAGE_BASE_NAME} - ln -sf ${BOOT_IMAGE_BASE_NAME}.img ${DEPLOYDIR}/${BOOT_IMAGE_SYMLINK_NAME}.img - - # build sd boot image only for machines supporting it. - if [ "${SD_QCOM_BOOTIMG_ROOTFS}" != "undefined" ]; then - priv_make_image ${SD_QCOM_BOOTIMG_ROOTFS} ${SD_BOOT_IMAGE_BASE_NAME} - ln -sf ${SD_BOOT_IMAGE_BASE_NAME}.img ${DEPLOYDIR}/${SD_BOOT_IMAGE_SYMLINK_NAME}.img - fi -} diff --git a/recipes-kernel/linux/linux-yocto/0001-ASoC-codecs-wsa881x-set-clk_stop_mode1-flag.patch b/recipes-kernel/linux/linux-yocto/0001-ASoC-codecs-wsa881x-set-clk_stop_mode1-flag.patch new file mode 100644 index 0000000..e4aabb9 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/0001-ASoC-codecs-wsa881x-set-clk_stop_mode1-flag.patch @@ -0,0 +1,30 @@ +From 3565a579b97814fdc93898c9279f6a05106f9a14 Mon Sep 17 00:00:00 2001 +From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> +Date: Fri, 19 Apr 2024 15:00:12 +0100 +Subject: [PATCH] ASoC: codecs: wsa881x: set clk_stop_mode1 flag + +WSA881x codecs do not retain the state while clock is stopped, so mark +this with clk_stop_mode1 flag. + +Fixes: a0aab9e1404a ("ASoC: codecs: add wsa881x amplifier support") +Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git/commit/?id=32ac501957e5f68fe0e4bf88fb4db75cfb8f6566] +--- + sound/soc/codecs/wsa881x.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/sound/soc/codecs/wsa881x.c b/sound/soc/codecs/wsa881x.c +index 3c025dabaf7a..1253695bebd8 100644 +--- a/sound/soc/codecs/wsa881x.c ++++ b/sound/soc/codecs/wsa881x.c +@@ -1155,6 +1155,7 @@ static int wsa881x_probe(struct sdw_slave *pdev, + pdev->prop.sink_ports = GENMASK(WSA881X_MAX_SWR_PORTS, 0); + pdev->prop.sink_dpn_prop = wsa_sink_dpn_prop; + pdev->prop.scp_int1_mask = SDW_SCP_INT1_BUS_CLASH | SDW_SCP_INT1_PARITY; ++ pdev->prop.clk_stop_mode1 = true; + gpiod_direction_output(wsa881x->sd_n, !wsa881x->sd_n_val); + + wsa881x->regmap = devm_regmap_init_sdw(pdev, &wsa881x_regmap_config); +-- +2.43.0 + diff --git a/recipes-kernel/linux/linux-yocto/0001-arm64-dts-qcom-qcm2290-temporarily-disable-cluster-i.patch b/recipes-kernel/linux/linux-yocto/0001-arm64-dts-qcom-qcm2290-temporarily-disable-cluster-i.patch new file mode 100644 index 0000000..80ff01e --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/0001-arm64-dts-qcom-qcm2290-temporarily-disable-cluster-i.patch @@ -0,0 +1,61 @@ +From bf26272a429b9e33ba5e8bc9ada9ec794b5e8610 Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Date: Wed, 19 Jul 2023 21:04:47 +0300 +Subject: [PATCH] arm64: dts: qcom: qcm2290: temporarily disable cluster idle + state + +For some reason cluster idle state causes the board to hang after boot. +Disable it to make it work properly. + +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Inappropriate [need to find the issue first] +--- + arch/arm64/boot/dts/qcom/qcm2290.dtsi | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/arch/arm64/boot/dts/qcom/qcm2290.dtsi b/arch/arm64/boot/dts/qcom/qcm2290.dtsi +index 1d1de156f8f0..d1f0aa828234 100644 +--- a/arch/arm64/boot/dts/qcom/qcm2290.dtsi ++++ b/arch/arm64/boot/dts/qcom/qcm2290.dtsi +@@ -170,32 +170,34 @@ psci { + + CPU_PD0: power-domain-cpu0 { + #power-domain-cells = <0>; +- power-domains = <&CLUSTER_PD>; ++ //power-domains = <&CLUSTER_PD>; + domain-idle-states = <&CPU_SLEEP>; + }; + + CPU_PD1: power-domain-cpu1 { + #power-domain-cells = <0>; +- power-domains = <&CLUSTER_PD>; ++ //power-domains = <&CLUSTER_PD>; + domain-idle-states = <&CPU_SLEEP>; + }; + + CPU_PD2: power-domain-cpu2 { + #power-domain-cells = <0>; +- power-domains = <&CLUSTER_PD>; ++ //power-domains = <&CLUSTER_PD>; + domain-idle-states = <&CPU_SLEEP>; + }; + + CPU_PD3: power-domain-cpu3 { + #power-domain-cells = <0>; +- power-domains = <&CLUSTER_PD>; ++ //power-domains = <&CLUSTER_PD>; + domain-idle-states = <&CPU_SLEEP>; + }; + ++#if 0 + CLUSTER_PD: power-domain-cpu-cluster { + #power-domain-cells = <0>; + domain-idle-states = <&CLUSTER_SLEEP>; + }; ++#endif + }; + + reserved_memory: reserved-memory { +-- +2.42.0 + diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-apq8064.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-apq8064.cfg new file mode 100644 index 0000000..c633a6a --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-apq8064.cfg @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: MIT + +CONFIG_ARCH_MSM8960=y +CONFIG_MSM_GCC_8960=y +CONFIG_MSM_LCC_8960=y +CONFIG_MSM_MMCC_8960=y +CONFIG_PINCTRL_APQ8064=y + +CONFIG_PHY_QCOM_APQ8064_SATA=y + +CONFIG_QCOM_CLK_RPM=y +CONFIG_REGULATOR_QCOM_RPM=y +CONFIG_RPMSG_QCOM_GLINK_RPM=y +CONFIG_RPMSG_QCOM_GLINK_SMEM=y + +# legacy boards +CONFIG_RPMSG_QCOM_SMD=y + +CONFIG_MSM_IOMMU=y diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-apq8064.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-apq8064.scc new file mode 100644 index 0000000..3040257 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-apq8064.scc @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +#kconf hardware qcom-rpm.cfg +kconf hardware qcom-apq8064.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-armv7a-standard.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-armv7a-standard.scc new file mode 100644 index 0000000..240f154 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-armv7a-standard.scc @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: MIT + +define KMACHINE qcom-armv7a +define KTYPE standard +define KARCH arm + +include ktypes/standard/standard.scc nocfg +branch qcom-armv7a + +include qcom-armv7a.scc + +#include features/bluetooth/bluetooth.scc +include features/cgroups/cgroups.scc +include features/fuse/fuse.scc +include features/transparent-hugepage/transparent-hugepage.cfg +include features/usb-net/usb-net.scc + +include cfg/fs/devtmpfs.scc +include cfg/fs/debugfs.scc +include cfg/fs/ext2.scc +include cfg/fs/ext4.scc +include cfg/fs/vfat.scc + +include cfg/timer/no_hz.scc + +#kconf hardware qcom-extra.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-armv7a.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-armv7a.scc new file mode 100644 index 0000000..7006b1a --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-armv7a.scc @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: MIT + +kconf hardware qcom.cfg + +include qcom-apq8064.scc +#include qcom-msm8974.scc + +include features/i2c/i2c.scc +include features/hrt/hrt.scc +include features/net/net.scc +include features/pci/pci.scc +include features/power/arm.scc +include features/spi/spi.scc +include features/usb/usb-base.scc +include features/leds/leds.scc +include features/pwm/pwm.scc + +include cfg/timer/rtc.scc +include cfg/dmaengine.scc diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-msm8974.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-msm8974.cfg new file mode 100644 index 0000000..3a21c88 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-msm8974.cfg @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: MIT + +CONFIG_ARCH_MSM8974=y +CONFIG_MSM_GCC_8974=y +CONFIG_MSM_MMCC_8974=y +CONFIG_INTERCONNECT_QCOM_MSM8974=y +CONFIG_PINCTRL_MSM8X74=y + +CONFIG_EXTCON_QCOM_SPMI_MISC=y diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-msm8974.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-msm8974.scc new file mode 100644 index 0000000..eb866ed --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-msm8974.scc @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +kconf hardware qcom-rpm.cfg +kconf hardware qcom-msm8974.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-rpm.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-rpm.cfg new file mode 120000 index 0000000..a39c26f --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom-rpm.cfg @@ -0,0 +1 @@ +../qcom-armv8a/qcom-rpm.cfg
\ No newline at end of file diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom.cfg new file mode 100644 index 0000000..99eff38 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv7a/qcom.cfg @@ -0,0 +1,204 @@ +# SPDX-License-Identifier: MIT + +CONFIG_ARCH_QCOM=y +CONFIG_ARM_QCOM_CPUFREQ_NVMEM=y +CONFIG_CMA=y +CONFIG_DMA_CMA=y +CONFIG_ARM_THUMBEE=y +CONFIG_VFP=y +CONFIG_NEON=y +CONFIG_VDSO=y + +CONFIG_SMP=y +CONFIG_SCHED_MC=y + +CONFIG_ARM_APPENDED_DTB=y +CONFIG_ARM_ATAG_DTB_COMPAT=y + +# CONFIG_ARM_CPUIDLE is not set +CONFIG_ARM_QCOM_SPM_CPUIDLE=y + +CONFIG_QCOM_SMSM=y + +CONFIG_QRTR=y +CONFIG_QRTR_SMD=y +CONFIG_QRTR_MHI=m + +CONFIG_BT=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_QCA=y + +CONFIG_COMMON_CLK_QCOM=y +CONFIG_KRAITCC=y +CONFIG_KPSS_XCC=y + +CONFIG_QCOM_GSBI=y + +CONFIG_CRYPTO_DEV_QCE=m +CONFIG_CRYPTO_DEV_QCOM_RNG=y + +CONFIG_HWSPINLOCK=y +CONFIG_HWSPINLOCK_QCOM=y + +CONFIG_INTERCONNECT=y +CONFIG_INTERCONNECT_QCOM=y + +CONFIG_MAILBOX=y + +CONFIG_MHI_BUS=m + +CONFIG_NVMEM=y +CONFIG_NVMEM_QCOM_QFPROM=y + +CONFIG_PCIE_QCOM=y + +CONFIG_PINCTRL_MSM=y +CONFIG_PINCTRL_QCOM_SPMI_PMIC=y +CONFIG_PINCTRL_QCOM_SSBI_PMIC=y + +CONFIG_QCOM_Q6V5_ADSP=m +CONFIG_QCOM_Q6V5_MSS=m +CONFIG_QCOM_Q6V5_PAS=m +CONFIG_QCOM_SYSMON=m +CONFIG_QCOM_Q6V5_WCSS=m +CONFIG_QCOM_WCNSS_PIL=m + +CONFIG_REMOTEPROC=y + +CONFIG_QCOM_APR=m +CONFIG_QCOM_FASTRPC=m +CONFIG_QCOM_IPA=m +CONFIG_QCOM_SMEM=y +CONFIG_QCOM_ICC_BWMON=y + +CONFIG_SERIAL_DEV_BUS=y + +CONFIG_SOUND=m +CONFIG_SND=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_QCOM=m +CONFIG_SND_SOC_HDMI_CODEC=m +CONFIG_SOUNDWIRE=m +CONFIG_SOUNDWIRE_QCOM=m + +# CONFIG_MOUSE_PS2 is not set +# CONFIG_KEYBOARD_ATKBD is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_PM8941_PWRKEY=y +CONFIG_INPUT_PMIC8XXX_PWRKEY=y +CONFIG_SERIAL_MSM=y +CONFIG_SERIAL_MSM_CONSOLE=y + +CONFIG_I2C_QUP=y +CONFIG_SPI_QUP=y + +CONFIG_MFD_PM8XXX=y +CONFIG_MFD_QCOM_RPM=y + +CONFIG_SPMI=y +CONFIG_SPMI_MSM_PMIC_ARB=y +CONFIG_MFD_SPMI_PMIC=y + +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_MSM=y +CONFIG_POWER_RESET_QCOM_PON=y +CONFIG_REBOOT_MODE=y + +CONFIG_IIO=y +CONFIG_QCOM_SPMI_IADC=m + +CONFIG_THERMAL=y +CONFIG_THERMAL_HWMON=y +CONFIG_PM_DEVFREQ=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_QCOM_TSENS=y +CONFIG_QCOM_SPMI_ADC_TM5=m + +CONFIG_WATCHDOG_CORE=y +CONFIG_QCOM_WDT=y + +CONFIG_SLIMBUS=m + +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_QCOM_SPMI=y +CONFIG_REGULATOR_QCOM_USB_VBUS=y + +CONFIG_DRM=y +CONFIG_DRM_MSM=y +CONFIG_DRM_MSM_MDP4=y +CONFIG_DRM_MSM_MDP5=y +# CONFIG_DRM_MSM_DPU is not set +# CONFIG_DRM_MSM_DP is not set +CONFIG_DRM_MSM_DSI=y +CONFIG_DRM_MSM_DSI_28NM_PHY=y +CONFIG_DRM_MSM_DSI_20NM_PHY=y +CONFIG_DRM_MSM_DSI_28NM_8960_PHY=y +# CONFIG_DRM_MSM_DSI_14NM_PHY is not set +# CONFIG_DRM_MSM_DSI_10NM_PHY is not set +# CONFIG_DRM_MSM_DSI_7NM_PHY is not set +CONFIG_DRM_MSM_HDMI=y +CONFIG_DRM_PANEL_SIMPLE=y +CONFIG_DRM_DISPLAY_CONNECTOR=y + +CONFIG_BACKLIGHT_CLASS_DEVICE=y + +CONFIG_FB=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_LOGO=y + +CONFIG_EXTCON=y + +CONFIG_USB_GADGET=y +CONFIG_USB_CONFIGFS=y +CONFIG_USB_CONFIGFS_F_FS=y + +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_CHIPIDEA=y +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_CHIPIDEA_MSM=y + +CONFIG_USB_DWC3=y + + +CONFIG_MMC=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_MSM=y + +CONFIG_CFG80211=m +CONFIG_MAC80211=m +CONFIG_CRYPTO_MICHAEL_MIC=m + +CONFIG_LEDS_CLASS_MULTICOLOR=y +CONFIG_LEDS_QCOM_LPG=y + +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_DRV_PM8XXX=y + +CONFIG_QCOM_BAM_DMA=y +CONFIG_QCOM_LLCC=y +CONFIG_QCOM_OCMEM=y +CONFIG_QCOM_RMTFS_MEM=y +CONFIG_QCOM_SOCINFO=y +CONFIG_QCOM_SPM=y +CONFIG_QCOM_STATS=y +CONFIG_QCOM_WCNSS_CTRL=m +CONFIG_QCOM_SMP2P=y + +CONFIG_RESET_QCOM_PDC=y + +CONFIG_QCOM_PM8XXX_XOADC=y + +CONFIG_GENERIC_PHY=y +CONFIG_PHY_QCOM_QMP=y +# CONFIG_PHY_QCOM_QMP_PCIE is not set +# CONFIG_PHY_QCOM_QMP_UFS is not set +CONFIG_PHY_QCOM_QMP_USB=y +CONFIG_PHY_QCOM_USB_HS=y + +CONFIG_SLIM_QCOM_CTRL=m +CONFIG_SLIM_QCOM_NGD_CTRL=m diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-armv8a-standard.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-armv8a-standard.scc new file mode 100644 index 0000000..499d0b2 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-armv8a-standard.scc @@ -0,0 +1,29 @@ +# SPDX-License-Identifier: MIT + +define KMACHINE qcom-armv8a +define KTYPE standard +define KARCH arm64 + +include ktypes/standard/standard.scc nocfg +branch qcom-armv8a + +include qcom-armv8a.scc + +#include features/bluetooth/bluetooth.scc +include features/cgroups/cgroups.scc +include features/fuse/fuse.scc +include features/transparent-hugepage/transparent-hugepage.cfg +include features/usb-net/usb-net.scc + +include cfg/fs/devtmpfs.scc +include cfg/fs/debugfs.scc +include cfg/fs/ext2.scc +include cfg/fs/ext4.scc +include cfg/fs/vfat.scc + +include cfg/timer/no_hz.scc + +# enable the ability to run 32 bit apps +include arch/arm/32bit-compat.scc + +kconf hardware qcom-extra.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-armv8a.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-armv8a.scc new file mode 100644 index 0000000..06ae07c --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-armv8a.scc @@ -0,0 +1,25 @@ +# SPDX-License-Identifier: MIT + +kconf hardware qcom.cfg + +include qcom-msm8916.scc +include qcom-msm8996.scc +include qcom-qcm2290.scc +include qcom-qcm6490.scc +include qcom-sdm845.scc +include qcom-sm6115.scc +include qcom-sm8250.scc +include qcom-sm8450.scc + +include features/i2c/i2c.scc +include features/hrt/hrt.scc +include features/net/net.scc +include features/pci/pci.scc +include features/power/arm.scc +include features/spi/spi.scc +include features/usb/usb-base.scc +include features/leds/leds.scc +include features/pwm/pwm.scc + +include cfg/timer/rtc.scc +include cfg/dmaengine.scc diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-extra.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-extra.cfg new file mode 100644 index 0000000..10a8e86 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-extra.cfg @@ -0,0 +1,33 @@ +# SPDX-License-Identifier: MIT + +CONFIG_BPF_SYSCALL=y +CONFIG_CGROUP_BPF=y + +CONFIG_AUTOFS_FS=y + +CONFIG_TYPEC_MUX_GPIO_SBU=y +CONFIG_TYPEC_MUX_NB7VPQ904M=y +CONFIG_TYPEC_MUX_FSA4480=y +CONFIG_TYPEC_DP_ALTMODE=y + +CONFIG_DRM_LONTIUM_LT9611=y +CONFIG_DRM_LONTIUM_LT9611UXC=y +CONFIG_DRM_I2C_ADV7511=y +CONFIG_DRM_I2C_ADV7511_AUDIO=y +CONFIG_DRM_I2C_ADV7511_CEC=y + +CONFIG_USB_XHCI_PCI_RENESAS=y + +CONFIG_USB_HSIC_USB3503=y + +CONFIG_PERF_EVENTS=y + +CONFIG_USB_HUB_USB251XB=y + +CONFIG_ATL1C=m + +CONFIG_CAN=m +CONFIG_CAN_MCP251XFD=m + +CONFIG_BACKLIGHT_PWM=m +CONFIG_DRM_PANEL_NOVATEK_NT36672E=m diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8916.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8916.cfg new file mode 100644 index 0000000..9c9a712 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8916.cfg @@ -0,0 +1,36 @@ +# SPDX-License-Identifier: MIT + +CONFIG_PINCTRL_MSM8916=y + +CONFIG_QCOM_A53PLL=y +CONFIG_QCOM_CLK_APCS_MSM8916=y +CONFIG_MSM_GCC_8916=y + +CONFIG_INTERCONNECT_QCOM_MSM8916=y + +CONFIG_QCOM_IOMMU=y + +CONFIG_PM8916_WATCHDOG=y + +CONFIG_SND_SOC_APQ8016_SBC=m +CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m +CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m + +CONFIG_EXTCON=y +CONFIG_EXTCON_USB_GPIO=y + +CONFIG_USB_ULPI_BUS=y +CONFIG_PHY_QCOM_USB_HS=y + +CONFIG_QCOM_SPMI_TEMP_ALARM=y +CONFIG_QCOM_SPMI_VADC=y + +CONFIG_QCOM_SMSM=y + +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_CHIPIDEA=y +CONFIG_USB_CHIPIDEA_MSM=y +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y + +CONFIG_WCN36XX=m diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8916.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8916.scc new file mode 100644 index 0000000..4b21237 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8916.scc @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +kconf hardware qcom-rpm.cfg +kconf hardware qcom-msm8916.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8996.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8996.cfg new file mode 100644 index 0000000..d636c96 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8996.cfg @@ -0,0 +1,25 @@ +# SPDX-License-Identifier: MIT + +CONFIG_PINCTRL_MSM8996=y + +CONFIG_QCOM_CLK_APCC_MSM8996=y +CONFIG_MSM_GCC_8996=y +CONFIG_MSM_MMCC_8996=y +CONFIG_INTERCONNECT_QCOM_MSM8996=y + +CONFIG_PHY_QCOM_QMP_PCIE_8996=y + +CONFIG_SND_SOC_MSM8996=m + +CONFIG_SND_SOC_WCD9335=m + +CONFIG_PHY_QCOM_QUSB2=y + +CONFIG_EXTCON=y +CONFIG_EXTCON_USB_GPIO=y + +CONFIG_QCOM_SPMI_TEMP_ALARM=y +CONFIG_QCOM_SPMI_VADC=y + +CONFIG_ATH10K=m +CONFIG_ATH10K_PCI=m diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8996.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8996.scc new file mode 100644 index 0000000..ef71826 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-msm8996.scc @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +kconf hardware qcom-rpm.cfg +kconf hardware qcom-msm8996.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm2290.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm2290.cfg new file mode 100644 index 0000000..1ff457d --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm2290.cfg @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: MIT + +CONFIG_PINCTRL_QCM2290=y +CONFIG_QCM_GCC_2290=y +CONFIG_QCM_DISPCC_2290=y +CONFIG_INTERCONNECT_QCOM_QCM2290=y + +CONFIG_PHY_QCOM_QUSB2=y diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm2290.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm2290.scc new file mode 100644 index 0000000..ab2f061 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm2290.scc @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +kconf hardware qcom-rpm.cfg +kconf hardware qcom-qcm2290.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm6490.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm6490.cfg new file mode 100644 index 0000000..a1da8cb --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm6490.cfg @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: MIT + +CONFIG_PINCTRL_SC7280=y +CONFIG_PINCTRL_SC7280_LPASS_LPI=m +CONFIG_SND_SOC_SC7280=m +CONFIG_INTERCONNECT_QCOM_SC7280=y + +CONFIG_SC_CAMCC_7280=m +CONFIG_SC_DISPCC_7280=y +CONFIG_SC_GCC_7280=y +CONFIG_SC_GPUCC_7280=y +CONFIG_SC_LPASS_CORECC_7280=m +CONFIG_SC_VIDEOCC_7280=m + +CONFIG_PHY_QCOM_USB_HS=y +CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=y +CONFIG_USB_DWC3_QCOM=y +CONFIG_PHY_QCOM_QMP_COMBO=y diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm6490.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm6490.scc new file mode 100644 index 0000000..bf53a47 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-qcm6490.scc @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +kconf hardware qcom-rpmh.cfg +kconf hardware qcom-qcm6490.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-rpm.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-rpm.cfg new file mode 100644 index 0000000..7fb1025 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-rpm.cfg @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: MIT + +CONFIG_RPMSG_QCOM_GLINK_RPM=y +CONFIG_REGULATOR_QCOM_SMD_RPM=y +CONFIG_QCOM_MPM=y +CONFIG_QCOM_SMD_RPM=y +CONFIG_QCOM_RPMPD=y +CONFIG_QCOM_CLK_SMD_RPM=y + +# legacy boards +CONFIG_RPMSG_QCOM_SMD=y diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-rpmh.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-rpmh.cfg new file mode 100644 index 0000000..f914280 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-rpmh.cfg @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: MIT + +CONFIG_QCOM_RPMH=y +CONFIG_QCOM_RPMHPD=y +CONFIG_QCOM_COMMAND_DB=y +CONFIG_RPMSG_QCOM_GLINK_SMEM=y +CONFIG_QCOM_AOSS_QMP=y +CONFIG_REGULATOR_QCOM_RPMH=y +CONFIG_QCOM_CLK_RPMH=y diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sdm845.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sdm845.cfg new file mode 100644 index 0000000..ee337aa --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sdm845.cfg @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: MIT + +CONFIG_PINCTRL_SDM845=y +CONFIG_SDM_CAMCC_845=m +CONFIG_SDM_GCC_845=y +CONFIG_SDM_GPUCC_845=y +CONFIG_SDM_VIDEOCC_845=m +CONFIG_SDM_DISPCC_845=y +CONFIG_INTERCONNECT_QCOM_SDM845=y + +CONFIG_MFD_WCD934X=m +CONFIG_GPIO_WCD934X=m +CONFIG_SND_SOC_WCD934X=m +CONFIG_SND_SOC_SDM845=m + +CONFIG_QCOM_LMH=y +CONFIG_PHY_QCOM_QUSB2=y + +CONFIG_QCOM_SPMI_TEMP_ALARM=y +CONFIG_QCOM_SPMI_ADC5=y + +CONFIG_QCOM_SPMI_RRADC=m +CONFIG_REGULATOR_QCOM_LABIBB=m + +CONFIG_ATH10K=m +CONFIG_ATH10K_SNOC=m diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sdm845.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sdm845.scc new file mode 100644 index 0000000..0446f2a --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sdm845.scc @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +kconf hardware qcom-rpmh.cfg +kconf hardware qcom-sdm845.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm6115.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm6115.cfg new file mode 100644 index 0000000..2bb223a --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm6115.cfg @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: MIT + +CONFIG_PINCTRL_SM6115=y +CONFIG_SM_DISPCC_6115=y +CONFIG_SM_GCC_6115=y +CONFIG_SM_GPUCC_6115=y +CONFIG_INTERCONNECT_QCOM_SM6115=y + +CONFIG_PHY_QCOM_QUSB2=y + +CONFIG_QCOM_SPMI_TEMP_ALARM=y +CONFIG_QCOM_SPMI_ADC5=y diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm6115.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm6115.scc new file mode 100644 index 0000000..a7411aa --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm6115.scc @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +kconf hardware qcom-rpm.cfg +kconf hardware qcom-sm6115.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8250.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8250.cfg new file mode 100644 index 0000000..25fc04f --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8250.cfg @@ -0,0 +1,30 @@ +# SPDX-License-Identifier: MIT + +CONFIG_PINCTRL_SM8250=y +CONFIG_PINCTRL_SM8250_LPASS_LPI=m +CONFIG_SM_CAMCC_8250=m +CONFIG_SM_DISPCC_8250=y +CONFIG_SM_GCC_8250=y +CONFIG_SM_GPUCC_8250=y +CONFIG_SM_VIDEOCC_8250=m +CONFIG_CLK_GFM_LPASS_SM8250=m +CONFIG_INTERCONNECT_QCOM_SM8250=y + +CONFIG_SND_SOC_WCD938X=m +CONFIG_SND_SOC_WCD938X_SDW=m +CONFIG_SND_SOC_SM8250=m + +CONFIG_TYPEC_TCPM=y +CONFIG_TYPEC_QCOM_PMIC=y + +CONFIG_QCOM_IPCC=y + +CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=y + +CONFIG_QCOM_SPMI_TEMP_ALARM=y +CONFIG_QCOM_SPMI_ADC5=y + +CONFIG_MFD_QCOM_QCA639X=y + +CONFIG_ATH11K=m +CONFIG_ATH11K_PCI=m diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8250.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8250.scc new file mode 100644 index 0000000..cbd485d --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8250.scc @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +kconf hardware qcom-rpmh.cfg +kconf hardware qcom-sm8250.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8450.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8450.cfg new file mode 100644 index 0000000..88939b0 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8450.cfg @@ -0,0 +1,27 @@ +# SPDX-License-Identifier: MIT + +CONFIG_PINCTRL_SM8450=y +CONFIG_PINCTRL_SM8450_LPASS_LPI=m +CONFIG_SM_CAMCC_8450=m +CONFIG_SM_DISPCC_8450=y +CONFIG_SM_GCC_8450=y +CONFIG_SM_GPUCC_8450=y +CONFIG_SM_VIDEOCC_8450=m +CONFIG_INTERCONNECT_QCOM_SM8450=y + +CONFIG_QCOM_IPCC=y + +CONFIG_TYPEC_UCSI=y +CONFIG_UCSI_PMIC_GLINK=y +CONFIG_QCOM_PMIC_GLINK=y +CONFIG_BATTERY_QCOM_BATTMGR=m + +CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=y + +CONFIG_QCOM_SPMI_TEMP_ALARM=y +CONFIG_QCOM_SPMI_ADC5=y + +CONFIG_MFD_QCOM_QCA639X=y + +CONFIG_ATH11K=m +CONFIG_ATH11K_PCI=m diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8450.scc b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8450.scc new file mode 100644 index 0000000..d9a02c0 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom-sm8450.scc @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +kconf hardware qcom-rpmh.cfg +kconf hardware qcom-sm8450.cfg diff --git a/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom.cfg b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom.cfg new file mode 100644 index 0000000..e969e08 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/bsp/qcom-armv8a/qcom.cfg @@ -0,0 +1,228 @@ +# SPDX-License-Identifier: MIT + +CONFIG_ARCH_QCOM=y +CONFIG_ARM_PSCI_CPUIDLE=y +CONFIG_ARM_PSCI_CPUIDLE_DOMAIN=y +CONFIG_ARM_QCOM_CPUFREQ_NVMEM=y +CONFIG_ARM_QCOM_CPUFREQ_HW=y +CONFIG_CMA=y +CONFIG_DMA_CMA=y + +CONFIG_SCHED_MC=y + +CONFIG_QRTR=y +CONFIG_QRTR_SMD=y +CONFIG_QRTR_MHI=m + +CONFIG_BT=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_QCA=y + +CONFIG_COMMON_CLK_QCOM=y + +CONFIG_CRYPTO_DEV_QCE=m +CONFIG_CRYPTO_DEV_QCOM_RNG=y + +CONFIG_HWSPINLOCK=y +CONFIG_HWSPINLOCK_QCOM=y + +CONFIG_INTERCONNECT=y +CONFIG_INTERCONNECT_QCOM=y +CONFIG_INTERCONNECT_QCOM_OSM_L3=y + +CONFIG_MAILBOX=y +CONFIG_QCOM_APCS_IPC=y + +CONFIG_MHI_BUS=m + +CONFIG_NVMEM=y +CONFIG_NVMEM_QCOM_QFPROM=y + +CONFIG_ARM_SMMU=y +CONFIG_ARM_SMMU_QCOM=y + +CONFIG_PCIE_QCOM=y +CONFIG_PCIE_QCOM_EP=m + +CONFIG_PCI_ENDPOINT=y +CONFIG_PCI_ENDPOINT_CONFIGFS=y + +CONFIG_PINCTRL_MSM=y +CONFIG_PINCTRL_LPASS_LPI=m +CONFIG_PINCTRL_QCOM_SPMI_PMIC=y + +CONFIG_QCOM_Q6V5_ADSP=m +CONFIG_QCOM_Q6V5_MSS=m +CONFIG_QCOM_Q6V5_PAS=m +CONFIG_QCOM_SYSMON=m +CONFIG_QCOM_Q6V5_WCSS=m +CONFIG_QCOM_WCNSS_PIL=m + +CONFIG_REMOTEPROC=y + +CONFIG_QCOM_APR=m +CONFIG_QCOM_FASTRPC=m +CONFIG_QCOM_IPA=m +CONFIG_QCOM_SMEM=y +CONFIG_QCOM_ICC_BWMON=y + +CONFIG_SERIAL_DEV_BUS=y + +CONFIG_SOUND=m +CONFIG_SND=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_QCOM=m +CONFIG_SND_SOC_HDMI_CODEC=m +CONFIG_SOUNDWIRE=m +CONFIG_SOUNDWIRE_QCOM=m + +# CONFIG_MOUSE_PS2 is not set +# CONFIG_KEYBOARD_ATKBD is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_PM8941_PWRKEY=y +CONFIG_SERIAL_MSM=y +CONFIG_SERIAL_MSM_CONSOLE=y + +CONFIG_QCOM_GENI_SE=y +CONFIG_SERIAL_QCOM_GENI=y +CONFIG_SERIAL_QCOM_GENI_CONSOLE=y +CONFIG_I2C_QCOM_GENI=y +CONFIG_I2C_QUP=y +CONFIG_SPI_QUP=y +CONFIG_SPI_QCOM_GENI=y + +CONFIG_SPMI=y +CONFIG_SPMI_MSM_PMIC_ARB=y +CONFIG_MFD_SPMI_PMIC=y + +CONFIG_POWER_RESET_MSM=y +CONFIG_POWER_RESET_QCOM_PON=y +CONFIG_REBOOT_MODE=y + +CONFIG_IIO=y +CONFIG_QCOM_SPMI_IADC=m + +CONFIG_THERMAL=y +CONFIG_THERMAL_HWMON=y +CONFIG_PM_DEVFREQ=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_QCOM_TSENS=y +CONFIG_QCOM_SPMI_ADC_TM5=m + +CONFIG_WATCHDOG_CORE=y +CONFIG_QCOM_WDT=y + +CONFIG_SLIMBUS=m + +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_QCOM_SPMI=y +CONFIG_REGULATOR_QCOM_USB_VBUS=y + +CONFIG_DRM=y +CONFIG_DRM_MSM=y +CONFIG_DRM_MSM_MDP5=y +CONFIG_DRM_MSM_DPU=y +CONFIG_DRM_MSM_DP=y +CONFIG_DRM_MSM_DSI=y +CONFIG_DRM_MSM_DSI_28NM_PHY=y +CONFIG_DRM_MSM_DSI_20NM_PHY=y +CONFIG_DRM_MSM_DSI_28NM_8960_PHY=y +CONFIG_DRM_MSM_DSI_14NM_PHY=y +CONFIG_DRM_MSM_DSI_10NM_PHY=y +CONFIG_DRM_MSM_DSI_7NM_PHY=y +CONFIG_DRM_MSM_HDMI=y +CONFIG_DRM_PANEL_SIMPLE=y +CONFIG_DRM_DISPLAY_CONNECTOR=y + +CONFIG_BACKLIGHT_CLASS_DEVICE=y + +CONFIG_FB=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_LOGO=y + +CONFIG_SND_SOC_WSA881X=m +CONFIG_SND_SOC_WSA883X=m + +CONFIG_SND_SOC_LPASS_WSA_MACRO=m +CONFIG_SND_SOC_LPASS_VA_MACRO=m +CONFIG_SND_SOC_LPASS_RX_MACRO=m +CONFIG_SND_SOC_LPASS_TX_MACRO=m + +CONFIG_TYPEC=y +CONFIG_USB_GADGET=y +CONFIG_USB_CONFIGFS=y +CONFIG_USB_CONFIGFS_F_FS=y + +CONFIG_USB_XHCI_HCD=y + +CONFIG_MMC=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_MSM=y + +CONFIG_SCSI=y +CONFIG_SCSI_UFSHCD=y +CONFIG_SCSI_UFS_BSG=y +CONFIG_SCSI_UFS_HWMON=y +CONFIG_SCSI_UFSHCD_PLATFORM=y +CONFIG_SCSI_UFS_QCOM=y + +CONFIG_CFG80211=m +CONFIG_MAC80211=m +CONFIG_CRYPTO_MICHAEL_MIC=m + +CONFIG_LEDS_CLASS_MULTICOLOR=y +CONFIG_LEDS_QCOM_LPG=y + +CONFIG_USB_DWC3=y + +CONFIG_RAS=y +CONFIG_EDAC=y +CONFIG_EDAC_QCOM=y + +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_DRV_PM8XXX=y + +CONFIG_QCOM_BAM_DMA=y +CONFIG_QCOM_GPI_DMA=y +CONFIG_QCOM_LLCC=y +CONFIG_QCOM_OCMEM=y +CONFIG_QCOM_RMTFS_MEM=y +CONFIG_QCOM_SOCINFO=y +CONFIG_QCOM_STATS=y +CONFIG_QCOM_WCNSS_CTRL=m +CONFIG_QCOM_SMP2P=y + +CONFIG_RESET_QCOM_AOSS=y +CONFIG_RESET_QCOM_PDC=y +CONFIG_QCOM_PDC=y + +CONFIG_I2C_QCOM_CCI=m + +CONFIG_GENERIC_PHY=y +CONFIG_PHY_QCOM_QMP=y +CONFIG_PHY_QCOM_QMP_PCIE=y +CONFIG_PHY_QCOM_QMP_UFS=y +CONFIG_PHY_QCOM_QMP_USB=y + +CONFIG_SLIM_QCOM_CTRL=m +CONFIG_SLIM_QCOM_NGD_CTRL=m + +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEDIA_PLATFORM_SUPPORT=y +CONFIG_V4L_PLATFORM_DRIVERS=y +CONFIG_V4L_MEM2MEM_DRIVERS=y +CONFIG_VIDEO_QCOM_CAMSS=m +CONFIG_VIDEO_QCOM_VENUS=m + +CONFIG_CORESIGHT=m +CONFIG_CORESIGHT_LINK_AND_SINK_TMC=m +CONFIG_CORESIGHT_SINK_TPIU=m +CONFIG_CORESIGHT_SOURCE_ETM4X=m +CONFIG_CORESIGHT_STM=m +CONFIG_CORESIGHT_CPU_DEBUG=m +CONFIG_CORESIGHT_CTI=m +CONFIG_CORESIGHT_TPDM=m +CONFIG_CORESIGHT_TPDA=m diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/0001-FROMLIST-dma-heap-Add-proper-kref-handling-on-dma-bu.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/0001-FROMLIST-dma-heap-Add-proper-kref-handling-on-dma-bu.patch new file mode 100644 index 0000000..87fefa9 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/0001-FROMLIST-dma-heap-Add-proper-kref-handling-on-dma-bu.patch @@ -0,0 +1,145 @@ +From dd2c03120004f3bfed8b4f6500c33957b1bae807 Mon Sep 17 00:00:00 2001 +From: John Stultz <jstultz@google.com> +Date: Mon, 11 Sep 2023 10:30:31 +0800 +Subject: [PATCH 1/2] FROMLIST: dma-heap: Add proper kref handling on dma-buf + heaps + +Add proper refcounting on the dma_heap structure. +While existing heaps are built-in, we may eventually +have heaps loaded from modules, and we'll need to be +able to properly handle the references to the heaps + +Also moves minor tracking into the heap structure so +we can properly free things. + +[Yong: Just add comment for "minor" and "refcount"] +Signed-off-by: John Stultz <jstultz@google.com> +Signed-off-by: T.J. Mercier <tjmercier@google.com> +Signed-off-by: Yong Wu <yong.wu@mediatek.com> +Signed-off-by: Vijayanand Jitta <quic_vjitta@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Submitted [https://lore.kernel.org/lkml/20230911023038.30649-3-yong.wu@mediatek.com/] +--- + drivers/dma-buf/dma-heap.c | 38 ++++++++++++++++++++++++++++++++++---- + include/linux/dma-heap.h | 6 ++++++ + 2 files changed, 40 insertions(+), 4 deletions(-) + +diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c +index 84ae708fafe7..59328045975a 100644 +--- a/drivers/dma-buf/dma-heap.c ++++ b/drivers/dma-buf/dma-heap.c +@@ -12,6 +12,7 @@ + #include <linux/dma-buf.h> + #include <linux/err.h> + #include <linux/xarray.h> ++#include <linux/kref.h> + #include <linux/list.h> + #include <linux/slab.h> + #include <linux/nospec.h> +@@ -31,6 +32,8 @@ + * @heap_devt heap device node + * @list list head connecting to list of heaps + * @heap_cdev heap char device ++ * @minor: heap device node minor number ++ * @refcount: reference counter for this heap device + * + * Represents a heap of memory from which buffers can be made. + */ +@@ -41,6 +44,8 @@ struct dma_heap { + dev_t heap_devt; + struct list_head list; + struct cdev heap_cdev; ++ int minor; ++ struct kref refcount; + }; + + static LIST_HEAD(heap_list); +@@ -220,7 +225,6 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) + { + struct dma_heap *heap, *h, *err_ret; + struct device *dev_ret; +- unsigned int minor; + int ret; + + if (!exp_info->name || !strcmp(exp_info->name, "")) { +@@ -237,12 +241,13 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) + if (!heap) + return ERR_PTR(-ENOMEM); + ++ kref_init(&heap->refcount); + heap->name = exp_info->name; + heap->ops = exp_info->ops; + heap->priv = exp_info->priv; + + /* Find unused minor number */ +- ret = xa_alloc(&dma_heap_minors, &minor, heap, ++ ret = xa_alloc(&dma_heap_minors, &heap->minor, heap, + XA_LIMIT(0, NUM_HEAP_MINORS - 1), GFP_KERNEL); + if (ret < 0) { + pr_err("dma_heap: Unable to get minor number for heap\n"); +@@ -251,7 +256,7 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) + } + + /* Create device */ +- heap->heap_devt = MKDEV(MAJOR(dma_heap_devt), minor); ++ heap->heap_devt = MKDEV(MAJOR(dma_heap_devt), heap->minor); + + cdev_init(&heap->heap_cdev, &dma_heap_fops); + ret = cdev_add(&heap->heap_cdev, heap->heap_devt, 1); +@@ -295,12 +300,37 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) + err2: + cdev_del(&heap->heap_cdev); + err1: +- xa_erase(&dma_heap_minors, minor); ++ xa_erase(&dma_heap_minors, heap->minor); + err0: + kfree(heap); + return err_ret; + } + ++static void dma_heap_release(struct kref *ref) ++{ ++ struct dma_heap *heap = container_of(ref, struct dma_heap, refcount); ++ ++ /* Note, we already holding the heap_list_lock here */ ++ list_del(&heap->list); ++ ++ device_destroy(dma_heap_class, heap->heap_devt); ++ cdev_del(&heap->heap_cdev); ++ xa_erase(&dma_heap_minors, heap->minor); ++ ++ kfree(heap); ++} ++ ++void dma_heap_put(struct dma_heap *h) ++{ ++ /* ++ * Take the heap_list_lock now to avoid racing with code ++ * scanning the list and then taking a kref. ++ */ ++ mutex_lock(&heap_list_lock); ++ kref_put(&h->refcount, dma_heap_release); ++ mutex_unlock(&heap_list_lock); ++} ++ + static char *dma_heap_devnode(const struct device *dev, umode_t *mode) + { + return kasprintf(GFP_KERNEL, "dma_heap/%s", dev_name(dev)); +diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h +index 0c05561cad6e..f8c986dd9a8b 100644 +--- a/include/linux/dma-heap.h ++++ b/include/linux/dma-heap.h +@@ -65,4 +65,10 @@ const char *dma_heap_get_name(struct dma_heap *heap); + */ + struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info); + ++/** ++ * dma_heap_put - drops a reference to a dmabuf heap, potentially freeing it ++ * @heap: the heap whose reference count to decrement ++ */ ++void dma_heap_put(struct dma_heap *heap); ++ + #endif /* _DMA_HEAPS_H */ +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/0002-FROMLIST-dma-heap-Provide-accessors-so-that-in-kerne.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/0002-FROMLIST-dma-heap-Provide-accessors-so-that-in-kerne.patch new file mode 100644 index 0000000..f65b7cb --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/0002-FROMLIST-dma-heap-Provide-accessors-so-that-in-kerne.patch @@ -0,0 +1,180 @@ +From fd0d8a09c8d928459d37ae535825018bb0594357 Mon Sep 17 00:00:00 2001 +From: John Stultz <jstultz@google.com> +Date: Mon, 11 Sep 2023 10:30:32 +0800 +Subject: [PATCH 2/2] FROMLIST: dma-heap: Provide accessors so that in-kernel + drivers can allocate dmabufs from specific heaps + +This allows drivers who don't want to create their own +DMA-BUF exporter to be able to allocate DMA-BUFs directly +from existing DMA-BUF Heaps. + +There is some concern that the premise of DMA-BUF heaps is +that userland knows better about what type of heap memory +is needed for a pipeline, so it would likely be best for +drivers to import and fill DMA-BUFs allocated by userland +instead of allocating one themselves, but this is still +up for debate. + +[Yong: Fix the checkpatch alignment warning] +Signed-off-by: John Stultz <jstultz@google.com> +Signed-off-by: T.J. Mercier <tjmercier@google.com> +Signed-off-by: Yong Wu <yong.wu@mediatek.com> +Signed-off-by: Vijayanand Jitta <quic_vjitta@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Submitted [https://lore.kernel.org/lkml/20230911023038.30649-4-yong.wu@mediatek.com/] +--- + drivers/dma-buf/dma-heap.c | 60 ++++++++++++++++++++++++++++---------- + include/linux/dma-heap.h | 25 ++++++++++++++++ + 2 files changed, 69 insertions(+), 16 deletions(-) + +diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c +index 59328045975a..e17705427b23 100644 +--- a/drivers/dma-buf/dma-heap.c ++++ b/drivers/dma-buf/dma-heap.c +@@ -54,12 +54,15 @@ static dev_t dma_heap_devt; + static struct class *dma_heap_class; + static DEFINE_XARRAY_ALLOC(dma_heap_minors); + +-static int dma_heap_buffer_alloc(struct dma_heap *heap, size_t len, +- unsigned int fd_flags, +- unsigned int heap_flags) ++struct dma_buf *dma_heap_buffer_alloc(struct dma_heap *heap, size_t len, ++ unsigned int fd_flags, ++ unsigned int heap_flags) + { +- struct dma_buf *dmabuf; +- int fd; ++ if (fd_flags & ~DMA_HEAP_VALID_FD_FLAGS) ++ return ERR_PTR(-EINVAL); ++ ++ if (heap_flags & ~DMA_HEAP_VALID_HEAP_FLAGS) ++ return ERR_PTR(-EINVAL); + + /* + * Allocations from all heaps have to begin +@@ -67,9 +70,20 @@ static int dma_heap_buffer_alloc(struct dma_heap *heap, size_t len, + */ + len = PAGE_ALIGN(len); + if (!len) +- return -EINVAL; ++ return ERR_PTR(-EINVAL); + +- dmabuf = heap->ops->allocate(heap, len, fd_flags, heap_flags); ++ return heap->ops->allocate(heap, len, fd_flags, heap_flags); ++} ++EXPORT_SYMBOL_GPL(dma_heap_buffer_alloc); ++ ++static int dma_heap_bufferfd_alloc(struct dma_heap *heap, size_t len, ++ unsigned int fd_flags, ++ unsigned int heap_flags) ++{ ++ struct dma_buf *dmabuf; ++ int fd; ++ ++ dmabuf = dma_heap_buffer_alloc(heap, len, fd_flags, heap_flags); + if (IS_ERR(dmabuf)) + return PTR_ERR(dmabuf); + +@@ -107,15 +121,9 @@ static long dma_heap_ioctl_allocate(struct file *file, void *data) + if (heap_allocation->fd) + return -EINVAL; + +- if (heap_allocation->fd_flags & ~DMA_HEAP_VALID_FD_FLAGS) +- return -EINVAL; +- +- if (heap_allocation->heap_flags & ~DMA_HEAP_VALID_HEAP_FLAGS) +- return -EINVAL; +- +- fd = dma_heap_buffer_alloc(heap, heap_allocation->len, +- heap_allocation->fd_flags, +- heap_allocation->heap_flags); ++ fd = dma_heap_bufferfd_alloc(heap, heap_allocation->len, ++ heap_allocation->fd_flags, ++ heap_allocation->heap_flags); + if (fd < 0) + return fd; + +@@ -220,6 +228,7 @@ const char *dma_heap_get_name(struct dma_heap *heap) + { + return heap->name; + } ++EXPORT_SYMBOL_GPL(dma_heap_get_name); + + struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) + { +@@ -305,6 +314,24 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) + kfree(heap); + return err_ret; + } ++EXPORT_SYMBOL_GPL(dma_heap_add); ++ ++struct dma_heap *dma_heap_find(const char *name) ++{ ++ struct dma_heap *h; ++ ++ mutex_lock(&heap_list_lock); ++ list_for_each_entry(h, &heap_list, list) { ++ if (!strcmp(h->name, name)) { ++ kref_get(&h->refcount); ++ mutex_unlock(&heap_list_lock); ++ return h; ++ } ++ } ++ mutex_unlock(&heap_list_lock); ++ return NULL; ++} ++EXPORT_SYMBOL_GPL(dma_heap_find); + + static void dma_heap_release(struct kref *ref) + { +@@ -330,6 +357,7 @@ void dma_heap_put(struct dma_heap *h) + kref_put(&h->refcount, dma_heap_release); + mutex_unlock(&heap_list_lock); + } ++EXPORT_SYMBOL_GPL(dma_heap_put); + + static char *dma_heap_devnode(const struct device *dev, umode_t *mode) + { +diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h +index f8c986dd9a8b..31f44d83f11b 100644 +--- a/include/linux/dma-heap.h ++++ b/include/linux/dma-heap.h +@@ -65,10 +65,35 @@ const char *dma_heap_get_name(struct dma_heap *heap); + */ + struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info); + ++/** ++ * dma_heap_find - get the heap registered with the specified name ++ * @name: Name of the DMA-Heap to find ++ * ++ * Returns: ++ * The DMA-Heap with the provided name. ++ * ++ * NOTE: DMA-Heaps returned from this function MUST be released using ++ * dma_heap_put() when the user is done to enable the heap to be unloaded. ++ */ ++struct dma_heap *dma_heap_find(const char *name); ++ + /** + * dma_heap_put - drops a reference to a dmabuf heap, potentially freeing it + * @heap: the heap whose reference count to decrement + */ + void dma_heap_put(struct dma_heap *heap); + ++/** ++ * dma_heap_buffer_alloc - Allocate dma-buf from a dma_heap ++ * @heap: DMA-Heap to allocate from ++ * @len: size to allocate in bytes ++ * @fd_flags: flags to set on returned dma-buf fd ++ * @heap_flags: flags to pass to the dma heap ++ * ++ * This is for internal dma-buf allocations only. Free returned buffers with dma_buf_put(). ++ */ ++struct dma_buf *dma_heap_buffer_alloc(struct dma_heap *heap, size_t len, ++ unsigned int fd_flags, ++ unsigned int heap_flags); ++ + #endif /* _DMA_HEAPS_H */ +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0001-interconnect-qcom-icc-rpm-Add-AB-IB-calculations-coe.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0001-interconnect-qcom-icc-rpm-Add-AB-IB-calculations-coe.patch new file mode 100644 index 0000000..6b8e76f --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0001-interconnect-qcom-icc-rpm-Add-AB-IB-calculations-coe.patch @@ -0,0 +1,97 @@ +From dd014803f260b337daaabcde259daf70d5b26b5e Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Fri, 25 Aug 2023 17:38:23 +0200 +Subject: [PATCH 1/9] interconnect: qcom: icc-rpm: Add AB/IB calculations + coefficients + +Presumably due to the hardware being so complex, some nodes (or busses) +have different (usually higher) requirements for bandwidth than what +the usual calculations would suggest. + +Looking at the available downstream files, it seems like AB values are +adjusted per-bus and IB values are adjusted per-node. +With that in mind, introduce percentage-based coefficient struct members +and use them in the calculations. + +One thing to note is that the IB coefficient is inverse (100/ib_percent) +which feels a bit backwards, but it's necessary for precision.. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20230726-topic-icc_coeff-v4-1-c04b60caa467@linaro.org +Signed-off-by: Georgi Djakov <djakov@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git dd014803f260] +--- + drivers/interconnect/qcom/icc-rpm.c | 18 +++++++++++++++--- + drivers/interconnect/qcom/icc-rpm.h | 6 ++++++ + 2 files changed, 21 insertions(+), 3 deletions(-) + +diff --git a/drivers/interconnect/qcom/icc-rpm.c b/drivers/interconnect/qcom/icc-rpm.c +index 2c16917ba1fd..8b02aa8aa96a 100644 +--- a/drivers/interconnect/qcom/icc-rpm.c ++++ b/drivers/interconnect/qcom/icc-rpm.c +@@ -298,7 +298,8 @@ static int qcom_icc_bw_aggregate(struct icc_node *node, u32 tag, u32 avg_bw, + */ + static void qcom_icc_bus_aggregate(struct icc_provider *provider, u64 *agg_clk_rate) + { +- u64 agg_avg_rate, agg_rate; ++ struct qcom_icc_provider *qp = to_qcom_provider(provider); ++ u64 agg_avg_rate, agg_peak_rate, agg_rate; + struct qcom_icc_node *qn; + struct icc_node *node; + int i; +@@ -315,8 +316,19 @@ static void qcom_icc_bus_aggregate(struct icc_provider *provider, u64 *agg_clk_r + else + agg_avg_rate = qn->sum_avg[i]; + +- agg_rate = max_t(u64, agg_avg_rate, qn->max_peak[i]); +- do_div(agg_rate, qn->buswidth); ++ if (qp->ab_coeff) { ++ agg_avg_rate = agg_avg_rate * qp->ab_coeff; ++ agg_avg_rate = div_u64(agg_avg_rate, 100); ++ } ++ ++ if (qp->ib_coeff) { ++ agg_peak_rate = qn->max_peak[i] * 100; ++ agg_peak_rate = div_u64(qn->max_peak[i], qp->ib_coeff); ++ } else { ++ agg_peak_rate = qn->max_peak[i]; ++ } ++ ++ agg_rate = max_t(u64, agg_avg_rate, agg_peak_rate); + + agg_clk_rate[i] = max_t(u64, agg_clk_rate[i], agg_rate); + } +diff --git a/drivers/interconnect/qcom/icc-rpm.h b/drivers/interconnect/qcom/icc-rpm.h +index eed3451af3e6..5e7d6a4fd2f3 100644 +--- a/drivers/interconnect/qcom/icc-rpm.h ++++ b/drivers/interconnect/qcom/icc-rpm.h +@@ -44,6 +44,8 @@ struct rpm_clk_resource { + * @type: the ICC provider type + * @regmap: regmap for QoS registers read/write access + * @qos_offset: offset to QoS registers ++ * @ab_coeff: a percentage-based coefficient for compensating the AB calculations ++ * @ib_coeff: an inverse-percentage-based coefficient for compensating the IB calculations + * @bus_clk_rate: bus clock rate in Hz + * @bus_clk_desc: a pointer to a rpm_clk_resource description of bus clocks + * @bus_clk: a pointer to a HLOS-owned bus clock +@@ -57,6 +59,8 @@ struct qcom_icc_provider { + enum qcom_icc_type type; + struct regmap *regmap; + unsigned int qos_offset; ++ u16 ab_coeff; ++ u16 ib_coeff; + u32 bus_clk_rate[QCOM_SMD_RPM_STATE_NUM]; + const struct rpm_clk_resource *bus_clk_desc; + struct clk *bus_clk; +@@ -123,6 +127,8 @@ struct qcom_icc_desc { + enum qcom_icc_type type; + const struct regmap_config *regmap_cfg; + unsigned int qos_offset; ++ u16 ab_coeff; ++ u16 ib_coeff; + }; + + /* Valid for all bus types */ +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0002-interconnect-qcom-icc-rpm-Separate-out-clock-rate-ca.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0002-interconnect-qcom-icc-rpm-Separate-out-clock-rate-ca.patch new file mode 100644 index 0000000..be1d79f --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0002-interconnect-qcom-icc-rpm-Separate-out-clock-rate-ca.patch @@ -0,0 +1,100 @@ +From db8fc1002c53bc17a3ca6fad2c524de42b77c146 Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Fri, 25 Aug 2023 17:38:24 +0200 +Subject: [PATCH 2/9] interconnect: qcom: icc-rpm: Separate out clock rate + calulcations + +In preparation for also setting per-node clock rates, separate out the +logic that computes it. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20230726-topic-icc_coeff-v4-2-c04b60caa467@linaro.org +Signed-off-by: Georgi Djakov <djakov@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git db8fc1002c53] +--- + drivers/interconnect/qcom/icc-rpm.c | 53 ++++++++++++++++------------- + 1 file changed, 30 insertions(+), 23 deletions(-) + +diff --git a/drivers/interconnect/qcom/icc-rpm.c b/drivers/interconnect/qcom/icc-rpm.c +index 8b02aa8aa96a..8c1bfd65d774 100644 +--- a/drivers/interconnect/qcom/icc-rpm.c ++++ b/drivers/interconnect/qcom/icc-rpm.c +@@ -291,6 +291,32 @@ static int qcom_icc_bw_aggregate(struct icc_node *node, u32 tag, u32 avg_bw, + return 0; + } + ++static u64 qcom_icc_calc_rate(struct qcom_icc_provider *qp, struct qcom_icc_node *qn, int ctx) ++{ ++ u64 agg_avg_rate, agg_peak_rate, agg_rate; ++ ++ if (qn->channels) ++ agg_avg_rate = div_u64(qn->sum_avg[ctx], qn->channels); ++ else ++ agg_avg_rate = qn->sum_avg[ctx]; ++ ++ if (qp->ab_coeff) { ++ agg_avg_rate = agg_avg_rate * qp->ab_coeff; ++ agg_avg_rate = div_u64(agg_avg_rate, 100); ++ } ++ ++ if (qp->ib_coeff) { ++ agg_peak_rate = qn->max_peak[ctx] * 100; ++ agg_peak_rate = div_u64(qn->max_peak[ctx], qp->ib_coeff); ++ } else { ++ agg_peak_rate = qn->max_peak[ctx]; ++ } ++ ++ agg_rate = max_t(u64, agg_avg_rate, agg_peak_rate); ++ ++ return div_u64(agg_rate, qn->buswidth); ++} ++ + /** + * qcom_icc_bus_aggregate - calculate bus clock rates by traversing all nodes + * @provider: generic interconnect provider +@@ -299,10 +325,9 @@ static int qcom_icc_bw_aggregate(struct icc_node *node, u32 tag, u32 avg_bw, + static void qcom_icc_bus_aggregate(struct icc_provider *provider, u64 *agg_clk_rate) + { + struct qcom_icc_provider *qp = to_qcom_provider(provider); +- u64 agg_avg_rate, agg_peak_rate, agg_rate; + struct qcom_icc_node *qn; + struct icc_node *node; +- int i; ++ int ctx; + + /* + * Iterate nodes on the provider, aggregate bandwidth requests for +@@ -310,27 +335,9 @@ static void qcom_icc_bus_aggregate(struct icc_provider *provider, u64 *agg_clk_r + */ + list_for_each_entry(node, &provider->nodes, node_list) { + qn = node->data; +- for (i = 0; i < QCOM_SMD_RPM_STATE_NUM; i++) { +- if (qn->channels) +- agg_avg_rate = div_u64(qn->sum_avg[i], qn->channels); +- else +- agg_avg_rate = qn->sum_avg[i]; +- +- if (qp->ab_coeff) { +- agg_avg_rate = agg_avg_rate * qp->ab_coeff; +- agg_avg_rate = div_u64(agg_avg_rate, 100); +- } +- +- if (qp->ib_coeff) { +- agg_peak_rate = qn->max_peak[i] * 100; +- agg_peak_rate = div_u64(qn->max_peak[i], qp->ib_coeff); +- } else { +- agg_peak_rate = qn->max_peak[i]; +- } +- +- agg_rate = max_t(u64, agg_avg_rate, agg_peak_rate); +- +- agg_clk_rate[i] = max_t(u64, agg_clk_rate[i], agg_rate); ++ for (ctx = 0; ctx < QCOM_SMD_RPM_STATE_NUM; ctx++) { ++ agg_clk_rate[ctx] = max_t(u64, agg_clk_rate[ctx], ++ qcom_icc_calc_rate(qp, qn, ctx)); + } + } + } +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0003-interconnect-qcom-icc-rpm-Let-nodes-drive-their-own-.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0003-interconnect-qcom-icc-rpm-Let-nodes-drive-their-own-.patch new file mode 100644 index 0000000..f71cf3d --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0003-interconnect-qcom-icc-rpm-Let-nodes-drive-their-own-.patch @@ -0,0 +1,99 @@ +From 919791d82d3b878094e9edc39b0d9a4eafcc0860 Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Fri, 25 Aug 2023 17:38:25 +0200 +Subject: [PATCH 3/9] interconnect: qcom: icc-rpm: Let nodes drive their own + bus clock + +If this hardware couldn't get messier, some nodes are supposed to drive +their own bus clock.. Presumably to connect to some intermediate +interface between the node itself and the bus it's (supposed to be) +connected to. + +Expand the node struct with the necessary data and hook up the +allocations & calculations. + +Note that the node-specific AB/IB coefficients contribute (by design) +to both the node-level and the bus-level aggregation. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20230726-topic-icc_coeff-v4-3-c04b60caa467@linaro.org +Signed-off-by: Georgi Djakov <djakov@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 919791d82d3b] +--- + drivers/interconnect/qcom/icc-rpm.c | 27 +++++++++++++++++++++++++++ + drivers/interconnect/qcom/icc-rpm.h | 4 ++++ + 2 files changed, 31 insertions(+) + +diff --git a/drivers/interconnect/qcom/icc-rpm.c b/drivers/interconnect/qcom/icc-rpm.c +index 8c1bfd65d774..1d3af4e9ead8 100644 +--- a/drivers/interconnect/qcom/icc-rpm.c ++++ b/drivers/interconnect/qcom/icc-rpm.c +@@ -414,6 +414,33 @@ static int qcom_icc_set(struct icc_node *src, struct icc_node *dst) + qp->bus_clk_rate[QCOM_SMD_RPM_SLEEP_STATE] = sleep_rate; + } + ++ /* Handle the node-specific clock */ ++ if (!src_qn->bus_clk_desc) ++ return 0; ++ ++ active_rate = qcom_icc_calc_rate(qp, src_qn, QCOM_SMD_RPM_ACTIVE_STATE); ++ sleep_rate = qcom_icc_calc_rate(qp, src_qn, QCOM_SMD_RPM_SLEEP_STATE); ++ ++ if (active_rate != src_qn->bus_clk_rate[QCOM_SMD_RPM_ACTIVE_STATE]) { ++ ret = qcom_icc_rpm_set_bus_rate(src_qn->bus_clk_desc, QCOM_SMD_RPM_ACTIVE_STATE, ++ active_rate); ++ if (ret) ++ return ret; ++ ++ /* Cache the rate after we've successfully committed it to RPM */ ++ src_qn->bus_clk_rate[QCOM_SMD_RPM_ACTIVE_STATE] = active_rate; ++ } ++ ++ if (sleep_rate != src_qn->bus_clk_rate[QCOM_SMD_RPM_SLEEP_STATE]) { ++ ret = qcom_icc_rpm_set_bus_rate(src_qn->bus_clk_desc, QCOM_SMD_RPM_SLEEP_STATE, ++ sleep_rate); ++ if (ret) ++ return ret; ++ ++ /* Cache the rate after we've successfully committed it to RPM */ ++ src_qn->bus_clk_rate[QCOM_SMD_RPM_SLEEP_STATE] = sleep_rate; ++ } ++ + return 0; + } + +diff --git a/drivers/interconnect/qcom/icc-rpm.h b/drivers/interconnect/qcom/icc-rpm.h +index 5e7d6a4fd2f3..725e0d4840e4 100644 +--- a/drivers/interconnect/qcom/icc-rpm.h ++++ b/drivers/interconnect/qcom/icc-rpm.h +@@ -97,11 +97,13 @@ struct qcom_icc_qos { + * @num_links: the total number of @links + * @channels: number of channels at this node (e.g. DDR channels) + * @buswidth: width of the interconnect between a node and the bus (bytes) ++ * @bus_clk_desc: a pointer to a rpm_clk_resource description of bus clocks + * @sum_avg: current sum aggregate value of all avg bw requests + * @max_peak: current max aggregate value of all peak bw requests + * @mas_rpm_id: RPM id for devices that are bus masters + * @slv_rpm_id: RPM id for devices that are bus slaves + * @qos: NoC QoS setting parameters ++ * @bus_clk_rate: a pointer to an array containing bus clock rates in Hz + */ + struct qcom_icc_node { + unsigned char *name; +@@ -110,11 +112,13 @@ struct qcom_icc_node { + u16 num_links; + u16 channels; + u16 buswidth; ++ const struct rpm_clk_resource *bus_clk_desc; + u64 sum_avg[QCOM_SMD_RPM_STATE_NUM]; + u64 max_peak[QCOM_SMD_RPM_STATE_NUM]; + int mas_rpm_id; + int slv_rpm_id; + struct qcom_icc_qos qos; ++ u32 bus_clk_rate[QCOM_SMD_RPM_STATE_NUM]; + }; + + struct qcom_icc_desc { +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0004-interconnect-qcom-icc-rpm-Check-for-node-specific-ra.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0004-interconnect-qcom-icc-rpm-Check-for-node-specific-ra.patch new file mode 100644 index 0000000..faee1be --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0004-interconnect-qcom-icc-rpm-Check-for-node-specific-ra.patch @@ -0,0 +1,82 @@ +From ba3f826639782587b70a684dae79d39f6d3c433e Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Fri, 25 Aug 2023 17:38:26 +0200 +Subject: [PATCH 4/9] interconnect: qcom: icc-rpm: Check for node-specific rate + coefficients + +Some nodes may have different coefficients than the general values for +bus they're attached to. Check for that and use them if present. See +[1], [2] for reference. + +[1] https://github.com/sonyxperiadev/kernel/commit/7456d9779af9ad6bb9c7ee6f33d5c5a8d3648e24 +[2] https://github.com/artem/android_kernel_sony_msm8996/commit/bf7a8985dcaf0eab5bc2562d2d6775e7e29c0f30 +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20230726-topic-icc_coeff-v4-4-c04b60caa467@linaro.org +Signed-off-by: Georgi Djakov <djakov@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git ba3f82663978] +--- + drivers/interconnect/qcom/icc-rpm.c | 14 ++++++++++---- + drivers/interconnect/qcom/icc-rpm.h | 4 ++++ + 2 files changed, 14 insertions(+), 4 deletions(-) + +diff --git a/drivers/interconnect/qcom/icc-rpm.c b/drivers/interconnect/qcom/icc-rpm.c +index 1d3af4e9ead8..9c40314e03b5 100644 +--- a/drivers/interconnect/qcom/icc-rpm.c ++++ b/drivers/interconnect/qcom/icc-rpm.c +@@ -300,14 +300,14 @@ static u64 qcom_icc_calc_rate(struct qcom_icc_provider *qp, struct qcom_icc_node + else + agg_avg_rate = qn->sum_avg[ctx]; + +- if (qp->ab_coeff) { +- agg_avg_rate = agg_avg_rate * qp->ab_coeff; ++ if (qn->ab_coeff) { ++ agg_avg_rate = agg_avg_rate * qn->ab_coeff; + agg_avg_rate = div_u64(agg_avg_rate, 100); + } + +- if (qp->ib_coeff) { ++ if (qn->ib_coeff) { + agg_peak_rate = qn->max_peak[ctx] * 100; +- agg_peak_rate = div_u64(qn->max_peak[ctx], qp->ib_coeff); ++ agg_peak_rate = div_u64(qn->max_peak[ctx], qn->ib_coeff); + } else { + agg_peak_rate = qn->max_peak[ctx]; + } +@@ -563,6 +563,12 @@ int qnoc_probe(struct platform_device *pdev) + for (i = 0; i < num_nodes; i++) { + size_t j; + ++ if (!qnodes[i]->ab_coeff) ++ qnodes[i]->ab_coeff = qp->ab_coeff; ++ ++ if (!qnodes[i]->ib_coeff) ++ qnodes[i]->ib_coeff = qp->ib_coeff; ++ + node = icc_node_create(qnodes[i]->id); + if (IS_ERR(node)) { + ret = PTR_ERR(node); +diff --git a/drivers/interconnect/qcom/icc-rpm.h b/drivers/interconnect/qcom/icc-rpm.h +index 725e0d4840e4..4abf99ce2690 100644 +--- a/drivers/interconnect/qcom/icc-rpm.h ++++ b/drivers/interconnect/qcom/icc-rpm.h +@@ -103,6 +103,8 @@ struct qcom_icc_qos { + * @mas_rpm_id: RPM id for devices that are bus masters + * @slv_rpm_id: RPM id for devices that are bus slaves + * @qos: NoC QoS setting parameters ++ * @ab_coeff: a percentage-based coefficient for compensating the AB calculations ++ * @ib_coeff: an inverse-percentage-based coefficient for compensating the IB calculations + * @bus_clk_rate: a pointer to an array containing bus clock rates in Hz + */ + struct qcom_icc_node { +@@ -118,6 +120,8 @@ struct qcom_icc_node { + int mas_rpm_id; + int slv_rpm_id; + struct qcom_icc_qos qos; ++ u16 ab_coeff; ++ u16 ib_coeff; + u32 bus_clk_rate[QCOM_SMD_RPM_STATE_NUM]; + }; + +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0005-interconnect-qcom-qcm2290-Hook-up-MAS_APPS_PROC-s-bu.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0005-interconnect-qcom-qcm2290-Hook-up-MAS_APPS_PROC-s-bu.patch new file mode 100644 index 0000000..4a0bbb4 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0005-interconnect-qcom-qcm2290-Hook-up-MAS_APPS_PROC-s-bu.patch @@ -0,0 +1,69 @@ +From fa35757ae0a5a88bd1b7df8578ee9dac9d147c64 Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Fri, 25 Aug 2023 17:38:27 +0200 +Subject: [PATCH 5/9] interconnect: qcom: qcm2290: Hook up MAS_APPS_PROC's bus + clock + +This single node has its own clock which seems to be responsible for +transactions between CPUSS (CPU + some stuff) and the GNOC. See [1] +for reference. + +Define it and hook it up. + +[1] https://android.googlesource.com/kernel/msm-extra/devicetree/+/02f8c342b23c20a5cf967df649814be37a08227c%5E%21/#F0 +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20230726-topic-icc_coeff-v4-5-c04b60caa467@linaro.org +Signed-off-by: Georgi Djakov <djakov@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git fa35757ae0a5] +--- + drivers/interconnect/qcom/icc-rpm-clocks.c | 6 ++++++ + drivers/interconnect/qcom/icc-rpm.h | 1 + + drivers/interconnect/qcom/qcm2290.c | 3 +++ + 3 files changed, 10 insertions(+) + +diff --git a/drivers/interconnect/qcom/icc-rpm-clocks.c b/drivers/interconnect/qcom/icc-rpm-clocks.c +index 63c82a91bbc7..ac1677de7dfd 100644 +--- a/drivers/interconnect/qcom/icc-rpm-clocks.c ++++ b/drivers/interconnect/qcom/icc-rpm-clocks.c +@@ -25,6 +25,12 @@ const struct rpm_clk_resource bimc_clk = { + }; + EXPORT_SYMBOL_GPL(bimc_clk); + ++const struct rpm_clk_resource mem_1_clk = { ++ .resource_type = QCOM_SMD_RPM_MEM_CLK, ++ .clock_id = 1, ++}; ++EXPORT_SYMBOL_GPL(mem_1_clk); ++ + const struct rpm_clk_resource bus_0_clk = { + .resource_type = QCOM_SMD_RPM_BUS_CLK, + .clock_id = 0, +diff --git a/drivers/interconnect/qcom/icc-rpm.h b/drivers/interconnect/qcom/icc-rpm.h +index 4abf99ce2690..a13768cfd231 100644 +--- a/drivers/interconnect/qcom/icc-rpm.h ++++ b/drivers/interconnect/qcom/icc-rpm.h +@@ -152,6 +152,7 @@ extern const struct rpm_clk_resource bimc_clk; + extern const struct rpm_clk_resource bus_0_clk; + extern const struct rpm_clk_resource bus_1_clk; + extern const struct rpm_clk_resource bus_2_clk; ++extern const struct rpm_clk_resource mem_1_clk; + extern const struct rpm_clk_resource mmaxi_0_clk; + extern const struct rpm_clk_resource mmaxi_1_clk; + extern const struct rpm_clk_resource qup_clk; +diff --git a/drivers/interconnect/qcom/qcm2290.c b/drivers/interconnect/qcom/qcm2290.c +index 5bc4b7516608..026e4c82d6d4 100644 +--- a/drivers/interconnect/qcom/qcm2290.c ++++ b/drivers/interconnect/qcom/qcm2290.c +@@ -112,6 +112,9 @@ static struct qcom_icc_node mas_appss_proc = { + .qos.qos_mode = NOC_QOS_MODE_FIXED, + .qos.prio_level = 0, + .qos.areq_prio = 0, ++ .bus_clk_desc = &mem_1_clk, ++ .ab_coeff = 159, ++ .ib_coeff = 96, + .mas_rpm_id = 0, + .slv_rpm_id = -1, + .num_links = ARRAY_SIZE(mas_appss_proc_links), +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0006-interconnect-qcom-qcm2290-Set-AB-coefficients.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0006-interconnect-qcom-qcm2290-Set-AB-coefficients.patch new file mode 100644 index 0000000..3062f49 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0006-interconnect-qcom-qcm2290-Set-AB-coefficients.patch @@ -0,0 +1,47 @@ +From 8657ed471196f4dc8e7917453a39363e0014840c Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Fri, 25 Aug 2023 17:38:28 +0200 +Subject: [PATCH 6/9] interconnect: qcom: qcm2290: Set AB coefficients + +Some buses need additional manual adjustments atop the usual +calculations. Fill in the missing coefficients. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20230726-topic-icc_coeff-v4-6-c04b60caa467@linaro.org +Signed-off-by: Georgi Djakov <djakov@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 8657ed471196] +--- + drivers/interconnect/qcom/qcm2290.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/interconnect/qcom/qcm2290.c b/drivers/interconnect/qcom/qcm2290.c +index 026e4c82d6d4..7abc0c449220 100644 +--- a/drivers/interconnect/qcom/qcm2290.c ++++ b/drivers/interconnect/qcom/qcm2290.c +@@ -1202,6 +1202,7 @@ static const struct qcom_icc_desc qcm2290_bimc = { + .keep_alive = true, + /* M_REG_BASE() in vendor msm_bus_bimc_adhoc driver */ + .qos_offset = 0x8000, ++ .ab_coeff = 153, + }; + + static struct qcom_icc_node * const qcm2290_cnoc_nodes[] = { +@@ -1332,6 +1333,7 @@ static const struct qcom_icc_desc qcm2290_mmnrt_virt = { + .regmap_cfg = &qcm2290_snoc_regmap_config, + .keep_alive = true, + .qos_offset = 0x15000, ++ .ab_coeff = 142, + }; + + static struct qcom_icc_node * const qcm2290_mmrt_virt_nodes[] = { +@@ -1348,6 +1350,7 @@ static const struct qcom_icc_desc qcm2290_mmrt_virt = { + .regmap_cfg = &qcm2290_snoc_regmap_config, + .keep_alive = true, + .qos_offset = 0x15000, ++ .ab_coeff = 139, + }; + + static const struct of_device_id qcm2290_noc_of_match[] = { +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0007-interconnect-qcom-qcm2290-Update-EBI-channel-configu.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0007-interconnect-qcom-qcm2290-Update-EBI-channel-configu.patch new file mode 100644 index 0000000..c6960d8 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0007-interconnect-qcom-qcm2290-Update-EBI-channel-configu.patch @@ -0,0 +1,43 @@ +From 550064a85ba564cfb508a995f45e39a6ad0e26ed Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Fri, 25 Aug 2023 17:38:29 +0200 +Subject: [PATCH 7/9] interconnect: qcom: qcm2290: Update EBI channel + configuration + +QCM2290 can support two memory configurations: single-channel, 32-bit +wide LPDDR3 @ up to 933MHz (bus clock) or dual-channel, 16-bit wide +LPDDR4X @ up to 1804 MHz. The interconnect driver in its current form +seems to gravitate towards the first one, however there are no LPDDR3- +equipped boards upstream and we still don't have a great way to discern +the DDR generations on the kernel side. + +To make DDR scaling possible on the only currently-supported 2290 +board, stick with the LPDDR4X config by default. The side effect on any +potential LPDDR3 board would be that the requested bus clock rate is +too high (but still capped to the firmware-configured FMAX). + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20230726-topic-icc_coeff-v4-7-c04b60caa467@linaro.org +Signed-off-by: Georgi Djakov <djakov@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 550064a85ba5] +--- + drivers/interconnect/qcom/qcm2290.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/interconnect/qcom/qcm2290.c b/drivers/interconnect/qcom/qcm2290.c +index 7abc0c449220..b88cf9a022e0 100644 +--- a/drivers/interconnect/qcom/qcm2290.c ++++ b/drivers/interconnect/qcom/qcm2290.c +@@ -678,7 +678,8 @@ static struct qcom_icc_node mas_gfx3d = { + static struct qcom_icc_node slv_ebi1 = { + .name = "slv_ebi1", + .id = QCM2290_SLAVE_EBI1, +- .buswidth = 8, ++ .buswidth = 4, ++ .channels = 2, + .mas_rpm_id = -1, + .slv_rpm_id = 0, + }; +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0008-interconnect-qcom-sdm660-Set-AB-IB-coefficients.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0008-interconnect-qcom-sdm660-Set-AB-IB-coefficients.patch new file mode 100644 index 0000000..af67d8c --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0008-interconnect-qcom-sdm660-Set-AB-IB-coefficients.patch @@ -0,0 +1,55 @@ +From a4a9251760185af9ca7ff1592a05a0eabfe0cd00 Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Fri, 25 Aug 2023 17:38:30 +0200 +Subject: [PATCH 8/9] interconnect: qcom: sdm660: Set AB/IB coefficients + +Some buses and nodes need additional manual adjustments atop the usual +calculations. Fill in the missing coefficients. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20230726-topic-icc_coeff-v4-8-c04b60caa467@linaro.org +Signed-off-by: Georgi Djakov <djakov@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git a4a925176018] +--- + drivers/interconnect/qcom/sdm660.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/interconnect/qcom/sdm660.c b/drivers/interconnect/qcom/sdm660.c +index 36962f7bd7bb..7392bebba334 100644 +--- a/drivers/interconnect/qcom/sdm660.c ++++ b/drivers/interconnect/qcom/sdm660.c +@@ -602,6 +602,7 @@ static struct qcom_icc_node mas_mdp_p0 = { + .name = "mas_mdp_p0", + .id = SDM660_MASTER_MDP_P0, + .buswidth = 16, ++ .ib_coeff = 50, + .mas_rpm_id = 8, + .slv_rpm_id = -1, + .qos.ap_owned = true, +@@ -621,6 +622,7 @@ static struct qcom_icc_node mas_mdp_p1 = { + .name = "mas_mdp_p1", + .id = SDM660_MASTER_MDP_P1, + .buswidth = 16, ++ .ib_coeff = 50, + .mas_rpm_id = 61, + .slv_rpm_id = -1, + .qos.ap_owned = true, +@@ -1540,6 +1542,7 @@ static const struct qcom_icc_desc sdm660_bimc = { + .num_nodes = ARRAY_SIZE(sdm660_bimc_nodes), + .bus_clk_desc = &bimc_clk, + .regmap_cfg = &sdm660_bimc_regmap_config, ++ .ab_coeff = 153, + }; + + static struct qcom_icc_node * const sdm660_cnoc_nodes[] = { +@@ -1659,6 +1662,7 @@ static const struct qcom_icc_desc sdm660_mnoc = { + .intf_clocks = mm_intf_clocks, + .num_intf_clocks = ARRAY_SIZE(mm_intf_clocks), + .regmap_cfg = &sdm660_mnoc_regmap_config, ++ .ab_coeff = 153, + }; + + static struct qcom_icc_node * const sdm660_snoc_nodes[] = { +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0009-interconnect-qcom-msm8996-Set-AB-IB-coefficients.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0009-interconnect-qcom-msm8996-Set-AB-IB-coefficients.patch new file mode 100644 index 0000000..ff49eb0 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/icc/0009-interconnect-qcom-msm8996-Set-AB-IB-coefficients.patch @@ -0,0 +1,59 @@ +From 1255f23c219a74f2577c9ca5521abeb36db35d3b Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Fri, 25 Aug 2023 17:38:31 +0200 +Subject: [PATCH 9/9] interconnect: qcom: msm8996: Set AB/IB coefficients + +Some buses and nodes need additional manual adjustments atop the usual +calculations. Fill in the missing coefficients. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20230726-topic-icc_coeff-v4-9-c04b60caa467@linaro.org +Signed-off-by: Georgi Djakov <djakov@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 1255f23c219a] +--- + drivers/interconnect/qcom/msm8996.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/drivers/interconnect/qcom/msm8996.c b/drivers/interconnect/qcom/msm8996.c +index 88683dfa468f..b73566c9b21f 100644 +--- a/drivers/interconnect/qcom/msm8996.c ++++ b/drivers/interconnect/qcom/msm8996.c +@@ -448,6 +448,7 @@ static struct qcom_icc_node mas_mdp_p0 = { + .name = "mas_mdp_p0", + .id = MSM8996_MASTER_MDP_PORT0, + .buswidth = 32, ++ .ib_coeff = 25, + .mas_rpm_id = 8, + .slv_rpm_id = -1, + .qos.ap_owned = true, +@@ -463,6 +464,7 @@ static struct qcom_icc_node mas_mdp_p1 = { + .name = "mas_mdp_p1", + .id = MSM8996_MASTER_MDP_PORT1, + .buswidth = 32, ++ .ib_coeff = 25, + .mas_rpm_id = 61, + .slv_rpm_id = -1, + .qos.ap_owned = true, +@@ -1889,7 +1891,8 @@ static const struct qcom_icc_desc msm8996_bimc = { + .nodes = bimc_nodes, + .num_nodes = ARRAY_SIZE(bimc_nodes), + .bus_clk_desc = &bimc_clk, +- .regmap_cfg = &msm8996_bimc_regmap_config ++ .regmap_cfg = &msm8996_bimc_regmap_config, ++ .ab_coeff = 154, + }; + + static struct qcom_icc_node * const cnoc_nodes[] = { +@@ -2004,7 +2007,8 @@ static const struct qcom_icc_desc msm8996_mnoc = { + .bus_clk_desc = &mmaxi_0_clk, + .intf_clocks = mm_intf_clocks, + .num_intf_clocks = ARRAY_SIZE(mm_intf_clocks), +- .regmap_cfg = &msm8996_mnoc_regmap_config ++ .regmap_cfg = &msm8996_mnoc_regmap_config, ++ .ab_coeff = 154, + }; + + static struct qcom_icc_node * const pnoc_nodes[] = { +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0001_drm_msm_mdss_switch_mdss_to_use_devm_of_icc_get.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0001_drm_msm_mdss_switch_mdss_to_use_devm_of_icc_get.patch new file mode 100644 index 0000000..0620692 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0001_drm_msm_mdss_switch_mdss_to_use_devm_of_icc_get.patch @@ -0,0 +1,64 @@ +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Subject: drm/msm/mdss: switch mdss to use devm_of_icc_get() +Date: Sun, 03 Dec 2023 01:42:44 +0300 + +Stop using hand-written reset function for ICC release, use +devm_of_icc_get() instead. + +Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Backport [https://gitlab.freedesktop.org/lumag/msm/-/commit/ded61d7dc5a0] +--- + drivers/gpu/drm/msm/msm_mdss.c | 16 ++-------------- + 1 file changed, 2 insertions(+), 14 deletions(-) + +diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c +index 29bb38f0bb2c..53bc496ace99 100644 +--- a/drivers/gpu/drm/msm/msm_mdss.c ++++ b/drivers/gpu/drm/msm/msm_mdss.c +@@ -50,14 +50,14 @@ static int msm_mdss_parse_data_bus_icc_path(struct device *dev, + struct icc_path *path0; + struct icc_path *path1; + +- path0 = of_icc_get(dev, "mdp0-mem"); ++ path0 = devm_of_icc_get(dev, "mdp0-mem"); + if (IS_ERR_OR_NULL(path0)) + return PTR_ERR_OR_ZERO(path0); + + msm_mdss->path[0] = path0; + msm_mdss->num_paths = 1; + +- path1 = of_icc_get(dev, "mdp1-mem"); ++ path1 = devm_of_icc_get(dev, "mdp1-mem"); + if (!IS_ERR_OR_NULL(path1)) { + msm_mdss->path[1] = path1; + msm_mdss->num_paths++; +@@ -66,15 +66,6 @@ static int msm_mdss_parse_data_bus_icc_path(struct device *dev, + return 0; + } + +-static void msm_mdss_put_icc_path(void *data) +-{ +- struct msm_mdss *msm_mdss = data; +- int i; +- +- for (i = 0; i < msm_mdss->num_paths; i++) +- icc_put(msm_mdss->path[i]); +-} +- + static void msm_mdss_icc_request_bw(struct msm_mdss *msm_mdss, unsigned long bw) + { + int i; +@@ -391,9 +382,6 @@ static struct msm_mdss *msm_mdss_init(struct platform_device *pdev, bool is_mdp5 + dev_dbg(&pdev->dev, "mapped mdss address space @%pK\n", msm_mdss->mmio); + + ret = msm_mdss_parse_data_bus_icc_path(&pdev->dev, msm_mdss); +- if (ret) +- return ERR_PTR(ret); +- ret = devm_add_action_or_reset(&pdev->dev, msm_mdss_put_icc_path, msm_mdss); + if (ret) + return ERR_PTR(ret); + +-- +2.39.2 diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0002_drm_msm_mdss_rename_path_references_to_mdp_path.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0002_drm_msm_mdss_rename_path_references_to_mdp_path.patch new file mode 100644 index 0000000..6416729 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0002_drm_msm_mdss_rename_path_references_to_mdp_path.patch @@ -0,0 +1,66 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: drm/msm/mdss: Rename path references to mdp_path +Date: Sun, 03 Dec 2023 01:42:45 +0300 + +The DPU1 driver needs to handle all MDPn<->DDR paths, as well as +CPU<->SLAVE_DISPLAY_CFG. The former ones share how their values are +calculated, but the latter one has static predefines spanning all SoCs. + +In preparation for supporting the CPU<->SLAVE_DISPLAY_CFG path, rename +the path-related struct members to include "mdp_". + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Backport [https://gitlab.freedesktop.org/lumag/msm/-/commit/fabaf176322d] +--- + drivers/gpu/drm/msm/msm_mdss.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c +index 53bc496ace99..e1b208fd072e 100644 +--- a/drivers/gpu/drm/msm/msm_mdss.c ++++ b/drivers/gpu/drm/msm/msm_mdss.c +@@ -40,8 +40,8 @@ struct msm_mdss { + struct irq_domain *domain; + } irq_controller; + const struct msm_mdss_data *mdss_data; +- struct icc_path *path[2]; +- u32 num_paths; ++ struct icc_path *mdp_path[2]; ++ u32 num_mdp_paths; + }; + + static int msm_mdss_parse_data_bus_icc_path(struct device *dev, +@@ -54,13 +54,13 @@ static int msm_mdss_parse_data_bus_icc_path(struct device *dev, + if (IS_ERR_OR_NULL(path0)) + return PTR_ERR_OR_ZERO(path0); + +- msm_mdss->path[0] = path0; +- msm_mdss->num_paths = 1; ++ msm_mdss->mdp_path[0] = path0; ++ msm_mdss->num_mdp_paths = 1; + + path1 = devm_of_icc_get(dev, "mdp1-mem"); + if (!IS_ERR_OR_NULL(path1)) { +- msm_mdss->path[1] = path1; +- msm_mdss->num_paths++; ++ msm_mdss->mdp_path[1] = path1; ++ msm_mdss->num_mdp_paths++; + } + + return 0; +@@ -70,8 +70,8 @@ static void msm_mdss_icc_request_bw(struct msm_mdss *msm_mdss, unsigned long bw) + { + int i; + +- for (i = 0; i < msm_mdss->num_paths; i++) +- icc_set_bw(msm_mdss->path[i], 0, Bps_to_icc(bw)); ++ for (i = 0; i < msm_mdss->num_mdp_paths; i++) ++ icc_set_bw(msm_mdss->mdp_path[i], 0, Bps_to_icc(bw)); + } + + static void msm_mdss_irq(struct irq_desc *desc) +-- +2.39.2 diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0002_dt_bindings_display_msm_add_reg_bus_and_rotator_interconnects.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0002_dt_bindings_display_msm_add_reg_bus_and_rotator_interconnects.patch new file mode 100644 index 0000000..f2822ae --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0002_dt_bindings_display_msm_add_reg_bus_and_rotator_interconnects.patch @@ -0,0 +1,287 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: dt-bindings: display: msm: Add reg bus and rotator interconnects +Date: Wed, 29 Nov 2023 15:43:59 +0100 + +Apart from the already handled data bus (MAS_MDP_Pn<->DDR), there are +other connection paths: +- a path that connects rotator block to the DDR. +- a path that needs to be handled to ensure MDSS register access + functions properly, namely the "reg bus", a.k.a the CPU-MDSS CFG + interconnect. + +Describe these paths to allow using them in device trees and in the +driver. + +Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Backport [https://gitlab.freedesktop.org/lumag/msm/-/commit/a1ed5860efd3] +--- + .../devicetree/bindings/display/msm/mdss-common.yaml | 18 ++++++++++++++---- + .../bindings/display/msm/qcom,qcm2290-mdss.yaml | 14 ++++++++++---- + .../bindings/display/msm/qcom,sc7180-mdss.yaml | 14 ++++++++++---- + .../bindings/display/msm/qcom,sc7280-mdss.yaml | 14 ++++++++++---- + .../bindings/display/msm/qcom,sm6115-mdss.yaml | 10 ++++++++++ + .../bindings/display/msm/qcom,sm6125-mdss.yaml | 8 ++++++-- + .../bindings/display/msm/qcom,sm6350-mdss.yaml | 8 ++++++-- + .../bindings/display/msm/qcom,sm6375-mdss.yaml | 8 ++++++-- + .../bindings/display/msm/qcom,sm8450-mdss.yaml | 13 ++++++++----- + 9 files changed, 80 insertions(+), 27 deletions(-) + +diff --git a/Documentation/devicetree/bindings/display/msm/mdss-common.yaml b/Documentation/devicetree/bindings/display/msm/mdss-common.yaml +index f69196e4cc76..c6305a6e0334 100644 +--- a/Documentation/devicetree/bindings/display/msm/mdss-common.yaml ++++ b/Documentation/devicetree/bindings/display/msm/mdss-common.yaml +@@ -61,17 +61,27 @@ properties: + + ranges: true + ++ # This is not a perfect description, but it's impossible to discern and match ++ # the entries like we do with interconnect-names + interconnects: + minItems: 1 + items: + - description: Interconnect path from mdp0 (or a single mdp) port to the data bus + - description: Interconnect path from mdp1 port to the data bus ++ - description: Interconnect path from CPU to the reg bus + + interconnect-names: +- minItems: 1 +- items: +- - const: mdp0-mem +- - const: mdp1-mem ++ oneOf: ++ - minItems: 1 ++ items: ++ - const: mdp0-mem ++ - const: cpu-cfg ++ ++ - minItems: 2 ++ items: ++ - const: mdp0-mem ++ - const: mdp1-mem ++ - const: cpu-cfg + + resets: + items: +diff --git a/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml +index d71a8e09a798..f0cdb5422688 100644 +--- a/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml ++++ b/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml +@@ -36,10 +36,14 @@ properties: + maxItems: 2 + + interconnects: +- maxItems: 1 ++ items: ++ - description: Interconnect path from mdp0 port to the data bus ++ - description: Interconnect path from CPU to the reg bus + + interconnect-names: +- maxItems: 1 ++ items: ++ - const: mdp0-mem ++ - const: cpu-cfg + + patternProperties: + "^display-controller@[0-9a-f]+$": +@@ -98,8 +102,10 @@ examples: + interrupt-controller; + #interrupt-cells = <1>; + +- interconnects = <&mmrt_virt MASTER_MDP0 &bimc SLAVE_EBI1>; +- interconnect-names = "mdp0-mem"; ++ interconnects = <&mmrt_virt MASTER_MDP0 &bimc SLAVE_EBI1>, ++ <&bimc MASTER_APPSS_PROC &config_noc SLAVE_DISPLAY_CFG>; ++ interconnect-names = "mdp0-mem", ++ "cpu-cfg"; + + iommus = <&apps_smmu 0x420 0x2>, + <&apps_smmu 0x421 0x0>; +diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sc7180-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sc7180-mdss.yaml +index 3432a2407caa..7a0555b15ddf 100644 +--- a/Documentation/devicetree/bindings/display/msm/qcom,sc7180-mdss.yaml ++++ b/Documentation/devicetree/bindings/display/msm/qcom,sc7180-mdss.yaml +@@ -36,10 +36,14 @@ properties: + maxItems: 1 + + interconnects: +- maxItems: 1 ++ items: ++ - description: Interconnect path from mdp0 port to the data bus ++ - description: Interconnect path from CPU to the reg bus + + interconnect-names: +- maxItems: 1 ++ items: ++ - const: mdp0-mem ++ - const: cpu-cfg + + patternProperties: + "^display-controller@[0-9a-f]+$": +@@ -106,8 +110,10 @@ examples: + interrupt-controller; + #interrupt-cells = <1>; + +- interconnects = <&mmss_noc MASTER_MDP0 &mc_virt SLAVE_EBI1>; +- interconnect-names = "mdp0-mem"; ++ interconnects = <&mmss_noc MASTER_MDP0 &mc_virt SLAVE_EBI1>, ++ <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_DISPLAY_CFG>; ++ interconnect-names = "mdp0-mem", ++ "cpu-cfg"; + + iommus = <&apps_smmu 0x800 0x2>; + ranges; +diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sc7280-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sc7280-mdss.yaml +index bbb727831fca..2947f27e0585 100644 +--- a/Documentation/devicetree/bindings/display/msm/qcom,sc7280-mdss.yaml ++++ b/Documentation/devicetree/bindings/display/msm/qcom,sc7280-mdss.yaml +@@ -36,10 +36,14 @@ properties: + maxItems: 1 + + interconnects: +- maxItems: 1 ++ items: ++ - description: Interconnect path from mdp0 port to the data bus ++ - description: Interconnect path from CPU to the reg bus + + interconnect-names: +- maxItems: 1 ++ items: ++ - const: mdp0-mem ++ - const: cpu-cfg + + patternProperties: + "^display-controller@[0-9a-f]+$": +@@ -118,8 +122,10 @@ examples: + interrupt-controller; + #interrupt-cells = <1>; + +- interconnects = <&mmss_noc MASTER_MDP0 &mc_virt SLAVE_EBI1>; +- interconnect-names = "mdp0-mem"; ++ interconnects = <&mmss_noc MASTER_MDP0 &mc_virt SLAVE_EBI1>, ++ <&gem_noc MASTER_APPSS_PROC &cnoc2 SLAVE_DISPLAY_CFG>; ++ interconnect-names = "mdp0-mem", ++ "cpu-cfg"; + + iommus = <&apps_smmu 0x900 0x402>; + ranges; +diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm6115-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm6115-mdss.yaml +index dde5c2acead5..309de1953c88 100644 +--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6115-mdss.yaml ++++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6115-mdss.yaml +@@ -29,6 +29,16 @@ properties: + iommus: + maxItems: 2 + ++ interconnects: ++ items: ++ - description: Interconnect path from mdp0 port to the data bus ++ - description: Interconnect path from CPU to the reg bus ++ ++ interconnect-names: ++ items: ++ - const: mdp0-mem ++ - const: cpu-cfg ++ + patternProperties: + "^display-controller@[0-9a-f]+$": + type: object +diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm6125-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm6125-mdss.yaml +index 671c2c2aa896..3deb9dc81c9c 100644 +--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6125-mdss.yaml ++++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6125-mdss.yaml +@@ -35,10 +35,14 @@ properties: + maxItems: 1 + + interconnects: +- maxItems: 2 ++ items: ++ - description: Interconnect path from mdp0 port to the data bus ++ - description: Interconnect path from CPU to the reg bus + + interconnect-names: +- maxItems: 2 ++ items: ++ - const: mdp0-mem ++ - const: cpu-cfg + + patternProperties: + "^display-controller@[0-9a-f]+$": +diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml +index e1dcb453762e..c9ba1fae8042 100644 +--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml ++++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml +@@ -35,10 +35,14 @@ properties: + maxItems: 1 + + interconnects: +- maxItems: 2 ++ items: ++ - description: Interconnect path from mdp0 port to the data bus ++ - description: Interconnect path from CPU to the reg bus + + interconnect-names: +- maxItems: 2 ++ items: ++ - const: mdp0-mem ++ - const: cpu-cfg + + patternProperties: + "^display-controller@[0-9a-f]+$": +diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm6375-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm6375-mdss.yaml +index b15c3950f09d..8e8a288d318c 100644 +--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6375-mdss.yaml ++++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6375-mdss.yaml +@@ -35,10 +35,14 @@ properties: + maxItems: 1 + + interconnects: +- maxItems: 2 ++ items: ++ - description: Interconnect path from mdp0 port to the data bus ++ - description: Interconnect path from CPU to the reg bus + + interconnect-names: +- maxItems: 2 ++ items: ++ - const: mdp0-mem ++ - const: cpu-cfg + + patternProperties: + "^display-controller@[0-9a-f]+$": +diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm8450-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8450-mdss.yaml +index 001b26e65301..747a2e9665f4 100644 +--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8450-mdss.yaml ++++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8450-mdss.yaml +@@ -30,10 +30,10 @@ properties: + maxItems: 1 + + interconnects: +- maxItems: 2 ++ maxItems: 3 + + interconnect-names: +- maxItems: 2 ++ maxItems: 3 + + patternProperties: + "^display-controller@[0-9a-f]+$": +@@ -91,9 +91,12 @@ examples: + reg = <0x0ae00000 0x1000>; + reg-names = "mdss"; + +- interconnects = <&mmss_noc MASTER_MDP_DISP 0 &mc_virt SLAVE_EBI1_DISP 0>, +- <&mmss_noc MASTER_MDP_DISP 0 &mc_virt SLAVE_EBI1_DISP 0>; +- interconnect-names = "mdp0-mem", "mdp1-mem"; ++ interconnects = <&mmss_noc MASTER_MDP_DISP &mc_virt SLAVE_EBI1_DISP>, ++ <&mmss_noc MASTER_MDP_DISP &mc_virt SLAVE_EBI1_DISP>, ++ <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_DISPLAY_CFG>; ++ interconnect-names = "mdp0-mem", ++ "mdp1-mem", ++ "cpu-cfg"; + + resets = <&dispcc DISP_CC_MDSS_CORE_BCR>; + +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0003_drm_msm_mdss_inline_msm_mdss_icc_request_bw.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0003_drm_msm_mdss_inline_msm_mdss_icc_request_bw.patch new file mode 100644 index 0000000..5e430b1 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0003_drm_msm_mdss_inline_msm_mdss_icc_request_bw.patch @@ -0,0 +1,69 @@ +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Subject: drm/msm/mdss: inline msm_mdss_icc_request_bw() +Date: Sun, 03 Dec 2023 01:42:46 +0300 + +There are just two places where we set the bandwidth: in the resume and +in the suspend paths. Drop the wrapping function +msm_mdss_icc_request_bw() and call icc_set_bw() directly. + +Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Backport [https://gitlab.freedesktop.org/lumag/msm/-/commit/7323694e118a] +--- + drivers/gpu/drm/msm/msm_mdss.c | 19 ++++++++----------- + 1 file changed, 8 insertions(+), 11 deletions(-) + +diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c +index e1b208fd072e..eeca281e9d6d 100644 +--- a/drivers/gpu/drm/msm/msm_mdss.c ++++ b/drivers/gpu/drm/msm/msm_mdss.c +@@ -66,14 +66,6 @@ static int msm_mdss_parse_data_bus_icc_path(struct device *dev, + return 0; + } + +-static void msm_mdss_icc_request_bw(struct msm_mdss *msm_mdss, unsigned long bw) +-{ +- int i; +- +- for (i = 0; i < msm_mdss->num_mdp_paths; i++) +- icc_set_bw(msm_mdss->mdp_path[i], 0, Bps_to_icc(bw)); +-} +- + static void msm_mdss_irq(struct irq_desc *desc) + { + struct msm_mdss *msm_mdss = irq_desc_get_handler_data(desc); +@@ -227,14 +219,15 @@ const struct msm_mdss_data *msm_mdss_get_mdss_data(struct device *dev) + + static int msm_mdss_enable(struct msm_mdss *msm_mdss) + { +- int ret; ++ int ret, i; + + /* + * Several components have AXI clocks that can only be turned on if + * the interconnect is enabled (non-zero bandwidth). Let's make sure + * that the interconnects are at least at a minimum amount. + */ +- msm_mdss_icc_request_bw(msm_mdss, MIN_IB_BW); ++ for (i = 0; i < msm_mdss->num_mdp_paths; i++) ++ icc_set_bw(msm_mdss->mdp_path[i], 0, Bps_to_icc(MIN_IB_BW)); + + ret = clk_bulk_prepare_enable(msm_mdss->num_clocks, msm_mdss->clocks); + if (ret) { +@@ -286,8 +279,12 @@ static int msm_mdss_enable(struct msm_mdss *msm_mdss) + + static int msm_mdss_disable(struct msm_mdss *msm_mdss) + { ++ int i; ++ + clk_bulk_disable_unprepare(msm_mdss->num_clocks, msm_mdss->clocks); +- msm_mdss_icc_request_bw(msm_mdss, 0); ++ ++ for (i = 0; i < msm_mdss->num_mdp_paths; i++) ++ icc_set_bw(msm_mdss->mdp_path[i], 0, 0); + + return 0; + } +-- +2.39.2 diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0004_drm_msm_mdss_handle_the_reg_bus_icc_path.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0004_drm_msm_mdss_handle_the_reg_bus_icc_path.patch new file mode 100644 index 0000000..87a4b37 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/mdss-icc/0004_drm_msm_mdss_handle_the_reg_bus_icc_path.patch @@ -0,0 +1,238 @@ +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Subject: drm/msm/mdss: Handle the reg bus ICC path +Date: Sun, 03 Dec 2023 01:42:47 +0300 + +Apart from the already handled data bus (MAS_MDP_Pn<->DDR), there's +another path that needs to be handled to ensure MDSS functions properly, +namely the "reg bus", a.k.a the CPU-MDSS interconnect. + +Gating that path may have a variety of effects, from none to otherwise +inexplicable DSI timeouts. + +Provide a way for MDSS driver to vote on this bus. + +A note regarding vote values. Newer platforms have corresponding +bandwidth values in the vendor DT files. For the older platforms there +was a static vote in the mdss_mdp and rotator drivers. I choose to be +conservative here and choose this value as a default. + +Co-developed-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Backport [https://gitlab.freedesktop.org/lumag/msm/-/commit/a55c8ff252d3] +--- + drivers/gpu/drm/msm/msm_mdss.c | 49 +++++++++++++++++++++++++++++++--- + drivers/gpu/drm/msm/msm_mdss.h | 1 + + 2 files changed, 46 insertions(+), 4 deletions(-) + +diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c +index eeca281e9d6d..18b07619d6fc 100644 +--- a/drivers/gpu/drm/msm/msm_mdss.c ++++ b/drivers/gpu/drm/msm/msm_mdss.c +@@ -28,6 +28,8 @@ + + #define MIN_IB_BW 400000000UL /* Min ib vote 400MB */ + ++#define DEFAULT_REG_BW 153600 /* Used in mdss fbdev driver */ ++ + struct msm_mdss { + struct device *dev; + +@@ -42,6 +44,7 @@ struct msm_mdss { + const struct msm_mdss_data *mdss_data; + struct icc_path *mdp_path[2]; + u32 num_mdp_paths; ++ struct icc_path *reg_bus_path; + }; + + static int msm_mdss_parse_data_bus_icc_path(struct device *dev, +@@ -49,6 +52,7 @@ static int msm_mdss_parse_data_bus_icc_path(struct device *dev, + { + struct icc_path *path0; + struct icc_path *path1; ++ struct icc_path *reg_bus_path; + + path0 = devm_of_icc_get(dev, "mdp0-mem"); + if (IS_ERR_OR_NULL(path0)) +@@ -63,6 +67,10 @@ static int msm_mdss_parse_data_bus_icc_path(struct device *dev, + msm_mdss->num_mdp_paths++; + } + ++ reg_bus_path = of_icc_get(dev, "cpu-cfg"); ++ if (!IS_ERR_OR_NULL(reg_bus_path)) ++ msm_mdss->reg_bus_path = reg_bus_path; ++ + return 0; + } + +@@ -229,6 +237,13 @@ static int msm_mdss_enable(struct msm_mdss *msm_mdss) + for (i = 0; i < msm_mdss->num_mdp_paths; i++) + icc_set_bw(msm_mdss->mdp_path[i], 0, Bps_to_icc(MIN_IB_BW)); + ++ if (msm_mdss->mdss_data && msm_mdss->mdss_data->reg_bus_bw) ++ icc_set_bw(msm_mdss->reg_bus_path, 0, ++ msm_mdss->mdss_data->reg_bus_bw); ++ else ++ icc_set_bw(msm_mdss->reg_bus_path, 0, ++ DEFAULT_REG_BW); ++ + ret = clk_bulk_prepare_enable(msm_mdss->num_clocks, msm_mdss->clocks); + if (ret) { + dev_err(msm_mdss->dev, "clock enable failed, ret:%d\n", ret); +@@ -286,6 +301,9 @@ static int msm_mdss_disable(struct msm_mdss *msm_mdss) + for (i = 0; i < msm_mdss->num_mdp_paths; i++) + icc_set_bw(msm_mdss->mdp_path[i], 0, 0); + ++ if (msm_mdss->reg_bus_path) ++ icc_set_bw(msm_mdss->reg_bus_path, 0, 0); ++ + return 0; + } + +@@ -372,6 +390,8 @@ static struct msm_mdss *msm_mdss_init(struct platform_device *pdev, bool is_mdp5 + if (!msm_mdss) + return ERR_PTR(-ENOMEM); + ++ msm_mdss->mdss_data = of_device_get_match_data(&pdev->dev); ++ + msm_mdss->mmio = devm_platform_ioremap_resource_byname(pdev, is_mdp5 ? "mdss_phys" : "mdss"); + if (IS_ERR(msm_mdss->mmio)) + return ERR_CAST(msm_mdss->mmio); +@@ -462,8 +482,6 @@ static int mdss_probe(struct platform_device *pdev) + if (IS_ERR(mdss)) + return PTR_ERR(mdss); + +- mdss->mdss_data = of_device_get_match_data(&pdev->dev); +- + platform_set_drvdata(pdev, mdss); + + /* +@@ -495,11 +513,13 @@ static const struct msm_mdss_data msm8998_data = { + .ubwc_enc_version = UBWC_1_0, + .ubwc_dec_version = UBWC_1_0, + .highest_bank_bit = 2, ++ .reg_bus_bw = 76800, + }; + + static const struct msm_mdss_data qcm2290_data = { + /* no UBWC */ + .highest_bank_bit = 0x2, ++ .reg_bus_bw = 76800, + }; + + static const struct msm_mdss_data sc7180_data = { +@@ -507,6 +527,7 @@ static const struct msm_mdss_data sc7180_data = { + .ubwc_dec_version = UBWC_2_0, + .ubwc_static = 0x1e, + .highest_bank_bit = 0x3, ++ .reg_bus_bw = 76800, + }; + + static const struct msm_mdss_data sc7280_data = { +@@ -516,6 +537,7 @@ static const struct msm_mdss_data sc7280_data = { + .ubwc_static = 1, + .highest_bank_bit = 1, + .macrotile_mode = 1, ++ .reg_bus_bw = 74000, + }; + + static const struct msm_mdss_data sc8180x_data = { +@@ -523,6 +545,7 @@ static const struct msm_mdss_data sc8180x_data = { + .ubwc_dec_version = UBWC_3_0, + .highest_bank_bit = 3, + .macrotile_mode = 1, ++ .reg_bus_bw = 76800, + }; + + static const struct msm_mdss_data sc8280xp_data = { +@@ -532,12 +555,14 @@ static const struct msm_mdss_data sc8280xp_data = { + .ubwc_static = 1, + .highest_bank_bit = 3, + .macrotile_mode = 1, ++ .reg_bus_bw = 76800, + }; + + static const struct msm_mdss_data sdm845_data = { + .ubwc_enc_version = UBWC_2_0, + .ubwc_dec_version = UBWC_2_0, + .highest_bank_bit = 2, ++ .reg_bus_bw = 76800, + }; + + static const struct msm_mdss_data sm6350_data = { +@@ -546,12 +571,14 @@ static const struct msm_mdss_data sm6350_data = { + .ubwc_swizzle = 6, + .ubwc_static = 0x1e, + .highest_bank_bit = 1, ++ .reg_bus_bw = 76800, + }; + + static const struct msm_mdss_data sm8150_data = { + .ubwc_enc_version = UBWC_3_0, + .ubwc_dec_version = UBWC_3_0, + .highest_bank_bit = 2, ++ .reg_bus_bw = 76800, + }; + + static const struct msm_mdss_data sm6115_data = { +@@ -560,6 +587,7 @@ static const struct msm_mdss_data sm6115_data = { + .ubwc_swizzle = 7, + .ubwc_static = 0x11f, + .highest_bank_bit = 0x1, ++ .reg_bus_bw = 76800, + }; + + static const struct msm_mdss_data sm6125_data = { +@@ -577,6 +605,18 @@ static const struct msm_mdss_data sm8250_data = { + /* TODO: highest_bank_bit = 2 for LP_DDR4 */ + .highest_bank_bit = 3, + .macrotile_mode = 1, ++ .reg_bus_bw = 76800, ++}; ++ ++static const struct msm_mdss_data sm8350_data = { ++ .ubwc_enc_version = UBWC_4_0, ++ .ubwc_dec_version = UBWC_4_0, ++ .ubwc_swizzle = 6, ++ .ubwc_static = 1, ++ /* TODO: highest_bank_bit = 2 for LP_DDR4 */ ++ .highest_bank_bit = 3, ++ .macrotile_mode = 1, ++ .reg_bus_bw = 74000, + }; + + static const struct msm_mdss_data sm8550_data = { +@@ -587,6 +627,7 @@ static const struct msm_mdss_data sm8550_data = { + /* TODO: highest_bank_bit = 2 for LP_DDR4 */ + .highest_bank_bit = 3, + .macrotile_mode = 1, ++ .reg_bus_bw = 57000, + }; + static const struct of_device_id mdss_dt_match[] = { + { .compatible = "qcom,mdss" }, +@@ -603,8 +644,8 @@ static const struct of_device_id mdss_dt_match[] = { + { .compatible = "qcom,sm6375-mdss", .data = &sm6350_data }, + { .compatible = "qcom,sm8150-mdss", .data = &sm8150_data }, + { .compatible = "qcom,sm8250-mdss", .data = &sm8250_data }, +- { .compatible = "qcom,sm8350-mdss", .data = &sm8250_data }, +- { .compatible = "qcom,sm8450-mdss", .data = &sm8250_data }, ++ { .compatible = "qcom,sm8350-mdss", .data = &sm8350_data }, ++ { .compatible = "qcom,sm8450-mdss", .data = &sm8350_data }, + { .compatible = "qcom,sm8550-mdss", .data = &sm8550_data }, + {} + }; +diff --git a/drivers/gpu/drm/msm/msm_mdss.h b/drivers/gpu/drm/msm/msm_mdss.h +index 02bbab42adbc..3afef4b1786d 100644 +--- a/drivers/gpu/drm/msm/msm_mdss.h ++++ b/drivers/gpu/drm/msm/msm_mdss.h +@@ -14,6 +14,7 @@ struct msm_mdss_data { + u32 ubwc_static; + u32 highest_bank_bit; + u32 macrotile_mode; ++ u32 reg_bus_bw; + }; + + #define UBWC_1_0 0x10000000 +-- +2.39.2 diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/mpm/0001-dt-bindings-interrupt-controller-mpm-Pass-MSG-RAM-sl.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/mpm/0001-dt-bindings-interrupt-controller-mpm-Pass-MSG-RAM-sl.patch new file mode 100644 index 0000000..4614771 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/mpm/0001-dt-bindings-interrupt-controller-mpm-Pass-MSG-RAM-sl.patch @@ -0,0 +1,72 @@ +From d974d3afa058b6857c95e860493542807d4a2eec Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Wed, 5 Apr 2023 12:48:34 +0200 +Subject: [PATCH 1/2] dt-bindings: interrupt-controller: mpm: Pass MSG RAM + slice through phandle + +Due to the wild nature of the Qualcomm RPM Message RAM, we can't really +use 'reg' to point to the MPM's slice of Message RAM without cutting into +an already-defined RPM MSG RAM node used for GLINK and SMEM. + +Document passing the register space as a slice of SRAM through the +qcom,rpm-msg-ram property. This also makes 'reg' deprecated. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git d974d3afa058] +--- + .../bindings/interrupt-controller/qcom,mpm.yaml | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.yaml b/Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.yaml +index 6a206111d4e0..ec957949a440 100644 +--- a/Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.yaml ++++ b/Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.yaml +@@ -29,6 +29,12 @@ properties: + maxItems: 1 + description: + Specifies the base address and size of vMPM registers in RPM MSG RAM. ++ deprecated: true ++ ++ qcom,rpm-msg-ram: ++ $ref: /schemas/types.yaml#/definitions/phandle ++ description: ++ Phandle to the APSS MPM slice of the RPM Message RAM + + interrupts: + maxItems: 1 +@@ -67,23 +73,22 @@ properties: + + required: + - compatible +- - reg + - interrupts + - mboxes + - interrupt-controller + - '#interrupt-cells' + - qcom,mpm-pin-count + - qcom,mpm-pin-map ++ - qcom,rpm-msg-ram + + additionalProperties: false + + examples: + - | + #include <dt-bindings/interrupt-controller/arm-gic.h> +- mpm: interrupt-controller@45f01b8 { ++ mpm: interrupt-controller { + compatible = "qcom,mpm"; + interrupts = <GIC_SPI 197 IRQ_TYPE_EDGE_RISING>; +- reg = <0x45f01b8 0x1000>; + mboxes = <&apcs_glb 1>; + interrupt-controller; + #interrupt-cells = <2>; +@@ -96,5 +101,6 @@ examples: + <86 183>, + <90 260>, + <91 260>; ++ qcom,rpm-msg-ram = <&apss_mpm>; + #power-domain-cells = <0>; + }; +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/generic-drivers/mpm/0002-irqchip-irq-qcom-mpm-Support-passing-a-slice-of-SRAM.patch b/recipes-kernel/linux/linux-yocto/generic-drivers/mpm/0002-irqchip-irq-qcom-mpm-Support-passing-a-slice-of-SRAM.patch new file mode 100644 index 0000000..bb9a7c3 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/generic-drivers/mpm/0002-irqchip-irq-qcom-mpm-Support-passing-a-slice-of-SRAM.patch @@ -0,0 +1,78 @@ +From 24ac56bf8085adf448b6db9574d9b16ed5cd6c0b Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Wed, 5 Apr 2023 12:48:35 +0200 +Subject: [PATCH 2/2] irqchip: irq-qcom-mpm: Support passing a slice of SRAM as + reg space + +The MPM hardware is accessible to us from the ARM CPUs through a shared +memory region (RPM MSG RAM) that's also concurrently accessed by other +kinds of cores on the system (like modem, ADSP etc.). Modeling this +relation in a (somewhat) sane manner in the device tree basically +requires us to either present the MPM as a child of said memory region +(which makes little sense, as a mapped memory carveout is not a bus), +define nodes which bleed their register spaces into one another, or +passing their slice of the MSG RAM through some kind of a property. + +Go with the third option and add a way to map a region passed through +the "qcom,rpm-msg-ram" property as our register space. + +The current way of using 'reg' is preserved for ABI reasons. + +Acked-by: Shawn Guo <shawn.guo@linaro.org> +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 24ac56bf8085] +--- + drivers/irqchip/irq-qcom-mpm.c | 21 ++++++++++++++++++--- + 1 file changed, 18 insertions(+), 3 deletions(-) + +diff --git a/drivers/irqchip/irq-qcom-mpm.c b/drivers/irqchip/irq-qcom-mpm.c +index 7124565234a5..7115e3056aa5 100644 +--- a/drivers/irqchip/irq-qcom-mpm.c ++++ b/drivers/irqchip/irq-qcom-mpm.c +@@ -14,6 +14,7 @@ + #include <linux/mailbox_client.h> + #include <linux/module.h> + #include <linux/of.h> ++#include <linux/of_address.h> + #include <linux/of_platform.h> + #include <linux/platform_device.h> + #include <linux/pm_domain.h> +@@ -322,8 +323,10 @@ static int qcom_mpm_init(struct device_node *np, struct device_node *parent) + struct device *dev = &pdev->dev; + struct irq_domain *parent_domain; + struct generic_pm_domain *genpd; ++ struct device_node *msgram_np; + struct qcom_mpm_priv *priv; + unsigned int pin_cnt; ++ struct resource res; + int i, irq; + int ret; + +@@ -374,9 +377,21 @@ static int qcom_mpm_init(struct device_node *np, struct device_node *parent) + + raw_spin_lock_init(&priv->lock); + +- priv->base = devm_platform_ioremap_resource(pdev, 0); +- if (IS_ERR(priv->base)) +- return PTR_ERR(priv->base); ++ /* If we have a handle to an RPM message ram partition, use it. */ ++ msgram_np = of_parse_phandle(np, "qcom,rpm-msg-ram", 0); ++ if (msgram_np) { ++ ret = of_address_to_resource(msgram_np, 0, &res); ++ /* Don't use devm_ioremap_resource, as we're accessing a shared region. */ ++ priv->base = devm_ioremap(dev, res.start, resource_size(&res)); ++ of_node_put(msgram_np); ++ if (IS_ERR(priv->base)) ++ return PTR_ERR(priv->base); ++ } else { ++ /* Otherwise, fall back to simple MMIO. */ ++ priv->base = devm_platform_ioremap_resource(pdev, 0); ++ if (IS_ERR(priv->base)) ++ return PTR_ERR(priv->base); ++ } + + for (i = 0; i < priv->reg_stride; i++) { + qcom_mpm_write(priv, MPM_REG_ENABLE, i, 0); +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qca6390-driver/0001-dt-bindings-mfd-qcom-qca639x-add-binding-for-QCA639x.patch b/recipes-kernel/linux/linux-yocto/qca6390-driver/0001-dt-bindings-mfd-qcom-qca639x-add-binding-for-QCA639x.patch new file mode 100644 index 0000000..a9881f0 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qca6390-driver/0001-dt-bindings-mfd-qcom-qca639x-add-binding-for-QCA639x.patch @@ -0,0 +1,111 @@ +From 3b909d078f454238bb9e8ec454a891765df968f6 Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Date: Sun, 20 Dec 2020 18:47:57 +0300 +Subject: [PATCH 1/5] dt-bindings: mfd: qcom,qca639x: add binding for QCA639x + defvice + +Qualcomm QCA639x is a family of WiFi + Bluetooth SoCs, with BT part +being controlled through the UART and WiFi being present on PCIe bus. +Both blocks share common power sources. Add binding to describe power +sequencing required to power up this device. + +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Inappropriate +--- + .../devicetree/bindings/mfd/qcom,qca639x.yaml | 84 +++++++++++++++++++ + 1 file changed, 84 insertions(+) + create mode 100644 Documentation/devicetree/bindings/mfd/qcom,qca639x.yaml + +diff --git a/Documentation/devicetree/bindings/mfd/qcom,qca639x.yaml b/Documentation/devicetree/bindings/mfd/qcom,qca639x.yaml +new file mode 100644 +index 000000000000..d43c75da136f +--- /dev/null ++++ b/Documentation/devicetree/bindings/mfd/qcom,qca639x.yaml +@@ -0,0 +1,84 @@ ++# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) ++%YAML 1.2 ++--- ++$id: "http://devicetree.org/schemas/mfd/qcom,qca639x.yaml#" ++$schema: "http://devicetree.org/meta-schemas/core.yaml#" ++ ++title: Qualcomm QCA639x WiFi + Bluetoot SoC bindings ++ ++maintainers: ++ - Andy Gross <agross@kernel.org> ++ - Bjorn Andersson <bjorn.andersson@linaro.org> ++ ++description: | ++ This binding describes thes Qualcomm QCA6390 or QCA6391 power supplies and ++ enablement pins. ++ ++properties: ++ compatible: ++ const: qcom,qca639x ++ ++ '#power-domain-cells': ++ const: 0 ++ ++ pinctrl-0: true ++ pinctrl-1: true ++ ++ pinctrl-names: ++ items: ++ - const: default ++ - const: active ++ ++ vddaon-supply: ++ description: ++ 0.95V always-on LDO power input ++ ++ vddpmu-supply: ++ description: ++ 0.95V LDO power input to PMU ++ ++ vddrfa1-supply: ++ description: ++ 0.95V LDO power input to RFA ++ ++ vddrfa2-supply: ++ description: ++ 1.25V LDO power input to RFA ++ ++ vddrfa3-supply: ++ description: ++ 2V LDO power input to RFA ++ ++ vddpcie1-supply: ++ description: ++ 1.25V LDO power input to PCIe part ++ ++ vddpcie2-supply: ++ description: ++ 2V LDO power input to PCIe part ++ ++ vddio-supply: ++ description: ++ 1.8V VIO input ++ ++additionalProperties: false ++ ++examples: ++ - | ++ qca639x: qca639x { ++ compatible = "qcom,qca639x"; ++ #power-domain-cells = <0>; ++ ++ vddaon-supply = <&vreg_s6a_0p95>; ++ vddpmu-supply = <&vreg_s2f_0p95>; ++ vddrfa1-supply = <&vreg_s2f_0p95>; ++ vddrfa2-supply = <&vreg_s8c_1p3>; ++ vddrfa3-supply = <&vreg_s5a_1p9>; ++ vddpcie1-supply = <&vreg_s8c_1p3>; ++ vddpcie2-supply = <&vreg_s5a_1p9>; ++ vddio-supply = <&vreg_s4a_1p8>; ++ pinctrl-names = "default", "active"; ++ pinctrl-0 = <&wlan_default_state &bt_default_state>; ++ pinctrl-1 = <&wlan_active_state &bt_active_state>; ++ }; ++... +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qca6390-driver/0002-mfd-qca639x-add-support-for-QCA639x-powerup-sequence.patch b/recipes-kernel/linux/linux-yocto/qca6390-driver/0002-mfd-qca639x-add-support-for-QCA639x-powerup-sequence.patch new file mode 100644 index 0000000..2621853 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qca6390-driver/0002-mfd-qca639x-add-support-for-QCA639x-powerup-sequence.patch @@ -0,0 +1,225 @@ +From 6cca247e22ac57fcc99241fee201056c1967278e Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Date: Fri, 18 Dec 2020 16:24:56 +0300 +Subject: [PATCH 2/5] mfd: qca639x: add support for QCA639x powerup sequence + +Qualcomm QCA639x is a family of WiFi + Bluetooth SoCs, with BT part +being controlled through the UART and WiFi being present on PCIe +bus. Both blocks share common power sources. So add mfd device driver +handling power sequencing of QCA6390/1. + +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Inappropriate +--- + drivers/mfd/Kconfig | 12 +++ + drivers/mfd/Makefile | 1 + + drivers/mfd/qcom-qca639x.c | 162 +++++++++++++++++++++++++++++++++++++ + 3 files changed, 175 insertions(+) + create mode 100644 drivers/mfd/qcom-qca639x.c + +diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig +index e90463c4441c..9abb4df8d66b 100644 +--- a/drivers/mfd/Kconfig ++++ b/drivers/mfd/Kconfig +@@ -1086,6 +1086,18 @@ config MFD_PM8XXX + Say M here if you want to include support for PM8xxx chips as a + module. This will build a module called "pm8xxx-core". + ++config MFD_QCOM_QCA639X ++ tristate "Qualcomm QCA639x WiFi/Bluetooth module support" ++ depends on REGULATOR && PM_GENERIC_DOMAINS ++ help ++ If you say yes to this option, support will be included for Qualcomm ++ QCA639x family of WiFi and Bluetooth SoCs. Note, this driver supports ++ only power control for this SoC, you still have to enable individual ++ Bluetooth and WiFi drivers. ++ ++ Say M here if you want to include support for QCA639x chips as a ++ module. This will build a module called "qcom-qca639x". ++ + config MFD_QCOM_RPM + tristate "Qualcomm Resource Power Manager (RPM)" + depends on ARCH_QCOM && OF +diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile +index 1d2392f06f78..f7f25ef9e17a 100644 +--- a/drivers/mfd/Makefile ++++ b/drivers/mfd/Makefile +@@ -197,6 +197,7 @@ obj-$(CONFIG_MFD_SI476X_CORE) += si476x-core.o + obj-$(CONFIG_MFD_CS5535) += cs5535-mfd.o + obj-$(CONFIG_MFD_OMAP_USB_HOST) += omap-usb-host.o omap-usb-tll.o + obj-$(CONFIG_MFD_PM8XXX) += qcom-pm8xxx.o ssbi.o ++obj-$(CONFIG_MFD_QCOM_QCA639X) += qcom-qca639x.o + obj-$(CONFIG_MFD_QCOM_RPM) += qcom_rpm.o + obj-$(CONFIG_MFD_SPMI_PMIC) += qcom-spmi-pmic.o + obj-$(CONFIG_TPS65911_COMPARATOR) += tps65911-comparator.o +diff --git a/drivers/mfd/qcom-qca639x.c b/drivers/mfd/qcom-qca639x.c +new file mode 100644 +index 000000000000..b31e4b65bec5 +--- /dev/null ++++ b/drivers/mfd/qcom-qca639x.c +@@ -0,0 +1,162 @@ ++#include <linux/delay.h> ++#include <linux/init.h> ++#include <linux/kernel.h> ++#include <linux/module.h> ++#include <linux/pinctrl/consumer.h> ++#include <linux/pinctrl/devinfo.h> ++#include <linux/platform_device.h> ++#include <linux/pm_domain.h> ++#include <linux/regulator/consumer.h> ++#include <linux/slab.h> ++ ++#define MAX_NUM_REGULATORS 8 ++ ++static struct vreg { ++ const char *name; ++ unsigned int load_uA; ++} vregs [MAX_NUM_REGULATORS] = { ++ /* 2.0 V */ ++ { "vddpcie2", 15000 }, ++ { "vddrfa3", 400000 }, ++ ++ /* 0.95 V */ ++ { "vddaon", 100000 }, ++ { "vddpmu", 1250000 }, ++ { "vddrfa1", 200000 }, ++ ++ /* 1.35 V */ ++ { "vddrfa2", 400000 }, ++ { "vddpcie1", 35000 }, ++ ++ /* 1.8 V */ ++ { "vddio", 20000 }, ++}; ++ ++struct qca639x_data { ++ struct regulator_bulk_data regulators[MAX_NUM_REGULATORS]; ++ size_t num_vregs; ++ struct device *dev; ++ struct pinctrl_state *active_state; ++ struct generic_pm_domain pd; ++}; ++ ++#define domain_to_data(domain) container_of(domain, struct qca639x_data, pd) ++ ++static int qca639x_power_on(struct generic_pm_domain *domain) ++{ ++ struct qca639x_data *data = domain_to_data(domain); ++ int ret; ++ ++ dev_warn(&domain->dev, "DUMMY POWER ON\n"); ++ ++ ret = regulator_bulk_enable(data->num_vregs, data->regulators); ++ if (ret) { ++ dev_err(data->dev, "Failed to enable regulators"); ++ return ret; ++ } ++ ++ /* Wait for 1ms before toggling enable pins. */ ++ msleep(1); ++ ++ ret = pinctrl_select_state(data->dev->pins->p, data->active_state); ++ if (ret) { ++ dev_err(data->dev, "Failed to select active state"); ++ return ret; ++ } ++ ++ /* Wait for all power levels to stabilize */ ++ msleep(6); ++ ++ return 0; ++} ++ ++static int qca639x_power_off(struct generic_pm_domain *domain) ++{ ++ struct qca639x_data *data = domain_to_data(domain); ++ ++ dev_warn(&domain->dev, "DUMMY POWER OFF\n"); ++ ++ pinctrl_select_default_state(data->dev); ++ regulator_bulk_disable(data->num_vregs, data->regulators); ++ ++ return 0; ++} ++ ++static int qca639x_probe(struct platform_device *pdev) ++{ ++ struct qca639x_data *data; ++ struct device *dev = &pdev->dev; ++ int i, ret; ++ ++ if (!dev->pins || IS_ERR_OR_NULL(dev->pins->default_state)) ++ return -EINVAL; ++ ++ data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); ++ if (!data) ++ return -ENOMEM; ++ ++ data->dev = dev; ++ data->num_vregs = ARRAY_SIZE(vregs); ++ ++ data->active_state = pinctrl_lookup_state(dev->pins->p, "active"); ++ if (IS_ERR(data->active_state)) { ++ ret = PTR_ERR(data->active_state); ++ dev_err(dev, "Failed to get active_state: %d\n", ret); ++ return ret; ++ } ++ ++ for (i = 0; i < data->num_vregs; i++) ++ data->regulators[i].supply = vregs[i].name; ++ ret = devm_regulator_bulk_get(dev, data->num_vregs, data->regulators); ++ if (ret < 0) ++ return ret; ++ ++ for (i = 0; i < data->num_vregs; i++) { ++ ret = regulator_set_load(data->regulators[i].consumer, vregs[i].load_uA); ++ if (ret) ++ return ret; ++ } ++ ++ data->pd.name = dev_name(dev); ++ data->pd.power_on = qca639x_power_on; ++ data->pd.power_off = qca639x_power_off; ++ ++ ret = pm_genpd_init(&data->pd, NULL, true); ++ if (ret < 0) ++ return ret; ++ ++ ret = of_genpd_add_provider_simple(dev->of_node, &data->pd); ++ if (ret < 0) { ++ pm_genpd_remove(&data->pd); ++ return ret; ++ } ++ ++ platform_set_drvdata(pdev, data); ++ ++ return 0; ++} ++ ++static int qca639x_remove(struct platform_device *pdev) ++{ ++ struct qca639x_data *data = platform_get_drvdata(pdev); ++ ++ pm_genpd_remove(&data->pd); ++ ++ return 0; ++} ++ ++static const struct of_device_id qca639x_of_match[] = { ++ { .compatible = "qcom,qca639x" }, ++}; ++ ++static struct platform_driver qca639x_driver = { ++ .probe = qca639x_probe, ++ .remove = qca639x_remove, ++ .driver = { ++ .name = "qca639x", ++ .of_match_table = qca639x_of_match, ++ }, ++}; ++ ++module_platform_driver(qca639x_driver); ++MODULE_LICENSE("GPL v2"); +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qca6390-driver/0003-mfd-qcom-qca639x-switch-to-platform-config-data.patch b/recipes-kernel/linux/linux-yocto/qca6390-driver/0003-mfd-qcom-qca639x-switch-to-platform-config-data.patch new file mode 100644 index 0000000..72458ef --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qca6390-driver/0003-mfd-qcom-qca639x-switch-to-platform-config-data.patch @@ -0,0 +1,189 @@ +From bf19679f9a583a5bfd0cb711984fbe456af652fd Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Date: Sat, 26 Feb 2022 21:13:18 +0300 +Subject: [PATCH 3/5] mfd: qcom-qca639x: switch to platform config data + +Change qcom-qca639x to use platform config data, in preparation to +supporting other devices. + +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Inappropriate +--- + drivers/mfd/qcom-qca639x.c | 74 +++++++++++++++++++++++--------------- + 1 file changed, 46 insertions(+), 28 deletions(-) + +diff --git a/drivers/mfd/qcom-qca639x.c b/drivers/mfd/qcom-qca639x.c +index b31e4b65bec5..22792561dbad 100644 +--- a/drivers/mfd/qcom-qca639x.c ++++ b/drivers/mfd/qcom-qca639x.c +@@ -1,4 +1,5 @@ + #include <linux/delay.h> ++#include <linux/gpio/consumer.h> + #include <linux/init.h> + #include <linux/kernel.h> + #include <linux/module.h> +@@ -6,15 +7,21 @@ + #include <linux/pinctrl/devinfo.h> + #include <linux/platform_device.h> + #include <linux/pm_domain.h> ++#include <linux/property.h> + #include <linux/regulator/consumer.h> + #include <linux/slab.h> + +-#define MAX_NUM_REGULATORS 8 +- +-static struct vreg { ++struct vreg { + const char *name; + unsigned int load_uA; +-} vregs [MAX_NUM_REGULATORS] = { ++}; ++ ++struct qca_cfg_data { ++ const struct vreg *vregs; ++ size_t num_vregs; ++}; ++ ++static const struct vreg qca6390_vregs[] = { + /* 2.0 V */ + { "vddpcie2", 15000 }, + { "vddrfa3", 400000 }, +@@ -32,19 +39,24 @@ static struct vreg { + { "vddio", 20000 }, + }; + +-struct qca639x_data { +- struct regulator_bulk_data regulators[MAX_NUM_REGULATORS]; ++static const struct qca_cfg_data qca6390_cfg_data = { ++ .vregs = qca6390_vregs, ++ .num_vregs = ARRAY_SIZE(qca6390_vregs), ++}; ++ ++struct qca_data { + size_t num_vregs; + struct device *dev; + struct pinctrl_state *active_state; + struct generic_pm_domain pd; ++ struct regulator_bulk_data regulators[]; + }; + +-#define domain_to_data(domain) container_of(domain, struct qca639x_data, pd) ++#define domain_to_data(domain) container_of(domain, struct qca_data, pd) + +-static int qca639x_power_on(struct generic_pm_domain *domain) ++static int qca_power_on(struct generic_pm_domain *domain) + { +- struct qca639x_data *data = domain_to_data(domain); ++ struct qca_data *data = domain_to_data(domain); + int ret; + + dev_warn(&domain->dev, "DUMMY POWER ON\n"); +@@ -70,9 +82,9 @@ static int qca639x_power_on(struct generic_pm_domain *domain) + return 0; + } + +-static int qca639x_power_off(struct generic_pm_domain *domain) ++static int qca_power_off(struct generic_pm_domain *domain) + { +- struct qca639x_data *data = domain_to_data(domain); ++ struct qca_data *data = domain_to_data(domain); + + dev_warn(&domain->dev, "DUMMY POWER OFF\n"); + +@@ -82,21 +94,26 @@ static int qca639x_power_off(struct generic_pm_domain *domain) + return 0; + } + +-static int qca639x_probe(struct platform_device *pdev) ++static int qca_probe(struct platform_device *pdev) + { +- struct qca639x_data *data; ++ const struct qca_cfg_data *cfg; ++ struct qca_data *data; + struct device *dev = &pdev->dev; + int i, ret; + ++ cfg = device_get_match_data(&pdev->dev); ++ if (!cfg) ++ return -EINVAL; ++ + if (!dev->pins || IS_ERR_OR_NULL(dev->pins->default_state)) + return -EINVAL; + +- data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); ++ data = devm_kzalloc(dev, struct_size(data, regulators, cfg->num_vregs), GFP_KERNEL); + if (!data) + return -ENOMEM; + + data->dev = dev; +- data->num_vregs = ARRAY_SIZE(vregs); ++ data->num_vregs = cfg->num_vregs; + + data->active_state = pinctrl_lookup_state(dev->pins->p, "active"); + if (IS_ERR(data->active_state)) { +@@ -106,20 +123,20 @@ static int qca639x_probe(struct platform_device *pdev) + } + + for (i = 0; i < data->num_vregs; i++) +- data->regulators[i].supply = vregs[i].name; ++ data->regulators[i].supply = cfg->vregs[i].name; + ret = devm_regulator_bulk_get(dev, data->num_vregs, data->regulators); + if (ret < 0) + return ret; + + for (i = 0; i < data->num_vregs; i++) { +- ret = regulator_set_load(data->regulators[i].consumer, vregs[i].load_uA); ++ ret = regulator_set_load(data->regulators[i].consumer, cfg->vregs[i].load_uA); + if (ret) + return ret; + } + + data->pd.name = dev_name(dev); +- data->pd.power_on = qca639x_power_on; +- data->pd.power_off = qca639x_power_off; ++ data->pd.power_on = qca_power_on; ++ data->pd.power_off = qca_power_off; + + ret = pm_genpd_init(&data->pd, NULL, true); + if (ret < 0) +@@ -136,27 +153,28 @@ static int qca639x_probe(struct platform_device *pdev) + return 0; + } + +-static int qca639x_remove(struct platform_device *pdev) ++static int qca_remove(struct platform_device *pdev) + { +- struct qca639x_data *data = platform_get_drvdata(pdev); ++ struct qca_data *data = platform_get_drvdata(pdev); + + pm_genpd_remove(&data->pd); + + return 0; + } + +-static const struct of_device_id qca639x_of_match[] = { +- { .compatible = "qcom,qca639x" }, ++static const struct of_device_id qca_of_match[] = { ++ { .compatible = "qcom,qca6390", .data = &qca6390_cfg_data }, ++ { }, + }; + +-static struct platform_driver qca639x_driver = { +- .probe = qca639x_probe, +- .remove = qca639x_remove, ++static struct platform_driver qca_driver = { ++ .probe = qca_probe, ++ .remove = qca_remove, + .driver = { + .name = "qca639x", +- .of_match_table = qca639x_of_match, ++ .of_match_table = qca_of_match, + }, + }; + +-module_platform_driver(qca639x_driver); ++module_platform_driver(qca_driver); + MODULE_LICENSE("GPL v2"); +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qca6390-driver/0004-mfd-qcom-qca639x-change-qca639x-to-use-gpios-rather-.patch b/recipes-kernel/linux/linux-yocto/qca6390-driver/0004-mfd-qcom-qca639x-change-qca639x-to-use-gpios-rather-.patch new file mode 100644 index 0000000..4520e37 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qca6390-driver/0004-mfd-qcom-qca639x-change-qca639x-to-use-gpios-rather-.patch @@ -0,0 +1,90 @@ +From 3f07b11f1bf49c153df0248de9128ffdad0792f8 Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Date: Sat, 26 Feb 2022 21:17:22 +0300 +Subject: [PATCH 4/5] mfd: qcom-qca639x: change qca639x to use gpios rather + than pinctrl + +Use gpio interface instead of pinctrl interface to toggle enable pins. + +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Inappropriate +--- + drivers/mfd/qcom-qca639x.c | 33 +++++++++++++++++++-------------- + 1 file changed, 19 insertions(+), 14 deletions(-) + +diff --git a/drivers/mfd/qcom-qca639x.c b/drivers/mfd/qcom-qca639x.c +index 22792561dbad..4de860e9bbd0 100644 +--- a/drivers/mfd/qcom-qca639x.c ++++ b/drivers/mfd/qcom-qca639x.c +@@ -47,8 +47,9 @@ static const struct qca_cfg_data qca6390_cfg_data = { + struct qca_data { + size_t num_vregs; + struct device *dev; +- struct pinctrl_state *active_state; + struct generic_pm_domain pd; ++ struct gpio_desc *wlan_en_gpio; ++ struct gpio_desc *bt_en_gpio; + struct regulator_bulk_data regulators[]; + }; + +@@ -70,11 +71,10 @@ static int qca_power_on(struct generic_pm_domain *domain) + /* Wait for 1ms before toggling enable pins. */ + msleep(1); + +- ret = pinctrl_select_state(data->dev->pins->p, data->active_state); +- if (ret) { +- dev_err(data->dev, "Failed to select active state"); +- return ret; +- } ++ if (data->wlan_en_gpio) ++ gpiod_set_value(data->wlan_en_gpio, 1); ++ if (data->bt_en_gpio) ++ gpiod_set_value(data->bt_en_gpio, 1); + + /* Wait for all power levels to stabilize */ + msleep(6); +@@ -88,7 +88,11 @@ static int qca_power_off(struct generic_pm_domain *domain) + + dev_warn(&domain->dev, "DUMMY POWER OFF\n"); + +- pinctrl_select_default_state(data->dev); ++ if (data->wlan_en_gpio) ++ gpiod_set_value(data->wlan_en_gpio, 0); ++ if (data->bt_en_gpio) ++ gpiod_set_value(data->bt_en_gpio, 0); ++ + regulator_bulk_disable(data->num_vregs, data->regulators); + + return 0; +@@ -115,13 +119,6 @@ static int qca_probe(struct platform_device *pdev) + data->dev = dev; + data->num_vregs = cfg->num_vregs; + +- data->active_state = pinctrl_lookup_state(dev->pins->p, "active"); +- if (IS_ERR(data->active_state)) { +- ret = PTR_ERR(data->active_state); +- dev_err(dev, "Failed to get active_state: %d\n", ret); +- return ret; +- } +- + for (i = 0; i < data->num_vregs; i++) + data->regulators[i].supply = cfg->vregs[i].name; + ret = devm_regulator_bulk_get(dev, data->num_vregs, data->regulators); +@@ -134,6 +131,14 @@ static int qca_probe(struct platform_device *pdev) + return ret; + } + ++ data->wlan_en_gpio = devm_gpiod_get_optional(&pdev->dev, "wlan-en", GPIOD_OUT_LOW); ++ if (IS_ERR(data->wlan_en_gpio)) ++ return PTR_ERR(data->wlan_en_gpio); ++ ++ data->bt_en_gpio = devm_gpiod_get_optional(&pdev->dev, "bt-en", GPIOD_OUT_LOW); ++ if (IS_ERR(data->bt_en_gpio)) ++ return PTR_ERR(data->bt_en_gpio); ++ + data->pd.name = dev_name(dev); + data->pd.power_on = qca_power_on; + data->pd.power_off = qca_power_off; +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qca6390-driver/0005-mfd-qcom-qca639x-Add-support-for-WCN6855.patch b/recipes-kernel/linux/linux-yocto/qca6390-driver/0005-mfd-qcom-qca639x-Add-support-for-WCN6855.patch new file mode 100644 index 0000000..734e778 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qca6390-driver/0005-mfd-qcom-qca639x-Add-support-for-WCN6855.patch @@ -0,0 +1,111 @@ +From 87c18e7aa2071dc0c95b76360671c3b3f2dcedec Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Date: Sat, 26 Feb 2022 21:52:08 +0300 +Subject: [PATCH 5/5] mfd: qcom-qca639x: Add support for WCN6855 + +Add support for powering up WCN6855 WiFi/BT chip. + +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Inappropriate +--- + drivers/mfd/qcom-qca639x.c | 49 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 49 insertions(+) + +diff --git a/drivers/mfd/qcom-qca639x.c b/drivers/mfd/qcom-qca639x.c +index 4de860e9bbd0..16ff767a34b0 100644 +--- a/drivers/mfd/qcom-qca639x.c ++++ b/drivers/mfd/qcom-qca639x.c +@@ -44,10 +44,38 @@ static const struct qca_cfg_data qca6390_cfg_data = { + .num_vregs = ARRAY_SIZE(qca6390_vregs), + }; + ++static const struct vreg wcn6855_vregs[] = { ++ /* 2.8 V */ ++ { "vddasd" }, /* external antenna switch */ ++ ++ /* 0.95 V */ ++ { "vddaon" }, ++ { "vddcx" }, ++ { "vddmx" }, ++ ++ /* 1.9 V - 2.1 V */ ++ { "vddrfa1" }, ++ ++ /* 1.35 V */ ++ { "vddrfa2" }, ++ ++ /* 2.2 V, optional */ ++ { "vddrfa3" }, ++ ++ /* 1.8 V */ ++ { "vddio" }, ++}; ++ ++static const struct qca_cfg_data wcn6855_cfg_data = { ++ .vregs = wcn6855_vregs, ++ .num_vregs = ARRAY_SIZE(wcn6855_vregs), ++}; ++ + struct qca_data { + size_t num_vregs; + struct device *dev; + struct generic_pm_domain pd; ++ struct gpio_desc *xo_clk_gpio; + struct gpio_desc *wlan_en_gpio; + struct gpio_desc *bt_en_gpio; + struct regulator_bulk_data regulators[]; +@@ -71,11 +99,24 @@ static int qca_power_on(struct generic_pm_domain *domain) + /* Wait for 1ms before toggling enable pins. */ + msleep(1); + ++ if (data->xo_clk_gpio) { ++ gpiod_set_value(data->xo_clk_gpio, 1); ++ ++ /*XO CLK must be asserted for some time before WLAN_EN */ ++ usleep_range(100, 200); ++ } ++ + if (data->wlan_en_gpio) + gpiod_set_value(data->wlan_en_gpio, 1); + if (data->bt_en_gpio) + gpiod_set_value(data->bt_en_gpio, 1); + ++ if (data->xo_clk_gpio) { ++ /* Assert XO CLK ~(2-5)ms before off for valid latch in HW */ ++ usleep_range(2000, 5000); ++ gpiod_set_value(data->xo_clk_gpio, 0); ++ } ++ + /* Wait for all power levels to stabilize */ + msleep(6); + +@@ -126,11 +167,18 @@ static int qca_probe(struct platform_device *pdev) + return ret; + + for (i = 0; i < data->num_vregs; i++) { ++ if (!cfg->vregs[i].load_uA) ++ continue; ++ + ret = regulator_set_load(data->regulators[i].consumer, cfg->vregs[i].load_uA); + if (ret) + return ret; + } + ++ data->xo_clk_gpio = devm_gpiod_get_optional(&pdev->dev, "xo-clk", GPIOD_OUT_LOW); ++ if (IS_ERR(data->xo_clk_gpio)) ++ return PTR_ERR(data->xo_clk_gpio); ++ + data->wlan_en_gpio = devm_gpiod_get_optional(&pdev->dev, "wlan-en", GPIOD_OUT_LOW); + if (IS_ERR(data->wlan_en_gpio)) + return PTR_ERR(data->wlan_en_gpio); +@@ -169,6 +217,7 @@ static int qca_remove(struct platform_device *pdev) + + static const struct of_device_id qca_of_match[] = { + { .compatible = "qcom,qca6390", .data = &qca6390_cfg_data }, ++ { .compatible = "qcom,wcn6855", .data = &wcn6855_cfg_data }, + { }, + }; + +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qca6390-dts/0001-arm64-dts-qcom-qrb5165-rb5-add-qca639x-power-domain.patch b/recipes-kernel/linux/linux-yocto/qca6390-dts/0001-arm64-dts-qcom-qrb5165-rb5-add-qca639x-power-domain.patch new file mode 100644 index 0000000..8cff6ab --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qca6390-dts/0001-arm64-dts-qcom-qrb5165-rb5-add-qca639x-power-domain.patch @@ -0,0 +1,66 @@ +From 97722f4d4058a76bc63042d5a3f6e239d6b6d943 Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Date: Sun, 20 Dec 2020 02:44:08 +0300 +Subject: [PATCH 1/3] arm64: dts: qcom: qrb5165-rb5: add qca639x power domain + +Add QCA639x power sequencing device to be used as power domain for +respective bluetooth and WiFi devices. + +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Inappropriate +--- + arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 31 ++++++++++++++++++++++++ + 1 file changed, 31 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts +index dd924331b0ee..b781f33d6d2f 100644 +--- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts ++++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts +@@ -230,6 +230,26 @@ vreg_s4a_1p8: vreg-s4a-1p8 { + regulator-max-microvolt = <1800000>; + regulator-always-on; + }; ++ ++ qca639x: qca639x { ++ compatible = "qcom,qca6390"; ++ #power-domain-cells = <0>; ++ ++ vddaon-supply = <&vreg_s6a_0p95>; ++ vddpmu-supply = <&vreg_s2f_0p95>; ++ vddrfa1-supply = <&vreg_s2f_0p95>; ++ vddrfa2-supply = <&vreg_s8c_1p3>; ++ vddrfa3-supply = <&vreg_s5a_1p9>; ++ vddpcie1-supply = <&vreg_s8c_1p3>; ++ vddpcie2-supply = <&vreg_s5a_1p9>; ++ vddio-supply = <&vreg_s4a_1p8>; ++ ++ pinctrl-names = "default"; ++ pinctrl-0 = <&wlan_en_state>; ++ ++ wlan-en-gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>; ++ }; ++ + }; + + &adsp { +@@ -1243,6 +1263,17 @@ sdc2_card_det_n: sd-card-det-n-state { + function = "gpio"; + bias-pull-up; + }; ++ ++ wlan_en_state: wlan-default-state { ++ wlan-en { ++ pins = "gpio20"; ++ function = "gpio"; ++ ++ drive-strength = <16>; ++ output-low; ++ bias-pull-up; ++ }; ++ }; + }; + + &uart12 { +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qca6390-dts/0002-arm64-dts-qcom-Add-Bluetooth-support-on-RB5.patch b/recipes-kernel/linux/linux-yocto/qca6390-dts/0002-arm64-dts-qcom-Add-Bluetooth-support-on-RB5.patch new file mode 100644 index 0000000..9a038e4 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qca6390-dts/0002-arm64-dts-qcom-Add-Bluetooth-support-on-RB5.patch @@ -0,0 +1,66 @@ +From e3316d8e314678931c80d2a1b70ffd53f759dc6f Mon Sep 17 00:00:00 2001 +From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> +Date: Wed, 2 Sep 2020 09:03:29 +0530 +Subject: [PATCH 2/3] arm64: dts: qcom: Add Bluetooth support on RB5 + +Add Bluetooth support on RB5 using the onboard QCA6391 WLAN+BT chipset. + +Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Inappropriate +--- + arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts +index b781f33d6d2f..586ac20ff956 100644 +--- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts ++++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts +@@ -22,6 +22,7 @@ / { + + aliases { + serial0 = &uart12; ++ serial1 = &uart6; + sdhc2 = &sdhc_2; + }; + +@@ -1232,6 +1233,17 @@ &tlmm { + "HST_WLAN_UART_TX", + "HST_WLAN_UART_RX"; + ++ bt_en_state: bt-default-state { ++ bt-en { ++ pins = "gpio21"; ++ function = "gpio"; ++ ++ drive-strength = <16>; ++ output-low; ++ bias-pull-up; ++ }; ++ }; ++ + lt9611_irq_pin: lt9611-irq-state { + pins = "gpio63"; + function = "gpio"; +@@ -1276,6 +1288,18 @@ wlan-en { + }; + }; + ++&uart6 { ++ status = "okay"; ++ bluetooth { ++ compatible = "qcom,qca6390-bt"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&bt_en_state>; ++ ++ power-domains = <&qca639x>; ++ enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>; ++ }; ++}; ++ + &uart12 { + status = "okay"; + }; +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qca6390-dts/0003-arm64-dtb-qcom-qrb5165-rb5-add-power-domain-to-pcie0.patch b/recipes-kernel/linux/linux-yocto/qca6390-dts/0003-arm64-dtb-qcom-qrb5165-rb5-add-power-domain-to-pcie0.patch new file mode 100644 index 0000000..0d868f8 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qca6390-dts/0003-arm64-dtb-qcom-qrb5165-rb5-add-power-domain-to-pcie0.patch @@ -0,0 +1,35 @@ +From 0e2a4a6117aeffeb6150e0a23d90c6748ab809bf Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Date: Sun, 20 Dec 2020 03:17:50 +0300 +Subject: [PATCH 3/3] arm64: dtb: qcom: qrb5165-rb5: add power domain to pcie0 + phy + +If QCA6391 chip (connected to PCIe0) is not powered at the PCIe probe +time, PCIe0 bus probe will timeout and the device will not be detected. +To ease device power up support, use qca639x as pcie0 phy power-domain. +This allows us to make sure that QCA6391 chip is powered on before PCIe0 +probe happens. + +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Inappropriate +--- + arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts +index 586ac20ff956..c86b020d525e 100644 +--- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts ++++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts +@@ -704,6 +704,9 @@ &pcie0_phy { + status = "okay"; + vdda-phy-supply = <&vreg_l5a_0p88>; + vdda-pll-supply = <&vreg_l9a_1p2>; ++ ++ /* Power on QCA639x chip, otherwise PCIe bus timeouts */ ++ power-domains = <&qca639x>; + }; + + &pcie1 { +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-FROMLIST-arm64-dts-qcom-qcm6490-idp-Update-protected.patch b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-FROMLIST-arm64-dts-qcom-qcm6490-idp-Update-protected.patch new file mode 100644 index 0000000..68a75c1 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-FROMLIST-arm64-dts-qcom-qcm6490-idp-Update-protected.patch @@ -0,0 +1,64 @@ +From 033eb03a2ab2057f3f79a20be485f5c58af20816 Mon Sep 17 00:00:00 2001 +From: Taniya Das <quic_tdas@quicinc.com> +Date: Mon, 18 Mar 2024 11:05:54 +0530 +Subject: [PATCH 1/3] FROMLIST: arm64: dts: qcom: qcm6490-idp: Update protected + clocks list + +Certain clocks are not accessible on QCM6490-IDP board, +thus mark them as protected. Update the lpassaudio node to +support the new compatible. + +Signed-off-by: Taniya Das <quic_tdas@quicinc.com> +Upstream-Status: Submitted [https://lore.kernel.org/r/20240318053555.20405-8-quic_tdas@quicinc.com] +--- + arch/arm64/boot/dts/qcom/qcm6490-idp.dts | 28 +++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +index 2a5631b0fa40..3baea71e0248 100644 +--- a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts ++++ b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +@@ -1,6 +1,6 @@ + // SPDX-License-Identifier: BSD-3-Clause + /* +- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. ++ * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved. + */ + + /dts-v1/; +@@ -412,6 +412,32 @@ vreg_bob_3p296: bob { + }; + }; + ++&gcc { ++ protected-clocks = <GCC_AGGRE_NOC_PCIE_1_AXI_CLK> ,<GCC_PCIE_1_AUX_CLK>, ++ <GCC_PCIE_1_AUX_CLK_SRC>, <GCC_PCIE_1_CFG_AHB_CLK>, ++ <GCC_PCIE_1_MSTR_AXI_CLK>, <GCC_PCIE_1_PHY_RCHNG_CLK_SRC>, ++ <GCC_PCIE_1_PIPE_CLK>, <GCC_PCIE_1_PIPE_CLK_SRC>, ++ <GCC_PCIE_1_SLV_AXI_CLK>, <GCC_PCIE_1_SLV_Q2A_AXI_CLK>, ++ <GCC_QSPI_CNOC_PERIPH_AHB_CLK>, <GCC_QSPI_CORE_CLK>, ++ <GCC_QSPI_CORE_CLK_SRC>,<GCC_USB30_SEC_MASTER_CLK>, ++ <GCC_USB30_SEC_MASTER_CLK_SRC>, <GCC_USB30_SEC_MOCK_UTMI_CLK>, ++ <GCC_USB30_SEC_MOCK_UTMI_CLK_SRC>, ++ <GCC_USB30_SEC_MOCK_UTMI_POSTDIV_CLK_SRC>, <GCC_USB30_SEC_SLEEP_CLK>, ++ <GCC_USB3_SEC_PHY_AUX_CLK>, <GCC_USB3_SEC_PHY_AUX_CLK_SRC>, ++ <GCC_USB3_SEC_PHY_COM_AUX_CLK>, <GCC_USB3_SEC_PHY_PIPE_CLK>, ++ <GCC_USB3_SEC_PHY_PIPE_CLK_SRC>, <GCC_CFG_NOC_LPASS_CLK>, ++ <GCC_MSS_GPLL0_MAIN_DIV_CLK_SRC>, <GCC_MSS_CFG_AHB_CLK>, ++ <GCC_MSS_OFFLINE_AXI_CLK>, <GCC_MSS_SNOC_AXI_CLK>, ++ <GCC_MSS_Q6_MEMNOC_AXI_CLK>, <GCC_MSS_Q6SS_BOOT_CLK_SRC>, ++ <GCC_SEC_CTRL_CLK_SRC>, <GCC_WPSS_AHB_CLK>, ++ <GCC_WPSS_AHB_BDG_MST_CLK>, <GCC_WPSS_RSCP_CLK>; ++}; ++ ++&lpass_audiocc { ++ compatible = "qcom,qcm6490-lpassaudiocc"; ++ /delete-property/ power-domains; ++}; ++ + &qupv3_id_0 { + status = "okay"; + }; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-PENDING-arm64-dts-qcom-qcm6490-Add-UFS-nodes-for-IDP.patch b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-PENDING-arm64-dts-qcom-qcm6490-Add-UFS-nodes-for-IDP.patch new file mode 100644 index 0000000..c53a032 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-PENDING-arm64-dts-qcom-qcm6490-Add-UFS-nodes-for-IDP.patch @@ -0,0 +1,50 @@ +From b51bcd8342aaaffa4d08fd3474b1512f9992886e Mon Sep 17 00:00:00 2001 +From: Manish Pandey <quic_mapa@quicinc.com> +Date: Tue, 17 Oct 2023 23:46:10 +0530 +Subject: [PATCH 1/2] PENDING: arm64: dts: qcom: qcm6490: Add UFS nodes for IDP + +Add UFS host controller and Phy nodes for Qualcomm +qcm6490 IDP Board. + +Change-Id: If756cf2396ad0d82e7c607738068a634c5a1919a +Signed-off-by: Manish Pandey <quic_mapa@quicinc.com> +Signed-off-by: Salendarsingh Gaud <quic_sgaud@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Pending +--- + arch/arm64/boot/dts/qcom/qcm6490-idp.dts | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +index 3baea71e0248..424cd9c2b092 100644 +--- a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts ++++ b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +@@ -463,6 +463,25 @@ &uart5 { + status = "okay"; + }; + ++&ufs_mem_hc { ++ reset-gpios = <&tlmm 175 GPIO_ACTIVE_LOW>; ++ vcc-supply = <&vreg_l7b_2p952>; ++ vcc-max-microamp = <800000>; ++ vccq-supply = <&vreg_l9b_1p2>; ++ vccq-max-microamp = <900000>; ++ vccq2-supply = <&vreg_l9b_1p2>; ++ vccq2-max-microamp = <900000>; ++ ++ status = "okay"; ++}; ++ ++&ufs_mem_phy { ++ vdda-phy-supply = <&vreg_l10c_0p88>; ++ vdda-pll-supply = <&vreg_l6b_1p2>; ++ ++ status = "okay"; ++}; ++ + &usb_1 { + status = "okay"; + }; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-UPSTREAM-arm64-dts-qcom-qcs6490-rb3gen2-Correct-the-.patch b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-UPSTREAM-arm64-dts-qcom-qcs6490-rb3gen2-Correct-the-.patch new file mode 100644 index 0000000..194e302 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-UPSTREAM-arm64-dts-qcom-qcs6490-rb3gen2-Correct-the-.patch @@ -0,0 +1,37 @@ +From a324118e3760a4a62e623bea5a9f5f262ef97436 Mon Sep 17 00:00:00 2001 +From: Atul Dhudase <quic_adhudase@quicinc.com> +Date: Tue, 2 Apr 2024 15:52:03 +0530 +Subject: [PATCH 1/2] UPSTREAM: arm64: dts: qcom: qcs6490-rb3gen2: Correct the + voltage setting for vph_pwr + +Min and max voltages for vph_pwr should be same, otherwise rpmh +will not probe, so correcting the min and max voltages for vph_pwr. + +Fixes: 04cf333afc75 ("arm64: dts: qcom: Add base qcs6490-rb3gen2 board dts") +Signed-off-by: Komal Bajaj <quic_kbajaj@quicinc.com> +Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20231220110015.25378-3-quic_kbajaj@quicinc.com +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 5f439c0e64b877c1f9cc7f0bed894b6df45d43d] +--- + arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +index 4266a1200669..d519f2064ea3 100644 +--- a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts ++++ b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +@@ -121,8 +121,8 @@ debug_vm_mem: debug-vm@d0600000 { + vph_pwr: vph-pwr-regulator { + compatible = "regulator-fixed"; + regulator-name = "vph_pwr"; +- regulator-min-microvolt = <2500000>; +- regulator-max-microvolt = <4350000>; ++ regulator-min-microvolt = <3700000>; ++ regulator-max-microvolt = <3700000>; + }; + }; + +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-UPSTREAM-dt-bindings-arm-qcom-Add-QCM6490-Fairphone-.patch b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-UPSTREAM-dt-bindings-arm-qcom-Add-QCM6490-Fairphone-.patch new file mode 100644 index 0000000..0010b69 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0001-UPSTREAM-dt-bindings-arm-qcom-Add-QCM6490-Fairphone-.patch @@ -0,0 +1,43 @@ +From 4228299b08120ce8afef3271768dcfa5e760c2c6 Mon Sep 17 00:00:00 2001 +From: Luca Weiss <luca.weiss@fairphone.com> +Date: Tue, 19 Sep 2023 14:46:00 +0200 +Subject: [PATCH 1/4] UPSTREAM: dt-bindings: arm: qcom: Add QCM6490 Fairphone 5 + +Fairphone 5 is a smartphone based on the QCM6490 SoC. + +Signed-off-by: Luca Weiss <luca.weiss@fairphone.com> +Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> +Link: https://lore.kernel.org/r/20230919-fp5-initial-v2-6-14bb7cedadf5@fairphone.com +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 4b1a16d776b474345b12f834de1fd42bca226d90] +--- + Documentation/devicetree/bindings/arm/qcom.yaml | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/Documentation/devicetree/bindings/arm/qcom.yaml b/Documentation/devicetree/bindings/arm/qcom.yaml +index 90f31beb80c2..adee504bffdb 100644 +--- a/Documentation/devicetree/bindings/arm/qcom.yaml ++++ b/Documentation/devicetree/bindings/arm/qcom.yaml +@@ -50,6 +50,7 @@ description: | + msm8998 + qcs404 + qcm2290 ++ qcm6490 + qdu1000 + qrb2210 + qrb4210 +@@ -391,6 +392,11 @@ properties: + - const: qcom,qrb2210 + - const: qcom,qcm2290 + ++ - items: ++ - enum: ++ - fairphone,fp5 ++ - const: qcom,qcm6490 ++ + - description: Qualcomm Technologies, Inc. Distributed Unit 1000 platform + items: + - enum: +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-PENDING-arm64-dts-qcom-Add-UFS-nodes-for-qcs6490-rb3.patch b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-PENDING-arm64-dts-qcom-Add-UFS-nodes-for-qcs6490-rb3.patch new file mode 100644 index 0000000..8ac2a74 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-PENDING-arm64-dts-qcom-Add-UFS-nodes-for-qcs6490-rb3.patch @@ -0,0 +1,49 @@ +From 4c0b2673c7d702483a526ebe279d57c4eece8f09 Mon Sep 17 00:00:00 2001 +From: Atul Dhudase <quic_adhudase@quicinc.com> +Date: Fri, 22 Mar 2024 14:06:21 +0530 +Subject: [PATCH 2/2] PENDING: arm64: dts: qcom: Add UFS nodes for + qcs6490-rb3gen2 + +Add UFS host controller and Phy nodes for Qualcomm +qcs6490-rb3gen2 board. + +Signed-off-by: Manish Pandey <quic_mapa@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Pending +--- + arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +index 84137086c1f6..6dbeb182d014 100644 +--- a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts ++++ b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +@@ -446,6 +446,25 @@ &uart5 { + status = "okay"; + }; + ++&ufs_mem_hc { ++ reset-gpios = <&tlmm 175 GPIO_ACTIVE_LOW>; ++ vcc-supply = <&vreg_l7b_2p952>; ++ vcc-max-microamp = <800000>; ++ vccq-supply = <&vreg_l9b_1p2>; ++ vccq-max-microamp = <900000>; ++ vccq2-supply = <&vreg_l9b_1p2>; ++ vccq2-max-microamp = <900000>; ++ ++ status = "okay"; ++}; ++ ++&ufs_mem_phy { ++ vdda-phy-supply = <&vreg_l10c_0p88>; ++ vdda-pll-supply = <&vreg_l6b_1p2>; ++ ++ status = "okay"; ++}; ++ + &usb_1 { + status = "okay"; + }; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-UPSTREAM-arm64-dts-qcom-qcm6490-idp-Correct-the-volt.patch b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-UPSTREAM-arm64-dts-qcom-qcm6490-idp-Correct-the-volt.patch new file mode 100644 index 0000000..b161099 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-UPSTREAM-arm64-dts-qcom-qcm6490-idp-Correct-the-volt.patch @@ -0,0 +1,37 @@ +From a9d2e53efb1dd1bfea1be9c66ddcf319246aa140 Mon Sep 17 00:00:00 2001 +From: Atul Dhudase <quic_adhudase@quicinc.com> +Date: Tue, 2 Apr 2024 15:56:30 +0530 +Subject: [PATCH 2/2] UPSTREAM: arm64: dts: qcom: qcm6490-idp: Correct the + voltage setting for vph_pwr + +Min and max voltages for vph_pwr should be same, otherwise rpmh +will not probe, so correcting the min and max voltages for vph_pwr. + +Fixes: 9af6a9f32ad0 ("arm64: dts: qcom: Add base qcm6490 idp board dts") +Signed-off-by: Komal Bajaj <quic_kbajaj@quicinc.com> +Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20231220110015.25378-2-quic_kbajaj@quicinc.com +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git aa56130e88de50773f84de4039c7de81ab783744] +--- + arch/arm64/boot/dts/qcom/qcm6490-idp.dts | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +index 123e0e1b9e84..89e653c93ae8 100644 +--- a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts ++++ b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +@@ -120,8 +120,8 @@ debug_vm_mem: debug-vm@d0600000 { + vph_pwr: vph-pwr-regulator { + compatible = "regulator-fixed"; + regulator-name = "vph_pwr"; +- regulator-min-microvolt = <2500000>; +- regulator-max-microvolt = <4350000>; ++ regulator-min-microvolt = <3700000>; ++ regulator-max-microvolt = <3700000>; + }; + }; + +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-UPSTREAM-arm64-dts-qcom-qcs6490-rb3gen2-Declare-GCC-.patch b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-UPSTREAM-arm64-dts-qcom-qcs6490-rb3gen2-Declare-GCC-.patch new file mode 100644 index 0000000..5834979 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-UPSTREAM-arm64-dts-qcom-qcs6490-rb3gen2-Declare-GCC-.patch @@ -0,0 +1,56 @@ +From 75600814c282c7e7de67b94786d1dee0b9ddcfe2 Mon Sep 17 00:00:00 2001 +From: Atul Dhudase <quic_adhudase@quicinc.com> +Date: Tue, 2 Apr 2024 12:28:35 +0530 +Subject: [PATCH 2/3] UPSTREAM: arm64: dts: qcom: qcs6490-rb3gen2: Declare GCC + clocks protected + +The SC7280 GCC binding describes clocks which, due to the difference in +security model, are not accessible on the RB3gen2 - in the same way seen +on QCM6490. + +Mark these clocks as protected, to allow the board to boot. In contrast +to the present QCM6490 boards GCC_EDP_CLKREF_EN is left out, as this +does not need to be "protected" and is used on the RB3Gen2 board. + +Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Reviewed-by: Luca Weiss <luca.weiss@fairphone.com> +Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com> +Link: https://lore.kernel.org/r/20240209-qcm6490-gcc-protected-clocks-v2-1-11cd5fc13bd0@quicinc.com +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 7c6bef576a8891abce08d448165b53328032aa5f] +--- + arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +index 0beab54c051e..b642ba9d4c00 100644 +--- a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts ++++ b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +@@ -410,6 +410,23 @@ vreg_bob_3p296: bob { + }; + }; + ++&gcc { ++ protected-clocks = <GCC_CFG_NOC_LPASS_CLK>, ++ <GCC_MSS_CFG_AHB_CLK>, ++ <GCC_MSS_GPLL0_MAIN_DIV_CLK_SRC>, ++ <GCC_MSS_OFFLINE_AXI_CLK>, ++ <GCC_MSS_Q6SS_BOOT_CLK_SRC>, ++ <GCC_MSS_Q6_MEMNOC_AXI_CLK>, ++ <GCC_MSS_SNOC_AXI_CLK>, ++ <GCC_QSPI_CNOC_PERIPH_AHB_CLK>, ++ <GCC_QSPI_CORE_CLK>, ++ <GCC_QSPI_CORE_CLK_SRC>, ++ <GCC_SEC_CTRL_CLK_SRC>, ++ <GCC_WPSS_AHB_BDG_MST_CLK>, ++ <GCC_WPSS_AHB_CLK>, ++ <GCC_WPSS_RSCP_CLK>; ++}; ++ + &qupv3_id_0 { + status = "okay"; + }; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-UPSTREAM-dt-bindings-arm-qcom-Add-QCM6490-IDP-and-QC.patch b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-UPSTREAM-dt-bindings-arm-qcom-Add-QCM6490-IDP-and-QC.patch new file mode 100644 index 0000000..7951f09 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0002-UPSTREAM-dt-bindings-arm-qcom-Add-QCM6490-IDP-and-QC.patch @@ -0,0 +1,39 @@ +From 4557d6178af17473f392968474b5ca0da56b1175 Mon Sep 17 00:00:00 2001 +From: Komal Bajaj <quic_kbajaj@quicinc.com> +Date: Wed, 29 Nov 2023 12:28:14 +0530 +Subject: [PATCH 2/4] UPSTREAM: dt-bindings: arm: qcom: Add QCM6490 IDP and + QCS6490 RB3Gen2 board + +Document the qcom,qcm6490-idp and qcs6490-rb3gen2 boards. +qcm6490-idp based off qcm6490 SoC derived from sc7280 meant for +various form factor including IoT and qcs6490-rb3gen2 based off +qcs6490 SoC derivative of qcm6490 without internal modem. + +Co-developed by: Naina Mehta <quic_nainmeht@quicinc.com> +Signed-off by: Naina Mehta <quic_nainmeht@quicinc.com> + +Signed-off-by: Komal Bajaj <quic_kbajaj@quicinc.com> +Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> +Link: https://lore.kernel.org/r/20231129065816.26409-2-quic_kbajaj@quicinc.com +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 06fd1dd1efde4a0bcc874de03558f6e0ba3817eb] +--- + Documentation/devicetree/bindings/arm/qcom.yaml | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Documentation/devicetree/bindings/arm/qcom.yaml b/Documentation/devicetree/bindings/arm/qcom.yaml +index adee504bffdb..e45e293457d3 100644 +--- a/Documentation/devicetree/bindings/arm/qcom.yaml ++++ b/Documentation/devicetree/bindings/arm/qcom.yaml +@@ -395,6 +395,8 @@ properties: + - items: + - enum: + - fairphone,fp5 ++ - qcom,qcm6490-idp ++ - qcom,qcs6490-rb3gen2 + - const: qcom,qcm6490 + + - description: Qualcomm Technologies, Inc. Distributed Unit 1000 platform +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0003-BACKPORT-FROMLIST-arm64-dts-qcom-qcs6490-rb3gen2-Upd.patch b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0003-BACKPORT-FROMLIST-arm64-dts-qcom-qcs6490-rb3gen2-Upd.patch new file mode 100644 index 0000000..a1716fd --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0003-BACKPORT-FROMLIST-arm64-dts-qcom-qcs6490-rb3gen2-Upd.patch @@ -0,0 +1,41 @@ +From 85e1d98a2b1d8515d242154aef320a3900fb5030 Mon Sep 17 00:00:00 2001 +From: Taniya Das <quic_tdas@quicinc.com> +Date: Mon, 18 Mar 2024 11:05:55 +0530 +Subject: [PATCH 3/3] BACKPORT: FROMLIST: arm64: dts: qcom: qcs6490-rb3gen2: + Update the LPASS audio node + +Update the lpassaudio node to support the new compatible. + +Signed-off-by: Taniya Das <quic_tdas@quicinc.com> +Upstream-Status: Submitted [https://lore.kernel.org/r/20240318053555.20405-9-quic_tdas@quicinc.com] +--- + arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +index b642ba9d4c00..84137086c1f6 100644 +--- a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts ++++ b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +@@ -1,6 +1,6 @@ + // SPDX-License-Identifier: BSD-3-Clause + /* +- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. ++ * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved. + */ + + /dts-v1/; +@@ -427,6 +427,11 @@ &gcc { + <GCC_WPSS_RSCP_CLK>; + }; + ++&lpass_audiocc { ++ compatible = "qcom,qcm6490-lpassaudiocc"; ++ /delete-property/ power-domains; ++}; ++ + &qupv3_id_0 { + status = "okay"; + }; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0003-UPSTREAM-arm64-dts-qcom-Add-base-qcm6490-id.patch b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0003-UPSTREAM-arm64-dts-qcom-Add-base-qcm6490-id.patch new file mode 100644 index 0000000..bb60422 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0003-UPSTREAM-arm64-dts-qcom-Add-base-qcm6490-id.patch @@ -0,0 +1,508 @@ +From 4c6d64ebad9067be2a5138ab202f570b0e71d3f0 Mon Sep 17 00:00:00 2001 +From: Komal Bajaj <quic_kbajaj@quicinc.com> +Date: Wed, 29 Nov 2023 12:28:15 +0530 +Subject: [PATCH 3/4] UPSTREAM: arm64: dts: qcom: Add base qcm6490 + idp board dts + +Add DTS for Qualcomm IDP platform using QCM6490 SoC. +This adds debug uart, eMMC and usb support along with +regulators found on this board. + +Signed-off-by: Komal Bajaj <quic_kbajaj@quicinc.com> +Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org> +Link: https://lore.kernel.org/r/20231129065816.26409-3-quic_kbajaj@quicinc.com +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 9af6a9f32ad0023b1d682af213a0c8c2aa1dce29] +--- + arch/arm64/boot/dts/qcom/Makefile | 1 + + arch/arm64/boot/dts/qcom/qcm6490-idp.dts | 465 +++++++++++++++++++++++ + 2 files changed, 466 insertions(+) + create mode 100644 arch/arm64/boot/dts/qcom/qcm6490-idp.dts + +diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile +index 2cca20563a1d..3199b1b8db13 100644 +--- a/arch/arm64/boot/dts/qcom/Makefile ++++ b/arch/arm64/boot/dts/qcom/Makefile +@@ -81,6 +81,7 @@ dtb-$(CONFIG_ARCH_QCOM) += msm8998-sony-xperia-yoshino-lilac.dtb + dtb-$(CONFIG_ARCH_QCOM) += msm8998-sony-xperia-yoshino-maple.dtb + dtb-$(CONFIG_ARCH_QCOM) += msm8998-sony-xperia-yoshino-poplar.dtb + dtb-$(CONFIG_ARCH_QCOM) += msm8998-xiaomi-sagit.dtb ++dtb-$(CONFIG_ARCH_QCOM) += qcm6490-idp.dtb + dtb-$(CONFIG_ARCH_QCOM) += qcs404-evb-1000.dtb + dtb-$(CONFIG_ARCH_QCOM) += qcs404-evb-4000.dtb + dtb-$(CONFIG_ARCH_QCOM) += qdu1000-idp.dtb +diff --git a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +new file mode 100644 +index 000000000000..2a5631b0fa40 +--- /dev/null ++++ b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +@@ -0,0 +1,465 @@ ++// SPDX-License-Identifier: BSD-3-Clause ++/* ++ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. ++ */ ++ ++/dts-v1/; ++ ++#include <dt-bindings/regulator/qcom,rpmh-regulator.h> ++#include "sc7280.dtsi" ++#include "pm7325.dtsi" ++#include "pm8350c.dtsi" ++#include "pmk8350.dtsi" ++ ++/delete-node/ &ipa_fw_mem; ++/delete-node/ &rmtfs_mem; ++/delete-node/ &video_mem; ++/delete-node/ &wlan_ce_mem; ++/delete-node/ &xbl_mem; ++ ++/ { ++ model = "Qualcomm Technologies, Inc. QCM6490 IDP"; ++ compatible = "qcom,qcm6490-idp", "qcom,qcm6490"; ++ chassis-type = "embedded"; ++ ++ aliases { ++ serial0 = &uart5; ++ }; ++ ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ reserved-memory { ++ xbl_mem: xbl@80700000 { ++ reg = <0x0 0x80700000 0x0 0x100000>; ++ no-map; ++ }; ++ ++ cdsp_secure_heap_mem: cdsp-secure-heap@81800000 { ++ reg = <0x0 0x81800000 0x0 0x1e00000>; ++ no-map; ++ }; ++ ++ camera_mem: camera@84300000 { ++ reg = <0x0 0x84300000 0x0 0x500000>; ++ no-map; ++ }; ++ ++ wpss_mem: wpss@84800000 { ++ reg = <0x0 0x84800000 0x0 0x1900000>; ++ no-map; ++ }; ++ ++ adsp_mem: adsp@86100000 { ++ reg = <0x0 0x86100000 0x0 0x2800000>; ++ no-map; ++ }; ++ ++ cdsp_mem: cdsp@88900000 { ++ reg = <0x0 0x88900000 0x0 0x1e00000>; ++ no-map; ++ }; ++ ++ video_mem: video@8a700000 { ++ reg = <0x0 0x8a700000 0x0 0x700000>; ++ no-map; ++ }; ++ ++ cvp_mem: cvp@8ae00000 { ++ reg = <0x0 0x8ae00000 0x0 0x500000>; ++ no-map; ++ }; ++ ++ ipa_fw_mem: ipa-fw@8b300000 { ++ reg = <0x0 0x8b300000 0x0 0x10000>; ++ no-map; ++ }; ++ ++ ipa_gsi_mem: ipa-gsi@8b310000 { ++ reg = <0x0 0x8b310000 0x0 0xa000>; ++ no-map; ++ }; ++ ++ gpu_microcode_mem: gpu-microcode@8b31a000 { ++ reg = <0x0 0x8b31a000 0x0 0x2000>; ++ no-map; ++ }; ++ ++ mpss_mem: mpss@8b800000 { ++ reg = <0x0 0x8b800000 0x0 0xf600000>; ++ no-map; ++ }; ++ ++ tz_stat_mem: tz-stat@c0000000 { ++ reg = <0x0 0xc0000000 0x0 0x100000>; ++ no-map; ++ }; ++ ++ tags_mem: tags@c0100000 { ++ reg = <0x0 0xc0100000 0x0 0x1200000>; ++ no-map; ++ }; ++ ++ qtee_mem: qtee@c1300000 { ++ reg = <0x0 0xc1300000 0x0 0x500000>; ++ no-map; ++ }; ++ ++ trusted_apps_mem: trusted_apps@c1800000 { ++ reg = <0x0 0xc1800000 0x0 0x1c00000>; ++ no-map; ++ }; ++ ++ debug_vm_mem: debug-vm@d0600000 { ++ reg = <0x0 0xd0600000 0x0 0x100000>; ++ no-map; ++ }; ++ }; ++ ++ vph_pwr: vph-pwr-regulator { ++ compatible = "regulator-fixed"; ++ regulator-name = "vph_pwr"; ++ regulator-min-microvolt = <2500000>; ++ regulator-max-microvolt = <4350000>; ++ }; ++}; ++ ++&apps_rsc { ++ regulators-0 { ++ compatible = "qcom,pm7325-rpmh-regulators"; ++ qcom,pmic-id = "b"; ++ ++ vdd-s1-supply = <&vph_pwr>; ++ vdd-s2-supply = <&vph_pwr>; ++ vdd-s3-supply = <&vph_pwr>; ++ vdd-s4-supply = <&vph_pwr>; ++ vdd-s5-supply = <&vph_pwr>; ++ vdd-s6-supply = <&vph_pwr>; ++ vdd-s7-supply = <&vph_pwr>; ++ vdd-s8-supply = <&vph_pwr>; ++ vdd-l1-l4-l12-l15-supply = <&vreg_s7b_0p972>; ++ vdd-l2-l7-supply = <&vreg_bob_3p296>; ++ vdd-l3-supply = <&vreg_s2b_0p876>; ++ vdd-l5-supply = <&vreg_s2b_0p876>; ++ vdd-l6-l9-l10-supply = <&vreg_s8b_1p272>; ++ vdd-l8-supply = <&vreg_s7b_0p972>; ++ vdd-l11-l17-l18-l19-supply = <&vreg_s1b_1p872>; ++ vdd-l13-supply = <&vreg_s7b_0p972>; ++ vdd-l14-l16-supply = <&vreg_s8b_1p272>; ++ ++ vreg_s1b_1p872: smps1 { ++ regulator-min-microvolt = <1840000>; ++ regulator-max-microvolt = <2040000>; ++ }; ++ ++ vreg_s2b_0p876: smps2 { ++ regulator-min-microvolt = <570070>; ++ regulator-max-microvolt = <1050000>; ++ }; ++ ++ vreg_s7b_0p972: smps7 { ++ regulator-min-microvolt = <535000>; ++ regulator-max-microvolt = <1120000>; ++ }; ++ ++ vreg_s8b_1p272: smps8 { ++ regulator-min-microvolt = <1200000>; ++ regulator-max-microvolt = <1500000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_RET>; ++ }; ++ ++ vreg_l1b_0p912: ldo1 { ++ regulator-min-microvolt = <825000>; ++ regulator-max-microvolt = <925000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l2b_3p072: ldo2 { ++ regulator-min-microvolt = <2700000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l3b_0p504: ldo3 { ++ regulator-min-microvolt = <312000>; ++ regulator-max-microvolt = <910000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l4b_0p752: ldo4 { ++ regulator-min-microvolt = <752000>; ++ regulator-max-microvolt = <820000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ reg_l5b_0p752: ldo5 { ++ regulator-min-microvolt = <552000>; ++ regulator-max-microvolt = <832000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l6b_1p2: ldo6 { ++ regulator-min-microvolt = <1140000>; ++ regulator-max-microvolt = <1260000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l7b_2p952: ldo7 { ++ regulator-min-microvolt = <2400000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l8b_0p904: ldo8 { ++ regulator-min-microvolt = <870000>; ++ regulator-max-microvolt = <970000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l9b_1p2: ldo9 { ++ regulator-min-microvolt = <1200000>; ++ regulator-max-microvolt = <1304000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l11b_1p504: ldo11 { ++ regulator-min-microvolt = <1504000>; ++ regulator-max-microvolt = <2000000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l12b_0p751: ldo12 { ++ regulator-min-microvolt = <751000>; ++ regulator-max-microvolt = <824000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l13b_0p53: ldo13 { ++ regulator-min-microvolt = <530000>; ++ regulator-max-microvolt = <824000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l14b_1p08: ldo14 { ++ regulator-min-microvolt = <1080000>; ++ regulator-max-microvolt = <1304000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l15b_0p765: ldo15 { ++ regulator-min-microvolt = <765000>; ++ regulator-max-microvolt = <1020000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l16b_1p1: ldo16 { ++ regulator-min-microvolt = <1100000>; ++ regulator-max-microvolt = <1300000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l17b_1p7: ldo17 { ++ regulator-min-microvolt = <1700000>; ++ regulator-max-microvolt = <1900000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l18b_1p8: ldo18 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <2000000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l19b_1p8: ldo19 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <2000000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ regulator-allow-set-load; ++ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM ++ RPMH_REGULATOR_MODE_HPM>; ++ }; ++ }; ++ ++ regulators-1 { ++ compatible = "qcom,pm8350c-rpmh-regulators"; ++ qcom,pmic-id = "c"; ++ ++ vdd-s1-supply = <&vph_pwr>; ++ vdd-s2-supply = <&vph_pwr>; ++ vdd-s3-supply = <&vph_pwr>; ++ vdd-s4-supply = <&vph_pwr>; ++ vdd-s5-supply = <&vph_pwr>; ++ vdd-s6-supply = <&vph_pwr>; ++ vdd-s7-supply = <&vph_pwr>; ++ vdd-s8-supply = <&vph_pwr>; ++ vdd-s9-supply = <&vph_pwr>; ++ vdd-s10-supply = <&vph_pwr>; ++ vdd-l1-l12-supply = <&vreg_s1b_1p872>; ++ vdd-l2-l8-supply = <&vreg_s1b_1p872>; ++ vdd-l3-l4-l5-l7-l13-supply = <&vreg_bob_3p296>; ++ vdd-l6-l9-l11-supply = <&vreg_bob_3p296>; ++ vdd-l10-supply = <&vreg_s7b_0p972>; ++ vdd-bob-supply = <&vph_pwr>; ++ ++ vreg_s1c_2p19: smps1 { ++ regulator-min-microvolt = <2190000>; ++ regulator-max-microvolt = <2210000>; ++ }; ++ ++ vreg_s2c_0p752: smps2 { ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <800000>; ++ }; ++ ++ vreg_s5c_0p752: smps5 { ++ regulator-min-microvolt = <465000>; ++ regulator-max-microvolt = <1050000>; ++ }; ++ ++ vreg_s7c_0p752: smps7 { ++ regulator-min-microvolt = <465000>; ++ regulator-max-microvolt = <800000>; ++ }; ++ ++ vreg_s9c_1p084: smps9 { ++ regulator-min-microvolt = <1010000>; ++ regulator-max-microvolt = <1170000>; ++ }; ++ ++ vreg_l1c_1p8: ldo1 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1980000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l2c_1p62: ldo2 { ++ regulator-min-microvolt = <1620000>; ++ regulator-max-microvolt = <1980000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l3c_2p8: ldo3 { ++ regulator-min-microvolt = <2800000>; ++ regulator-max-microvolt = <3540000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l4c_1p62: ldo4 { ++ regulator-min-microvolt = <1620000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l5c_1p62: ldo5 { ++ regulator-min-microvolt = <1620000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l6c_2p96: ldo6 { ++ regulator-min-microvolt = <1650000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l7c_3p0: ldo7 { ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l8c_1p62: ldo8 { ++ regulator-min-microvolt = <1620000>; ++ regulator-max-microvolt = <2000000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l9c_2p96: ldo9 { ++ regulator-min-microvolt = <2700000>; ++ regulator-max-microvolt = <35440000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l10c_0p88: ldo10 { ++ regulator-min-microvolt = <720000>; ++ regulator-max-microvolt = <1050000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l11c_2p8: ldo11 { ++ regulator-min-microvolt = <2800000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l12c_1p65: ldo12 { ++ regulator-min-microvolt = <1650000>; ++ regulator-max-microvolt = <2000000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l13c_2p7: ldo13 { ++ regulator-min-microvolt = <2700000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_bob_3p296: bob { ++ regulator-min-microvolt = <3008000>; ++ regulator-max-microvolt = <3960000>; ++ }; ++ }; ++}; ++ ++&qupv3_id_0 { ++ status = "okay"; ++}; ++ ++&sdhc_1 { ++ non-removable; ++ no-sd; ++ no-sdio; ++ ++ vmmc-supply = <&vreg_l7b_2p952>; ++ vqmmc-supply = <&vreg_l19b_1p8>; ++ ++ status = "okay"; ++}; ++ ++&tlmm { ++ gpio-reserved-ranges = <32 2>, /* ADSP */ ++ <48 4>; /* NFC */ ++}; ++ ++&uart5 { ++ compatible = "qcom,geni-debug-uart"; ++ status = "okay"; ++}; ++ ++&usb_1 { ++ status = "okay"; ++}; ++ ++&usb_1_dwc3 { ++ dr_mode = "peripheral"; ++}; ++ ++&usb_1_hsphy { ++ vdda-pll-supply = <&vreg_l10c_0p88>; ++ vdda33-supply = <&vreg_l2b_3p072>; ++ vdda18-supply = <&vreg_l1c_1p8>; ++ ++ status = "okay"; ++}; ++ ++&usb_1_qmpphy { ++ vdda-phy-supply = <&vreg_l6b_1p2>; ++ vdda-pll-supply = <&vreg_l1b_0p912>; ++ ++ status = "okay"; ++}; ++ ++&wifi { ++ memory-region = <&wlan_fw_mem>; ++}; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0004-UPSTREAM-arm64-dts-qcom-Add-base-qcs6490-rb3gen2-boa.patch b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0004-UPSTREAM-arm64-dts-qcom-Add-base-qcs6490-rb3gen2-boa.patch new file mode 100644 index 0000000..ce4c246 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-board-dts/0004-UPSTREAM-arm64-dts-qcom-Add-base-qcs6490-rb3gen2-boa.patch @@ -0,0 +1,497 @@ +From 35f473c0500b63f21de7f6ea144f2b5a327a180e Mon Sep 17 00:00:00 2001 +From: Komal Bajaj <quic_kbajaj@quicinc.com> +Date: Wed, 29 Nov 2023 12:28:16 +0530 +Subject: [PATCH 4/4] UPSTREAM: arm64: dts: qcom: Add base qcs6490-rb3gen2 + board dts + +Add DTS for Qualcomm qcs6490-rb3gen2 board which uses +QCS6490 SoC. This adds debug uart and usb support along +with regulators found on this board. + +Co-developed-by: Naina Mehta <quic_nainmeht@quicinc.com> +Signed-off-by: Naina Mehta <quic_nainmeht@quicinc.com> +Signed-off-by: Komal Bajaj <quic_kbajaj@quicinc.com> +Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org> +Link: https://lore.kernel.org/r/20231129065816.26409-4-quic_kbajaj@quicinc.com +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 04cf333afc757d8fd3c674c6c3f5f86c7755b4d4] +--- + arch/arm64/boot/dts/qcom/Makefile | 1 + + arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts | 452 +++++++++++++++++++ + 2 files changed, 453 insertions(+) + create mode 100644 arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts + +diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile +index 3199b1b8db13..28178644834a 100644 +--- a/arch/arm64/boot/dts/qcom/Makefile ++++ b/arch/arm64/boot/dts/qcom/Makefile +@@ -84,6 +84,7 @@ dtb-$(CONFIG_ARCH_QCOM) += msm8998-xiaomi-sagit.dtb + dtb-$(CONFIG_ARCH_QCOM) += qcm6490-idp.dtb + dtb-$(CONFIG_ARCH_QCOM) += qcs404-evb-1000.dtb + dtb-$(CONFIG_ARCH_QCOM) += qcs404-evb-4000.dtb ++dtb-$(CONFIG_ARCH_QCOM) += qcs6490-rb3gen2.dtb + dtb-$(CONFIG_ARCH_QCOM) += qdu1000-idp.dtb + dtb-$(CONFIG_ARCH_QCOM) += qrb2210-rb1.dtb + dtb-$(CONFIG_ARCH_QCOM) += qrb4210-rb2.dtb +diff --git a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +new file mode 100644 +index 000000000000..0beab54c051e +--- /dev/null ++++ b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +@@ -0,0 +1,452 @@ ++// SPDX-License-Identifier: BSD-3-Clause ++/* ++ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. ++ */ ++ ++/dts-v1/; ++ ++/* PM7250B is configured to use SID8/9 */ ++#define PM7250B_SID 8 ++#define PM7250B_SID1 9 ++ ++#include <dt-bindings/regulator/qcom,rpmh-regulator.h> ++#include "sc7280.dtsi" ++#include "pm7250b.dtsi" ++#include "pm7325.dtsi" ++#include "pm8350c.dtsi" ++#include "pmk8350.dtsi" ++ ++/delete-node/ &ipa_fw_mem; ++/delete-node/ &remoteproc_mpss; ++/delete-node/ &rmtfs_mem; ++/delete-node/ &video_mem; ++/delete-node/ &wlan_ce_mem; ++/delete-node/ &xbl_mem; ++ ++/ { ++ model = "Qualcomm Technologies, Inc. Robotics RB3gen2"; ++ compatible = "qcom,qcs6490-rb3gen2", "qcom,qcm6490"; ++ chassis-type = "embedded"; ++ ++ aliases { ++ serial0 = &uart5; ++ }; ++ ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ reserved-memory { ++ xbl_mem: xbl@80700000 { ++ reg = <0x0 0x80700000 0x0 0x100000>; ++ no-map; ++ }; ++ ++ cdsp_secure_heap_mem: cdsp-secure-heap@81800000 { ++ reg = <0x0 0x81800000 0x0 0x1e00000>; ++ no-map; ++ }; ++ ++ camera_mem: camera@84300000 { ++ reg = <0x0 0x84300000 0x0 0x500000>; ++ no-map; ++ }; ++ ++ wpss_mem: wpss@84800000 { ++ reg = <0x0 0x84800000 0x0 0x1900000>; ++ no-map; ++ }; ++ ++ adsp_mem: adsp@86100000 { ++ reg = <0x0 0x86100000 0x0 0x2800000>; ++ no-map; ++ }; ++ ++ cdsp_mem: cdsp@88900000 { ++ reg = <0x0 0x88900000 0x0 0x1e00000>; ++ no-map; ++ }; ++ ++ video_mem: video@8a700000 { ++ reg = <0x0 0x8a700000 0x0 0x700000>; ++ no-map; ++ }; ++ ++ cvp_mem: cvp@8ae00000 { ++ reg = <0x0 0x8ae00000 0x0 0x500000>; ++ no-map; ++ }; ++ ++ ipa_fw_mem: ipa-fw@8b300000 { ++ reg = <0x0 0x8b300000 0x0 0x10000>; ++ no-map; ++ }; ++ ++ ipa_gsi_mem: ipa-gsi@8b310000 { ++ reg = <0x0 0x8b310000 0x0 0xa000>; ++ no-map; ++ }; ++ ++ gpu_microcode_mem: gpu-microcode@8b31a000 { ++ reg = <0x0 0x8b31a000 0x0 0x2000>; ++ no-map; ++ }; ++ ++ tz_stat_mem: tz-stat@c0000000 { ++ reg = <0x0 0xc0000000 0x0 0x100000>; ++ no-map; ++ }; ++ ++ tags_mem: tags@c0100000 { ++ reg = <0x0 0xc0100000 0x0 0x1200000>; ++ no-map; ++ }; ++ ++ qtee_mem: qtee@c1300000 { ++ reg = <0x0 0xc1300000 0x0 0x500000>; ++ no-map; ++ }; ++ ++ trusted_apps_mem: trusted_apps@c1800000 { ++ reg = <0x0 0xc1800000 0x0 0x1c00000>; ++ no-map; ++ }; ++ ++ debug_vm_mem: debug-vm@d0600000 { ++ reg = <0x0 0xd0600000 0x0 0x100000>; ++ no-map; ++ }; ++ }; ++ ++ vph_pwr: vph-pwr-regulator { ++ compatible = "regulator-fixed"; ++ regulator-name = "vph_pwr"; ++ regulator-min-microvolt = <2500000>; ++ regulator-max-microvolt = <4350000>; ++ }; ++}; ++ ++&apps_rsc { ++ regulators-0 { ++ compatible = "qcom,pm7325-rpmh-regulators"; ++ qcom,pmic-id = "b"; ++ ++ vdd-s1-supply = <&vph_pwr>; ++ vdd-s2-supply = <&vph_pwr>; ++ vdd-s3-supply = <&vph_pwr>; ++ vdd-s4-supply = <&vph_pwr>; ++ vdd-s5-supply = <&vph_pwr>; ++ vdd-s6-supply = <&vph_pwr>; ++ vdd-s7-supply = <&vph_pwr>; ++ vdd-s8-supply = <&vph_pwr>; ++ vdd-l1-l4-l12-l15-supply = <&vreg_s7b_0p972>; ++ vdd-l2-l7-supply = <&vreg_bob_3p296>; ++ vdd-l3-supply = <&vreg_s2b_0p876>; ++ vdd-l5-supply = <&vreg_s2b_0p876>; ++ vdd-l6-l9-l10-supply = <&vreg_s8b_1p272>; ++ vdd-l8-supply = <&vreg_s7b_0p972>; ++ vdd-l11-l17-l18-l19-supply = <&vreg_s1b_1p872>; ++ vdd-l13-supply = <&vreg_s7b_0p972>; ++ vdd-l14-l16-supply = <&vreg_s8b_1p272>; ++ ++ vreg_s1b_1p872: smps1 { ++ regulator-min-microvolt = <1840000>; ++ regulator-max-microvolt = <2040000>; ++ }; ++ ++ vreg_s2b_0p876: smps2 { ++ regulator-min-microvolt = <570070>; ++ regulator-max-microvolt = <1050000>; ++ }; ++ ++ vreg_s7b_0p972: smps7 { ++ regulator-min-microvolt = <535000>; ++ regulator-max-microvolt = <1120000>; ++ }; ++ ++ vreg_s8b_1p272: smps8 { ++ regulator-min-microvolt = <1200000>; ++ regulator-max-microvolt = <1500000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_RET>; ++ }; ++ ++ vreg_l1b_0p912: ldo1 { ++ regulator-min-microvolt = <825000>; ++ regulator-max-microvolt = <925000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l2b_3p072: ldo2 { ++ regulator-min-microvolt = <2700000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l3b_0p504: ldo3 { ++ regulator-min-microvolt = <312000>; ++ regulator-max-microvolt = <910000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l4b_0p752: ldo4 { ++ regulator-min-microvolt = <752000>; ++ regulator-max-microvolt = <820000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ reg_l5b_0p752: ldo5 { ++ regulator-min-microvolt = <552000>; ++ regulator-max-microvolt = <832000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l6b_1p2: ldo6 { ++ regulator-min-microvolt = <1140000>; ++ regulator-max-microvolt = <1260000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l7b_2p952: ldo7 { ++ regulator-min-microvolt = <2400000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l8b_0p904: ldo8 { ++ regulator-min-microvolt = <870000>; ++ regulator-max-microvolt = <970000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l9b_1p2: ldo9 { ++ regulator-min-microvolt = <1200000>; ++ regulator-max-microvolt = <1304000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l11b_1p504: ldo11 { ++ regulator-min-microvolt = <1504000>; ++ regulator-max-microvolt = <2000000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l12b_0p751: ldo12 { ++ regulator-min-microvolt = <751000>; ++ regulator-max-microvolt = <824000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l13b_0p53: ldo13 { ++ regulator-min-microvolt = <530000>; ++ regulator-max-microvolt = <824000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l14b_1p08: ldo14 { ++ regulator-min-microvolt = <1080000>; ++ regulator-max-microvolt = <1304000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l15b_0p765: ldo15 { ++ regulator-min-microvolt = <765000>; ++ regulator-max-microvolt = <1020000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l16b_1p1: ldo16 { ++ regulator-min-microvolt = <1100000>; ++ regulator-max-microvolt = <1300000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l17b_1p7: ldo17 { ++ regulator-min-microvolt = <1700000>; ++ regulator-max-microvolt = <1900000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l18b_1p8: ldo18 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <2000000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l19b_1p8: ldo19 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <2000000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ }; ++ ++ regulators-1 { ++ compatible = "qcom,pm8350c-rpmh-regulators"; ++ qcom,pmic-id = "c"; ++ ++ vdd-s1-supply = <&vph_pwr>; ++ vdd-s2-supply = <&vph_pwr>; ++ vdd-s3-supply = <&vph_pwr>; ++ vdd-s4-supply = <&vph_pwr>; ++ vdd-s5-supply = <&vph_pwr>; ++ vdd-s6-supply = <&vph_pwr>; ++ vdd-s7-supply = <&vph_pwr>; ++ vdd-s8-supply = <&vph_pwr>; ++ vdd-s9-supply = <&vph_pwr>; ++ vdd-s10-supply = <&vph_pwr>; ++ vdd-l1-l12-supply = <&vreg_s1b_1p872>; ++ vdd-l2-l8-supply = <&vreg_s1b_1p872>; ++ vdd-l3-l4-l5-l7-l13-supply = <&vreg_bob_3p296>; ++ vdd-l6-l9-l11-supply = <&vreg_bob_3p296>; ++ vdd-l10-supply = <&vreg_s7b_0p972>; ++ vdd-bob-supply = <&vph_pwr>; ++ ++ vreg_s1c_2p19: smps1 { ++ regulator-min-microvolt = <2190000>; ++ regulator-max-microvolt = <2210000>; ++ }; ++ ++ vreg_s2c_0p752: smps2 { ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <800000>; ++ }; ++ ++ vreg_s5c_0p752: smps5 { ++ regulator-min-microvolt = <465000>; ++ regulator-max-microvolt = <1050000>; ++ }; ++ ++ vreg_s7c_0p752: smps7 { ++ regulator-min-microvolt = <465000>; ++ regulator-max-microvolt = <800000>; ++ }; ++ ++ vreg_s9c_1p084: smps9 { ++ regulator-min-microvolt = <1010000>; ++ regulator-max-microvolt = <1170000>; ++ }; ++ ++ vreg_l1c_1p8: ldo1 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1980000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l2c_1p62: ldo2 { ++ regulator-min-microvolt = <1620000>; ++ regulator-max-microvolt = <1980000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l3c_2p8: ldo3 { ++ regulator-min-microvolt = <2800000>; ++ regulator-max-microvolt = <3540000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l4c_1p62: ldo4 { ++ regulator-min-microvolt = <1620000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l5c_1p62: ldo5 { ++ regulator-min-microvolt = <1620000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l6c_2p96: ldo6 { ++ regulator-min-microvolt = <1650000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l7c_3p0: ldo7 { ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l8c_1p62: ldo8 { ++ regulator-min-microvolt = <1620000>; ++ regulator-max-microvolt = <2000000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l9c_2p96: ldo9 { ++ regulator-min-microvolt = <2700000>; ++ regulator-max-microvolt = <35440000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l10c_0p88: ldo10 { ++ regulator-min-microvolt = <720000>; ++ regulator-max-microvolt = <1050000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l11c_2p8: ldo11 { ++ regulator-min-microvolt = <2800000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l12c_1p65: ldo12 { ++ regulator-min-microvolt = <1650000>; ++ regulator-max-microvolt = <2000000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_l13c_2p7: ldo13 { ++ regulator-min-microvolt = <2700000>; ++ regulator-max-microvolt = <3544000>; ++ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; ++ }; ++ ++ vreg_bob_3p296: bob { ++ regulator-min-microvolt = <3008000>; ++ regulator-max-microvolt = <3960000>; ++ }; ++ }; ++}; ++ ++&qupv3_id_0 { ++ status = "okay"; ++}; ++ ++&tlmm { ++ gpio-reserved-ranges = <32 2>, /* ADSP */ ++ <48 4>; /* NFC */ ++}; ++ ++&uart5 { ++ compatible = "qcom,geni-debug-uart"; ++ status = "okay"; ++}; ++ ++&usb_1 { ++ status = "okay"; ++}; ++ ++&usb_1_dwc3 { ++ dr_mode = "peripheral"; ++}; ++ ++&usb_1_hsphy { ++ vdda-pll-supply = <&vreg_l10c_0p88>; ++ vdda33-supply = <&vreg_l2b_3p072>; ++ vdda18-supply = <&vreg_l1c_1p8>; ++ ++ status = "okay"; ++}; ++ ++&usb_1_qmpphy { ++ vdda-phy-supply = <&vreg_l6b_1p2>; ++ vdda-pll-supply = <&vreg_l1b_0p912>; ++ ++ status = "okay"; ++}; ++ ++&wifi { ++ memory-region = <&wlan_fw_mem>; ++}; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-drivers/0001-FROMGIT-phy-qcom-qmp-ufs-Add-Phy-Configuration-suppo.patch b/recipes-kernel/linux/linux-yocto/qcm6490-drivers/0001-FROMGIT-phy-qcom-qmp-ufs-Add-Phy-Configuration-suppo.patch new file mode 100644 index 0000000..cf2871c --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-drivers/0001-FROMGIT-phy-qcom-qmp-ufs-Add-Phy-Configuration-suppo.patch @@ -0,0 +1,188 @@ +From 801864e94d84f552d78e934bfe706183d7cc6901 Mon Sep 17 00:00:00 2001 +From: Nitin Rawat <quic_nitirawa@quicinc.com> +Date: Tue, 19 Sep 2023 02:20:37 +0530 +Subject: [PATCH] FROMGIT: phy: qcom-qmp-ufs: Add Phy Configuration support for + SC7280 + +Add SC7280 specific register layout and table configs. + +Co-developed-by: Manish Pandey <quic_mapa@quicinc.com> +Signed-off-by: Manish Pandey <quic_mapa@quicinc.com> +Signed-off-by: Nitin Rawat <quic_nitirawa@quicinc.com> +Signed-off-by: Salendarsingh Gaud <quic_sgaud@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 8abe9792d1ff7e60f911b56e8a2537be7e903576] +--- + drivers/phy/qualcomm/phy-qcom-qmp-ufs.c | 142 ++++++++++++++++++++++++ + 1 file changed, 142 insertions(+) + +diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c b/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c +index 8c877b668bb9..0aca2abd77d3 100644 +--- a/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c ++++ b/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c +@@ -178,6 +178,111 @@ static const struct qmp_phy_init_tbl msm8996_ufsphy_rx[] = { + QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0E), + }; + ++static const struct qmp_phy_init_tbl sc7280_ufsphy_tx[] = { ++ QMP_PHY_INIT_CFG(QSERDES_V4_TX_PWM_GEAR_1_DIVIDER_BAND0_1, 0x06), ++ QMP_PHY_INIT_CFG(QSERDES_V4_TX_PWM_GEAR_2_DIVIDER_BAND0_1, 0x03), ++ QMP_PHY_INIT_CFG(QSERDES_V4_TX_PWM_GEAR_3_DIVIDER_BAND0_1, 0x01), ++ QMP_PHY_INIT_CFG(QSERDES_V4_TX_PWM_GEAR_4_DIVIDER_BAND0_1, 0x00), ++ QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x35), ++ QMP_PHY_INIT_CFG(QSERDES_V4_TX_TRAN_DRVR_EMP_EN, 0x0c), ++}; ++ ++static const struct qmp_phy_init_tbl sc7280_ufsphy_rx[] = { ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_LVL, 0x24), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x0f), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x1e), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_BAND, 0x18), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_FO_GAIN, 0x0a), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x5a), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0xf1), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_LOW, 0x80), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CTRL2, 0x80), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0e), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x04), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_TERM_BW, 0x1b), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x06), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1d), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x00), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_MEASURE_TIME, 0x10), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0x6d), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0x6d), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0xed), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0x3b), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x3c), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0xe0), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xc8), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xc8), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x3b), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0xb1), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0xe0), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0xc8), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xc8), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x3b), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0xb1), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c), ++}; ++ ++static const struct qmp_phy_init_tbl sc7280_ufsphy_pcs[] = { ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_RX_SIGDET_CTRL2, 0x6d), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_TX_LARGE_AMP_DRV_LVL, 0x0a), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_TX_SMALL_AMP_DRV_LVL, 0x02), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_TX_MID_TERM_CTRL1, 0x43), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_DEBUG_BUS_CLKSEL, 0x1f), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_RX_MIN_HIBERN8_TIME, 0xff), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_MULTI_LANE_CTRL1, 0x02), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_PLL_CNTL, 0x03), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_TIMER_20US_CORECLK_STEPS_MSB, 0x16), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_TIMER_20US_CORECLK_STEPS_LSB, 0xd8), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_TX_PWM_GEAR_BAND, 0xaa), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_TX_HS_GEAR_BAND, 0x06), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_TX_HSGEAR_CAPABILITY, 0x03), ++ QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_RX_HSGEAR_CAPABILITY, 0x03), ++}; ++ ++static const struct qmp_phy_init_tbl sc7280_ufsphy_hs_g4_rx[] = { ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_LVL, 0x24), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x0f), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x1e), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_BAND, 0x18), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_FO_GAIN, 0x0a), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x5a), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0xf1), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_LOW, 0x80), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CTRL2, 0x81), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0e), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x04), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_TERM_BW, 0x6f), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL1, 0x04), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x00), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x09), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x07), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x17), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x00), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_MEASURE_TIME, 0x20), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0x80), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x01), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0x3f), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0xff), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0xff), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0x7f), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x2c), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0x6d), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0x6d), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xed), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x3b), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0x3c), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0xe0), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0xc8), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xc8), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x3b), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0xb1), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c), ++ QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x0f), ++}; ++ + static const struct qmp_phy_init_tbl sm6115_ufsphy_serdes[] = { + QMP_PHY_INIT_CFG(QSERDES_COM_CMN_CONFIG, 0x0e), + QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_EN_SEL, 0x14), +@@ -887,6 +992,40 @@ static const struct qmp_phy_cfg sa8775p_ufsphy_cfg = { + .regs = ufsphy_v5_regs_layout, + }; + ++static const struct qmp_phy_cfg sc7280_ufsphy_cfg = { ++ .lanes = 2, ++ ++ .offsets = &qmp_ufs_offsets, ++ ++ .tbls = { ++ .serdes = sm8150_ufsphy_serdes, ++ .serdes_num = ARRAY_SIZE(sm8150_ufsphy_serdes), ++ .tx = sc7280_ufsphy_tx, ++ .tx_num = ARRAY_SIZE(sc7280_ufsphy_tx), ++ .rx = sc7280_ufsphy_rx, ++ .rx_num = ARRAY_SIZE(sc7280_ufsphy_rx), ++ .pcs = sc7280_ufsphy_pcs, ++ .pcs_num = ARRAY_SIZE(sc7280_ufsphy_pcs), ++ }, ++ .tbls_hs_b = { ++ .serdes = sm8150_ufsphy_hs_b_serdes, ++ .serdes_num = ARRAY_SIZE(sm8150_ufsphy_hs_b_serdes), ++ }, ++ .tbls_hs_g4 = { ++ .tx = sm8250_ufsphy_hs_g4_tx, ++ .tx_num = ARRAY_SIZE(sm8250_ufsphy_hs_g4_tx), ++ .rx = sc7280_ufsphy_hs_g4_rx, ++ .rx_num = ARRAY_SIZE(sc7280_ufsphy_hs_g4_rx), ++ .pcs = sm8150_ufsphy_hs_g4_pcs, ++ .pcs_num = ARRAY_SIZE(sm8150_ufsphy_hs_g4_pcs), ++ }, ++ .clk_list = sm8450_ufs_phy_clk_l, ++ .num_clks = ARRAY_SIZE(sm8450_ufs_phy_clk_l), ++ .vreg_list = qmp_phy_vreg_l, ++ .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), ++ .regs = ufsphy_v4_regs_layout, ++}; ++ + static const struct qmp_phy_cfg sc8280xp_ufsphy_cfg = { + .lanes = 2, + +@@ -1637,6 +1776,9 @@ static const struct of_device_id qmp_ufs_of_match_table[] = { + }, { + .compatible = "qcom,sa8775p-qmp-ufs-phy", + .data = &sa8775p_ufsphy_cfg, ++ }, { ++ .compatible = "qcom,sc7280-qmp-ufs-phy", ++ .data = &sc7280_ufsphy_cfg, + }, { + .compatible = "qcom,sc8180x-qmp-ufs-phy", + .data = &sm8150_ufsphy_cfg, +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-FROMLIST-arm64-dts-qcom-sc7280-Add-UFS-nodes-for-sc7.patch b/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-FROMLIST-arm64-dts-qcom-sc7280-Add-UFS-nodes-for-sc7.patch new file mode 100644 index 0000000..3b17ae4 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-FROMLIST-arm64-dts-qcom-sc7280-Add-UFS-nodes-for-sc7.patch @@ -0,0 +1,97 @@ +From 92c06bd8d2125f45ff52c9a6819c6cd8bf7a575d Mon Sep 17 00:00:00 2001 +From: Nitin Rawat <quic_nitirawa@quicinc.com> +Date: Fri, 29 Sep 2023 18:49:34 +0530 +Subject: [PATCH] FROMLIST: arm64: dts: qcom: sc7280: Add UFS nodes for sc7280 + soc + +Add UFS host controller and PHY nodes for sc7280 soc. + +Signed-off-by: Nitin Rawat <quic_nitirawa@quicinc.com> +Signed-off-by: Manish Pandey <quic_mapa@quicinc.com> +Signed-off-by: Salendarsingh Gaud <quic_sgaud@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Submitted [https://lore.kernel.org/all/20230929131936.29421-3-quic_nitirawa@quicinc.com/] +--- + arch/arm64/boot/dts/qcom/sc7280.dtsi | 66 ++++++++++++++++++++++++++++ + 1 file changed, 66 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/sc7280.dtsi b/arch/arm64/boot/dts/qcom/sc7280.dtsi +index 042908048d09..19705df517dd 100644 +--- a/arch/arm64/boot/dts/qcom/sc7280.dtsi ++++ b/arch/arm64/boot/dts/qcom/sc7280.dtsi +@@ -3321,6 +3321,72 @@ opp-202000000 { + }; + }; + ++ ufs_mem_hc: ufs@1d84000 { ++ compatible = "qcom,sc7280-ufshc", "qcom,ufshc", ++ "jedec,ufs-2.0"; ++ reg = <0x0 0x01d84000 0x0 0x3000>; ++ interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>; ++ phys = <&ufs_mem_phy>; ++ phy-names = "ufsphy"; ++ lanes-per-direction = <2>; ++ #reset-cells = <1>; ++ resets = <&gcc GCC_UFS_PHY_BCR>; ++ reset-names = "rst"; ++ ++ power-domains = <&gcc GCC_UFS_PHY_GDSC>; ++ required-opps = <&rpmhpd_opp_nom>; ++ ++ iommus = <&apps_smmu 0x80 0x0>; ++ dma-coherent; ++ ++ interconnects = <&aggre1_noc MASTER_UFS_MEM 0 &mc_virt SLAVE_EBI1 0>, ++ <&gem_noc MASTER_APPSS_PROC 0 &cnoc2 SLAVE_UFS_MEM_CFG 0>; ++ ++ clocks = <&gcc GCC_UFS_PHY_AXI_CLK>, ++ <&gcc GCC_AGGRE_UFS_PHY_AXI_CLK>, ++ <&gcc GCC_UFS_PHY_AHB_CLK>, ++ <&gcc GCC_UFS_PHY_UNIPRO_CORE_CLK>, ++ <&rpmhcc RPMH_CXO_CLK>, ++ <&gcc GCC_UFS_PHY_TX_SYMBOL_0_CLK>, ++ <&gcc GCC_UFS_PHY_RX_SYMBOL_0_CLK>, ++ <&gcc GCC_UFS_PHY_RX_SYMBOL_1_CLK>; ++ clock-names = "core_clk", ++ "bus_aggr_clk", ++ "iface_clk", ++ "core_clk_unipro", ++ "ref_clk", ++ "tx_lane0_sync_clk", ++ "rx_lane0_sync_clk", ++ "rx_lane1_sync_clk"; ++ freq-table-hz = ++ <75000000 300000000>, ++ <0 0>, ++ <0 0>, ++ <75000000 300000000>, ++ <0 0>, ++ <0 0>, ++ <0 0>, ++ <0 0>; ++ status = "disabled"; ++ }; ++ ++ ufs_mem_phy: phy@1d87000 { ++ compatible = "qcom,sc7280-qmp-ufs-phy"; ++ reg = <0x0 0x01d87000 0x0 0xe00>; ++ clocks = <&rpmhcc RPMH_CXO_CLK>, ++ <&gcc GCC_UFS_PHY_PHY_AUX_CLK>, ++ <&gcc GCC_UFS_1_CLKREF_EN>; ++ clock-names = "ref", "ref_aux", "qref"; ++ ++ resets = <&ufs_mem_hc 0>; ++ reset-names = "ufsphy"; ++ ++ #clock-cells = <1>; ++ #phy-cells = <0>; ++ ++ status = "disabled"; ++ }; ++ + usb_1_hsphy: phy@88e3000 { + compatible = "qcom,sc7280-usb-hs-phy", + "qcom,usb-snps-hs-7nm-phy"; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-PENDING-arm64-dts-qcom-sc7280-Add-interconnect-paths.patch b/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-PENDING-arm64-dts-qcom-sc7280-Add-interconnect-paths.patch new file mode 100644 index 0000000..ef6ef52 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-PENDING-arm64-dts-qcom-sc7280-Add-interconnect-paths.patch @@ -0,0 +1,31 @@ +From 0fd82fdf7e1a5d6bb1924129849ed351806e1a3d Mon Sep 17 00:00:00 2001 +From: Manish Pandey <quic_mapa@quicinc.com> +Date: Fri, 3 Nov 2023 10:11:01 +0530 +Subject: [PATCH] PENDING: arm64: dts: qcom: sc7280: Add interconnect paths to + UFSHC + +QCOM UFS host controller requires interconnect path configuration +for proper working. So add them for SC7280 SoC. + +Signed-off-by: Manish Pandey <quic_mapa@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Pending +--- + arch/arm64/boot/dts/qcom/sc7280.dtsi | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/arm64/boot/dts/qcom/sc7280.dtsi b/arch/arm64/boot/dts/qcom/sc7280.dtsi +index 19705df517dd..1217de1d3266 100644 +--- a/arch/arm64/boot/dts/qcom/sc7280.dtsi ++++ b/arch/arm64/boot/dts/qcom/sc7280.dtsi +@@ -3341,6 +3341,7 @@ ufs_mem_hc: ufs@1d84000 { + + interconnects = <&aggre1_noc MASTER_UFS_MEM 0 &mc_virt SLAVE_EBI1 0>, + <&gem_noc MASTER_APPSS_PROC 0 &cnoc2 SLAVE_UFS_MEM_CFG 0>; ++ interconnect-names = "ufs-ddr", "cpu-ufs"; + + clocks = <&gcc GCC_UFS_PHY_AXI_CLK>, + <&gcc GCC_AGGRE_UFS_PHY_AXI_CLK>, +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-UPSTREAM-arm64-dts-qcom-Use-QCOM_SCM_VMID-defines-fo.patch b/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-UPSTREAM-arm64-dts-qcom-Use-QCOM_SCM_VMID-defines-fo.patch new file mode 100644 index 0000000..27c60be --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-UPSTREAM-arm64-dts-qcom-Use-QCOM_SCM_VMID-defines-fo.patch @@ -0,0 +1,383 @@ +From d325de87af27d2f369fa04fa0a2367600280f322 Mon Sep 17 00:00:00 2001 +From: Luca Weiss <luca.weiss@fairphone.com> +Date: Fri, 18 Aug 2023 10:06:09 +0200 +Subject: [PATCH] UPSTREAM: arm64: dts: qcom: Use QCOM_SCM_VMID defines for + qcom,vmid + +Since we have those defines available in a header, let's use them +everywhere where qcom,vmid property is used. + +Signed-off-by: Luca Weiss <luca.weiss@fairphone.com> +Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> +Link: https://lore.kernel.org/r/20230818-qcom-vmid-defines-v1-1-45b610c96b13@fairphone.com +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 018c949b32df9f17f52bf0e70f976719811db233] +--- + arch/arm64/boot/dts/qcom/msm8996-xiaomi-common.dtsi | 2 +- + arch/arm64/boot/dts/qcom/msm8996.dtsi | 3 ++- + arch/arm64/boot/dts/qcom/msm8998.dtsi | 3 ++- + arch/arm64/boot/dts/qcom/sc7180.dtsi | 3 ++- + arch/arm64/boot/dts/qcom/sc7280.dtsi | 3 ++- + arch/arm64/boot/dts/qcom/sc8180x-lenovo-flex-5g.dts | 3 ++- + arch/arm64/boot/dts/qcom/sc8180x-primus.dts | 3 ++- + arch/arm64/boot/dts/qcom/sdm630.dtsi | 3 ++- + arch/arm64/boot/dts/qcom/sdm845-lg-common.dtsi | 2 +- + arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi | 2 +- + arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi | 2 +- + arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts | 2 +- + arch/arm64/boot/dts/qcom/sdm845.dtsi | 2 +- + arch/arm64/boot/dts/qcom/sm7225-fairphone-fp4.dts | 3 ++- + arch/arm64/boot/dts/qcom/sm8150.dtsi | 3 ++- + arch/arm64/boot/dts/qcom/sm8350.dtsi | 3 ++- + arch/arm64/boot/dts/qcom/sm8450-sony-xperia-nagara.dtsi | 2 +- + arch/arm64/boot/dts/qcom/sm8450.dtsi | 3 ++- + arch/arm64/boot/dts/qcom/sm8550.dtsi | 3 ++- + 19 files changed, 31 insertions(+), 19 deletions(-) + +diff --git a/arch/arm64/boot/dts/qcom/msm8996-xiaomi-common.dtsi b/arch/arm64/boot/dts/qcom/msm8996-xiaomi-common.dtsi +index 06f8ff624181..8fda25167181 100644 +--- a/arch/arm64/boot/dts/qcom/msm8996-xiaomi-common.dtsi ++++ b/arch/arm64/boot/dts/qcom/msm8996-xiaomi-common.dtsi +@@ -115,7 +115,7 @@ rmtfs@f6c00000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + /delete-node/ mba@91500000; +diff --git a/arch/arm64/boot/dts/qcom/msm8996.dtsi b/arch/arm64/boot/dts/qcom/msm8996.dtsi +index 4d87cba47c76..fa8ec92ce490 100644 +--- a/arch/arm64/boot/dts/qcom/msm8996.dtsi ++++ b/arch/arm64/boot/dts/qcom/msm8996.dtsi +@@ -9,6 +9,7 @@ + #include <dt-bindings/clock/qcom,rpmcc.h> + #include <dt-bindings/interconnect/qcom,msm8996.h> + #include <dt-bindings/interconnect/qcom,msm8996-cbf.h> ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/power/qcom-rpmpd.h> + #include <dt-bindings/soc/qcom,apr.h> +@@ -551,7 +552,7 @@ rmtfs_mem: rmtfs { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + mpss_mem: mpss@88800000 { +diff --git a/arch/arm64/boot/dts/qcom/msm8998.dtsi b/arch/arm64/boot/dts/qcom/msm8998.dtsi +index f91c58c844af..c9ee2d995087 100644 +--- a/arch/arm64/boot/dts/qcom/msm8998.dtsi ++++ b/arch/arm64/boot/dts/qcom/msm8998.dtsi +@@ -6,6 +6,7 @@ + #include <dt-bindings/clock/qcom,gpucc-msm8998.h> + #include <dt-bindings/clock/qcom,mmcc-msm8998.h> + #include <dt-bindings/clock/qcom,rpmcc.h> ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/power/qcom-rpmpd.h> + #include <dt-bindings/gpio/gpio.h> + +@@ -56,7 +57,7 @@ rmtfs_mem: memory@88f00000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + spss_mem: memory@8ab00000 { +diff --git a/arch/arm64/boot/dts/qcom/sc7180.dtsi b/arch/arm64/boot/dts/qcom/sc7180.dtsi +index 810e529e5f2e..65b077179acc 100644 +--- a/arch/arm64/boot/dts/qcom/sc7180.dtsi ++++ b/arch/arm64/boot/dts/qcom/sc7180.dtsi +@@ -11,6 +11,7 @@ + #include <dt-bindings/clock/qcom,lpasscorecc-sc7180.h> + #include <dt-bindings/clock/qcom,rpmh.h> + #include <dt-bindings/clock/qcom,videocc-sc7180.h> ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/interconnect/qcom,icc.h> + #include <dt-bindings/interconnect/qcom,osm-l3.h> + #include <dt-bindings/interconnect/qcom,sc7180.h> +@@ -687,7 +688,7 @@ rmtfs_mem: memory@94600000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + }; + +diff --git a/arch/arm64/boot/dts/qcom/sc7280.dtsi b/arch/arm64/boot/dts/qcom/sc7280.dtsi +index 9531167c498e..cbd0f4176daa 100644 +--- a/arch/arm64/boot/dts/qcom/sc7280.dtsi ++++ b/arch/arm64/boot/dts/qcom/sc7280.dtsi +@@ -13,6 +13,7 @@ + #include <dt-bindings/clock/qcom,rpmh.h> + #include <dt-bindings/clock/qcom,videocc-sc7280.h> + #include <dt-bindings/dma/qcom-gpi.h> ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/interconnect/qcom,icc.h> + #include <dt-bindings/interconnect/qcom,osm-l3.h> +@@ -157,7 +158,7 @@ rmtfs_mem: memory@9c900000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + }; + +diff --git a/arch/arm64/boot/dts/qcom/sc8180x-lenovo-flex-5g.dts b/arch/arm64/boot/dts/qcom/sc8180x-lenovo-flex-5g.dts +index abc66613ccaa..3ea07d094b60 100644 +--- a/arch/arm64/boot/dts/qcom/sc8180x-lenovo-flex-5g.dts ++++ b/arch/arm64/boot/dts/qcom/sc8180x-lenovo-flex-5g.dts +@@ -6,6 +6,7 @@ + + /dts-v1/; + ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/input/gpio-keys.h> + #include <dt-bindings/input/input.h> +@@ -130,7 +131,7 @@ rmtfs_mem: rmtfs-region@85500000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + wlan_mem: wlan-region@8bc00000 { +diff --git a/arch/arm64/boot/dts/qcom/sc8180x-primus.dts b/arch/arm64/boot/dts/qcom/sc8180x-primus.dts +index ae008c3b0aed..a40ef23a2a4f 100644 +--- a/arch/arm64/boot/dts/qcom/sc8180x-primus.dts ++++ b/arch/arm64/boot/dts/qcom/sc8180x-primus.dts +@@ -6,6 +6,7 @@ + + /dts-v1/; + ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/input/gpio-keys.h> + #include <dt-bindings/input/input.h> +@@ -135,7 +136,7 @@ rmtfs_mem: rmtfs-region@85500000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + wlan_mem: wlan-region@8bc00000 { +diff --git a/arch/arm64/boot/dts/qcom/sdm630.dtsi b/arch/arm64/boot/dts/qcom/sdm630.dtsi +index ec6003212c4d..c17719086085 100644 +--- a/arch/arm64/boot/dts/qcom/sdm630.dtsi ++++ b/arch/arm64/boot/dts/qcom/sdm630.dtsi +@@ -8,6 +8,7 @@ + #include <dt-bindings/clock/qcom,gpucc-sdm660.h> + #include <dt-bindings/clock/qcom,mmcc-sdm660.h> + #include <dt-bindings/clock/qcom,rpmcc.h> ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/interconnect/qcom,sdm660.h> + #include <dt-bindings/power/qcom-rpmpd.h> + #include <dt-bindings/gpio/gpio.h> +@@ -453,7 +454,7 @@ rmtfs_mem: memory@85e00000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + smem_region: smem-mem@86000000 { +diff --git a/arch/arm64/boot/dts/qcom/sdm845-lg-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-lg-common.dtsi +index f942c5afea9b..99dafc6716e7 100644 +--- a/arch/arm64/boot/dts/qcom/sdm845-lg-common.dtsi ++++ b/arch/arm64/boot/dts/qcom/sdm845-lg-common.dtsi +@@ -111,7 +111,7 @@ rmtfs_mem: memory@f0801000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + /* rmtfs upper guard */ +diff --git a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +index 122c7128dea9..b523b5fff702 100644 +--- a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi ++++ b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +@@ -90,7 +90,7 @@ rmtfs_mem: rmtfs-mem@f5b01000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + rmtfs_upper_guard: rmtfs-upper-guard@f5d01000 { + no-map; +diff --git a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi +index 9d6faeb65624..93b1582e807d 100644 +--- a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi ++++ b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi +@@ -111,7 +111,7 @@ rmtfs_mem: memory@f6301000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + }; + +diff --git a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts +index 6db12abaa88d..e386b504e978 100644 +--- a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts ++++ b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts +@@ -108,7 +108,7 @@ rmtfs_mem: memory@f6301000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + }; + +diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi +index 234d7875cd8e..6d4f86d92fec 100644 +--- a/arch/arm64/boot/dts/qcom/sdm845.dtsi ++++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi +@@ -813,7 +813,7 @@ rmtfs_mem: rmtfs@88f00000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + qseecom_mem: qseecom@8ab00000 { +diff --git a/arch/arm64/boot/dts/qcom/sm7225-fairphone-fp4.dts b/arch/arm64/boot/dts/qcom/sm7225-fairphone-fp4.dts +index 18171c5d8a38..136e273d09a7 100644 +--- a/arch/arm64/boot/dts/qcom/sm7225-fairphone-fp4.dts ++++ b/arch/arm64/boot/dts/qcom/sm7225-fairphone-fp4.dts +@@ -8,6 +8,7 @@ + /* PMK8350 (in reality a PMK8003) is configured to use SID6 instead of 0 */ + #define PMK8350_SID 6 + ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/iio/qcom,spmi-adc7-pmk8350.h> + #include <dt-bindings/input/input.h> +@@ -75,7 +76,7 @@ memory@efe01000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + }; + +diff --git a/arch/arm64/boot/dts/qcom/sm8150.dtsi b/arch/arm64/boot/dts/qcom/sm8150.dtsi +index 26b6d84548a5..7e78bf2c6a6c 100644 +--- a/arch/arm64/boot/dts/qcom/sm8150.dtsi ++++ b/arch/arm64/boot/dts/qcom/sm8150.dtsi +@@ -5,6 +5,7 @@ + */ + + #include <dt-bindings/dma/qcom-gpi.h> ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/power/qcom-rpmpd.h> + #include <dt-bindings/soc/qcom,rpmh-rsc.h> +@@ -720,7 +721,7 @@ rmtfs_mem: memory@89b00000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + camera_mem: memory@8b700000 { +diff --git a/arch/arm64/boot/dts/qcom/sm8350.dtsi b/arch/arm64/boot/dts/qcom/sm8350.dtsi +index 5ed464c37422..a72f3c470089 100644 +--- a/arch/arm64/boot/dts/qcom/sm8350.dtsi ++++ b/arch/arm64/boot/dts/qcom/sm8350.dtsi +@@ -10,6 +10,7 @@ + #include <dt-bindings/clock/qcom,gpucc-sm8350.h> + #include <dt-bindings/clock/qcom,rpmh.h> + #include <dt-bindings/dma/qcom-gpi.h> ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/interconnect/qcom,sm8350.h> + #include <dt-bindings/mailbox/qcom-ipcc.h> +@@ -503,7 +504,7 @@ rmtfs_mem: memory@9b800000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + hyp_reserved_mem: memory@d0000000 { +diff --git a/arch/arm64/boot/dts/qcom/sm8450-sony-xperia-nagara.dtsi b/arch/arm64/boot/dts/qcom/sm8450-sony-xperia-nagara.dtsi +index 001fb2723fbb..8b29fcf483a3 100644 +--- a/arch/arm64/boot/dts/qcom/sm8450-sony-xperia-nagara.dtsi ++++ b/arch/arm64/boot/dts/qcom/sm8450-sony-xperia-nagara.dtsi +@@ -80,7 +80,7 @@ rmtfs_mem: memory@f3300000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + ramoops@ffc00000 { +diff --git a/arch/arm64/boot/dts/qcom/sm8450.dtsi b/arch/arm64/boot/dts/qcom/sm8450.dtsi +index 91d856e5b06b..35067d441a28 100644 +--- a/arch/arm64/boot/dts/qcom/sm8450.dtsi ++++ b/arch/arm64/boot/dts/qcom/sm8450.dtsi +@@ -10,6 +10,7 @@ + #include <dt-bindings/clock/qcom,sm8450-dispcc.h> + #include <dt-bindings/clock/qcom,sm8450-videocc.h> + #include <dt-bindings/dma/qcom-gpi.h> ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/mailbox/qcom-ipcc.h> + #include <dt-bindings/phy/phy-qcom-qmp.h> +@@ -540,7 +541,7 @@ rmtfs_mem: memory@9fd00000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + xbl_sc_mem2: memory@a6e00000 { +diff --git a/arch/arm64/boot/dts/qcom/sm8550.dtsi b/arch/arm64/boot/dts/qcom/sm8550.dtsi +index 076715ef09d5..c0d781b30a90 100644 +--- a/arch/arm64/boot/dts/qcom/sm8550.dtsi ++++ b/arch/arm64/boot/dts/qcom/sm8550.dtsi +@@ -10,6 +10,7 @@ + #include <dt-bindings/clock/qcom,sm8550-tcsr.h> + #include <dt-bindings/clock/qcom,sm8550-dispcc.h> + #include <dt-bindings/dma/qcom-gpi.h> ++#include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/interconnect/qcom,sm8550-rpmh.h> +@@ -580,7 +581,7 @@ rmtfs_mem: rmtfs-region@d4a80000 { + no-map; + + qcom,client-id = <1>; +- qcom,vmid = <15>; ++ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>; + }; + + mpss_dsm_mem: mpss-dsm-region@d4d00000 { +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-UPSTREAM-arm64-dts-qcom-sc7280-Move-video-firmware-t.patch b/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-UPSTREAM-arm64-dts-qcom-sc7280-Move-video-firmware-t.patch new file mode 100644 index 0000000..966d4d1 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcm6490-dtsi/0001-UPSTREAM-arm64-dts-qcom-sc7280-Move-video-firmware-t.patch @@ -0,0 +1,82 @@ +From 65d0e0ecf6725459457162b33d02333888bfa25e Mon Sep 17 00:00:00 2001 +From: Luca Weiss <luca.weiss@fairphone.com> +Date: Fri, 1 Dec 2023 10:33:19 +0100 +Subject: [PATCH] UPSTREAM: arm64: dts: qcom: sc7280: Move video-firmware to + chrome-common + +If the video-firmware node is present, the venus driver assumes we're on +a system that doesn't use TZ for starting venus, like on ChromeOS +devices. + +Move the video-firmware node to chrome-common.dtsi so we can use venus +on a non-ChromeOS devices. We also need to move the secure SID 0x2184 +for iommu since (on some boards) we cannot touch that. + +At the same time also disable the venus node by default in the dtsi, +like it's done on other SoCs. + +Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> +Signed-off-by: Luca Weiss <luca.weiss@fairphone.com> +Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com> +Link: https://lore.kernel.org/r/20231201-sc7280-venus-pas-v3-2-bc132dc5fc30@fairphone.com +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 82066cdb17608abc95192632fd5c702be8e57ab5] +--- + arch/arm64/boot/dts/qcom/sc7280-chrome-common.dtsi | 11 +++++++++++ + arch/arm64/boot/dts/qcom/sc7280.dtsi | 9 +++------ + 2 files changed, 14 insertions(+), 6 deletions(-) + +diff --git a/arch/arm64/boot/dts/qcom/sc7280-chrome-common.dtsi b/arch/arm64/boot/dts/qcom/sc7280-chrome-common.dtsi +index 5d462ae14ba1..459ff877df54 100644 +--- a/arch/arm64/boot/dts/qcom/sc7280-chrome-common.dtsi ++++ b/arch/arm64/boot/dts/qcom/sc7280-chrome-common.dtsi +@@ -104,6 +104,17 @@ &scm { + dma-coherent; + }; + ++&venus { ++ iommus = <&apps_smmu 0x2180 0x20>, ++ <&apps_smmu 0x2184 0x20>; ++ ++ status = "okay"; ++ ++ video-firmware { ++ iommus = <&apps_smmu 0x21a2 0x0>; ++ }; ++}; ++ + &watchdog { + status = "okay"; + }; +diff --git a/arch/arm64/boot/dts/qcom/sc7280.dtsi b/arch/arm64/boot/dts/qcom/sc7280.dtsi +index cbd0f4176daa..1c136ad878ed 100644 +--- a/arch/arm64/boot/dts/qcom/sc7280.dtsi ++++ b/arch/arm64/boot/dts/qcom/sc7280.dtsi +@@ -3725,10 +3725,11 @@ venus: video-codec@aa00000 { + <&mmss_noc MASTER_VIDEO_P0 0 &mc_virt SLAVE_EBI1 0>; + interconnect-names = "cpu-cfg", "video-mem"; + +- iommus = <&apps_smmu 0x2180 0x20>, +- <&apps_smmu 0x2184 0x20>; ++ iommus = <&apps_smmu 0x2180 0x20>; + memory-region = <&video_mem>; + ++ status = "disabled"; ++ + video-decoder { + compatible = "venus-decoder"; + }; +@@ -3737,10 +3738,6 @@ video-encoder { + compatible = "venus-encoder"; + }; + +- video-firmware { +- iommus = <&apps_smmu 0x21a2 0x0>; +- }; +- + venus_opp_table: opp-table { + compatible = "operating-points-v2"; + +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/qcom.scc b/recipes-kernel/linux/linux-yocto/qcom.scc new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qcom.scc diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0001_dt_bindings_display_msm_qcm2290_mdss_use_the_non_deprecated_dsi_compat.patch b/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0001_dt_bindings_display_msm_qcm2290_mdss_use_the_non_deprecated_dsi_compat.patch new file mode 100644 index 0000000..04ccd0f --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0001_dt_bindings_display_msm_qcm2290_mdss_use_the_non_deprecated_dsi_compat.patch @@ -0,0 +1,45 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: dt-bindings: display: msm: qcm2290-mdss: Use the non-deprecated DSI compat +Date: Wed, 29 Nov 2023 15:43:58 +0100 + +The "qcom,dsi-ctrl-6g-qcm2290" has been deprecated in commit 0c0f65c6dd44 +("dt-bindings: msm: dsi-controller-main: Add compatible strings for every +current SoC"), but the example hasn't been updated to reflect that. + +Fix that. + +Fixes: 0c0f65c6dd44 ("dt-bindings: msm: dsi-controller-main: Add compatible strings for every current SoC") +Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://gitlab.freedesktop.org/lumag/msm/-/commit/25daacc60394] +--- + .../devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml +index 5ad155612b6c..d71a8e09a798 100644 +--- a/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml ++++ b/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml +@@ -56,7 +56,9 @@ patternProperties: + + properties: + compatible: +- const: qcom,dsi-ctrl-6g-qcm2290 ++ items: ++ - const: qcom,qcm2290-dsi-ctrl ++ - const: qcom,mdss-dsi-ctrl + + "^phy@[0-9a-f]+$": + type: object +@@ -136,7 +138,8 @@ examples: + }; + + dsi@5e94000 { +- compatible = "qcom,dsi-ctrl-6g-qcm2290"; ++ compatible = "qcom,qcm2290-dsi-ctrl", ++ "qcom,mdss-dsi-ctrl"; + reg = <0x05e94000 0x400>; + reg-names = "dsi_ctrl"; + +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0003_dt_bindings_interconnect_qcom_msm8998_bwmon_add_qcm2290_bwmon_instance.patch b/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0003_dt_bindings_interconnect_qcom_msm8998_bwmon_add_qcm2290_bwmon_instance.patch new file mode 100644 index 0000000..2d2488d --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0003_dt_bindings_interconnect_qcom_msm8998_bwmon_add_qcm2290_bwmon_instance.patch @@ -0,0 +1,27 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: dt-bindings: interconnect: qcom,msm8998-bwmon: Add QCM2290 bwmon instance +Date: Wed, 29 Nov 2023 15:44:00 +0100 + +QCM2290 has a single BWMONv4 intance for CPU. Document it. + +Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Submitted [https://lore.kernel.org/linux-arm-msm/20231125-topic-rb1_feat-v3-3-4cbb567743bb@linaro.org/] +--- + Documentation/devicetree/bindings/interconnect/qcom,msm8998-bwmon.yaml | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Documentation/devicetree/bindings/interconnect/qcom,msm8998-bwmon.yaml b/Documentation/devicetree/bindings/interconnect/qcom,msm8998-bwmon.yaml +index 7cb8df757477..a88cea732370 100644 +--- a/Documentation/devicetree/bindings/interconnect/qcom,msm8998-bwmon.yaml ++++ b/Documentation/devicetree/bindings/interconnect/qcom,msm8998-bwmon.yaml +@@ -25,6 +25,7 @@ properties: + - const: qcom,msm8998-bwmon # BWMON v4 + - items: + - enum: ++ - qcom,qcm2290-cpu-bwmon + - qcom,sc7180-cpu-bwmon + - qcom,sc7280-cpu-bwmon + - qcom,sc8280xp-cpu-bwmon +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0004_dt_bindings_firmware_qcom_scm_allow_interconnect_for_everyone.patch b/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0004_dt_bindings_firmware_qcom_scm_allow_interconnect_for_everyone.patch new file mode 100644 index 0000000..96a0624 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0004_dt_bindings_firmware_qcom_scm_allow_interconnect_for_everyone.patch @@ -0,0 +1,42 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: dt-bindings: firmware: qcom,scm: Allow interconnect for everyone +Date: Wed, 29 Nov 2023 15:44:01 +0100 + +Every Qualcomm SoC physically has a "CRYPTO0<->DDR" interconnect lane. +Allow this property to be present, no matter the SoC. + +Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 56fdc35ef067c8dffee22038dd3a84bb3fa6d2a4] +--- + Documentation/devicetree/bindings/firmware/qcom,scm.yaml | 15 --------------- + 1 file changed, 15 deletions(-) + +diff --git a/Documentation/devicetree/bindings/firmware/qcom,scm.yaml b/Documentation/devicetree/bindings/firmware/qcom,scm.yaml +index 0613a37a851a..f3a87a8426d0 100644 +--- a/Documentation/devicetree/bindings/firmware/qcom,scm.yaml ++++ b/Documentation/devicetree/bindings/firmware/qcom,scm.yaml +@@ -178,21 +178,6 @@ allOf: + minItems: 3 + maxItems: 3 + +- # Interconnects +- - if: +- not: +- properties: +- compatible: +- contains: +- enum: +- - qcom,scm-qdu1000 +- - qcom,scm-sc8280xp +- - qcom,scm-sm8450 +- - qcom,scm-sm8550 +- then: +- properties: +- interconnects: false +- + # Interrupts + - if: + not: +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0005_iommu_arm_smmu_qcom_add_qcm2290_mdss_compatible.patch b/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0005_iommu_arm_smmu_qcom_add_qcm2290_mdss_compatible.patch new file mode 100644 index 0000000..82a4091 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-drivers/0005_iommu_arm_smmu_qcom_add_qcm2290_mdss_compatible.patch @@ -0,0 +1,28 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: iommu/arm-smmu-qcom: Add QCM2290 MDSS compatible +Date: Wed, 29 Nov 2023 15:44:02 +0100 + +Add the QCM2290 MDSS compatible to clients compatible list, as it also +needs the workarounds. + +Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/will/c/28af105cb650] +--- + drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c +index 549ae4dba3a6..aea5e85b20ff 100644 +--- a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c ++++ b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c +@@ -245,6 +245,7 @@ static const struct of_device_id qcom_smmu_client_of_match[] __maybe_unused = { + { .compatible = "qcom,adreno" }, + { .compatible = "qcom,mdp4" }, + { .compatible = "qcom,mdss" }, ++ { .compatible = "qcom,qcm2290-mdss" }, + { .compatible = "qcom,sc7180-mdss" }, + { .compatible = "qcom,sc7180-mss-pil" }, + { .compatible = "qcom,sc7280-mdss" }, +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/0001-arm64-dts-qcom-qcm2290-Hook-up-MPM.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/0001-arm64-dts-qcom-qcm2290-Hook-up-MPM.patch new file mode 100644 index 0000000..d1e935d --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/0001-arm64-dts-qcom-qcm2290-Hook-up-MPM.patch @@ -0,0 +1,114 @@ +From e3f6a699404154e7e103f8055f21c3556721603f Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Fri, 15 Dec 2023 01:01:10 +0100 +Subject: [PATCH] arm64: dts: qcom: qcm2290: Hook up MPM + +Wire up MPM and the interrupts it provides. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20231215-topic-mpm_dt-v1-3-c6636fc75ce3@linaro.org +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git e3f6a699404154e7e103f8055f21c3556721603f] +--- + arch/arm64/boot/dts/qcom/qcm2290.dtsi | 42 ++++++++++++++++++++++----- + 1 file changed, 35 insertions(+), 7 deletions(-) + +diff --git a/arch/arm64/boot/dts/qcom/qcm2290.dtsi b/arch/arm64/boot/dts/qcom/qcm2290.dtsi +index ce04d0acdede..0911fb08ed63 100644 +--- a/arch/arm64/boot/dts/qcom/qcm2290.dtsi ++++ b/arch/arm64/boot/dts/qcom/qcm2290.dtsi +@@ -199,6 +199,7 @@ CPU_PD3: power-domain-cpu3 { + + CLUSTER_PD: power-domain-cpu-cluster { + #power-domain-cells = <0>; ++ power-domains = <&mpm>; + domain-idle-states = <&CLUSTER_SLEEP>; + }; + }; +@@ -266,6 +267,24 @@ rpmpd_opp_turbo_plus: opp8 { + }; + }; + }; ++ ++ mpm: interrupt-controller { ++ compatible = "qcom,mpm"; ++ qcom,rpm-msg-ram = <&apss_mpm>; ++ interrupts = <GIC_SPI 197 IRQ_TYPE_EDGE_RISING>; ++ mboxes = <&apcs_glb 1>; ++ interrupt-controller; ++ #interrupt-cells = <2>; ++ #power-domain-cells = <0>; ++ interrupt-parent = <&intc>; ++ qcom,mpm-pin-count = <96>; ++ qcom,mpm-pin-map = <2 275>, /* TSENS0 uplow */ ++ <5 296>, /* Soundwire master_irq */ ++ <12 422>, /* DWC3 ss_phy_irq */ ++ <24 79>, /* Soundwire wake_irq */ ++ <86 183>, /* MPM wake, SPMI */ ++ <90 260>; /* QUSB2_PHY DP+DM */ ++ }; + }; + + reserved_memory: reserved-memory { +@@ -429,6 +448,7 @@ tlmm: pinctrl@500000 { + interrupts = <GIC_SPI 227 IRQ_TYPE_LEVEL_HIGH>; + gpio-controller; + gpio-ranges = <&tlmm 0 0 127>; ++ wakeup-parent = <&mpm>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; +@@ -778,7 +798,7 @@ spmi_bus: spmi@1c40000 { + "obsrvr", + "intr", + "cnfg"; +- interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; ++ interrupts-extended = <&mpm 86 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "periph_irq"; + qcom,ee = <0>; + qcom,channel = <0>; +@@ -793,8 +813,8 @@ tsens0: thermal-sensor@4411000 { + reg = <0x0 0x04411000 0x0 0x1ff>, + <0x0 0x04410000 0x0 0x8>; + #qcom,sensors = <10>; +- interrupts = <GIC_SPI 275 IRQ_TYPE_LEVEL_HIGH>, +- <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>; ++ interrupts-extended = <&mpm 2 IRQ_TYPE_LEVEL_HIGH>, ++ <&intc GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "uplow", "critical"; + #thermal-sensor-cells = <1>; + }; +@@ -813,8 +833,15 @@ bimc: interconnect@4480000 { + }; + + rpm_msg_ram: sram@45f0000 { +- compatible = "qcom,rpm-msg-ram"; ++ compatible = "qcom,rpm-msg-ram", "mmio-sram"; + reg = <0x0 0x045f0000 0x0 0x7000>; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ranges = <0 0x0 0x045f0000 0x7000>; ++ ++ apss_mpm: sram@1b8 { ++ reg = <0x1b8 0x48>; ++ }; + }; + + sram@4690000 { +@@ -1293,9 +1320,10 @@ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, + usb: usb@4ef8800 { + compatible = "qcom,qcm2290-dwc3", "qcom,dwc3"; + reg = <0x0 0x04ef8800 0x0 0x400>; +- interrupts = <GIC_SPI 260 IRQ_TYPE_LEVEL_HIGH>, +- <GIC_SPI 422 IRQ_TYPE_LEVEL_HIGH>; +- interrupt-names = "hs_phy_irq", "ss_phy_irq"; ++ interrupts-extended = <&intc GIC_SPI 260 IRQ_TYPE_LEVEL_HIGH>, ++ <&mpm 12 IRQ_TYPE_LEVEL_HIGH>; ++ interrupt-names = "hs_phy_irq", ++ "ss_phy_irq"; + + clocks = <&gcc GCC_CFG_NOC_USB3_PRIM_AXI_CLK>, + <&gcc GCC_USB30_PRIM_MASTER_CLK>, +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0006_arm64_dts_qcom_sc7180_add_the_missing_mdss_icc_path.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0006_arm64_dts_qcom_sc7180_add_the_missing_mdss_icc_path.patch new file mode 100644 index 0000000..d6d6807 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0006_arm64_dts_qcom_sc7180_add_the_missing_mdss_icc_path.patch @@ -0,0 +1,37 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: arm64: dts: qcom: sc7180: Add the missing MDSS icc path +Date: Wed, 29 Nov 2023 15:44:03 +0100 + +MDSS, aside from the MDP-MEM path, also requires the CPU-DISP_CFG one. +Failing to provide it may result in register accesses failing and that's +never good. + +Add the missing path. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 8786398f8686d1a4267ab52f830b25f17e6d62fc] +--- + arch/arm64/boot/dts/qcom/sc7180.dtsi | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/arch/arm64/boot/dts/qcom/sc7180.dtsi b/arch/arm64/boot/dts/qcom/sc7180.dtsi +index 11f353d416b4..9664e42faeb1 100644 +--- a/arch/arm64/boot/dts/qcom/sc7180.dtsi ++++ b/arch/arm64/boot/dts/qcom/sc7180.dtsi +@@ -3100,8 +3100,12 @@ mdss: display-subsystem@ae00000 { + interrupt-controller; + #interrupt-cells = <1>; + +- interconnects = <&mmss_noc MASTER_MDP0 0 &mc_virt SLAVE_EBI1 0>; +- interconnect-names = "mdp0-mem"; ++ interconnects = <&mmss_noc MASTER_MDP0 QCOM_ICC_TAG_ALWAYS ++ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>, ++ <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS ++ &config_noc SLAVE_DISPLAY_CFG QCOM_ICC_TAG_ALWAYS>; ++ interconnect-names = "mdp0-mem", ++ "cpu-cfg"; + + iommus = <&apps_smmu 0x800 0x2>; + +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0007_arm64_dts_qcom_sc7280_add_the_missing_mdss_icc_path.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0007_arm64_dts_qcom_sc7280_add_the_missing_mdss_icc_path.patch new file mode 100644 index 0000000..cc2fa10 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0007_arm64_dts_qcom_sc7280_add_the_missing_mdss_icc_path.patch @@ -0,0 +1,45 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: arm64: dts: qcom: sc7280: Add the missing MDSS icc path +Date: Wed, 29 Nov 2023 15:44:04 +0100 + +MDSS, aside from the MDP-MEM path, also requires the CPU-DISP_CFG one. +Failing to provide it may result in register accesses failing and that's +never good. + +Add the missing path. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git c657056d99878c8a8ea84d5d4a9101bcb90b47f2] +--- + arch/arm64/boot/dts/qcom/sc7280.dtsi | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/arch/arm64/boot/dts/qcom/sc7280.dtsi b/arch/arm64/boot/dts/qcom/sc7280.dtsi +index 04bf85b0399a..41d327b1f1b6 100644 +--- a/arch/arm64/boot/dts/qcom/sc7280.dtsi ++++ b/arch/arm64/boot/dts/qcom/sc7280.dtsi +@@ -15,6 +15,7 @@ + #include <dt-bindings/dma/qcom-gpi.h> + #include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/gpio/gpio.h> ++#include <dt-bindings/interconnect/qcom,icc.h> + #include <dt-bindings/interconnect/qcom,osm-l3.h> + #include <dt-bindings/interconnect/qcom,sc7280.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> +@@ -3958,8 +3959,12 @@ mdss: display-subsystem@ae00000 { + interrupt-controller; + #interrupt-cells = <1>; + +- interconnects = <&mmss_noc MASTER_MDP0 0 &mc_virt SLAVE_EBI1 0>; +- interconnect-names = "mdp0-mem"; ++ interconnects = <&mmss_noc MASTER_MDP0 QCOM_ICC_TAG_ALWAYS ++ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>, ++ <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS ++ &cnoc2 SLAVE_DISPLAY_CFG QCOM_ICC_TAG_ALWAYS>; ++ interconnect-names = "mdp0-mem", ++ "cpu-cfg"; + + iommus = <&apps_smmu 0x900 0x402>; + +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0008_arm64_dts_qcom_qcm2290_add_display_nodes.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0008_arm64_dts_qcom_qcm2290_add_display_nodes.patch new file mode 100644 index 0000000..577adb0 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0008_arm64_dts_qcom_qcm2290_add_display_nodes.patch @@ -0,0 +1,247 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: arm64: dts: qcom: qcm2290: Add display nodes +Date: Wed, 29 Nov 2023 15:44:05 +0100 + +Add the required nodes to support display on QCM2290. + +Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git a2b32096709dbf4af02675d98356a9d3ad86ff05] +--- + arch/arm64/boot/dts/qcom/qcm2290.dtsi | 214 ++++++++++++++++++++++++++++++++++ + 1 file changed, 214 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qcm2290.dtsi b/arch/arm64/boot/dts/qcom/qcm2290.dtsi +index d46e591e72b5..a3edc4667cc5 100644 +--- a/arch/arm64/boot/dts/qcom/qcm2290.dtsi ++++ b/arch/arm64/boot/dts/qcom/qcm2290.dtsi +@@ -5,6 +5,7 @@ + * Based on sm6115.dtsi and previous efforts by Shawn Guo & Loic Poulain. + */ + ++#include <dt-bindings/clock/qcom,dispcc-qcm2290.h> + #include <dt-bindings/clock/qcom,gcc-qcm2290.h> + #include <dt-bindings/clock/qcom,rpmcc.h> + #include <dt-bindings/dma/qcom-gpi.h> +@@ -1105,6 +1106,219 @@ usb_dwc3: usb@4e00000 { + }; + }; + ++ mdss: display-subsystem@5e00000 { ++ compatible = "qcom,qcm2290-mdss"; ++ reg = <0x0 0x05e00000 0x0 0x1000>; ++ reg-names = "mdss"; ++ interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>; ++ interrupt-controller; ++ #interrupt-cells = <1>; ++ ++ clocks = <&gcc GCC_DISP_AHB_CLK>, ++ <&gcc GCC_DISP_HF_AXI_CLK>, ++ <&dispcc DISP_CC_MDSS_MDP_CLK>; ++ clock-names = "iface", ++ "bus", ++ "core"; ++ ++ resets = <&dispcc DISP_CC_MDSS_CORE_BCR>; ++ ++ power-domains = <&dispcc MDSS_GDSC>; ++ ++ iommus = <&apps_smmu 0x420 0x2>, ++ <&apps_smmu 0x421 0x0>; ++ ++ #address-cells = <2>; ++ #size-cells = <2>; ++ ranges; ++ ++ status = "disabled"; ++ ++ mdp: display-controller@5e01000 { ++ compatible = "qcom,qcm2290-dpu"; ++ reg = <0x0 0x05e01000 0x0 0x8f000>, ++ <0x0 0x05eb0000 0x0 0x2008>; ++ reg-names = "mdp", ++ "vbif"; ++ ++ interrupt-parent = <&mdss>; ++ interrupts = <0>; ++ ++ clocks = <&gcc GCC_DISP_HF_AXI_CLK>, ++ <&dispcc DISP_CC_MDSS_AHB_CLK>, ++ <&dispcc DISP_CC_MDSS_MDP_CLK>, ++ <&dispcc DISP_CC_MDSS_MDP_LUT_CLK>, ++ <&dispcc DISP_CC_MDSS_VSYNC_CLK>; ++ clock-names = "bus", ++ "iface", ++ "core", ++ "lut", ++ "vsync"; ++ ++ operating-points-v2 = <&mdp_opp_table>; ++ power-domains = <&rpmpd QCM2290_VDDCX>; ++ ++ ports { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ port@0 { ++ reg = <0>; ++ dpu_intf1_out: endpoint { ++ remote-endpoint = <&mdss_dsi0_in>; ++ }; ++ }; ++ }; ++ ++ mdp_opp_table: opp-table { ++ compatible = "operating-points-v2"; ++ ++ opp-19200000 { ++ opp-hz = /bits/ 64 <19200000>; ++ required-opps = <&rpmpd_opp_min_svs>; ++ }; ++ ++ opp-192000000 { ++ opp-hz = /bits/ 64 <192000000>; ++ required-opps = <&rpmpd_opp_low_svs>; ++ }; ++ ++ opp-256000000 { ++ opp-hz = /bits/ 64 <256000000>; ++ required-opps = <&rpmpd_opp_svs>; ++ }; ++ ++ opp-307200000 { ++ opp-hz = /bits/ 64 <307200000>; ++ required-opps = <&rpmpd_opp_svs_plus>; ++ }; ++ ++ opp-384000000 { ++ opp-hz = /bits/ 64 <384000000>; ++ required-opps = <&rpmpd_opp_nom>; ++ }; ++ }; ++ }; ++ ++ mdss_dsi0: dsi@5e94000 { ++ compatible = "qcom,qcm2290-dsi-ctrl", "qcom,mdss-dsi-ctrl"; ++ reg = <0x0 0x05e94000 0x0 0x400>; ++ reg-names = "dsi_ctrl"; ++ ++ interrupt-parent = <&mdss>; ++ interrupts = <4>; ++ ++ clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK>, ++ <&dispcc DISP_CC_MDSS_BYTE0_INTF_CLK>, ++ <&dispcc DISP_CC_MDSS_PCLK0_CLK>, ++ <&dispcc DISP_CC_MDSS_ESC0_CLK>, ++ <&dispcc DISP_CC_MDSS_AHB_CLK>, ++ <&gcc GCC_DISP_HF_AXI_CLK>; ++ clock-names = "byte", ++ "byte_intf", ++ "pixel", ++ "core", ++ "iface", ++ "bus"; ++ ++ assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK_SRC>, ++ <&dispcc DISP_CC_MDSS_PCLK0_CLK_SRC>; ++ assigned-clock-parents = <&mdss_dsi0_phy 0>, ++ <&mdss_dsi0_phy 1>; ++ ++ operating-points-v2 = <&dsi_opp_table>; ++ power-domains = <&rpmpd QCM2290_VDDCX>; ++ phys = <&mdss_dsi0_phy>; ++ ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ status = "disabled"; ++ ++ dsi_opp_table: opp-table { ++ compatible = "operating-points-v2"; ++ ++ opp-19200000 { ++ opp-hz = /bits/ 64 <19200000>; ++ required-opps = <&rpmpd_opp_min_svs>; ++ }; ++ ++ opp-164000000 { ++ opp-hz = /bits/ 64 <164000000>; ++ required-opps = <&rpmpd_opp_low_svs>; ++ }; ++ ++ opp-187500000 { ++ opp-hz = /bits/ 64 <187500000>; ++ required-opps = <&rpmpd_opp_svs>; ++ }; ++ }; ++ ++ ports { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ port@0 { ++ reg = <0>; ++ ++ mdss_dsi0_in: endpoint { ++ remote-endpoint = <&dpu_intf1_out>; ++ }; ++ }; ++ ++ port@1 { ++ reg = <1>; ++ ++ mdss_dsi0_out: endpoint { ++ }; ++ }; ++ }; ++ }; ++ ++ mdss_dsi0_phy: phy@5e94400 { ++ compatible = "qcom,dsi-phy-14nm-2290"; ++ reg = <0x0 0x05e94400 0x0 0x100>, ++ <0x0 0x05e94500 0x0 0x300>, ++ <0x0 0x05e94800 0x0 0x188>; ++ reg-names = "dsi_phy", ++ "dsi_phy_lane", ++ "dsi_pll"; ++ ++ clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, ++ <&rpmcc RPM_SMD_XO_CLK_SRC>; ++ clock-names = "iface", ++ "ref"; ++ ++ power-domains = <&rpmpd QCM2290_VDDMX>; ++ required-opps = <&rpmpd_opp_nom>; ++ ++ #clock-cells = <1>; ++ #phy-cells = <0>; ++ ++ status = "disabled"; ++ }; ++ }; ++ ++ dispcc: clock-controller@5f00000 { ++ compatible = "qcom,qcm2290-dispcc"; ++ reg = <0x0 0x05f00000 0x0 0x20000>; ++ clocks = <&rpmcc RPM_SMD_XO_CLK_SRC>, ++ <&rpmcc RPM_SMD_XO_A_CLK_SRC>, ++ <&gcc GCC_DISP_GPLL0_CLK_SRC>, ++ <&gcc GCC_DISP_GPLL0_DIV_CLK_SRC>, ++ <&mdss_dsi0_phy 0>, ++ <&mdss_dsi0_phy 1>; ++ clock-names = "bi_tcxo", ++ "bi_tcxo_ao", ++ "gcc_disp_gpll0_clk_src", ++ "gcc_disp_gpll0_div_clk_src", ++ "dsi0_phy_pll_out_byteclk", ++ "dsi0_phy_pll_out_dsiclk"; ++ #power-domain-cells = <1>; ++ #clock-cells = <1>; ++ #reset-cells = <1>; ++ }; ++ + remoteproc_mpss: remoteproc@6080000 { + compatible = "qcom,qcm2290-mpss-pas", "qcom,sm6115-mpss-pas"; + reg = <0x0 0x06080000 0x0 0x100>; +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0009_arm64_dts_qcom_qcm2290_hook_up_interconnects.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0009_arm64_dts_qcom_qcm2290_hook_up_interconnects.patch new file mode 100644 index 0000000..69fb618 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0009_arm64_dts_qcom_qcm2290_hook_up_interconnects.patch @@ -0,0 +1,448 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: arm64: dts: qcom: qcm2290: Hook up interconnects +Date: Wed, 29 Nov 2023 15:44:06 +0100 + +Add interconnect provider nodes and hook up interconnects to consumer +devices, including bwmon. + +Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 5b970ff0193d67da4a8d2d5fda50dd8ddb50a71e] +--- + arch/arm64/boot/dts/qcom/qcm2290.dtsi | 248 ++++++++++++++++++++++++++++++++++ + 1 file changed, 248 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qcm2290.dtsi b/arch/arm64/boot/dts/qcom/qcm2290.dtsi +index a3edc4667cc5..ce04d0acdede 100644 +--- a/arch/arm64/boot/dts/qcom/qcm2290.dtsi ++++ b/arch/arm64/boot/dts/qcom/qcm2290.dtsi +@@ -12,6 +12,8 @@ + #include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> ++#include <dt-bindings/interconnect/qcom,qcm2290.h> ++#include <dt-bindings/interconnect/qcom,rpm-icc.h> + #include <dt-bindings/power/qcom-rpmpd.h> + + / { +@@ -151,6 +153,8 @@ scm: scm { + clocks = <&rpmcc RPM_SMD_CE1_CLK>; + clock-names = "core"; + #reset-cells = <1>; ++ interconnects = <&system_noc MASTER_CRYPTO_CORE0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI1 RPM_ALWAYS_TAG>; + }; + }; + +@@ -669,6 +673,33 @@ usb_qmpphy: phy@1615000 { + status = "disabled"; + }; + ++ system_noc: interconnect@1880000 { ++ compatible = "qcom,qcm2290-snoc"; ++ reg = <0x0 0x01880000 0x0 0x60200>; ++ #interconnect-cells = <2>; ++ ++ qup_virt: interconnect-qup { ++ compatible = "qcom,qcm2290-qup-virt"; ++ #interconnect-cells = <2>; ++ }; ++ ++ mmnrt_virt: interconnect-mmnrt { ++ compatible = "qcom,qcm2290-mmnrt-virt"; ++ #interconnect-cells = <2>; ++ }; ++ ++ mmrt_virt: interconnect-mmrt { ++ compatible = "qcom,qcm2290-mmrt-virt"; ++ #interconnect-cells = <2>; ++ }; ++ }; ++ ++ config_noc: interconnect@1900000 { ++ compatible = "qcom,qcm2290-cnoc"; ++ reg = <0x0 0x01900000 0x0 0x8200>; ++ #interconnect-cells = <2>; ++ }; ++ + qfprom@1b44000 { + compatible = "qcom,qcm2290-qfprom", "qcom,qfprom"; + reg = <0x0 0x01b44000 0x0 0x3000>; +@@ -681,6 +712,60 @@ qusb2_hstx_trim: hstx-trim@25b { + }; + }; + ++ pmu@1b8e300 { ++ compatible = "qcom,qcm2290-cpu-bwmon", "qcom,sdm845-bwmon"; ++ reg = <0x0 0x01b8e300 0x0 0x600>; ++ interrupts = <GIC_SPI 421 IRQ_TYPE_LEVEL_HIGH>; ++ ++ operating-points-v2 = <&cpu_bwmon_opp_table>; ++ interconnects = <&bimc MASTER_APPSS_PROC RPM_ACTIVE_TAG ++ &bimc SLAVE_EBI1 RPM_ACTIVE_TAG>; ++ ++ cpu_bwmon_opp_table: opp-table { ++ compatible = "operating-points-v2"; ++ ++ opp-0 { ++ opp-peak-kBps = <(200 * 4 * 1000)>; ++ }; ++ ++ opp-1 { ++ opp-peak-kBps = <(300 * 4 * 1000)>; ++ }; ++ ++ opp-2 { ++ opp-peak-kBps = <(451 * 4 * 1000)>; ++ }; ++ ++ opp-3 { ++ opp-peak-kBps = <(547 * 4 * 1000)>; ++ }; ++ ++ opp-4 { ++ opp-peak-kBps = <(681 * 4 * 1000)>; ++ }; ++ ++ opp-5 { ++ opp-peak-kBps = <(768 * 4 * 1000)>; ++ }; ++ ++ opp-6 { ++ opp-peak-kBps = <(1017 * 4 * 1000)>; ++ }; ++ ++ opp-7 { ++ opp-peak-kBps = <(1353 * 4 * 1000)>; ++ }; ++ ++ opp-8 { ++ opp-peak-kBps = <(1555 * 4 * 1000)>; ++ }; ++ ++ opp-9 { ++ opp-peak-kBps = <(1804 * 4 * 1000)>; ++ }; ++ }; ++ }; ++ + spmi_bus: spmi@1c40000 { + compatible = "qcom,spmi-pmic-arb"; + reg = <0x0 0x01c40000 0x0 0x1100>, +@@ -721,6 +806,12 @@ rng: rng@4453000 { + clock-names = "core"; + }; + ++ bimc: interconnect@4480000 { ++ compatible = "qcom,qcm2290-bimc"; ++ reg = <0x0 0x04480000 0x0 0x80000>; ++ #interconnect-cells = <2>; ++ }; ++ + rpm_msg_ram: sram@45f0000 { + compatible = "qcom,rpm-msg-ram"; + reg = <0x0 0x045f0000 0x0 0x7000>; +@@ -756,13 +847,45 @@ sdhc_1: mmc@4744000 { + resets = <&gcc GCC_SDCC1_BCR>; + + power-domains = <&rpmpd QCM2290_VDDCX>; ++ operating-points-v2 = <&sdhc1_opp_table>; + iommus = <&apps_smmu 0xc0 0x0>; ++ interconnects = <&system_noc MASTER_SDCC_1 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI1 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc SLAVE_SDCC_1 RPM_ALWAYS_TAG>; ++ interconnect-names = "sdhc-ddr", ++ "cpu-sdhc"; + + qcom,dll-config = <0x000f642c>; + qcom,ddr-config = <0x80040868>; + bus-width = <8>; + + status = "disabled"; ++ ++ sdhc1_opp_table: opp-table { ++ compatible = "operating-points-v2"; ++ ++ opp-100000000 { ++ opp-hz = /bits/ 64 <100000000>; ++ required-opps = <&rpmpd_opp_low_svs>; ++ opp-peak-kBps = <250000 133320>; ++ opp-avg-kBps = <102400 65000>; ++ }; ++ ++ opp-192000000 { ++ opp-hz = /bits/ 64 <192000000>; ++ required-opps = <&rpmpd_opp_low_svs>; ++ opp-peak-kBps = <800000 300000>; ++ opp-avg-kBps = <204800 200000>; ++ }; ++ ++ opp-384000000 { ++ opp-hz = /bits/ 64 <384000000>; ++ required-opps = <&rpmpd_opp_svs_plus>; ++ opp-peak-kBps = <800000 300000>; ++ opp-avg-kBps = <204800 200000>; ++ }; ++ }; + }; + + sdhc_2: mmc@4784000 { +@@ -786,6 +909,12 @@ sdhc_2: mmc@4784000 { + power-domains = <&rpmpd QCM2290_VDDCX>; + operating-points-v2 = <&sdhc2_opp_table>; + iommus = <&apps_smmu 0xa0 0x0>; ++ interconnects = <&system_noc MASTER_SDCC_2 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI1 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc SLAVE_SDCC_2 RPM_ALWAYS_TAG>; ++ interconnect-names = "sdhc-ddr", ++ "cpu-sdhc"; + + qcom,dll-config = <0x0007642c>; + qcom,ddr-config = <0x80040868>; +@@ -799,11 +928,15 @@ sdhc2_opp_table: opp-table { + opp-100000000 { + opp-hz = /bits/ 64 <100000000>; + required-opps = <&rpmpd_opp_low_svs>; ++ opp-peak-kBps = <250000 133320>; ++ opp-avg-kBps = <261438 150000>; + }; + + opp-202000000 { + opp-hz = /bits/ 64 <202000000>; + required-opps = <&rpmpd_opp_svs_plus>; ++ opp-peak-kBps = <800000 300000>; ++ opp-avg-kBps = <261438 300000>; + }; + }; + }; +@@ -851,6 +984,15 @@ i2c0: i2c@4a80000 { + dmas = <&gpi_dma0 0 0 QCOM_GPI_I2C>, + <&gpi_dma0 1 0 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI1 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -867,6 +1009,12 @@ spi0: spi@4a80000 { + dmas = <&gpi_dma0 0 0 QCOM_GPI_SPI>, + <&gpi_dma0 1 0 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc MASTER_APPSS_PROC RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -880,6 +1028,12 @@ uart0: serial@4a80000 { + clock-names = "se"; + pinctrl-0 = <&qup_uart0_default>; + pinctrl-names = "default"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc MASTER_APPSS_PROC RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config"; + status = "disabled"; + }; + +@@ -894,6 +1048,15 @@ i2c1: i2c@4a84000 { + dmas = <&gpi_dma0 0 1 QCOM_GPI_I2C>, + <&gpi_dma0 1 1 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI1 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -910,6 +1073,12 @@ spi1: spi@4a84000 { + dmas = <&gpi_dma0 0 1 QCOM_GPI_SPI>, + <&gpi_dma0 1 1 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc MASTER_APPSS_PROC RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -926,6 +1095,15 @@ i2c2: i2c@4a88000 { + dmas = <&gpi_dma0 0 2 QCOM_GPI_I2C>, + <&gpi_dma0 1 2 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI1 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -942,6 +1120,12 @@ spi2: spi@4a88000 { + dmas = <&gpi_dma0 0 2 QCOM_GPI_SPI>, + <&gpi_dma0 1 2 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc MASTER_APPSS_PROC RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -958,6 +1142,15 @@ i2c3: i2c@4a8c000 { + dmas = <&gpi_dma0 0 3 QCOM_GPI_I2C>, + <&gpi_dma0 1 3 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI1 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -974,6 +1167,12 @@ spi3: spi@4a8c000 { + dmas = <&gpi_dma0 0 3 QCOM_GPI_SPI>, + <&gpi_dma0 1 3 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc MASTER_APPSS_PROC RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -990,6 +1189,15 @@ i2c4: i2c@4a90000 { + dmas = <&gpi_dma0 0 4 QCOM_GPI_I2C>, + <&gpi_dma0 1 4 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI1 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1006,6 +1214,12 @@ spi4: spi@4a90000 { + dmas = <&gpi_dma0 0 4 QCOM_GPI_SPI>, + <&gpi_dma0 1 4 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc MASTER_APPSS_PROC RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1019,6 +1233,12 @@ uart4: serial@4a90000 { + clock-names = "se"; + pinctrl-0 = <&qup_uart4_default>; + pinctrl-names = "default"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc MASTER_APPSS_PROC RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config"; + status = "disabled"; + }; + +@@ -1033,6 +1253,15 @@ i2c5: i2c@4a94000 { + dmas = <&gpi_dma0 0 5 QCOM_GPI_I2C>, + <&gpi_dma0 1 5 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI1 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1049,6 +1278,12 @@ spi5: spi@4a94000 { + dmas = <&gpi_dma0 0 5 QCOM_GPI_SPI>, + <&gpi_dma0 1 5 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&qup_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &qup_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc MASTER_APPSS_PROC RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1081,6 +1316,13 @@ usb: usb@4ef8800 { + + resets = <&gcc GCC_USB30_PRIM_BCR>; + power-domains = <&gcc GCC_USB30_PRIM_GDSC>; ++ /* TODO: USB<->IPA path */ ++ interconnects = <&system_noc MASTER_USB3_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI1 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc SLAVE_USB3 RPM_ALWAYS_TAG>; ++ interconnect-names = "usb-ddr", ++ "apps-usb"; + wakeup-source; + + #address-cells = <2>; +@@ -1127,6 +1369,12 @@ mdss: display-subsystem@5e00000 { + + iommus = <&apps_smmu 0x420 0x2>, + <&apps_smmu 0x421 0x0>; ++ interconnects = <&mmrt_virt MASTER_MDP0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI1 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_APPSS_PROC RPM_ALWAYS_TAG ++ &config_noc SLAVE_DISPLAY_CFG RPM_ALWAYS_TAG>; ++ interconnect-names = "mdp0-mem", ++ "cpu-cfg"; + + #address-cells = <2>; + #size-cells = <2>; +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0010_arm64_dts_qcom_qrb2210_rb1_set_up_hdmi.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0010_arm64_dts_qcom_qrb2210_rb1_set_up_hdmi.patch new file mode 100644 index 0000000..d202ef7 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0010_arm64_dts_qcom_qrb2210_rb1_set_up_hdmi.patch @@ -0,0 +1,126 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: arm64: dts: qcom: qrb2210-rb1: Set up HDMI +Date: Wed, 29 Nov 2023 15:44:07 +0100 + +Add the required nodes to support display output via the HDMI port. + +Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 616eda24edd48b8b56516886c51d211fbfd2679b] +--- + arch/arm64/boot/dts/qcom/qrb2210-rb1.dts | 86 ++++++++++++++++++++++++++++++++ + 1 file changed, 86 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +index 94885b9c21c8..ac6584164058 100644 +--- a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts ++++ b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +@@ -40,6 +40,17 @@ key-volume-up { + }; + }; + ++ hdmi-connector { ++ compatible = "hdmi-connector"; ++ type = "a"; ++ ++ port { ++ hdmi_con: endpoint { ++ remote-endpoint = <<9611_out>; ++ }; ++ }; ++ }; ++ + leds { + compatible = "gpio-leds"; + +@@ -158,6 +169,68 @@ vph_pwr: regulator-vph-pwr { + }; + }; + ++&gpi_dma0 { ++ status = "okay"; ++}; ++ ++&i2c2 { ++ clock-frequency = <400000>; ++ status = "okay"; ++ ++ lt9611_codec: hdmi-bridge@2b { ++ compatible = "lontium,lt9611uxc"; ++ reg = <0x2b>; ++ interrupts-extended = <&tlmm 46 IRQ_TYPE_EDGE_FALLING>; ++ reset-gpios = <&tlmm 41 GPIO_ACTIVE_HIGH>; ++ ++ vdd-supply = <&vreg_hdmi_out_1p2>; ++ vcc-supply = <<9611_3v3>; ++ ++ pinctrl-0 = <<9611_irq_pin <9611_rst_pin>; ++ pinctrl-names = "default"; ++ #sound-dai-cells = <1>; ++ ++ ports { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ port@0 { ++ reg = <0>; ++ ++ lt9611_a: endpoint { ++ remote-endpoint = <&mdss_dsi0_out>; ++ }; ++ }; ++ ++ port@2 { ++ reg = <2>; ++ ++ lt9611_out: endpoint { ++ remote-endpoint = <&hdmi_con>; ++ }; ++ }; ++ }; ++ }; ++}; ++ ++&mdss { ++ status = "okay"; ++}; ++ ++&mdss_dsi0 { ++ vdda-supply = <&pm2250_l5>; ++ status = "okay"; ++}; ++ ++&mdss_dsi0_out { ++ remote-endpoint = <<9611_a>; ++ data-lanes = <0 1 2 3>; ++}; ++ ++&mdss_dsi0_phy { ++ status = "okay"; ++}; ++ + &pm2250_resin { + linux,code = <KEY_VOLUMEDOWN>; + status = "okay"; +@@ -377,6 +450,19 @@ &sdhc_2 { + }; + + &tlmm { ++ lt9611_rst_pin: lt9611-rst-state { ++ pins = "gpio41"; ++ function = "gpio"; ++ input-disable; ++ output-high; ++ }; ++ ++ lt9611_irq_pin: lt9611-irq-state { ++ pins = "gpio46"; ++ function = "gpio"; ++ bias-disable; ++ }; ++ + sd_det_in_on: sd-det-in-on-state { + pins = "gpio88"; + function = "gpio"; +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0011_arm64_dts_qcom_qrb2210_rb1_enable_can_bus_controller.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0011_arm64_dts_qcom_qrb2210_rb1_enable_can_bus_controller.patch new file mode 100644 index 0000000..485ec79 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0011_arm64_dts_qcom_qrb2210_rb1_enable_can_bus_controller.patch @@ -0,0 +1,54 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: arm64: dts: qcom: qrb2210-rb1: Enable CAN bus controller +Date: Wed, 29 Nov 2023 15:44:08 +0100 + +Enable the Microchip mcp2518fd hosted on the SPI5 bus. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 252bc7ad359478dba8d77bce9502f2cc7bb547a3] +--- + arch/arm64/boot/dts/qcom/qrb2210-rb1.dts | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +index ac6584164058..ac597eb3fe9d 100644 +--- a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts ++++ b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +@@ -23,6 +23,14 @@ chosen { + stdout-path = "serial0:115200n8"; + }; + ++ clocks { ++ clk40M: can-clk { ++ compatible = "fixed-clock"; ++ clock-frequency = <40000000>; ++ #clock-cells = <0>; ++ }; ++ }; ++ + gpio-keys { + compatible = "gpio-keys"; + label = "gpio-keys"; +@@ -449,6 +457,20 @@ &sdhc_2 { + status = "okay"; + }; + ++&spi5 { ++ status = "okay"; ++ ++ can@0 { ++ compatible = "microchip,mcp2518fd"; ++ reg = <0>; ++ interrupts-extended = <&tlmm 39 IRQ_TYPE_LEVEL_LOW>; ++ clocks = <&clk40M>; ++ spi-max-frequency = <10000000>; ++ vdd-supply = <&vdc_5v>; ++ xceiver-supply = <&vdc_5v>; ++ }; ++}; ++ + &tlmm { + lt9611_rst_pin: lt9611-rst-state { + pins = "gpio41"; +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0012_arm64_dts_qcom_qrb2210_rb1_add_wifi_variant_property.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0012_arm64_dts_qcom_qrb2210_rb1_add_wifi_variant_property.patch new file mode 100644 index 0000000..4c5d177 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/features/0012_arm64_dts_qcom_qrb2210_rb1_add_wifi_variant_property.patch @@ -0,0 +1,47 @@ +From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Subject: arm64: dts: qcom: qrb2210-rb1: add wifi variant property +Date: Wed, 29 Nov 2023 15:44:09 +0100 + +The RB1 platform doesn't have board-specific board-id programmed, it uses +generic 0xff. Thus add the property with the 'variant' of the +calibration data. + +Note: the driver will check for the calibration data for the following +IDs, so existing board-2.bin files will continue to work. + +- 'bus=snoc,qmi-board-id=ff,qmi-chip-id=120,variant=Thundercomm_RB1' +- 'bus=snoc,qmi-board-id=ff,qmi-chip-id=120' +- 'bus=snoc,qmi-board-id=ff' + +For the reference, the board is identified by the driver in the +following way: + +ath10k_snoc c800000.wifi: qmi chip_id 0x120 chip_family 0x4007 board_id 0xff soc_id 0x40670000 +ath10k_snoc c800000.wifi: qmi fw_version 0x337302d3 fw_build_timestamp 2023-01-06 01:50 fw_build_id QC_IMAGE_VERSION_STRING=WLAN.HL.3.3.7.c2-00723-QCAHLSWMTPLZ-1 +ath10k_snoc c800000.wifi: wcn3990 hw1.0 target 0x00000008 chip_id 0x00000000 sub 0000:0000 +ath10k_snoc c800000.wifi: kconfig debug 0 debugfs 0 tracing 0 dfs 0 testmode 0 +ath10k_snoc c800000.wifi: firmware ver api 5 features wowlan,mgmt-tx-by-reference,non-bmi crc32 b3d4b790 +ath10k_snoc c800000.wifi: htt-ver 3.114 wmi-op 4 htt-op 3 cal file max-sta 32 raw 0 hwcrypto 1 + +Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git b6a56a5a25d6273729b2b5139d58e3d390318ed2] +--- + arch/arm64/boot/dts/qcom/qrb2210-rb1.dts | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +index ac597eb3fe9d..bd7bcf803654 100644 +--- a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts ++++ b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +@@ -535,6 +535,7 @@ &wifi { + vdd-1.8-xo-supply = <&pm2250_l13>; + vdd-1.3-rfa-supply = <&pm2250_l10>; + vdd-3.3-ch0-supply = <&pm2250_l22>; ++ qcom,ath10k-calibration-variant = "Thundercomm_RB1"; + status = "okay"; + }; + +-- +2.43.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0001-arm64-dts-qcom-qrb2210-rb1-use-USB-host-mode.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0001-arm64-dts-qcom-qrb2210-rb1-use-USB-host-mode.patch new file mode 100644 index 0000000..4765451 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0001-arm64-dts-qcom-qrb2210-rb1-use-USB-host-mode.patch @@ -0,0 +1,41 @@ +From e0cee8dc6757f9f18718eec553be9fffa503e103 Mon Sep 17 00:00:00 2001 +From: Caleb Connolly <caleb.connolly@linaro.org> +Date: Wed, 25 Oct 2023 12:58:00 +0100 +Subject: [PATCH] arm64: dts: qcom: qrb2210-rb1: use USB host mode + +The default for the QCM2290 platform that this board is based on is OTG +mode, however the role detection logic is not hooked up for this board +and the dwc3 driver is configured to not allow role switching from +userspace. + +Force this board to host mode as this is the preferred usecase until we +get role switching hooked up. + +Fixes: e18771961336 ("arm64: dts: qcom: Add initial QTI RB1 device tree") +Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org> +Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20231025-b4-rb1-usb-host-v1-1-522616c575ef@linaro.org +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git e0cee8dc6757f9f18718eec553be9fffa503e103] +--- + arch/arm64/boot/dts/qcom/qrb2210-rb1.dts | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +index bd7bcf803654..aa53b6af6d9c 100644 +--- a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts ++++ b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +@@ -523,6 +523,10 @@ &usb_qmpphy { + status = "okay"; + }; + ++&usb_dwc3 { ++ dr_mode = "host"; ++}; ++ + &usb_hsphy { + vdd-supply = <&pm2250_l12>; + vdda-pll-supply = <&pm2250_l13>; +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0003_arm64_dts_qcom_qrb2210_rb1_enable_remote_processors.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0003_arm64_dts_qcom_qrb2210_rb1_enable_remote_processors.patch new file mode 100644 index 0000000..8161c44 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0003_arm64_dts_qcom_qrb2210_rb1_enable_remote_processors.patch @@ -0,0 +1,55 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: arm64: dts: qcom: qrb2210-rb1: Enable remote processors +Date: Wed, 06 Sep 2023 11:24:57 +0200 + +Enable the ADSP, MPSS and Wi-Fi. Tighten up the Wi-Fi regulators to +make them compliant with that the chip expects. + +The Wi-Fi reports: +qmi chip_id 0x120 chip_family 0x4007 board_id 0xff soc_id 0x40670000 + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 9692ccc49583cd43184ea192af127635877e0f24] +--- + arch/arm64/boot/dts/qcom/qrb2210-rb1.dts | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +index 0f7c59187896..5f7619518deb 100644 +--- a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts ++++ b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +@@ -134,6 +134,16 @@ &qupv3_id_0 { + status = "okay"; + }; + ++&remoteproc_adsp { ++ firmware-name = "qcom/qcm2290/adsp.mbn"; ++ status = "okay"; ++}; ++ ++&remoteproc_mpss { ++ firmware-name = "qcom/qcm2290/modem.mbn"; ++ status = "okay"; ++}; ++ + &rpm_requests { + regulators { + compatible = "qcom,rpm-pm2250-regulators"; +@@ -373,6 +383,14 @@ &usb_hsphy { + status = "okay"; + }; + ++&wifi { ++ vdd-0.8-cx-mx-supply = <&pm2250_l7>; ++ vdd-1.8-xo-supply = <&pm2250_l13>; ++ vdd-1.3-rfa-supply = <&pm2250_l10>; ++ vdd-3.3-ch0-supply = <&pm2250_l22>; ++ status = "okay"; ++}; ++ + &xo_board { + clock-frequency = <38400000>; + }; +-- +2.42.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0004_arm64_dts_qcom_qrb2210_rb1_add_gpio_leds.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0004_arm64_dts_qcom_qrb2210_rb1_add_gpio_leds.patch new file mode 100644 index 0000000..933d410 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0004_arm64_dts_qcom_qrb2210_rb1_add_gpio_leds.patch @@ -0,0 +1,65 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: arm64: dts: qcom: qrb2210-rb1: Add GPIO LEDs +Date: Wed, 06 Sep 2023 11:24:58 +0200 + +Add the three LEDs (blue/yellow/green) connected to TLMM GPIOs. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 02a2fcfbb835bac0c523b3f89326bc1c69f83ce0] +--- + arch/arm64/boot/dts/qcom/qrb2210-rb1.dts | 33 ++++++++++++++++++++++++++++++++ + 1 file changed, 33 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +index 5f7619518deb..fd45f58e254d 100644 +--- a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts ++++ b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +@@ -5,6 +5,7 @@ + + /dts-v1/; + ++#include <dt-bindings/leds/common.h> + #include "qcm2290.dtsi" + #include "pm2250.dtsi" + +@@ -39,6 +40,38 @@ key-volume-up { + }; + }; + ++ leds { ++ compatible = "gpio-leds"; ++ ++ led-bt { ++ label = "blue:bt"; ++ function = LED_FUNCTION_BLUETOOTH; ++ color = <LED_COLOR_ID_BLUE>; ++ gpios = <&tlmm 45 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "bluetooth-power"; ++ default-state = "off"; ++ }; ++ ++ led-user0 { ++ label = "green:user0"; ++ function = LED_FUNCTION_INDICATOR; ++ color = <LED_COLOR_ID_GREEN>; ++ gpios = <&tlmm 52 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "none"; ++ default-state = "off"; ++ panic-indicator; ++ }; ++ ++ led-wlan { ++ label = "yellow:wlan"; ++ function = LED_FUNCTION_WLAN; ++ color = <LED_COLOR_ID_YELLOW>; ++ gpios = <&tlmm 47 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "phy0tx"; ++ default-state = "off"; ++ }; ++ }; ++ + vreg_hdmi_out_1p2: regulator-hdmi-out-1p2 { + compatible = "regulator-fixed"; + regulator-name = "VREG_HDMI_OUT_1P2"; +-- +2.42.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0005_arm64_dts_qcom_qrb2210_rb1_hook_up_usb3.patch b/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0005_arm64_dts_qcom_qrb2210_rb1_hook_up_usb3.patch new file mode 100644 index 0000000..6f93da3 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb2210-dts/sans-icc/0005_arm64_dts_qcom_qrb2210_rb1_hook_up_usb3.patch @@ -0,0 +1,32 @@ +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Subject: arm64: dts: qcom: qrb2210-rb1: Hook up USB3 +Date: Wed, 06 Sep 2023 11:24:59 +0200 + +Configure the USB3 PHY to enable USB3 functionality + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 59f9ff79cd9cf3bc10743d61662b5729fcffff24] +--- + arch/arm64/boot/dts/qcom/qrb2210-rb1.dts | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +index fd45f58e254d..94885b9c21c8 100644 +--- a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts ++++ b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +@@ -409,6 +409,12 @@ &usb { + status = "okay"; + }; + ++&usb_qmpphy { ++ vdda-phy-supply = <&pm2250_l12>; ++ vdda-pll-supply = <&pm2250_l13>; ++ status = "okay"; ++}; ++ + &usb_hsphy { + vdd-supply = <&pm2250_l12>; + vdda-pll-supply = <&pm2250_l13>; +-- +2.42.0 diff --git a/recipes-kernel/linux/linux-yocto/qrb4210-drivers/icc/0001-dt-bindings-interconnect-Add-Qualcomm-SM6115-NoC.patch b/recipes-kernel/linux/linux-yocto/qrb4210-drivers/icc/0001-dt-bindings-interconnect-Add-Qualcomm-SM6115-NoC.patch new file mode 100644 index 0000000..94565eb --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb4210-drivers/icc/0001-dt-bindings-interconnect-Add-Qualcomm-SM6115-NoC.patch @@ -0,0 +1,297 @@ +From 658902913c7044ac5d56b14cea54e735a071fe41 Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Wed, 29 Nov 2023 15:41:01 +0100 +Subject: [PATCH 1/2] dt-bindings: interconnect: Add Qualcomm SM6115 NoC + +Add bindings for Qualcomm SM6115 Network-On-Chip interconnect. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> +Link: https://lore.kernel.org/r/20231125-topic-6115icc-v3-1-bd8907b8cfd7@linaro.org +Signed-off-by: Georgi Djakov <djakov@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 658902913c7044ac5d56b14cea54e735a071fe41] +--- + .../bindings/interconnect/qcom,sm6115.yaml | 152 ++++++++++++++++++ + .../dt-bindings/interconnect/qcom,sm6115.h | 111 +++++++++++++ + 2 files changed, 263 insertions(+) + create mode 100644 Documentation/devicetree/bindings/interconnect/qcom,sm6115.yaml + create mode 100644 include/dt-bindings/interconnect/qcom,sm6115.h + +diff --git a/Documentation/devicetree/bindings/interconnect/qcom,sm6115.yaml b/Documentation/devicetree/bindings/interconnect/qcom,sm6115.yaml +new file mode 100644 +index 000000000000..14b1a0b08e73 +--- /dev/null ++++ b/Documentation/devicetree/bindings/interconnect/qcom,sm6115.yaml +@@ -0,0 +1,152 @@ ++# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) ++%YAML 1.2 ++--- ++$id: http://devicetree.org/schemas/interconnect/qcom,sm6115.yaml# ++$schema: http://devicetree.org/meta-schemas/core.yaml# ++ ++title: Qualcomm SM6115 Network-On-Chip interconnect ++ ++maintainers: ++ - Konrad Dybcio <konradybcio@kernel.org> ++ ++description: ++ The Qualcomm SM6115 interconnect providers support adjusting the ++ bandwidth requirements between the various NoC fabrics. ++ ++properties: ++ compatible: ++ enum: ++ - qcom,sm6115-bimc ++ - qcom,sm6115-cnoc ++ - qcom,sm6115-snoc ++ ++ reg: ++ maxItems: 1 ++ ++ clocks: ++ minItems: 1 ++ maxItems: 4 ++ ++ clock-names: ++ minItems: 1 ++ maxItems: 4 ++ ++# Child node's properties ++patternProperties: ++ '^interconnect-[a-z0-9]+$': ++ type: object ++ description: ++ The interconnect providers do not have a separate QoS register space, ++ but share parent's space. ++ ++ $ref: qcom,rpm-common.yaml# ++ ++ properties: ++ compatible: ++ enum: ++ - qcom,sm6115-clk-virt ++ - qcom,sm6115-mmrt-virt ++ - qcom,sm6115-mmnrt-virt ++ ++ required: ++ - compatible ++ ++ unevaluatedProperties: false ++ ++required: ++ - compatible ++ - reg ++ ++allOf: ++ - $ref: qcom,rpm-common.yaml# ++ - if: ++ properties: ++ compatible: ++ const: qcom,sm6115-cnoc ++ ++ then: ++ properties: ++ clocks: ++ items: ++ - description: USB-NoC AXI clock ++ ++ clock-names: ++ items: ++ - const: usb_axi ++ ++ - if: ++ properties: ++ compatible: ++ const: qcom,sm6115-snoc ++ ++ then: ++ properties: ++ clocks: ++ items: ++ - description: CPU-NoC AXI clock. ++ - description: UFS-NoC AXI clock. ++ - description: USB-NoC AXI clock. ++ - description: IPA clock. ++ ++ clock-names: ++ items: ++ - const: cpu_axi ++ - const: ufs_axi ++ - const: usb_axi ++ - const: ipa ++ ++ - if: ++ properties: ++ compatible: ++ enum: ++ - qcom,sm6115-bimc ++ - qcom,sm6115-clk-virt ++ - qcom,sm6115-mmrt-virt ++ - qcom,sm6115-mmnrt-virt ++ ++ then: ++ properties: ++ clocks: false ++ clock-names: false ++ ++unevaluatedProperties: false ++ ++examples: ++ - | ++ #include <dt-bindings/clock/qcom,gcc-sm6115.h> ++ #include <dt-bindings/clock/qcom,rpmcc.h> ++ ++ snoc: interconnect@1880000 { ++ compatible = "qcom,sm6115-snoc"; ++ reg = <0x01880000 0x60200>; ++ clocks = <&gcc GCC_SYS_NOC_CPUSS_AHB_CLK>, ++ <&gcc GCC_SYS_NOC_UFS_PHY_AXI_CLK>, ++ <&gcc GCC_SYS_NOC_USB3_PRIM_AXI_CLK>, ++ <&rpmcc RPM_SMD_IPA_CLK>; ++ clock-names = "cpu_axi", ++ "ufs_axi", ++ "usb_axi", ++ "ipa"; ++ #interconnect-cells = <1>; ++ ++ qup_virt: interconnect-clk { ++ compatible = "qcom,sm6115-clk-virt"; ++ #interconnect-cells = <1>; ++ }; ++ ++ mmnrt_virt: interconnect-mmnrt { ++ compatible = "qcom,sm6115-mmnrt-virt"; ++ #interconnect-cells = <1>; ++ }; ++ ++ mmrt_virt: interconnect-mmrt { ++ compatible = "qcom,sm6115-mmrt-virt"; ++ #interconnect-cells = <1>; ++ }; ++ }; ++ ++ cnoc: interconnect@1900000 { ++ compatible = "qcom,sm6115-cnoc"; ++ reg = <0x01900000 0x8200>; ++ #interconnect-cells = <1>; ++ }; +diff --git a/include/dt-bindings/interconnect/qcom,sm6115.h b/include/dt-bindings/interconnect/qcom,sm6115.h +new file mode 100644 +index 000000000000..21090e585f05 +--- /dev/null ++++ b/include/dt-bindings/interconnect/qcom,sm6115.h +@@ -0,0 +1,111 @@ ++/* SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause */ ++/* ++ * Copyright (c) 2020, The Linux Foundation. All rights reserved. ++ * Copyright (c) 2023, Linaro Limited ++ */ ++ ++#ifndef __DT_BINDINGS_INTERCONNECT_QCOM_SM6115_H ++#define __DT_BINDINGS_INTERCONNECT_QCOM_SM6115_H ++ ++/* BIMC */ ++#define MASTER_AMPSS_M0 0 ++#define MASTER_SNOC_BIMC_RT 1 ++#define MASTER_SNOC_BIMC_NRT 2 ++#define SNOC_BIMC_MAS 3 ++#define MASTER_GRAPHICS_3D 4 ++#define MASTER_TCU_0 5 ++#define SLAVE_EBI_CH0 6 ++#define BIMC_SNOC_SLV 7 ++ ++/* CNOC */ ++#define SNOC_CNOC_MAS 0 ++#define MASTER_QDSS_DAP 1 ++#define SLAVE_AHB2PHY_USB 2 ++#define SLAVE_APSS_THROTTLE_CFG 3 ++#define SLAVE_BIMC_CFG 4 ++#define SLAVE_BOOT_ROM 5 ++#define SLAVE_CAMERA_NRT_THROTTLE_CFG 6 ++#define SLAVE_CAMERA_RT_THROTTLE_CFG 7 ++#define SLAVE_CAMERA_CFG 8 ++#define SLAVE_CLK_CTL 9 ++#define SLAVE_RBCPR_CX_CFG 10 ++#define SLAVE_RBCPR_MX_CFG 11 ++#define SLAVE_CRYPTO_0_CFG 12 ++#define SLAVE_DCC_CFG 13 ++#define SLAVE_DDR_PHY_CFG 14 ++#define SLAVE_DDR_SS_CFG 15 ++#define SLAVE_DISPLAY_CFG 16 ++#define SLAVE_DISPLAY_THROTTLE_CFG 17 ++#define SLAVE_GPU_CFG 18 ++#define SLAVE_GPU_THROTTLE_CFG 19 ++#define SLAVE_HWKM_CORE 20 ++#define SLAVE_IMEM_CFG 21 ++#define SLAVE_IPA_CFG 22 ++#define SLAVE_LPASS 23 ++#define SLAVE_MAPSS 24 ++#define SLAVE_MDSP_MPU_CFG 25 ++#define SLAVE_MESSAGE_RAM 26 ++#define SLAVE_CNOC_MSS 27 ++#define SLAVE_PDM 28 ++#define SLAVE_PIMEM_CFG 29 ++#define SLAVE_PKA_CORE 30 ++#define SLAVE_PMIC_ARB 31 ++#define SLAVE_QDSS_CFG 32 ++#define SLAVE_QM_CFG 33 ++#define SLAVE_QM_MPU_CFG 34 ++#define SLAVE_QPIC 35 ++#define SLAVE_QUP_0 36 ++#define SLAVE_RPM 37 ++#define SLAVE_SDCC_1 38 ++#define SLAVE_SDCC_2 39 ++#define SLAVE_SECURITY 40 ++#define SLAVE_SNOC_CFG 41 ++#define SLAVE_TCSR 42 ++#define SLAVE_TLMM 43 ++#define SLAVE_USB3 44 ++#define SLAVE_VENUS_CFG 45 ++#define SLAVE_VENUS_THROTTLE_CFG 46 ++#define SLAVE_VSENSE_CTRL_CFG 47 ++#define SLAVE_SERVICE_CNOC 48 ++ ++/* SNOC */ ++#define MASTER_CRYPTO_CORE0 0 ++#define MASTER_SNOC_CFG 1 ++#define MASTER_TIC 2 ++#define MASTER_ANOC_SNOC 3 ++#define BIMC_SNOC_MAS 4 ++#define MASTER_PIMEM 5 ++#define MASTER_QDSS_BAM 6 ++#define MASTER_QPIC 7 ++#define MASTER_QUP_0 8 ++#define MASTER_IPA 9 ++#define MASTER_QDSS_ETR 10 ++#define MASTER_SDCC_1 11 ++#define MASTER_SDCC_2 12 ++#define MASTER_USB3 13 ++#define SLAVE_APPSS 14 ++#define SNOC_CNOC_SLV 15 ++#define SLAVE_OCIMEM 16 ++#define SLAVE_PIMEM 17 ++#define SNOC_BIMC_SLV 18 ++#define SLAVE_SERVICE_SNOC 19 ++#define SLAVE_QDSS_STM 20 ++#define SLAVE_TCU 21 ++#define SLAVE_ANOC_SNOC 22 ++ ++/* CLK Virtual */ ++#define MASTER_QUP_CORE_0 0 ++#define SLAVE_QUP_CORE_0 1 ++ ++/* MMRT Virtual */ ++#define MASTER_CAMNOC_HF 0 ++#define MASTER_MDP_PORT0 1 ++#define SLAVE_SNOC_BIMC_RT 2 ++ ++/* MMNRT Virtual */ ++#define MASTER_CAMNOC_SF 0 ++#define MASTER_VIDEO_P0 1 ++#define MASTER_VIDEO_PROC 2 ++#define SLAVE_SNOC_BIMC_NRT 3 ++ ++#endif +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qrb4210-drivers/icc/0001-iommu-arm-smmu-qcom-Add-SM6115-MDSS-compatible.patch b/recipes-kernel/linux/linux-yocto/qrb4210-drivers/icc/0001-iommu-arm-smmu-qcom-Add-SM6115-MDSS-compatible.patch new file mode 100644 index 0000000..6686e98 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb4210-drivers/icc/0001-iommu-arm-smmu-qcom-Add-SM6115-MDSS-compatible.patch @@ -0,0 +1,30 @@ +From 3b744008c1d08c25c9066206b8f4c3fb0006e9d0 Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Wed, 29 Nov 2023 15:44:02 +0100 +Subject: [PATCH] iommu/arm-smmu-qcom: Add SM6115 MDSS compatible + +Add the SM6115 MDSS compatible to clients compatible list, as it also +needs the workarounds. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> +Upstream-Status: Pending +--- + drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c +index fdabb4b3f7c0..db7c4c71dec1 100644 +--- a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c ++++ b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c +@@ -254,6 +254,7 @@ static const struct of_device_id qcom_smmu_client_of_match[] __maybe_unused = { + { .compatible = "qcom,sc8280xp-mdss" }, + { .compatible = "qcom,sdm845-mdss" }, + { .compatible = "qcom,sdm845-mss-pil" }, ++ { .compatible = "qcom,sm6115-mdss" }, + { .compatible = "qcom,sm6350-mdss" }, + { .compatible = "qcom,sm6375-mdss" }, + { .compatible = "qcom,sm8150-mdss" }, +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qrb4210-drivers/icc/0002-interconnect-qcom-Add-SM6115-interconnect-provider-d.patch b/recipes-kernel/linux/linux-yocto/qrb4210-drivers/icc/0002-interconnect-qcom-Add-SM6115-interconnect-provider-d.patch new file mode 100644 index 0000000..ad75aa3 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb4210-drivers/icc/0002-interconnect-qcom-Add-SM6115-interconnect-provider-d.patch @@ -0,0 +1,1495 @@ +From 2eab57b131bd9ef22377e09de43beb45a650a752 Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Wed, 29 Nov 2023 15:41:02 +0100 +Subject: [PATCH 2/2] interconnect: qcom: Add SM6115 interconnect provider + driver + +Add a driver for managing NoC providers on SM6115. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20231125-topic-6115icc-v3-2-bd8907b8cfd7@linaro.org +Signed-off-by: Georgi Djakov <djakov@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 2eab57b131bd9ef22377e09de43beb45a650a752] +--- + drivers/interconnect/qcom/Kconfig | 9 + + drivers/interconnect/qcom/Makefile | 2 + + drivers/interconnect/qcom/sm6115.c | 1427 ++++++++++++++++++++++++++++ + 3 files changed, 1438 insertions(+) + create mode 100644 drivers/interconnect/qcom/sm6115.c + +diff --git a/drivers/interconnect/qcom/Kconfig b/drivers/interconnect/qcom/Kconfig +index 62b516d38d03..d2a54c5ecd06 100644 +--- a/drivers/interconnect/qcom/Kconfig ++++ b/drivers/interconnect/qcom/Kconfig +@@ -182,6 +182,15 @@ config INTERCONNECT_QCOM_SDX65 + This is a driver for the Qualcomm Network-on-Chip on sdx65-based + platforms. + ++config INTERCONNECT_QCOM_SM6115 ++ tristate "Qualcomm SM6115 interconnect driver" ++ depends on INTERCONNECT_QCOM ++ depends on QCOM_SMD_RPM ++ select INTERCONNECT_QCOM_SMD_RPM ++ help ++ This is a driver for the Qualcomm Network-on-Chip on sm6115-based ++ platforms. ++ + config INTERCONNECT_QCOM_SM6350 + tristate "Qualcomm SM6350 interconnect driver" + depends on INTERCONNECT_QCOM_RPMH_POSSIBLE +diff --git a/drivers/interconnect/qcom/Makefile b/drivers/interconnect/qcom/Makefile +index c5320e293960..7564042a30dc 100644 +--- a/drivers/interconnect/qcom/Makefile ++++ b/drivers/interconnect/qcom/Makefile +@@ -24,6 +24,7 @@ qnoc-sdm845-objs := sdm845.o + qnoc-sdm845-objs := sdm845.o + qnoc-sdx55-objs := sdx55.o + qnoc-sdx65-objs := sdx65.o ++qnoc-sm6115-objs := sm6115.o + qnoc-sm6350-objs := sm6350.o + qnoc-sm8150-objs := sm8150.o + qnoc-sm8250-objs := sm8250.o +@@ -53,6 +54,7 @@ obj-$(CONFIG_INTERCONNECT_QCOM_SDM845) += qnoc-sdm845.o + obj-$(CONFIG_INTERCONNECT_QCOM_SDM845) += qnoc-sdm845.o + obj-$(CONFIG_INTERCONNECT_QCOM_SDX55) += qnoc-sdx55.o + obj-$(CONFIG_INTERCONNECT_QCOM_SDX65) += qnoc-sdx65.o ++obj-$(CONFIG_INTERCONNECT_QCOM_SM6115) += qnoc-sm6115.o + obj-$(CONFIG_INTERCONNECT_QCOM_SM6350) += qnoc-sm6350.o + obj-$(CONFIG_INTERCONNECT_QCOM_SM8150) += qnoc-sm8150.o + obj-$(CONFIG_INTERCONNECT_QCOM_SM8250) += qnoc-sm8250.o +diff --git a/drivers/interconnect/qcom/sm6115.c b/drivers/interconnect/qcom/sm6115.c +new file mode 100644 +index 000000000000..c49a83c87739 +--- /dev/null ++++ b/drivers/interconnect/qcom/sm6115.c +@@ -0,0 +1,1427 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++/* ++ * Copyright (c) 2021, The Linux Foundation. All rights reserved. ++ * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. ++ * Copyright (c) 2023, Linaro Limited ++ */ ++ ++#include <dt-bindings/interconnect/qcom,sm6115.h> ++#include <linux/clk.h> ++#include <linux/device.h> ++#include <linux/interconnect-provider.h> ++#include <linux/io.h> ++#include <linux/module.h> ++#include <linux/of_device.h> ++#include <linux/of_platform.h> ++#include <linux/platform_device.h> ++#include <linux/regmap.h> ++#include <linux/slab.h> ++ ++#include "icc-rpm.h" ++ ++static const char * const snoc_intf_clocks[] = { ++ "cpu_axi", ++ "ufs_axi", ++ "usb_axi", ++ "ipa", /* Required by qxm_ipa */ ++}; ++ ++static const char * const cnoc_intf_clocks[] = { ++ "usb_axi", ++}; ++ ++enum { ++ SM6115_MASTER_AMPSS_M0, ++ SM6115_MASTER_ANOC_SNOC, ++ SM6115_MASTER_BIMC_SNOC, ++ SM6115_MASTER_CAMNOC_HF, ++ SM6115_MASTER_CAMNOC_SF, ++ SM6115_MASTER_CRYPTO_CORE0, ++ SM6115_MASTER_GRAPHICS_3D, ++ SM6115_MASTER_IPA, ++ SM6115_MASTER_MDP_PORT0, ++ SM6115_MASTER_PIMEM, ++ SM6115_MASTER_QDSS_BAM, ++ SM6115_MASTER_QDSS_DAP, ++ SM6115_MASTER_QDSS_ETR, ++ SM6115_MASTER_QPIC, ++ SM6115_MASTER_QUP_0, ++ SM6115_MASTER_QUP_CORE_0, ++ SM6115_MASTER_SDCC_1, ++ SM6115_MASTER_SDCC_2, ++ SM6115_MASTER_SNOC_BIMC_NRT, ++ SM6115_MASTER_SNOC_BIMC_RT, ++ SM6115_MASTER_SNOC_BIMC, ++ SM6115_MASTER_SNOC_CFG, ++ SM6115_MASTER_SNOC_CNOC, ++ SM6115_MASTER_TCU_0, ++ SM6115_MASTER_TIC, ++ SM6115_MASTER_USB3, ++ SM6115_MASTER_VIDEO_P0, ++ SM6115_MASTER_VIDEO_PROC, ++ ++ SM6115_SLAVE_AHB2PHY_USB, ++ SM6115_SLAVE_ANOC_SNOC, ++ SM6115_SLAVE_APPSS, ++ SM6115_SLAVE_APSS_THROTTLE_CFG, ++ SM6115_SLAVE_BIMC_CFG, ++ SM6115_SLAVE_BIMC_SNOC, ++ SM6115_SLAVE_BOOT_ROM, ++ SM6115_SLAVE_CAMERA_CFG, ++ SM6115_SLAVE_CAMERA_NRT_THROTTLE_CFG, ++ SM6115_SLAVE_CAMERA_RT_THROTTLE_CFG, ++ SM6115_SLAVE_CLK_CTL, ++ SM6115_SLAVE_CNOC_MSS, ++ SM6115_SLAVE_CRYPTO_0_CFG, ++ SM6115_SLAVE_DCC_CFG, ++ SM6115_SLAVE_DDR_PHY_CFG, ++ SM6115_SLAVE_DDR_SS_CFG, ++ SM6115_SLAVE_DISPLAY_CFG, ++ SM6115_SLAVE_DISPLAY_THROTTLE_CFG, ++ SM6115_SLAVE_EBI_CH0, ++ SM6115_SLAVE_GPU_CFG, ++ SM6115_SLAVE_GPU_THROTTLE_CFG, ++ SM6115_SLAVE_HWKM_CORE, ++ SM6115_SLAVE_IMEM_CFG, ++ SM6115_SLAVE_IPA_CFG, ++ SM6115_SLAVE_LPASS, ++ SM6115_SLAVE_MAPSS, ++ SM6115_SLAVE_MDSP_MPU_CFG, ++ SM6115_SLAVE_MESSAGE_RAM, ++ SM6115_SLAVE_OCIMEM, ++ SM6115_SLAVE_PDM, ++ SM6115_SLAVE_PIMEM_CFG, ++ SM6115_SLAVE_PIMEM, ++ SM6115_SLAVE_PKA_CORE, ++ SM6115_SLAVE_PMIC_ARB, ++ SM6115_SLAVE_QDSS_CFG, ++ SM6115_SLAVE_QDSS_STM, ++ SM6115_SLAVE_QM_CFG, ++ SM6115_SLAVE_QM_MPU_CFG, ++ SM6115_SLAVE_QPIC, ++ SM6115_SLAVE_QUP_0, ++ SM6115_SLAVE_QUP_CORE_0, ++ SM6115_SLAVE_RBCPR_CX_CFG, ++ SM6115_SLAVE_RBCPR_MX_CFG, ++ SM6115_SLAVE_RPM, ++ SM6115_SLAVE_SDCC_1, ++ SM6115_SLAVE_SDCC_2, ++ SM6115_SLAVE_SECURITY, ++ SM6115_SLAVE_SERVICE_CNOC, ++ SM6115_SLAVE_SERVICE_SNOC, ++ SM6115_SLAVE_SNOC_BIMC_NRT, ++ SM6115_SLAVE_SNOC_BIMC_RT, ++ SM6115_SLAVE_SNOC_BIMC, ++ SM6115_SLAVE_SNOC_CFG, ++ SM6115_SLAVE_SNOC_CNOC, ++ SM6115_SLAVE_TCSR, ++ SM6115_SLAVE_TCU, ++ SM6115_SLAVE_TLMM, ++ SM6115_SLAVE_USB3, ++ SM6115_SLAVE_VENUS_CFG, ++ SM6115_SLAVE_VENUS_THROTTLE_CFG, ++ SM6115_SLAVE_VSENSE_CTRL_CFG, ++}; ++ ++static const u16 slv_ebi_slv_bimc_snoc_links[] = { ++ SM6115_SLAVE_EBI_CH0, ++ SM6115_SLAVE_BIMC_SNOC, ++}; ++ ++static struct qcom_icc_node apps_proc = { ++ .name = "apps_proc", ++ .id = SM6115_MASTER_AMPSS_M0, ++ .channels = 1, ++ .buswidth = 16, ++ .qos.qos_port = 0, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.prio_level = 0, ++ .qos.areq_prio = 0, ++ .mas_rpm_id = 0, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(slv_ebi_slv_bimc_snoc_links), ++ .links = slv_ebi_slv_bimc_snoc_links, ++}; ++ ++static const u16 link_slv_ebi[] = { ++ SM6115_SLAVE_EBI_CH0, ++}; ++ ++static struct qcom_icc_node mas_snoc_bimc_rt = { ++ .name = "mas_snoc_bimc_rt", ++ .id = SM6115_MASTER_SNOC_BIMC_RT, ++ .channels = 1, ++ .buswidth = 16, ++ .qos.qos_port = 2, ++ .qos.qos_mode = NOC_QOS_MODE_BYPASS, ++ .qos.areq_prio = 0, ++ .qos.prio_level = 0, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_ebi), ++ .links = link_slv_ebi, ++}; ++ ++static struct qcom_icc_node mas_snoc_bimc_nrt = { ++ .name = "mas_snoc_bimc_nrt", ++ .id = SM6115_MASTER_SNOC_BIMC_NRT, ++ .channels = 1, ++ .buswidth = 16, ++ .qos.qos_port = 3, ++ .qos.qos_mode = NOC_QOS_MODE_BYPASS, ++ .qos.areq_prio = 0, ++ .qos.prio_level = 0, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_ebi), ++ .links = link_slv_ebi, ++}; ++ ++static struct qcom_icc_node mas_snoc_bimc = { ++ .name = "mas_snoc_bimc", ++ .id = SM6115_MASTER_SNOC_BIMC, ++ .channels = 1, ++ .buswidth = 16, ++ .qos.qos_port = 6, ++ .qos.qos_mode = NOC_QOS_MODE_BYPASS, ++ .qos.areq_prio = 0, ++ .qos.prio_level = 0, ++ .mas_rpm_id = 3, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_ebi), ++ .links = link_slv_ebi, ++}; ++ ++static struct qcom_icc_node qnm_gpu = { ++ .name = "qnm_gpu", ++ .id = SM6115_MASTER_GRAPHICS_3D, ++ .channels = 1, ++ .buswidth = 32, ++ .qos.qos_port = 1, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.prio_level = 0, ++ .qos.areq_prio = 0, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(slv_ebi_slv_bimc_snoc_links), ++ .links = slv_ebi_slv_bimc_snoc_links, ++}; ++ ++static struct qcom_icc_node tcu_0 = { ++ .name = "tcu_0", ++ .id = SM6115_MASTER_TCU_0, ++ .channels = 1, ++ .buswidth = 8, ++ .qos.qos_port = 4, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.prio_level = 6, ++ .qos.areq_prio = 6, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(slv_ebi_slv_bimc_snoc_links), ++ .links = slv_ebi_slv_bimc_snoc_links, ++}; ++ ++static const u16 qup_core_0_links[] = { ++ SM6115_SLAVE_QUP_CORE_0, ++}; ++ ++static struct qcom_icc_node qup0_core_master = { ++ .name = "qup0_core_master", ++ .id = SM6115_MASTER_QUP_CORE_0, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = 170, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(qup_core_0_links), ++ .links = qup_core_0_links, ++}; ++ ++static const u16 link_slv_anoc_snoc[] = { ++ SM6115_SLAVE_ANOC_SNOC, ++}; ++ ++static struct qcom_icc_node crypto_c0 = { ++ .name = "crypto_c0", ++ .id = SM6115_MASTER_CRYPTO_CORE0, ++ .channels = 1, ++ .buswidth = 8, ++ .qos.qos_port = 43, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 2, ++ .mas_rpm_id = 23, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_anoc_snoc), ++ .links = link_slv_anoc_snoc, ++}; ++ ++static const u16 mas_snoc_cnoc_links[] = { ++ SM6115_SLAVE_AHB2PHY_USB, ++ SM6115_SLAVE_APSS_THROTTLE_CFG, ++ SM6115_SLAVE_BIMC_CFG, ++ SM6115_SLAVE_BOOT_ROM, ++ SM6115_SLAVE_CAMERA_CFG, ++ SM6115_SLAVE_CAMERA_NRT_THROTTLE_CFG, ++ SM6115_SLAVE_CAMERA_RT_THROTTLE_CFG, ++ SM6115_SLAVE_CLK_CTL, ++ SM6115_SLAVE_CNOC_MSS, ++ SM6115_SLAVE_CRYPTO_0_CFG, ++ SM6115_SLAVE_DCC_CFG, ++ SM6115_SLAVE_DDR_PHY_CFG, ++ SM6115_SLAVE_DDR_SS_CFG, ++ SM6115_SLAVE_DISPLAY_CFG, ++ SM6115_SLAVE_DISPLAY_THROTTLE_CFG, ++ SM6115_SLAVE_GPU_CFG, ++ SM6115_SLAVE_GPU_THROTTLE_CFG, ++ SM6115_SLAVE_HWKM_CORE, ++ SM6115_SLAVE_IMEM_CFG, ++ SM6115_SLAVE_IPA_CFG, ++ SM6115_SLAVE_LPASS, ++ SM6115_SLAVE_MAPSS, ++ SM6115_SLAVE_MDSP_MPU_CFG, ++ SM6115_SLAVE_MESSAGE_RAM, ++ SM6115_SLAVE_PDM, ++ SM6115_SLAVE_PIMEM_CFG, ++ SM6115_SLAVE_PKA_CORE, ++ SM6115_SLAVE_PMIC_ARB, ++ SM6115_SLAVE_QDSS_CFG, ++ SM6115_SLAVE_QM_CFG, ++ SM6115_SLAVE_QM_MPU_CFG, ++ SM6115_SLAVE_QPIC, ++ SM6115_SLAVE_QUP_0, ++ SM6115_SLAVE_RBCPR_CX_CFG, ++ SM6115_SLAVE_RBCPR_MX_CFG, ++ SM6115_SLAVE_RPM, ++ SM6115_SLAVE_SDCC_1, ++ SM6115_SLAVE_SDCC_2, ++ SM6115_SLAVE_SECURITY, ++ SM6115_SLAVE_SERVICE_CNOC, ++ SM6115_SLAVE_SNOC_CFG, ++ SM6115_SLAVE_TCSR, ++ SM6115_SLAVE_TLMM, ++ SM6115_SLAVE_USB3, ++ SM6115_SLAVE_VENUS_CFG, ++ SM6115_SLAVE_VENUS_THROTTLE_CFG, ++ SM6115_SLAVE_VSENSE_CTRL_CFG, ++}; ++ ++static struct qcom_icc_node mas_snoc_cnoc = { ++ .name = "mas_snoc_cnoc", ++ .id = SM6115_MASTER_SNOC_CNOC, ++ .channels = 1, ++ .buswidth = 8, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(mas_snoc_cnoc_links), ++ .links = mas_snoc_cnoc_links, ++}; ++ ++static struct qcom_icc_node xm_dap = { ++ .name = "xm_dap", ++ .id = SM6115_MASTER_QDSS_DAP, ++ .channels = 1, ++ .buswidth = 8, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(mas_snoc_cnoc_links), ++ .links = mas_snoc_cnoc_links, ++}; ++ ++static const u16 link_slv_snoc_bimc_nrt[] = { ++ SM6115_SLAVE_SNOC_BIMC_NRT, ++}; ++ ++static struct qcom_icc_node qnm_camera_nrt = { ++ .name = "qnm_camera_nrt", ++ .id = SM6115_MASTER_CAMNOC_SF, ++ .channels = 1, ++ .buswidth = 32, ++ .qos.qos_port = 25, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 3, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_snoc_bimc_nrt), ++ .links = link_slv_snoc_bimc_nrt, ++}; ++ ++static struct qcom_icc_node qxm_venus0 = { ++ .name = "qxm_venus0", ++ .id = SM6115_MASTER_VIDEO_P0, ++ .channels = 1, ++ .buswidth = 16, ++ .qos.qos_port = 30, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 3, ++ .qos.urg_fwd_en = true, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_snoc_bimc_nrt), ++ .links = link_slv_snoc_bimc_nrt, ++}; ++ ++static struct qcom_icc_node qxm_venus_cpu = { ++ .name = "qxm_venus_cpu", ++ .id = SM6115_MASTER_VIDEO_PROC, ++ .channels = 1, ++ .buswidth = 8, ++ .qos.qos_port = 34, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_snoc_bimc_nrt), ++ .links = link_slv_snoc_bimc_nrt, ++}; ++ ++static const u16 link_slv_snoc_bimc_rt[] = { ++ SM6115_SLAVE_SNOC_BIMC_RT, ++}; ++ ++static struct qcom_icc_node qnm_camera_rt = { ++ .name = "qnm_camera_rt", ++ .id = SM6115_MASTER_CAMNOC_HF, ++ .channels = 1, ++ .buswidth = 32, ++ .qos.qos_port = 31, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 3, ++ .qos.urg_fwd_en = true, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_snoc_bimc_rt), ++ .links = link_slv_snoc_bimc_rt, ++}; ++ ++static struct qcom_icc_node qxm_mdp0 = { ++ .name = "qxm_mdp0", ++ .id = SM6115_MASTER_MDP_PORT0, ++ .channels = 1, ++ .buswidth = 16, ++ .qos.qos_port = 26, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 3, ++ .qos.urg_fwd_en = true, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_snoc_bimc_rt), ++ .links = link_slv_snoc_bimc_rt, ++}; ++ ++static const u16 slv_service_snoc_links[] = { ++ SM6115_SLAVE_SERVICE_SNOC, ++}; ++ ++static struct qcom_icc_node qhm_snoc_cfg = { ++ .name = "qhm_snoc_cfg", ++ .id = SM6115_MASTER_SNOC_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(slv_service_snoc_links), ++ .links = slv_service_snoc_links, ++}; ++ ++static const u16 mas_tic_links[] = { ++ SM6115_SLAVE_APPSS, ++ SM6115_SLAVE_OCIMEM, ++ SM6115_SLAVE_PIMEM, ++ SM6115_SLAVE_QDSS_STM, ++ SM6115_SLAVE_TCU, ++ SM6115_SLAVE_SNOC_BIMC, ++ SM6115_SLAVE_SNOC_CNOC, ++}; ++ ++static struct qcom_icc_node qhm_tic = { ++ .name = "qhm_tic", ++ .id = SM6115_MASTER_TIC, ++ .channels = 1, ++ .buswidth = 4, ++ .qos.qos_port = 29, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 2, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(mas_tic_links), ++ .links = mas_tic_links, ++}; ++ ++static struct qcom_icc_node mas_anoc_snoc = { ++ .name = "mas_anoc_snoc", ++ .id = SM6115_MASTER_ANOC_SNOC, ++ .channels = 1, ++ .buswidth = 16, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(mas_tic_links), ++ .links = mas_tic_links, ++}; ++ ++static const u16 mas_bimc_snoc_links[] = { ++ SM6115_SLAVE_APPSS, ++ SM6115_SLAVE_SNOC_CNOC, ++ SM6115_SLAVE_OCIMEM, ++ SM6115_SLAVE_PIMEM, ++ SM6115_SLAVE_QDSS_STM, ++ SM6115_SLAVE_TCU, ++}; ++ ++static struct qcom_icc_node mas_bimc_snoc = { ++ .name = "mas_bimc_snoc", ++ .id = SM6115_MASTER_BIMC_SNOC, ++ .channels = 1, ++ .buswidth = 8, ++ .mas_rpm_id = 21, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(mas_bimc_snoc_links), ++ .links = mas_bimc_snoc_links, ++}; ++ ++static const u16 mas_pimem_links[] = { ++ SM6115_SLAVE_OCIMEM, ++ SM6115_SLAVE_SNOC_BIMC, ++}; ++ ++static struct qcom_icc_node qxm_pimem = { ++ .name = "qxm_pimem", ++ .id = SM6115_MASTER_PIMEM, ++ .channels = 1, ++ .buswidth = 8, ++ .qos.qos_port = 41, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 2, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(mas_pimem_links), ++ .links = mas_pimem_links, ++}; ++ ++static struct qcom_icc_node qhm_qdss_bam = { ++ .name = "qhm_qdss_bam", ++ .id = SM6115_MASTER_QDSS_BAM, ++ .channels = 1, ++ .buswidth = 4, ++ .qos.qos_port = 23, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 2, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_anoc_snoc), ++ .links = link_slv_anoc_snoc, ++}; ++ ++static struct qcom_icc_node qhm_qpic = { ++ .name = "qhm_qpic", ++ .id = SM6115_MASTER_QPIC, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_anoc_snoc), ++ .links = link_slv_anoc_snoc, ++}; ++ ++static struct qcom_icc_node qhm_qup0 = { ++ .name = "qhm_qup0", ++ .id = SM6115_MASTER_QUP_0, ++ .channels = 1, ++ .buswidth = 4, ++ .qos.qos_port = 21, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 2, ++ .mas_rpm_id = 166, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_anoc_snoc), ++ .links = link_slv_anoc_snoc, ++}; ++ ++static struct qcom_icc_node qxm_ipa = { ++ .name = "qxm_ipa", ++ .id = SM6115_MASTER_IPA, ++ .channels = 1, ++ .buswidth = 8, ++ .qos.qos_port = 24, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 2, ++ .mas_rpm_id = 59, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_anoc_snoc), ++ .links = link_slv_anoc_snoc, ++}; ++ ++static struct qcom_icc_node xm_qdss_etr = { ++ .name = "xm_qdss_etr", ++ .id = SM6115_MASTER_QDSS_ETR, ++ .channels = 1, ++ .buswidth = 8, ++ .qos.qos_port = 33, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 2, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_anoc_snoc), ++ .links = link_slv_anoc_snoc, ++}; ++ ++static struct qcom_icc_node xm_sdc1 = { ++ .name = "xm_sdc1", ++ .id = SM6115_MASTER_SDCC_1, ++ .channels = 1, ++ .buswidth = 8, ++ .qos.qos_port = 38, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 2, ++ .mas_rpm_id = 33, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_anoc_snoc), ++ .links = link_slv_anoc_snoc, ++}; ++ ++static struct qcom_icc_node xm_sdc2 = { ++ .name = "xm_sdc2", ++ .id = SM6115_MASTER_SDCC_2, ++ .channels = 1, ++ .buswidth = 8, ++ .qos.qos_port = 44, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 2, ++ .mas_rpm_id = 35, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_anoc_snoc), ++ .links = link_slv_anoc_snoc, ++}; ++ ++static struct qcom_icc_node xm_usb3_0 = { ++ .name = "xm_usb3_0", ++ .id = SM6115_MASTER_USB3, ++ .channels = 1, ++ .buswidth = 8, ++ .qos.qos_port = 45, ++ .qos.qos_mode = NOC_QOS_MODE_FIXED, ++ .qos.areq_prio = 2, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(link_slv_anoc_snoc), ++ .links = link_slv_anoc_snoc, ++}; ++ ++static struct qcom_icc_node ebi = { ++ .name = "ebi", ++ .id = SM6115_SLAVE_EBI_CH0, ++ .channels = 2, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = 0, ++}; ++ ++static const u16 slv_bimc_snoc_links[] = { ++ SM6115_MASTER_BIMC_SNOC, ++}; ++ ++static struct qcom_icc_node slv_bimc_snoc = { ++ .name = "slv_bimc_snoc", ++ .id = SM6115_SLAVE_BIMC_SNOC, ++ .channels = 1, ++ .buswidth = 16, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = 2, ++ .num_links = ARRAY_SIZE(slv_bimc_snoc_links), ++ .links = slv_bimc_snoc_links, ++}; ++ ++static struct qcom_icc_node qup0_core_slave = { ++ .name = "qup0_core_slave", ++ .id = SM6115_SLAVE_QUP_CORE_0, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_ahb2phy_usb = { ++ .name = "qhs_ahb2phy_usb", ++ .id = SM6115_SLAVE_AHB2PHY_USB, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_apss_throttle_cfg = { ++ .name = "qhs_apss_throttle_cfg", ++ .id = SM6115_SLAVE_APSS_THROTTLE_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_bimc_cfg = { ++ .name = "qhs_bimc_cfg", ++ .id = SM6115_SLAVE_BIMC_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_boot_rom = { ++ .name = "qhs_boot_rom", ++ .id = SM6115_SLAVE_BOOT_ROM, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_camera_nrt_throttle_cfg = { ++ .name = "qhs_camera_nrt_throttle_cfg", ++ .id = SM6115_SLAVE_CAMERA_NRT_THROTTLE_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_camera_rt_throttle_cfg = { ++ .name = "qhs_camera_rt_throttle_cfg", ++ .id = SM6115_SLAVE_CAMERA_RT_THROTTLE_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_camera_ss_cfg = { ++ .name = "qhs_camera_ss_cfg", ++ .id = SM6115_SLAVE_CAMERA_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_clk_ctl = { ++ .name = "qhs_clk_ctl", ++ .id = SM6115_SLAVE_CLK_CTL, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_cpr_cx = { ++ .name = "qhs_cpr_cx", ++ .id = SM6115_SLAVE_RBCPR_CX_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_cpr_mx = { ++ .name = "qhs_cpr_mx", ++ .id = SM6115_SLAVE_RBCPR_MX_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_crypto0_cfg = { ++ .name = "qhs_crypto0_cfg", ++ .id = SM6115_SLAVE_CRYPTO_0_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_dcc_cfg = { ++ .name = "qhs_dcc_cfg", ++ .id = SM6115_SLAVE_DCC_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_ddr_phy_cfg = { ++ .name = "qhs_ddr_phy_cfg", ++ .id = SM6115_SLAVE_DDR_PHY_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_ddr_ss_cfg = { ++ .name = "qhs_ddr_ss_cfg", ++ .id = SM6115_SLAVE_DDR_SS_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_disp_ss_cfg = { ++ .name = "qhs_disp_ss_cfg", ++ .id = SM6115_SLAVE_DISPLAY_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_display_throttle_cfg = { ++ .name = "qhs_display_throttle_cfg", ++ .id = SM6115_SLAVE_DISPLAY_THROTTLE_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_gpu_cfg = { ++ .name = "qhs_gpu_cfg", ++ .id = SM6115_SLAVE_GPU_CFG, ++ .channels = 1, ++ .buswidth = 8, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_gpu_throttle_cfg = { ++ .name = "qhs_gpu_throttle_cfg", ++ .id = SM6115_SLAVE_GPU_THROTTLE_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_hwkm = { ++ .name = "qhs_hwkm", ++ .id = SM6115_SLAVE_HWKM_CORE, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_imem_cfg = { ++ .name = "qhs_imem_cfg", ++ .id = SM6115_SLAVE_IMEM_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_ipa_cfg = { ++ .name = "qhs_ipa_cfg", ++ .id = SM6115_SLAVE_IPA_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_lpass = { ++ .name = "qhs_lpass", ++ .id = SM6115_SLAVE_LPASS, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_mapss = { ++ .name = "qhs_mapss", ++ .id = SM6115_SLAVE_MAPSS, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_mdsp_mpu_cfg = { ++ .name = "qhs_mdsp_mpu_cfg", ++ .id = SM6115_SLAVE_MDSP_MPU_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_mesg_ram = { ++ .name = "qhs_mesg_ram", ++ .id = SM6115_SLAVE_MESSAGE_RAM, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_mss = { ++ .name = "qhs_mss", ++ .id = SM6115_SLAVE_CNOC_MSS, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_pdm = { ++ .name = "qhs_pdm", ++ .id = SM6115_SLAVE_PDM, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_pimem_cfg = { ++ .name = "qhs_pimem_cfg", ++ .id = SM6115_SLAVE_PIMEM_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_pka_wrapper = { ++ .name = "qhs_pka_wrapper", ++ .id = SM6115_SLAVE_PKA_CORE, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_pmic_arb = { ++ .name = "qhs_pmic_arb", ++ .id = SM6115_SLAVE_PMIC_ARB, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_qdss_cfg = { ++ .name = "qhs_qdss_cfg", ++ .id = SM6115_SLAVE_QDSS_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_qm_cfg = { ++ .name = "qhs_qm_cfg", ++ .id = SM6115_SLAVE_QM_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_qm_mpu_cfg = { ++ .name = "qhs_qm_mpu_cfg", ++ .id = SM6115_SLAVE_QM_MPU_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_qpic = { ++ .name = "qhs_qpic", ++ .id = SM6115_SLAVE_QPIC, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_qup0 = { ++ .name = "qhs_qup0", ++ .id = SM6115_SLAVE_QUP_0, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_rpm = { ++ .name = "qhs_rpm", ++ .id = SM6115_SLAVE_RPM, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_sdc1 = { ++ .name = "qhs_sdc1", ++ .id = SM6115_SLAVE_SDCC_1, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_sdc2 = { ++ .name = "qhs_sdc2", ++ .id = SM6115_SLAVE_SDCC_2, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_security = { ++ .name = "qhs_security", ++ .id = SM6115_SLAVE_SECURITY, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static const u16 slv_snoc_cfg_links[] = { ++ SM6115_MASTER_SNOC_CFG, ++}; ++ ++static struct qcom_icc_node qhs_snoc_cfg = { ++ .name = "qhs_snoc_cfg", ++ .id = SM6115_SLAVE_SNOC_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(slv_snoc_cfg_links), ++ .links = slv_snoc_cfg_links, ++}; ++ ++static struct qcom_icc_node qhs_tcsr = { ++ .name = "qhs_tcsr", ++ .id = SM6115_SLAVE_TCSR, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_tlmm = { ++ .name = "qhs_tlmm", ++ .id = SM6115_SLAVE_TLMM, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_usb3 = { ++ .name = "qhs_usb3", ++ .id = SM6115_SLAVE_USB3, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_venus_cfg = { ++ .name = "qhs_venus_cfg", ++ .id = SM6115_SLAVE_VENUS_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_venus_throttle_cfg = { ++ .name = "qhs_venus_throttle_cfg", ++ .id = SM6115_SLAVE_VENUS_THROTTLE_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node qhs_vsense_ctrl_cfg = { ++ .name = "qhs_vsense_ctrl_cfg", ++ .id = SM6115_SLAVE_VSENSE_CTRL_CFG, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node srvc_cnoc = { ++ .name = "srvc_cnoc", ++ .id = SM6115_SLAVE_SERVICE_CNOC, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static const u16 slv_snoc_bimc_nrt_links[] = { ++ SM6115_MASTER_SNOC_BIMC_NRT, ++}; ++ ++static struct qcom_icc_node slv_snoc_bimc_nrt = { ++ .name = "slv_snoc_bimc_nrt", ++ .id = SM6115_SLAVE_SNOC_BIMC_NRT, ++ .channels = 1, ++ .buswidth = 16, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(slv_snoc_bimc_nrt_links), ++ .links = slv_snoc_bimc_nrt_links, ++}; ++ ++static const u16 slv_snoc_bimc_rt_links[] = { ++ SM6115_MASTER_SNOC_BIMC_RT, ++}; ++ ++static struct qcom_icc_node slv_snoc_bimc_rt = { ++ .name = "slv_snoc_bimc_rt", ++ .id = SM6115_SLAVE_SNOC_BIMC_RT, ++ .channels = 1, ++ .buswidth = 16, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(slv_snoc_bimc_rt_links), ++ .links = slv_snoc_bimc_rt_links, ++}; ++ ++static struct qcom_icc_node qhs_apss = { ++ .name = "qhs_apss", ++ .id = SM6115_SLAVE_APPSS, ++ .channels = 1, ++ .buswidth = 8, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static const u16 slv_snoc_cnoc_links[] = { ++ SM6115_MASTER_SNOC_CNOC ++}; ++ ++static struct qcom_icc_node slv_snoc_cnoc = { ++ .name = "slv_snoc_cnoc", ++ .id = SM6115_SLAVE_SNOC_CNOC, ++ .channels = 1, ++ .buswidth = 8, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = 25, ++ .num_links = ARRAY_SIZE(slv_snoc_cnoc_links), ++ .links = slv_snoc_cnoc_links, ++}; ++ ++static struct qcom_icc_node qxs_imem = { ++ .name = "qxs_imem", ++ .id = SM6115_SLAVE_OCIMEM, ++ .channels = 1, ++ .buswidth = 8, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = 26, ++}; ++ ++static struct qcom_icc_node qxs_pimem = { ++ .name = "qxs_pimem", ++ .id = SM6115_SLAVE_PIMEM, ++ .channels = 1, ++ .buswidth = 8, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static const u16 slv_snoc_bimc_links[] = { ++ SM6115_MASTER_SNOC_BIMC, ++}; ++ ++static struct qcom_icc_node slv_snoc_bimc = { ++ .name = "slv_snoc_bimc", ++ .id = SM6115_SLAVE_SNOC_BIMC, ++ .channels = 1, ++ .buswidth = 16, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = 24, ++ .num_links = ARRAY_SIZE(slv_snoc_bimc_links), ++ .links = slv_snoc_bimc_links, ++}; ++ ++static struct qcom_icc_node srvc_snoc = { ++ .name = "srvc_snoc", ++ .id = SM6115_SLAVE_SERVICE_SNOC, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static struct qcom_icc_node xs_qdss_stm = { ++ .name = "xs_qdss_stm", ++ .id = SM6115_SLAVE_QDSS_STM, ++ .channels = 1, ++ .buswidth = 4, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = 30, ++}; ++ ++static struct qcom_icc_node xs_sys_tcu_cfg = { ++ .name = "xs_sys_tcu_cfg", ++ .id = SM6115_SLAVE_TCU, ++ .channels = 1, ++ .buswidth = 8, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++}; ++ ++static const u16 slv_anoc_snoc_links[] = { ++ SM6115_MASTER_ANOC_SNOC, ++}; ++ ++static struct qcom_icc_node slv_anoc_snoc = { ++ .name = "slv_anoc_snoc", ++ .id = SM6115_SLAVE_ANOC_SNOC, ++ .channels = 1, ++ .buswidth = 16, ++ .mas_rpm_id = -1, ++ .slv_rpm_id = -1, ++ .num_links = ARRAY_SIZE(slv_anoc_snoc_links), ++ .links = slv_anoc_snoc_links, ++}; ++ ++static struct qcom_icc_node *bimc_nodes[] = { ++ [MASTER_AMPSS_M0] = &apps_proc, ++ [MASTER_SNOC_BIMC_RT] = &mas_snoc_bimc_rt, ++ [MASTER_SNOC_BIMC_NRT] = &mas_snoc_bimc_nrt, ++ [SNOC_BIMC_MAS] = &mas_snoc_bimc, ++ [MASTER_GRAPHICS_3D] = &qnm_gpu, ++ [MASTER_TCU_0] = &tcu_0, ++ [SLAVE_EBI_CH0] = &ebi, ++ [BIMC_SNOC_SLV] = &slv_bimc_snoc, ++}; ++ ++static const struct regmap_config bimc_regmap_config = { ++ .reg_bits = 32, ++ .reg_stride = 4, ++ .val_bits = 32, ++ .max_register = 0x80000, ++ .fast_io = true, ++}; ++ ++static const struct qcom_icc_desc sm6115_bimc = { ++ .type = QCOM_ICC_BIMC, ++ .nodes = bimc_nodes, ++ .num_nodes = ARRAY_SIZE(bimc_nodes), ++ .regmap_cfg = &bimc_regmap_config, ++ .bus_clk_desc = &bimc_clk, ++ .keep_alive = true, ++ .qos_offset = 0x8000, ++ .ab_coeff = 153, ++}; ++ ++static struct qcom_icc_node *config_noc_nodes[] = { ++ [SNOC_CNOC_MAS] = &mas_snoc_cnoc, ++ [MASTER_QDSS_DAP] = &xm_dap, ++ [SLAVE_AHB2PHY_USB] = &qhs_ahb2phy_usb, ++ [SLAVE_APSS_THROTTLE_CFG] = &qhs_apss_throttle_cfg, ++ [SLAVE_BIMC_CFG] = &qhs_bimc_cfg, ++ [SLAVE_BOOT_ROM] = &qhs_boot_rom, ++ [SLAVE_CAMERA_NRT_THROTTLE_CFG] = &qhs_camera_nrt_throttle_cfg, ++ [SLAVE_CAMERA_RT_THROTTLE_CFG] = &qhs_camera_rt_throttle_cfg, ++ [SLAVE_CAMERA_CFG] = &qhs_camera_ss_cfg, ++ [SLAVE_CLK_CTL] = &qhs_clk_ctl, ++ [SLAVE_RBCPR_CX_CFG] = &qhs_cpr_cx, ++ [SLAVE_RBCPR_MX_CFG] = &qhs_cpr_mx, ++ [SLAVE_CRYPTO_0_CFG] = &qhs_crypto0_cfg, ++ [SLAVE_DCC_CFG] = &qhs_dcc_cfg, ++ [SLAVE_DDR_PHY_CFG] = &qhs_ddr_phy_cfg, ++ [SLAVE_DDR_SS_CFG] = &qhs_ddr_ss_cfg, ++ [SLAVE_DISPLAY_CFG] = &qhs_disp_ss_cfg, ++ [SLAVE_DISPLAY_THROTTLE_CFG] = &qhs_display_throttle_cfg, ++ [SLAVE_GPU_CFG] = &qhs_gpu_cfg, ++ [SLAVE_GPU_THROTTLE_CFG] = &qhs_gpu_throttle_cfg, ++ [SLAVE_HWKM_CORE] = &qhs_hwkm, ++ [SLAVE_IMEM_CFG] = &qhs_imem_cfg, ++ [SLAVE_IPA_CFG] = &qhs_ipa_cfg, ++ [SLAVE_LPASS] = &qhs_lpass, ++ [SLAVE_MAPSS] = &qhs_mapss, ++ [SLAVE_MDSP_MPU_CFG] = &qhs_mdsp_mpu_cfg, ++ [SLAVE_MESSAGE_RAM] = &qhs_mesg_ram, ++ [SLAVE_CNOC_MSS] = &qhs_mss, ++ [SLAVE_PDM] = &qhs_pdm, ++ [SLAVE_PIMEM_CFG] = &qhs_pimem_cfg, ++ [SLAVE_PKA_CORE] = &qhs_pka_wrapper, ++ [SLAVE_PMIC_ARB] = &qhs_pmic_arb, ++ [SLAVE_QDSS_CFG] = &qhs_qdss_cfg, ++ [SLAVE_QM_CFG] = &qhs_qm_cfg, ++ [SLAVE_QM_MPU_CFG] = &qhs_qm_mpu_cfg, ++ [SLAVE_QPIC] = &qhs_qpic, ++ [SLAVE_QUP_0] = &qhs_qup0, ++ [SLAVE_RPM] = &qhs_rpm, ++ [SLAVE_SDCC_1] = &qhs_sdc1, ++ [SLAVE_SDCC_2] = &qhs_sdc2, ++ [SLAVE_SECURITY] = &qhs_security, ++ [SLAVE_SNOC_CFG] = &qhs_snoc_cfg, ++ [SLAVE_TCSR] = &qhs_tcsr, ++ [SLAVE_TLMM] = &qhs_tlmm, ++ [SLAVE_USB3] = &qhs_usb3, ++ [SLAVE_VENUS_CFG] = &qhs_venus_cfg, ++ [SLAVE_VENUS_THROTTLE_CFG] = &qhs_venus_throttle_cfg, ++ [SLAVE_VSENSE_CTRL_CFG] = &qhs_vsense_ctrl_cfg, ++ [SLAVE_SERVICE_CNOC] = &srvc_cnoc, ++}; ++ ++static const struct regmap_config cnoc_regmap_config = { ++ .reg_bits = 32, ++ .reg_stride = 4, ++ .val_bits = 32, ++ .max_register = 0x6200, ++ .fast_io = true, ++}; ++ ++static const struct qcom_icc_desc sm6115_config_noc = { ++ .type = QCOM_ICC_QNOC, ++ .nodes = config_noc_nodes, ++ .num_nodes = ARRAY_SIZE(config_noc_nodes), ++ .regmap_cfg = &cnoc_regmap_config, ++ .intf_clocks = cnoc_intf_clocks, ++ .num_intf_clocks = ARRAY_SIZE(cnoc_intf_clocks), ++ .bus_clk_desc = &bus_1_clk, ++ .keep_alive = true, ++}; ++ ++static struct qcom_icc_node *sys_noc_nodes[] = { ++ [MASTER_CRYPTO_CORE0] = &crypto_c0, ++ [MASTER_SNOC_CFG] = &qhm_snoc_cfg, ++ [MASTER_TIC] = &qhm_tic, ++ [MASTER_ANOC_SNOC] = &mas_anoc_snoc, ++ [BIMC_SNOC_MAS] = &mas_bimc_snoc, ++ [MASTER_PIMEM] = &qxm_pimem, ++ [MASTER_QDSS_BAM] = &qhm_qdss_bam, ++ [MASTER_QPIC] = &qhm_qpic, ++ [MASTER_QUP_0] = &qhm_qup0, ++ [MASTER_IPA] = &qxm_ipa, ++ [MASTER_QDSS_ETR] = &xm_qdss_etr, ++ [MASTER_SDCC_1] = &xm_sdc1, ++ [MASTER_SDCC_2] = &xm_sdc2, ++ [MASTER_USB3] = &xm_usb3_0, ++ [SLAVE_APPSS] = &qhs_apss, ++ [SNOC_CNOC_SLV] = &slv_snoc_cnoc, ++ [SLAVE_OCIMEM] = &qxs_imem, ++ [SLAVE_PIMEM] = &qxs_pimem, ++ [SNOC_BIMC_SLV] = &slv_snoc_bimc, ++ [SLAVE_SERVICE_SNOC] = &srvc_snoc, ++ [SLAVE_QDSS_STM] = &xs_qdss_stm, ++ [SLAVE_TCU] = &xs_sys_tcu_cfg, ++ [SLAVE_ANOC_SNOC] = &slv_anoc_snoc, ++}; ++ ++static const struct regmap_config sys_noc_regmap_config = { ++ .reg_bits = 32, ++ .reg_stride = 4, ++ .val_bits = 32, ++ .max_register = 0x5f080, ++ .fast_io = true, ++}; ++ ++static const struct qcom_icc_desc sm6115_sys_noc = { ++ .type = QCOM_ICC_QNOC, ++ .nodes = sys_noc_nodes, ++ .num_nodes = ARRAY_SIZE(sys_noc_nodes), ++ .regmap_cfg = &sys_noc_regmap_config, ++ .intf_clocks = snoc_intf_clocks, ++ .num_intf_clocks = ARRAY_SIZE(snoc_intf_clocks), ++ .bus_clk_desc = &bus_2_clk, ++ .keep_alive = true, ++}; ++ ++static struct qcom_icc_node *clk_virt_nodes[] = { ++ [MASTER_QUP_CORE_0] = &qup0_core_master, ++ [SLAVE_QUP_CORE_0] = &qup0_core_slave, ++}; ++ ++static const struct qcom_icc_desc sm6115_clk_virt = { ++ .type = QCOM_ICC_QNOC, ++ .nodes = clk_virt_nodes, ++ .num_nodes = ARRAY_SIZE(clk_virt_nodes), ++ .regmap_cfg = &sys_noc_regmap_config, ++ .bus_clk_desc = &qup_clk, ++ .keep_alive = true, ++}; ++ ++static struct qcom_icc_node *mmnrt_virt_nodes[] = { ++ [MASTER_CAMNOC_SF] = &qnm_camera_nrt, ++ [MASTER_VIDEO_P0] = &qxm_venus0, ++ [MASTER_VIDEO_PROC] = &qxm_venus_cpu, ++ [SLAVE_SNOC_BIMC_NRT] = &slv_snoc_bimc_nrt, ++}; ++ ++static const struct qcom_icc_desc sm6115_mmnrt_virt = { ++ .type = QCOM_ICC_QNOC, ++ .nodes = mmnrt_virt_nodes, ++ .num_nodes = ARRAY_SIZE(mmnrt_virt_nodes), ++ .regmap_cfg = &sys_noc_regmap_config, ++ .bus_clk_desc = &mmaxi_0_clk, ++ .keep_alive = true, ++ .ab_coeff = 142, ++}; ++ ++static struct qcom_icc_node *mmrt_virt_nodes[] = { ++ [MASTER_CAMNOC_HF] = &qnm_camera_rt, ++ [MASTER_MDP_PORT0] = &qxm_mdp0, ++ [SLAVE_SNOC_BIMC_RT] = &slv_snoc_bimc_rt, ++}; ++ ++static const struct qcom_icc_desc sm6115_mmrt_virt = { ++ .type = QCOM_ICC_QNOC, ++ .nodes = mmrt_virt_nodes, ++ .num_nodes = ARRAY_SIZE(mmrt_virt_nodes), ++ .regmap_cfg = &sys_noc_regmap_config, ++ .bus_clk_desc = &mmaxi_1_clk, ++ .keep_alive = true, ++ .ab_coeff = 139, ++}; ++ ++static const struct of_device_id qnoc_of_match[] = { ++ { .compatible = "qcom,sm6115-bimc", .data = &sm6115_bimc }, ++ { .compatible = "qcom,sm6115-clk-virt", .data = &sm6115_clk_virt }, ++ { .compatible = "qcom,sm6115-cnoc", .data = &sm6115_config_noc }, ++ { .compatible = "qcom,sm6115-mmrt-virt", .data = &sm6115_mmrt_virt }, ++ { .compatible = "qcom,sm6115-mmnrt-virt", .data = &sm6115_mmnrt_virt }, ++ { .compatible = "qcom,sm6115-snoc", .data = &sm6115_sys_noc }, ++ { } ++}; ++MODULE_DEVICE_TABLE(of, qnoc_of_match); ++ ++static struct platform_driver qnoc_driver = { ++ .probe = qnoc_probe, ++ .remove = qnoc_remove, ++ .driver = { ++ .name = "qnoc-sm6115", ++ .of_match_table = qnoc_of_match, ++ .sync_state = icc_sync_state, ++ }, ++}; ++ ++static int __init qnoc_driver_init(void) ++{ ++ return platform_driver_register(&qnoc_driver); ++} ++core_initcall(qnoc_driver_init); ++ ++static void __exit qnoc_driver_exit(void) ++{ ++ platform_driver_unregister(&qnoc_driver); ++} ++module_exit(qnoc_driver_exit); ++ ++MODULE_DESCRIPTION("SM6115 NoC driver"); ++MODULE_LICENSE("GPL"); +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qrb4210-dts/0001-arm64-dts-qcom-qrb4210-rb2-Enable-MPSS-and-Wi-Fi.patch b/recipes-kernel/linux/linux-yocto/qrb4210-dts/0001-arm64-dts-qcom-qrb4210-rb2-Enable-MPSS-and-Wi-Fi.patch new file mode 100644 index 0000000..80ad1e6 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb4210-dts/0001-arm64-dts-qcom-qrb4210-rb2-Enable-MPSS-and-Wi-Fi.patch @@ -0,0 +1,86 @@ +From ff753723bf3916770c1e2580fe1f34ad9d6f0283 Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Sat, 4 Nov 2023 21:56:35 +0100 +Subject: [PATCH] arm64: dts: qcom: qrb4210-rb2: Enable MPSS and Wi-Fi + +Enable the remote processors and tighten up the regulators to enable +Wi-Fi functionality on the RB2. + +For reference, the hw/sw identifies as: + +qmi chip_id 0x150 chip_family 0x4002 board_id 0xff soc_id 0x40670000 +qmi fw_version 0x337302d3 fw_build_timestamp 2023-01-06 01:50 +fw_build_id QC_IMAGE_VERSION_STRING=WLAN.HL.3.3.7.c2-00723-QCAHLSWMTPLZ-1 +wcn3990 hw1.0 target 0x00000008 chip_id 0x00000000 sub 0000:0000 +kconfig debug 0 debugfs 0 tracing 0 dfs 0 testmode 0 +firmware ver api 5 features wowlan,mgmt-tx-by-reference,non-bmi +crc32 b3d4b790 +htt-ver 3.114 wmi-op 4 htt-op 3 cal file max-sta 32 raw 0 hwcrypto 1 + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20231104-topic-rb2_wifi-v1-1-fd45ae535d2f@linaro.org +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git ff753723bf3916770c1e2580fe1f34ad9d6f0283] +--- + arch/arm64/boot/dts/qcom/qrb4210-rb2.dts | 24 ++++++++++++++++++++---- + 1 file changed, 20 insertions(+), 4 deletions(-) + +diff --git a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts +index 33c312ae842e..7c19f874fa71 100644 +--- a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts ++++ b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts +@@ -281,6 +281,12 @@ &remoteproc_cdsp { + status = "okay"; + }; + ++&remoteproc_mpss { ++ firmware-name = "qcom/qrb4210/modem.mbn"; ++ ++ status = "okay"; ++}; ++ + &rpm_requests { + regulators { + compatible = "qcom,rpm-pm6125-regulators"; +@@ -347,8 +353,8 @@ vreg_l7a_1p256: l7 { + }; + + vreg_l8a_0p664: l8 { +- regulator-min-microvolt = <400000>; +- regulator-max-microvolt = <728000>; ++ regulator-min-microvolt = <640000>; ++ regulator-max-microvolt = <640000>; + }; + + vreg_l9a_1p8: l9 { +@@ -428,8 +434,8 @@ vreg_l22a_2p96: l22 { + }; + + vreg_l23a_3p3: l23 { +- regulator-min-microvolt = <3200000>; +- regulator-max-microvolt = <3400000>; ++ regulator-min-microvolt = <3312000>; ++ regulator-max-microvolt = <3312000>; + regulator-allow-set-load; + }; + +@@ -620,6 +626,16 @@ &usb_qmpphy { + status = "okay"; + }; + ++&wifi { ++ vdd-0.8-cx-mx-supply = <&vreg_l8a_0p664>; ++ vdd-1.8-xo-supply = <&vreg_l16a_1p3>; ++ vdd-1.3-rfa-supply = <&vreg_l17a_1p3>; ++ vdd-3.3-ch0-supply = <&vreg_l23a_3p3>; ++ qcom,ath10k-calibration-variant = "Thundercomm_RB2"; ++ ++ status = "okay"; ++}; ++ + &xo_board { + clock-frequency = <19200000>; + }; +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qrb4210-dts/0001-arm64-dts-qcom-sm6115-Add-UART3.patch b/recipes-kernel/linux/linux-yocto/qrb4210-dts/0001-arm64-dts-qcom-sm6115-Add-UART3.patch new file mode 100644 index 0000000..385e1b2 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb4210-dts/0001-arm64-dts-qcom-sm6115-Add-UART3.patch @@ -0,0 +1,66 @@ +From ba5f5610841fad3b15c69c6949ed6e19bd5b466e Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Mon, 27 Nov 2023 12:23:27 +0100 +Subject: [PATCH 1/2] arm64: dts: qcom: sm6115: Add UART3 + +Hook up UART3, usually used for communicating with a Bluetooth module. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20231120-topic-rb2_bt-v2-1-4bbf266258ef@linaro.org +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git ba5f5610841fad3b15c69c6949ed6e19bd5b466e] +--- + arch/arm64/boot/dts/qcom/sm6115.dtsi | 30 ++++++++++++++++++++++++++++ + 1 file changed, 30 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/sm6115.dtsi b/arch/arm64/boot/dts/qcom/sm6115.dtsi +index 839c60351240..0d13d7bf6bd1 100644 +--- a/arch/arm64/boot/dts/qcom/sm6115.dtsi ++++ b/arch/arm64/boot/dts/qcom/sm6115.dtsi +@@ -273,6 +273,25 @@ memory@80000000 { + reg = <0 0x80000000 0 0>; + }; + ++ qup_opp_table: opp-table-qup { ++ compatible = "operating-points-v2"; ++ ++ opp-75000000 { ++ opp-hz = /bits/ 64 <75000000>; ++ required-opps = <&rpmpd_opp_low_svs>; ++ }; ++ ++ opp-100000000 { ++ opp-hz = /bits/ 64 <100000000>; ++ required-opps = <&rpmpd_opp_svs>; ++ }; ++ ++ opp-128000000 { ++ opp-hz = /bits/ 64 <128000000>; ++ required-opps = <&rpmpd_opp_nom>; ++ }; ++ }; ++ + pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <GIC_PPI 6 IRQ_TYPE_LEVEL_HIGH>; +@@ -1208,6 +1227,17 @@ spi3: spi@4a8c000 { + status = "disabled"; + }; + ++ uart3: serial@4a8c000 { ++ compatible = "qcom,geni-uart"; ++ reg = <0x0 0x04a8c000 0x0 0x4000>; ++ interrupts-extended = <&intc GIC_SPI 330 IRQ_TYPE_LEVEL_HIGH>; ++ clocks = <&gcc GCC_QUPV3_WRAP0_S3_CLK>; ++ clock-names = "se"; ++ power-domains = <&rpmpd SM6115_VDDCX>; ++ operating-points-v2 = <&qup_opp_table>; ++ status = "disabled"; ++ }; ++ + i2c4: i2c@4a90000 { + compatible = "qcom,geni-i2c"; + reg = <0x0 0x04a90000 0x0 0x4000>; +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qrb4210-dts/0001-arm64-dts-qcom-sm6115-Hook-up-interconnects.patch b/recipes-kernel/linux/linux-yocto/qrb4210-dts/0001-arm64-dts-qcom-sm6115-Hook-up-interconnects.patch new file mode 100644 index 0000000..a3c3832 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb4210-dts/0001-arm64-dts-qcom-sm6115-Hook-up-interconnects.patch @@ -0,0 +1,475 @@ +From b3eaa47395b9d0fc593e7f8b8b0abb4c769ad30d Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Mon, 11 Dec 2023 10:23:59 +0100 +Subject: [PATCH] arm64: dts: qcom: sm6115: Hook up interconnects + +Add interconnect provider nodes and hook up interconnects to consumer +devices, including bwmon. + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20231209-topic-6115iccdt-v1-2-f62da62b7276@linaro.org +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git b3eaa47395b9d0fc593e7f8b8b0abb4c769ad30d] +--- + arch/arm64/boot/dts/qcom/sm6115.dtsi | 277 +++++++++++++++++++++++++++ + 1 file changed, 277 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/sm6115.dtsi b/arch/arm64/boot/dts/qcom/sm6115.dtsi +index 72a833b7cd83..160e098f1075 100644 +--- a/arch/arm64/boot/dts/qcom/sm6115.dtsi ++++ b/arch/arm64/boot/dts/qcom/sm6115.dtsi +@@ -10,6 +10,8 @@ + #include <dt-bindings/dma/qcom-gpi.h> + #include <dt-bindings/firmware/qcom,scm.h> + #include <dt-bindings/gpio/gpio.h> ++#include <dt-bindings/interconnect/qcom,rpm-icc.h> ++#include <dt-bindings/interconnect/qcom,sm6115.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/power/qcom-rpmpd.h> + +@@ -264,6 +266,8 @@ firmware { + scm: scm { + compatible = "qcom,scm-sm6115", "qcom,scm"; + #reset-cells = <1>; ++ interconnects = <&system_noc MASTER_CRYPTO_CORE0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; + }; + }; + +@@ -878,6 +882,43 @@ usb_qmpphy: phy@1615000 { + status = "disabled"; + }; + ++ system_noc: interconnect@1880000 { ++ compatible = "qcom,sm6115-snoc"; ++ reg = <0x0 0x01880000 0x0 0x5f080>; ++ clocks = <&gcc GCC_SYS_NOC_CPUSS_AHB_CLK>, ++ <&gcc GCC_SYS_NOC_UFS_PHY_AXI_CLK>, ++ <&gcc GCC_SYS_NOC_USB3_PRIM_AXI_CLK>, ++ <&rpmcc RPM_SMD_IPA_CLK>; ++ clock-names = "cpu_axi", ++ "ufs_axi", ++ "usb_axi", ++ "ipa"; ++ #interconnect-cells = <2>; ++ ++ clk_virt: interconnect-clk { ++ compatible = "qcom,sm6115-clk-virt"; ++ #interconnect-cells = <2>; ++ }; ++ ++ mmrt_virt: interconnect-mmrt { ++ compatible = "qcom,sm6115-mmrt-virt"; ++ #interconnect-cells = <2>; ++ }; ++ ++ mmnrt_virt: interconnect-mmnrt { ++ compatible = "qcom,sm6115-mmnrt-virt"; ++ #interconnect-cells = <2>; ++ }; ++ }; ++ ++ config_noc: interconnect@1900000 { ++ compatible = "qcom,sm6115-cnoc"; ++ reg = <0x0 0x01900000 0x0 0x6200>; ++ clocks = <&gcc GCC_CFG_NOC_USB3_PRIM_AXI_CLK>; ++ clock-names = "usb_axi"; ++ #interconnect-cells = <2>; ++ }; ++ + qfprom@1b40000 { + compatible = "qcom,sm6115-qfprom", "qcom,qfprom"; + reg = <0x0 0x01b40000 0x0 0x7000>; +@@ -902,6 +943,60 @@ rng: rng@1b53000 { + clock-names = "core"; + }; + ++ pmu@1b8e300 { ++ compatible = "qcom,sm6115-cpu-bwmon", "qcom,sdm845-bwmon"; ++ reg = <0x0 0x01b8e300 0x0 0x600>; ++ interrupts = <GIC_SPI 421 IRQ_TYPE_LEVEL_HIGH>; ++ ++ operating-points-v2 = <&cpu_bwmon_opp_table>; ++ interconnects = <&bimc MASTER_AMPSS_M0 RPM_ACTIVE_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ACTIVE_TAG>; ++ ++ cpu_bwmon_opp_table: opp-table { ++ compatible = "operating-points-v2"; ++ ++ opp-0 { ++ opp-peak-kBps = <(200 * 4 * 1000)>; ++ }; ++ ++ opp-1 { ++ opp-peak-kBps = <(300 * 4 * 1000)>; ++ }; ++ ++ opp-2 { ++ opp-peak-kBps = <(451 * 4 * 1000)>; ++ }; ++ ++ opp-3 { ++ opp-peak-kBps = <(547 * 4 * 1000)>; ++ }; ++ ++ opp-4 { ++ opp-peak-kBps = <(681 * 4 * 1000)>; ++ }; ++ ++ opp-5 { ++ opp-peak-kBps = <(768 * 4 * 1000)>; ++ }; ++ ++ opp-6 { ++ opp-peak-kBps = <(1017 * 4 * 1000)>; ++ }; ++ ++ opp-7 { ++ opp-peak-kBps = <(1353 * 4 * 1000)>; ++ }; ++ ++ opp-8 { ++ opp-peak-kBps = <(1555 * 4 * 1000)>; ++ }; ++ ++ opp-9 { ++ opp-peak-kBps = <(1804 * 4 * 1000)>; ++ }; ++ }; ++ }; ++ + spmi_bus: spmi@1c40000 { + compatible = "qcom,spmi-pmic-arb"; + reg = <0x0 0x01c40000 0x0 0x1100>, +@@ -931,6 +1026,12 @@ tsens0: thermal-sensor@4411000 { + #thermal-sensor-cells = <1>; + }; + ++ bimc: interconnect@4480000 { ++ compatible = "qcom,sm6115-bimc"; ++ reg = <0x0 0x04480000 0x0 0x80000>; ++ #interconnect-cells = <2>; ++ }; ++ + rpm_msg_ram: sram@45f0000 { + compatible = "qcom,rpm-msg-ram"; + reg = <0x0 0x045f0000 0x0 0x7000>; +@@ -958,8 +1059,42 @@ sdhc_1: mmc@4744000 { + <&gcc GCC_SDCC1_ICE_CORE_CLK>; + clock-names = "iface", "core", "xo", "ice"; + ++ power-domains = <&rpmpd SM6115_VDDCX>; ++ operating-points-v2 = <&sdhc1_opp_table>; ++ interconnects = <&system_noc MASTER_SDCC_1 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_SDCC_1 RPM_ALWAYS_TAG>; ++ interconnect-names = "sdhc-ddr", ++ "cpu-sdhc"; ++ + bus-width = <8>; + status = "disabled"; ++ ++ sdhc1_opp_table: opp-table { ++ compatible = "operating-points-v2"; ++ ++ opp-100000000 { ++ opp-hz = /bits/ 64 <100000000>; ++ required-opps = <&rpmpd_opp_low_svs>; ++ opp-peak-kBps = <250000 133320>; ++ opp-avg-kBps = <102400 65000>; ++ }; ++ ++ opp-192000000 { ++ opp-hz = /bits/ 64 <192000000>; ++ required-opps = <&rpmpd_opp_low_svs>; ++ opp-peak-kBps = <800000 300000>; ++ opp-avg-kBps = <204800 200000>; ++ }; ++ ++ opp-384000000 { ++ opp-hz = /bits/ 64 <384000000>; ++ required-opps = <&rpmpd_opp_svs_plus>; ++ opp-peak-kBps = <800000 300000>; ++ opp-avg-kBps = <204800 200000>; ++ }; ++ }; + }; + + sdhc_2: mmc@4784000 { +@@ -980,6 +1115,12 @@ sdhc_2: mmc@4784000 { + operating-points-v2 = <&sdhc2_opp_table>; + iommus = <&apps_smmu 0x00a0 0x0>; + resets = <&gcc GCC_SDCC2_BCR>; ++ interconnects = <&system_noc MASTER_SDCC_2 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_SDCC_2 RPM_ALWAYS_TAG>; ++ interconnect-names = "sdhc-ddr", ++ "cpu-sdhc"; + + bus-width = <4>; + qcom,dll-config = <0x0007642c>; +@@ -992,11 +1133,15 @@ sdhc2_opp_table: opp-table { + opp-100000000 { + opp-hz = /bits/ 64 <100000000>; + required-opps = <&rpmpd_opp_low_svs>; ++ opp-peak-kBps = <250000 133320>; ++ opp-avg-kBps = <261438 150000>; + }; + + opp-202000000 { + opp-hz = /bits/ 64 <202000000>; + required-opps = <&rpmpd_opp_nom>; ++ opp-peak-kBps = <800000 300000>; ++ opp-avg-kBps = <261438 300000>; + }; + }; + }; +@@ -1103,6 +1248,15 @@ i2c0: i2c@4a80000 { + dmas = <&gpi_dma0 0 0 QCOM_GPI_I2C>, + <&gpi_dma0 1 0 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1119,6 +1273,15 @@ spi0: spi@4a80000 { + dmas = <&gpi_dma0 0 0 QCOM_GPI_SPI>, + <&gpi_dma0 1 0 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1135,6 +1298,12 @@ i2c1: i2c@4a84000 { + dmas = <&gpi_dma0 0 1 QCOM_GPI_I2C>, + <&gpi_dma0 1 1 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1151,6 +1320,15 @@ spi1: spi@4a84000 { + dmas = <&gpi_dma0 0 1 QCOM_GPI_SPI>, + <&gpi_dma0 1 1 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1167,6 +1345,15 @@ i2c2: i2c@4a88000 { + dmas = <&gpi_dma0 0 2 QCOM_GPI_I2C>, + <&gpi_dma0 1 2 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1183,6 +1370,15 @@ spi2: spi@4a88000 { + dmas = <&gpi_dma0 0 2 QCOM_GPI_SPI>, + <&gpi_dma0 1 2 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1199,6 +1395,15 @@ i2c3: i2c@4a8c000 { + dmas = <&gpi_dma0 0 3 QCOM_GPI_I2C>, + <&gpi_dma0 1 3 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1215,6 +1420,15 @@ spi3: spi@4a8c000 { + dmas = <&gpi_dma0 0 3 QCOM_GPI_SPI>, + <&gpi_dma0 1 3 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1228,6 +1442,12 @@ uart3: serial@4a8c000 { + clock-names = "se"; + power-domains = <&rpmpd SM6115_VDDCX>; + operating-points-v2 = <&qup_opp_table>; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config"; + status = "disabled"; + }; + +@@ -1242,6 +1462,15 @@ i2c4: i2c@4a90000 { + dmas = <&gpi_dma0 0 4 QCOM_GPI_I2C>, + <&gpi_dma0 1 4 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1258,6 +1487,15 @@ spi4: spi@4a90000 { + dmas = <&gpi_dma0 0 4 QCOM_GPI_SPI>, + <&gpi_dma0 1 4 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1269,6 +1507,12 @@ uart4: serial@4a90000 { + clock-names = "se"; + clocks = <&gcc GCC_QUPV3_WRAP0_S4_CLK>; + interrupts = <GIC_SPI 331 IRQ_TYPE_LEVEL_HIGH>; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config"; + status = "disabled"; + }; + +@@ -1283,6 +1527,15 @@ i2c5: i2c@4a94000 { + dmas = <&gpi_dma0 0 5 QCOM_GPI_I2C>, + <&gpi_dma0 1 5 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1299,6 +1552,15 @@ spi5: spi@4a94000 { + dmas = <&gpi_dma0 0 5 QCOM_GPI_SPI>, + <&gpi_dma0 1 5 QCOM_GPI_SPI>; + dma-names = "tx", "rx"; ++ interconnects = <&clk_virt MASTER_QUP_CORE_0 RPM_ALWAYS_TAG ++ &clk_virt SLAVE_QUP_CORE_0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_QUP_0 RPM_ALWAYS_TAG>, ++ <&system_noc MASTER_QUP_0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>; ++ interconnect-names = "qup-core", ++ "qup-config", ++ "qup-memory"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; +@@ -1330,6 +1592,14 @@ usb: usb@4ef8800 { + + resets = <&gcc GCC_USB30_PRIM_BCR>; + power-domains = <&gcc GCC_USB30_PRIM_GDSC>; ++ /* TODO: USB<->IPA path */ ++ interconnects = <&system_noc MASTER_USB3 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_USB3 RPM_ALWAYS_TAG>; ++ interconnect-names = "usb-ddr", ++ "apps-usb"; ++ + qcom,select-utmi-as-pipe-clk; + status = "disabled"; + +@@ -1501,6 +1771,13 @@ mdss: display-subsystem@5e00000 { + iommus = <&apps_smmu 0x420 0x2>, + <&apps_smmu 0x421 0x0>; + ++ interconnects = <&mmrt_virt MASTER_MDP_PORT0 RPM_ALWAYS_TAG ++ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>, ++ <&bimc MASTER_AMPSS_M0 RPM_ALWAYS_TAG ++ &config_noc SLAVE_DISPLAY_CFG RPM_ALWAYS_TAG>; ++ interconnect-names = "mdp0-mem", ++ "cpu-cfg"; ++ + #address-cells = <2>; + #size-cells = <2>; + ranges; +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qrb4210-dts/0002-arm64-dts-qcom-qrb4210-rb2-Enable-bluetooth.patch b/recipes-kernel/linux/linux-yocto/qrb4210-dts/0002-arm64-dts-qcom-qrb4210-rb2-Enable-bluetooth.patch new file mode 100644 index 0000000..d70ef6a --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb4210-dts/0002-arm64-dts-qcom-qrb4210-rb2-Enable-bluetooth.patch @@ -0,0 +1,162 @@ +From cab60b166575dd6db4c85487e87a9b677e04c153 Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio <konrad.dybcio@linaro.org> +Date: Mon, 27 Nov 2023 12:23:28 +0100 +Subject: [PATCH 2/2] arm64: dts: qcom: qrb4210-rb2: Enable bluetooth + +Enable the QCA bluetooth on RB2. It identifies like the following: + +Bluetooth: hci0: QCA Product ID :0x0000000a +Bluetooth: hci0: QCA SOC Version :0x40020150 +Bluetooth: hci0: QCA ROM Version :0x00000201 +Bluetooth: hci0: QCA Patch Version:0x00000001 +Bluetooth: hci0: QCA controller version 0x01500201 + +Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> +Link: https://lore.kernel.org/r/20231120-topic-rb2_bt-v2-2-4bbf266258ef@linaro.org +Signed-off-by: Bjorn Andersson <andersson@kernel.org> +Upstream-Status: Backport [https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git cab60b166575dd6db4c85487e87a9b677e04c153] +--- + arch/arm64/boot/dts/qcom/qrb4210-rb2.dts | 87 +++++++++++++++++++++++- + 1 file changed, 86 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts +index 9738c0dacd58..33c312ae842e 100644 +--- a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts ++++ b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts +@@ -15,6 +15,7 @@ / { + + aliases { + serial0 = &uart4; ++ serial1 = &uart3; + }; + + chosen { +@@ -352,7 +353,8 @@ vreg_l8a_0p664: l8 { + + vreg_l9a_1p8: l9 { + regulator-min-microvolt = <1800000>; +- regulator-max-microvolt = <2000000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-allow-set-load; + }; + + vreg_l10a_1p8: l10 { +@@ -389,11 +391,13 @@ vreg_l15a_3p128: l15 { + vreg_l16a_1p3: l16 { + regulator-min-microvolt = <1704000>; + regulator-max-microvolt = <1904000>; ++ regulator-allow-set-load; + }; + + vreg_l17a_1p3: l17 { + regulator-min-microvolt = <1152000>; + regulator-max-microvolt = <1384000>; ++ regulator-allow-set-load; + }; + + vreg_l18a_1p232: l18 { +@@ -426,6 +430,7 @@ vreg_l22a_2p96: l22 { + vreg_l23a_3p3: l23 { + regulator-min-microvolt = <3200000>; + regulator-max-microvolt = <3400000>; ++ regulator-allow-set-load; + }; + + vreg_l24a_2p96: l24 { +@@ -487,6 +492,66 @@ &tlmm { + <56 3>, <61 2>, <64 1>, + <68 1>, <72 8>, <96 1>; + ++ uart3_default: uart3-default-state { ++ cts-pins { ++ pins = "gpio8"; ++ function = "qup3"; ++ drive-strength = <2>; ++ bias-bus-hold; ++ }; ++ ++ rts-pins { ++ pins = "gpio9"; ++ function = "qup3"; ++ drive-strength = <2>; ++ bias-disable; ++ }; ++ ++ tx-pins { ++ pins = "gpio10"; ++ function = "qup3"; ++ drive-strength = <2>; ++ bias-disable; ++ }; ++ ++ rx-pins { ++ pins = "gpio11"; ++ function = "qup3"; ++ drive-strength = <2>; ++ bias-pull-up; ++ }; ++ }; ++ ++ uart3_sleep: uart3-sleep-state { ++ cts-pins { ++ pins = "gpio8"; ++ function = "gpio"; ++ drive-strength = <2>; ++ bias-bus-hold; ++ }; ++ ++ rts-pins { ++ pins = "gpio9"; ++ function = "gpio"; ++ drive-strength = <2>; ++ bias-pull-down; ++ }; ++ ++ tx-pins { ++ pins = "gpio10"; ++ function = "gpio"; ++ drive-strength = <2>; ++ bias-pull-up; ++ }; ++ ++ rx-pins { ++ pins = "gpio11"; ++ function = "gpio"; ++ drive-strength = <2>; ++ bias-pull-up; ++ }; ++ }; ++ + lt9611_rst_pin: lt9611-rst-state { + pins = "gpio41"; + function = "gpio"; +@@ -508,6 +573,26 @@ sdc2_card_det_n: sd-card-det-n-state { + }; + }; + ++&uart3 { ++ interrupts-extended = <&intc GIC_SPI 330 IRQ_TYPE_LEVEL_HIGH>, ++ <&tlmm 11 IRQ_TYPE_LEVEL_HIGH>; ++ pinctrl-0 = <&uart3_default>; ++ pinctrl-1 = <&uart3_sleep>; ++ pinctrl-names = "default", "sleep"; ++ status = "okay"; ++ ++ bluetooth { ++ compatible = "qcom,wcn3988-bt"; ++ ++ vddio-supply = <&vreg_l9a_1p8>; ++ vddxo-supply = <&vreg_l16a_1p3>; ++ vddrf-supply = <&vreg_l17a_1p3>; ++ vddch0-supply = <&vreg_l23a_3p3>; ++ enable-gpios = <&tlmm 87 GPIO_ACTIVE_HIGH>; ++ max-speed = <3200000>; ++ }; ++}; ++ + &uart4 { + status = "okay"; + }; +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qrb4210-dts/usb/0002-arm64-dts-qcom-qrb4210-rb2-Select-USB3-host-mode-by-.patch b/recipes-kernel/linux/linux-yocto/qrb4210-dts/usb/0002-arm64-dts-qcom-qrb4210-rb2-Select-USB3-host-mode-by-.patch new file mode 100644 index 0000000..15f9507 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb4210-dts/usb/0002-arm64-dts-qcom-qrb4210-rb2-Select-USB3-host-mode-by-.patch @@ -0,0 +1,30 @@ +From 89293aa2737299d021d42fef649bdcd191953a0b Mon Sep 17 00:00:00 2001 +From: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org> +Date: Tue, 21 Nov 2023 13:22:49 +0200 +Subject: [PATCH 2/3] arm64: dts: qcom: qrb4210-rb2: Select USB3 host mode by + default + +The USB3 controller mode is selected by on-board DIP switches, and +by default it is set to the host mode, specify the selection. + +Signed-off-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org> +Upstream-Status: Pending +--- + arch/arm64/boot/dts/qcom/qrb4210-rb2.dts | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts +index 7c19f874fa71..97344508c94f 100644 +--- a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts ++++ b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts +@@ -609,6 +609,7 @@ &usb { + + &usb_dwc3 { + maximum-speed = "super-speed"; ++ dr_mode = "host"; + }; + + &usb_hsphy { +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/qrb4210-dts/usb/0003-arm64-dts-qcom-sm6115-Enable-USB3-SS-phy.patch b/recipes-kernel/linux/linux-yocto/qrb4210-dts/usb/0003-arm64-dts-qcom-sm6115-Enable-USB3-SS-phy.patch new file mode 100644 index 0000000..fd344bc --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/qrb4210-dts/usb/0003-arm64-dts-qcom-sm6115-Enable-USB3-SS-phy.patch @@ -0,0 +1,53 @@ +From 3d1bd03aa758d8766f3d7e3cae8aa24d9fe0bf09 Mon Sep 17 00:00:00 2001 +From: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org> +Date: Tue, 21 Nov 2023 13:20:18 +0200 +Subject: [PATCH 3/3] arm64: dts: qcom: sm6115: Enable USB3 SS phy + +There is no reason to limit USB3 controller to USB2 functionality, +moreover it fixes a contradiction with the selected super-speed +mode on RB2 board. Additionally specify the OTG function in the SoC +specific description. + +Signed-off-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org> +Upstream-Status: Pending +--- + arch/arm64/boot/dts/qcom/qrb4210-rb2.dts | 1 - + arch/arm64/boot/dts/qcom/sm6115.dtsi | 3 ++- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts +index 97344508c94f..549f36276269 100644 +--- a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts ++++ b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts +@@ -608,7 +608,6 @@ &usb { + }; + + &usb_dwc3 { +- maximum-speed = "super-speed"; + dr_mode = "host"; + }; + +diff --git a/arch/arm64/boot/dts/qcom/sm6115.dtsi b/arch/arm64/boot/dts/qcom/sm6115.dtsi +index ca49e8c7f6e6..3680dc203263 100644 +--- a/arch/arm64/boot/dts/qcom/sm6115.dtsi ++++ b/arch/arm64/boot/dts/qcom/sm6115.dtsi +@@ -1607,7 +1607,6 @@ &bimc SLAVE_EBI_CH0 RPM_ALWAYS_TAG>, + interconnect-names = "usb-ddr", + "apps-usb"; + +- qcom,select-utmi-as-pipe-clk; + status = "disabled"; + + usb_dwc3: usb@4e00000 { +@@ -1622,6 +1621,8 @@ usb_dwc3: usb@4e00000 { + snps,has-lpm-erratum; + snps,hird-threshold = /bits/ 8 <0x10>; + snps,usb3_lpm_capable; ++ maximum-speed = "super-speed"; ++ dr_mode = "otg"; + }; + }; + +-- +2.39.2 + diff --git a/recipes-kernel/linux/linux-yocto/workarounds/0001-PENDING-arm64-dts-qcm6490-Remove-voltage-voting-for-.patch b/recipes-kernel/linux/linux-yocto/workarounds/0001-PENDING-arm64-dts-qcm6490-Remove-voltage-voting-for-.patch new file mode 100644 index 0000000..7338353 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/workarounds/0001-PENDING-arm64-dts-qcm6490-Remove-voltage-voting-for-.patch @@ -0,0 +1,54 @@ +From 5d52be9a7c56e416fe98744f025e8b4aa92fd849 Mon Sep 17 00:00:00 2001 +From: Umang Chheda <quic_uchheda@quicinc.com> +Date: Wed, 11 Oct 2023 20:57:16 +0530 +Subject: [PATCH 1/2] PENDING: arm64: dts: qcm6490: remove voltage voting for + USB rails for idp + +USB driver does not vote for voltage on hsphy and ssphy +rails. Due to which the initial voltage set by bootloader +is overridden by regulator framework with min voltage specified +on regulator registration. + +Fix this temporarily by removing voltage voting support, which +will prevent regulator framework overriding the voltage set by +bootloader. + +This commit will be reverted once voltage voting support is added +in USB driver. + +Signed-off-by: Umang Chheda <quic_uchheda@quicinc.com> +Signed-off-by: Salendarsingh Gaud <quic_sgaud@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Pending +--- + arch/arm64/boot/dts/qcom/qcm6490-idp.dts | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +index 14c73f55ea52..89e653c93ae8 100644 +--- a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts ++++ b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +@@ -519,6 +519,20 @@ &vreg_l9b_1p2 { + regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM RPMH_REGULATOR_MODE_HPM>; + }; + ++&vreg_l1b_0p912 { ++ /delete-property/regulator-min-microvolt; ++ /delete-property/regulator-max-microvolt; ++ regulator-allow-set-load; ++ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM RPMH_REGULATOR_MODE_HPM>; ++}; ++ ++&vreg_l10c_0p88 { ++ /delete-property/regulator-min-microvolt; ++ /delete-property/regulator-max-microvolt; ++ regulator-allow-set-load; ++ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM RPMH_REGULATOR_MODE_HPM>; ++}; ++ + &wifi { + memory-region = <&wlan_fw_mem>; + }; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/workarounds/0001-PENDING-arm64-dts-qcom-Remove-voltage-vote-support-f.patch b/recipes-kernel/linux/linux-yocto/workarounds/0001-PENDING-arm64-dts-qcom-Remove-voltage-vote-support-f.patch new file mode 100644 index 0000000..a2359f6 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/workarounds/0001-PENDING-arm64-dts-qcom-Remove-voltage-vote-support-f.patch @@ -0,0 +1,49 @@ +From 328f42bd030f43574f516906fa0f25fcc5f19c30 Mon Sep 17 00:00:00 2001 +From: Umang Chheda <quic_uchheda@quicinc.com> +Date: Wed, 11 Oct 2023 20:32:47 +0530 +Subject: [PATCH 1/2] PENDING: arm64: dts: qcom: Remove voltage vote support + for UFS for IDP + +UFS rails have different voltage requirement for UFS2.x v/s UFS3.x. +Bootloader sets the proper voltage based on UFS type. There can be +case where the voltage set by bootloader is overridden by HLOS client. + +To prevent above issue, Add change to remove voltage voting support +for UFS rails. + +Signed-off-by: Umang Chheda <quic_uchheda@quicinc.com> +Signed-off-by: Salendarsingh Gaud <quic_sgaud@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Pending +--- + arch/arm64/boot/dts/qcom/qcm6490-idp.dts | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +index 7f682093e954..5b96b77db0c2 100644 +--- a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts ++++ b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +@@ -505,6 +505,20 @@ &usb_1_qmpphy { + status = "okay"; + }; + ++&vreg_l7b_2p952 { ++ /delete-property/regulator-min-microvolt; ++ /delete-property/regulator-max-microvolt; ++ regulator-allow-set-load; ++ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM RPMH_REGULATOR_MODE_HPM>; ++}; ++ ++&vreg_l9b_1p2 { ++ /delete-property/regulator-min-microvolt; ++ /delete-property/regulator-max-microvolt; ++ regulator-allow-set-load; ++ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM RPMH_REGULATOR_MODE_HPM>; ++}; ++ + &wifi { + memory-region = <&wlan_fw_mem>; + }; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/workarounds/0001-QCLINUX-arm64-dts-qcom-qcm6490-disable-sdhc1-for-ufs.patch b/recipes-kernel/linux/linux-yocto/workarounds/0001-QCLINUX-arm64-dts-qcom-qcm6490-disable-sdhc1-for-ufs.patch new file mode 100644 index 0000000..feb48b5 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/workarounds/0001-QCLINUX-arm64-dts-qcom-qcm6490-disable-sdhc1-for-ufs.patch @@ -0,0 +1,34 @@ +From d968bbe73d04fc76db30bdefc9b00fb4128d6b4e Mon Sep 17 00:00:00 2001 +From: Manish Pandey <quic_mapa@quicinc.com> +Date: Fri, 13 Oct 2023 19:38:59 +0530 +Subject: [PATCH] QCLINUX: arm64: dts: qcom: qcm6490: disable sdhc1 for ufs + target + +Disable sdhc1 for QCM6490 for ufs boot target to avoid probe +for sdhc1 as vreg_l7b_2p9 is shared regulator for both ufs vcc +and emmc vcc. Currently this is causing probe failure for ufs. + +Signed-off-by: Manish Pandey <quic_mapa@quicinc.com> +Signed-off-by: Salendarsingh Gaud <quic_sgaud@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Pending +--- + arch/arm64/boot/dts/qcom/qcm6490-idp.dts | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +index 424cd9c2b092..7f682093e954 100644 +--- a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts ++++ b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts +@@ -450,7 +450,7 @@ &sdhc_1 { + vmmc-supply = <&vreg_l7b_2p952>; + vqmmc-supply = <&vreg_l19b_1p8>; + +- status = "okay"; ++ status = "disabled"; + }; + + &tlmm { +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/workarounds/0002-PENDING-arm64-dts-qcom-Remove-voltage-vote-support-f.patch b/recipes-kernel/linux/linux-yocto/workarounds/0002-PENDING-arm64-dts-qcom-Remove-voltage-vote-support-f.patch new file mode 100644 index 0000000..9b569b3 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/workarounds/0002-PENDING-arm64-dts-qcom-Remove-voltage-vote-support-f.patch @@ -0,0 +1,48 @@ +From c0027585783c96a1ba37e8ea604af4c7c73e8154 Mon Sep 17 00:00:00 2001 +From: Umang Chheda <quic_uchheda@quicinc.com> +Date: Wed, 18 Oct 2023 18:12:00 +0530 +Subject: [PATCH 2/2] PENDING: arm64: dts: qcom: Remove voltage vote support + for UFS for RB3 + +UFS rails have different voltage requirement for UFS2.x v/s UFS3.x. +Bootloader sets the proper voltage based on UFS type. There can be +case where the voltage set by bootloader is overridden by HLOS client. + +To prevent above issue, Add change to remove voltage voting support +for UFS rails for QC6490 RB3 platform. + +Signed-off-by: Umang Chheda <quic_uchheda@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Pending +--- + arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +index 6dbeb182d014..f13ab20906f8 100644 +--- a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts ++++ b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +@@ -488,6 +488,20 @@ &usb_1_qmpphy { + status = "okay"; + }; + ++&vreg_l7b_2p952 { ++ /delete-property/regulator-min-microvolt; ++ /delete-property/regulator-max-microvolt; ++ regulator-allow-set-load; ++ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM RPMH_REGULATOR_MODE_HPM>; ++}; ++ ++&vreg_l9b_1p2 { ++ /delete-property/regulator-min-microvolt; ++ /delete-property/regulator-max-microvolt; ++ regulator-allow-set-load; ++ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM RPMH_REGULATOR_MODE_HPM>; ++}; ++ + &wifi { + memory-region = <&wlan_fw_mem>; + }; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto/workarounds/0002-PENDING-arm64-dts-qcs6490-rb3-Remove-voltage-voting-.patch b/recipes-kernel/linux/linux-yocto/workarounds/0002-PENDING-arm64-dts-qcs6490-rb3-Remove-voltage-voting-.patch new file mode 100644 index 0000000..9c0ddcd --- /dev/null +++ b/recipes-kernel/linux/linux-yocto/workarounds/0002-PENDING-arm64-dts-qcs6490-rb3-Remove-voltage-voting-.patch @@ -0,0 +1,60 @@ +From b9b8286e4a3d72353ee90181f10507e2dfb1fd2b Mon Sep 17 00:00:00 2001 +From: Umang Chheda <quic_uchheda@quicinc.com> +Date: Wed, 18 Oct 2023 18:14:15 +0530 +Subject: [PATCH 2/2] PENDING: arm64: dts: qcs6490-rb3: Remove voltage voting + for USB rails + +USB driver does not vote for voltage on hsphy and ssphy +rails. Due to which the initial voltage set by bootloader +is overridden by regulator framework with min voltage specified +on regulator registration. + +Fix this temporarily by removing voltage voting support, which +will prevent regulator framework overriding the voltage set by +bootloader for QCS6490 RB3 Platform. + +This commit will be reverted once voltage voting support is added +in USB driver. + +Signed-off-by: Umang Chheda <quic_uchheda@quicinc.com> +Signed-off-by: Atul Dhudase <quic_adhudase@quicinc.com> +Upstream-Status: Pending +--- + arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +index 2b30e8900991..1e20395d07ae 100644 +--- a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts ++++ b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +@@ -488,6 +488,13 @@ &usb_1_qmpphy { + status = "okay"; + }; + ++&vreg_l1b_0p912 { ++ /delete-property/regulator-min-microvolt; ++ /delete-property/regulator-max-microvolt; ++ regulator-allow-set-load; ++ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM RPMH_REGULATOR_MODE_HPM>; ++}; ++ + &vreg_l7b_2p952 { + /delete-property/regulator-min-microvolt; + /delete-property/regulator-max-microvolt; +@@ -502,6 +509,13 @@ &vreg_l9b_1p2 { + regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM RPMH_REGULATOR_MODE_HPM>; + }; + ++&vreg_l10c_0p88 { ++ /delete-property/regulator-min-microvolt; ++ /delete-property/regulator-max-microvolt; ++ regulator-allow-set-load; ++ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM RPMH_REGULATOR_MODE_HPM>; ++}; ++ + &wifi { + memory-region = <&wlan_fw_mem>; + }; +-- +2.25.1 + diff --git a/recipes-kernel/linux/linux-yocto_%.bbappend b/recipes-kernel/linux/linux-yocto_%.bbappend new file mode 100644 index 0000000..8b4dc40 --- /dev/null +++ b/recipes-kernel/linux/linux-yocto_%.bbappend @@ -0,0 +1,14 @@ +# do not override KBRANCH and SRCREV_machine, use default ones. +COMPATIBLE_MACHINE:qcom = "qcom-armv8a|qcom-armv7a" + +FILESEXTRAPATHS:prepend:qcom := "${THISDIR}/${PN}:" + +# include all Qualcomm-specific files +SRC_URI:append:qcom = " \ + file://qcom.scc \ +" + +# For boot.img +QCOM_BOOTIMG = "" +QCOM_BOOTIMG:qcom = "linux-qcom-bootimg" +inherit ${QCOM_BOOTIMG} diff --git a/recipes-kernel/linux/linux-yocto_6.6.bbappend b/recipes-kernel/linux/linux-yocto_6.6.bbappend new file mode 100644 index 0000000..4306cbd --- /dev/null +++ b/recipes-kernel/linux/linux-yocto_6.6.bbappend @@ -0,0 +1,77 @@ + +SRC_URI:append:qcom = " \ + file://0001-arm64-dts-qcom-qcm2290-temporarily-disable-cluster-i.patch \ + file://0001-ASoC-codecs-wsa881x-set-clk_stop_mode1-flag.patch \ + file://qca6390-driver/0001-dt-bindings-mfd-qcom-qca639x-add-binding-for-QCA639x.patch \ + file://qca6390-driver/0002-mfd-qca639x-add-support-for-QCA639x-powerup-sequence.patch \ + file://qca6390-driver/0003-mfd-qcom-qca639x-switch-to-platform-config-data.patch \ + file://qca6390-driver/0004-mfd-qcom-qca639x-change-qca639x-to-use-gpios-rather-.patch \ + file://qca6390-driver/0005-mfd-qcom-qca639x-Add-support-for-WCN6855.patch \ + file://qca6390-dts/0001-arm64-dts-qcom-qrb5165-rb5-add-qca639x-power-domain.patch \ + file://qca6390-dts/0002-arm64-dts-qcom-Add-Bluetooth-support-on-RB5.patch \ + file://qca6390-dts/0003-arm64-dtb-qcom-qrb5165-rb5-add-power-domain-to-pcie0.patch \ + file://generic-drivers/mpm/0001-dt-bindings-interrupt-controller-mpm-Pass-MSG-RAM-sl.patch \ + file://generic-drivers/mpm/0002-irqchip-irq-qcom-mpm-Support-passing-a-slice-of-SRAM.patch \ + file://generic-drivers/mdss-icc/0002_dt_bindings_display_msm_add_reg_bus_and_rotator_interconnects.patch \ + file://generic-drivers/mdss-icc/0001_drm_msm_mdss_switch_mdss_to_use_devm_of_icc_get.patch \ + file://generic-drivers/mdss-icc/0002_drm_msm_mdss_rename_path_references_to_mdp_path.patch \ + file://generic-drivers/mdss-icc/0003_drm_msm_mdss_inline_msm_mdss_icc_request_bw.patch \ + file://generic-drivers/mdss-icc/0004_drm_msm_mdss_handle_the_reg_bus_icc_path.patch \ + file://generic-drivers/icc/0001-interconnect-qcom-icc-rpm-Add-AB-IB-calculations-coe.patch \ + file://generic-drivers/icc/0002-interconnect-qcom-icc-rpm-Separate-out-clock-rate-ca.patch \ + file://generic-drivers/icc/0003-interconnect-qcom-icc-rpm-Let-nodes-drive-their-own-.patch \ + file://generic-drivers/icc/0004-interconnect-qcom-icc-rpm-Check-for-node-specific-ra.patch \ + file://generic-drivers/icc/0005-interconnect-qcom-qcm2290-Hook-up-MAS_APPS_PROC-s-bu.patch \ + file://generic-drivers/icc/0006-interconnect-qcom-qcm2290-Set-AB-coefficients.patch \ + file://generic-drivers/icc/0007-interconnect-qcom-qcm2290-Update-EBI-channel-configu.patch \ + file://generic-drivers/icc/0008-interconnect-qcom-sdm660-Set-AB-IB-coefficients.patch \ + file://generic-drivers/icc/0009-interconnect-qcom-msm8996-Set-AB-IB-coefficients.patch \ + file://qrb2210-drivers/0001_dt_bindings_display_msm_qcm2290_mdss_use_the_non_deprecated_dsi_compat.patch \ + file://qrb2210-drivers/0003_dt_bindings_interconnect_qcom_msm8998_bwmon_add_qcm2290_bwmon_instance.patch \ + file://qrb2210-drivers/0004_dt_bindings_firmware_qcom_scm_allow_interconnect_for_everyone.patch \ + file://qrb2210-drivers/0005_iommu_arm_smmu_qcom_add_qcm2290_mdss_compatible.patch \ + file://qrb2210-dts/sans-icc/0003_arm64_dts_qcom_qrb2210_rb1_enable_remote_processors.patch \ + file://qrb2210-dts/sans-icc/0004_arm64_dts_qcom_qrb2210_rb1_add_gpio_leds.patch \ + file://qrb2210-dts/sans-icc/0005_arm64_dts_qcom_qrb2210_rb1_hook_up_usb3.patch \ + file://qrb2210-dts/sans-icc/0001-arm64-dts-qcom-qrb2210-rb1-use-USB-host-mode.patch \ + file://qrb2210-dts/features/0006_arm64_dts_qcom_sc7180_add_the_missing_mdss_icc_path.patch \ + file://qrb2210-dts/features/0007_arm64_dts_qcom_sc7280_add_the_missing_mdss_icc_path.patch \ + file://qrb2210-dts/features/0008_arm64_dts_qcom_qcm2290_add_display_nodes.patch \ + file://qrb2210-dts/features/0009_arm64_dts_qcom_qcm2290_hook_up_interconnects.patch \ + file://qrb2210-dts/features/0010_arm64_dts_qcom_qrb2210_rb1_set_up_hdmi.patch \ + file://qrb2210-dts/features/0011_arm64_dts_qcom_qrb2210_rb1_enable_can_bus_controller.patch \ + file://qrb2210-dts/features/0012_arm64_dts_qcom_qrb2210_rb1_add_wifi_variant_property.patch \ + file://qrb2210-dts/0001-arm64-dts-qcom-qcm2290-Hook-up-MPM.patch \ + file://qrb4210-drivers/icc/0001-dt-bindings-interconnect-Add-Qualcomm-SM6115-NoC.patch \ + file://qrb4210-drivers/icc/0002-interconnect-qcom-Add-SM6115-interconnect-provider-d.patch \ + file://qrb4210-drivers/icc/0001-iommu-arm-smmu-qcom-Add-SM6115-MDSS-compatible.patch \ + file://qrb4210-dts/0001-arm64-dts-qcom-sm6115-Add-UART3.patch \ + file://qrb4210-dts/0002-arm64-dts-qcom-qrb4210-rb2-Enable-bluetooth.patch \ + file://qrb4210-dts/0001-arm64-dts-qcom-sm6115-Hook-up-interconnects.patch \ + file://qrb4210-dts/0001-arm64-dts-qcom-qrb4210-rb2-Enable-MPSS-and-Wi-Fi.patch \ + file://qrb4210-dts/usb/0002-arm64-dts-qcom-qrb4210-rb2-Select-USB3-host-mode-by-.patch \ + file://qrb4210-dts/usb/0003-arm64-dts-qcom-sm6115-Enable-USB3-SS-phy.patch \ + file://generic-drivers/0001-FROMLIST-dma-heap-Add-proper-kref-handling-on-dma-bu.patch \ + file://generic-drivers/0002-FROMLIST-dma-heap-Provide-accessors-so-that-in-kerne.patch \ + file://qcm6490-drivers/0001-FROMGIT-phy-qcom-qmp-ufs-Add-Phy-Configuration-suppo.patch \ + file://qcm6490-dtsi/0001-FROMLIST-arm64-dts-qcom-sc7280-Add-UFS-nodes-for-sc7.patch \ + file://qcm6490-dtsi/0001-PENDING-arm64-dts-qcom-sc7280-Add-interconnect-paths.patch \ + file://qcm6490-dtsi/0001-UPSTREAM-arm64-dts-qcom-sc7280-Move-video-firmware-t.patch \ + file://qcm6490-dtsi/0001-UPSTREAM-arm64-dts-qcom-Use-QCOM_SCM_VMID-defines-fo.patch \ + file://qcm6490-board-dts/0001-UPSTREAM-dt-bindings-arm-qcom-Add-QCM6490-Fairphone-.patch \ + file://qcm6490-board-dts/0002-UPSTREAM-dt-bindings-arm-qcom-Add-QCM6490-IDP-and-QC.patch \ + file://qcm6490-board-dts/0003-UPSTREAM-arm64-dts-qcom-Add-base-qcm6490-id.patch \ + file://qcm6490-board-dts/0004-UPSTREAM-arm64-dts-qcom-Add-base-qcs6490-rb3gen2-boa.patch \ + file://qcm6490-board-dts/0001-UPSTREAM-arm64-dts-qcom-qcs6490-rb3gen2-Correct-the-.patch \ + file://qcm6490-board-dts/0002-UPSTREAM-arm64-dts-qcom-qcm6490-idp-Correct-the-volt.patch \ + file://qcm6490-board-dts/0001-FROMLIST-arm64-dts-qcom-qcm6490-idp-Update-protected.patch \ + file://qcm6490-board-dts/0002-UPSTREAM-arm64-dts-qcom-qcs6490-rb3gen2-Declare-GCC-.patch \ + file://qcm6490-board-dts/0003-BACKPORT-FROMLIST-arm64-dts-qcom-qcs6490-rb3gen2-Upd.patch \ + file://qcm6490-board-dts/0001-PENDING-arm64-dts-qcom-qcm6490-Add-UFS-nodes-for-IDP.patch \ + file://qcm6490-board-dts/0002-PENDING-arm64-dts-qcom-Add-UFS-nodes-for-qcs6490-rb3.patch \ + file://workarounds/0001-QCLINUX-arm64-dts-qcom-qcm6490-disable-sdhc1-for-ufs.patch \ + file://workarounds/0001-PENDING-arm64-dts-qcom-Remove-voltage-vote-support-f.patch \ + file://workarounds/0002-PENDING-arm64-dts-qcom-Remove-voltage-vote-support-f.patch \ + file://workarounds/0001-PENDING-arm64-dts-qcm6490-Remove-voltage-voting-for-.patch \ + file://workarounds/0002-PENDING-arm64-dts-qcs6490-rb3-Remove-voltage-voting-.patch \ +" |