summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/shared
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2012-05-16 17:20:35 +0200
committerGedare Bloom <gedare@rtems.org>2012-05-16 13:29:13 -0400
commit226d48d8262ff040aeca439c22e7398179eb01cd (patch)
tree931d2a37d49440bd95902f9b367f72f02ea5db2c /c/src/lib/libbsp/sparc/shared
parentnfsclient: Fix symbolic link evaluation (diff)
downloadrtems-226d48d8262ff040aeca439c22e7398179eb01cd.tar.bz2
LEON: moved register definitions into grlib header file
Some register layout definitions for LEON3 reside in ambapp.h which does not really has anything to do with device registers. The register structures has been incorrectly named LEON3_*, the cores are not only used on LEON3 but on LEON4 and perhaps on LEON5 when that day comes. Some structures has been renamed according to the GRLIB core name instead, which CPU that actually use it is not relevant. Drivers has been updated with the new names. Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
Diffstat (limited to 'c/src/lib/libbsp/sparc/shared')
-rw-r--r--c/src/lib/libbsp/sparc/shared/can/grcan.c5
-rw-r--r--c/src/lib/libbsp/sparc/shared/can/occan.c5
-rw-r--r--c/src/lib/libbsp/sparc/shared/i2c/i2cmst.c5
-rw-r--r--c/src/lib/libbsp/sparc/shared/include/ambapp.h43
-rw-r--r--c/src/lib/libbsp/sparc/shared/include/grlib.h91
-rw-r--r--c/src/lib/libbsp/sparc/shared/spw/grspw.c5
-rw-r--r--c/src/lib/libbsp/sparc/shared/uart/apbuart.c13
7 files changed, 110 insertions, 57 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/can/grcan.c b/c/src/lib/libbsp/sparc/shared/can/grcan.c
index 3b0a14afac..d592fbaad3 100644
--- a/c/src/lib/libbsp/sparc/shared/can/grcan.c
+++ b/c/src/lib/libbsp/sparc/shared/can/grcan.c
@@ -26,6 +26,7 @@
#include <grcan.h>
#include <ambapp.h>
+#include <grlib.h>
#define WRAP_AROUND_TX_MSGS 1
#define WRAP_AROUND_RX_MSGS 2
@@ -1097,11 +1098,11 @@ static rtems_device_driver grcan_initialize(
/* LEON3: find timer address via AMBA Plug&Play info */
{
struct ambapp_apb_info gptimer;
- LEON3_Timer_Regs_Map *tregs;
+ struct gptimer_regs *tregs;
if (ambapp_find_apbslv (&ambapp_plb, VENDOR_GAISLER, GAISLER_GPTIMER, &gptimer)
== 1) {
- tregs = (LEON3_Timer_Regs_Map *) gptimer.start;
+ tregs = (struct gptimer_regs *) gptimer.start;
sys_freq_hz = (tregs->scaler_reload + 1) * 1000 * 1000;
DBG("GRCAN: detected %dHZ system frequency\n\r", sys_freq_hz);
} else {
diff --git a/c/src/lib/libbsp/sparc/shared/can/occan.c b/c/src/lib/libbsp/sparc/shared/can/occan.c
index 4fb932dc61..b1bf54e6d0 100644
--- a/c/src/lib/libbsp/sparc/shared/can/occan.c
+++ b/c/src/lib/libbsp/sparc/shared/can/occan.c
@@ -19,6 +19,7 @@
#include <leon.h>
#include <ambapp.h>
+#include <grlib.h>
#include <occan.h>
/* RTEMS -> ERRNO decoding table
@@ -936,11 +937,11 @@ static rtems_device_driver occan_initialize(rtems_device_major_number major, rte
/* LEON3: find timer address via AMBA Plug&Play info */
{
struct ambapp_apb_info gptimer;
- LEON3_Timer_Regs_Map *tregs;
+ struct gptimer_regs *tregs;
if ( ambapp_find_apbslv(&ambapp_plb, VENDOR_GAISLER,
GAISLER_GPTIMER, &gptimer) == 1 ){
- tregs = (LEON3_Timer_Regs_Map *)gptimer.start;
+ tregs = (struct gptimer_regs *)gptimer.start;
sys_freq_hz = (tregs->scaler_reload+1)*1000*1000;
DBG("OCCAN: detected %dHZ system frequency\n\r",sys_freq_hz);
}else{
diff --git a/c/src/lib/libbsp/sparc/shared/i2c/i2cmst.c b/c/src/lib/libbsp/sparc/shared/i2c/i2cmst.c
index 7ba7208622..7acf17d1b3 100644
--- a/c/src/lib/libbsp/sparc/shared/i2c/i2cmst.c
+++ b/c/src/lib/libbsp/sparc/shared/i2c/i2cmst.c
@@ -17,6 +17,7 @@
#include <bsp.h>
#include <i2cmst.h>
#include <ambapp.h>
+#include <grlib.h>
#include <rtems/libi2c.h>
/* Enable debug printks? */
@@ -318,11 +319,11 @@ rtems_status_code leon_register_i2c(struct ambapp_bus *abus)
/* LEON3: find timer address via AMBA Plug&Play info */
{
struct ambapp_apb_info gptimer;
- LEON3_Timer_Regs_Map *tregs;
+ struct gptimer_regs *tregs;
if (ambapp_find_apbslv(abus, VENDOR_GAISLER,
GAISLER_GPTIMER, &gptimer) == 1 ) {
- tregs = (LEON3_Timer_Regs_Map *)gptimer.start;
+ tregs = (struct gptimer_regs *)gptimer.start;
gr_i2cmst_desc.prv.sysfreq = (tregs->scaler_reload+1)*1000;
} else {
gr_i2cmst_desc.prv.sysfreq = 40000; /* Default to 40MHz */
diff --git a/c/src/lib/libbsp/sparc/shared/include/ambapp.h b/c/src/lib/libbsp/sparc/shared/include/ambapp.h
index a22c5d020f..0650e06360 100644
--- a/c/src/lib/libbsp/sparc/shared/include/ambapp.h
+++ b/c/src/lib/libbsp/sparc/shared/include/ambapp.h
@@ -353,49 +353,6 @@ extern int ambapp_find_ahbslvs(
int maxno);
-/******** AMBA DEVICES *******/
-
-/* ESA MEMORY CONTROLLER */
-typedef struct {
- unsigned int mcfg1;
- unsigned int mcfg2;
- unsigned int mcfg3;
-} ambapp_regmap_mctrl;
-
-/* APB UART */
-typedef struct {
- volatile unsigned int data;
- volatile unsigned int status;
- volatile unsigned int ctrl;
- volatile unsigned int scaler;
-} ambapp_apb_uart;
-
-typedef struct {
- volatile unsigned int ilevel;
- volatile unsigned int ipend;
- volatile unsigned int iforce;
- volatile unsigned int iclear;
- volatile unsigned int mpstat;
- volatile unsigned int notused01;
- volatile unsigned int notused02;
- volatile unsigned int notused03;
- volatile unsigned int ampctrl;
- volatile unsigned int icsel[2];
- volatile unsigned int notused13;
- volatile unsigned int notused20;
- volatile unsigned int notused21;
- volatile unsigned int notused22;
- volatile unsigned int notused23;
- volatile unsigned int mask[16];
- volatile unsigned int force[16];
- /* Extended IRQ registers */
- volatile unsigned int intid[16];
- /* 0x100, align to 4Kb boundary */
- volatile unsigned int resv1[(0x1000-0x100)/4];
-} LEON3_IrqCtrl_Regs_Map;
-
-/*****************************/
-
#ifdef __cplusplus
}
#endif
diff --git a/c/src/lib/libbsp/sparc/shared/include/grlib.h b/c/src/lib/libbsp/sparc/shared/include/grlib.h
new file mode 100644
index 0000000000..7f1f7d0667
--- /dev/null
+++ b/c/src/lib/libbsp/sparc/shared/include/grlib.h
@@ -0,0 +1,91 @@
+/*
+ * Common GRLIB AMBA Core Register definitions
+ *
+ * COPYRIGHT (c) 2012
+ * Aeroflex Gaisler
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifndef __GRLIB_H__
+#define __GRLIB_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ESA MEMORY CONTROLLER */
+struct mctrl_regs {
+ unsigned int mcfg1;
+ unsigned int mcfg2;
+ unsigned int mcfg3;
+};
+
+/* APB UART */
+struct apbuart_regs {
+ volatile unsigned int data;
+ volatile unsigned int status;
+ volatile unsigned int ctrl;
+ volatile unsigned int scaler;
+};
+
+/* IRQMP and IRQAMP interrupt controllers */
+struct irqmp_regs {
+ volatile unsigned int ilevel; /* 0x00 */
+ volatile unsigned int ipend; /* 0x04 */
+ volatile unsigned int iforce; /* 0x08 */
+ volatile unsigned int iclear; /* 0x0c */
+ volatile unsigned int mpstat; /* 0x10 */
+ volatile unsigned int bcast; /* 0x14 */
+ volatile unsigned int notused02; /* 0x18 */
+ volatile unsigned int notused03; /* 0x1c */
+ volatile unsigned int ampctrl; /* 0x20 */
+ volatile unsigned int icsel[2]; /* 0x24,0x28 */
+ volatile unsigned int notused13; /* 0x2c */
+ volatile unsigned int notused20; /* 0x30 */
+ volatile unsigned int notused21; /* 0x34 */
+ volatile unsigned int notused22; /* 0x38 */
+ volatile unsigned int notused23; /* 0x3c */
+ volatile unsigned int mask[16]; /* 0x40 */
+ volatile unsigned int force[16]; /* 0x80 */
+ /* Extended IRQ registers */
+ volatile unsigned int intid[16]; /* 0xc0 */
+ /* 0x100, align to 4Kb boundary */
+ volatile unsigned int resv1[(0x1000-0x100)/4];
+};
+
+/* GPTIMER Timer instance */
+struct gptimer_timer_regs {
+ volatile unsigned int value;
+ volatile unsigned int reload;
+ volatile unsigned int ctrl;
+ volatile unsigned int notused;
+};
+
+/* GPTIMER common registers */
+struct gptimer_regs {
+ volatile unsigned int scaler_value; /* common timer registers */
+ volatile unsigned int scaler_reload;
+ volatile unsigned int cfg;
+ volatile unsigned int notused;
+ struct gptimer_timer_regs timer[7];
+};
+
+/* GRGPIO GPIO */
+struct grgpio_regs {
+ volatile unsigned int data; /* 0x00 I/O port data register */
+ volatile unsigned int output; /* 0x04 I/O port output register */
+ volatile unsigned int dir; /* 0x08 I/O port direction register */
+ volatile unsigned int imask; /* 0x0C Interrupt mask register */
+ volatile unsigned int ipol; /* 0x10 Interrupt polarity register */
+ volatile unsigned int iedge; /* 0x14 Interrupt edge register */
+ volatile unsigned int bypass; /* 0x18 Bypass register */
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/c/src/lib/libbsp/sparc/shared/spw/grspw.c b/c/src/lib/libbsp/sparc/shared/spw/grspw.c
index 8ab502023b..55986bad49 100644
--- a/c/src/lib/libbsp/sparc/shared/spw/grspw.c
+++ b/c/src/lib/libbsp/sparc/shared/spw/grspw.c
@@ -83,6 +83,7 @@
#include <ctype.h>
#include <rtems/bspIo.h>
#include <ambapp.h>
+#include <grlib.h>
#include <grspw.h>
#define DBGSPW_IOCALLS 1
@@ -390,11 +391,11 @@ int GRSPW_PREFIX(_register)(struct ambapp_bus *bus)
/* LEON3: find timer address via AMBA Plug&Play info */
{
struct ambapp_apb_info gptimer;
- LEON3_Timer_Regs_Map *tregs;
+ struct gptimer_regs *tregs;
if ( ambapp_find_apbslv(&ambapp_plb, VENDOR_GAISLER,
GAISLER_GPTIMER, &gptimer) == 1 ) {
- tregs = (LEON3_Timer_Regs_Map *)gptimer.start;
+ tregs = (struct gptimer_regs *)gptimer.start;
sys_freq_khz = (tregs->scaler_reload+1)*1000;
SPACEWIRE_DBG("GRSPW: detected %dkHZ system frequency\n\r",sys_freq_khz);
}else{
diff --git a/c/src/lib/libbsp/sparc/shared/uart/apbuart.c b/c/src/lib/libbsp/sparc/shared/uart/apbuart.c
index d442e80a46..25d0373088 100644
--- a/c/src/lib/libbsp/sparc/shared/uart/apbuart.c
+++ b/c/src/lib/libbsp/sparc/shared/uart/apbuart.c
@@ -22,6 +22,7 @@
#include <string.h>
#include <ambapp.h>
+#include <grlib.h>
#include <apbuart.h>
#ifndef DEFAULT_TXBUF_SIZE
@@ -79,7 +80,7 @@ static rtems_device_driver apbuart_write(rtems_device_major_number major, rtems_
static rtems_device_driver apbuart_control(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
typedef struct {
- ambapp_apb_uart *regs;
+ struct apbuart_regs *regs;
int irq;
int minor;
int scaler;
@@ -153,7 +154,7 @@ static void apbuart_hw_open(apbuart_priv *uart);
#endif
#if 0
-static int apbuart_outbyte_try(ambapp_apb_uart *regs, unsigned char ch)
+static int apbuart_outbyte_try(struct apbuart_regs *regs, unsigned char ch)
{
if ( (READ_REG(&regs->status) & LEON_REG_UART_STATUS_THE) == 0 )
return -1; /* Failed */
@@ -164,7 +165,7 @@ static int apbuart_outbyte_try(ambapp_apb_uart *regs, unsigned char ch)
}
-static int apbuart_inbyte_try(ambapp_apb_uart *regs)
+static int apbuart_inbyte_try(struct apbuart_regs *regs)
{
unsigned int status;
/* Clear errors if any */
@@ -386,11 +387,11 @@ static rtems_device_driver apbuart_initialize(rtems_device_major_number major,
/* LEON3: find timer address via AMBA Plug&Play info */
{
struct ambapp_apb_info gptimer;
- LEON3_Timer_Regs_Map *tregs;
+ struct gptimer_regs *tregs;
if ( ambapp_find_apbslv(&ambapp_plb, VENDOR_GAISLER,
GAISLER_GPTIMER, &gptimer) == 1 ){
- tregs = (LEON3_Timer_Regs_Map *)gptimer.start;
+ tregs = (struct gptimer_regs *)gptimer.start;
sys_freq_hz = (tregs->scaler_reload+1)*1000*1000;
DBG("APBUART: detected %dHZ system frequency\n\r",sys_freq_hz);
}else{
@@ -419,7 +420,7 @@ static rtems_device_driver apbuart_initialize(rtems_device_major_number major,
printk("APBUART[%d]: at 0x%x irq %d (0x%x)\n\r",i,dev.start,dev.irq,(unsigned int)&apbuarts[i]);
- apbuarts[i].regs = (ambapp_apb_uart *)dev.start;
+ apbuarts[i].regs = (struct apbuart_regs *)dev.start;
apbuarts[i].irq = dev.irq;
apbuarts[i].minor = i;