diff options
author | Hauke Mehrtens <hauke@hauke-m.de> | 2012-04-28 20:18:51 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-05-16 12:45:22 -0400 |
commit | ec00f3732129e57206e9ef9883d681ad6584f5dd (patch) | |
tree | 10428396e10003891439eba40634c4f9cb304ea7 /drivers/bcma/driver_pci.c | |
parent | 29f6b3d823885093890b1604d8450e7b57a31281 (diff) |
bcma: add bcma_core_pci_fixcfg()
This code is based on code from pcicore_fixcfg() in brcmsmac. This
patch is part of the move of pci specific code from brcmsmac to bcma.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Tested-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/bcma/driver_pci.c')
-rw-r--r-- | drivers/bcma/driver_pci.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/bcma/driver_pci.c b/drivers/bcma/driver_pci.c index 949206674dc8..472d14fad643 100644 --- a/drivers/bcma/driver_pci.c +++ b/drivers/bcma/driver_pci.c | |||
@@ -168,12 +168,31 @@ static void bcma_pcicore_serdes_workaround(struct bcma_drv_pci *pc) | |||
168 | tmp & ~BCMA_CORE_PCI_PLL_CTRL_FREQDET_EN); | 168 | tmp & ~BCMA_CORE_PCI_PLL_CTRL_FREQDET_EN); |
169 | } | 169 | } |
170 | 170 | ||
171 | static void bcma_core_pci_fixcfg(struct bcma_drv_pci *pc) | ||
172 | { | ||
173 | struct bcma_device *core = pc->core; | ||
174 | u16 val16, core_index; | ||
175 | uint regoff; | ||
176 | |||
177 | regoff = BCMA_CORE_PCI_SPROM(BCMA_CORE_PCI_SPROM_PI_OFFSET); | ||
178 | core_index = (u16)core->core_index; | ||
179 | |||
180 | val16 = pcicore_read16(pc, regoff); | ||
181 | if (((val16 & BCMA_CORE_PCI_SPROM_PI_MASK) >> BCMA_CORE_PCI_SPROM_PI_SHIFT) | ||
182 | != core_index) { | ||
183 | val16 = (core_index << BCMA_CORE_PCI_SPROM_PI_SHIFT) | | ||
184 | (val16 & ~BCMA_CORE_PCI_SPROM_PI_MASK); | ||
185 | pcicore_write16(pc, regoff, val16); | ||
186 | } | ||
187 | } | ||
188 | |||
171 | /************************************************** | 189 | /************************************************** |
172 | * Init. | 190 | * Init. |
173 | **************************************************/ | 191 | **************************************************/ |
174 | 192 | ||
175 | static void __devinit bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc) | 193 | static void __devinit bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc) |
176 | { | 194 | { |
195 | bcma_core_pci_fixcfg(pc); | ||
177 | bcma_pcicore_serdes_workaround(pc); | 196 | bcma_pcicore_serdes_workaround(pc); |
178 | } | 197 | } |
179 | 198 | ||