hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/lib/devres.c
....@@ -8,7 +8,6 @@
88
99 enum devm_ioremap_type {
1010 DEVM_IOREMAP = 0,
11
- DEVM_IOREMAP_NC,
1211 DEVM_IOREMAP_UC,
1312 DEVM_IOREMAP_WC,
1413 };
....@@ -36,9 +35,6 @@
3635 switch (type) {
3736 case DEVM_IOREMAP:
3837 addr = ioremap(offset, size);
39
- break;
40
- case DEVM_IOREMAP_NC:
41
- addr = ioremap_nocache(offset, size);
4238 break;
4339 case DEVM_IOREMAP_UC:
4440 addr = ioremap_uc(offset, size);
....@@ -88,22 +84,6 @@
8884 EXPORT_SYMBOL_GPL(devm_ioremap_uc);
8985
9086 /**
91
- * devm_ioremap_nocache - Managed ioremap_nocache()
92
- * @dev: Generic device to remap IO address for
93
- * @offset: Resource address to map
94
- * @size: Size of map
95
- *
96
- * Managed ioremap_nocache(). Map is automatically unmapped on driver
97
- * detach.
98
- */
99
-void __iomem *devm_ioremap_nocache(struct device *dev, resource_size_t offset,
100
- resource_size_t size)
101
-{
102
- return __devm_ioremap(dev, offset, size, DEVM_IOREMAP_NC);
103
-}
104
-EXPORT_SYMBOL(devm_ioremap_nocache);
105
-
106
-/**
10787 * devm_ioremap_wc - Managed ioremap_wc()
10888 * @dev: Generic device to remap IO address for
10989 * @offset: Resource address to map
....@@ -133,29 +113,13 @@
133113 }
134114 EXPORT_SYMBOL(devm_iounmap);
135115
136
-/**
137
- * devm_ioremap_resource() - check, request region, and ioremap resource
138
- * @dev: generic device to handle the resource for
139
- * @res: resource to be handled
140
- *
141
- * Checks that a resource is a valid memory region, requests the memory
142
- * region and ioremaps it. All operations are managed and will be undone
143
- * on driver detach.
144
- *
145
- * Returns a pointer to the remapped memory or an ERR_PTR() encoded error code
146
- * on failure. Usage example:
147
- *
148
- * res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
149
- * base = devm_ioremap_resource(&pdev->dev, res);
150
- * if (IS_ERR(base))
151
- * return PTR_ERR(base);
152
- */
153
-void __iomem *devm_ioremap_resource(struct device *dev,
154
- const struct resource *res)
116
+static void __iomem *
117
+__devm_ioremap_resource(struct device *dev, const struct resource *res,
118
+ enum devm_ioremap_type type)
155119 {
156120 resource_size_t size;
157
- const char *name;
158121 void __iomem *dest_ptr;
122
+ char *pretty_name;
159123
160124 BUG_ON(!dev);
161125
....@@ -165,14 +129,21 @@
165129 }
166130
167131 size = resource_size(res);
168
- name = res->name ?: dev_name(dev);
169132
170
- if (!devm_request_mem_region(dev, res->start, size, name)) {
133
+ if (res->name)
134
+ pretty_name = devm_kasprintf(dev, GFP_KERNEL, "%s %s",
135
+ dev_name(dev), res->name);
136
+ else
137
+ pretty_name = devm_kstrdup(dev, dev_name(dev), GFP_KERNEL);
138
+ if (!pretty_name)
139
+ return IOMEM_ERR_PTR(-ENOMEM);
140
+
141
+ if (!devm_request_mem_region(dev, res->start, size, pretty_name)) {
171142 dev_err(dev, "can't request region for resource %pR\n", res);
172143 return IOMEM_ERR_PTR(-EBUSY);
173144 }
174145
175
- dest_ptr = devm_ioremap(dev, res->start, size);
146
+ dest_ptr = __devm_ioremap(dev, res->start, size, type);
176147 if (!dest_ptr) {
177148 dev_err(dev, "ioremap failed for resource %pR\n", res);
178149 devm_release_mem_region(dev, res->start, size);
....@@ -181,7 +152,47 @@
181152
182153 return dest_ptr;
183154 }
155
+
156
+/**
157
+ * devm_ioremap_resource() - check, request region, and ioremap resource
158
+ * @dev: generic device to handle the resource for
159
+ * @res: resource to be handled
160
+ *
161
+ * Checks that a resource is a valid memory region, requests the memory
162
+ * region and ioremaps it. All operations are managed and will be undone
163
+ * on driver detach.
164
+ *
165
+ * Usage example:
166
+ *
167
+ * res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
168
+ * base = devm_ioremap_resource(&pdev->dev, res);
169
+ * if (IS_ERR(base))
170
+ * return PTR_ERR(base);
171
+ *
172
+ * Return: a pointer to the remapped memory or an ERR_PTR() encoded error code
173
+ * on failure.
174
+ */
175
+void __iomem *devm_ioremap_resource(struct device *dev,
176
+ const struct resource *res)
177
+{
178
+ return __devm_ioremap_resource(dev, res, DEVM_IOREMAP);
179
+}
184180 EXPORT_SYMBOL(devm_ioremap_resource);
181
+
182
+/**
183
+ * devm_ioremap_resource_wc() - write-combined variant of
184
+ * devm_ioremap_resource()
185
+ * @dev: generic device to handle the resource for
186
+ * @res: resource to be handled
187
+ *
188
+ * Return: a pointer to the remapped memory or an ERR_PTR() encoded error code
189
+ * on failure.
190
+ */
191
+void __iomem *devm_ioremap_resource_wc(struct device *dev,
192
+ const struct resource *res)
193
+{
194
+ return __devm_ioremap_resource(dev, res, DEVM_IOREMAP_WC);
195
+}
185196
186197 /*
187198 * devm_of_iomap - Requests a resource and maps the memory mapped IO
....@@ -198,12 +209,20 @@
198209 * @node: The device-tree node where the resource resides
199210 * @index: index of the MMIO range in the "reg" property
200211 * @size: Returns the size of the resource (pass NULL if not needed)
201
- * Returns a pointer to the requested and mapped memory or an ERR_PTR() encoded
202
- * error code on failure. Usage example:
212
+ *
213
+ * Usage example:
203214 *
204215 * base = devm_of_iomap(&pdev->dev, node, 0, NULL);
205216 * if (IS_ERR(base))
206217 * return PTR_ERR(base);
218
+ *
219
+ * Please Note: This is not a one-to-one replacement for of_iomap() because the
220
+ * of_iomap() function does not track whether the region is already mapped. If
221
+ * two drivers try to map the same memory, the of_iomap() function will succeed
222
+ * but the devm_of_iomap() function will return -EBUSY.
223
+ *
224
+ * Return: a pointer to the requested and mapped memory or an ERR_PTR() encoded
225
+ * error code on failure.
207226 */
208227 void __iomem *devm_of_iomap(struct device *dev, struct device_node *node, int index,
209228 resource_size_t *size)
....@@ -241,6 +260,8 @@
241260 *
242261 * Managed ioport_map(). Map is automatically unmapped on driver
243262 * detach.
263
+ *
264
+ * Return: a pointer to the remapped memory or NULL on failure.
244265 */
245266 void __iomem *devm_ioport_map(struct device *dev, unsigned long port,
246267 unsigned int nr)
....@@ -283,7 +304,7 @@
283304 /*
284305 * PCI iomap devres
285306 */
286
-#define PCIM_IOMAP_MAX PCI_ROM_RESOURCE
307
+#define PCIM_IOMAP_MAX PCI_STD_NUM_BARS
287308
288309 struct pcim_iomap_devres {
289310 void __iomem *table[PCIM_IOMAP_MAX];