From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Cc: Boris Brezillon <boris.brezillon@bootlin.com>,
Richard Weinberger <richard@nod.at>,
David Woodhouse <dwmw2@infradead.org>,
Brian Norris <computersforpeace@gmail.com>,
Marek Vasut <marek.vasut@gmail.com>,
linux-mtd@lists.infradead.org, Ofer Heifetz <oferh@marvell.com>
Subject: Re: [PATCH] mtd: nand: use regmap_update_bits() in marvell_nand for syscon access
Date: Wed, 1 Aug 2018 14:27:41 +0200 [thread overview]
Message-ID: <20180801142741.66102538@xps13> (raw)
In-Reply-To: <20180801102505.18383-1-thomas.petazzoni@bootlin.com>
Hi Thomas,
Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote on Wed, 1 Aug
2018 12:25:05 +0200:
> The marvell_nfc_init() function fiddles with some bits of a system
> controller on Armada 7K/8K. However:
>
> - It does a regmap_write() on GENCONF_SOC_DEVICE_MUX, potentially
> losing other bits that might have been set by other drivers.
AFAIR, this was done on purpose. In the aim of being as independent as
possible from the earlier stages, we set here the full configuration of
register 0xF2440208 "SoC Device Multiplex Register". Bits are either
reserved or NAND controller related, nobody else is supposed to poke
here. I'm not sure using regmap_update_bits() here is relevant?
> - It does a read/modify/write sequence on GENCONF_CLK_GATING_CTRL and
> GENCONF_ND_CLK_CTRL, which isn't safe from a concurrency point of
> view, as the regmap lock isn't taken accross the read/modify/write
> sequence.
Yes, for this one I totally agree.
> To solve both issues, use regmap_update_bits().
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
I think this a good candidate for stable if there is a v2, could you
please add the relevant tags? The problem is laying since:
02f26ecf8c77 ("mtd: nand: add reworked Marvell NAND controller driver")
> ---
> NOTE: This was only compile tested, and not runtime tested.
> ---
> drivers/mtd/nand/raw/marvell_nand.c | 28 ++++++++++++++--------------
> 1 file changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/mtd/nand/raw/marvell_nand.c b/drivers/mtd/nand/raw/marvell_nand.c
> index ebb1d141b900..742f2765b424 100644
> --- a/drivers/mtd/nand/raw/marvell_nand.c
> +++ b/drivers/mtd/nand/raw/marvell_nand.c
> @@ -2691,24 +2691,24 @@ static int marvell_nfc_init(struct marvell_nfc *nfc)
> struct regmap *sysctrl_base =
> syscon_regmap_lookup_by_phandle(np,
> "marvell,system-controller");
> - u32 reg;
> + u32 mask;
>
> if (IS_ERR(sysctrl_base))
> return PTR_ERR(sysctrl_base);
>
> - reg = GENCONF_SOC_DEVICE_MUX_NFC_EN |
> - GENCONF_SOC_DEVICE_MUX_ECC_CLK_RST |
> - GENCONF_SOC_DEVICE_MUX_ECC_CORE_RST |
> - GENCONF_SOC_DEVICE_MUX_NFC_INT_EN;
> - regmap_write(sysctrl_base, GENCONF_SOC_DEVICE_MUX, reg);
> -
> - regmap_read(sysctrl_base, GENCONF_CLK_GATING_CTRL, ®);
> - reg |= GENCONF_CLK_GATING_CTRL_ND_GATE;
> - regmap_write(sysctrl_base, GENCONF_CLK_GATING_CTRL, reg);
> -
> - regmap_read(sysctrl_base, GENCONF_ND_CLK_CTRL, ®);
> - reg |= GENCONF_ND_CLK_CTRL_EN;
> - regmap_write(sysctrl_base, GENCONF_ND_CLK_CTRL, reg);
> + mask = GENCONF_SOC_DEVICE_MUX_NFC_EN |
> + GENCONF_SOC_DEVICE_MUX_ECC_CLK_RST |
> + GENCONF_SOC_DEVICE_MUX_ECC_CORE_RST |
> + GENCONF_SOC_DEVICE_MUX_NFC_INT_EN;
Minor nit: indentation looks wrong here?
> + regmap_update_bits(sysctrl_base, GENCONF_SOC_DEVICE_MUX,
> + mask, mask);
> +
> + regmap_update_bits(sysctrl_base, GENCONF_CLK_GATING_CTRL,
> + GENCONF_CLK_GATING_CTRL_ND_GATE,
> + GENCONF_CLK_GATING_CTRL_ND_GATE);
> + regmap_update_bits(sysctrl_base, GENCONF_ND_CLK_CTRL,
> + GENCONF_ND_CLK_CTRL_EN,
> + GENCONF_ND_CLK_CTRL_EN);
> }
>
> /* Configure the DMA if appropriate */
Thanks,
Miquèl
next prev parent reply other threads:[~2018-08-01 12:27 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-01 10:25 [PATCH] mtd: nand: use regmap_update_bits() in marvell_nand for syscon access Thomas Petazzoni
2018-08-01 12:27 ` Miquel Raynal [this message]
2018-08-01 12:34 ` Thomas Petazzoni
2018-08-01 13:53 ` Miquel Raynal
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=20180801142741.66102538@xps13 \
--to=miquel.raynal@bootlin.com \
--cc=boris.brezillon@bootlin.com \
--cc=computersforpeace@gmail.com \
--cc=dwmw2@infradead.org \
--cc=linux-mtd@lists.infradead.org \
--cc=marek.vasut@gmail.com \
--cc=oferh@marvell.com \
--cc=richard@nod.at \
--cc=thomas.petazzoni@bootlin.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