MFP4 @217311

Intel and Sharp flash power on with their blocks in a "locked" state.
Unlocked them before attempting to perform an erase or write action and
relock when the action is complete.
This commit is contained in:
Brooks Davis 2013-05-30 01:22:50 +00:00
parent 444e780150
commit 5faf6ff4cc
2 changed files with 23 additions and 0 deletions

View File

@ -409,6 +409,16 @@ cfi_write_block(struct cfi_softc *sc)
register_t intr;
int error, i;
/* Intel flash must be unlocked before modification */
switch (sc->sc_cmdset) {
case CFI_VEND_INTEL_ECS:
case CFI_VEND_INTEL_SCS:
cfi_write(sc, sc->sc_wrofs, CFI_INTEL_LBS);
cfi_write(sc, sc->sc_wrofs, CFI_INTEL_UB);
cfi_write(sc, sc->sc_wrofs, CFI_BCS_READ_ARRAY);
break;
}
/* Erase the block. */
switch (sc->sc_cmdset) {
case CFI_VEND_INTEL_ECS:
@ -477,6 +487,16 @@ cfi_write_block(struct cfi_softc *sc)
out:
cfi_write(sc, 0, CFI_BCS_READ_ARRAY);
/* Relock Intel flash */
switch (sc->sc_cmdset) {
case CFI_VEND_INTEL_ECS:
case CFI_VEND_INTEL_SCS:
cfi_write(sc, sc->sc_wrofs, CFI_INTEL_LBS);
cfi_write(sc, sc->sc_wrofs, CFI_INTEL_LB);
cfi_write(sc, sc->sc_wrofs, CFI_BCS_READ_ARRAY);
break;
}
return (error);
}

View File

@ -105,8 +105,11 @@ struct cfi_qry {
#define CFI_BCS_READ_ARRAY 0xff
/* Intel commands. */
#define CFI_INTEL_LB 0x01 /* Lock Block */
#define CFI_INTEL_LBS 0x60 /* Lock Block Setup */
#define CFI_INTEL_READ_ID 0x90 /* Read Identifier */
#define CFI_INTEL_PP_SETUP 0xc0 /* Protection Program Setup */
#define CFI_INTEL_UB 0xd0 /* Unlock Block */
/* NB: these are addresses for 16-bit accesses */
#define CFI_INTEL_PLR 0x80 /* Protection Lock Register */