[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <90788d6d-24f3-64ba-43f3-16301b777536@free-electrons.com>
Date: Fri, 12 May 2017 08:37:07 +0200
From: Quentin Schulz <quentin.schulz@...e-electrons.com>
To: wg@...ndegger.com, mkl@...gutronix.de, mario.huettel@....net,
socketcan@...tkopp.net
Cc: linux-can@...r.kernel.org, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org, alexandre.belloni@...e-electrons.com,
thomas.petazzoni@...e-electrons.com
Subject: Re: [PATCH v4 1/4] can: m_can: move Message RAM initialization to
function
Hi all,
On 05/05/2017 15:50, Quentin Schulz wrote:
> To avoid possible ECC/parity checksum errors when reading an
> uninitialized buffer, the entire Message RAM is initialized when probing
> the driver. This initialization is done in the same function reading the
> Device Tree properties.
>
> This patch moves the RAM initialization to a separate function so it can
> be called separately from device initialization from Device Tree.
>
> Signed-off-by: Quentin Schulz <quentin.schulz@...e-electrons.com>
It's been a week since I sent this patch series. Any comments?
Thanks,
Quentin
> ---
>
> v4:
> - remove unused variables from m_can_of_parse_mram,
>
> drivers/net/can/m_can/m_can.c | 26 +++++++++++++++-----------
> 1 file changed, 15 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
> index bf8fdaeb955e..5da1bdb202a3 100644
> --- a/drivers/net/can/m_can/m_can.c
> +++ b/drivers/net/can/m_can/m_can.c
> @@ -1489,11 +1489,23 @@ static int register_m_can_dev(struct net_device *dev)
> return register_candev(dev);
> }
>
> +static void m_can_init_ram(struct m_can_priv *priv)
> +{
> + int end, i, start;
> +
> + /* initialize the entire Message RAM in use to avoid possible
> + * ECC/parity checksum errors when reading an uninitialized buffer
> + */
> + start = priv->mcfg[MRAM_SIDF].off;
> + end = priv->mcfg[MRAM_TXB].off +
> + priv->mcfg[MRAM_TXB].num * TXB_ELEMENT_SIZE;
> + for (i = start; i < end; i += 4)
> + writel(0x0, priv->mram_base + i);
> +}
> +
> static void m_can_of_parse_mram(struct m_can_priv *priv,
> const u32 *mram_config_vals)
> {
> - int i, start, end;
> -
> priv->mcfg[MRAM_SIDF].off = mram_config_vals[0];
> priv->mcfg[MRAM_SIDF].num = mram_config_vals[1];
> priv->mcfg[MRAM_XIDF].off = priv->mcfg[MRAM_SIDF].off +
> @@ -1529,15 +1541,7 @@ static void m_can_of_parse_mram(struct m_can_priv *priv,
> priv->mcfg[MRAM_TXE].off, priv->mcfg[MRAM_TXE].num,
> priv->mcfg[MRAM_TXB].off, priv->mcfg[MRAM_TXB].num);
>
> - /* initialize the entire Message RAM in use to avoid possible
> - * ECC/parity checksum errors when reading an uninitialized buffer
> - */
> - start = priv->mcfg[MRAM_SIDF].off;
> - end = priv->mcfg[MRAM_TXB].off +
> - priv->mcfg[MRAM_TXB].num * TXB_ELEMENT_SIZE;
> - for (i = start; i < end; i += 4)
> - writel(0x0, priv->mram_base + i);
> -
> + m_can_init_ram(priv);
> }
>
> static int m_can_plat_probe(struct platform_device *pdev)
>
--
Quentin Schulz, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
Powered by blists - more mailing lists