SPARC: Added AMBA PnP Information listing command for LEON3
PATCH 5/8 SPARC: Added AMBA PnP Information listing command for LEON3
This patch adds an U-Boot command, ambapp, which prints a summary of AMBA Bus Plug & Play information.
AMBA is a bus specified by ARM. AMBA with Plug and Play information is a Gaisler extension to that bus. See www.gaisler.com.
######################
U-Boot 1.3.2-g6bc2ec61-dirty (Mar 12 2008 - 21:24:14)Gaisler GRSIM
CPU: LEON3
Board: GRSIM/TSIM
Using default environment
In: serial Out: serial Err: serial Net: PHY info not available
GRETH 10/100
Type "run flash_nfs" to mount root filesystem over NFS
Hit any key to stop autoboot: 0
=> ambapp
--------- AHB Masters ---------
0x00:0x01:0x03: VENDOR_GAISLER GAISLER_LEON3
irq: 0 (ver: 0)
--------- AHB Slaves ---------
0x00:0x04:0x0f: VENDOR_ESA ESA_MCTRL
mem: 0x00000000 - 0x10000000
mem: 0x20000000 - 0x30000000
mem: 0x40000000 - 0x70000000
irq: 1 (ver: 0)
0x01:0x01:0x06: VENDOR_GAISLER GAISLER_APBMST
mem: 0xc0000000 - 0xc0100000
irq: 3 (ver: 0)
--------- APB Slaves ---------
0x00:0x04:0x0f: VENDOR_ESA ESA_MCTRL
apb: 0xc0000000 - 0xc0000100
irq: 1 (ver: 0 )
0x01:0x01:0x0c: VENDOR_GAISLER GAISLER_APBUART
apb: 0xc0000100 - 0xc0000200
irq: 3 (ver: 0 )
0x02:0x01:0x0d: VENDOR_GAISLER GAISLER_IRQMP
apb: 0xc0000200 - 0xc0000300
irq: 7 (ver: 0 )
0x03:0x01:0x11: VENDOR_GAISLER GAISLER_GPTIMER
apb: 0xc0000300 - 0xc0000400
irq: 8 (ver: 0 )
0x04:0x01:0x1d: VENDOR_GAISLER GAISLER_ETHMAC
apb: 0xc0000800 - 0xc0001000
irq: 12 (ver: 0 )
=>
######################
Best Regards,
Daniel Hellstrom
commit 8e2783598c9270a17140930c99b3eb76f892de51
Author: Daniel Hellstrom <[email protected]> Date: Wed Mar 12 21:26:31 2008 +0100
SPARC/LEON3: Added AMBA Bus Plug&Play information print command (ambapp). It can print available cores (type:
AHB Master, AHB Slave, APB Slave), their address ranges, IRQ number and version.
common/Makefile | 1 + common/cmd_ambapp.c | 292 ++++++++++++++++++++++++++++++ include/ambapp.h | 443 ++++++++++++++++++++++++++++++++++++++++++++++ include/config_cmd_all.h | 1 + 4 files changed, 737 insertions(+), 0 deletions(-)
common/Makefile +1 -0
@@ -91,6 +91,7 @@ COBJS-$(CONFIG_CMD_STRINGS) += cmd_strings.o COBJS-$(CONFIG_CMD_TERMINAL) += cmd_terminal.o COBJS-$(CONFIG_CMD_UNIVERSE) += cmd_universe.o COBJS-$(CONFIG_CMD_USB) += cmd_usb.o +COBJS-y += cmd_ambapp.o COBJS-y += cmd_vfd.o COBJS-y += command.o COBJS-y += console.o
common/cmd_ambapp.c new file +272 -0
272 lines not on this page · raw message
int)vend->devices + gd->reloc_off);;
+ dev = vend->devices; + vend++; + if ( !dev )
+ continue;
+ while( dev->device_id && dev->name ){
+ dev->name = (char *)((unsigned int)dev->name + gd->reloc_off);;
+ dev++;
+ }
+ }
+ return 0;
+}
+
+U_BOOT_CMD(
+ ambapp, 1, 1, do_ambapp_print, + "ambapp - list AMBA Plug&Play information\n", + "ambapp\n" + " - lists AMBA (AHB & APB) Plug&Play devices present on the
system\n"
+);
+
+#endif /* CFG_CMD_AMBAPP */
include/ambapp.h new file +45 -0
45 lines not on this page · raw message
Plug&Play */
+#define LEON3_APB_SLAVES 16 /* Total number of APB slaves per APB bus */ +
+/* Vendor codes */
+#define VENDOR_GAISLER 1 +#define VENDOR_PENDER 2 +#define VENDOR_ESA 4 +#define VENDOR_ASTRIUM 6 +#define VENDOR_OPENCHIP 7 +#define VENDOR_OPENCORES 8 +#define VENDOR_CONTRIB 9 +#define VENDOR_EONIC 11 +#define VENDOR_RADIONOR 15 +#define VENDOR_GLEICHMANN 16 +#define VENDOR_MENTA 17 +#define VENDOR_SUN 19 +#define VENDOR_EMBEDDIT 234 +#define VENDOR_CAL 202
+
+/* Gaisler Research device id's */
+#define GAISLER_LEON3 0x003
+#define GAISLER_LEON3DSU 0x004
+#define GAISLER_ETHAHB 0x005 +#define GAISLER_APBMST 0x006 +#define GAISLER_AHBUART 0x007 +#define GAISLER_SRCTRL 0x008 +#define GAISLER_SDCTRL 0x009 +#define GAISLER_APBUART 0x00C +#define GAISLER_IRQMP 0x00D +#define GAISLER_AHBRAM 0x00E +#define GAISLER_GPTIMER 0x011 +#define GAISLER_PCITRG 0x012 +#define GAISLER_PCISBRG 0x013 +#define GAISLER_PCIFBRG 0x014 +#define GAISLER_PCITRACE 0x015 +#define GAISLER_PCIDMA 0x016 +#define GAISLER_AHBTRACE 0x017 +#define GAISLER_ETHDSU 0x018 +#define GAISLER_PIOPORT 0x01A +#define GAISLER_AHBJTAG 0x01c +#define GAISLER_SPW 0x01f +#define GAISLER_ATACTRL 0x024 +#define GAISLER_VGA 0x061 +#define GAISLER_KBD 0X060 +#define GAISLER_ETHMAC 0x01D +#define GAISLER_DDRSPA 0x025 +#define GAISLER_EHCI 0x026 +#define GAISLER_UHCI 0x027 +#define GAISLER_SPW2 0x029 +#define GAISLER_DDR2SPA 0x02E +#define GAISLER_AHBSTAT 0x052 +#define GAISLER_FTMCTRL 0x054 + +#define GAISLER_L2TIME 0xffd /* internal device: leon2 timer */ +#define GAISLER_L2C 0xffe /* internal device: leon2compat */ +#define GAISLER_PLUGPLAY 0xfff /* internal device: plug & play
configarea */
+
+
+/* European Space Agency device id's */
+#define ESA_LEON2 0x2
+#define ESA_MCTRL 0xF
+
+/* Opencores device id's */
+#define OPENCORES_PCIBR 0x4
+#define OPENCORES_ETHMAC 0x5
+
+/* Vendor codes */
+
+/*
+ *
+ * Macros for manipulating Configuration registers
+ *
+ */
+
+#define amba_vendor(x) (((x) >> 24) & 0xff)
+
+#define amba_device(x) (((x) >> 12) & 0xfff)
+
+#define amba_membar_start(mbar) \
+ (((mbar) & 0xfff00000) & (((mbar) & 0xfff0) << 16))
+
+#define amba_iobar_start(base, iobar) \
+ ((base) | ((((iobar) & 0xfff00000)>>12) & (((iobar) & 0xfff0)<<4)) ) +
+#define amba_irq(conf) ((conf) & 0xf)
+
+#define amba_ver(conf) (((conf)>>5) & 0x1f)
+
+#define amba_membar_type(mbar) ((mbar) & 0xf)
+
+#define amba_membar_mask(mbar) (((mbar)>>4) & 0xfff)
+
+#define AMBA_TYPE_APBIO 0x1
+#define AMBA_TYPE_MEM 0x2
+#define AMBA_TYPE_AHBIO 0x3
+
+#define AMBA_TYPE_AHBIO_ADDR(addr) (LEON3_IO_AREA | ((addr) >> 12)) +
+#ifndef __ASSEMBLER__
+
+#ifdef CONFIG_CMD_AMBAPP
+
+/* AMBA Plug&Play relocation & initialization */
+int ambapp_init_reloc(void);
+
+/* AMBA Plug&Play Name of Vendors and devices */
+
+/* Return name of device */
+char *ambapp_device_id2str(int vendor, int id);
+
+/* Return name of vendor */
+char *ambapp_vendor_id2str(int vendor);
+#endif
+
+/*
+ * Types and structure used for AMBA Plug & Play bus scanning
+ */
+
+/* AMBA Plug&Play AHB information layout */
+typedef struct {
+ unsigned int conf;
+ unsigned int userdef[3];
+ unsigned int bars[4];
+} ahbctrl_pp_dev;
+
+/* Prototypes for scanning AMBA Plug&Play bus for AMBA
+ * i) AHB Masters
+ * ii) AHB Slaves
+ * iii) APB Slaves (APB MST is a AHB Slave)
+ */
+
+typedef struct {
+ unsigned char irq;
+ unsigned char ver;
+ unsigned int address;
+} ambapp_apbdev;
+
+typedef struct {
+ unsigned char irq;
+ unsigned char ver;
+ unsigned int userdef[3];
+ unsigned int address[4];+} ambapp_ahbdev;
+
+/* AMBA Plug&Play AHB Masters & Slaves information locations
+ * Max devices is 64 supported by HW, however often only 8
+ * are used.
+ */
+typedef struct {
+ ahbctrl_pp_dev masters[64];
+ ahbctrl_pp_dev slaves[64];
+} ahbctrl_info;
+
+/* AMBA Plug&Play AHB information layout */
+typedef struct {
+ unsigned int conf;
+ unsigned int bar;
+} apbctrl_pp_dev;
+
+/* All functions return the number of found devices
+ * 0 = no devices found
+ */
+
+/****************************** APB SLAVES ******************************/ +int ambapp_apb_count(
+ unsigned int vendor, + unsigned int driver + ); + +int ambapp_apb_first( + unsigned int vendor, + unsigned int driver, + ambapp_apbdev *dev + ); + +int ambapp_apb_next( + unsigned int vendor, + unsigned int driver, + ambapp_apbdev *dev, + int index + ); + +int ambapp_apbs_first( + unsigned int vendor, + unsigned int driver, + ambapp_apbdev *dev, + int max_cnt + ); + +/****************************** AHB MASTERS ******************************/ +int ambapp_ahbmst_count( + unsigned int vendor, + unsigned int driver + ); + +int ambapp_ahbmst_first( + unsigned int vendor, + unsigned int driver, + ambapp_ahbdev *dev + ); + +int ambapp_ahbmst_next( + unsigned int vendor, + unsigned int driver, + ambapp_ahbdev *dev, + int index + ); + +int ambapp_ahbmsts_first( + unsigned int vendor, + unsigned int driver, + ambapp_ahbdev *dev, + int max_cnt + ); + +/****************************** AHB SLAVES ******************************/ +int ambapp_ahbslv_count( + unsigned int vendor, + unsigned int driver + ); + +int ambapp_ahbslv_first( + unsigned int vendor, + unsigned int driver, + ambapp_ahbdev *dev + ); + +int ambapp_ahbslv_next( + unsigned int vendor, + unsigned int driver, + ambapp_ahbdev *dev, + int index + ); + +int ambapp_ahbslvs_first( + unsigned int vendor, + unsigned int driver, + ambapp_ahbdev *dev, + int max_cnt + );
+
+/*************************** AHB/APB only regs functions
*************************
+ * During start up, no memory is available we can use the simplified functions
+ * to get to the memory controller.
+ *
+ * Functions uses no stack/memory, only registers.
+ */
+unsigned int ambapp_apb_next_nomem(
+ register unsigned int vendor, /* Plug&Play Vendor ID */ + register unsigned int driver, /* Plug&Play Device ID */ + register int index); + +ahbctrl_pp_dev *ambapp_ahb_next_nomem( + register unsigned int vendor, /* Plug&Play Vendor ID */ + register unsigned int driver, /* Plug&Play Device ID */ + register unsigned int opts, /* scan for AHB 1=slave, 0=masters */ + register int index);
+
+
+unsigned int ambapp_ahb_get_info(ahbctrl_pp_dev *ahb, int info); +
+/*************************** AMBA Plug&Play device register MAPS *****************/
+
+/*
+ * The following defines the bits in the LEON UART Status Registers.
+ */
+
+#define LEON_REG_UART_STATUS_DR 0x00000001 /* Data Ready */ +#define LEON_REG_UART_STATUS_TSE 0x00000002 /* TX Send Register Empty */ +#define LEON_REG_UART_STATUS_THE 0x00000004 /* TX Hold Register Empty */ +#define LEON_REG_UART_STATUS_BR 0x00000008 /* Break Error */ +#define LEON_REG_UART_STATUS_OE 0x00000010 /* RX Overrun Error */ +#define LEON_REG_UART_STATUS_PE 0x00000020 /* RX Parity Error */ +#define LEON_REG_UART_STATUS_FE 0x00000040 /* RX Framing Error */ +#define LEON_REG_UART_STATUS_ERR 0x00000078 /* Error Mask */
+
+/*
+ * The following defines the bits in the LEON UART Ctrl Registers.
+ */
+
+#define LEON_REG_UART_CTRL_RE 0x00000001 /* Receiver enable */ +#define LEON_REG_UART_CTRL_TE 0x00000002 /* Transmitter enable */ +#define LEON_REG_UART_CTRL_RI 0x00000004 /* Receiver interrupt enable */ +#define LEON_REG_UART_CTRL_TI 0x00000008 /* Transmitter interrupt enable */ +#define LEON_REG_UART_CTRL_PS 0x00000010 /* Parity select */ +#define LEON_REG_UART_CTRL_PE 0x00000020 /* Parity enable */ +#define LEON_REG_UART_CTRL_FL 0x00000040 /* Flow control enable */ +#define LEON_REG_UART_CTRL_LB 0x00000080 /* Loop Back enable */ +#define LEON_REG_UART_CTRL_DBG (1<<11) /* Debug Bit used by GRMON */
+
+#define LEON3_GPTIMER_EN 1
+#define LEON3_GPTIMER_RL 2
+#define LEON3_GPTIMER_LD 4
+#define LEON3_GPTIMER_IRQEN 8
+
+/*
+ * The following defines the bits in the LEON PS/2 Status Registers.
+ */
+
+#define LEON_REG_PS2_STATUS_DR 0x00000001 /* Data Ready */ +#define LEON_REG_PS2_STATUS_PE 0x00000002 /* Parity error */ +#define LEON_REG_PS2_STATUS_FE 0x00000004 /* Framing error */ +#define LEON_REG_PS2_STATUS_KI 0x00000008 /* Keyboard inhibit */
+
+
+/*
+ * The following defines the bits in the LEON PS/2 Ctrl Registers.
+ */
+
+#define LEON_REG_PS2_CTRL_RE 0x00000001 /* Receiver enable */ +#define LEON_REG_PS2_CTRL_TE 0x00000002 /* Transmitter enable */ +#define LEON_REG_PS2_CTRL_RI 0x00000004 /* Keyboard receive
interrupt */
+#define LEON_REG_PS2_CTRL_TI 0x00000008 /* Keyboard transmit
interrupt */
+
+typedef struct {
+ volatile unsigned int ilevel;
+ volatile unsigned int ipend;
+ volatile unsigned int iforce;
+ volatile unsigned int iclear;
+ volatile unsigned int mstatus;
+ volatile unsigned int notused[11];
+ volatile unsigned int cpu_mask[16];
+ volatile unsigned int cpu_force[16];
+} ambapp_dev_irqmp;
+
+typedef struct {
+ volatile unsigned int data;
+ volatile unsigned int status;
+ volatile unsigned int ctrl;
+ volatile unsigned int scaler;
+} ambapp_dev_apbuart;
+
+typedef struct {
+ volatile unsigned int val;
+ volatile unsigned int rld;
+ volatile unsigned int ctrl;
+ volatile unsigned int unused;
+} ambapp_dev_gptimer_element;
+
+#define LEON3_GPTIMER_CTRL_EN 0x1 /* Timer enable */
+#define LEON3_GPTIMER_CTRL_RS 0x2 /* Timer reStart */
+#define LEON3_GPTIMER_CTRL_LD 0x4 /* Timer reLoad */
+#define LEON3_GPTIMER_CTRL_IE 0x8 /* interrupt enable */
+#define LEON3_GPTIMER_CTRL_IP 0x10 /* interrupt flag/pending */
+#define LEON3_GPTIMER_CTRL_CH 0x20 /* Chain with previous timer */
+
+
+typedef struct {
+ volatile unsigned int scalar;
+ volatile unsigned int scalar_reload;
+ volatile unsigned int config;
+ volatile unsigned int unused;
+ volatile ambapp_dev_gptimer_element e[8];
+} ambapp_dev_gptimer;
+
+typedef struct {
+ volatile unsigned int iodata;
+ volatile unsigned int ioout;
+ volatile unsigned int iodir;
+ volatile unsigned int irqmask;
+ volatile unsigned int irqpol;
+ volatile unsigned int irqedge;
+} ambapp_dev_ioport;
+
+typedef struct {
+ volatile unsigned int write;
+ volatile unsigned int dummy;
+ volatile unsigned int txcolor;
+ volatile unsigned int bgcolor;
+} ambapp_dev_textvga;
+
+typedef struct {
+ volatile unsigned int data;
+ volatile unsigned int status;
+ volatile unsigned int ctrl;+} ambapp_dev_apbps2;
+
+typedef struct {
+ unsigned int mcfg1,mcfg2,mcfg3;
+} ambapp_dev_mctrl;
+
+typedef struct {
+ unsigned int sdcfg;
+} ambapp_dev_sdctrl;
+
+typedef struct {
+ unsigned int cfg1; + unsigned int cfg2; + unsigned int cfg3;
+} ambapp_dev_ddr2spa;
+
+typedef struct {
+ unsigned int ctrl;
+ unsigned int cfg;
+} ambapp_dev_ddrspa;
+
+#endif
+
+#endif
include/config_cmd_all.h +1 -0
@@ -13,6 +13,7 @@* Alphabetical list of all possible commands. */ +#define CONFIG_CMD_AMBAPP /* AMBA Plug & Play Bus print utility */ #define CONFIG_CMD_ASKENV /* ask for env variable */ #define CONFIG_CMD_AUTOSCRIPT /* Autoscript Support */ #define CONFIG_CMD_BDI /* bdinfo */
PATCH 5/8 SPARC: Added AMBA PnP Information listing command for LEON3
Quoted 2 lines · In message <[email protected]> you wrote:
This patch adds an U-Boot command, ambapp, which prints a summary of AMBA Bus Plug & Play information.
...
common/Makefile COBJS-$(CONFIG_CMD_STRINGS) += cmd_strings.o · line 94
Quoted 9 lines
common/Makefile +1
-0@@ -91,6 +91,7 @@ COBJS-$(CONFIG_CMD_STRINGS) += cmd_strings.o COBJS-$(CONFIG_CMD_TERMINAL) += cmd_terminal.o COBJS-$(CONFIG_CMD_UNIVERSE) += cmd_universe.o COBJS-$(CONFIG_CMD_USB) += cmd_usb.o +COBJS-y += cmd_ambapp.o
Please compile the code only for boards that enable it in the configuration.
Quoted 5 lines
common/cmd_ambapp.c new file +0
-0
...
...
common/cmd_ambapp.c line 30
Quoted 4 lines
common/cmd_ambapp.c new file +4
-0+#include <common.h> +#include <command.h> + +#if defined(CONFIG_CMD_AMBAPP )
This should not be needed any more, then.
common/cmd_ambapp.c line 44
Quoted 13 lines
common/cmd_ambapp.c new file +13
-0+#ifndef CONFIG_LEON3 +#error Only LEON3 processors support the AMBA Plug&Play bus +#endif + +#include <ambapp.h> + +DECLARE_GLOBAL_DATA_PTR ; + +/* We put these variables into .data section so that they are +* zero when entering the AMBA Plug & Play Section the first time. +* BSS is not garantueed to be zero since BSS hasn't been cleared +* the first times entering the AMBA functions. +*/
Um.... when would that be? Command code like this cannot be executed before relocation to RAM, and by then the BSS *is* zeroed.
Best regards,
Wolfgang Denk
Signature · 6 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Good manners are the settled medium of social, as specie is of
commercial, life; returns are equally expected for both.
- Lord Chesterfield _Letters to his Son_, 25 December 1753PATCH 5/8 SPARC: Added AMBA PnP Information listing command for LEON3
Quoted 10 lines · Wolfgang Denk
Quoted 4 lines · In message <[email protected]> you wrote:
This patch adds an U-Boot command, ambapp, which prints a summary of AMBA Bus Plug & Play information.
...
Quoted 16 lines
Quoted 11 lines
common/Makefile +0
-0@@ -91,6 +91,7 @@ COBJS-$(CONFIG_CMD_STRINGS) += cmd_strings.oCOBJS-$(CONFIG_CMD_TERMINAL) += cmd_terminal.o
COBJS-$(CONFIG_CMD_UNIVERSE) += cmd_universe.o
COBJS-$(CONFIG_CMD_USB) += cmd_usb.o
+COBJS-y += cmd_ambapp.oPlease compile the code only for boards that enable it in the configuration.
Ok.
Quoted 34 lines
Quoted 9 lines
common/cmd_ambapp.c new file +0
-0...
...common/cmd_ambapp.c line 30
Quoted 6 lines
common/cmd_ambapp.c new file +4
-0+#include <common.h> +#include <command.h> + +#if defined(CONFIG_CMD_AMBAPP )This should not be needed any more, then.
Quoted 10 lines
common/cmd_ambapp.c new file +10
-0+#ifndef CONFIG_LEON3 +#error Only LEON3 processors support the AMBA Plug&Play bus +#endif + +#include <ambapp.h> + +DECLARE_GLOBAL_DATA_PTR ; + +/* We put these variables into .data section so that they are +* zero when entering the AMBA Plug & Play Section the first time.
Quoted 11 lines
Quoted 5 lines
+ * BSS is not garantueed to be zero since BSS hasn't been cleared
+ * the first times entering the AMBA functions.
+ */Um.... when would that be? Command code like this cannot be executed before relocation to RAM, and by then the BSS *is* zeroed.
One part of this patch was part of the LEON2&3 patch, I missed that. cpu/leon3/ambapp.c:31,73,220
The thing is that the ambapp_apb_print variable is used when executing in rom before BSS has been cleared (cpu/leon3/ambapp.c:74 called from cpu/leon3/cpu_init.c:92 used to find the IRQ contoller). This is the case only because the ambapp command extends the standard leon3 scanning functions with a callback that is responsible to print what is found during scanning. The ambapp_apb_print controls if the callback function is called or not. I choose to implement it like this for smaller size, else I would have two scanning routines doing almost the exact same thing.
Best Regards,
Daniel Hellstrom
Quoted 6 lines
Best regards,
Wolfgang Denk
PATCH 5/8 SPARC: Added AMBA PnP Information listing command for LEON3
In reply to Daniel HellstromQuoted 7 lines · Daniel Hellstrom
This patch adds an U-Boot command, ambapp, which prints a summary of AMBA Bus Plug & Play information.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
common/cmd_ambapp.c line 30
Quoted 8 lines
common/cmd_ambapp.c new file +8
-0+ +/* +* AMBA Plug&Play information list command +*/ +#include <common.h> +#include <command.h> + +#if defined(CONFIG_CMD_AMBAPP )
Please move to the Makefile
common/cmd_ambapp.c line 37
Quoted 7 lines
common/cmd_ambapp.c new file +7
-0+ +#ifndef CONFIG_LEON3 +#error Only LEON3 processors support the AMBA Plug&Play bus +#endif + +#include <ambapp.h> +
Best Regards,
J.