Merge tag 'hsi-for-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi
[linux-2.6-microblaze.git] / lib / devres.c
index 2a4ff5d..4679dbb 100644 (file)
@@ -10,6 +10,7 @@ enum devm_ioremap_type {
        DEVM_IOREMAP = 0,
        DEVM_IOREMAP_UC,
        DEVM_IOREMAP_WC,
+       DEVM_IOREMAP_NP,
 };
 
 void devm_ioremap_release(struct device *dev, void *res)
@@ -42,6 +43,9 @@ static void __iomem *__devm_ioremap(struct device *dev, resource_size_t offset,
        case DEVM_IOREMAP_WC:
                addr = ioremap_wc(offset, size);
                break;
+       case DEVM_IOREMAP_NP:
+               addr = ioremap_np(offset, size);
+               break;
        }
 
        if (addr) {
@@ -98,6 +102,21 @@ void __iomem *devm_ioremap_wc(struct device *dev, resource_size_t offset,
 }
 EXPORT_SYMBOL(devm_ioremap_wc);
 
+/**
+ * devm_ioremap_np - Managed ioremap_np()
+ * @dev: Generic device to remap IO address for
+ * @offset: Resource address to map
+ * @size: Size of map
+ *
+ * Managed ioremap_np().  Map is automatically unmapped on driver detach.
+ */
+void __iomem *devm_ioremap_np(struct device *dev, resource_size_t offset,
+                             resource_size_t size)
+{
+       return __devm_ioremap(dev, offset, size, DEVM_IOREMAP_NP);
+}
+EXPORT_SYMBOL(devm_ioremap_np);
+
 /**
  * devm_iounmap - Managed iounmap()
  * @dev: Generic device to unmap for
@@ -128,6 +147,9 @@ __devm_ioremap_resource(struct device *dev, const struct resource *res,
                return IOMEM_ERR_PTR(-EINVAL);
        }
 
+       if (type == DEVM_IOREMAP && res->flags & IORESOURCE_MEM_NONPOSTED)
+               type = DEVM_IOREMAP_NP;
+
        size = resource_size(res);
 
        if (res->name)