Kyösti Mälkki has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31950 )
Change subject: device/pciexp_device: Add set_subsystem() for pciexp device ......................................................................
Patch Set 5:
For some hardware this may still not be right, so enter this via dev->ops?
valid argument and i'm working on that now.
Thanks! I would do this two patches:
All the sites that only write on 0x2c (PCI_SUBSYSTEM_VENDOR_ID) can call the already existing pci_dev_set_subsystem() function. I believe PCI specification does not allow SSID of 0000:0000 and this function can be adjusted to copy PCI_VENDOR_ID pair in that case, like done in lynxpoint/lpc.c and various other files.
Second patch would add evaluating dev->hdr_type in this function. Once that is done, all the callsites that previously referred 0x94 can also call this. I can got through AMD hardware once this is submitted. Sounds like a plan?
Also, sb/ti/pci1x2x() has a sample of cardbus with an additional lock bit required. Just to remind us that one generic function will not work for all.