linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: Tero Kristo <t-kristo@ti.com>
Cc: bjorn.andersson@linaro.org, ohad@wizery.com,
	linux-remoteproc@vger.kernel.org, afd@ti.com, s-anna@ti.com,
	linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org
Subject: Re: [PATCHv7 07/15] remoteproc/omap: Add support for DRA7xx remote processors
Date: Wed, 4 Mar 2020 10:48:27 -0700	[thread overview]
Message-ID: <20200304174827.GF8197@xps15> (raw)
In-Reply-To: <20200221101936.16833-8-t-kristo@ti.com>

On Fri, Feb 21, 2020 at 12:19:28PM +0200, Tero Kristo wrote:
> From: Suman Anna <s-anna@ti.com>
> 
> DRA7xx/AM57xx SoCs have two IPU and up to two DSP processor subsystems
> for offloading different computation algorithms. The IPU processor
> subsystem contains dual-core ARM Cortex-M4 processors, and is very
> similar to those on OMAP5. The DSP processor subsystem is based on
> the TI's standard TMS320C66x DSP CorePac core.
> 
> Support has been added to the OMAP remoteproc driver through new
> DRA7xx specific compatibles for properly probing and booting all
> the different processor subsystem instances on DRA7xx/AM57xx
> SoCs - IPU1, IPU2, DSP1 & DSP2. A build dependency with SOC_DRA7XX
> is added to enable the driver to be built in DRA7xx-only configuration.
> 
> The DSP boot address programming needed enhancement for DRA7xx as the
> boot register fields are different on DRA7 compared to OMAP4 and OMAP5
> SoCs. The register on DRA7xx contains additional fields within the
> register and the boot address bit-field is right-shifted by 10 bits.
> The internal memory parsing logic has also been updated to compute
> the device addresses for the L2 RAM for DSP devices using relative
> addressing logic, and to parse two additional RAMs at L1 level - L1P
> and L1D. This allows the remoteproc driver to support loading into
> these regions for a small subset of firmware images requiring as
> such. The most common usage would be to use the L1 programmable
> RAMs as L1 Caches.
> 
> The firmware lookup logic also has to be adjusted for DRA7xx as
> there are (can be) more than one instance of both the IPU and DSP
> remote processors for the first time in OMAP4+ SoCs.
> 
> Signed-off-by: Suman Anna <s-anna@ti.com>
> [t-kristo@ti.com: moved address translation quirks to pdata]
> Signed-off-by: Tero Kristo <t-kristo@ti.com>
> ---
>  drivers/remoteproc/Kconfig           |  2 +-
>  drivers/remoteproc/omap_remoteproc.c | 38 +++++++++++++++++++++++++++-
>  2 files changed, 38 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
> index de3862c15fcc..b52abc2268cc 100644
> --- a/drivers/remoteproc/Kconfig
> +++ b/drivers/remoteproc/Kconfig
> @@ -35,7 +35,7 @@ config MTK_SCP
>  
>  config OMAP_REMOTEPROC
>  	tristate "OMAP remoteproc support"
> -	depends on ARCH_OMAP4 || SOC_OMAP5
> +	depends on ARCH_OMAP4 || SOC_OMAP5 || SOC_DRA7XX
>  	depends on OMAP_IOMMU
>  	select MAILBOX
>  	select OMAP2PLUS_MBOX
> diff --git a/drivers/remoteproc/omap_remoteproc.c b/drivers/remoteproc/omap_remoteproc.c
> index 872cd0df342b..8c3dc0edae95 100644
> --- a/drivers/remoteproc/omap_remoteproc.c
> +++ b/drivers/remoteproc/omap_remoteproc.c
> @@ -34,10 +34,13 @@
>   * struct omap_rproc_boot_data - boot data structure for the DSP omap rprocs
>   * @syscon: regmap handle for the system control configuration module
>   * @boot_reg: boot register offset within the @syscon regmap
> + * @boot_reg_shift: bit-field shift required for the boot address value in
> + *		    @boot_reg
>   */
>  struct omap_rproc_boot_data {
>  	struct regmap *syscon;
>  	unsigned int boot_reg;
> +	unsigned int boot_reg_shift;
>  };
>  
>  /**
> @@ -161,6 +164,8 @@ static int omap_rproc_write_dsp_boot_addr(struct rproc *rproc)
>  	struct omap_rproc *oproc = rproc->priv;
>  	struct omap_rproc_boot_data *bdata = oproc->boot_data;
>  	u32 offset = bdata->boot_reg;
> +	u32 value;
> +	u32 mask;
>  
>  	if (rproc->bootaddr & (SZ_1K - 1)) {
>  		dev_err(dev, "invalid boot address 0x%x, must be aligned on a 1KB boundary\n",
> @@ -168,7 +173,10 @@ static int omap_rproc_write_dsp_boot_addr(struct rproc *rproc)
>  		return -EINVAL;
>  	}
>  
> -	regmap_write(bdata->syscon, offset, rproc->bootaddr);
> +	value = rproc->bootaddr >> bdata->boot_reg_shift;
> +	mask = ~(SZ_1K - 1) >> bdata->boot_reg_shift;
> +
> +	regmap_update_bits(bdata->syscon, offset, mask, value);

Please handle the return value.  We can either do it now or in 3 months when
someone with an automated tools sends a patch.  Besides, omap_rproc_start() is
already expecting an error from omap_rproc_write_dsp_boot_addr() so it's even
easier.

With the above:

Acked-by: Mathieu Poirier <mathieu.poirier@linaro.org>

>  
>  	return 0;
>  }
> @@ -299,6 +307,13 @@ static const struct omap_rproc_mem_data ipu_mems[] = {
>  	{ },
>  };
>  
> +static const struct omap_rproc_mem_data dra7_dsp_mems[] = {
> +	{ .name = "l2ram", .dev_addr = 0x800000 },
> +	{ .name = "l1pram", .dev_addr = 0xe00000 },
> +	{ .name = "l1dram", .dev_addr = 0xf00000 },
> +	{ },
> +};
> +
>  static const struct omap_rproc_dev_data omap4_dsp_dev_data = {
>  	.device_name	= "dsp",
>  };
> @@ -317,6 +332,16 @@ static const struct omap_rproc_dev_data omap5_ipu_dev_data = {
>  	.mems		= ipu_mems,
>  };
>  
> +static const struct omap_rproc_dev_data dra7_dsp_dev_data = {
> +	.device_name	= "dsp",
> +	.mems		= dra7_dsp_mems,
> +};
> +
> +static const struct omap_rproc_dev_data dra7_ipu_dev_data = {
> +	.device_name	= "ipu",
> +	.mems		= ipu_mems,
> +};
> +
>  static const struct of_device_id omap_rproc_of_match[] = {
>  	{
>  		.compatible     = "ti,omap4-dsp",
> @@ -334,6 +359,14 @@ static const struct of_device_id omap_rproc_of_match[] = {
>  		.compatible     = "ti,omap5-ipu",
>  		.data           = &omap5_ipu_dev_data,
>  	},
> +	{
> +		.compatible     = "ti,dra7-dsp",
> +		.data           = &dra7_dsp_dev_data,
> +	},
> +	{
> +		.compatible     = "ti,dra7-ipu",
> +		.data           = &dra7_ipu_dev_data,
> +	},
>  	{
>  		/* end */
>  	},
> @@ -386,6 +419,9 @@ static int omap_rproc_get_boot_data(struct platform_device *pdev,
>  		return -EINVAL;
>  	}
>  
> +	of_property_read_u32_index(np, "ti,bootreg", 2,
> +				   &oproc->boot_data->boot_reg_shift);
> +
>  	return 0;
>  }
>  
> -- 
> 2.17.1
> 
> --
> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

  reply	other threads:[~2020-03-04 17:48 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-21 10:19 [PATCHv7 00/15] remoteproc: updates for omap remoteproc support Tero Kristo
2020-02-21 10:19 ` [PATCHv7 01/15] dt-bindings: remoteproc: Add OMAP remoteproc bindings Tero Kristo
2020-02-21 10:19 ` [PATCHv7 02/15] remoteproc/omap: Add device tree support Tero Kristo
2020-03-03 22:53   ` Mathieu Poirier
2020-02-21 10:19 ` [PATCHv7 03/15] remoteproc/omap: Add a sanity check for DSP boot address alignment Tero Kristo
2020-03-03 22:56   ` Mathieu Poirier
2020-02-21 10:19 ` [PATCHv7 04/15] remoteproc/omap: Add support to parse internal memories from DT Tero Kristo
2020-02-24 14:15   ` Andrew F. Davis
2020-02-26  7:48     ` Tero Kristo
2020-03-04 17:32   ` Mathieu Poirier
2020-03-04 19:08     ` Tero Kristo
2020-03-05 16:56       ` Mathieu Poirier
2020-02-21 10:19 ` [PATCHv7 05/15] remoteproc/omap: Add the rproc ops .da_to_va() implementation Tero Kristo
2020-03-04 17:36   ` Mathieu Poirier
2020-02-21 10:19 ` [PATCHv7 06/15] remoteproc/omap: Initialize and assign reserved memory node Tero Kristo
2020-03-04 17:42   ` Mathieu Poirier
2020-02-21 10:19 ` [PATCHv7 07/15] remoteproc/omap: Add support for DRA7xx remote processors Tero Kristo
2020-03-04 17:48   ` Mathieu Poirier [this message]
2020-03-05 17:51     ` Suman Anna
2020-02-21 10:19 ` [PATCHv7 08/15] remoteproc/omap: Remove the platform_data header Tero Kristo
2020-03-04 17:48   ` Mathieu Poirier
2020-02-21 10:19 ` [PATCHv7 09/15] remoteproc/omap: Check for undefined mailbox messages Tero Kristo
2020-03-04 17:49   ` Mathieu Poirier
2020-02-21 10:19 ` [PATCHv7 10/15] remoteproc/omap: Request a timer(s) for remoteproc usage Tero Kristo
2020-03-04 18:33   ` Mathieu Poirier
2020-02-21 10:19 ` [PATCHv7 11/15] remoteproc/omap: Add support for system suspend/resume Tero Kristo
2020-03-04 20:24   ` Mathieu Poirier
2020-02-21 10:19 ` [PATCHv7 12/15] remoteproc/omap: Add support for runtime auto-suspend/resume Tero Kristo
2020-03-04 21:35   ` Mathieu Poirier
2020-03-05  0:13     ` Suman Anna
2020-02-21 10:19 ` [PATCHv7 13/15] remoteproc/omap: Report device exceptions and trigger recovery Tero Kristo
2020-03-04 21:38   ` Mathieu Poirier
2020-02-21 10:19 ` [PATCHv7 14/15] remoteproc/omap: Add watchdog functionality for remote processors Tero Kristo
2020-03-04 22:33   ` Mathieu Poirier
2020-03-05  0:20     ` Suman Anna
2020-03-05 17:13       ` Mathieu Poirier
2020-02-21 10:19 ` [PATCHv7 15/15] remoteproc/omap: Switch to SPDX license identifiers Tero Kristo
2020-03-04 22:42   ` Mathieu Poirier
2020-03-05  0:24     ` Suman Anna
2020-03-05 17:15       ` 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=20200304174827.GF8197@xps15 \
    --to=mathieu.poirier@linaro.org \
    --cc=afd@ti.com \
    --cc=bjorn.andersson@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-remoteproc@vger.kernel.org \
    --cc=ohad@wizery.com \
    --cc=s-anna@ti.com \
    --cc=t-kristo@ti.com \
    /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).