On 07.07.2009 15:10, Luc Verhaegen wrote:
> +     /* dual function that need special enable. */
> +     if ((gpo >= 22) && (gpo <= 26)) {
> +             tmp = pci_read_long(dev, 0xB0); /* GENCFG */
> +             switch (gpo) {
> +             case 22: /* XBUS: XDIR#/GPO22 */
> +             case 23: /* XBUS: XOE#/GPO23 */
> +                     tmp |= 1 << 28;
> +                     break;
> +             case 24: /* RTCSS#/GPO24 */
> +                     tmp |= 1 << 29;
> +                     break;
> +             case 25: /* RTCALE/GPO25 */
> +                     tmp |= 1 << 30;
> +                     break;
> +             case 26: /* KBCSS#/GPO26 */
> +                     tmp |= 1 << 31;
> +                     break;
> +             default:
>   

If the default case triggers, you found a compiler bug. Remove.

> +                     fprintf(stderr, "\nERROR: Unsupported PIIX4 GPO%d.\n", 
> gpo);
> +                     return -1;
> +             }
> +             pci_write_long(dev, 0xB0, tmp);
> +     }
> +
> +     /* GPO {0,8,27,28,30} are always available. */
> +
> +     dev = pci_dev_find(0x8086, 0x7113);     /* Intel PIIX4 PM */
> +     if (!dev) {
> +             fprintf(stderr, "\nERROR: Intel PIIX4 PM not found.\n");
> +             return -1;
> +     }
> +
> +     /* PM IO base */
> +     base = pci_read_long(dev, 0x40) & 0x0000FFC0;
> +
> +     tmp = INL(base + 0x34); /* GPO register */
> +     if (raise)
> +             tmp |= 0x01 << gpo;
> +     else
> +             tmp |= ~(0x01 << gpo);
> +     OUTL(tmp, base + 0x34);
> +
> +     return 0;
> +}
> +
> +/**
>   * Suited for VIAs EPIA M and MII, and maybe other CLE266 based EPIAs.
>   *
>   * We don't need to do this when using coreboot, GPIO15 is never lowered 
> there.
> @@ -440,18 +512,7 @@
>   */
>  static int board_epox_ep_bx3(const char *name)
>  {
> -     uint8_t tmp;
> -
> -     /* Raise GPIO22. */
> -     tmp = INB(0x4036);
> -     OUTB(tmp, 0xEB);
> -
> -     tmp |= 0x40;
> -
> -     OUTB(tmp, 0x4036);
> -     OUTB(tmp, 0xEB);
> -
> -     return 0;
> +     return intel_piix4_gpo_set(22, 1);
>  }
>  
>  /**
>   

Ahem. This patch is not functionally equivalent. Not at all.

The old code:
- Read 8-bit value from port 0x4036. Write said value to port 0xeb. Set
bit 6 in value. Write value again to port 0xeb and write value to port
0x4036. No config space accesses.

The new code:
- Set bit 28 of 32-bit value in PCI config space of PIIX4 ISA at 0xb0.
Get PMBASE from PCI config space of PIIX4 PM. Read 32-bit value from
port PMBASE+0x34. Set bit 22 in value. Write value back to PMBASE+0x34.
Assuming PMBASE=0x4000, this is equivalent to setting bit 6 in the 8-bit
value at port 0x4036.

Difference:
- Port 0xeb is not written or read in the new code.
- PCI config space of PIIX4 ISA at 0xb0 was not read or written in the
old code.


I'd like to see an explanation for this.

Regards,
Carl-Daniel

-- 
http://www.hailfinger.org/


_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom

Reply via email to