lkml.org 
[lkml]   [2018]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.17 07/46] usb: typec: ucsi: acpi: Workaround for cache mode issue
    Date
    4.17-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Heikki Krogerus <heikki.krogerus@linux.intel.com>

    commit 1f9f9d168ce619608572b01771c47a41b15429e6 upstream.

    This fixes an issue where the driver fails with an error:

    ioremap error for 0x3f799000-0x3f79a000, requested 0x2, got 0x0

    On some platforms the UCSI ACPI mailbox SystemMemory
    Operation Region may be setup before the driver has been
    loaded. That will lead into the driver failing to map the
    mailbox region, as it has been already marked as write-back
    memory. acpi_os_ioremap() for x86 uses ioremap_cache()
    unconditionally.

    When the issue happens, the embedded controller has a
    pending query event for the UCSI notification right after
    boot-up which causes the operation region to be setup before
    UCSI driver has been loaded.

    The fix is to notify acpi core that the driver is about to
    access memory region which potentially overlaps with an
    operation region right before mapping it.
    acpi_release_memory() will check if the memory has already
    been setup (mapped) by acpi core, and deactivate it (unmap)
    if it has. The driver is then able to map the memory with
    ioremap_nocache() and set the memtype to uncached for the
    region.

    Reported-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Fixes: 8243edf44152 ("usb: typec: ucsi: Add ACPI driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/typec/ucsi/ucsi_acpi.c | 5 +++++
    1 file changed, 5 insertions(+)

    --- a/drivers/usb/typec/ucsi/ucsi_acpi.c
    +++ b/drivers/usb/typec/ucsi/ucsi_acpi.c
    @@ -79,6 +79,11 @@ static int ucsi_acpi_probe(struct platfo
    return -ENODEV;
    }

    + /* This will make sure we can use ioremap_nocache() */
    + status = acpi_release_memory(ACPI_HANDLE(&pdev->dev), res, 1);
    + if (ACPI_FAILURE(status))
    + return -ENOMEM;
    +
    /*
    * NOTE: The memory region for the data structures is used also in an
    * operation region, which means ACPI has already reserved it. Therefore

    \
     
     \ /
      Last update: 2018-07-06 08:13    [W:3.646 / U:0.356 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site