Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 1 | /* |
| 2 | * (C) Copyright 2007 |
| 3 | * Daniel Hellstrom, Gaisler Research, daniel@gaisler.com. |
| 4 | * |
Wolfgang Denk | d79de1d | 2013-07-08 09:37:19 +0200 | [diff] [blame] | 5 | * SPDX-License-Identifier: GPL-2.0+ |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 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 | |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 18 | typedef struct { |
| 19 | int device_id; |
| 20 | char *name; |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 21 | char *desc; |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 22 | } ambapp_device_name; |
| 23 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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"}, |
Daniel Hellstrom | 9d59af9 | 2010-01-21 16:09:37 +0100 | [diff] [blame^] | 99 | {GAISLER_L4STAT, "L4STAT", "Leon4 Statistics Module"}, |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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"}, |
Daniel Hellstrom | 9d59af9 | 2010-01-21 16:09:37 +0100 | [diff] [blame^] | 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"}, |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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"}, |
Daniel Hellstrom | 9d59af9 | 2010-01-21 16:09:37 +0100 | [diff] [blame^] | 115 | {GAISLER_MEMSCRUB, "MEMSCRUB", "AHB Memory Scrubber"}, |
| 116 | {GAISLER_FTSDCTRL64, "FTSDCTRL64", "64-bit FT SDRAM Controller"}, |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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"}, |
Daniel Hellstrom | 9d59af9 | 2010-01-21 16:09:37 +0100 | [diff] [blame^] | 139 | {GAISLER_AESDMA, "AESDMA", "AES 256 DMA"}, |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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"}, |
Daniel Hellstrom | 9d59af9 | 2010-01-21 16:09:37 +0100 | [diff] [blame^] | 147 | {GAISLER_GPREG, "GPREG", "General Purpose Register"}, |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 148 | {GAISLER_GRTMPAHB, "GRTMPAHB", "CCSDS Telemetry VC AHB Input"}, |
Daniel Hellstrom | 9d59af9 | 2010-01-21 16:09:37 +0100 | [diff] [blame^] | 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"}, |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 152 | {0, NULL, NULL} |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 153 | }; |
| 154 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 155 | |
| 156 | /** Vendor PENDER devices */ |
| 157 | static ambapp_device_name PENDER_devices[] = { |
| 158 | {0, NULL, NULL} |
| 159 | }; |
| 160 | |
| 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} |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 211 | }; |
| 212 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 213 | |
| 214 | /** Vendor OPENCORES devices */ |
| 215 | static ambapp_device_name OPENCORES_devices[] = { |
| 216 | {OPENCORES_PCIBR, "PCIBR", "PCI Bridge"}, |
| 217 | {OPENCORES_ETHMAC, "ETHMAC", "Ethernet MAC"}, |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 218 | {0, NULL} |
| 219 | }; |
| 220 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 221 | |
| 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 | |
Daniel Hellstrom | 9d59af9 | 2010-01-21 16:09:37 +0100 | [diff] [blame^] | 331 | /** Vendor S3 devices */ |
| 332 | static ambapp_device_name S3_devices[] = { |
| 333 | {0, NULL, NULL} |
| 334 | }; |
| 335 | |
| 336 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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 | |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 351 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 352 | /** Vendors and their devices */ |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 353 | static ambapp_vendor_devnames vendors[] = { |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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}, |
Daniel Hellstrom | 9d59af9 | 2010-01-21 16:09:37 +0100 | [diff] [blame^] | 370 | {VENDOR_S3, "S3", "S3 Group", S3_devices}, |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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} |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 377 | }; |
| 378 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 379 | static ambapp_device_name *ambapp_get_dev(ambapp_device_name *devs, int id) |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 380 | { |
| 381 | if (!devs) |
| 382 | return NULL; |
| 383 | |
| 384 | while (devs->device_id > 0) { |
| 385 | if (devs->device_id == id) |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 386 | return devs; |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 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]; |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 395 | ambapp_device_name *dev; |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 396 | |
| 397 | while (ven->vendor_id > 0) { |
| 398 | if (ven->vendor_id == vendor) { |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 399 | dev = ambapp_get_dev(ven->devices, id); |
| 400 | if (!dev) |
| 401 | return NULL; |
| 402 | return dev->name; |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 403 | } |
| 404 | ven++; |
| 405 | } |
| 406 | return NULL; |
| 407 | } |
| 408 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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; |
| 420 | } |
| 421 | ven++; |
| 422 | } |
| 423 | return NULL; |
| 424 | } |
| 425 | |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 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 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 441 | char *ambapp_type_names[4] = { |
| 442 | /* 0 */ "UNUSED", |
| 443 | /* 1 */ "apb", |
| 444 | /* 2 */ "ahbmem", |
| 445 | /* 3 */ "ahbio" |
| 446 | }; |
| 447 | |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 448 | /* Print one APB device */ |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 449 | void ambapp_print_apb(ambapp_apbdev *dev, int index) |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 450 | { |
| 451 | char *dev_str, *ven_str; |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 452 | unsigned int freq; |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 453 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 454 | ven_str = ambapp_vendor_id2str(dev->vendor); |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 455 | if (!ven_str) { |
| 456 | ven_str = unknown; |
| 457 | dev_str = unknown; |
| 458 | } else { |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 459 | dev_str = ambapp_device_id2str(dev->vendor, dev->device); |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 460 | if (!dev_str) |
| 461 | dev_str = unknown; |
| 462 | } |
| 463 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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" |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 468 | " apb: 0x%08x - 0x%08x\n" |
| 469 | " irq: %-2d (ver: %-2d)\n", |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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); |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 473 | } |
| 474 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 475 | void ambapp_print_ahb(ambapp_ahbdev *dev, int index) |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 476 | { |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 477 | char *dev_str, *ven_str, *type_str; |
| 478 | int i; |
| 479 | unsigned int freq; |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 480 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 481 | ven_str = ambapp_vendor_id2str(dev->vendor); |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 482 | if (!ven_str) { |
| 483 | ven_str = unknown; |
| 484 | dev_str = unknown; |
| 485 | } else { |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 486 | dev_str = ambapp_device_id2str(dev->vendor, dev->device); |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 487 | if (!dev_str) |
| 488 | dev_str = unknown; |
| 489 | } |
| 490 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 491 | /* Get Frequency of Core */ |
| 492 | freq = ambapp_bus_freq(&ambapp_plb, dev->ahb_bus_index); |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 493 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 494 | printf("0x%02x:0x%02x:0x%02x: %s %s (%dkHz)\n", |
| 495 | index, dev->vendor, dev->device, ven_str, dev_str, freq / 1000); |
| 496 | |
| 497 | for (i = 0; i < 4; i++) { |
| 498 | if (dev->type[i] == 0) |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 499 | continue; |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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)); |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 503 | } |
| 504 | |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 505 | printf(" irq: %-2d (ver: %d)\n", dev->irq, dev->ver); |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 506 | } |
| 507 | |
Wolfgang Denk | 6262d021 | 2010-06-28 22:00:46 +0200 | [diff] [blame] | 508 | int do_ambapp_print(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 509 | { |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 510 | int index; |
| 511 | ambapp_apbdev apbdev; |
| 512 | ambapp_ahbdev ahbdev; |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 513 | |
| 514 | /* Print AHB Masters */ |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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 | } |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 522 | |
| 523 | /* Print AHB Slaves */ |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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 | } |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 531 | |
| 532 | /* Print APB Slaves */ |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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 | } |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 540 | |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 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); |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 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); |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 555 | dev = vend->devices; |
| 556 | vend++; |
| 557 | if (!dev) |
| 558 | continue; |
| 559 | while (dev->device_id && dev->name) { |
| 560 | dev->name = |
Daniel Hellstrom | 02e2a84 | 2010-01-25 09:54:51 +0100 | [diff] [blame] | 561 | (char *)((unsigned int)dev->name + gd->reloc_off); |
| 562 | dev->desc = |
| 563 | (char *)((unsigned int)dev->desc + gd->reloc_off); |
Daniel Hellstrom | feb0c26 | 2008-03-26 23:00:38 +0100 | [diff] [blame] | 564 | dev++; |
| 565 | } |
| 566 | } |
| 567 | return 0; |
| 568 | } |
| 569 | |
Frans Meulenbroeks | 7675a09 | 2010-07-31 15:01:53 +0200 | [diff] [blame] | 570 | U_BOOT_CMD( |
| 571 | ambapp, 1, 1, do_ambapp_print, |
Wolfgang Denk | c54781c | 2009-05-24 17:06:54 +0200 | [diff] [blame] | 572 | "list AMBA Plug&Play information", |
| 573 | "ambapp\n" |
| 574 | " - lists AMBA (AHB & APB) Plug&Play devices present on the system" |
| 575 | ); |