Message ID | 20210120000406.1843400-2-jeremy.linton@arm.com |
---|---|
State | New |
Headers | show |
Series | rpi: enable SD/Wifi on ACPI firmware | expand |
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
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 --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);
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(+)