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