nah, it works with the miniPCI 82541GI Gigabit Ethernet card, but not with the VIA-VT6421A card nor with the SIL3112 card.
Right; so we know the RB532A works, just not with the two SATA bridge cards you have.
In my opinion (which may not be worth that much!), that indicates that the VT6421A and SIL3112 cards require early PCI initialization to work. Both support EEPROM to initialize configuration register values. If you can remove the EEPROM chip, the two datasheet has enough information for us to (read and) reprogram the contents so that the card itself initializes its PCI bus settings correctly. Right now, they're probably preset to some x86-compatible settings, which may not work for the RB532A.
Would you be willing to try a patch to
arch/mips/pci/pci-rc32434.c, to see if the VT6421A or SIL3112 could be initialized to get one of them working?
Before that, right now, I would suggest adding two (early?) PCI fixup handlers in
arch/mips/pci/fixup-rc32434.c, that do the same thing: dump the PCI configuration space register values,
static void dump_sil3112a(struct pci_dev *pdev)
{
u32 v;
int i;
for (i = 0; i <= 0xC4; i += 4) {
pci_read_config_dword(pdev, i, &v);
printk(KERN_INFO "SIL3112A [%x] = %x\n", i, v);
}
}
DECLARE_PCI_FIXUP_HEADER(0x1095, 0x3112, dump_sil3112a);
static void dump_vt6421a(struct pci_dev *pdev)
{
u32 v;
int i;
for (i = 0; i <= 0xD2; i += 4) {
pci_read_config_dword(pdev, i, &v);
printk(KERN_INFO "VT6421A [%x] = %x\n", i, v);
}
}
DECLARE_PCI_FIXUP_HEADER(0x1106, 0x3249, dump_vt6421a);
If the kernel locks up before you get the output, switch both to
DECLARE_PCI_FIXUP_EARLY –– although that might interfere with
printk().
For the SIL3112A, 10,14,18,1C,20 are the five IO BARs (and must have LSB set); 24 is the mem BAR the linux driver uses and should have low 10 bits clear; and 30 is the ROM address, and should have LSB clear (disabled).
For the VT6421A, 60 is boot ROM address, 70 shows PCI V2X base and limit, 88 primary SG base address, 8C secondary SG base address.
All the rest are useful too, because they can be compared to the default values shown in the datasheets. Knowing the values of all these, since the Linux kernel drivers only use a subset of the features so the rest can/should be left to chip defaults, a PCI fixup/early fixup can use a very similar loop to reconfigure the cards.
Another approach is to move from PCI fixups to
arch/mips/pci/pci-rc32434.c:rc32434_pcibridge_init(), and use a loop to detect and then initialize the cards' PCI registers as soon as the PCI bridge itself is initialized, just like the
korina PCI config registers for the SoC built-in ethernet.
I'd prefer the fixups myself, though. But, without knowing what the cards' PCI registers, without dumping the register contents as in the above addition, it's pretty much impossible to do because we don't yet know which registers get initialized to invalid values. (I suspect the ROM apertures, myself. For RB532A they most likely need to be disabled.)