From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Subject: Re: [PATCH] ACPI / LPSS: Work around wrong sdio _ADR 0 entry on some byt/cht devices Date: Mon, 26 Dec 2016 11:48:19 +0100 Message-ID: <087d2576-66f8-f3ea-e08b-95e5de9f701c@redhat.com> References: <20161225102148.7706-1-hdegoede@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: Sender: stable-owner@vger.kernel.org To: "Rafael J. Wysocki" Cc: "Rafael J . Wysocki" , Len Brown , Adrian Hunter , Ulf Hansson , ACPI Devel Maling List , "russianneuromancer @ ya . ru" , linux-mmc@vger.kernel.org, Stable , Mika Westerberg , Andy Shevchenko List-Id: linux-acpi@vger.kernel.org Hi, On 26-12-16 00:25, Rafael J. Wysocki wrote: > CC Mika and Andy. > > Plus I don't think -stable is going to take your patches directly. Not sure what you mean with this remark? According to: Documentation/stable_kernel_rules.txt Option 1 ******** To have the patch automatically included in the stable tree, add the tag .. code-block:: none Cc: stable@vger.kernel.org in the sign-off area. Once the patch is merged it will be applied to the stable tree without anything else needing to be done by the author or subsystem maintainer. So yes, it won't get merged until it has been merged into Linus' tree. But AFAICT adding Cc: stable@vger.kernel.org is the right way to indicate that a patch is a bug-fix which should be applied to stable kernels once merged, which is my intention of adding the Cc. Regards, Hans > > On Sun, Dec 25, 2016 at 11:21 AM, Hans de Goede wrote: >> The firmware on some cherrytrail devices wrongly adds _ADR 0 to their >> entry describing the 80860F14 uid "2" sd-controller. >> >> I believe the firmware writers intended this as a sdio function address, >> but it is in the wrong place for this, so it gets interpreted as a pci >> address, causing the node describing the sd-controller used for the >> sdio-wifi to get seen as a firmware_node for the pci host bridge, rather >> then being stand-alone device. >> >> This commit adds a byt_sdio_setup function which detects this scenario >> and removes the wrong firmware_node link from the pci host bridge, which >> fixes acpi_create_platform_device returning NULL, leading to non-working >> sdio-wifi. >> >> BugLink: https://github.com/hadess/rtl8723bs/issues/80 >> Cc: stable@vger.kernel.org >> Signed-off-by: Hans de Goede >> --- >> drivers/acpi/acpi_lpss.c | 30 ++++++++++++++++++++++++++++++ >> 1 file changed, 30 insertions(+) >> >> diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c >> index 373657f..df9cc66 100644 >> --- a/drivers/acpi/acpi_lpss.c >> +++ b/drivers/acpi/acpi_lpss.c >> @@ -84,6 +84,7 @@ static const struct lpss_device_desc lpss_dma_desc = { >> }; >> >> struct lpss_private_data { >> + struct acpi_device *adev; >> void __iomem *mmio_base; >> resource_size_t mmio_size; >> unsigned int fixed_clk_rate; >> @@ -154,6 +155,33 @@ static void byt_i2c_setup(struct lpss_private_data *pdata) >> writel(0, pdata->mmio_base + LPSS_I2C_ENABLE); >> } >> >> +static void byt_sdio_setup(struct lpss_private_data *pdata) >> +{ >> + unsigned long long adr; >> + acpi_status status; >> + struct device *dev; >> + >> + /* >> + * Some firmware has a broken _ADR 0 enter for the 80860F14:2 >> + * device, which causes it to get seen as the firmware_node >> + * for the pci host bridge, rather then a stand alone device. >> + * >> + * Check if this is the case, and if it is remove the link. >> + */ >> + if (strcmp(acpi_device_uid(pdata->adev), "2") != 0) >> + return; >> + >> + status = acpi_evaluate_integer(pdata->adev->handle, "_ADR", NULL, &adr); >> + if (ACPI_FAILURE(status) || adr != 0) >> + return; >> + >> + dev = acpi_get_first_physical_node(pdata->adev); >> + if (!dev) >> + return; >> + >> + acpi_unbind_one(dev); >> +} >> + >> static const struct lpss_device_desc lpt_dev_desc = { >> .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_LTR, >> .prv_offset = 0x800, >> @@ -217,6 +245,7 @@ static const struct lpss_device_desc byt_spi_dev_desc = { >> >> static const struct lpss_device_desc byt_sdio_dev_desc = { >> .flags = LPSS_CLK, >> + .setup = byt_sdio_setup, >> }; >> >> static const struct lpss_device_desc byt_i2c_dev_desc = { >> @@ -425,6 +454,7 @@ static int acpi_lpss_create_device(struct acpi_device *adev, >> goto err_out; >> } >> >> + pdata->adev = adev; >> pdata->dev_desc = dev_desc; >> >> if (dev_desc->setup) >> -- >> 2.9.3 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html