Shouldn't the PCI config register always be 0x2c (subsystem ID register) like in the last example (bcm5780_sb_pci_main.c)? Should these functions even be there since there is a stock pci_dev_set_subsystem() that seems to be correct?
IIRC it should be, but is not always. A lot of chips don't quite follow the spec, and this weird out-of-band setting of registers crops up. That's my take on it anyway.
The PCI spec only defines the "read" behaviour of the subsystem config registers as far as I know. Anything writing those regs is just as non-standard (or moreso!) as something using special regs is.
Segher