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:
parent
444e780150
commit
5faf6ff4cc
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user