usb: typec: ucsi: acpi: Map the mailbox with memremap()
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>
Mon, 25 Apr 2022 11:45:43 +0000 (14:45 +0300)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 27 Apr 2022 18:44:55 +0000 (20:44 +0200)
The UCSI mailbox is always in main memory.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/usb/typec/ucsi/ucsi_acpi.c

index 6771f05..7455e3a 100644 (file)
@@ -19,7 +19,7 @@
 struct ucsi_acpi {
        struct device *dev;
        struct ucsi *ucsi;
-       void __iomem *base;
+       void *base;
        struct completion complete;
        unsigned long flags;
        guid_t guid;
@@ -51,7 +51,7 @@ static int ucsi_acpi_read(struct ucsi *ucsi, unsigned int offset,
        if (ret)
                return ret;
 
-       memcpy(val, (const void __force *)(ua->base + offset), val_len);
+       memcpy(val, ua->base + offset, val_len);
 
        return 0;
 }
@@ -61,7 +61,7 @@ static int ucsi_acpi_async_write(struct ucsi *ucsi, unsigned int offset,
 {
        struct ucsi_acpi *ua = ucsi_get_drvdata(ucsi);
 
-       memcpy((void __force *)(ua->base + offset), val, val_len);
+       memcpy(ua->base + offset, val, val_len);
 
        return ucsi_acpi_dsm(ua, UCSI_DSM_FUNC_WRITE);
 }
@@ -132,18 +132,7 @@ static int ucsi_acpi_probe(struct platform_device *pdev)
                return -ENODEV;
        }
 
-       /* This will make sure we can use ioremap() */
-       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
-        * it can not be requested here, and we can not use
-        * devm_ioremap_resource().
-        */
-       ua->base = devm_ioremap(&pdev->dev, res->start, resource_size(res));
+       ua->base = devm_memremap(&pdev->dev, res->start, resource_size(res), MEMREMAP_WB);
        if (!ua->base)
                return -ENOMEM;