From 283a6156bccb558d76b118f93d1f0333913e0e83 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Sat, 13 Jan 2018 06:20:30 +0000 Subject: [PATCH] add MMC support for 96boards Synquacer platform, add missing CONFIG_BPF_JIT_ALWAYS_ON as it changed the generated config --- ...4-mmc-sdhci_f_sdh30-add-ACPI-support.patch | 146 ++++++++++++++++++ .../fedora/generic/CONFIG_BPF_JIT_ALWAYS_ON | 1 + .../arm/aarch64/CONFIG_MMC_SDHCI_F_SDH30 | 1 + kernel-aarch64-debug.config | 2 +- kernel-aarch64.config | 2 +- kernel.spec | 3 + 6 files changed, 153 insertions(+), 2 deletions(-) create mode 100644 arm64-mmc-sdhci_f_sdh30-add-ACPI-support.patch create mode 100644 configs/fedora/generic/CONFIG_BPF_JIT_ALWAYS_ON create mode 100644 configs/fedora/generic/arm/aarch64/CONFIG_MMC_SDHCI_F_SDH30 diff --git a/arm64-mmc-sdhci_f_sdh30-add-ACPI-support.patch b/arm64-mmc-sdhci_f_sdh30-add-ACPI-support.patch new file mode 100644 index 000000000..4eaf67e33 --- /dev/null +++ b/arm64-mmc-sdhci_f_sdh30-add-ACPI-support.patch @@ -0,0 +1,146 @@ +From patchwork Mon Jan 8 15:44:19 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [v2] mmc: sdhci_f_sdh30: add ACPI support +From: Ard Biesheuvel +X-Patchwork-Id: 10149775 +Message-Id: <20180108154419.2821-1-ard.biesheuvel@linaro.org> +To: linux-mmc@vger.kernel.org +Cc: adrian.hunter@intel.com, ulf.hansson@linaro.org, + Ard Biesheuvel +Date: Mon, 8 Jan 2018 15:44:19 +0000 + +The Fujitsu SDH30 SDHCI controller may be described as a SCX0002 ACPI +device on ACPI platforms incorporating the Socionext SynQuacer SoC. + +Given that mmc_of_parse() has already been made ACPI/DT agnostic, +making the SDH30 driver ACPI capable is actually rather simple: +all we need to do is make the call to sdhci_get_of_property() [which +does not set any properties we care about] and the clock handling +dependent on whether we are dealing with a DT device, and exposing +the ACPI id via the platform_driver struct and the module metadata. + +Signed-off-by: Ard Biesheuvel +Acked-by: Adrian Hunter +--- +v2: make OF optional now that ACPI is supported + drop dev_of_node() check when disabling the clocks - those routines + tolerate NULL pointers so there's no need + + drivers/mmc/host/Kconfig | 2 +- + drivers/mmc/host/sdhci_f_sdh30.c | 52 +++++++++++++------- + 2 files changed, 35 insertions(+), 19 deletions(-) + +diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig +index 567028c9219a..07ed947ed10b 100644 +--- a/drivers/mmc/host/Kconfig ++++ b/drivers/mmc/host/Kconfig +@@ -320,7 +320,7 @@ config MMC_SDHCI_BCM_KONA + config MMC_SDHCI_F_SDH30 + tristate "SDHCI support for Fujitsu Semiconductor F_SDH30" + depends on MMC_SDHCI_PLTFM +- depends on OF ++ depends on OF || ACPI + help + This selects the Secure Digital Host Controller Interface (SDHCI) + Needed by some Fujitsu SoC for MMC / SD / SDIO support. +diff --git a/drivers/mmc/host/sdhci_f_sdh30.c b/drivers/mmc/host/sdhci_f_sdh30.c +index 04ca0d33a521..485f7591fae4 100644 +--- a/drivers/mmc/host/sdhci_f_sdh30.c ++++ b/drivers/mmc/host/sdhci_f_sdh30.c +@@ -10,9 +10,11 @@ + * the Free Software Foundation, version 2 of the License. + */ + ++#include + #include + #include + #include ++#include + #include + #include + +@@ -146,7 +148,6 @@ static int sdhci_f_sdh30_probe(struct platform_device *pdev) + + platform_set_drvdata(pdev, host); + +- sdhci_get_of_property(pdev); + host->hw_name = "f_sdh30"; + host->ops = &sdhci_f_sdh30_ops; + host->irq = irq; +@@ -158,25 +159,29 @@ static int sdhci_f_sdh30_probe(struct platform_device *pdev) + goto err; + } + +- priv->clk_iface = devm_clk_get(&pdev->dev, "iface"); +- if (IS_ERR(priv->clk_iface)) { +- ret = PTR_ERR(priv->clk_iface); +- goto err; +- } ++ if (dev_of_node(dev)) { ++ sdhci_get_of_property(pdev); + +- ret = clk_prepare_enable(priv->clk_iface); +- if (ret) +- goto err; ++ priv->clk_iface = devm_clk_get(&pdev->dev, "iface"); ++ if (IS_ERR(priv->clk_iface)) { ++ ret = PTR_ERR(priv->clk_iface); ++ goto err; ++ } + +- priv->clk = devm_clk_get(&pdev->dev, "core"); +- if (IS_ERR(priv->clk)) { +- ret = PTR_ERR(priv->clk); +- goto err_clk; +- } ++ ret = clk_prepare_enable(priv->clk_iface); ++ if (ret) ++ goto err; + +- ret = clk_prepare_enable(priv->clk); +- if (ret) +- goto err_clk; ++ priv->clk = devm_clk_get(&pdev->dev, "core"); ++ if (IS_ERR(priv->clk)) { ++ ret = PTR_ERR(priv->clk); ++ goto err_clk; ++ } ++ ++ ret = clk_prepare_enable(priv->clk); ++ if (ret) ++ goto err_clk; ++ } + + /* init vendor specific regs */ + ctrl = sdhci_readw(host, F_SDH30_AHB_CONFIG); +@@ -226,16 +231,27 @@ static int sdhci_f_sdh30_remove(struct platform_device *pdev) + return 0; + } + ++#ifdef CONFIG_OF + static const struct of_device_id f_sdh30_dt_ids[] = { + { .compatible = "fujitsu,mb86s70-sdhci-3.0" }, + { /* sentinel */ } + }; + MODULE_DEVICE_TABLE(of, f_sdh30_dt_ids); ++#endif ++ ++#ifdef CONFIG_ACPI ++static const struct acpi_device_id f_sdh30_acpi_ids[] = { ++ { "SCX0002" }, ++ { /* sentinel */ } ++}; ++MODULE_DEVICE_TABLE(acpi, f_sdh30_acpi_ids); ++#endif + + static struct platform_driver sdhci_f_sdh30_driver = { + .driver = { + .name = "f_sdh30", +- .of_match_table = f_sdh30_dt_ids, ++ .of_match_table = of_match_ptr(f_sdh30_dt_ids), ++ .acpi_match_table = ACPI_PTR(f_sdh30_acpi_ids), + .pm = &sdhci_pltfm_pmops, + }, + .probe = sdhci_f_sdh30_probe, diff --git a/configs/fedora/generic/CONFIG_BPF_JIT_ALWAYS_ON b/configs/fedora/generic/CONFIG_BPF_JIT_ALWAYS_ON new file mode 100644 index 000000000..45aacb434 --- /dev/null +++ b/configs/fedora/generic/CONFIG_BPF_JIT_ALWAYS_ON @@ -0,0 +1 @@ +CONFIG_BPF_JIT_ALWAYS_ON=y diff --git a/configs/fedora/generic/arm/aarch64/CONFIG_MMC_SDHCI_F_SDH30 b/configs/fedora/generic/arm/aarch64/CONFIG_MMC_SDHCI_F_SDH30 new file mode 100644 index 000000000..e026d18c2 --- /dev/null +++ b/configs/fedora/generic/arm/aarch64/CONFIG_MMC_SDHCI_F_SDH30 @@ -0,0 +1 @@ +CONFIG_MMC_SDHCI_F_SDH30=m diff --git a/kernel-aarch64-debug.config b/kernel-aarch64-debug.config index 9372701b1..658b04305 100644 --- a/kernel-aarch64-debug.config +++ b/kernel-aarch64-debug.config @@ -3163,7 +3163,7 @@ CONFIG_MMC_REALTEK_USB=m CONFIG_MMC_RICOH_MMC=y CONFIG_MMC_SDHCI_ACPI=m CONFIG_MMC_SDHCI_CADENCE=m -# CONFIG_MMC_SDHCI_F_SDH30 is not set +CONFIG_MMC_SDHCI_F_SDH30=m CONFIG_MMC_SDHCI_IPROC=m CONFIG_MMC_SDHCI=m CONFIG_MMC_SDHCI_MSM=m diff --git a/kernel-aarch64.config b/kernel-aarch64.config index 26a2790d0..83439a0f4 100644 --- a/kernel-aarch64.config +++ b/kernel-aarch64.config @@ -3143,7 +3143,7 @@ CONFIG_MMC_REALTEK_USB=m CONFIG_MMC_RICOH_MMC=y CONFIG_MMC_SDHCI_ACPI=m CONFIG_MMC_SDHCI_CADENCE=m -# CONFIG_MMC_SDHCI_F_SDH30 is not set +CONFIG_MMC_SDHCI_F_SDH30=m CONFIG_MMC_SDHCI_IPROC=m CONFIG_MMC_SDHCI=m CONFIG_MMC_SDHCI_MSM=m diff --git a/kernel.spec b/kernel.spec index 4961e3549..7443a4162 100644 --- a/kernel.spec +++ b/kernel.spec @@ -584,6 +584,9 @@ Patch321: bcm283x-dma-mapping-skip-USB-devices-when-configuring-DMA-during-probe # https://git.kernel.org/pub/scm/linux/kernel/git/ardb/linux.git/log/?h=synquacer-netsec Patch332: arm64-socionext-96b-enablement.patch +# https://patchwork.kernel.org/patch/10149775/ MMC support for Synquacer +Patch333: arm64-mmc-sdhci_f_sdh30-add-ACPI-support.patch + # Fix Raspberry Pi and possibly some other dwc2/dwc3 users # https://patchwork.kernel.org/patch/10149439/ Patch399: phy-work-around-phys-references-to-usb-phy-devices.patch