forked from Minki/linux
1648eaaa15
Currently cfi_cmdset_0002.c does not support PPB locking of sectors. This patch adds support for this locking/unlocking mechanism. It is needed on some platforms, since newer U-Boot versions do support this PPB locking and protect for example their environment sector(s) this way. This PPB locking/unlocking will be enabled for all devices supported by cfi_cmdset_0002 reporting 8 in the CFI word 0x49 (Sector Protect/Unprotect scheme). Please note that PPB locking does support sector-by-sector locking. But the whole chip can only be unlocked together. So unlocking one sector will automatically unlock all sectors of this device. Because of this chip limitation, the PPB unlocking function saves the current locking status of all sectors before unlocking the whole device. After unlocking the saved locking status is re-configured. This way only the addressed sectors will be unlocked. To selectively enable this advanced sector protection mechanism, the device-tree property "use-advanced-sector-protection" has been created. To enable support for this locking this property needs to be present in the flash DT node. E.g.: nor_flash@0,0 { compatible = "amd,s29gl256n", "cfi-flash"; bank-width = <2>; use-advanced-sector-protection; ... Tested with Spansion S29GL512S10THI and Micron JS28F512M29EWx flash devices. Signed-off-by: Stefan Roese <sr@denx.de> Tested-by: Holger Brunck <holger.brunck@keymile.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
85 lines
2.7 KiB
Plaintext
85 lines
2.7 KiB
Plaintext
CFI or JEDEC memory-mapped NOR flash, MTD-RAM (NVRAM...)
|
|
|
|
Flash chips (Memory Technology Devices) are often used for solid state
|
|
file systems on embedded devices.
|
|
|
|
- compatible : should contain the specific model of mtd chip(s)
|
|
used, if known, followed by either "cfi-flash", "jedec-flash"
|
|
or "mtd-ram".
|
|
- reg : Address range(s) of the mtd chip(s)
|
|
It's possible to (optionally) define multiple "reg" tuples so that
|
|
non-identical chips can be described in one node.
|
|
- bank-width : Width (in bytes) of the bank. Equal to the
|
|
device width times the number of interleaved chips.
|
|
- device-width : (optional) Width of a single mtd chip. If
|
|
omitted, assumed to be equal to 'bank-width'.
|
|
- #address-cells, #size-cells : Must be present if the device has
|
|
sub-nodes representing partitions (see below). In this case
|
|
both #address-cells and #size-cells must be equal to 1.
|
|
- no-unaligned-direct-access: boolean to disable the default direct
|
|
mapping of the flash.
|
|
On some platforms (e.g. MPC5200) a direct 1:1 mapping may cause
|
|
problems with JFFS2 usage, as the local bus (LPB) doesn't support
|
|
unaligned accesses as implemented in the JFFS2 code via memcpy().
|
|
By defining "no-unaligned-direct-access", the flash will not be
|
|
exposed directly to the MTD users (e.g. JFFS2) any more.
|
|
- linux,mtd-name: allow to specify the mtd name for retro capability with
|
|
physmap-flash drivers as boot loader pass the mtd partition via the old
|
|
device name physmap-flash.
|
|
- use-advanced-sector-protection: boolean to enable support for the
|
|
advanced sector protection (Spansion: PPB - Persistent Protection
|
|
Bits) locking.
|
|
|
|
For JEDEC compatible devices, the following additional properties
|
|
are defined:
|
|
|
|
- vendor-id : Contains the flash chip's vendor id (1 byte).
|
|
- device-id : Contains the flash chip's device id (1 byte).
|
|
|
|
The device tree may optionally contain sub-nodes describing partitions of the
|
|
address space. See partition.txt for more detail.
|
|
|
|
Example:
|
|
|
|
flash@ff000000 {
|
|
compatible = "amd,am29lv128ml", "cfi-flash";
|
|
reg = <ff000000 01000000>;
|
|
bank-width = <4>;
|
|
device-width = <1>;
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
fs@0 {
|
|
label = "fs";
|
|
reg = <0 f80000>;
|
|
};
|
|
firmware@f80000 {
|
|
label ="firmware";
|
|
reg = <f80000 80000>;
|
|
read-only;
|
|
};
|
|
};
|
|
|
|
Here an example with multiple "reg" tuples:
|
|
|
|
flash@f0000000,0 {
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
compatible = "intel,PC48F4400P0VB", "cfi-flash";
|
|
reg = <0 0x00000000 0x02000000
|
|
0 0x02000000 0x02000000>;
|
|
bank-width = <2>;
|
|
partition@0 {
|
|
label = "test-part1";
|
|
reg = <0 0x04000000>;
|
|
};
|
|
};
|
|
|
|
An example using SRAM:
|
|
|
|
sram@2,0 {
|
|
compatible = "samsung,k6f1616u6a", "mtd-ram";
|
|
reg = <2 0 0x00200000>;
|
|
bank-width = <2>;
|
|
};
|
|
|