From: Boris Brezillon <boris.brezillon@collabora.com>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Masahiro Yamada <masahiroy@kernel.org>,
linux-mtd <linux-mtd@lists.infradead.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Boris Brezillon <bbrezillon@kernel.org>
Subject: Re: How to handle write-protect pin of NAND device ?
Date: Tue, 28 Jan 2020 07:58:33 +0100 [thread overview]
Message-ID: <20200128075833.129902f6@collabora.com> (raw)
In-Reply-To: <20200127164755.29183962@xps13>
On Mon, 27 Jan 2020 16:47:55 +0100
Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> Hi Hello,
>
> Boris Brezillon <boris.brezillon@collabora.com> wrote on Mon, 27 Jan
> 2020 16:45:54 +0100:
>
> > On Mon, 27 Jan 2020 15:35:59 +0100
> > Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> >
> > > Hi Masahiro,
> > >
> > > Masahiro Yamada <masahiroy@kernel.org> wrote on Mon, 27 Jan 2020
> > > 21:55:25 +0900:
> > >
> > > > Hi.
> > > >
> > > > I have a question about the
> > > > WP_n pin of a NAND chip.
> > > >
> > > >
> > > > As far as I see, the NAND framework does not
> > > > handle it.
> > >
> > > There is a nand_check_wp() which reads the status of the pin before
> > > erasing/writing.
> > >
> > > >
> > > > Instead, it is handled in a driver level.
> > > > I see some DT-bindings that handle the WP_n pin.
> > > >
> > > > $ git grep wp -- Documentation/devicetree/bindings/mtd/
> > > > Documentation/devicetree/bindings/mtd/brcm,brcmnand.txt:-
> > > > brcm,nand-has-wp : Some versions of this IP include a
> > > > write-protect
> > >
> > > Just checked: brcmnand de-assert WP when writing/erasing and asserts it
> > > otherwise. IMHO this switching is useless.
> > >
> > > > Documentation/devicetree/bindings/mtd/ingenic,jz4780-nand.txt:-
> > > > wp-gpios: GPIO specifier for the write protect pin.
> > > > Documentation/devicetree/bindings/mtd/ingenic,jz4780-nand.txt:
> > > > wp-gpios = <&gpf 22 GPIO_ACTIVE_LOW>;
> > > > Documentation/devicetree/bindings/mtd/nvidia-tegra20-nand.txt:-
> > > > wp-gpios: GPIO specifier for the write protect pin.
> > > > Documentation/devicetree/bindings/mtd/nvidia-tegra20-nand.txt:
> > > > wp-gpios = <&gpio TEGRA_GPIO(S, 0) GPIO_ACTIVE_LOW>;
> > >
> > > In both cases, the WP GPIO is unused in the code, just de-asserted at
> > > boot time like what you do in the patch below.
> > >
> > > >
> > > >
> > > >
> > > > I wrote a patch to avoid read-only issue in some cases:
> > > > http://patchwork.ozlabs.org/patch/1229749/
> > > >
> > > > Generally speaking, we expect NAND devices
> > > > are writable in Linux. So, I think my patch is OK.
> > >
> > > I think the patch is fine.
> > >
> > > >
> > > >
> > > > However, I asked this myself:
> > > > Is there a useful case to assert the write protect
> > > > pin in order to make the NAND chip really read-only?
> > > > For example, the system recovery image is stored in
> > > > a read-only device, and the write-protect pin is
> > > > kept asserted to assure nobody accidentally corrupts it.
> > >
> > > It is very likely that the same device is used for RO and RW storage so
> > > in most cases this is not possible. We already have squashfs which is
> > > actually read-only at filesystem level, I'm not sure it is needed to
> > > enforce this at a lower level... Anyway if there is actually a pin for
> > > that, one might want to handle the pin directly as a GPIO, what do you
> > > think?
> >
> > FWIW, I've always considered the WP pin as a way to protect against
> > spurious destructive command emission, which is most likely to happen
> > during transition phases (bootloader -> linux, linux -> kexeced-linux,
> > platform reset, ..., or any other transition where the pin state might
> > be undefined at some point). This being said, if you're worried about
> > other sources of spurious cmds (say your bus is shared between
> > different kind of memory devices, and the CS pin is unreliable), you
> > might want to leave the NAND in a write-protected state de-asserting WP
> > only when explicitly issuing a destructive command (program page, erase
> > block).
>
> Ok so with this in mind, only the brcmnand driver does a useful use of
> the WP output.
Well, I'd just say that brcmnand is more paranoid, which is a good
thing I guess, but that doesn't make other solutions useless, just less
safe. We could probably flag operations as 'destructive' at the
nand_operation level, so drivers can assert/de-assert the pin on a
per-operation basis.
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon@collabora.com>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Masahiro Yamada <masahiroy@kernel.org>,
linux-mtd <linux-mtd@lists.infradead.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Boris Brezillon <bbrezillon@kernel.org>
Subject: Re: How to handle write-protect pin of NAND device ?
Date: Tue, 28 Jan 2020 07:58:33 +0100 [thread overview]
Message-ID: <20200128075833.129902f6@collabora.com> (raw)
In-Reply-To: <20200127164755.29183962@xps13>
On Mon, 27 Jan 2020 16:47:55 +0100
Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> Hi Hello,
>
> Boris Brezillon <boris.brezillon@collabora.com> wrote on Mon, 27 Jan
> 2020 16:45:54 +0100:
>
> > On Mon, 27 Jan 2020 15:35:59 +0100
> > Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> >
> > > Hi Masahiro,
> > >
> > > Masahiro Yamada <masahiroy@kernel.org> wrote on Mon, 27 Jan 2020
> > > 21:55:25 +0900:
> > >
> > > > Hi.
> > > >
> > > > I have a question about the
> > > > WP_n pin of a NAND chip.
> > > >
> > > >
> > > > As far as I see, the NAND framework does not
> > > > handle it.
> > >
> > > There is a nand_check_wp() which reads the status of the pin before
> > > erasing/writing.
> > >
> > > >
> > > > Instead, it is handled in a driver level.
> > > > I see some DT-bindings that handle the WP_n pin.
> > > >
> > > > $ git grep wp -- Documentation/devicetree/bindings/mtd/
> > > > Documentation/devicetree/bindings/mtd/brcm,brcmnand.txt:-
> > > > brcm,nand-has-wp : Some versions of this IP include a
> > > > write-protect
> > >
> > > Just checked: brcmnand de-assert WP when writing/erasing and asserts it
> > > otherwise. IMHO this switching is useless.
> > >
> > > > Documentation/devicetree/bindings/mtd/ingenic,jz4780-nand.txt:-
> > > > wp-gpios: GPIO specifier for the write protect pin.
> > > > Documentation/devicetree/bindings/mtd/ingenic,jz4780-nand.txt:
> > > > wp-gpios = <&gpf 22 GPIO_ACTIVE_LOW>;
> > > > Documentation/devicetree/bindings/mtd/nvidia-tegra20-nand.txt:-
> > > > wp-gpios: GPIO specifier for the write protect pin.
> > > > Documentation/devicetree/bindings/mtd/nvidia-tegra20-nand.txt:
> > > > wp-gpios = <&gpio TEGRA_GPIO(S, 0) GPIO_ACTIVE_LOW>;
> > >
> > > In both cases, the WP GPIO is unused in the code, just de-asserted at
> > > boot time like what you do in the patch below.
> > >
> > > >
> > > >
> > > >
> > > > I wrote a patch to avoid read-only issue in some cases:
> > > > http://patchwork.ozlabs.org/patch/1229749/
> > > >
> > > > Generally speaking, we expect NAND devices
> > > > are writable in Linux. So, I think my patch is OK.
> > >
> > > I think the patch is fine.
> > >
> > > >
> > > >
> > > > However, I asked this myself:
> > > > Is there a useful case to assert the write protect
> > > > pin in order to make the NAND chip really read-only?
> > > > For example, the system recovery image is stored in
> > > > a read-only device, and the write-protect pin is
> > > > kept asserted to assure nobody accidentally corrupts it.
> > >
> > > It is very likely that the same device is used for RO and RW storage so
> > > in most cases this is not possible. We already have squashfs which is
> > > actually read-only at filesystem level, I'm not sure it is needed to
> > > enforce this at a lower level... Anyway if there is actually a pin for
> > > that, one might want to handle the pin directly as a GPIO, what do you
> > > think?
> >
> > FWIW, I've always considered the WP pin as a way to protect against
> > spurious destructive command emission, which is most likely to happen
> > during transition phases (bootloader -> linux, linux -> kexeced-linux,
> > platform reset, ..., or any other transition where the pin state might
> > be undefined at some point). This being said, if you're worried about
> > other sources of spurious cmds (say your bus is shared between
> > different kind of memory devices, and the CS pin is unreliable), you
> > might want to leave the NAND in a write-protected state de-asserting WP
> > only when explicitly issuing a destructive command (program page, erase
> > block).
>
> Ok so with this in mind, only the brcmnand driver does a useful use of
> the WP output.
Well, I'd just say that brcmnand is more paranoid, which is a good
thing I guess, but that doesn't make other solutions useless, just less
safe. We could probably flag operations as 'destructive' at the
nand_operation level, so drivers can assert/de-assert the pin on a
per-operation basis.
next prev parent reply other threads:[~2020-01-28 6:58 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-27 12:55 How to handle write-protect pin of NAND device ? Masahiro Yamada
2020-01-27 12:55 ` Masahiro Yamada
2020-01-27 14:35 ` Miquel Raynal
2020-01-27 14:35 ` Miquel Raynal
2020-01-27 15:45 ` Boris Brezillon
2020-01-27 15:45 ` Boris Brezillon
2020-01-27 15:47 ` Miquel Raynal
2020-01-27 15:47 ` Miquel Raynal
2020-01-28 6:58 ` Boris Brezillon [this message]
2020-01-28 6:58 ` Boris Brezillon
2020-01-29 10:06 ` Masahiro Yamada
2020-01-29 10:06 ` Masahiro Yamada
2020-01-29 13:36 ` Miquel Raynal
2020-01-29 13:36 ` Miquel Raynal
2020-01-29 13:53 ` Boris Brezillon
2020-01-29 13:53 ` Boris Brezillon
2020-01-29 13:59 ` Miquel Raynal
2020-01-29 13:59 ` Miquel Raynal
2020-01-29 14:49 ` Boris Brezillon
2020-01-29 14:49 ` Boris Brezillon
2020-01-29 14:52 ` Boris Brezillon
2020-01-29 14:52 ` Boris Brezillon
2020-01-29 15:00 ` Miquel Raynal
2020-01-29 15:00 ` Miquel Raynal
2020-01-29 15:17 ` Boris Brezillon
2020-01-29 15:17 ` Boris Brezillon
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=20200128075833.129902f6@collabora.com \
--to=boris.brezillon@collabora.com \
--cc=bbrezillon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=masahiroy@kernel.org \
--cc=miquel.raynal@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 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.