devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Julien Massot <julien.massot@iot.bzh>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: "Björn Andersson" <bjorn.andersson@linaro.org>,
	"Mathieu Poirier" <mathieu.poirier@linaro.org>,
	"Rob Herring" <robh+dt@kernel.org>,
	Linux-Renesas <linux-renesas-soc@vger.kernel.org>,
	"open list:REMOTE PROCESSOR (REMOTEPROC) SUBSYSTEM"
	<linux-remoteproc@vger.kernel.org>,
	"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS"
	<devicetree@vger.kernel.org>
Subject: Re: [PATCH v2 2/2] remoteproc: Add Renesas rcar driver
Date: Tue, 7 Dec 2021 18:03:42 +0100	[thread overview]
Message-ID: <4cf20793-9795-4126-4293-217041101852@iot.bzh> (raw)
In-Reply-To: <CAMuHMdUuYHxNe_XOBGt+6cdB49zF5W0p25DbQJ0CZ7A=dE8pyg@mail.gmail.com>

Hi Geert,
Thanks for taking time to review my patch.

On 12/2/21 14:40, Geert Uytterhoeven wrote:
> Hi Julien,
> 
> Thanks for your patch!
> 
> On Tue, Nov 30, 2021 at 11:01 AM Julien Massot <julien.massot@iot.bzh> wrote:
>> Renesas Gen3 platform includes a Cortex-r7 processor.
>>
>> Both: the application cores (A5x) and the realtime core (CR7)
>> share access to the RAM and devices with the same address map,
>> so device addresses are equal to the Linux physical addresses.
>>
>> In order to initialize this remote processor we need to:
>> - power on the realtime core
>> - put the firmware in a ram area
> 
> RAM
fixed
> 
>> - set the boot address for this firmware (reset vector)
>> - Deassert the reset
>>
>> This initial driver allows to start and stop the Cortex R7
>> processor.
>>
>> Signed-off-by: Julien Massot <julien.massot@iot.bzh>
> 
>> --- a/drivers/remoteproc/Kconfig
>> +++ b/drivers/remoteproc/Kconfig
>> @@ -283,6 +283,17 @@ config QCOM_WCNSS_PIL
>>            verified and booted with the help of the Peripheral Authentication
>>            System (PAS) in TrustZone.
>>
>> +config RCAR_REMOTEPROC
>> +       tristate "Renesas R-CAR Gen3 remoteproc support"
> 
> R-Car
fixed
> 
>> +       depends on ARCH_RENESAS
> 
> || COMPILE_TEST?
COMPILE_TEST has been added to v3

> 
>> +       help
>> +         Say y here to support R-Car realtime processor via the
>> +         remote processor framework. An elf firmware can be loaded
> 
> ELF
ok
> 
>> +         thanks to sysfs remoteproc entries. The remote processor
>> +         can be started and stopped.
>> +         This can be either built-in or a loadable module.
>> +         If compiled as module (M), the module name is rcar_rproc.
>> +
>>   config ST_REMOTEPROC
>>          tristate "ST remoteproc support"
>>          depends on ARCH_STI
> 
>> --- /dev/null
>> +++ b/drivers/remoteproc/rcar_rproc.c
> 
>> +static int rcar_rproc_mem_alloc(struct rproc *rproc,
>> +                                struct rproc_mem_entry *mem)
>> +{
>> +       struct device *dev = &rproc->dev;
>> +       void *va;
>> +
>> +       dev_dbg(dev, "map memory: %pa+%zx\n", &mem->dma, mem->len);
>> +       va = ioremap_wc(mem->dma, mem->len);
>> +       if (IS_ERR_OR_NULL(va)) {
> 
> I think ioremap_*() never returns an error code, only NULL for failure.
Changed to check against NULL.
> 
>> +               dev_err(dev, "Unable to map memory region: %pa+%zx\n",
>> +                       &mem->dma, mem->len);
>> +               return -ENOMEM;
>> +       }
>> +
>> +       /* Update memory entry va */
>> +       mem->va = va;
>> +
>> +       return 0;
>> +}
> 
>> +static int rcar_rproc_prepare(struct rproc *rproc)
>> +{
>> +       struct device *dev = rproc->dev.parent;
>> +       struct device_node *np = dev->of_node;
>> +       struct of_phandle_iterator it;
>> +       struct rproc_mem_entry *mem;
>> +       struct reserved_mem *rmem;
>> +       u64 da;
>> +
>> +       /* Register associated reserved memory regions */
>> +       of_phandle_iterator_init(&it, np, "memory-region", NULL, 0);
>> +       while (of_phandle_iterator_next(&it) == 0) {
>> +
>> +               rmem = of_reserved_mem_lookup(it.node);
>> +               if (!rmem) {
>> +                       dev_err(&rproc->dev,
>> +                               "unable to acquire memory-region\n");
>> +                       return -EINVAL;
>> +               }
>> +
>> +               /* No need to translate pa to da, R-Car use same map */
>> +               da = rmem->base;
>> +
>> +               mem = rproc_mem_entry_init(dev, NULL,
>> +                                          (dma_addr_t)rmem->base,
> 
> Do you need this cast?
Looks like not. removed in v3

> 
>> +                                          rmem->size, da,
> 
> da is u64, and thus truncated to u32.
Ok thats indeed a limitation between the AP cores and the realtime core.
In v3 there is a check for bad input from device tree.

> 
>> +                                          rcar_rproc_mem_alloc,
>> +                                          rcar_rproc_mem_release,
>> +                                          it.node->name);
>> +
>> +               if (!mem)
>> +                       return -ENOMEM;
>> +
>> +               rproc_add_carveout(rproc, mem);
>> +       }
>> +
>> +       return 0;
>> +}
> 
>> +static int rcar_rproc_probe(struct platform_device *pdev)
>> +{
>> +       struct device *dev = &pdev->dev;
>> +       struct device_node *np = dev->of_node;
>> +       struct rcar_rproc *priv;
>> +       struct rproc *rproc;
>> +       int ret;
>> +
>> +       rproc = rproc_alloc(dev, np->name, &rcar_rproc_ops,
>> +                           NULL, sizeof(*priv));
> 
> devm_rproc_alloc(), to simplify cleanup?
Indeed devm_rproc_alloc is used in v3.
> 
>> +       if (!rproc)
>> +               return -ENOMEM;
>> +
>> +       priv = rproc->priv;
>> +
>> +       priv->rst = devm_reset_control_get_exclusive(dev, NULL);
>> +       if (IS_ERR(priv->rst)) {
>> +               ret = PTR_ERR(priv->rst);
>> +               dev_err(dev, "fail to acquire rproc reset\n");
> 
> dev_err_probe() (which handles -EPROBE_DEFER, too)
ok
> 
>> +               goto free_rproc;
>> +       }
>> +
>> +       pm_runtime_enable(dev);
>> +       ret = pm_runtime_get_sync(dev);
>> +       if (ret) {
>> +               dev_err(dev, "failed to power up\n");
>> +               goto free_rproc;
>> +       }
>> +
>> +       dev_set_drvdata(dev, rproc);
>> +
>> +       /* Manually start the rproc */
>> +       rproc->auto_boot = false;
>> +
>> +       ret = rproc_add(rproc);
> 
> devm_rproc_add()?
devm_rproc_add is now used in v3.

> 
>> +       if (ret) {
>> +               dev_err(dev, "rproc_add failed\n");
>> +               goto pm_disable;
>> +       }
>> +
>> +       return 0;
>> +
>> +pm_disable:
>> +       pm_runtime_disable(dev);
>> +free_rproc:
>> +       rproc_free(rproc);
>> +
>> +       return ret;
>> +}
> 
>> +MODULE_LICENSE("GPL v2");
>> +MODULE_DESCRIPTION("Renesas Gen3 R-Car remote processor control driver");
> 
> R-Car Gen3
Ok

All requested changes should be addressed in v3.

Regards,
-- 
Julien Massot [IoT.bzh]


  reply	other threads:[~2021-12-07 17:03 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-30 10:00 [PATCH v2 0/2] Initial Renesas R-Car remoteproc support Julien Massot
2021-11-30 10:00 ` [PATCH v2 1/2] dt-bindings: remoteproc: Add Renesas R-Car Julien Massot
2021-12-02 13:22   ` Geert Uytterhoeven
2021-12-07 13:58     ` Julien Massot
2021-11-30 10:00 ` [PATCH v2 2/2] remoteproc: Add Renesas rcar driver Julien Massot
2021-12-01 16:46   ` Mathieu Poirier
2021-12-02 13:40   ` Geert Uytterhoeven
2021-12-07 17:03     ` Julien Massot [this message]
2021-12-01 16:46 ` [PATCH v2 0/2] Initial Renesas R-Car remoteproc support Mathieu Poirier
2021-12-02  8:57   ` Julien Massot
2021-12-02 13:41   ` Geert Uytterhoeven
2021-12-06 16:59     ` Mathieu Poirier

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=4cf20793-9795-4126-4293-217041101852@iot.bzh \
    --to=julien.massot@iot.bzh \
    --cc=bjorn.andersson@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=geert@linux-m68k.org \
    --cc=linux-remoteproc@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=mathieu.poirier@linaro.org \
    --cc=robh+dt@kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).