diff mbox series

[v2] mmc: sdhci-iproc: Add ACPI bindings for the rpi

Message ID 20210120000406.1843400-2-jeremy.linton@arm.com
State New
Headers show
Series rpi: enable SD/Wifi on ACPI firmware | expand

Commit Message

Jeremy Linton Jan. 20, 2021, 12:04 a.m. UTC
The RPi4 has an Arasan controller it carries over
from the RPi3 and a newer eMMC2 controller.
Because of a couple of quirks, it seems wiser to bind
these controllers to the same driver that DT is using
on this platform rather than the generic sdhci_acpi
driver with PNP0D40.

So, BCM2847 describes the older Arasan and
BRCME88C describes the newer eMMC2. The older
Arasan is reusing an existing ACPI _HID used
by other OSs booting these tables on the RPi.

With this change, Linux is capable of utilizing the
SD card slot, and the wifi when booted with
UEFI+ACPI on the rpi4.

Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
---
 drivers/mmc/host/sdhci-iproc.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

Comments

Florian Fainelli Jan. 20, 2021, 12:09 a.m. UTC | #1
On 1/19/2021 4:04 PM, Jeremy Linton wrote:
> The RPi4 has an Arasan controller it carries over

> from the RPi3 and a newer eMMC2 controller.

> Because of a couple of quirks, it seems wiser to bind

> these controllers to the same driver that DT is using

> on this platform rather than the generic sdhci_acpi

> driver with PNP0D40.

> 

> So, BCM2847 describes the older Arasan and

> BRCME88C describes the newer eMMC2. The older

> Arasan is reusing an existing ACPI _HID used

> by other OSs booting these tables on the RPi.

> 

> With this change, Linux is capable of utilizing the

> SD card slot, and the wifi when booted with

> UEFI+ACPI on the rpi4.


This is uber nit picking, but can you try to be consistent in how you
capitalize words throughout your commit subject and use common writing
such as: RPi, Wi-Fi, OSes.

> 

> Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>


Acked-by: Florian Fainelli <f.fainelli@gmail.com>

-- 
Florian
Ulf Hansson Jan. 20, 2021, 2:08 p.m. UTC | #2
On Wed, 20 Jan 2021 at 01:04, Jeremy Linton <jeremy.linton@arm.com> wrote:
>

> The RPi4 has an Arasan controller it carries over

> from the RPi3 and a newer eMMC2 controller.

> Because of a couple of quirks, it seems wiser to bind

> these controllers to the same driver that DT is using

> on this platform rather than the generic sdhci_acpi

> driver with PNP0D40.

>

> So, BCM2847 describes the older Arasan and

> BRCME88C describes the newer eMMC2. The older

> Arasan is reusing an existing ACPI _HID used

> by other OSs booting these tables on the RPi.

>

> With this change, Linux is capable of utilizing the

> SD card slot, and the wifi when booted with

> UEFI+ACPI on the rpi4.

>

> Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>


Applied for next (and by updating the commit message according to the
nitpick comment from Florian), thanks!

Kind regards
Uffe


> ---

>  drivers/mmc/host/sdhci-iproc.c | 18 ++++++++++++++++++

>  1 file changed, 18 insertions(+)

>

> diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c

> index c9434b461aab..ddeaf8e1f72f 100644

> --- a/drivers/mmc/host/sdhci-iproc.c

> +++ b/drivers/mmc/host/sdhci-iproc.c

> @@ -296,9 +296,27 @@ static const struct of_device_id sdhci_iproc_of_match[] = {

>  MODULE_DEVICE_TABLE(of, sdhci_iproc_of_match);

>

>  #ifdef CONFIG_ACPI

> +/*

> + * This is a duplicate of bcm2835_(pltfrm_)data without caps quirks

> + * which are provided by the ACPI table.

> + */

> +static const struct sdhci_pltfm_data sdhci_bcm_arasan_data = {

> +       .quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION |

> +                 SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |

> +                 SDHCI_QUIRK_NO_HISPD_BIT,

> +       .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,

> +       .ops = &sdhci_iproc_32only_ops,

> +};

> +

> +static const struct sdhci_iproc_data bcm_arasan_data = {

> +       .pdata = &sdhci_bcm_arasan_data,

> +};

> +

>  static const struct acpi_device_id sdhci_iproc_acpi_ids[] = {

>         { .id = "BRCM5871", .driver_data = (kernel_ulong_t)&iproc_cygnus_data },

>         { .id = "BRCM5872", .driver_data = (kernel_ulong_t)&iproc_data },

> +       { .id = "BCM2847",  .driver_data = (kernel_ulong_t)&bcm_arasan_data },

> +       { .id = "BRCME88C", .driver_data = (kernel_ulong_t)&bcm2711_data },

>         { /* sentinel */ }

>  };

>  MODULE_DEVICE_TABLE(acpi, sdhci_iproc_acpi_ids);

> --

> 2.26.2

>
diff mbox series

Patch

diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c
index c9434b461aab..ddeaf8e1f72f 100644
--- a/drivers/mmc/host/sdhci-iproc.c
+++ b/drivers/mmc/host/sdhci-iproc.c
@@ -296,9 +296,27 @@  static const struct of_device_id sdhci_iproc_of_match[] = {
 MODULE_DEVICE_TABLE(of, sdhci_iproc_of_match);
 
 #ifdef CONFIG_ACPI
+/*
+ * This is a duplicate of bcm2835_(pltfrm_)data without caps quirks
+ * which are provided by the ACPI table.
+ */
+static const struct sdhci_pltfm_data sdhci_bcm_arasan_data = {
+	.quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION |
+		  SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
+		  SDHCI_QUIRK_NO_HISPD_BIT,
+	.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
+	.ops = &sdhci_iproc_32only_ops,
+};
+
+static const struct sdhci_iproc_data bcm_arasan_data = {
+	.pdata = &sdhci_bcm_arasan_data,
+};
+
 static const struct acpi_device_id sdhci_iproc_acpi_ids[] = {
 	{ .id = "BRCM5871", .driver_data = (kernel_ulong_t)&iproc_cygnus_data },
 	{ .id = "BRCM5872", .driver_data = (kernel_ulong_t)&iproc_data },
+	{ .id = "BCM2847",  .driver_data = (kernel_ulong_t)&bcm_arasan_data },
+	{ .id = "BRCME88C", .driver_data = (kernel_ulong_t)&bcm2711_data },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(acpi, sdhci_iproc_acpi_ids);