Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mtd: rawnand: denali: deassert write protect pin

If the write protect signal from this IP is connected to the NAND
device, this IP can handle the WP# pin via the WRITE_PROTECT
register.

The Denali NAND Flash Memory Controller User's Guide describes
this register like follows:

When the controller is in reset, the WP# pin is always asserted
to the device. Once the reset is removed, the WP# is de-asserted.
The software will then have to come and program this bit to
assert/de-assert the same.

1 - Write protect de-assert
0 - Write protect assert

The default value is 1, so the write protect is de-asserted after
the reset is removed. The driver can write to the device unless
someone has explicitly cleared register before booting the kernel.

The boot ROM of some UniPhier SoCs (LD4, Pro4, sLD8, Pro5) is the
case; the boot ROM clears the WRITE_PROTECT register when the system
is booting from the NAND device, so the NAND device becomes read-only.

Set it to 1 in the driver in order to allow the write access to the
device.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20200127123934.11847-1-yamada.masahiro@socionext.com

authored by

Masahiro Yamada and committed by
Miquel Raynal
9afbe7c0 00926460

+1
+1
drivers/mtd/nand/raw/denali.c
··· 1317 1317 iowrite32(CHIP_EN_DONT_CARE__FLAG, denali->reg + CHIP_ENABLE_DONT_CARE); 1318 1318 iowrite32(ECC_ENABLE__FLAG, denali->reg + ECC_ENABLE); 1319 1319 iowrite32(0xffff, denali->reg + SPARE_AREA_MARKER); 1320 + iowrite32(WRITE_PROTECT__FLAG, denali->reg + WRITE_PROTECT); 1320 1321 1321 1322 denali_clear_irq_all(denali); 1322 1323