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
>
next prev 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.