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

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