810-bcma-ssb-fallback-sprom.patch 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. --- a/drivers/bcma/bcma_private.h
  2. +++ b/drivers/bcma/bcma_private.h
  3. @@ -38,6 +38,10 @@ int bcma_bus_resume(struct bcma_bus *bus
  4. void bcma_detect_chip(struct bcma_bus *bus);
  5. int bcma_bus_scan(struct bcma_bus *bus);
  6. +/* fallback-sprom.c */
  7. +int __init bcma_fbs_register(void);
  8. +int bcma_get_fallback_sprom(struct bcma_bus *dev, struct ssb_sprom *out);
  9. +
  10. /* sprom.c */
  11. int bcma_sprom_get(struct bcma_bus *bus);
  12. --- a/drivers/bcma/Kconfig
  13. +++ b/drivers/bcma/Kconfig
  14. @@ -18,6 +18,10 @@ config BCMA_BLOCKIO
  15. bool
  16. default y
  17. +config BCMA_FALLBACK_SPROM
  18. + bool
  19. + default y
  20. +
  21. config BCMA_HOST_PCI_POSSIBLE
  22. bool
  23. depends on PCI = y
  24. --- a/drivers/bcma/Makefile
  25. +++ b/drivers/bcma/Makefile
  26. @@ -11,6 +11,7 @@ bcma-$(CONFIG_BCMA_DRIVER_PCI_HOSTMODE)
  27. bcma-$(CONFIG_BCMA_DRIVER_MIPS) += driver_mips.o
  28. bcma-$(CONFIG_BCMA_DRIVER_GMAC_CMN) += driver_gmac_cmn.o
  29. bcma-$(CONFIG_BCMA_DRIVER_GPIO) += driver_gpio.o
  30. +bcma-$(CONFIG_BCMA_FALLBACK_SPROM) += fallback-sprom.o
  31. bcma-$(CONFIG_BCMA_HOST_PCI) += host_pci.o
  32. bcma-$(CONFIG_BCMA_HOST_SOC) += host_soc.o
  33. obj-$(CONFIG_BCMA) += bcma.o
  34. --- a/drivers/bcma/sprom.c
  35. +++ b/drivers/bcma/sprom.c
  36. @@ -51,21 +51,26 @@ static int bcma_fill_sprom_with_fallback
  37. {
  38. int err;
  39. - if (!get_fallback_sprom) {
  40. + if (get_fallback_sprom)
  41. + err = get_fallback_sprom(bus, out);
  42. +
  43. +#ifdef CONFIG_BCMA_FALLBACK_SPROM
  44. + if (!get_fallback_sprom || err)
  45. + err = bcma_get_fallback_sprom(bus, out);
  46. +#else
  47. + if (!get_fallback_sprom)
  48. err = -ENOENT;
  49. - goto fail;
  50. - }
  51. +#endif /* CONFIG_BCMA_FALLBACK_SPROM */
  52. - err = get_fallback_sprom(bus, out);
  53. - if (err)
  54. - goto fail;
  55. + if (err) {
  56. + bcma_warn(bus, "Using fallback SPROM failed (err %d)\n", err);
  57. + return err;
  58. + }
  59. bcma_debug(bus, "Using SPROM revision %d provided by platform.\n",
  60. bus->sprom.revision);
  61. +
  62. return 0;
  63. -fail:
  64. - bcma_warn(bus, "Using fallback SPROM failed (err %d)\n", err);
  65. - return err;
  66. }
  67. /**************************************************
  68. --- a/drivers/ssb/Kconfig
  69. +++ b/drivers/ssb/Kconfig
  70. @@ -25,6 +25,11 @@ if SSB
  71. config SSB_SPROM
  72. bool
  73. +config SSB_FALLBACK_SPROM
  74. + bool
  75. + depends on SSB_PCIHOST
  76. + default y
  77. +
  78. # Support for Block-I/O. SELECT this from the driver that needs it.
  79. config SSB_BLOCKIO
  80. bool
  81. --- a/drivers/ssb/Makefile
  82. +++ b/drivers/ssb/Makefile
  83. @@ -2,6 +2,7 @@
  84. # core
  85. ssb-y += main.o scan.o
  86. ssb-$(CONFIG_SSB_EMBEDDED) += embedded.o
  87. +ssb-$(CONFIG_SSB_FALLBACK_SPROM) += fallback-sprom.o
  88. ssb-$(CONFIG_SSB_SPROM) += sprom.o
  89. # host support
  90. --- a/drivers/ssb/sprom.c
  91. +++ b/drivers/ssb/sprom.c
  92. @@ -180,10 +180,20 @@ int ssb_arch_register_fallback_sprom(int
  93. int ssb_fill_sprom_with_fallback(struct ssb_bus *bus, struct ssb_sprom *out)
  94. {
  95. + int err;
  96. +
  97. + if (get_fallback_sprom)
  98. + err = get_fallback_sprom(bus, out);
  99. +
  100. +#ifdef CONFIG_SSB_FALLBACK_SPROM
  101. + if (!get_fallback_sprom || err)
  102. + err = ssb_get_fallback_sprom(bus, out);
  103. +#else
  104. if (!get_fallback_sprom)
  105. return -ENOENT;
  106. +#endif /* CONFIG_SSB_FALLBACK_SPROM */
  107. - return get_fallback_sprom(bus, out);
  108. + return err;
  109. }
  110. /* https://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */
  111. --- a/drivers/ssb/ssb_private.h
  112. +++ b/drivers/ssb/ssb_private.h
  113. @@ -143,6 +143,10 @@ extern int ssb_bus_scan(struct ssb_bus *
  114. extern void ssb_iounmap(struct ssb_bus *ssb);
  115. +/* fallback-sprom.c */
  116. +int __init ssb_fbs_register(void);
  117. +int ssb_get_fallback_sprom(struct ssb_bus *dev, struct ssb_sprom *out);
  118. +
  119. /* sprom.c */
  120. extern
  121. ssize_t ssb_attr_sprom_show(struct ssb_bus *bus, char *buf,
  122. --- a/drivers/bcma/main.c
  123. +++ b/drivers/bcma/main.c
  124. @@ -668,6 +668,14 @@ static int __init bcma_modinit(void)
  125. {
  126. int err;
  127. +#ifdef CONFIG_BCMA_FALLBACK_SPROM
  128. + err = bcma_fbs_register();
  129. + if (err) {
  130. + pr_err("Fallback SPROM initialization failed\n");
  131. + err = 0;
  132. + }
  133. +#endif /* CONFIG_BCMA_FALLBACK_SPROM */
  134. +
  135. err = bcma_init_bus_register();
  136. if (err)
  137. return err;
  138. --- a/drivers/ssb/main.c
  139. +++ b/drivers/ssb/main.c
  140. @@ -1287,6 +1287,14 @@ static int __init ssb_modinit(void)
  141. {
  142. int err;
  143. +#ifdef CONFIG_SSB_FALLBACK_SPROM
  144. + err = ssb_fbs_register();
  145. + if (err) {
  146. + pr_err("Fallback SPROM initialization failed\n");
  147. + err = 0;
  148. + }
  149. +#endif /* CONFIG_SSB_FALLBACK_SPROM */
  150. +
  151. /* See the comment at the ssb_is_early_boot definition */
  152. ssb_is_early_boot = 0;
  153. err = bus_register(&ssb_bustype);