>From 9644a4432f7c2a5df88c8f424b8a57ee16b6b112 Mon Sep 17 00:00:00 2001 From: Jiri Gaisler <j...@gaisler.se> Date: Fri, 28 Dec 2018 11:28:39 -0400 Subject: [PATCH 4/5] Fixup grlib files to compile on RISCV
--- bsps/headers.am | 65 +++++++++++++++++++ bsps/include/grlib/apbuart.h | 1 + bsps/include/grlib/grlib_impl.h | 54 +++++++++++++++ bsps/include/grlib/grspw.h | 2 +- bsps/riscv/riscv/include/bsp.h | 1 + bsps/shared/grlib/1553/b1553brm.c | 10 +-- bsps/shared/grlib/1553/b1553rt.c | 11 +--- bsps/shared/grlib/ascs/grascs.c | 7 +- bsps/shared/grlib/can/grcan.c | 27 +------- bsps/shared/grlib/can/satcan.c | 6 +- bsps/shared/grlib/drvmgr/ambapp_bus_grlib.c | 7 +- bsps/shared/grlib/pci/gr_701.c | 2 +- bsps/shared/grlib/pci/gr_rasta_adcdac.c | 2 +- bsps/shared/grlib/pci/gr_rasta_io.c | 2 +- bsps/shared/grlib/pci/gr_rasta_spw_router.c | 2 +- bsps/shared/grlib/pci/gr_rasta_tmtc.c | 2 +- bsps/shared/grlib/pci/gr_tmtc_1553.c | 2 +- bsps/shared/grlib/pci/grpci2dma.c | 2 +- bsps/shared/grlib/slink/grslink.c | 7 +- bsps/shared/grlib/spw/grspw.c | 33 ++-------- bsps/shared/grlib/spw/grspw_pkt.c | 2 +- bsps/shared/grlib/uart/apbuart_cons.c | 32 ++++----- cpukit/score/cpu/riscv/headers.am | 2 + .../score/cpu/riscv/include/libcpu/access.h | 50 ++++++++++++++ .../cpu/riscv/include/libcpu/byteorder.h | 31 +++++++++ 25 files changed, 259 insertions(+), 103 deletions(-) create mode 100644 cpukit/score/cpu/riscv/include/libcpu/access.h create mode 100644 cpukit/score/cpu/riscv/include/libcpu/byteorder.h diff --git a/bsps/headers.am b/bsps/headers.am index e217b9b965..e62d2ba656 100644 --- a/bsps/headers.am +++ b/bsps/headers.am @@ -23,6 +23,71 @@ include_bsp_HEADERS += ../../bsps/include/bsp/u-boot.h include_bsp_HEADERS += ../../bsps/include/bsp/uart-output-char.h include_bsp_HEADERS += ../../bsps/include/bsp/utility.h +include_grlibdir = $(includedir)/grlib +include_grlib_HEADERS = +include_grlib_HEADERS += ../../bsps/include/grlib/ahbstat.h +include_grlib_HEADERS += ../../bsps/include/grlib/ambapp.h +include_grlib_HEADERS += ../../bsps/include/grlib/ambapp_bus.h +include_grlib_HEADERS += ../../bsps/include/grlib/ambapp_bus_grlib.h +include_grlib_HEADERS += ../../bsps/include/grlib/ambapp_ids.h +include_grlib_HEADERS += ../../bsps/include/grlib/apbuart.h +include_grlib_HEADERS += ../../bsps/include/grlib/apbuart_cons.h +include_grlib_HEADERS += ../../bsps/include/grlib/apbuart_termios.h +include_grlib_HEADERS += ../../bsps/include/grlib/b1553brm.h +include_grlib_HEADERS += ../../bsps/include/grlib/b1553rt.h +include_grlib_HEADERS += ../../bsps/include/grlib/bspcommon.h +include_grlib_HEADERS += ../../bsps/include/grlib/canmux.h +include_grlib_HEADERS += ../../bsps/include/grlib/cons.h +include_grlib_HEADERS += ../../bsps/include/grlib/debug_defs.h +include_grlib_HEADERS += ../../bsps/include/grlib/genirq.h +include_grlib_HEADERS += ../../bsps/include/grlib/gnatcommon.h +include_grlib_HEADERS += ../../bsps/include/grlib/gpiolib.h +include_grlib_HEADERS += ../../bsps/include/grlib/gptimer.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr1553b.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr1553bc.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr1553bc_list.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr1553bm.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr1553rt.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr_701.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr_cpci_gr740.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr_rasta_adcdac.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr_rasta_io.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr_rasta_spw_router.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr_rasta_tmtc.h +include_grlib_HEADERS += ../../bsps/include/grlib/gr_tmtc_1553.h +include_grlib_HEADERS += ../../bsps/include/grlib/gradcdac.h +include_grlib_HEADERS += ../../bsps/include/grlib/grascs.h +include_grlib_HEADERS += ../../bsps/include/grlib/grcan.h +include_grlib_HEADERS += ../../bsps/include/grlib/grctm.h +include_grlib_HEADERS += ../../bsps/include/grlib/greth.h +include_grlib_HEADERS += ../../bsps/include/grlib/grgpio.h +include_grlib_HEADERS += ../../bsps/include/grlib/griommu.h +include_grlib_HEADERS += ../../bsps/include/grlib/grlib.h +include_grlib_HEADERS += ../../bsps/include/grlib/grlib_impl.h +include_grlib_HEADERS += ../../bsps/include/grlib/grpci.h +include_grlib_HEADERS += ../../bsps/include/grlib/grpci2.h +include_grlib_HEADERS += ../../bsps/include/grlib/grpci2dma.h +include_grlib_HEADERS += ../../bsps/include/grlib/grpwm.h +include_grlib_HEADERS += ../../bsps/include/grlib/grslink.h +include_grlib_HEADERS += ../../bsps/include/grlib/grspw.h +include_grlib_HEADERS += ../../bsps/include/grlib/grspw_pkt.h +include_grlib_HEADERS += ../../bsps/include/grlib/grspw_router.h +include_grlib_HEADERS += ../../bsps/include/grlib/grtc.h +include_grlib_HEADERS += ../../bsps/include/grlib/grtm.h +include_grlib_HEADERS += ../../bsps/include/grlib/i2cmst.h +include_grlib_HEADERS += ../../bsps/include/grlib/l2c.h +include_grlib_HEADERS += ../../bsps/include/grlib/l4stat.h +include_grlib_HEADERS += ../../bsps/include/grlib/mctrl.h +include_grlib_HEADERS += ../../bsps/include/grlib/memscrub.h +include_grlib_HEADERS += ../../bsps/include/grlib/network_interface_add.h +include_grlib_HEADERS += ../../bsps/include/grlib/occan.h +include_grlib_HEADERS += ../../bsps/include/grlib/pcif.h +include_grlib_HEADERS += ../../bsps/include/grlib/satcan.h +include_grlib_HEADERS += ../../bsps/include/grlib/spictrl.h +include_grlib_HEADERS += ../../bsps/include/grlib/spwcuc.h +include_grlib_HEADERS += ../../bsps/include/grlib/spwtdp.h +include_grlib_HEADERS += ../../bsps/include/grlib/tlib.h + include_libchipdir = $(includedir)/libchip include_libchip_HEADERS = include_libchip_HEADERS += ../../bsps/include/libchip/am29lv160.h diff --git a/bsps/include/grlib/apbuart.h b/bsps/include/grlib/apbuart.h index d30ad0bcef..6a89bb949a 100644 --- a/bsps/include/grlib/apbuart.h +++ b/bsps/include/grlib/apbuart.h @@ -37,6 +37,7 @@ extern "C" { #define APBUART_CTRL_EC 0x100 #define APBUART_CTRL_TF 0x200 #define APBUART_CTRL_RF 0x400 +#define APBUART_CTRL_DB 0x800 #define APBUART_CTRL_BI 0x1000 #define APBUART_CTRL_DI 0x2000 #define APBUART_CTRL_FA 0x80000000 diff --git a/bsps/include/grlib/grlib_impl.h b/bsps/include/grlib/grlib_impl.h index 755f635911..f1260671e0 100644 --- a/bsps/include/grlib/grlib_impl.h +++ b/bsps/include/grlib/grlib_impl.h @@ -90,6 +90,60 @@ RTEMS_INLINE_ROUTINE void *grlib_calloc(size_t nelem, size_t elsize) #endif +#ifdef __sparc + +RTEMS_INLINE_ROUTINE unsigned char grlib_read_uncached8(unsigned int address) +{ + unsigned char tmp; + __asm__ (" lduba [%1]1, %0 " + : "=r"(tmp) + : "r"(address) + ); + return tmp; +} + +RTEMS_INLINE_ROUTINE unsigned short grlib_read_uncached16(unsigned int addr) { + unsigned short tmp; + __asm__ (" lduha [%1]1, %0 " + : "=r"(tmp) + : "r"(addr) + ); + return tmp; +} + + +RTEMS_INLINE_ROUTINE unsigned int grlib_read_uncached32(unsigned int address) +{ + unsigned int tmp; + __asm__ (" lda [%1]1, %0 " + : "=r"(tmp) + : "r"(address) + ); + return tmp; +} +#else + +static unsigned char __inline__ grlib_read_uncached8(unsigned int address) +{ + unsigned char tmp = (*(volatile unsigned char *)(address)); + return tmp; +} + +static __inline__ unsigned short grlib_read_uncached16(unsigned int address) { + unsigned short tmp = (*(volatile unsigned short *)(address)); + return tmp; +} + +RTEMS_INLINE_ROUTINE unsigned int grlib_read_uncached32(unsigned int address) +{ + unsigned int tmp = (*(volatile unsigned int *)(address)); + return tmp; +} + +#endif + +extern struct ambapp_bus ambapp_plb; + #ifdef __cplusplus } #endif diff --git a/bsps/include/grlib/grspw.h b/bsps/include/grlib/grspw.h index 3270e8a5a2..70a9e0b100 100644 --- a/bsps/include/grlib/grspw.h +++ b/bsps/include/grlib/grspw.h @@ -18,7 +18,7 @@ #ifndef __GRSPW_H__ #define __GRSPW_H__ -#include <ambapp.h> +#include <grlib/ambapp.h> #ifdef __cplusplus extern "C" { diff --git a/bsps/riscv/riscv/include/bsp.h b/bsps/riscv/riscv/include/bsp.h index d8d0347da8..6d6046d195 100644 --- a/bsps/riscv/riscv/include/bsp.h +++ b/bsps/riscv/riscv/include/bsp.h @@ -34,6 +34,7 @@ #include <rtems.h> #include <rtems/clockdrv.h> #include <rtems/console.h> +#include <rtems/irq-extension.h> #include <bspopts.h> #include <bsp/default-initial-extension.h> diff --git a/bsps/shared/grlib/1553/b1553brm.c b/bsps/shared/grlib/1553/b1553brm.c index 5575abb525..57ef70126b 100644 --- a/bsps/shared/grlib/1553/b1553brm.c +++ b/bsps/shared/grlib/1553/b1553brm.c @@ -59,15 +59,7 @@ #endif #define READ_REG(address) (*(volatile unsigned int *)address) -#define READ_DMA(address) _BRM_REG_READ16((unsigned int)address) -static __inline__ unsigned short _BRM_REG_READ16(unsigned int addr) { - unsigned short tmp; - __asm__ (" lduha [%1]1, %0 " - : "=r"(tmp) - : "r"(addr) - ); - return tmp; -} +#define READ_DMA(address) grlib_read_uncached16((unsigned int)address) static rtems_device_driver brm_initialize(rtems_device_major_number major, rtems_device_minor_number minor, void *arg); static rtems_device_driver brm_open(rtems_device_major_number major, rtems_device_minor_number minor, void *arg); diff --git a/bsps/shared/grlib/1553/b1553rt.c b/bsps/shared/grlib/1553/b1553rt.c index 35afd901c8..d7257e461f 100644 --- a/bsps/shared/grlib/1553/b1553rt.c +++ b/bsps/shared/grlib/1553/b1553rt.c @@ -52,16 +52,7 @@ #define FUNCDBG(x...) #endif -#define READ_DMA(address) _READ16((unsigned int)address) - -static __inline__ unsigned short _READ16(unsigned int addr) { - unsigned short tmp; - asm(" lduha [%1]1, %0 " - : "=r"(tmp) - : "r"(addr) - ); - return tmp; -} +#define READ_DMA(address) grlib_read_uncached16((unsigned int)address) static rtems_device_driver rt_initialize(rtems_device_major_number major, rtems_device_minor_number minor, void *arg); static rtems_device_driver rt_open(rtems_device_major_number major, rtems_device_minor_number minor, void *arg); diff --git a/bsps/shared/grlib/ascs/grascs.c b/bsps/shared/grlib/ascs/grascs.c index 8d3d1b4285..79acb8a3c6 100644 --- a/bsps/shared/grlib/ascs/grascs.c +++ b/bsps/shared/grlib/ascs/grascs.c @@ -13,6 +13,7 @@ #include <grlib/ambapp.h> #include <grlib/grascs.h> +#include <grlib/grlib.h> #include <grlib/grlib_impl.h> #ifndef GAISLER_ASCS @@ -129,7 +130,7 @@ static int ASCS_get_sysfreq(void) { appropriate bits in the core's STS register and releases the associated semaphore */ -static rtems_isr ASCS_irqhandler(rtems_vector_number v) { +static rtems_isr ASCS_irqhandler(void *v) { if(cfg->regs->sts & GRASCS_STS_TCDONE) { /* Clear TC done bit */ @@ -270,7 +271,9 @@ int ASCS_init(void) { GRASCS_CMD_TCDONE | GRASCS_CMD_TMDONE; /* Register interrupt routine */ - set_vector(ASCS_irqhandler,irq+0x10,2); + rtems_interrupt_handler_install(irq, "grascs", + RTEMS_INTERRUPT_SHARED, + ASCS_irqhandler, NULL); return 0; diff --git a/bsps/shared/grlib/can/grcan.c b/bsps/shared/grlib/can/grcan.c index 55154d823a..d69d99d85a 100644 --- a/bsps/shared/grlib/can/grcan.c +++ b/bsps/shared/grlib/can/grcan.c @@ -165,40 +165,19 @@ static void grcan_hw_sync( static void grcan_interrupt(void *arg); #ifdef GRCAN_REG_BYPASS_CACHE -#define READ_REG(address) _grcan_read_nocache((unsigned int)(address)) +#define READ_REG(address) grlib_read_uncached32((unsigned int)(address)) #else #define READ_REG(address) (*(volatile unsigned int *)(address)) #endif #ifdef GRCAN_DMA_BYPASS_CACHE -#define READ_DMA_WORD(address) _grcan_read_nocache((unsigned int)(address)) -#define READ_DMA_BYTE(address) _grcan_read_nocache_byte((unsigned int)(address)) -static unsigned char __inline__ _grcan_read_nocache_byte(unsigned int address) -{ - unsigned char tmp; - __asm__ (" lduba [%1]1, %0 " - : "=r"(tmp) - : "r"(address) - ); - return tmp; -} +#define READ_DMA_WORD(address) grlib_read_uncached32((unsigned int)(address)) +#define READ_DMA_BYTE(address) grlib_read_uncached8((unsigned int)(address)) #else #define READ_DMA_WORD(address) (*(volatile unsigned int *)(address)) #define READ_DMA_BYTE(address) (*(volatile unsigned char *)(address)) #endif -#if defined(GRCAN_REG_BYPASS_CACHE) || defined(GRCAN_DMA_BYPASS_CACHE) -static unsigned int __inline__ _grcan_read_nocache(unsigned int address) -{ - unsigned int tmp; - __asm__ (" lda [%1]1, %0 " - : "=r"(tmp) - : "r"(address) - ); - return tmp; -} -#endif - #define NELEM(a) ((int) (sizeof (a) / sizeof (a[0]))) static int grcan_count = 0; diff --git a/bsps/shared/grlib/can/satcan.c b/bsps/shared/grlib/can/satcan.c index c6d58aaed4..ff54128332 100644 --- a/bsps/shared/grlib/can/satcan.c +++ b/bsps/shared/grlib/can/satcan.c @@ -152,7 +152,7 @@ static void almalloc(unsigned char **alptr, void **ptr, int sz) *alptr = (unsigned char *) (((int)*ptr+sz) & ~(sz-1)); } -static rtems_isr satcan_interrupt_handler(rtems_vector_number v) +static rtems_isr satcan_interrupt_handler(void *v) { unsigned int irq; unsigned int fifo; @@ -665,7 +665,9 @@ static rtems_device_driver satcan_initialize(rtems_device_major_number major, rt priv->dmamode = SATCAN_DMA_MODE_SYSTEM; /* Register interrupt handler */ - set_vector(satcan_interrupt_handler, d.irq+0x10, 2); + rtems_interrupt_handler_install(d.irq, "satcan", + RTEMS_INTERRUPT_SHARED, + satcan_interrupt_handler, NULL); return RTEMS_SUCCESSFUL; } diff --git a/bsps/shared/grlib/drvmgr/ambapp_bus_grlib.c b/bsps/shared/grlib/drvmgr/ambapp_bus_grlib.c index 5eb51d0944..fbbe5fa9bb 100644 --- a/bsps/shared/grlib/drvmgr/ambapp_bus_grlib.c +++ b/bsps/shared/grlib/drvmgr/ambapp_bus_grlib.c @@ -18,7 +18,7 @@ #include <libcpu/access.h> #include <grlib/ambapp_bus.h> -#include <drvmgr/ambapp_bus_grlib.h> +#include <grlib/ambapp_bus_grlib.h> #include <grlib/genirq.h> #include <bsp.h> @@ -188,7 +188,8 @@ static int ambapp_grlib_int_register void *arg ) { - return BSP_shared_interrupt_register(irq, info, isr, arg); + return rtems_interrupt_handler_install(irq, info, + RTEMS_INTERRUPT_SHARED, isr, arg); } static int ambapp_grlib_int_unregister @@ -199,7 +200,7 @@ static int ambapp_grlib_int_unregister void *arg ) { - return BSP_shared_interrupt_unregister(irq, isr, arg); + return rtems_interrupt_handler_remove(irq, isr, arg); } static int ambapp_grlib_int_clear diff --git a/bsps/shared/grlib/pci/gr_701.c b/bsps/shared/grlib/pci/gr_701.c index 5c88e59082..c9ac0db0f2 100644 --- a/bsps/shared/grlib/pci/gr_701.c +++ b/bsps/shared/grlib/pci/gr_701.c @@ -33,7 +33,7 @@ #include <drvmgr/drvmgr.h> #include <grlib/ambapp_bus.h> #include <drvmgr/pci_bus.h> -#include <drvmgr/bspcommon.h> +#include <grlib/bspcommon.h> #include <grlib/genirq.h> #include <grlib/gr_701.h> diff --git a/bsps/shared/grlib/pci/gr_rasta_adcdac.c b/bsps/shared/grlib/pci/gr_rasta_adcdac.c index 8e3c7920e4..12e35acbc5 100644 --- a/bsps/shared/grlib/pci/gr_rasta_adcdac.c +++ b/bsps/shared/grlib/pci/gr_rasta_adcdac.c @@ -31,7 +31,7 @@ #include <drvmgr/drvmgr.h> #include <grlib/ambapp_bus.h> #include <drvmgr/pci_bus.h> -#include <drvmgr/bspcommon.h> +#include <grlib/bspcommon.h> #include <grlib/genirq.h> #include <grlib/gr_rasta_adcdac.h> diff --git a/bsps/shared/grlib/pci/gr_rasta_io.c b/bsps/shared/grlib/pci/gr_rasta_io.c index fbeb1ffd5c..f4c9d50a7b 100644 --- a/bsps/shared/grlib/pci/gr_rasta_io.c +++ b/bsps/shared/grlib/pci/gr_rasta_io.c @@ -31,7 +31,7 @@ #include <drvmgr/drvmgr.h> #include <grlib/ambapp_bus.h> #include <drvmgr/pci_bus.h> -#include <drvmgr/bspcommon.h> +#include <grlib/bspcommon.h> #include <grlib/genirq.h> #include <grlib/gr_rasta_io.h> diff --git a/bsps/shared/grlib/pci/gr_rasta_spw_router.c b/bsps/shared/grlib/pci/gr_rasta_spw_router.c index 51dc908687..6efbaa463d 100644 --- a/bsps/shared/grlib/pci/gr_rasta_spw_router.c +++ b/bsps/shared/grlib/pci/gr_rasta_spw_router.c @@ -29,7 +29,7 @@ #include <drvmgr/drvmgr.h> #include <grlib/ambapp_bus.h> #include <drvmgr/pci_bus.h> -#include <drvmgr/bspcommon.h> +#include <grlib/bspcommon.h> #include <grlib/genirq.h> #include <grlib/gr_rasta_spw_router.h> diff --git a/bsps/shared/grlib/pci/gr_rasta_tmtc.c b/bsps/shared/grlib/pci/gr_rasta_tmtc.c index 3f09b4150f..bef2927926 100644 --- a/bsps/shared/grlib/pci/gr_rasta_tmtc.c +++ b/bsps/shared/grlib/pci/gr_rasta_tmtc.c @@ -31,7 +31,7 @@ #include <drvmgr/drvmgr.h> #include <grlib/ambapp_bus.h> #include <drvmgr/pci_bus.h> -#include <drvmgr/bspcommon.h> +#include <grlib/bspcommon.h> #include <grlib/genirq.h> #include <grlib/gr_rasta_tmtc.h> diff --git a/bsps/shared/grlib/pci/gr_tmtc_1553.c b/bsps/shared/grlib/pci/gr_tmtc_1553.c index 581d6d240f..ce02b8a256 100644 --- a/bsps/shared/grlib/pci/gr_tmtc_1553.c +++ b/bsps/shared/grlib/pci/gr_tmtc_1553.c @@ -32,7 +32,7 @@ #include <drvmgr/drvmgr.h> #include <grlib/ambapp_bus.h> #include <drvmgr/pci_bus.h> -#include <drvmgr/bspcommon.h> +#include <grlib/bspcommon.h> #include <grlib/genirq.h> #include <grlib/gr_tmtc_1553.h> diff --git a/bsps/shared/grlib/pci/grpci2dma.c b/bsps/shared/grlib/pci/grpci2dma.c index 7e39ca691d..cb41d48966 100644 --- a/bsps/shared/grlib/pci/grpci2dma.c +++ b/bsps/shared/grlib/pci/grpci2dma.c @@ -98,7 +98,7 @@ /* Memory and HW Registers Access routines. All 32-bit access routines */ #define BD_WRITE(addr, val) (*(volatile unsigned int *)(addr) = (unsigned int)(val)) /*#define BD_READ(addr) (*(volatile unsigned int *)(addr))*/ -#define BD_READ(addr) leon_r32_no_cache((unsigned long)(addr)) +#define BD_READ(addr) grlib_read_uncached32((unsigned long)(addr)) #define REG_WRITE(addr, val) (*(volatile unsigned int *)(addr) = (unsigned int)(val)) #define REG_READ(addr) (*(volatile unsigned int *)(addr)) diff --git a/bsps/shared/grlib/slink/grslink.c b/bsps/shared/grlib/slink/grslink.c index fa6f205915..bf21649aa6 100644 --- a/bsps/shared/grlib/slink/grslink.c +++ b/bsps/shared/grlib/slink/grslink.c @@ -26,6 +26,7 @@ #include <grlib/grslink.h> #include <grlib/ambapp.h> +#include <grlib/grlib.h> #include <grlib/grlib_impl.h> #ifndef GAISLER_SLINK @@ -235,7 +236,7 @@ static int SLINK_getsysfreq(void) * variable. SLAVE-WORD-SEND transfers are placed in the IO card's receive * queue. */ -static rtems_isr SLINK_interrupt_handler(rtems_vector_number v) +static rtems_isr SLINK_interrupt_handler(void *v) { unsigned int sts; unsigned int wrd; @@ -406,7 +407,9 @@ int SLINK_init(unsigned int nullwrd, int parity, int qsize, cfg->slink_seq_change = sequence_callback; /* Set-up IRQ handling */ - set_vector(SLINK_interrupt_handler,irq+0x10,2); + rtems_interrupt_handler_install(irq, "slink", + RTEMS_INTERRUPT_SHARED, + SLINK_interrupt_handler, NULL); return 0; diff --git a/bsps/shared/grlib/spw/grspw.c b/bsps/shared/grlib/spw/grspw.c index ca0f63edd8..fbaadd1e13 100644 --- a/bsps/shared/grlib/spw/grspw.c +++ b/bsps/shared/grlib/spw/grspw.c @@ -25,6 +25,10 @@ #include <grlib/grlib_impl.h> +#ifndef CPU_SPARC_HAS_SNOOPING +#define CPU_SPARC_HAS_SNOOPING 1 +#endif + #define DBGSPW_IOCALLS 1 #define DBGSPW_TX 2 #define DBGSPW_RX 4 @@ -152,32 +156,9 @@ void (*grspw_timecode_callback) #define _MEM_READ8(address) (*(volatile unsigned char *)(address)) #define _MEM_READ32(address) (*(volatile unsigned int *)(address)) #else -static inline unsigned int _SPW_READ(volatile void *addr) { - unsigned int tmp; - __asm__ (" lda [%1]1, %0 " - : "=r"(tmp) - : "r"(addr) - ); - return tmp; -} - -static inline unsigned int _MEM_READ8(volatile void *addr) { - unsigned int tmp; - __asm__ (" lduba [%1]1, %0 " - : "=r"(tmp) - : "r"(addr) - ); - return tmp; -} - -static inline unsigned int _MEM_READ32(volatile void *addr) { - unsigned int tmp; - __asm__ (" lda [%1]1, %0 " - : "=r"(tmp) - : "r"(addr) - ); - return tmp; -} +#define _SPW_READ(address) grlib_read_uncached32((unsigned int) address) +#define _MEM_READ8(address) grlib_read_uncached8((unsigned int) address) +#define _MEM_READ32(address) grlib_read_uncached32((unsigned int) address) #endif #define MEM_READ8(addr) _MEM_READ8((volatile void *)(addr)) diff --git a/bsps/shared/grlib/spw/grspw_pkt.c b/bsps/shared/grlib/spw/grspw_pkt.c index 208f5a14f7..56b39d78db 100644 --- a/bsps/shared/grlib/spw/grspw_pkt.c +++ b/bsps/shared/grlib/spw/grspw_pkt.c @@ -315,7 +315,7 @@ struct grspw_txbd { /* Memory and HW Registers Access routines. All 32-bit access routines */ #define BD_WRITE(addr, val) (*(volatile unsigned int *)(addr) = (unsigned int)(val)) /*#define BD_READ(addr) (*(volatile unsigned int *)(addr))*/ -#define BD_READ(addr) leon_r32_no_cache((unsigned long)(addr)) +#define BD_READ(addr) grlib_read_uncached32((unsigned long)(addr)) #define REG_WRITE(addr, val) (*(volatile unsigned int *)(addr) = (unsigned int)(val)) #define REG_READ(addr) (*(volatile unsigned int *)(addr)) diff --git a/bsps/shared/grlib/uart/apbuart_cons.c b/bsps/shared/grlib/uart/apbuart_cons.c index 8cd8a1ebf0..ee635e6944 100644 --- a/bsps/shared/grlib/uart/apbuart_cons.c +++ b/bsps/shared/grlib/uart/apbuart_cons.c @@ -260,10 +260,10 @@ int apbuart_init1(struct drvmgr_dev *dev) db = 0; #ifdef LEON3 if (priv->regs == leon3_debug_uart) { - db = priv->regs->ctrl & (LEON_REG_UART_CTRL_RE | - LEON_REG_UART_CTRL_TE | - LEON_REG_UART_CTRL_PE | - LEON_REG_UART_CTRL_PS); + db = priv->regs->ctrl & (APBUART_CTRL_RE | + APBUART_CTRL_TE | + APBUART_CTRL_PE | + APBUART_CTRL_PS); } #endif /* Let UART debug tunnelling be untouched if Flow-control is set. @@ -273,9 +273,9 @@ int apbuart_init1(struct drvmgr_dev *dev) * guess that we are debugging if FL is already set, the debugger set * either LB or DB depending on UART capabilities. */ - if (priv->regs->ctrl & LEON_REG_UART_CTRL_FL) { - db |= priv->regs->ctrl & (LEON_REG_UART_CTRL_DB | - LEON_REG_UART_CTRL_LB | LEON_REG_UART_CTRL_FL); + if (priv->regs->ctrl & APBUART_CTRL_FL) { + db |= priv->regs->ctrl & (APBUART_CTRL_DB | + APBUART_CTRL_LB | APBUART_CTRL_FL); } priv->regs->ctrl = db; @@ -561,26 +561,26 @@ static bool set_attributes( switch(t->c_cflag & (PARENB|PARODD)){ case (PARENB|PARODD): /* Odd parity */ - ctrl |= LEON_REG_UART_CTRL_PE|LEON_REG_UART_CTRL_PS; + ctrl |= APBUART_CTRL_PE|APBUART_CTRL_PS; break; case PARENB: /* Even parity */ - ctrl &= ~LEON_REG_UART_CTRL_PS; - ctrl |= LEON_REG_UART_CTRL_PE; + ctrl &= ~APBUART_CTRL_PS; + ctrl |= APBUART_CTRL_PE; break; default: case 0: case PARODD: /* No Parity */ - ctrl &= ~(LEON_REG_UART_CTRL_PS|LEON_REG_UART_CTRL_PE); + ctrl &= ~(APBUART_CTRL_PS|APBUART_CTRL_PE); } if (!(t->c_cflag & CLOCAL)) - ctrl |= LEON_REG_UART_CTRL_FL; + ctrl |= APBUART_CTRL_FL; else - ctrl &= ~LEON_REG_UART_CTRL_FL; + ctrl &= ~APBUART_CTRL_FL; /* Update new settings */ uart->regs->ctrl = ctrl; @@ -618,14 +618,14 @@ static void get_attributes( /* Read out current parity */ ctrl = uart->regs->ctrl; - if (ctrl & LEON_REG_UART_CTRL_PE) { - if (ctrl & LEON_REG_UART_CTRL_PS) + if (ctrl & APBUART_CTRL_PE) { + if (ctrl & APBUART_CTRL_PS) t->c_cflag |= PARENB|PARODD; /* Odd parity */ else t->c_cflag |= PARENB; /* Even parity */ } - if ((ctrl & LEON_REG_UART_CTRL_FL) == 0) + if ((ctrl & APBUART_CTRL_FL) == 0) t->c_cflag |= CLOCAL; rtems_termios_set_best_baud(t, apbuart_get_baud(uart)); diff --git a/cpukit/score/cpu/riscv/headers.am b/cpukit/score/cpu/riscv/headers.am index 415075ce46..abb8a42f78 100644 --- a/cpukit/score/cpu/riscv/headers.am +++ b/cpukit/score/cpu/riscv/headers.am @@ -1,4 +1,6 @@ ## This file was generated by "./boostrap -H". +include_libcpu_HEADERS += score/cpu/riscv/include/libcpu/access.h +include_libcpu_HEADERS += score/cpu/riscv/include/libcpu/byteorder.h include_rtems_HEADERS += score/cpu/riscv/include/rtems/asm.h include_rtems_score_HEADERS += score/cpu/riscv/include/rtems/score/cpu.h include_rtems_score_HEADERS += score/cpu/riscv/include/rtems/score/cpu_asm.h diff --git a/cpukit/score/cpu/riscv/include/libcpu/access.h b/cpukit/score/cpu/riscv/include/libcpu/access.h new file mode 100644 index 0000000000..cdf6b77122 --- /dev/null +++ b/cpukit/score/cpu/riscv/include/libcpu/access.h @@ -0,0 +1,50 @@ +/* + * access.h - access routines for SPARC. SPARC is big endian only. + * + * COPYRIGHT (c) 2011 + * 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.org/license/LICENSE. + */ + +#ifndef _LIBCPU_ACCESS_H +#define _LIBCPU_ACCESS_H + +#include <rtems/system.h> +#include <rtems/score/cpu.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* "Raw" access */ +extern uint8_t _ld8(uint8_t *addr); +extern void _st8(uint8_t *addr, uint8_t val); +extern uint16_t _ld16(uint16_t *addr); +extern void _st16(uint16_t *addr, uint16_t val); +extern uint32_t _ld32(uint32_t *addr); +extern void _st32(uint32_t *addr, uint32_t val); +extern uint64_t _ld64(uint64_t *addr); +extern void _st64(uint64_t *addr, uint64_t val); + +/* Aliases for Big Endian */ +extern uint16_t _ld_be16(uint16_t *addr); +extern void _st_be16(uint16_t *addr, uint16_t val); +extern uint32_t _ld_be32(uint32_t *addr); +extern void _st_be32(uint32_t *addr, uint32_t val); +extern uint64_t _ld_be64(uint64_t *addr); +extern void _st_be64(uint64_t *addr, uint64_t val); + +/* Little endian */ +extern uint16_t _ld_le16(uint16_t *addr); +extern void _st_le16(uint16_t *addr, uint16_t val); +extern uint32_t _ld_le32(uint32_t *addr); +extern void _st_le32(uint32_t *addr, uint32_t val); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cpukit/score/cpu/riscv/include/libcpu/byteorder.h b/cpukit/score/cpu/riscv/include/libcpu/byteorder.h new file mode 100644 index 0000000000..939e51fe84 --- /dev/null +++ b/cpukit/score/cpu/riscv/include/libcpu/byteorder.h @@ -0,0 +1,31 @@ +/* + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#ifndef _LIBCPU_BYTEORDER_H +#define _LIBCPU_BYTEORDER_H + +static inline void st_le32(volatile uint32_t *addr, uint32_t value) +{ + *(addr)=value ; +} + +static inline uint32_t ld_le32(volatile uint32_t *addr) +{ + return(*addr); +} + +static inline void st_le16(volatile uint16_t *addr, uint16_t value) +{ + *(addr)=value ; +} + +static inline uint16_t ld_le16(volatile uint16_t *addr) +{ + return(*addr); +} + + +#endif -- 2.17.1
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel