Initial commit
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
--- a/arch/mips/bcm63xx/sprom.c
|
||||
+++ b/arch/mips/bcm63xx/sprom.c
|
||||
@@ -384,6 +384,7 @@ static __initconst u16 bcm4331_sprom[] =
|
||||
struct fallback_sprom_match {
|
||||
u8 pci_bus;
|
||||
u8 pci_dev;
|
||||
+ int override_devid;
|
||||
struct ssb_sprom sprom;
|
||||
};
|
||||
|
||||
@@ -399,6 +400,8 @@ int bcm63xx_get_fallback_ssb_sprom(struc
|
||||
fallback_sprom.pci_bus, fallback_sprom.pci_dev,
|
||||
bus->host_pci->bus->number,
|
||||
PCI_SLOT(bus->host_pci->devfn));
|
||||
+ if (fallback_sprom.override_devid)
|
||||
+ bus->host_pci->device = fallback_sprom.sprom.dev_id;
|
||||
memcpy(out, &fallback_sprom.sprom, sizeof(struct ssb_sprom));
|
||||
return 0;
|
||||
} else {
|
||||
@@ -418,6 +421,8 @@ int bcm63xx_get_fallback_bcma_sprom(stru
|
||||
fallback_sprom.pci_bus, fallback_sprom.pci_dev,
|
||||
bus->host_pci->bus->number,
|
||||
PCI_SLOT(bus->host_pci->devfn));
|
||||
+ if (fallback_sprom.override_devid)
|
||||
+ bus->host_pci->device = fallback_sprom.sprom.dev_id;
|
||||
memcpy(out, &fallback_sprom.sprom, sizeof(struct ssb_sprom));
|
||||
return 0;
|
||||
} else {
|
||||
@@ -965,6 +970,37 @@ static int sprom_extract(struct ssb_spro
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int sprom_override_devid(struct fallback_sprom_data *data,
|
||||
+ struct ssb_sprom *out, const u16 *in)
|
||||
+{
|
||||
+ switch (data->type) {
|
||||
+#if defined(CONFIG_SSB_PCIHOST)
|
||||
+ case SPROM_BCM4306:
|
||||
+ case SPROM_BCM4318:
|
||||
+ case SPROM_BCM4321:
|
||||
+ case SPROM_BCM4322:
|
||||
+ case SPROM_BCM43222:
|
||||
+ SPEX(dev_id, SSB_SPROM1_PID, 0xFFFF, 0);
|
||||
+ return !!out->dev_id;
|
||||
+#endif /* CONFIG_SSB_PCIHOST */
|
||||
+#if defined(CONFIG_BCMA_HOST_PCI)
|
||||
+ case SPROM_BCM4313:
|
||||
+ case SPROM_BCM43131:
|
||||
+ case SPROM_BCM43217:
|
||||
+ case SPROM_BCM43225:
|
||||
+ case SPROM_BCM43227:
|
||||
+ case SPROM_BCM43228:
|
||||
+ case SPROM_BCM4331:
|
||||
+ SPEX(dev_id, 0x0060, 0xFFFF, 0);
|
||||
+ return !!out->dev_id;
|
||||
+#endif /* CONFIG_BCMA_HOST_PCI */
|
||||
+ case SPROM_DEFAULT:
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
void sprom_apply_fixups(u16 *sprom, struct sprom_fixup *fixups, int n)
|
||||
{
|
||||
unsigned int i;
|
||||
@@ -1056,6 +1092,11 @@ int __init bcm63xx_register_fallback_spr
|
||||
data->num_board_fixups);
|
||||
|
||||
sprom_extract(&fallback_sprom.sprom, template_sprom, size);
|
||||
+
|
||||
+ fallback_sprom.override_devid =
|
||||
+ sprom_override_devid(data, &fallback_sprom.sprom, template_sprom);
|
||||
+ } else {
|
||||
+ fallback_sprom.override_devid = 0;
|
||||
}
|
||||
|
||||
memcpy(fallback_sprom.sprom.il0mac, data->mac_addr, ETH_ALEN);
|
||||
Reference in New Issue
Block a user