026-bcma-from-3.20.patch 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. --- a/drivers/bcma/bcma_private.h
  2. +++ b/drivers/bcma/bcma_private.h
  3. @@ -23,22 +23,18 @@ struct bcma_bus;
  4. bool bcma_wait_value(struct bcma_device *core, u16 reg, u32 mask, u32 value,
  5. int timeout);
  6. void bcma_prepare_core(struct bcma_bus *bus, struct bcma_device *core);
  7. +void bcma_init_bus(struct bcma_bus *bus);
  8. int bcma_bus_register(struct bcma_bus *bus);
  9. void bcma_bus_unregister(struct bcma_bus *bus);
  10. -int __init bcma_bus_early_register(struct bcma_bus *bus,
  11. - struct bcma_device *core_cc,
  12. - struct bcma_device *core_mips);
  13. +int __init bcma_bus_early_register(struct bcma_bus *bus);
  14. #ifdef CONFIG_PM
  15. int bcma_bus_suspend(struct bcma_bus *bus);
  16. int bcma_bus_resume(struct bcma_bus *bus);
  17. #endif
  18. /* scan.c */
  19. +void bcma_detect_chip(struct bcma_bus *bus);
  20. int bcma_bus_scan(struct bcma_bus *bus);
  21. -int __init bcma_bus_scan_early(struct bcma_bus *bus,
  22. - struct bcma_device_id *match,
  23. - struct bcma_device *core);
  24. -void bcma_init_bus(struct bcma_bus *bus);
  25. /* sprom.c */
  26. int bcma_sprom_get(struct bcma_bus *bus);
  27. @@ -109,6 +105,14 @@ extern int bcma_chipco_watchdog_register
  28. #ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
  29. bool bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc);
  30. void bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc);
  31. +#else
  32. +static inline bool bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc)
  33. +{
  34. + return false;
  35. +}
  36. +static inline void bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc)
  37. +{
  38. +}
  39. #endif /* CONFIG_BCMA_DRIVER_PCI_HOSTMODE */
  40. #ifdef CONFIG_BCMA_DRIVER_GPIO
  41. --- a/drivers/bcma/driver_chipcommon.c
  42. +++ b/drivers/bcma/driver_chipcommon.c
  43. @@ -79,7 +79,9 @@ static int bcma_chipco_watchdog_ticks_pe
  44. if (cc->capabilities & BCMA_CC_CAP_PMU) {
  45. if (bus->chipinfo.id == BCMA_CHIP_ID_BCM4706)
  46. - /* 4706 CC and PMU watchdogs are clocked at 1/4 of ALP clock */
  47. + /* 4706 CC and PMU watchdogs are clocked at 1/4 of ALP
  48. + * clock
  49. + */
  50. return bcma_chipco_get_alp_clock(cc) / 4000;
  51. else
  52. /* based on 32KHz ILP clock */
  53. @@ -97,7 +99,8 @@ int bcma_chipco_watchdog_register(struct
  54. wdt.driver_data = cc;
  55. wdt.timer_set = bcma_chipco_watchdog_timer_set_wdt;
  56. wdt.timer_set_ms = bcma_chipco_watchdog_timer_set_ms_wdt;
  57. - wdt.max_timer_ms = bcma_chipco_watchdog_get_max_timer(cc) / cc->ticks_per_ms;
  58. + wdt.max_timer_ms =
  59. + bcma_chipco_watchdog_get_max_timer(cc) / cc->ticks_per_ms;
  60. pdev = platform_device_register_data(NULL, "bcm47xx-wdt",
  61. cc->core->bus->num, &wdt,
  62. @@ -175,7 +178,6 @@ void bcma_core_chipcommon_init(struct bc
  63. u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks)
  64. {
  65. u32 maxt;
  66. - enum bcma_clkmode clkmode;
  67. maxt = bcma_chipco_watchdog_get_max_timer(cc);
  68. if (cc->capabilities & BCMA_CC_CAP_PMU) {
  69. @@ -185,8 +187,13 @@ u32 bcma_chipco_watchdog_timer_set(struc
  70. ticks = maxt;
  71. bcma_cc_write32(cc, BCMA_CC_PMU_WATCHDOG, ticks);
  72. } else {
  73. - clkmode = ticks ? BCMA_CLKMODE_FAST : BCMA_CLKMODE_DYNAMIC;
  74. - bcma_core_set_clockmode(cc->core, clkmode);
  75. + struct bcma_bus *bus = cc->core->bus;
  76. +
  77. + if (bus->chipinfo.id != BCMA_CHIP_ID_BCM4707 &&
  78. + bus->chipinfo.id != BCMA_CHIP_ID_BCM53018)
  79. + bcma_core_set_clockmode(cc->core,
  80. + ticks ? BCMA_CLKMODE_FAST : BCMA_CLKMODE_DYNAMIC);
  81. +
  82. if (ticks > maxt)
  83. ticks = maxt;
  84. /* instant NMI */
  85. @@ -335,7 +342,8 @@ void bcma_chipco_serial_init(struct bcma
  86. | BCMA_CC_CORECTL_UARTCLKEN);
  87. }
  88. } else {
  89. - bcma_err(cc->core->bus, "serial not supported on this device ccrev: 0x%x\n", ccrev);
  90. + bcma_err(cc->core->bus, "serial not supported on this device ccrev: 0x%x\n",
  91. + ccrev);
  92. return;
  93. }
  94. --- a/drivers/bcma/driver_pci.c
  95. +++ b/drivers/bcma/driver_pci.c
  96. @@ -145,6 +145,47 @@ static u16 bcma_pcie_mdio_writeread(stru
  97. }
  98. /**************************************************
  99. + * Early init.
  100. + **************************************************/
  101. +
  102. +static void bcma_core_pci_fixcfg(struct bcma_drv_pci *pc)
  103. +{
  104. + struct bcma_device *core = pc->core;
  105. + u16 val16, core_index;
  106. + uint regoff;
  107. +
  108. + regoff = BCMA_CORE_PCI_SPROM(BCMA_CORE_PCI_SPROM_PI_OFFSET);
  109. + core_index = (u16)core->core_index;
  110. +
  111. + val16 = pcicore_read16(pc, regoff);
  112. + if (((val16 & BCMA_CORE_PCI_SPROM_PI_MASK) >> BCMA_CORE_PCI_SPROM_PI_SHIFT)
  113. + != core_index) {
  114. + val16 = (core_index << BCMA_CORE_PCI_SPROM_PI_SHIFT) |
  115. + (val16 & ~BCMA_CORE_PCI_SPROM_PI_MASK);
  116. + pcicore_write16(pc, regoff, val16);
  117. + }
  118. +}
  119. +
  120. +/*
  121. + * Apply some early fixes required before accessing SPROM.
  122. + * See also si_pci_fixcfg.
  123. + */
  124. +void bcma_core_pci_early_init(struct bcma_drv_pci *pc)
  125. +{
  126. + if (pc->early_setup_done)
  127. + return;
  128. +
  129. + pc->hostmode = bcma_core_pci_is_in_hostmode(pc);
  130. + if (pc->hostmode)
  131. + goto out;
  132. +
  133. + bcma_core_pci_fixcfg(pc);
  134. +
  135. +out:
  136. + pc->early_setup_done = true;
  137. +}
  138. +
  139. +/**************************************************
  140. * Workarounds.
  141. **************************************************/
  142. @@ -175,24 +216,6 @@ static void bcma_pcicore_serdes_workarou
  143. tmp & ~BCMA_CORE_PCI_PLL_CTRL_FREQDET_EN);
  144. }
  145. -static void bcma_core_pci_fixcfg(struct bcma_drv_pci *pc)
  146. -{
  147. - struct bcma_device *core = pc->core;
  148. - u16 val16, core_index;
  149. - uint regoff;
  150. -
  151. - regoff = BCMA_CORE_PCI_SPROM(BCMA_CORE_PCI_SPROM_PI_OFFSET);
  152. - core_index = (u16)core->core_index;
  153. -
  154. - val16 = pcicore_read16(pc, regoff);
  155. - if (((val16 & BCMA_CORE_PCI_SPROM_PI_MASK) >> BCMA_CORE_PCI_SPROM_PI_SHIFT)
  156. - != core_index) {
  157. - val16 = (core_index << BCMA_CORE_PCI_SPROM_PI_SHIFT) |
  158. - (val16 & ~BCMA_CORE_PCI_SPROM_PI_MASK);
  159. - pcicore_write16(pc, regoff, val16);
  160. - }
  161. -}
  162. -
  163. /* Fix MISC config to allow coming out of L2/L3-Ready state w/o PRST */
  164. /* Needs to happen when coming out of 'standby'/'hibernate' */
  165. static void bcma_core_pci_config_fixup(struct bcma_drv_pci *pc)
  166. @@ -216,7 +239,6 @@ static void bcma_core_pci_config_fixup(s
  167. static void bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc)
  168. {
  169. - bcma_core_pci_fixcfg(pc);
  170. bcma_pcicore_serdes_workaround(pc);
  171. bcma_core_pci_config_fixup(pc);
  172. }
  173. @@ -226,13 +248,11 @@ void bcma_core_pci_init(struct bcma_drv_
  174. if (pc->setup_done)
  175. return;
  176. -#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
  177. - pc->hostmode = bcma_core_pci_is_in_hostmode(pc);
  178. + bcma_core_pci_early_init(pc);
  179. +
  180. if (pc->hostmode)
  181. bcma_core_pci_hostmode_init(pc);
  182. -#endif /* CONFIG_BCMA_DRIVER_PCI_HOSTMODE */
  183. -
  184. - if (!pc->hostmode)
  185. + else
  186. bcma_core_pci_clientmode_init(pc);
  187. }
  188. --- a/drivers/bcma/host_pci.c
  189. +++ b/drivers/bcma/host_pci.c
  190. @@ -13,10 +13,12 @@
  191. static void bcma_host_pci_switch_core(struct bcma_device *core)
  192. {
  193. + int win2 = core->bus->host_is_pcie2 ?
  194. + BCMA_PCIE2_BAR0_WIN2 : BCMA_PCI_BAR0_WIN2;
  195. +
  196. pci_write_config_dword(core->bus->host_pci, BCMA_PCI_BAR0_WIN,
  197. core->addr);
  198. - pci_write_config_dword(core->bus->host_pci, BCMA_PCI_BAR0_WIN2,
  199. - core->wrap);
  200. + pci_write_config_dword(core->bus->host_pci, win2, core->wrap);
  201. core->bus->mapped_core = core;
  202. bcma_debug(core->bus, "Switched to core: 0x%X\n", core->id.id);
  203. }
  204. --- a/drivers/bcma/host_soc.c
  205. +++ b/drivers/bcma/host_soc.c
  206. @@ -193,7 +193,7 @@ int __init bcma_host_soc_init(struct bcm
  207. int err;
  208. /* Scan bus and initialize it */
  209. - err = bcma_bus_early_register(bus, &soc->core_cc, &soc->core_mips);
  210. + err = bcma_bus_early_register(bus);
  211. if (err)
  212. iounmap(bus->mmio);
  213. --- a/drivers/bcma/main.c
  214. +++ b/drivers/bcma/main.c
  215. @@ -268,6 +268,18 @@ void bcma_prepare_core(struct bcma_bus *
  216. }
  217. }
  218. +void bcma_init_bus(struct bcma_bus *bus)
  219. +{
  220. + mutex_lock(&bcma_buses_mutex);
  221. + bus->num = bcma_bus_next_num++;
  222. + mutex_unlock(&bcma_buses_mutex);
  223. +
  224. + INIT_LIST_HEAD(&bus->cores);
  225. + bus->nr_cores = 0;
  226. +
  227. + bcma_detect_chip(bus);
  228. +}
  229. +
  230. static void bcma_register_core(struct bcma_bus *bus, struct bcma_device *core)
  231. {
  232. int err;
  233. @@ -356,12 +368,19 @@ static void bcma_unregister_cores(struct
  234. struct bcma_device *core, *tmp;
  235. list_for_each_entry_safe(core, tmp, &bus->cores, list) {
  236. + if (!core->dev_registered)
  237. + continue;
  238. list_del(&core->list);
  239. - if (core->dev_registered)
  240. - device_unregister(&core->dev);
  241. + device_unregister(&core->dev);
  242. }
  243. if (bus->hosttype == BCMA_HOSTTYPE_SOC)
  244. platform_device_unregister(bus->drv_cc.watchdog);
  245. +
  246. + /* Now noone uses internally-handled cores, we can free them */
  247. + list_for_each_entry_safe(core, tmp, &bus->cores, list) {
  248. + list_del(&core->list);
  249. + kfree(core);
  250. + }
  251. }
  252. int bcma_bus_register(struct bcma_bus *bus)
  253. @@ -369,10 +388,6 @@ int bcma_bus_register(struct bcma_bus *b
  254. int err;
  255. struct bcma_device *core;
  256. - mutex_lock(&bcma_buses_mutex);
  257. - bus->num = bcma_bus_next_num++;
  258. - mutex_unlock(&bcma_buses_mutex);
  259. -
  260. /* Scan for devices (cores) */
  261. err = bcma_bus_scan(bus);
  262. if (err) {
  263. @@ -387,6 +402,13 @@ int bcma_bus_register(struct bcma_bus *b
  264. bcma_core_chipcommon_early_init(&bus->drv_cc);
  265. }
  266. + /* Early init PCIE core */
  267. + core = bcma_find_core(bus, BCMA_CORE_PCIE);
  268. + if (core) {
  269. + bus->drv_pci[0].core = core;
  270. + bcma_core_pci_early_init(&bus->drv_pci[0]);
  271. + }
  272. +
  273. /* Cores providing flash access go before SPROM init */
  274. list_for_each_entry(core, &bus->cores, list) {
  275. if (bcma_is_core_needed_early(core->id.id))
  276. @@ -459,7 +481,6 @@ int bcma_bus_register(struct bcma_bus *b
  277. void bcma_bus_unregister(struct bcma_bus *bus)
  278. {
  279. - struct bcma_device *cores[3];
  280. int err;
  281. err = bcma_gpio_unregister(&bus->drv_cc);
  282. @@ -470,46 +491,23 @@ void bcma_bus_unregister(struct bcma_bus
  283. bcma_core_chipcommon_b_free(&bus->drv_cc_b);
  284. - cores[0] = bcma_find_core(bus, BCMA_CORE_MIPS_74K);
  285. - cores[1] = bcma_find_core(bus, BCMA_CORE_PCIE);
  286. - cores[2] = bcma_find_core(bus, BCMA_CORE_4706_MAC_GBIT_COMMON);
  287. -
  288. bcma_unregister_cores(bus);
  289. -
  290. - kfree(cores[2]);
  291. - kfree(cores[1]);
  292. - kfree(cores[0]);
  293. }
  294. -int __init bcma_bus_early_register(struct bcma_bus *bus,
  295. - struct bcma_device *core_cc,
  296. - struct bcma_device *core_mips)
  297. +/*
  298. + * This is a special version of bus registration function designed for SoCs.
  299. + * It scans bus and performs basic initialization of main cores only.
  300. + * Please note it requires memory allocation, however it won't try to sleep.
  301. + */
  302. +int __init bcma_bus_early_register(struct bcma_bus *bus)
  303. {
  304. int err;
  305. struct bcma_device *core;
  306. - struct bcma_device_id match;
  307. -
  308. - match.manuf = BCMA_MANUF_BCM;
  309. - match.id = bcma_cc_core_id(bus);
  310. - match.class = BCMA_CL_SIM;
  311. - match.rev = BCMA_ANY_REV;
  312. - /* Scan for chip common core */
  313. - err = bcma_bus_scan_early(bus, &match, core_cc);
  314. - if (err) {
  315. - bcma_err(bus, "Failed to scan for common core: %d\n", err);
  316. - return -1;
  317. - }
  318. -
  319. - match.manuf = BCMA_MANUF_MIPS;
  320. - match.id = BCMA_CORE_MIPS_74K;
  321. - match.class = BCMA_CL_SIM;
  322. - match.rev = BCMA_ANY_REV;
  323. -
  324. - /* Scan for mips core */
  325. - err = bcma_bus_scan_early(bus, &match, core_mips);
  326. + /* Scan for devices (cores) */
  327. + err = bcma_bus_scan(bus);
  328. if (err) {
  329. - bcma_err(bus, "Failed to scan for mips core: %d\n", err);
  330. + bcma_err(bus, "Failed to scan bus: %d\n", err);
  331. return -1;
  332. }
  333. --- a/drivers/bcma/scan.c
  334. +++ b/drivers/bcma/scan.c
  335. @@ -435,15 +435,12 @@ static int bcma_get_next_core(struct bcm
  336. return 0;
  337. }
  338. -void bcma_init_bus(struct bcma_bus *bus)
  339. +void bcma_detect_chip(struct bcma_bus *bus)
  340. {
  341. s32 tmp;
  342. struct bcma_chipinfo *chipinfo = &(bus->chipinfo);
  343. char chip_id[8];
  344. - INIT_LIST_HEAD(&bus->cores);
  345. - bus->nr_cores = 0;
  346. -
  347. bcma_scan_switch_core(bus, BCMA_ADDR_BASE);
  348. tmp = bcma_scan_read32(bus, 0, BCMA_CC_ID);
  349. @@ -464,6 +461,10 @@ int bcma_bus_scan(struct bcma_bus *bus)
  350. int err, core_num = 0;
  351. + /* Skip if bus was already scanned (e.g. during early register) */
  352. + if (bus->nr_cores)
  353. + return 0;
  354. +
  355. erombase = bcma_scan_read32(bus, 0, BCMA_CC_EROM);
  356. if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
  357. eromptr = ioremap_nocache(erombase, BCMA_CORE_SIZE);
  358. @@ -519,64 +520,6 @@ int bcma_bus_scan(struct bcma_bus *bus)
  359. out:
  360. if (bus->hosttype == BCMA_HOSTTYPE_SOC)
  361. iounmap(eromptr);
  362. -
  363. - return err;
  364. -}
  365. -
  366. -int __init bcma_bus_scan_early(struct bcma_bus *bus,
  367. - struct bcma_device_id *match,
  368. - struct bcma_device *core)
  369. -{
  370. - u32 erombase;
  371. - u32 __iomem *eromptr, *eromend;
  372. -
  373. - int err = -ENODEV;
  374. - int core_num = 0;
  375. -
  376. - erombase = bcma_scan_read32(bus, 0, BCMA_CC_EROM);
  377. - if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
  378. - eromptr = ioremap_nocache(erombase, BCMA_CORE_SIZE);
  379. - if (!eromptr)
  380. - return -ENOMEM;
  381. - } else {
  382. - eromptr = bus->mmio;
  383. - }
  384. -
  385. - eromend = eromptr + BCMA_CORE_SIZE / sizeof(u32);
  386. -
  387. - bcma_scan_switch_core(bus, erombase);
  388. -
  389. - while (eromptr < eromend) {
  390. - memset(core, 0, sizeof(*core));
  391. - INIT_LIST_HEAD(&core->list);
  392. - core->bus = bus;
  393. -
  394. - err = bcma_get_next_core(bus, &eromptr, match, core_num, core);
  395. - if (err == -ENODEV) {
  396. - core_num++;
  397. - continue;
  398. - } else if (err == -ENXIO)
  399. - continue;
  400. - else if (err == -ESPIPE)
  401. - break;
  402. - else if (err < 0)
  403. - goto out;
  404. -
  405. - core->core_index = core_num++;
  406. - bus->nr_cores++;
  407. - bcma_info(bus, "Core %d found: %s (manuf 0x%03X, id 0x%03X, rev 0x%02X, class 0x%X)\n",
  408. - core->core_index, bcma_device_name(&core->id),
  409. - core->id.manuf, core->id.id, core->id.rev,
  410. - core->id.class);
  411. -
  412. - list_add_tail(&core->list, &bus->cores);
  413. - err = 0;
  414. - break;
  415. - }
  416. -
  417. -out:
  418. - if (bus->hosttype == BCMA_HOSTTYPE_SOC)
  419. - iounmap(eromptr);
  420. return err;
  421. }
  422. --- a/drivers/bcma/sprom.c
  423. +++ b/drivers/bcma/sprom.c
  424. @@ -579,7 +579,8 @@ int bcma_sprom_get(struct bcma_bus *bus)
  425. u16 offset = BCMA_CC_SPROM;
  426. u16 *sprom;
  427. size_t sprom_sizes[] = { SSB_SPROMSIZE_WORDS_R4,
  428. - SSB_SPROMSIZE_WORDS_R10, };
  429. + SSB_SPROMSIZE_WORDS_R10,
  430. + SSB_SPROMSIZE_WORDS_R11, };
  431. int i, err = 0;
  432. if (!bus->drv_cc.core)
  433. --- a/include/linux/bcma/bcma.h
  434. +++ b/include/linux/bcma/bcma.h
  435. @@ -319,6 +319,7 @@ struct bcma_bus {
  436. const struct bcma_host_ops *ops;
  437. enum bcma_hosttype hosttype;
  438. + bool host_is_pcie2; /* Used for BCMA_HOSTTYPE_PCI only */
  439. union {
  440. /* Pointer to the PCI bus (only for BCMA_HOSTTYPE_PCI) */
  441. struct pci_dev *host_pci;
  442. --- a/include/linux/bcma/bcma_driver_pci.h
  443. +++ b/include/linux/bcma/bcma_driver_pci.h
  444. @@ -223,6 +223,7 @@ struct bcma_drv_pci_host {
  445. struct bcma_drv_pci {
  446. struct bcma_device *core;
  447. + u8 early_setup_done:1;
  448. u8 setup_done:1;
  449. u8 hostmode:1;
  450. @@ -237,6 +238,7 @@ struct bcma_drv_pci {
  451. #define pcicore_write16(pc, offset, val) bcma_write16((pc)->core, offset, val)
  452. #define pcicore_write32(pc, offset, val) bcma_write32((pc)->core, offset, val)
  453. +extern void bcma_core_pci_early_init(struct bcma_drv_pci *pc);
  454. extern void bcma_core_pci_init(struct bcma_drv_pci *pc);
  455. extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc,
  456. struct bcma_device *core, bool enable);
  457. --- a/include/linux/bcma/bcma_regs.h
  458. +++ b/include/linux/bcma/bcma_regs.h
  459. @@ -64,6 +64,8 @@
  460. #define BCMA_PCI_GPIO_XTAL 0x40 /* PCI config space GPIO 14 for Xtal powerup */
  461. #define BCMA_PCI_GPIO_PLL 0x80 /* PCI config space GPIO 15 for PLL powerdown */
  462. +#define BCMA_PCIE2_BAR0_WIN2 0x70
  463. +
  464. /* SiliconBackplane Address Map.
  465. * All regions may not exist on all chips.
  466. */
  467. --- a/include/linux/bcma/bcma_soc.h
  468. +++ b/include/linux/bcma/bcma_soc.h
  469. @@ -5,8 +5,6 @@
  470. struct bcma_soc {
  471. struct bcma_bus bus;
  472. - struct bcma_device core_cc;
  473. - struct bcma_device core_mips;
  474. };
  475. int __init bcma_host_soc_register(struct bcma_soc *soc);
  476. --- a/include/linux/ssb/ssb_regs.h
  477. +++ b/include/linux/ssb/ssb_regs.h
  478. @@ -173,6 +173,7 @@
  479. #define SSB_SPROMSIZE_BYTES_R123 (SSB_SPROMSIZE_WORDS_R123 * sizeof(u16))
  480. #define SSB_SPROMSIZE_BYTES_R4 (SSB_SPROMSIZE_WORDS_R4 * sizeof(u16))
  481. #define SSB_SPROMSIZE_WORDS_R10 230
  482. +#define SSB_SPROMSIZE_WORDS_R11 234
  483. #define SSB_SPROM_BASE1 0x1000
  484. #define SSB_SPROM_BASE31 0x0800
  485. #define SSB_SPROM_REVISION 0x007E