pinctrl: qcom: Kconfig: Rework PINCTRL_MSM to be a depenency rather then a selected config
Subsystems (7)
PATCH v6 1/3 pinctrl: qcom: Kconfig: Rework PINCTRL_MSM to be a depenency rather then a selected config
This patch reworks PINCTRL_MSM to be a visible option, and instead of having the various SoC specific drivers select PINCTRL_MSM, this switches those configs to depend on PINCTRL_MSM.
This is useful, as it will be needed in order to cleanly support having the qcom-scm driver, which pinctrl-msm calls into, configured as a module. Without this change, we would eventually have to add dependency lines to every config that selects PINCTRL_MSM, and that would becomes a maintenance headache.
We also add PINCTRL_MSM to the arm64 defconfig to avoid surprises as otherwise PINCTRL_MSM/IPQ* options previously enabled, will be off.
---
v6:
* Split PINCTRL_MSM dependency bit out into its own patch
--- arch/arm64/configs/defconfig | 1 + drivers/pinctrl/qcom/Kconfig | 48 ++++++++++++++++++------------------ 2 files changed, 25 insertions(+), 24 deletions(-)
arch/arm64/configs/defconfig +1 -0
@@ -483,6 +483,7 @@ CONFIG_PINCTRL_IMX8MP=y CONFIG_PINCTRL_IMX8MQ=y CONFIG_PINCTRL_IMX8QXP=y CONFIG_PINCTRL_IMX8DXL=y +CONFIG_PINCTRL_MSM=y CONFIG_PINCTRL_IPQ8074=y CONFIG_PINCTRL_IPQ6018=y CONFIG_PINCTRL_MSM8916=y
drivers/pinctrl/qcom/Kconfig +24 -24
192 lines not on this page · raw message
Signature · 1 line
2.17.1
PATCH v6 2/3 pinctrl: qcom: Allow pinctrl-msm code to be loadable as a module
Tweaks to allow pinctrl-msm code to be loadable as a module.
This is needed in order to support having the qcom-scm driver, which pinctrl-msm calls into, configured as a module.
This requires that we tweak Kconfigs selecting PINCTRL_MSM to also depend on QCOM_SCM || QCOM_SCM=n so that we match the module setting of QCOM_SCM.
---
v2:
* Module description and whitespace fixes suggested by Bjorn
* Added QCOM_SCM || QCOM_SCM=n bits on Kconfigs selecting PINCTRL_MSM. Reported by both Todd and Bjorn.
v3:
* Make sure the QCOM_SCM || QCOM_SCM=n trick is commented v4:
* Rework "select PINCTRL_MSM" to "depends on PINCTRL_MSM" to consolidate the QCOM_SCM dependency.
v5:
* Add PINCTRL_MSM to arm64 defconfig
v6:
* Split PINCTRL_MSM dependency bit out into its own patch
--- drivers/pinctrl/qcom/Kconfig | 3 ++- drivers/pinctrl/qcom/pinctrl-msm.c | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-)
drivers/pinctrl/qcom/Kconfig +2 -1
@@ -2,7 +2,8 @@ if (ARCH_QCOM || COMPILE_TEST) config PINCTRL_MSM - bool "Qualcomm core pin controller driver" + tristate "Qualcomm core pin controller driver" + depends on QCOM_SCM || !QCOM_SCM #if QCOM_SCM=m this can't be =y select PINMUX select PINCONF select GENERIC_PINCONF
drivers/pinctrl/qcom/pinctrl-msm.c +2 -0
@@ -1443,3 +1443,5 @@ int msm_pinctrl_remove(struct platform_device *pdev) }EXPORT_SYMBOL (msm_pinctrl_remove); +MODULE_DESCRIPTION ("Qualcomm Technologies, Inc. TLMM driver" ); +MODULE_LICENSE ("GPL v2" );
Signature · 6 lines
2.17.1 _______________________________________________ iommu mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/iommu
Re: [PATCH v6 2/3] pinctrl: qcom: Allow pinctrl-msm code to be loadable as a module
Quoted 22 lines · John Stultz
Tweaks to allow pinctrl-msm code to be loadable as a module.
This is needed in order to support having the qcom-scm driver, which pinctrl-msm calls into, configured as a module.
This requires that we tweak Kconfigs selecting
PINCTRL_MSMto also depend onQCOM_SCM|| QCOM_SCM=n so that we match the module setting ofQCOM_SCM.Cc Catalin Marinas <[email protected]>Cc Will Deacon <[email protected]>Cc Andy Gross <[email protected]>Cc Bjorn Andersson <[email protected]>Cc Joerg Roedel <[email protected]>Cc Thomas Gleixner <[email protected]>Cc Jason Cooper <[email protected]>Cc Marc Zyngier <[email protected]>Cc Linus Walleij <[email protected]>Cc Vinod Koul <[email protected]>Cc Kalle Valo <[email protected]>Cc Maulik Shah <[email protected]>Cc Lina Iyer <[email protected]>
Quoted 8 lines
Cc Saravana Kannan <[email protected]>Cc Todd Kjos <[email protected]>Cc Greg Kroah-Hartman <[email protected]>Reviewed-by Bjorn Andersson <[email protected]>Signed-off-by John Stultz <[email protected]>
Patch applied!
Yours,
Linus Walleij
PATCH v6 3/3 firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
In reply to John StultzAllow the qcom_scm driver to be loadable as a permenent module.
This still uses the "depends on QCOM_SCM || !QCOM_SCM" bit to ensure that drivers that call into the qcom_scm driver are also built as modules. While not ideal in some cases its the only safe way I can find to avoid build errors without having those drivers select QCOM_SCM and have to force it on (as QCOM_SCM=n can be valid for those drivers).
---
v3:
* Fix __arm_smccc_smc build issue reported by kernel test robot <[email protected]>
v4:
* Add "depends on QCOM_SCM || !QCOM_SCM" bit to ath10k config that requires it.
v5:
* Fix QCOM_QCM typo in Kconfig, it should be QCOM_SCM
--- 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, 11 insertions(+), 3 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 - bool - depends on ARM || ARM64 + tristate "Qcom SCM driver" + depends on (ARM && HAVE_ARM_SMCCC) || ARM64 select RESET_CONTROLLER config QCOM_SCM_DOWNLOAD_MODE_DEFAULT
drivers/firmware/Makefile +2 -1
@@ -17,7 +17,8 @@ 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-smc.o qcom_scm-legacy.o +obj-$(CONFIG_QCOM_SCM) += qcom-scm.o +qcom-scm-objs += 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 +4 -0
@@ -1280,6 +1280,7 @@ 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 = {
@@ -1295,3 +1296,6 @@ 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 +2 -0
@@ -248,6 +248,7 @@ 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
@@ -375,6 +376,7 @@ 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 +1 -0
@@ -44,6 +44,7 @@ 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 · 1 line
2.17.1
Re: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
Quoted 24 lines · John Stultz
Allow the
qcom_scmdriver to be loadable as a permenent module.This still uses the "depends on
QCOM_SCM|| !QCOM_SCM" bit to ensure that drivers that call into theqcom_scmdriver are also built as modules. While not ideal in some cases its the only safe way I can find to avoid build errors without having those drivers selectQCOM_SCMand have to force it on (as QCOM_SCM=n can be valid for those drivers).Cc Catalin Marinas <[email protected]>Cc Will Deacon <[email protected]>Cc Andy Gross <[email protected]>Cc Bjorn Andersson <[email protected]>Cc Joerg Roedel <[email protected]>Cc Thomas Gleixner <[email protected]>Cc Jason Cooper <[email protected]>Cc Marc Zyngier <[email protected]>Cc Linus Walleij <[email protected]>Cc Vinod Koul <[email protected]>Cc Kalle Valo <[email protected]>Cc Maulik Shah <[email protected]>Cc Lina Iyer <[email protected]>Cc Saravana Kannan <[email protected]>Cc Todd Kjos <[email protected]>
Quoted 8 lines
Cc Greg Kroah-Hartman <[email protected]>Acked-by Kalle Valo <[email protected]>Reviewed-by Bjorn Andersson <[email protected]>Signed-off-by John Stultz <[email protected]>
I applied this patch to the pinctrl tree as well, I suppose that was the intention. If someone gets upset I can always pull it out.
Thanks for your perseverance in driving this John.
Yours,
Linus Walleij
Re: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
Quoted 4 lines · Linus Walleij
Quoted 2 lines · John Stultz
Allow the
qcom_scmdriver to be loadable as a permenent module.
...
Quoted 3 lines
I applied this patch to the pinctrl tree as well, I suppose that was the intention. If someone gets upset I can always pull it out.
Will: You ok with this?
thanks
-john
Will Deacon
maintainerRe: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
Quoted 11 lines · John Stultz
Quoted 4 lines · Linus Walleij
Quoted 2 lines · John Stultz
Allow the
qcom_scmdriver to be loadable as a permenent module....
Quoted 3 lines
I applied this patch to the pinctrl tree as well, I suppose that was the intention. If someone gets upset I can always pull it out.
Will: You ok with this?
We didn't come up with something better, so I can live with it. Not sure about the otehr issues that were reported by Robin though -- your RFC for fixing those looked a bit more controversial ;)
Will
Re: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
Quoted 6 lines · Will Deacon
Quoted 5 lines · John Stultz
Quoted 4 lines · Linus Walleij
Quoted 2 lines · John Stultz
Allow the
qcom_scmdriver to be loadable as a permenent module.
Quoted 8 lines
Quoted 6 lines
...
Quoted 3 lines
I applied this patch to the pinctrl tree as well, I suppose that was the intention. If someone gets upset I can always pull it out.
Will: You ok with this?
We didn't come up with something better, so I can live with it.
Ok, thanks!
Quoted 3 lines
Not sure
about the otehr issues that were reported by Robin though -- your RFC for fixing those looked a bit more controversial ;)
Huh, I hadn't heard anything back on that series and was going to resend it. Do let me know if you have more thoughts on that one.
thanks
-john
Re: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
In reply to John StultzQuoted 102 lines · John Stultz
Allow the
qcom_scmdriver to be loadable as a permenent module.This still uses the "depends on
QCOM_SCM|| !QCOM_SCM" bit to ensure that drivers that call into theqcom_scmdriver are also built as modules. While not ideal in some cases its the only safe way I can find to avoid build errors without having those drivers selectQCOM_SCMand have to force it on (as QCOM_SCM=n can be valid for those drivers).Cc Catalin Marinas <[email protected]>Cc Will Deacon <[email protected]>Cc Andy Gross <[email protected]>Cc Bjorn Andersson <[email protected]>Cc Joerg Roedel <[email protected]>Cc Thomas Gleixner <[email protected]>Cc Jason Cooper <[email protected]>Cc Marc Zyngier <[email protected]>Cc Linus Walleij <[email protected]>Cc Vinod Koul <[email protected]>Cc Kalle Valo <[email protected]>Cc Maulik Shah <[email protected]>Cc Lina Iyer <[email protected]>Cc Saravana Kannan <[email protected]>Cc Todd Kjos <[email protected]>Cc Greg Kroah-Hartman <[email protected]>Acked-by Kalle Valo <[email protected]>Reviewed-by Bjorn Andersson <[email protected]>Signed-off-by John Stultz <[email protected]>---
v3:
* Fix__arm_smccc_smcbuild issue reported by kernel test robot <[email protected]>
v4:
* Add "depends onQCOM_SCM|| !QCOM_SCM" bit to ath10k config that requires it.
v5:
* FixQCOM_QCMtypo inKconfig, it should beQCOM_SCM--- 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, 11 insertions(+), 3 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 - bool - depends on ARM || ARM64 + tristate "Qcom SCM driver" + depends on (ARM && HAVE_ARM_SMCCC) || ARM64 select RESET_CONTROLLER config QCOM_SCM_DOWNLOAD_MODE_DEFAULTdrivers/firmware/Makefile +2
-1@@ -17,7 +17,8 @@ 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-smc.o qcom_scm-legacy.o +obj-$(CONFIG_QCOM_SCM) += qcom-scm.o +qcom-scm-objs += 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.odrivers/firmware/qcom_scm.c +4
-0@@ -1280,6 +1280,7 @@ 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 = {@@ -1295,3 +1296,6 @@ 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
-0
drivers/iommu/Kconfig config SPAPR_TCE_IOMMU · line 254
Quoted 7 lines
drivers/iommu/Kconfig +1
-0@@ -248,6 +248,7 @@ 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
This, in conjunction with deferred probe timeout, causes mayhem on Tegra186. The problem, as far as I can tell, is that there are various devices that are hooked up to the ARM SMMU, but if ARM SMMU ends up being built as a loadable module, then those devices will initialize without IOMMU support (because deferred probe will timeout before the ARM SMMU module can be loaded from the root filesystem).
Unfortunately, the ARM SMMU module will eventually end up being loaded once the root filesystem has been mounted (for example via SDHCI or Ethernet, both with using just plain, non-IOMMU-backed DMA API) and then initialize, configuring as "fault by default", which then results from a slew of SMMU faults from all the devices that have previously configured themselves without IOMMU support.
One way to work around this is to just disable all QCOM-related drivers for the build so that ARM SMMU will be built-in again. I'm going to guess that distributions aren't going to be too happy about having to make that kind of choice.
Another way would be for the ARM SMMU module to be included in the initial ramdisk, which /should/ solve this as well, though I haven't actually tested that yet. That's not ideal, because it means that users will have to use an initial ramdisk in order to make this work, and not all of them may want to.
Perhaps a better solution for now would be to make QCOM_SCM always built-in, so that ARM SMMU can also always be built-in? I suspect that this will be a problem not only on Tegra but on any platform that uses an ARM SMMU. I think this is also not directly related to the QCOM_SCM code because this would also happen if ARM SMMU were built as a module for a kernel that doesn't have any QCOM drivers enabled. So in general any configuration that builds ARM SMMU as a module seems like it would currently be broken (if it also keeps the "fault by default" default). Is this something that people have extensively tested? I can't see how that would currently work, since there's no way for an ARM SMMU master to somehow recover and switch to IOMMU-backed DMA API dynamically once the ARM SMMU becomes available.
I guess yet another possibility would be for the ARM SMMU driver to detect whether it was loaded after all of its consumers and switch to "bypass by default" automatically in such a situation. That should allow any driver probed after the ARM SMMU to still take advantage of IOVA translation, but will not impact the devices probed before the ARM SMMU.
Thierry
Will Deacon
maintainerRe: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
Quoted 40 lines · Thierry Reding
Quoted 24 lines · John Stultz
drivers/firmware/qcom_scm.c +4
-0@@ -1280,6 +1280,7 @@ 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 = {@@ -1295,3 +1296,6 @@ 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
-0drivers/iommu/Kconfig config SPAPR_TCE_IOMMU · line 254
Quoted 7 lines
drivers/iommu/Kconfig +1
-0@@ -248,6 +248,7 @@ 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 ARMThis, in conjunction with deferred probe timeout, causes mayhem on Tegra186. The problem, as far as I can tell, is that there are various devices that are hooked up to the ARM SMMU, but if ARM SMMU ends up being built as a loadable module, then those devices will initialize without IOMMU support (because deferred probe will timeout before the ARM SMMU module can be loaded from the root filesystem).
Quoted 6 lines
Unfortunately, the ARM SMMU module will eventually end up being loaded once the root filesystem has been mounted (for example via SDHCI or Ethernet, both with using just plain, non-IOMMU-backed DMA API) and then initialize, configuring as "fault by default", which then results from a slew of SMMU faults from all the devices that have previously configured themselves without IOMMU support.
I wonder if fw_devlink=on would help here?
But either way, I'd be more inclined to revert this change if it's causing problems for !QCOM devices.
Linus -- please can you drop this one (patch 3/3) for now, given that it's causing problems?
Cheers,
Will
Re: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
Quoted 9 lines · Will Deacon
Quoted 7 lines · Thierry Reding
On Fri, Nov 06, 2020 at 04:27:10AM +0000, John Stultz wrote:
Unfortunately, the ARM SMMU module will eventually end up being loaded once the root filesystem has been mounted (for example via SDHCI or Ethernet, both with using just plain, non-IOMMU-backed DMA API) and then initialize, configuring as "fault by default", which then results from a slew of SMMU faults from all the devices that have previously configured themselves without IOMMU support.
Quoted 7 lines
I wonder if fw_devlink=on would help here?
But either way, I'd be more inclined to revert this change if it's causing problems for !QCOM devices.
Linus -- please can you drop this one (patch 3/3) for now, given that it's causing problems?
Agreed. Apologies again for the trouble.
I do feel like the probe timeout to handle optional links is causing a lot of the trouble here. I expect fw_devlink would solve this, but it may be awhile before it can be always enabled. I may see about pushing the default probe timeout value to be a little further out than init (I backed away from my last attempt as I didn't want to cause long (30 second) delays for cases like NFS root, but maybe 2-5 seconds would be enough to make things work better for everyone).
thanks
-john
Re: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
Quoted 20 lines · John Stultz
Quoted 9 lines · Will Deacon
Quoted 7 lines · Thierry Reding
On Fri, Nov 06, 2020 at 04:27:10AM +0000, John Stultz wrote:
Unfortunately, the ARM SMMU module will eventually end up being loaded once the root filesystem has been mounted (for example via SDHCI or Ethernet, both with using just plain, non-IOMMU-backed DMA API) and then initialize, configuring as "fault by default", which then results from a slew of SMMU faults from all the devices that have previously configured themselves without IOMMU support.Quoted 7 lines
I wonder if fw_devlink=on would help here?
But either way, I'd be more inclined to revert this change if it's causing problems for !QCOM devices.
Linus -- please can you drop this one (patch 3/3) for now, given that it's causing problems?
Agreed. Apologies again for the trouble.
Quoted 7 lines
I do feel like the probe timeout to handle optional links is causing a lot of the trouble here. I expect
fw_devlinkwould solve this, but it may be awhile before it can be always enabled. I may see about pushing the default probe timeout value to be a little further out than init (I backed away from my last attempt as I didn't want to cause long (30 second) delays for cases like NFS root, but maybe 2-5 seconds would be enough to make things work better for everyone).
I think there are two problems here: 1) the deferred probe timeout can cause a mismatch between what SMMU masters and the SMMU think is going on and 2) a logistical problem of dealing with the SMMU driver being a loadable module.
The second problem can be dealt with by shipping the module in the initial ramdisk. That's a bit annoying, but perhaps the right thing to do. At least on Tegra we need this because all the devices that carry the root filesystem (Ethernet for NFS and SDHCI/USB/SATA/PCI for disk boot) are SMMU masters and will start to fault once the SMMU driver is loaded.
The first problem is trickier, but if the ARM SMMU driver is built as a module and shipped in the initial ramdisk it should work. Like I said, this is annoying because it makes the development a bit more complicated than just rebuilding a kernel image and flashing it (or boot it straight from TFTP) because now everytime the ARM SMMU module is built the initial ramdisk needs to be updated (and potentially flashed) as well.
Thierry
P.S.: Interestingly this is very similar to the problem that I've been trying to address for display hardware that's left on by the bootloader. Given that, one potential solution would be to somehow retrieve memory allocations done by these devices and create identity mappings in the ARM SMMU address spaces for such devices, much like we plan to do for devices left on by the bootloader (like the display controller for showing a boot splash). I suspect that it's not really worth doing this for devices that are only initialized by the kernel because we have a bit of control over when we enable them, so I'd prefer if we just kept things reasonably simple and made sure the SMMU was either always used by a device from the start or not at all. Dynamically switching between SMMU and no-SMMU seems a bit eccentric.
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu
Will Deacon
maintainerRe: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
Quoted 34 lines · Thierry Reding
Quoted 20 lines · John Stultz
Quoted 9 lines · Will Deacon
Quoted 7 lines · Thierry Reding
On Fri, Nov 06, 2020 at 04:27:10AM +0000, John Stultz wrote:
Unfortunately, the ARM SMMU module will eventually end up being loaded once the root filesystem has been mounted (for example via SDHCI or Ethernet, both with using just plain, non-IOMMU-backed DMA API) and then initialize, configuring as "fault by default", which then results from a slew of SMMU faults from all the devices that have previously configured themselves without IOMMU support.Quoted 7 lines
I wonder if fw_devlink=on would help here?
But either way, I'd be more inclined to revert this change if it's causing problems for !QCOM devices.
Linus -- please can you drop this one (patch 3/3) for now, given that it's causing problems?
Agreed. Apologies again for the trouble.
Quoted 7 lines
I do feel like the probe timeout to handle optional links is causing a lot of the trouble here. I expect
fw_devlinkwould solve this, but it may be awhile before it can be always enabled. I may see about pushing the default probe timeout value to be a little further out than init (I backed away from my last attempt as I didn't want to cause long (30 second) delays for cases like NFS root, but maybe 2-5 seconds would be enough to make things work better for everyone).I think there are two problems here: 1) the deferred probe timeout can cause a mismatch between what SMMU masters and the SMMU think is going on and 2) a logistical problem of dealing with the SMMU driver being a loadable module.
Quoted 6 lines
The second problem can be dealt with by shipping the module in the initial ramdisk. That's a bit annoying, but perhaps the right thing to do. At least on Tegra we need this because all the devices that carry the root filesystem (Ethernet for NFS and SDHCI/USB/SATA/PCI for disk boot) are SMMU masters and will start to fault once the SMMU driver is loaded.
Realistically, if you're building an IOMMU driver as a module then it needs to be part of the initrd and fw_devlink needs to be enabled. Relying on timeouts and the phase of the moon is not going to be reliable.
But back to the original issue, I think we should revert the Kconfig patch from Linus' tree. Please can you send a revert for that?
Will
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu
Re: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
In reply to Will DeaconQuoted 2 lines · Will Deacon
Linus -- please can you drop this one (patch 3/3) for now, given that it's causing problems?
Reverted now, sorry for missing to do this earlier.
Yours,
Linus Walleij
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu
Will Deacon
maintainerRe: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
Quoted 6 lines · Linus Walleij
Quoted 2 lines · Will Deacon
Linus -- please can you drop this one (patch 3/3) for now, given that it's causing problems?
Reverted now, sorry for missing to do this earlier.
Cheers, Linus!
Will
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu
Re: [PATCH v6 3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module
In reply to Thierry RedingQuoted 22 lines · Thierry Reding
drivers/iommu/Kconfig config SPAPR_TCE_IOMMU · line 254
Quoted 12 lines · John Stultz
drivers/iommu/Kconfig +1
-0@@ -248,6 +248,7 @@ 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 ARMThis, in conjunction with deferred probe timeout, causes mayhem on Tegra186. The problem, as far as I can tell, is that there are various devices that are hooked up to the ARM SMMU, but if ARM SMMU ends up being built as a loadable module, then those devices will initialize without IOMMU support (because deferred probe will timeout before the ARM SMMU module can be loaded from the root filesystem).
Quoted 6 lines
Unfortunately, the ARM SMMU module will eventually end up being loaded once the root filesystem has been mounted (for example via SDHCI or Ethernet, both with using just plain, non-IOMMU-backed DMA API) and then initialize, configuring as "fault by default", which then results from a slew of SMMU faults from all the devices that have previously configured themselves without IOMMU support.
Oof. My apologies for the trouble. Thanks so much for the report.
Out of curiosity, does booting with deferred_probe_timeout=30 avoid the issue for you?
thanks
-john
Quoted 28 lines · John Stultz
This patch reworks
PINCTRL_MSMto be a visible option, and instead of having the various SoC specific drivers selectPINCTRL_MSM, this switches those configs to depend onPINCTRL_MSM.This is useful, as it will be needed in order to cleanly support having the qcom-scm driver, which pinctrl-msm calls into, configured as a module. Without this change, we would eventually have to add dependency lines to every config that selects
PINCTRL_MSM, and that would becomes a maintenance headache.We also add
PINCTRL_MSMto the arm64 defconfig to avoid surprises as otherwise PINCTRL_MSM/IPQ* options previously enabled, will be off.Cc Catalin Marinas <[email protected]>Cc Will Deacon <[email protected]>Cc Andy Gross <[email protected]>Cc Bjorn Andersson <[email protected]>Cc Joerg Roedel <[email protected]>Cc Thomas Gleixner <[email protected]>Cc Jason Cooper <[email protected]>Cc Marc Zyngier <[email protected]>Cc Linus Walleij <[email protected]>Cc Vinod Koul <[email protected]>Cc Kalle Valo <[email protected]>Cc Maulik Shah <[email protected]>Cc Lina Iyer <[email protected]>
Quoted 8 lines
Cc Saravana Kannan <[email protected]>Cc Todd Kjos <[email protected]>Cc Greg Kroah-Hartman <[email protected]>Reviewed-by Bjorn Andersson <[email protected]>Signed-off-by John Stultz <[email protected]>
Patch applied!
Yours,
Linus Walleij
This series was applied to qcom/linux.git (refs/heads/for-next):
Hello:
This series was applied to qcom/linux.git (refs/heads/for-next):
Quoted 5 lines · On Fri, 6 Nov 2020 04:27:08 +0000 you wrote:
This patch reworks
PINCTRL_MSMto be a visible option, and instead of having the various SoC specific drivers selectPINCTRL_MSM, this switches those configs to depend onPINCTRL_MSM.
Quoted 7 lines
This is useful, as it will be needed in order to cleanly support having the qcom-scm driver, which pinctrl-msm calls into, configured as a module. Without this change, we would eventually have to add dependency lines to every config that selects
PINCTRL_MSM, and that would becomes a maintenance headache.[...]
Here is the summary with links:
- [v6,1/3] pinctrl: qcom: Kconfig: Rework PINCTRL_MSM to be a depenency rather then a selected config
https://git.kernel.org/qcom/c/be117ca32261 - [v6,2/3] pinctrl: qcom: Allow pinctrl-msm code to be loadable as a module https://git.kernel.org/qcom/c/38e86f5c2645 - [v6,3/3] firmware: QCOM_SCM: Allow qcom_scm driver to be loadable as a permenent module https://git.kernel.org/qcom/c/d0511b5496c0
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html