Patchwork [U-Boot,2/4,v2] cfi_flash: Read PPB sector protection from device for AMD/Spansion chips

login
register
mail settings
Submitter Stefan Roese
Date Dec. 6, 2012, 2:44 p.m.
Message ID <1354805052-32347-2-git-send-email-sr@denx.de>
Download mbox | patch
Permalink /patch/204256/
State Awaiting Upstream
Delegated to: Stefan Roese
Headers show

Comments

Stefan Roese - Dec. 6, 2012, 2:44 p.m.
Patch 66863b05 [cfi_flash: add support for Spansion flash PPB sector
protection] introduced the PPB (Persistent Protection Bit) locking for
Spansion chips. But right now the sector protection status (locked vs
unlocked) is set to unlocked for all sectors upon bootup. The real
sector protection status is ignored.

This patch now reads the current sector protection status and uses
it for these AMD/Spansion flash chips.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
Cc: Holger Brunck <holger.brunck@keymile.com>
---
v2:
- Added reset command before issuing the autoselect command
  (FLASH_CMD_READ_ID). Otherwise STM flash chips didn't report
  the correct protection status (on a4m2k board)
- Line length reduced (checkpatch warning)

 drivers/mtd/cfi_flash.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
Holger Brunck - Dec. 7, 2012, 9:19 a.m.
Hi Stefan,

On 12/06/2012 03:44 PM, Stefan Roese wrote:
> Patch 66863b05 [cfi_flash: add support for Spansion flash PPB sector
> protection] introduced the PPB (Persistent Protection Bit) locking for
> Spansion chips. But right now the sector protection status (locked vs
> unlocked) is set to unlocked for all sectors upon bootup. The real
> sector protection status is ignored.
> 
> This patch now reads the current sector protection status and uses
> it for these AMD/Spansion flash chips.
> 
> Signed-off-by: Stefan Roese <sr@denx.de>
> Cc: Anatolij Gustschin <agust@denx.de>
> Cc: Holger Brunck <holger.brunck@keymile.com>
> ---

Tested-by: Holger Brunck <holger.brunck@keymile.com>

Regards
Holger

Patch

diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
index d865c40..045cf4a 100644
--- a/drivers/mtd/cfi_flash.c
+++ b/drivers/mtd/cfi_flash.c
@@ -2160,6 +2160,27 @@  ulong flash_get_size (phys_addr_t base, int banknum)
 							     FLASH_OFFSET_PROTECT,
 							     FLASH_STATUS_PROTECT);
 					break;
+				case CFI_CMDSET_AMD_EXTENDED:
+				case CFI_CMDSET_AMD_STANDARD:
+					if (!manufact_match(info, AMD_MANUFACT)) {
+						/* default: not protected */
+						info->protect[sect_cnt] = 0;
+						break;
+					}
+
+					/* Read protection (PPB) from sector */
+					flash_write_cmd(info, 0, 0,
+							info->cmd_reset);
+					flash_unlock_seq(info, 0);
+					flash_write_cmd(info, 0,
+							info->addr_unlock1,
+							FLASH_CMD_READ_ID);
+					info->protect[sect_cnt] =
+						flash_isset(
+							info, sect_cnt,
+							FLASH_OFFSET_PROTECT,
+							FLASH_STATUS_PROTECT);
+					break;
 				default:
 					/* default: not protected */
 					info->protect[sect_cnt] = 0;