* Stefan Tauner stefan.tauner@student.tuwien.ac.at [111103 12:04]:
- new = old | 1;
- /*
* Quote from the 6 Series datasheet:
* "5: SMM BIOS Write Protect Disable (SMM_BWP)
* 1 = BIOS region SMM protection is enabled.
* The BIOS Region is not writable unless all processors are in SMM."
* In earlier chipsets this bit is reserved. */
- if (old& (5<< 1)) {
msg_pinfo("WARNING: BIOS region SMM protection is enabled!\n");
return -1;
You might still be successful doing the write, in case the SMM handler does not enforce the protection, so maybe you should just print a warning but not return here?
in chromium-os you are trying to unset that bit[1], but according to the data sheet this is impossible - it is R/W LO (read/write lock once).
Maybe there is some confusion about R/W LO. The bit can be locked, but that does not mean it is locked automatically by writing / clearing it. Once it is locked, the lock can not be undone except by a chipset reset.
and you degraded the warning to dbg level... certainly not suited for upstream, but maybe desirable for chromium(?).
Yes, that was done on purpose, because the lock bit that prevents the bit from being cleared also produces a warning.
have you tested this on a board where SMM_BWP is really set to 1? we may wanna try to write it anyway, but it would be far more interesting if it really works on some chipsets :)
Yes, this was implemented to fix a problem I was seeing, and it solved the problem. :-)
Stefan