Use the newly added of_reserved_mem_region_to_resource() function to handle "memory-region" properties.
The original code did not set 'zap_available' to false if of_address_to_resource() failed which seems like an oversight. Signed-off-by: Rob Herring (Arm) <[email protected]> --- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 17 +++++------------ drivers/gpu/drm/msm/msm_drv.c | 15 +++++---------- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c index 2348ffb35f7e..c1060d5b6d05 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -10,7 +10,7 @@ #include <linux/interconnect.h> #include <linux/firmware/qcom/qcom_scm.h> #include <linux/kernel.h> -#include <linux/of_address.h> +#include <linux/of_reserved_mem.h> #include <linux/pm_opp.h> #include <linux/slab.h> #include <linux/soc/qcom/mdt_loader.h> @@ -33,7 +33,7 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname, struct device *dev = &gpu->pdev->dev; const struct firmware *fw; const char *signed_fwname = NULL; - struct device_node *np, *mem_np; + struct device_node *np; struct resource r; phys_addr_t mem_phys; ssize_t mem_size; @@ -51,18 +51,11 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname, return -ENODEV; } - mem_np = of_parse_phandle(np, "memory-region", 0); - of_node_put(np); - if (!mem_np) { + ret = of_reserved_mem_region_to_resource(np, 0, &r); + if (ret) { zap_available = false; - return -EINVAL; - } - - ret = of_address_to_resource(mem_np, 0, &r); - of_node_put(mem_np); - if (ret) return ret; - + } mem_phys = r.start; /* diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index f316e6776f67..31e4de05579a 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -8,7 +8,7 @@ #include <linux/dma-mapping.h> #include <linux/fault-inject.h> #include <linux/debugfs.h> -#include <linux/of_address.h> +#include <linux/of_reserved_mem.h> #include <linux/uaccess.h> #include <drm/clients/drm_client_setup.h> @@ -126,8 +126,8 @@ bool msm_use_mmu(struct drm_device *dev) static int msm_init_vram(struct drm_device *dev) { struct msm_drm_private *priv = dev->dev_private; - struct device_node *node; unsigned long size = 0; + struct resource r; int ret = 0; /* In the device-tree world, we could have a 'memory-region' @@ -147,14 +147,9 @@ static int msm_init_vram(struct drm_device *dev) * load and do initial modeset) */ - node = of_parse_phandle(dev->dev->of_node, "memory-region", 0); - if (node) { - struct resource r; - ret = of_address_to_resource(node, 0, &r); - of_node_put(node); - if (ret) - return ret; - size = r.end - r.start + 1; + ret = of_reserved_mem_region_to_resource(dev->dev->of_node, 0, &r); + if (!ret) { + size = resource_size(&r); DRM_INFO("using VRAM carveout: %lx@%pa\n", size, &r.start); /* if we have no IOMMU, then we need to use carveout allocator. -- 2.47.2
