Revert "firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module"
PATCH 1/1 Revert "firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module"
From: Thierry Reding <[email protected]>
Commit d0511b5496c0 ("firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module") causes the ARM SMMU driver to be built as a loadable module when using the Aarch64 default configuration. This in turn causes problems because if the loadable module is not shipped in an initial ramdisk, then the deferred probe timeout mechanism will cause all SMMU masters to probe without SMMU support and fall back to just plain DMA ops (not IOMMU-backed).
Once the system has mounted the rootfs, the ARM SMMU driver will then be loaded, but since the ARM SMMU driver faults by default, this causes a slew of SMMU faults for the SMMU masters that have already been set up with plain DMA ops and cause these devices to malfunction.
Revert that commit to unbreak things while we look for an alternative solution.
--- drivers/firmware/Kconfig | 4 ++-- drivers/firmware/Makefile | 3 +-- drivers/firmware/qcom_scm.c | 4 ---- drivers/iommu/Kconfig | 2 -- drivers/net/wireless/ath/ath10k/Kconfig | 1 - 5 files changed, 3 insertions(+), 11 deletions(-)
drivers/firmware/Kconfig +2 -2
@@ -235,8 +235,8 @@ config INTEL_STRATIX10_RSU Say Y here if you want Intel RSU support. config QCOM_SCM - tristate "Qcom SCM driver" - depends on (ARM && HAVE_ARM_SMCCC) || ARM64 + bool + depends on ARM || ARM64 select RESET_CONTROLLER config QCOM_SCM_DOWNLOAD_MODE_DEFAULT
drivers/firmware/Makefile +1 -2
@@ -17,8 +17,7 @@ obj-$(CONFIG_ISCSI_IBFT) += iscsi_ibft.o obj-$(CONFIG_FIRMWARE_MEMMAP) += memmap.o obj-$(CONFIG_RASPBERRYPI_FIRMWARE) += raspberrypi.o obj-$(CONFIG_FW_CFG_SYSFS) += qemu_fw_cfg.o -obj-$(CONFIG_QCOM_SCM) += qcom-scm.o -qcom-scm-objs += qcom_scm.o qcom_scm-smc.o qcom_scm-legacy.o +obj-$(CONFIG_QCOM_SCM) += qcom_scm.o qcom_scm-smc.o qcom_scm-legacy.o obj-$(CONFIG_TI_SCI_PROTOCOL) += ti_sci.o obj-$(CONFIG_TRUSTED_FOUNDATIONS) += trusted_foundations.o obj-$(CONFIG_TURRIS_MOX_RWTM) += turris-mox-rwtm.o
drivers/firmware/qcom_scm.c +0 -4
@@ -1280,7 +1280,6 @@ static const struct of_device_id qcom_scm_dt_match[] = { { .compatible = "qcom,scm" }, {} }; -MODULE_DEVICE_TABLE (of, qcom_scm_dt_match);static struct platform_driver qcom_scm_driver = { .driver = {
@@ -1296,6 +1295,3 @@ static int __init qcom_scm_init(void)return platform_driver_register (&qcom_scm_driver); }subsys_initcall (qcom_scm_init); - -MODULE_DESCRIPTION ("Qualcomm Technologies, Inc. SCM driver" ); -MODULE_LICENSE ("GPL v2" );
drivers/iommu/Kconfig +0 -2
@@ -248,7 +248,6 @@ config SPAPR_TCE_IOMMU config ARM_SMMU tristate "ARM Ltd. System MMU (SMMU) Support" depends on ARM64 || ARM || (COMPILE_TEST && !GENERIC_ATOMIC64) - depends on QCOM_SCM || !QCOM_SCM #if QCOM_SCM=m this can't be =y select IOMMU_API select IOMMU_IO_PGTABLE_LPAE select ARM_DMA_USE_IOMMU if ARM
@@ -376,7 +375,6 @@ config QCOM_IOMMU # Note: iommu drivers cannot (yet?) be built as modules bool "Qualcomm IOMMU Support" depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64) - depends on QCOM_SCM=y select IOMMU_API select IOMMU_IO_PGTABLE_LPAE select ARM_DMA_USE_IOMMU
drivers/net/wireless/ath/ath10k/Kconfig +0 -1
@@ -44,7 +44,6 @@ config ATH10K_SNOC tristate "Qualcomm ath10k SNOC support" depends on ATH10K depends on ARCH_QCOM || COMPILE_TEST - depends on QCOM_SCM || !QCOM_SCM #if QCOM_SCM=m this can't be =y select QCOM_QMI_HELPERS help This module adds support for integrated WCN3990 chip connected
Signature · 6 lines
2.29.2 _______________________________________________ iommu mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/iommu
Quoted 20 lines · Thierry Reding
From: Thierry Reding <[email protected]>
Commit
d0511b5496c0("firmware:QCOM_SCM: Allowqcom_scmdriver to be loadable as a permenent module") causes the ARM SMMU driver to be built as a loadable module when using the Aarch64 default configuration. This in turn causes problems because if the loadable module is not shipped in an initial ramdisk, then the deferred probe timeout mechanism will cause all SMMU masters to probe without SMMU support and fall back to just plain DMA ops (not IOMMU-backed).Once the system has mounted the rootfs, the ARM SMMU driver will then be loaded, but since the ARM SMMU driver faults by default, this causes a slew of SMMU faults for the SMMU masters that have already been set up with plain DMA ops and cause these devices to malfunction.
Revert that commit to unbreak things while we look for an alternative solution.
Reported-by Jon Hunter <[email protected]>Signed-off-by Thierry Reding <[email protected]>
Quoted 7 lines
--- drivers/firmware/Kconfig | 4 ++-- drivers/firmware/Makefile | 3 +-- drivers/firmware/qcom_scm.c | 4 ---- drivers/iommu/Kconfig | 2 -- drivers/net/wireless/ath/ath10k/Kconfig | 1 - 5 files changed, 3 insertions(+), 11 deletions(-)
John previously agreed to this here:
https://lore.kernel.org/r/CALAqxLVDm923WRSB+DVxFacmEtmEPS7Qeq+rW_jbCDMNMWw9PQ@mail.gmail.com
so might be worth putting in a Link: tag when it gets applied.
Will
Quoted 16 lines · Thierry Reding
From: Thierry Reding <[email protected]>
Commit
d0511b5496c0("firmware:QCOM_SCM: Allowqcom_scmdriver to be loadable as a permenent module") causes the ARM SMMU driver to be built as a loadable module when using the Aarch64 default configuration. This in turn causes problems because if the loadable module is not shipped in an initial ramdisk, then the deferred probe timeout mechanism will cause all SMMU masters to probe without SMMU support and fall back to just plain DMA ops (not IOMMU-backed).Once the system has mounted the rootfs, the ARM SMMU driver will then be loaded, but since the ARM SMMU driver faults by default, this causes a slew of SMMU faults for the SMMU masters that have already been set up with plain DMA ops and cause these devices to malfunction.
Quoted 5 lines
Revert that commit to unbreak things while we look for an alternative solution.
Reported-by Jon Hunter <[email protected]>Signed-off-by Thierry Reding <[email protected]>
Thanks for sending this Thierry, and sorry again for the troubles.
thanks
-john
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu
Quoted 11 lines · Thierry Reding
From: Thierry Reding <[email protected]>
Commit
d0511b5496c0("firmware:QCOM_SCM: Allowqcom_scmdriver to be loadable as a permenent module") causes the ARM SMMU driver to be built as a loadable module when using the Aarch64 default configuration. This in turn causes problems because if the loadable module is not shipped in an initial ramdisk, then the deferred probe timeout mechanism will cause all SMMU masters to probe without SMMU support and fall back to just plain DMA ops (not IOMMU-backed).
Quoted 5 lines
Once the system has mounted the rootfs, the ARM SMMU driver will then be loaded, but since the ARM SMMU driver faults by default, this causes a slew of SMMU faults for the SMMU masters that have already been set up with plain DMA ops and cause these devices to malfunction.
FWIW I had the same issues on the Qualcomm platform and merged a patch that turns QCOM_SCM=y in arm64 defconfig earlier today. So this should hide the problem in next linux-next. (And it really should be =y in defconfig regardless of this revert or not).
Quoted 3 lines
Revert that commit to unbreak things while we look for an alternative solution.
I don't fancy the fact that we have a situation where if you're unlucky to have probe deferrals lingering past late initcall things will start to just break and this from a growing number of resource types. But I also don't see any alternatives to fixing the kernel to handle this gracefully.
Regards,
Bjorn
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu