Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7f6dc60 authored by Boris Brezillon's avatar Boris Brezillon
Browse files

mtd: maps: physmap: Use platform_get_resource() to retrieve iomem resources



Stop manipulating the dev->resource array directly and use the
platform_get_resource() helper instead.

While at it, fix the loop check so that we never overflow the info->maps
and info->mtds array even if the number of resources attached to the
platform dev is higher than MAX_RESOURCES.

Signed-off-by: default avatarBoris Brezillon <boris.brezillon@bootlin.com>
Reviewed-by: default avatarRicardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 00142d6f
Loading
Loading
Loading
Loading
+18 −11
Original line number Original line Diff line number Diff line
@@ -122,14 +122,19 @@ static int physmap_flash_probe(struct platform_device *dev)


	platform_set_drvdata(dev, info);
	platform_set_drvdata(dev, info);


	for (i = 0; i < dev->num_resources; i++) {
	for (i = 0; i < MAX_RESOURCES; i++) {
		struct resource *res;

		res = platform_get_resource(dev, IORESOURCE_MEM, i);
		if (!res)
			break;

		printk(KERN_NOTICE "physmap platform flash device: %.8llx at %.8llx\n",
		printk(KERN_NOTICE "physmap platform flash device: %.8llx at %.8llx\n",
		       (unsigned long long)resource_size(&dev->resource[i]),
		       (unsigned long long)resource_size(res),
		       (unsigned long long)dev->resource[i].start);
		       (unsigned long long)res->start);


		if (!devm_request_mem_region(&dev->dev,
		if (!devm_request_mem_region(&dev->dev, res->start,
			dev->resource[i].start,
					     resource_size(res),
			resource_size(&dev->resource[i]),
					     dev_name(&dev->dev))) {
					     dev_name(&dev->dev))) {
			dev_err(&dev->dev, "Could not reserve memory region\n");
			dev_err(&dev->dev, "Could not reserve memory region\n");
			err = -ENOMEM;
			err = -ENOMEM;
@@ -137,8 +142,8 @@ static int physmap_flash_probe(struct platform_device *dev)
		}
		}


		info->maps[i].name = dev_name(&dev->dev);
		info->maps[i].name = dev_name(&dev->dev);
		info->maps[i].phys = dev->resource[i].start;
		info->maps[i].phys = res->start;
		info->maps[i].size = resource_size(&dev->resource[i]);
		info->maps[i].size = resource_size(res);
		info->maps[i].bankwidth = physmap_data->width;
		info->maps[i].bankwidth = physmap_data->width;
		info->maps[i].set_vpp = physmap_set_vpp;
		info->maps[i].set_vpp = physmap_set_vpp;
		info->maps[i].pfow_base = physmap_data->pfow_base;
		info->maps[i].pfow_base = physmap_data->pfow_base;
@@ -172,9 +177,11 @@ static int physmap_flash_probe(struct platform_device *dev)
		info->mtds[i]->dev.parent = &dev->dev;
		info->mtds[i]->dev.parent = &dev->dev;
	}
	}


	if (devices_found == 1) {
	if (!devices_found) {
		err = -ENODEV;
	} else if (devices_found == 1) {
		info->cmtd = info->mtds[0];
		info->cmtd = info->mtds[0];
	} else if (devices_found > 1) {
	} else {
		/*
		/*
		 * We detected multiple devices. Concatenate them together.
		 * We detected multiple devices. Concatenate them together.
		 */
		 */