public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Sumit Garg <sumit.garg@kernel.org>
To: Aswin Murugan <aswin.murugan@oss.qualcomm.com>,
	casey.connolly@linaro.org
Cc: neil.armstrong@linaro.org, trini@konsulko.com,
	u-boot-qcom@groups.io, u-boot@lists.denx.de
Subject: Re: [PATCH v1] smem: msm: Fix memory-region lookup, direct <reg> mapping and update SMEM host count
Date: Fri, 26 Dec 2025 16:21:08 +0530	[thread overview]
Message-ID: <aU5onLOBb3f62VVB@sumit-xelite> (raw)
In-Reply-To: <20251112165851.1561418-1-aswin.murugan@oss.qualcomm.com>

On Wed, Nov 12, 2025 at 10:28:51PM +0530, Aswin Murugan wrote:
> The SMEM driver was failing to resolve memory regions on some boards
> because `dev_of_offset()` + `fdtdec_lookup_phandle()` did not yield a
> valid DT node. Modernize the code to use driver-model/ofnode accessors
> and make the probe robust for both DT styles (direct `reg` vs
> `memory-region` phandle).
> 
> - qcom_smem_map_memory():
>   * Drop fdtdec path; use dev_read_phandle_with_args() +
>     ofnode_read_resource().
>   * Use dev_read_phandle_with_args() +
>     fnode_read_resource().
> 
> - qcom_smem_probe():
>   * Try dev_read_addr_size() first (map via <reg>), else fall back to
>     qcom_smem_map_memory() with "memory-region".
>   * Check "qcom,rpm-msg-ram" presence to add second region.
> 
> - Additionally, SMEM_HOST_COUNT is increased to support newer SMEM
>   versions that include more remote processors. This avoids failures
>   during processor ID checks.
> 
> Signed-off-by: Aswin Murugan <aswin.murugan@oss.qualcomm.com>
> ---
>  drivers/smem/msm_smem.c | 56 +++++++++++++++++++++++++++++------------
>  1 file changed, 40 insertions(+), 16 deletions(-)

There was an earlier effort from Casey to import SMEM driver here [1]
from Linux kernel. But unfortunately that patch-set didn't got reworked
to make into U-Boot mainline.

Casey, do you have any plans to respin the patch-set? Or it's fine for
others to take over that patch-set?

[1] https://patchwork.ozlabs.org/project/uboot/list/?series=433987&state=*

-Sumit

> 
> diff --git a/drivers/smem/msm_smem.c b/drivers/smem/msm_smem.c
> index ccd145f9afb..b6b92d3530d 100644
> --- a/drivers/smem/msm_smem.c
> +++ b/drivers/smem/msm_smem.c
> @@ -88,7 +88,7 @@ DECLARE_GLOBAL_DATA_PTR;
>  #define SMEM_GLOBAL_HOST	0xfffe
>  
>  /* Max number of processors/hosts in a system */
> -#define SMEM_HOST_COUNT		10
> +#define SMEM_HOST_COUNT		25
>  
>  /**
>   * struct smem_proc_comm - proc_comm communication struct (legacy)
> @@ -821,23 +821,34 @@ static int qcom_smem_enumerate_partitions(struct qcom_smem *smem,
>  static int qcom_smem_map_memory(struct qcom_smem *smem, struct udevice *dev,
>  				const char *name, int i)
>  {
> -	struct fdt_resource r;
>  	int ret;
> -	int node = dev_of_offset(dev);
> +	struct ofnode_phandle_args args;
> +	struct resource r;
>  
> -	ret = fdtdec_lookup_phandle(gd->fdt_blob, node, name);
> -	if (ret < 0) {
> -		dev_err(dev, "No %s specified\n", name);
> +	if (!dev_read_prop(dev, name, NULL)) {
> +		dev_err(dev, "%s prop not found\n", name);
>  		return -EINVAL;
>  	}
>  
> -	ret = fdt_get_resource(gd->fdt_blob, ret, "reg", 0, &r);
> -	if (ret)
> -		return ret;
> +	ret = dev_read_phandle_with_args(dev, name, NULL, 0, 0, &args);
> +	if (ret) {
> +		dev_err(dev, "%s phandle read failed\n", name);
> +		return -EINVAL;
> +	}
>  
> +	if (!ofnode_valid(args.node)) {
> +		dev_err(dev, "Invalid node from phandle args\n");
> +		return -EINVAL;
> +	}
> +
> +	ret = ofnode_read_resource(args.node, 0, &r);
> +	if (ret) {
> +		dev_err(dev, "Can't get mmap base address(%d)\n", ret);
> +		return ret;
> +	}
>  	smem->regions[i].aux_base = (u32)r.start;
> -	smem->regions[i].size = fdt_resource_size(&r);
> -	smem->regions[i].virt_base = devm_ioremap(dev, r.start, fdt_resource_size(&r));
> +	smem->regions[i].size = resource_size(&r);
> +	smem->regions[i].virt_base = devm_ioremap(dev, r.start, resource_size(&r));
>  	if (!smem->regions[i].virt_base)
>  		return -ENOMEM;
>  
> @@ -852,10 +863,14 @@ static int qcom_smem_probe(struct udevice *dev)
>  	int num_regions;
>  	u32 version;
>  	int ret;
> -	int node = dev_of_offset(dev);
> +	fdt_addr_t addr;
> +	fdt_size_t size;
> +
> +	if (__smem)
> +		return 0;
>  
>  	num_regions = 1;
> -	if (fdtdec_lookup_phandle(gd->fdt_blob, node, "qcomrpm-msg-ram") >= 0)
> +	if (dev_read_prop(dev, "qcom,rpm-msg-ram", NULL))
>  		num_regions++;
>  
>  	array_size = num_regions * sizeof(struct smem_region);
> @@ -866,9 +881,18 @@ static int qcom_smem_probe(struct udevice *dev)
>  	smem->dev = dev;
>  	smem->num_regions = num_regions;
>  
> -	ret = qcom_smem_map_memory(smem, dev, "memory-region", 0);
> -	if (ret)
> -		return ret;
> +	addr = dev_read_addr_size(dev, &size);
> +	if (addr == FDT_ADDR_T_NONE) {
> +		ret = qcom_smem_map_memory(smem, dev, "memory-region", 0);
> +		if (ret)
> +			return ret;
> +	} else {
> +		smem->regions[0].aux_base = (u32)addr;
> +		smem->regions[0].size = size;
> +		smem->regions[0].virt_base = devm_ioremap(dev, addr, size);
> +		if (!smem->regions[0].virt_base)
> +			return -ENOMEM;
> +	}
>  
>  	if (num_regions > 1) {
>  		ret = qcom_smem_map_memory(smem, dev,
> -- 
> 2.34.1
> 

  parent reply	other threads:[~2025-12-26 10:51 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-12 16:58 [PATCH v1] smem: msm: Fix memory-region lookup, direct <reg> mapping and update SMEM host count Aswin Murugan
2025-12-17 11:00 ` Varadarajan Narayanan
2025-12-26 10:51 ` Sumit Garg [this message]
2026-01-08 20:41   ` Casey Connolly
2026-01-12 16:35     ` Casey Connolly
2026-01-16 18:03 ` Casey Connolly

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aU5onLOBb3f62VVB@sumit-xelite \
    --to=sumit.garg@kernel.org \
    --cc=aswin.murugan@oss.qualcomm.com \
    --cc=casey.connolly@linaro.org \
    --cc=neil.armstrong@linaro.org \
    --cc=trini@konsulko.com \
    --cc=u-boot-qcom@groups.io \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox