ambapp.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. /*
  2. * (C) Copyright 2007
  3. * Daniel Hellstrom, Gaisler Research, daniel@gaisler.com.
  4. *
  5. * SPDX-License-Identifier: GPL-2.0+
  6. */
  7. /*
  8. * AMBA Plug&Play information list command
  9. *
  10. */
  11. #include <common.h>
  12. #include <command.h>
  13. #include <ambapp.h>
  14. DECLARE_GLOBAL_DATA_PTR;
  15. typedef struct {
  16. int device_id;
  17. char *name;
  18. char *desc;
  19. } ambapp_device_name;
  20. typedef struct {
  21. unsigned int vendor_id;
  22. char *name;
  23. char *desc;
  24. ambapp_device_name *devices;
  25. } ambapp_vendor_devnames;
  26. /** Vendor GAISLER devices */
  27. static ambapp_device_name GAISLER_devices[] = {
  28. {GAISLER_LEON2DSU, "LEON2DSU", "Leon2 Debug Support Unit"},
  29. {GAISLER_LEON3, "LEON3", "Leon3 SPARC V8 Processor"},
  30. {GAISLER_LEON3DSU, "LEON3DSU", "Leon3 Debug Support Unit"},
  31. {GAISLER_ETHAHB, "ETHAHB", "OC ethernet AHB interface"},
  32. {GAISLER_APBMST, "APBMST", "AHB/APB Bridge"},
  33. {GAISLER_AHBUART, "AHBUART", "AHB Debug UART"},
  34. {GAISLER_SRCTRL, "SRCTRL", "Simple SRAM Controller"},
  35. {GAISLER_SDCTRL, "SDCTRL", "PC133 SDRAM Controller"},
  36. {GAISLER_SSRCTRL, "SSRCTRL", "Synchronous SRAM Controller"},
  37. {GAISLER_APBUART, "APBUART", "Generic UART"},
  38. {GAISLER_IRQMP, "IRQMP", "Multi-processor Interrupt Ctrl."},
  39. {GAISLER_AHBRAM, "AHBRAM", "Single-port AHB SRAM module"},
  40. {GAISLER_AHBDPRAM, "AHBDPRAM", "Dual-port AHB SRAM module"},
  41. {GAISLER_GPTIMER, "GPTIMER", "Modular Timer Unit"},
  42. {GAISLER_PCITRG, "PCITRG", "Simple 32-bit PCI Target"},
  43. {GAISLER_PCISBRG, "PCISBRG", "Simple 32-bit PCI Bridge"},
  44. {GAISLER_PCIFBRG, "PCIFBRG", "Fast 32-bit PCI Bridge"},
  45. {GAISLER_PCITRACE, "PCITRACE", "32-bit PCI Trace Buffer"},
  46. {GAISLER_DMACTRL, "DMACTRL", "AMBA DMA controller"},
  47. {GAISLER_AHBTRACE, "AHBTRACE", "AMBA Trace Buffer"},
  48. {GAISLER_DSUCTRL, "DSUCTRL", "DSU/ETH controller"},
  49. {GAISLER_CANAHB, "CANAHB", "OC CAN AHB interface"},
  50. {GAISLER_GPIO, "GPIO", "General Purpose I/O port"},
  51. {GAISLER_AHBROM, "AHBROM", "Generic AHB ROM"},
  52. {GAISLER_AHBJTAG, "AHBJTAG", "JTAG Debug Link"},
  53. {GAISLER_ETHMAC, "ETHMAC", "GR Ethernet MAC"},
  54. {GAISLER_SWNODE, "SWNODE", "SpaceWire Node Interface"},
  55. {GAISLER_SPW, "SPW", "SpaceWire Serial Link"},
  56. {GAISLER_AHB2AHB, "AHB2AHB", "AHB-to-AHB Bridge"},
  57. {GAISLER_USBDC, "USBDC", "GR USB 2.0 Device Controller"},
  58. {GAISLER_USB_DCL, "USB_DCL", "USB Debug Communication Link"},
  59. {GAISLER_DDRMP, "DDRMP", "Multi-port DDR controller"},
  60. {GAISLER_ATACTRL, "ATACTRL", "ATA controller"},
  61. {GAISLER_DDRSP, "DDRSP", "Single-port DDR266 controller"},
  62. {GAISLER_EHCI, "EHCI", "USB Enhanced Host Controller"},
  63. {GAISLER_UHCI, "UHCI", "USB Universal Host Controller"},
  64. {GAISLER_I2CMST, "I2CMST", "AMBA Wrapper for OC I2C-master"},
  65. {GAISLER_SPW2, "SPW2", "GRSPW2 SpaceWire Serial Link"},
  66. {GAISLER_AHBDMA, "AHBDMA", ""},
  67. {GAISLER_NUHOSP3, "NUHOSP3", "Nuhorizons Spartan3 IO I/F"},
  68. {GAISLER_CLKGATE, "CLKGATE", "Clock gating unit"},
  69. {GAISLER_SPICTRL, "SPICTRL", "SPI Controller"},
  70. {GAISLER_DDR2SP, "DDR2SP", "Single-port DDR2 controller"},
  71. {GAISLER_SLINK, "SLINK", "SLINK Master"},
  72. {GAISLER_GRTM, "GRTM", "CCSDS Telemetry Encoder"},
  73. {GAISLER_GRTC, "GRTC", "CCSDS Telecommand Decoder"},
  74. {GAISLER_GRPW, "GRPW", "PacketWire to AMBA AHB I/F"},
  75. {GAISLER_GRCTM, "GRCTM", "CCSDS Time Manager"},
  76. {GAISLER_GRHCAN, "GRHCAN", "ESA HurriCANe CAN with DMA"},
  77. {GAISLER_GRFIFO, "GRFIFO", "FIFO Controller"},
  78. {GAISLER_GRADCDAC, "GRADCDAC", "ADC / DAC Interface"},
  79. {GAISLER_GRPULSE, "GRPULSE", "General Purpose I/O with Pulses"},
  80. {GAISLER_GRTIMER, "GRTIMER", "Timer Unit with Latches"},
  81. {GAISLER_AHB2PP, "AHB2PP", "AMBA AHB to Packet Parallel I/F"},
  82. {GAISLER_GRVERSION, "GRVERSION", "Version and Revision Register"},
  83. {GAISLER_APB2PW, "APB2PW", "PacketWire Transmit Interface"},
  84. {GAISLER_PW2APB, "PW2APB", "PacketWire Receive Interface"},
  85. {GAISLER_GRCAN, "GRCAN", "CAN Controller with DMA"},
  86. {GAISLER_I2CSLV, "I2CSLV", "I2C Slave"},
  87. {GAISLER_U16550, "U16550", "Simple 16550 UART"},
  88. {GAISLER_AHBMST_EM, "AHBMST_EM", "AMBA Master Emulator"},
  89. {GAISLER_AHBSLV_EM, "AHBSLV_EM", "AMBA Slave Emulator"},
  90. {GAISLER_GRTESTMOD, "GRTESTMOD", "Test report module"},
  91. {GAISLER_ASCS, "ASCS", "ASCS Master"},
  92. {GAISLER_IPMVBCTRL, "IPMVBCTRL", "IPM-bus/MVBC memory controller"},
  93. {GAISLER_SPIMCTRL, "SPIMCTRL", "SPI Memory Controller"},
  94. {GAISLER_L4STAT, "L4STAT", "Leon4 Statistics Module"},
  95. {GAISLER_LEON4, "LEON4", "Leon4 SPARC V8 Processor"},
  96. {GAISLER_LEON4DSU, "LEON4DSU", "Leon4 Debug Support Unit"},
  97. {GAISLER_PWM, "PWM", "PWM generator"},
  98. {GAISLER_L2CACHE, "L2CACHE", "L2-Cache Controller"},
  99. {GAISLER_SDCTRL64, "SDCTRL64", "64-bit PC133 SDRAM Controller"},
  100. {GAISLER_GR1553B, "GR1553B", "MIL-STD-1553B Interface"},
  101. {GAISLER_1553TST, "1553TST", "MIL-STD-1553B Test Device"},
  102. {GAISLER_GRIOMMU, "GRIOMMU", "I/O Memory Management Unit"},
  103. {GAISLER_FTAHBRAM, "FTAHBRAM", "Generic FT AHB SRAM module"},
  104. {GAISLER_FTSRCTRL, "FTSRCTRL", "Simple FT SRAM Controller"},
  105. {GAISLER_AHBSTAT, "AHBSTAT", "AHB Status Register"},
  106. {GAISLER_LEON3FT, "LEON3FT", "Leon3-FT SPARC V8 Processor"},
  107. {GAISLER_FTMCTRL, "FTMCTRL", "Memory controller with EDAC"},
  108. {GAISLER_FTSDCTRL, "FTSDCTRL", "FT PC133 SDRAM Controller"},
  109. {GAISLER_FTSRCTRL8, "FTSRCTRL8", "FT 8-bit SRAM/16-bit IO Ctrl"},
  110. {GAISLER_MEMSCRUB, "MEMSCRUB", "AHB Memory Scrubber"},
  111. {GAISLER_FTSDCTRL64, "FTSDCTRL64", "64-bit FT SDRAM Controller"},
  112. {GAISLER_APBPS2, "APBPS2", "PS2 interface"},
  113. {GAISLER_VGACTRL, "VGACTRL", "VGA controller"},
  114. {GAISLER_LOGAN, "LOGAN", "On chip Logic Analyzer"},
  115. {GAISLER_SVGACTRL, "SVGACTRL", "SVGA frame buffer"},
  116. {GAISLER_T1AHB, "T1AHB", "Niagara T1 PCX/AHB bridge"},
  117. {GAISLER_MP7WRAP, "MP7WRAP", "CoreMP7 wrapper"},
  118. {GAISLER_GRSYSMON, "GRSYSMON", "AMBA wrapper for System Monitor"},
  119. {GAISLER_GRACECTRL, "GRACECTRL", "System ACE I/F Controller"},
  120. {GAISLER_ATAHBSLV, "ATAHBSLV", "AMBA Test Framework AHB Slave"},
  121. {GAISLER_ATAHBMST, "ATAHBMST", "AMBA Test Framework AHB Master"},
  122. {GAISLER_ATAPBSLV, "ATAPBSLV", "AMBA Test Framework APB Slave"},
  123. {GAISLER_B1553BC, "B1553BC", "AMBA Wrapper for Core1553BBC"},
  124. {GAISLER_B1553RT, "B1553RT", "AMBA Wrapper for Core1553BRT"},
  125. {GAISLER_B1553BRM, "B1553BRM", "AMBA Wrapper for Core1553BRM"},
  126. {GAISLER_AES, "AES", "Advanced Encryption Standard"},
  127. {GAISLER_ECC, "ECC", "Elliptic Curve Cryptography"},
  128. {GAISLER_PCIF, "PCIF", "AMBA Wrapper for CorePCIF"},
  129. {GAISLER_CLKMOD, "CLKMOD", "CPU Clock Switching Ctrl module"},
  130. {GAISLER_HAPSTRAK, "HAPSTRAK", "HAPS HapsTrak I/O Port"},
  131. {GAISLER_TEST_1X2, "TEST_1X2", "HAPS TEST_1x2 interface"},
  132. {GAISLER_WILD2AHB, "WILD2AHB", "WildCard CardBus interface"},
  133. {GAISLER_BIO1, "BIO1", "Basic I/O board BIO1"},
  134. {GAISLER_AESDMA, "AESDMA", "AES 256 DMA"},
  135. {GAISLER_SATCAN, "SATCAN", "SatCAN controller"},
  136. {GAISLER_CANMUX, "CANMUX", "CAN Bus multiplexer"},
  137. {GAISLER_GRTMRX, "GRTMRX", "CCSDS Telemetry Receiver"},
  138. {GAISLER_GRTCTX, "GRTCTX", "CCSDS Telecommand Transmitter"},
  139. {GAISLER_GRTMDESC, "GRTMDESC", "CCSDS Telemetry Descriptor"},
  140. {GAISLER_GRTMVC, "GRTMVC", "CCSDS Telemetry VC Generator"},
  141. {GAISLER_GEFFE, "GEFFE", "Geffe Generator"},
  142. {GAISLER_GPREG, "GPREG", "General Purpose Register"},
  143. {GAISLER_GRTMPAHB, "GRTMPAHB", "CCSDS Telemetry VC AHB Input"},
  144. {GAISLER_SPWCUC, "SPWCUC", "CCSDS CUC / SpaceWire I/F"},
  145. {GAISLER_SPW2_DMA, "SPW2_DMA", "GRSPW Router DMA interface"},
  146. {GAISLER_SPWROUTER, "SPWROUTER", "GRSPW Router"},
  147. {0, NULL, NULL}
  148. };
  149. /** Vendor PENDER devices */
  150. static ambapp_device_name PENDER_devices[] = {
  151. {0, NULL, NULL}
  152. };
  153. /** Vendor ESA devices */
  154. static ambapp_device_name ESA_devices[] = {
  155. {ESA_LEON2, "LEON2", "Leon2 SPARC V8 Processor"},
  156. {ESA_LEON2APB, "LEON2APB", "Leon2 Peripheral Bus"},
  157. {ESA_IRQ, "IRQ", "Leon2 Interrupt Controller"},
  158. {ESA_TIMER, "TIMER", "Leon2 Timer"},
  159. {ESA_UART, "UART", "Leon2 UART"},
  160. {ESA_CFG, "CFG", "Leon2 Configuration Register"},
  161. {ESA_IO, "IO", "Leon2 Input/Output"},
  162. {ESA_MCTRL, "MCTRL", "Leon2 Memory Controller"},
  163. {ESA_PCIARB, "PCIARB", "PCI Arbiter"},
  164. {ESA_HURRICANE, "HURRICANE", "HurriCANe/HurryAMBA CAN Ctrl"},
  165. {ESA_SPW_RMAP, "SPW_RMAP", "UoD/Saab SpaceWire/RMAP link"},
  166. {ESA_AHBUART, "AHBUART", "Leon2 AHB Debug UART"},
  167. {ESA_SPWA, "SPWA", "ESA/ASTRIUM SpaceWire link"},
  168. {ESA_BOSCHCAN, "BOSCHCAN", "SSC/BOSCH CAN Ctrl"},
  169. {ESA_IRQ2, "IRQ2", "Leon2 Secondary Irq Controller"},
  170. {ESA_AHBSTAT, "AHBSTAT", "Leon2 AHB Status Register"},
  171. {ESA_WPROT, "WPROT", "Leon2 Write Protection"},
  172. {ESA_WPROT2, "WPROT2", "Leon2 Extended Write Protection"},
  173. {ESA_PDEC3AMBA, "PDEC3AMBA", "ESA CCSDS PDEC3AMBA TC Decoder"},
  174. {ESA_PTME3AMBA, "PTME3AMBA", "ESA CCSDS PTME3AMBA TM Encoder"},
  175. {0, NULL, NULL}
  176. };
  177. /** Vendor ASTRIUM devices */
  178. static ambapp_device_name ASTRIUM_devices[] = {
  179. {0, NULL, NULL}
  180. };
  181. /** Vendor OPENCHIP devices */
  182. static ambapp_device_name OPENCHIP_devices[] = {
  183. {OPENCHIP_APBGPIO, "APBGPIO", "APB General Purpose IO"},
  184. {OPENCHIP_APBI2C, "APBI2C", "APB I2C Interface"},
  185. {OPENCHIP_APBSPI, "APBSPI", "APB SPI Interface"},
  186. {OPENCHIP_APBCHARLCD, "APBCHARLCD", "APB Character LCD"},
  187. {OPENCHIP_APBPWM, "APBPWM", "APB PWM"},
  188. {OPENCHIP_APBPS2, "APBPS2", "APB PS/2 Interface"},
  189. {OPENCHIP_APBMMCSD, "APBMMCSD", "APB MMC/SD Card Interface"},
  190. {OPENCHIP_APBNAND, "APBNAND", "APB NAND(SmartMedia) Interface"},
  191. {OPENCHIP_APBLPC, "APBLPC", "APB LPC Interface"},
  192. {OPENCHIP_APBCF, "APBCF", "APB CompactFlash (IDE)"},
  193. {OPENCHIP_APBSYSACE, "APBSYSACE", "APB SystemACE Interface"},
  194. {OPENCHIP_APB1WIRE, "APB1WIRE", "APB 1-Wire Interface"},
  195. {OPENCHIP_APBJTAG, "APBJTAG", "APB JTAG TAP Master"},
  196. {OPENCHIP_APBSUI, "APBSUI", "APB Simple User Interface"},
  197. {0, NULL, NULL}
  198. };
  199. /** Vendor OPENCORES devices */
  200. static ambapp_device_name OPENCORES_devices[] = {
  201. {OPENCORES_PCIBR, "PCIBR", "PCI Bridge"},
  202. {OPENCORES_ETHMAC, "ETHMAC", "Ethernet MAC"},
  203. {0, NULL}
  204. };
  205. /** Vendor CONTRIB devices */
  206. static ambapp_device_name CONTRIB_devices[] = {
  207. {CONTRIB_CORE1, "CORE1", "Contributed core 1"},
  208. {CONTRIB_CORE2, "CORE2", "Contributed core 2"},
  209. {0, NULL, NULL}
  210. };
  211. /** Vendor EONIC devices */
  212. static ambapp_device_name EONIC_devices[] = {
  213. {0, NULL, NULL}
  214. };
  215. /** Vendor RADIONOR devices */
  216. static ambapp_device_name RADIONOR_devices[] = {
  217. {0, NULL, NULL}
  218. };
  219. /** Vendor GLEICHMANN devices */
  220. static ambapp_device_name GLEICHMANN_devices[] = {
  221. {GLEICHMANN_CUSTOM, "CUSTOM", "Custom device"},
  222. {GLEICHMANN_GEOLCD01, "GEOLCD01", "GEOLCD01 graphics system"},
  223. {GLEICHMANN_DAC, "DAC", "Sigma delta DAC"},
  224. {GLEICHMANN_HPI, "HPI", "AHB-to-HPI bridge"},
  225. {GLEICHMANN_SPI, "SPI", "SPI master"},
  226. {GLEICHMANN_HIFC, "HIFC", "Human interface controller"},
  227. {GLEICHMANN_ADCDAC, "ADCDAC", "Sigma delta ADC/DAC"},
  228. {GLEICHMANN_SPIOC, "SPIOC", ""},
  229. {GLEICHMANN_AC97, "AC97", ""},
  230. {0, NULL, NULL}
  231. };
  232. /** Vendor MENTA devices */
  233. static ambapp_device_name MENTA_devices[] = {
  234. {0, NULL, NULL}
  235. };
  236. /** Vendor SUN devices */
  237. static ambapp_device_name SUN_devices[] = {
  238. {SUN_T1, "T1", "Niagara T1 SPARC V9 Processor"},
  239. {SUN_S1, "S1", "Niagara S1 SPARC V9 Processor"},
  240. {0, NULL, NULL}
  241. };
  242. /** Vendor MOVIDIA devices */
  243. static ambapp_device_name MOVIDIA_devices[] = {
  244. {0, NULL, NULL}
  245. };
  246. /** Vendor ORBITA devices */
  247. static ambapp_device_name ORBITA_devices[] = {
  248. {ORBITA_1553B, "1553B", "MIL-STD-1553B Controller"},
  249. {ORBITA_429, "429", "429 Interface"},
  250. {ORBITA_SPI, "SPI", "SPI Interface"},
  251. {ORBITA_I2C, "I2C", "I2C Interface"},
  252. {ORBITA_SMARTCARD, "SMARTCARD", "Smart Card Reader"},
  253. {ORBITA_SDCARD, "SDCARD", "SD Card Reader"},
  254. {ORBITA_UART16550, "UART16550", "16550 UART"},
  255. {ORBITA_CRYPTO, "CRYPTO", "Crypto Engine"},
  256. {ORBITA_SYSIF, "SYSIF", "System Interface"},
  257. {ORBITA_PIO, "PIO", "Programmable IO module"},
  258. {ORBITA_RTC, "RTC", "Real-Time Clock"},
  259. {ORBITA_COLORLCD, "COLORLCD", "Color LCD Controller"},
  260. {ORBITA_PCI, "PCI", "PCI Module"},
  261. {ORBITA_DSP, "DSP", "DPS Co-Processor"},
  262. {ORBITA_USBHOST, "USBHOST", "USB Host"},
  263. {ORBITA_USBDEV, "USBDEV", "USB Device"},
  264. {0, NULL, NULL}
  265. };
  266. /** Vendor SYNOPSYS devices */
  267. static ambapp_device_name SYNOPSYS_devices[] = {
  268. {0, NULL, NULL}
  269. };
  270. /** Vendor NASA devices */
  271. static ambapp_device_name NASA_devices[] = {
  272. {NASA_EP32, "EP32", "EP32 Forth processor"},
  273. {0, NULL, NULL}
  274. };
  275. /** Vendor CAL devices */
  276. static ambapp_device_name CAL_devices[] = {
  277. {CAL_DDRCTRL, "DDRCTRL", ""},
  278. {0, NULL, NULL}
  279. };
  280. /** Vendor EMBEDDIT devices */
  281. static ambapp_device_name EMBEDDIT_devices[] = {
  282. {0, NULL, NULL}
  283. };
  284. /** Vendor CETON devices */
  285. static ambapp_device_name CETON_devices[] = {
  286. {0, NULL, NULL}
  287. };
  288. /** Vendor S3 devices */
  289. static ambapp_device_name S3_devices[] = {
  290. {0, NULL, NULL}
  291. };
  292. /** Vendor ACTEL devices */
  293. static ambapp_device_name ACTEL_devices[] = {
  294. {ACTEL_COREMP7, "COREMP7", "CoreMP7 Processor"},
  295. {0, NULL, NULL}
  296. };
  297. /** Vendor APPLECORE devices */
  298. static ambapp_device_name APPLECORE_devices[] = {
  299. {APPLECORE_UTLEON3, "UTLEON3", "AppleCore uT-LEON3 Processor"},
  300. {APPLECORE_UTLEON3DSU, "UTLEON3DSU", "AppleCore uT-LEON3 DSU"},
  301. {0, NULL, NULL}
  302. };
  303. /** Vendors and their devices */
  304. static ambapp_vendor_devnames vendors[] = {
  305. {VENDOR_GAISLER, "GAISLER", "Gaisler Research", GAISLER_devices},
  306. {VENDOR_PENDER, "PENDER", "", PENDER_devices},
  307. {VENDOR_ESA, "ESA", "European Space Agency", ESA_devices},
  308. {VENDOR_ASTRIUM, "ASTRIUM", "", ASTRIUM_devices},
  309. {VENDOR_OPENCHIP, "OPENCHIP", "OpenChip", OPENCHIP_devices},
  310. {VENDOR_OPENCORES, "OPENCORES", "OpenCores", OPENCORES_devices},
  311. {VENDOR_CONTRIB, "CONTRIB", "Various contributions", CONTRIB_devices},
  312. {VENDOR_EONIC, "EONIC", "Eonic BV", EONIC_devices},
  313. {VENDOR_RADIONOR, "RADIONOR", "Radionor Communications", RADIONOR_devices},
  314. {VENDOR_GLEICHMANN, "GLEICHMANN", "Gleichmann Electronics", GLEICHMANN_devices},
  315. {VENDOR_MENTA, "MENTA", "Menta", MENTA_devices},
  316. {VENDOR_SUN, "SUN", "Sun Microsystems", SUN_devices},
  317. {VENDOR_MOVIDIA, "MOVIDIA", "", MOVIDIA_devices},
  318. {VENDOR_ORBITA, "ORBITA", "Orbita", ORBITA_devices},
  319. {VENDOR_SYNOPSYS, "SYNOPSYS", "Synopsys Inc.", SYNOPSYS_devices},
  320. {VENDOR_NASA, "NASA", "NASA", NASA_devices},
  321. {VENDOR_S3, "S3", "S3 Group", S3_devices},
  322. {VENDOR_CAL, "CAL", "", CAL_devices},
  323. {VENDOR_EMBEDDIT, "EMBEDDIT", "Embedd.it", EMBEDDIT_devices},
  324. {VENDOR_CETON, "CETON", "Ceton Corporation", CETON_devices},
  325. {VENDOR_ACTEL, "ACTEL", "Actel Corporation", ACTEL_devices},
  326. {VENDOR_APPLECORE, "APPLECORE", "AppleCore", APPLECORE_devices},
  327. {0, NULL, NULL, NULL}
  328. };
  329. static ambapp_device_name *ambapp_get_dev(ambapp_device_name *devs, int id)
  330. {
  331. if (!devs)
  332. return NULL;
  333. while (devs->device_id > 0) {
  334. if (devs->device_id == id)
  335. return devs;
  336. devs++;
  337. }
  338. return NULL;
  339. }
  340. char *ambapp_device_id2str(int vendor, int id)
  341. {
  342. ambapp_vendor_devnames *ven = &vendors[0];
  343. ambapp_device_name *dev;
  344. while (ven->vendor_id > 0) {
  345. if (ven->vendor_id == vendor) {
  346. dev = ambapp_get_dev(ven->devices, id);
  347. if (!dev)
  348. return NULL;
  349. return dev->name;
  350. }
  351. ven++;
  352. }
  353. return NULL;
  354. }
  355. char *ambapp_device_id2desc(int vendor, int id)
  356. {
  357. ambapp_vendor_devnames *ven = &vendors[0];
  358. ambapp_device_name *dev;
  359. while (ven->vendor_id > 0) {
  360. if (ven->vendor_id == vendor) {
  361. dev = ambapp_get_dev(ven->devices, id);
  362. if (!dev)
  363. return NULL;
  364. return dev->desc;
  365. }
  366. ven++;
  367. }
  368. return NULL;
  369. }
  370. char *ambapp_vendor_id2str(int vendor)
  371. {
  372. ambapp_vendor_devnames *ven = &vendors[0];
  373. while (ven->vendor_id > 0) {
  374. if (ven->vendor_id == vendor) {
  375. return ven->name;
  376. }
  377. ven++;
  378. }
  379. return NULL;
  380. }
  381. static char *unknown = "unknown";
  382. char *ambapp_type_names[4] = {
  383. /* 0 */ "UNUSED",
  384. /* 1 */ "apb",
  385. /* 2 */ "ahbmem",
  386. /* 3 */ "ahbio"
  387. };
  388. /* Print one APB device */
  389. void ambapp_print_apb(ambapp_apbdev *dev, int index)
  390. {
  391. char *dev_str, *ven_str;
  392. unsigned int freq;
  393. ven_str = ambapp_vendor_id2str(dev->vendor);
  394. if (!ven_str) {
  395. ven_str = unknown;
  396. dev_str = unknown;
  397. } else {
  398. dev_str = ambapp_device_id2str(dev->vendor, dev->device);
  399. if (!dev_str)
  400. dev_str = unknown;
  401. }
  402. /* Get Frequency of Core */
  403. freq = ambapp_bus_freq(&ambapp_plb, dev->ahb_bus_index);
  404. printf("0x%02x:0x%02x:0x%02x: %s %s (%dkHz)\n"
  405. " apb: 0x%08x - 0x%08x\n"
  406. " irq: %-2d (ver: %-2d)\n",
  407. index, dev->vendor, dev->device, ven_str, dev_str, freq / 1000,
  408. dev->address, dev->address + (dev->mask-1),
  409. dev->irq, dev->ver);
  410. }
  411. void ambapp_print_ahb(ambapp_ahbdev *dev, int index)
  412. {
  413. char *dev_str, *ven_str, *type_str;
  414. int i;
  415. unsigned int freq;
  416. ven_str = ambapp_vendor_id2str(dev->vendor);
  417. if (!ven_str) {
  418. ven_str = unknown;
  419. dev_str = unknown;
  420. } else {
  421. dev_str = ambapp_device_id2str(dev->vendor, dev->device);
  422. if (!dev_str)
  423. dev_str = unknown;
  424. }
  425. /* Get Frequency of Core */
  426. freq = ambapp_bus_freq(&ambapp_plb, dev->ahb_bus_index);
  427. printf("0x%02x:0x%02x:0x%02x: %s %s (%dkHz)\n",
  428. index, dev->vendor, dev->device, ven_str, dev_str, freq / 1000);
  429. for (i = 0; i < 4; i++) {
  430. if (dev->type[i] == 0)
  431. continue;
  432. type_str = ambapp_type_names[dev->type[i]];
  433. printf(" %-7s: 0x%08x - 0x%08x\n", type_str, dev->address[i],
  434. dev->address[i] + (dev->mask[i]-1));
  435. }
  436. printf(" irq: %-2d (ver: %d)\n", dev->irq, dev->ver);
  437. }
  438. int do_ambapp_print(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
  439. {
  440. int index;
  441. ambapp_apbdev apbdev;
  442. ambapp_ahbdev ahbdev;
  443. /* Print AHB Masters */
  444. puts("\n--------- AHB Masters ---------\n");
  445. index = 0;
  446. while (ambapp_ahbmst_find(&ambapp_plb, 0, 0, index, &ahbdev) == 1) {
  447. /* Found a AHB Master Device */
  448. ambapp_print_ahb(&ahbdev, index);
  449. index++;
  450. }
  451. /* Print AHB Slaves */
  452. puts("\n--------- AHB Slaves ---------\n");
  453. index = 0;
  454. while (ambapp_ahbslv_find(&ambapp_plb, 0, 0, index, &ahbdev) == 1) {
  455. /* Found a AHB Slave Device */
  456. ambapp_print_ahb(&ahbdev, index);
  457. index++;
  458. }
  459. /* Print APB Slaves */
  460. puts("\n--------- APB Slaves ---------\n");
  461. index = 0;
  462. while (ambapp_apb_find(&ambapp_plb, 0, 0, index, &apbdev) == 1) {
  463. /* Found a APB Slave Device */
  464. ambapp_print_apb(&apbdev, index);
  465. index++;
  466. }
  467. puts("\n");
  468. return 0;
  469. }
  470. int ambapp_init_reloc(void)
  471. {
  472. ambapp_vendor_devnames *vend = vendors;
  473. ambapp_device_name *dev;
  474. while (vend->vendor_id && vend->name) {
  475. vend->name = (char *)((unsigned int)vend->name + gd->reloc_off);
  476. vend->desc = (char *)((unsigned int)vend->desc + gd->reloc_off);
  477. vend->devices = (ambapp_device_name *)
  478. ((unsigned int)vend->devices + gd->reloc_off);
  479. dev = vend->devices;
  480. vend++;
  481. if (!dev)
  482. continue;
  483. while (dev->device_id && dev->name) {
  484. dev->name =
  485. (char *)((unsigned int)dev->name + gd->reloc_off);
  486. dev->desc =
  487. (char *)((unsigned int)dev->desc + gd->reloc_off);
  488. dev++;
  489. }
  490. }
  491. return 0;
  492. }
  493. U_BOOT_CMD(
  494. ambapp, 1, 1, do_ambapp_print,
  495. "list AMBA Plug&Play information",
  496. "ambapp\n"
  497. " - lists AMBA (AHB & APB) Plug&Play devices present on the system"
  498. );