[flashrom] ck804 enable improvement
Jonathan A. Kollasch
jakllsch at kollasch.net
Wed Oct 27 03:47:06 CEST 2010
Hi,
Attached is a proposed patch for improving the ck804 chipset enable.
Comments?
Jonathan Kollasch
-------------- next part --------------
Index: chipset_enable.c
===================================================================
--- chipset_enable.c (revision 1216)
+++ chipset_enable.c (working copy)
@@ -776,8 +776,50 @@
static int enable_flash_ck804(struct pci_dev *dev, const char *name)
{
+ uint32_t segctrl;
+ int segreg;
uint8_t old, new;
+ for (segreg = 0x8c; segreg <= 0x97; segreg += 4) {
+ segctrl = pci_read_long(dev, segreg);
+ if ((segctrl & 0x33333333) != 0x00000000) {
+ /* reads or writes are locked */
+ if ((segctrl & 0xcccccccc) == 0x00000000) {
+ /* we can unlock */
+ msg_pinfo("unlocking in %#02x\n", segreg);
+ pci_write_long(dev, segreg, 0x00000000);
+ } else {
+ msg_pinfo("can't unlock in %#02x\n", segreg);
+ programmer_may_write = 0;
+ return -1;
+ }
+ }
+ segctrl = pci_read_long(dev, segreg);
+ if ((segctrl & 0x33333333) != 0x00000000) {
+ msg_pinfo("still locked in %#02x (%#08x)\n",
+ segreg, segctrl);
+ programmer_may_write = 0;
+ return -1;
+ }
+ }
+ segctrl = pci_read_byte(dev, 0x8a);
+ if ((segctrl & 0x3) != 0x0) {
+ if ((segctrl & 0xc) == 0x0) {
+ msg_pinfo("unlocking in %#02x\n", 0x8a);
+ pci_write_byte(dev, 0x8a, segctrl & 0xf0);
+ } else {
+ msg_pinfo("can't unlock in %#02x\n", 0x8a);
+ programmer_may_write = 0;
+ return -1;
+ }
+ }
+ segctrl = pci_read_byte(dev, 0x8a);
+ if ((segctrl & 0x3) != 0x0) {
+ msg_pinfo("still locked in %#02x (%#08x)\n", segreg, segctrl);
+ programmer_may_write = 0;
+ return -1;
+ }
+
old = pci_read_byte(dev, 0x88);
new = old | 0xc0;
if (new != old) {
More information about the flashrom
mailing list