bcm63xx: switch to Kernel 5.15 by default
[openwrt/staging/noltari.git] / target / linux / bcm63xx / patches-5.10 / 366-MIPS-BCM63XX-fallback-sprom-override-devid.patch
1 --- a/arch/mips/bcm63xx/sprom.c
2 +++ b/arch/mips/bcm63xx/sprom.c
3 @@ -384,6 +384,7 @@ static __initconst u16 bcm4331_sprom[] =
4 struct fallback_sprom_match {
5 u8 pci_bus;
6 u8 pci_dev;
7 + int override_devid;
8 struct ssb_sprom sprom;
9 };
10
11 @@ -399,6 +400,8 @@ int bcm63xx_get_fallback_ssb_sprom(struc
12 fallback_sprom.pci_bus, fallback_sprom.pci_dev,
13 bus->host_pci->bus->number,
14 PCI_SLOT(bus->host_pci->devfn));
15 + if (fallback_sprom.override_devid)
16 + bus->host_pci->device = fallback_sprom.sprom.dev_id;
17 memcpy(out, &fallback_sprom.sprom, sizeof(struct ssb_sprom));
18 return 0;
19 } else {
20 @@ -418,6 +421,8 @@ int bcm63xx_get_fallback_bcma_sprom(stru
21 fallback_sprom.pci_bus, fallback_sprom.pci_dev,
22 bus->host_pci->bus->number,
23 PCI_SLOT(bus->host_pci->devfn));
24 + if (fallback_sprom.override_devid)
25 + bus->host_pci->device = fallback_sprom.sprom.dev_id;
26 memcpy(out, &fallback_sprom.sprom, sizeof(struct ssb_sprom));
27 return 0;
28 } else {
29 @@ -965,6 +970,37 @@ static int sprom_extract(struct ssb_spro
30 return 0;
31 }
32
33 +int sprom_override_devid(struct fallback_sprom_data *data,
34 + struct ssb_sprom *out, const u16 *in)
35 +{
36 + switch (data->type) {
37 +#if defined(CONFIG_SSB_PCIHOST)
38 + case SPROM_BCM4306:
39 + case SPROM_BCM4318:
40 + case SPROM_BCM4321:
41 + case SPROM_BCM4322:
42 + case SPROM_BCM43222:
43 + SPEX(dev_id, SSB_SPROM1_PID, 0xFFFF, 0);
44 + return !!out->dev_id;
45 +#endif /* CONFIG_SSB_PCIHOST */
46 +#if defined(CONFIG_BCMA_HOST_PCI)
47 + case SPROM_BCM4313:
48 + case SPROM_BCM43131:
49 + case SPROM_BCM43217:
50 + case SPROM_BCM43225:
51 + case SPROM_BCM43227:
52 + case SPROM_BCM43228:
53 + case SPROM_BCM4331:
54 + SPEX(dev_id, 0x0060, 0xFFFF, 0);
55 + return !!out->dev_id;
56 +#endif /* CONFIG_BCMA_HOST_PCI */
57 + case SPROM_DEFAULT:
58 + return 0;
59 + }
60 +
61 + return 0;
62 +}
63 +
64 void sprom_apply_fixups(u16 *sprom, struct sprom_fixup *fixups, int n)
65 {
66 unsigned int i;
67 @@ -1056,6 +1092,11 @@ int __init bcm63xx_register_fallback_spr
68 data->num_board_fixups);
69
70 sprom_extract(&fallback_sprom.sprom, template_sprom, size);
71 +
72 + fallback_sprom.override_devid =
73 + sprom_override_devid(data, &fallback_sprom.sprom, template_sprom);
74 + } else {
75 + fallback_sprom.override_devid = 0;
76 }
77
78 memcpy(fallback_sprom.sprom.il0mac, data->mac_addr, ETH_ALEN);