3 * Daniel Hellstrom, Gaisler Research, daniel@gaisler.com.
5 * SPDX-License-Identifier: GPL-2.0+
9 * AMBA Plug&Play information list command
16 DECLARE_GLOBAL_DATA_PTR
;
25 unsigned int vendor_id
;
28 ambapp_device_name
*devices
;
29 } ambapp_vendor_devnames
;
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"},
99 {GAISLER_L4STAT
, "L4STAT", "Leon4 Statistics Module"},
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"},
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"},
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"},
115 {GAISLER_MEMSCRUB
, "MEMSCRUB", "AHB Memory Scrubber"},
116 {GAISLER_FTSDCTRL64
, "FTSDCTRL64", "64-bit FT SDRAM Controller"},
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"},
139 {GAISLER_AESDMA
, "AESDMA", "AES 256 DMA"},
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"},
147 {GAISLER_GPREG
, "GPREG", "General Purpose Register"},
148 {GAISLER_GRTMPAHB
, "GRTMPAHB", "CCSDS Telemetry VC AHB Input"},
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"},
156 /** Vendor PENDER devices */
157 static ambapp_device_name PENDER_devices
[] = {
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"},
188 /** Vendor ASTRIUM devices */
189 static ambapp_device_name ASTRIUM_devices
[] = {
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"},
214 /** Vendor OPENCORES devices */
215 static ambapp_device_name OPENCORES_devices
[] = {
216 {OPENCORES_PCIBR
, "PCIBR", "PCI Bridge"},
217 {OPENCORES_ETHMAC
, "ETHMAC", "Ethernet MAC"},
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"},
230 /** Vendor EONIC devices */
231 static ambapp_device_name EONIC_devices
[] = {
236 /** Vendor RADIONOR devices */
237 static ambapp_device_name RADIONOR_devices
[] = {
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", ""},
257 /** Vendor MENTA devices */
258 static ambapp_device_name MENTA_devices
[] = {
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"},
271 /** Vendor MOVIDIA devices */
272 static ambapp_device_name MOVIDIA_devices
[] = {
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"},
299 /** Vendor SYNOPSYS devices */
300 static ambapp_device_name SYNOPSYS_devices
[] = {
305 /** Vendor NASA devices */
306 static ambapp_device_name NASA_devices
[] = {
307 {NASA_EP32
, "EP32", "EP32 Forth processor"},
312 /** Vendor CAL devices */
313 static ambapp_device_name CAL_devices
[] = {
314 {CAL_DDRCTRL
, "DDRCTRL", ""},
319 /** Vendor EMBEDDIT devices */
320 static ambapp_device_name EMBEDDIT_devices
[] = {
325 /** Vendor CETON devices */
326 static ambapp_device_name CETON_devices
[] = {
331 /** Vendor S3 devices */
332 static ambapp_device_name S3_devices
[] = {
337 /** Vendor ACTEL devices */
338 static ambapp_device_name ACTEL_devices
[] = {
339 {ACTEL_COREMP7
, "COREMP7", "CoreMP7 Processor"},
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"},
352 /** Vendors and their devices */
353 static ambapp_vendor_devnames vendors
[] = {
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
},
370 {VENDOR_S3
, "S3", "S3 Group", S3_devices
},
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
}
379 static ambapp_device_name
*ambapp_get_dev(ambapp_device_name
*devs
, int id
)
384 while (devs
->device_id
> 0) {
385 if (devs
->device_id
== id
)
392 char *ambapp_device_id2str(int vendor
, int id
)
394 ambapp_vendor_devnames
*ven
= &vendors
[0];
395 ambapp_device_name
*dev
;
397 while (ven
->vendor_id
> 0) {
398 if (ven
->vendor_id
== vendor
) {
399 dev
= ambapp_get_dev(ven
->devices
, id
);
409 char *ambapp_device_id2desc(int vendor
, int id
)
411 ambapp_vendor_devnames
*ven
= &vendors
[0];
412 ambapp_device_name
*dev
;
414 while (ven
->vendor_id
> 0) {
415 if (ven
->vendor_id
== vendor
) {
416 dev
= ambapp_get_dev(ven
->devices
, id
);
426 char *ambapp_vendor_id2str(int vendor
)
428 ambapp_vendor_devnames
*ven
= &vendors
[0];
430 while (ven
->vendor_id
> 0) {
431 if (ven
->vendor_id
== vendor
) {
439 static char *unknown
= "unknown";
441 char *ambapp_type_names
[4] = {
448 /* Print one APB device */
449 void ambapp_print_apb(ambapp_apbdev
*dev
, int index
)
451 char *dev_str
, *ven_str
;
454 ven_str
= ambapp_vendor_id2str(dev
->vendor
);
459 dev_str
= ambapp_device_id2str(dev
->vendor
, dev
->device
);
464 /* Get Frequency of Core */
465 freq
= ambapp_bus_freq(&ambapp_plb
, dev
->ahb_bus_index
);
467 printf("0x%02x:0x%02x:0x%02x: %s %s (%dkHz)\n"
468 " apb: 0x%08x - 0x%08x\n"
469 " irq: %-2d (ver: %-2d)\n",
470 index
, dev
->vendor
, dev
->device
, ven_str
, dev_str
, freq
/ 1000,
471 dev
->address
, dev
->address
+ (dev
->mask
-1),
475 void ambapp_print_ahb(ambapp_ahbdev
*dev
, int index
)
477 char *dev_str
, *ven_str
, *type_str
;
481 ven_str
= ambapp_vendor_id2str(dev
->vendor
);
486 dev_str
= ambapp_device_id2str(dev
->vendor
, dev
->device
);
491 /* Get Frequency of Core */
492 freq
= ambapp_bus_freq(&ambapp_plb
, dev
->ahb_bus_index
);
494 printf("0x%02x:0x%02x:0x%02x: %s %s (%dkHz)\n",
495 index
, dev
->vendor
, dev
->device
, ven_str
, dev_str
, freq
/ 1000);
497 for (i
= 0; i
< 4; i
++) {
498 if (dev
->type
[i
] == 0)
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));
505 printf(" irq: %-2d (ver: %d)\n", dev
->irq
, dev
->ver
);
508 int do_ambapp_print(cmd_tbl_t
* cmdtp
, int flag
, int argc
, char * const argv
[])
511 ambapp_apbdev apbdev
;
512 ambapp_ahbdev ahbdev
;
514 /* Print AHB Masters */
515 puts("\n--------- AHB Masters ---------\n");
517 while (ambapp_ahbmst_find(&ambapp_plb
, 0, 0, index
, &ahbdev
) == 1) {
518 /* Found a AHB Master Device */
519 ambapp_print_ahb(&ahbdev
, index
);
523 /* Print AHB Slaves */
524 puts("\n--------- AHB Slaves ---------\n");
526 while (ambapp_ahbslv_find(&ambapp_plb
, 0, 0, index
, &ahbdev
) == 1) {
527 /* Found a AHB Slave Device */
528 ambapp_print_ahb(&ahbdev
, index
);
532 /* Print APB Slaves */
533 puts("\n--------- APB Slaves ---------\n");
535 while (ambapp_apb_find(&ambapp_plb
, 0, 0, index
, &apbdev
) == 1) {
536 /* Found a APB Slave Device */
537 ambapp_print_apb(&apbdev
, index
);
545 int ambapp_init_reloc(void)
547 ambapp_vendor_devnames
*vend
= vendors
;
548 ambapp_device_name
*dev
;
550 while (vend
->vendor_id
&& vend
->name
) {
551 vend
->name
= (char *)((unsigned int)vend
->name
+ gd
->reloc_off
);
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
);
559 while (dev
->device_id
&& dev
->name
) {
561 (char *)((unsigned int)dev
->name
+ gd
->reloc_off
);
563 (char *)((unsigned int)dev
->desc
+ gd
->reloc_off
);
571 ambapp
, 1, 1, do_ambapp_print
,
572 "list AMBA Plug&Play information",
574 " - lists AMBA (AHB & APB) Plug&Play devices present on the system"