m68k/mvme162: Remove obsolete BSP family

Updates #5031
This commit is contained in:
Joel Sherrill
2025-02-05 15:27:40 -06:00
committed by Kinsey Moore
parent d2d9bd4aee
commit 17ae630e9a
25 changed files with 0 additions and 1865 deletions

View File

@@ -1,414 +0,0 @@
MVME162
=======
EISCAT Scientific Association. M.Savitski
This material is a part of the MVME162 Board Support Package
for the RTEMS executive. Its licensing policies are those of the
RTEMS distribution.
Updated by Joel Sherrill (jsherril@redstone.army.mil) after
inclusion in the standard release.
Models
------
There are three different models of the MVME162 board. There are many
variations within each model.
```
Model Variants
--------- --------------------------------------------------
MVME162 MVME162-0xx
MVME162FX MVME162-4xx, MVME162-5xx
MVME162LX MVME162-2xx, MVME162-3xx, MVME162-7xx, MVME162-8xx
```
All models use either an MC68040 or MC68LC040 (no FPU) processors. The
processor used varies by variant as does the speed, the amount and type
of memory and the I/O devices (serial, ethernet, SCSI and VME). See the
README.models file for details.
Configuring the BSP
-------------------
The BSP needs to be configured for your specific board. The following
files need to be modified.
include/bsp.h
Change the MOT_162BUG_VEC_ADDRESS define to start of memory for your
board
make/custom/mvme162.cfg
If your board has an MC68040 processor
- change the value of RTEMS_CPU_MODEL
- remove the -msoft-float flag from CPU_CFLAGS
MVME162FX and DMA on the IP bus
-------------------------------
From Eric Vaitl <eric@viasat.com>:
If you have any customers that will be using the 162FX, tell them to
be careful. The main difference between the 162 and the 162FX is DMA
on the IP bus. I spent over a month trying to write a DMA HDLC driver
for GreenSprings IP-MP and couldn't get it to work. I talked to some
people at GreenSprings, and they agreed that there really is no way to
get DMA to work unless you know the size of the packets in advance.
Once the IP2 chip DMA controller is given the character count and
enabled, it doesn't accept further commands until all of the
characters have arrived. The only way to terminate a DMA transfer
prematurely is by raising DMAEND* during the last read. None of the IP
modules that I know of are currently able to do that. GreenSprings is
working on the problem, but nothing is going to available for a few
months.
Installation
------------
Nothing unique to the MVME162. It has been incorporated into the
standard release.
Port Description
----------------
This section describes the initial port effort. There have been
additions and modifications to the bsp since this was done.
Interestingly, this was the first bsp submitted to the RTEMS project
and the submission offer came out of the blue with no prior
communication with the author. :)
The port was done using already existing ports to the M68020 boards,
DMV152 and MVME136.
The initial host development system was SUN/Solaris 2.3, and
the cross-development environment consisted of Free Software
Foundation (FSF)'s GNU C compiler (version 2.6), GNU Assembler
(version 2.3) and GNU binary utilities binutils version 2.5.2,
built with m68k as a target. The recent/latest versions of other
GNU programs (flex, make, etc) were also used at the build stage.
In all subdirectories of the RTEMS distribution tree, the directories
mvme136 were duplicated as mvme162.
Essential modifications are detailed below:
- the MVME162-specific hardware registers were described in bsp.h
- timer and clock routines were made to use the MVME162's Tick Timers 1
and 2, respectively
- shared memory support was replaced by stubs for the time being
- console IO was lifted entirely from the DMV152 support code, thanks
to the fact that Z8530 SCC used in DMV152 is upwards compatible with
the Z85230 SCC of the MVME162. (Only the memory mapping of the SCC
registers had to be changed.)
- symbols in several *.s files were prepended with underscores to
comply with the xgcc configuration used (it prepends underscores to all
symbols defined in c code)
- linkcmds file was modified to place the linked code into the memory
configured for the board in use
- bspstart.c was modified as follows:
monitors_vector_table = (rtems_isr *)0xFFE00000;
was made to point to the power-up location of MVME162 interrupt vector
table.
- The shutdown is a temporary solution. To exit cleanly, it has to disable
all enabled interrupts and restore the board to its power-up status.
Presently this is not done satisfactorily, as a result, the board needs
a hardware reset from the external VMEbus master or from the front
panel to ensure correct operation for subsequent downloads.
Host System
-----------
The VMEbus master used to externally control and download the MVME162
is a FORCE CPU-2CE board running Solaris 2.3. A simple program to load
s-records and start/reset the MVME162 was written. The code is in the
file tools/sload.c
This code depends on the external VMEbus master's vme driver and is
provided as an example, without the Makefile. The bulk of the program
which parses the s-records is courtesy of Kym Newbery,
(8918927y@lux.levels.unisa.edu.au).
In general, apart from x-gcc, the tools most often used while building
RTEMS for MVME162 were: find, grep, diff, and, of course
MVME162 Embedded Controller Programmer's Reference Guide,
Motorola, MVME162PG/D1.
Thanks
------
- to On-Line Applications Research Corporation (OAR) for developing
RTEMS and making it available on a Technology Transfer basis;
- to Joel Sherril, the leader of the RTEMS development group for
stimulating and helpful discussions;
- to Kym Newbery (8918927y@lux.levels.unisa.edu.au) for his s-record
parser;
- to Gerd Truschinski (gt@first.gmd.de) for creating and running the
crossgcc mailing list
- to FSF and Cygnus Support for great free software;
What's new
----------
- 28.07.95 BSP adjusted to rtems-3.2.0.
- Now console driver uses interrupts on receive (ring buffer
code lifted with thanks from the IDP BSP next door (../idp))
- both front-panel serial interfaces are supported
- serious bug in timer interrupts fixed
- interrupt test tm27 now supported
```
+----------------------------------+-------------------------------+
| Dr. Mikhail (Misha) Savitski | Voice : +46-980-79162 |
| Software Systems Engineer | Fax : +46-980-79161 |
| EISCAT Svalbard Radar Project | E-mail: mms@eiscathq.irf.se |
| EISCAT Scientific Association |----------- /\_/\ -----------|
| Box 812 S-98128 Kiruna, Sweden | EIS { o o } CAT |
+----------------------------------+-------oQQQ--(>I<)--QQQo-------+
```
MVME162 Models
==============
There are three different models of the MVME162 board with many variations
within each model.
```
Model Variants
--------- --------------------------------------------------
MVME162 MVME162-0xx
MVME162FX MVME162-4xx, MVME162-5xx
MVME162LX MVME162-2xx, MVME162-3xx, MVME162-7xx, MVME162-8xx
```
All models use either an MC68040 or MC68LC040 (no FPU) processors. The
processor used varies by variant as does the speed, the amount and type
of memory and the I/O devices (serial, ethernet, SCSI and VME). See the
following tables for details.
MVME162 Variants
----------------
Source
------
o MVME162 Embedded Controller User's Manual (MVME162/D2)
Common Configuration
--------------------
o One EPROM socket
o 8Kx8 NVRAM/TOD clock
o Two serial ports
o 1MB Flash memory
o Four MVIP Industry Pack interfaces
o One or two DRAM/SRAM mezzanine memory boards
```
Model Processor Speed DRAM SRAM Other
----- --------- ----- ---- ----- ------------------
001 MC68LC040 25MHz 1MB 512KB
002 MC68040 25MHz 1MB 512KB
003 MC68LC040 25MHz 1MB 512KB No VMEbus
010 MC68LC040 25MHz 4MB 512KB
011 MC68LC040 25MHz 4MB 512KB SCSI
012 MC68LC040 25MHz 4MB 512KB Ethernet
013 MC68LC040 25MHz 4MB 512KB Ethernet, SCSI
014 MC68LC040 25MHz 4MB - Ethernet, No VMEbus
020 MC68040 25MHz 4MB 512KB
021 MC68040 25MHz 4MB 512KB SCSI
022 MC68040 25MHz 4MB 512KB Ethernet
023 MC68040 25MHz 4MB 512KB Ethernet, SCSI
026 MC68040 25MHz 4MB - Ethernet, No VMEbus
030 MC68LC040 25MHz 8MB 512KB
031 MC68LC040 25MHz 8MB 512KB SCSI
032 MC68LC040 25MHz 8MB 512KB Ethernet
033 MC68LC040 25MHz 8MB 512KB Ethernet, SCSI
040 MC68040 25MHz 8MB 512KB
041 MC68040 25MHz 8MB 512KB SCSI
042 MC68040 25MHz 8MB 512KB Ethernet
043 MC68040 25MHz 8MB 512KB Ethernet, SCSI
Serial Interface Modules
------------------------
SIM05 01-W3846B EIA-232-D DTE
SIM06 01-W3865B EIA-232-D DCE
SIM07 01-W3868B EIA-530 DTE
SIM08 01-W3867B EIA-530 DCE
DRAM/SRAM Expansion Memory Boards
---------------------------------
?
```
MVME162FX Variants
------------------
Source
------
o MVME162FX Data Sheet
o MVME162FX Embedded Controller Installation and Use (V162FXA/IH3)
o MVME162FX Embedded Controller Programmer's Reference Guide (V162FXA/PG1)
o MVME162FX 400/500-Series VME Embedded Controller Installation and Use
(V162FXA/IH4) Edition of March 2000\Uffffffff
o V162FXA/LT2, November 1995
Common Configuration
--------------------
o One EPROM socket
o 8Kx8 NVRAM/TOD clock
o Two serial ports
o 1MB Flash memory with 162Bug installed
o 512KB SRAM with battery backup
o Four IndustryPack interfaces
o One or two DRAM/SRAM mezzanine memory boards
Uses MC2 Chip, IP2 Chip, 4MB or 12MB mezzanine DRAM board
```
Model Processor Speed DRAM Other
----- --------- ----- ---- ------------------
403
410 MC68LC040 25Mhz 4MB
411 MC68LC040 25Mhz 4MB SCSI
412 MC68LC040 25Mhz 4MB Ethernet
413 MC68LC040 25Mhz 4MB Ethernet, SCSI
420 ?
421 ?
422 ?
423 ?
430 MC68LC040 25Mhz 8MB
431 MC68LC040 25Mhz 8MB SCSI
432 MC68LC040 25Mhz 8MB Ethernet
433 MC68LC040 25Mhz 8MB Ethernet, SCSI
440 ?
441 ?
442 ?
443 ?
450 ?
451 ?
452 ?
453 MC68LC040 25Mhz 16MB Ethernet, SCSI
460 ?
461 ?
462 ?
463 ?
510 MC68040 32MHz 4MB
511 MC68040 32MHz 4MB SCSI
512 MC68040 32MHz 4MB Ethernet
513 MC68040 32MHz 4MB Ethernet, SCSI
520 MC68040 32MHz 8MB
521 MC68040 32MHz 8MB SCSI
522 MC68040 32MHz 8MB Ethernet
523 MC68040 32MHz 8MB Ethernet, SCSI
530 MC68040 32MHz 16MB
531 MC68040 32MHz 16MB SCSI
532 MC68040 32MHz 16MB Ethernet
533 MC68040 32MHz 16MB Ethernet, SCSI
Serial Interface Modules
------------------------
SIM05 01-W3846B EIA-232-D DTE
SIM06 01-W3865B EIA-232-D DCE
SIM07 01-W3868B EIA-530 DTE
SIM08 01-W3867B EIA-530 DCE
SIM09 01-W3002F EIA-485/422 DTE/DCE
DRAM/SRAM Expansion Memory Boards
---------------------------------
MVME162-502 4MB DRAM
MVME162-503 12MB DRAM
? 2MB SRAM
```
MVME162LX Variants
------------------
Source
------
o Supplement to MVME162LX Embedded Controller Installation Guide
(MVME162LXIG/D1A1) February 1995
o MVME162LX Embedded Controller Data Sheet
o MVME162LX 200/300 Series Embedded Controller Programmer's Reference
Guide (V162LX2-3A/PG2)
o MVME162LX 200/300 Series Embedded Controller Installation and Use
(V162LX2-3A/IH3)
o MVME162LX 700/800 Series Embedded Controller Installation and Use
(V162-7A/IH1)
o MVME162LX 700/800 Series Embedded Controller Installation and Use
(V162-7A/IH2)
Common Configuration
--------------------
o One EPROM socket
o 8Kx8 NVRAM/TOD clock
o 4 serial ports EIA-232-D DTE (unless otherwise noted)
o 1MB Flash
o 2 IP sites (unless otherwise noted)
```
Model Processor Speed DRAM Other
----- --------- ----- -------- ------------------
200 MC68LC040 25MHz 1MB No serial(?)
201 MC68LC040 25MHz 1MB
202 MC68LC040 25MHz 1MB
210 MC68LC040 25MHz 4MB
211 MC68LC040 25MHz 4MB SCSI
212 MC68LC040 25MHz 4MB Ethernet
213 MC68LC040 25MHz 4MB Ethernet, SCSI
216 MC68LC040 25MHz 4MB Ethernet, No VMEbus, No serial(?)
220 MC68040 25MHz 4MB
222 MC68040 25MHz 4MB Ethernet
223 MC68040 25MHz 4MB Ethernet, SCSI
233 MC68LC040 25MHz 4MB ECC
233 MC68LC040 25MHz 4MB ECC Ethernet, SCSI
243 MC68040 25MHz 4MB ECC Ethernet, SCSI
253 MC68LC040 25MHz 16MB ECC Ethernet, SCSI
253 MC68LC040 25MHz 16MB ECC Ethernet, SCSI
262 MC68040 25MHz 16MB ECC Ethernet
263 MC68040 25MHz 16MB ECC Ethernet, SCSI
322 MC68LC040 25MHz 8MB ECC Ethernet
323 MC68LC040 25MHz 8MB ECC Ethernet, SCSI
333 MC68040 25MHz 8MB ECC Ethernet, SCSI, No IP sites(?)
353 MC68040 25MHz 32MB ECC Ethernet, SCSI, 4 IP sites
723 MC68040 32MHz 4MB Ethernet, SCSI
743 MC68040 32MHz 4MB ECC Ethernet, SCSI
763 MC68040 32MHz 16MB ECC Ethernet, SCSI
813 MC68040 32MHz 8MB Ethernet, SCSI
833 MC68040 32MHz 8MB ECC Ethernet, SCSI
853 MC68040 32MHz 32MB ECC Ethernet, SCSI
863 MC68040 32MHz 16MB ECC Ethernet, SCSI
```
DRAM Expansion Memory Boards
----------------------------
MVME162-202 4MB (non-stacking)
MVME162-203 16MB ECC (non-stacking)
MVME162-204 16MB ECC (stacking)
MVME162-207 4MB ECC (non-stakcing)
MVME162-208 4MB ECC (stacking)
MVME162-209 8MB ECC (non-stacking)
MVME162-210 8MB ECC (stacking)
MVME162-211 32MB ECC (non-stacking)
MVME162-212 32MB ECC (stacking)

View File

@@ -1,73 +0,0 @@
/*
* This routine initializes the Tick Timer 1 on the MVME162 board.
*
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
* 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.
*
* Modifications of respective RTEMS file: COPYRIGHT (c) 1994.
* EISCAT Scientific Association. M.Savitski
*
* This material is a part of the MVME162 Board Support Package
* for the RTEMS executive. Its licensing policies are those of the
* RTEMS above.
*/
#include <rtems.h>
#include <rtems/btimer.h>
#include <bsp.h>
/* Periodic tick interval */
#define TICK_INTERVAL 0x10000U
#define TIMER_INT_LEVEL 6
uint32_t Ttimer_val;
bool benchmark_timer_find_average_overhead;
rtems_isr timerisr(rtems_vector_number vector);
void benchmark_timer_initialize(void)
{
(void) set_vector( timerisr, VBR0 * 0x10 + 0x8, 0 );
Ttimer_val = 0; /* clear timer ISR count */
lcsr->vector_base |= MASK_INT; /* unmask VMEchip2 interrupts */
lcsr->intr_clear |= 0x01000000; /* clear pending interrupt */
lcsr->to_ctl = 0xE7; /* prescaler to 1 MHz (see Appendix A1) */
lcsr->timer_cmp_1 = TICK_INTERVAL;
lcsr->timer_cnt_1 = 0; /* clear counter */
lcsr->board_ctl |= 7; /* increment, reset-on-compare, */
/* and clear-overflow-cnt */
lcsr->intr_level[0] |= TIMER_INT_LEVEL; /* set int level */
lcsr->intr_ena |= 0x01000000; /* enable tick timer 1 interrupt */
}
#define AVG_OVERHEAD 3U /* It typically takes 3.0 microseconds */
/* (3 countdowns) to start/stop the timer. */
#define LEAST_VALID 10U /* Don't trust a value lower than this */
benchmark_timer_t benchmark_timer_read(void)
{
uint32_t total;
total = (Ttimer_val * TICK_INTERVAL) + lcsr->timer_cnt_1;
if ( benchmark_timer_find_average_overhead == true )
return total; /* in one-half microsecond units */
if ( total < LEAST_VALID )
return 0; /* below timer resolution */
return (total-AVG_OVERHEAD) >> 1;
}
void benchmark_timer_disable_subtracting_average_overhead(
bool find_flag
)
{
benchmark_timer_find_average_overhead = find_flag;
}

View File

@@ -1,44 +0,0 @@
/* timer_isr()
*
* This routine provides the ISR for the Z8036 timer on the MVME136
* board. The timer is set up to generate an interrupt at maximum
* intervals.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
* 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.
*
* Modifications of respective RTEMS file: COPYRIGHT (c) 1994.
* EISCAT Scientific Association. M.Savitski
*
* This material is a part of the MVME162 Board Support Package
* for the RTEMS executive. Its licensing policies are those of the
* RTEMS above.
*/
#include <rtems/asm.h>
BEGIN_CODE
.set INTR_CLEAR_REG, 0xfff40074 | interrupt clear register
.set RELOAD, 0x01000000 | clear tick 1 interrupt
PUBLIC (Ttimer_val)
PUBLIC (timerisr)
SYM (timerisr):
move.l a0, -(a7) | save a0
movea.l #INTR_CLEAR_REG, a0 | a0 = addr of cmd status reg
ori.l #RELOAD, (a0) | reload countdown
addq.l #1, SYM (Ttimer_val) | increment timer value
move.l (a7)+, a0 | restore a0
rte
END_CODE
END

View File

@@ -1,83 +0,0 @@
/*
* This routine initializes the Tick Timer 2 on the MVME162 board.
* The tick frequency is 1 millisecond.
*/
/*
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
* 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.
*
* Modifications of respective RTEMS file: COPYRIGHT (c) 1994.
* EISCAT Scientific Association. M.Savitski
*
* This material is a part of the MVME162 Board Support Package
* for the RTEMS executive. Its licensing policies are those of the
* RTEMS above.
*/
#include <stdlib.h>
#include <bsp.h>
#include <rtems/clockdrv.h>
#define MS_COUNT 1000 /* T2's countdown constant (1 ms) */
#define CLOCK_INT_LEVEL 6 /* T2's interrupt level */
uint32_t Clock_isrs; /* ISRs until next tick */
volatile uint32_t Clock_driver_ticks; /* ticks since initialization */
rtems_isr_entry Old_ticker;
static void Clock_exit( void );
#define CLOCK_VECTOR (VBR0 * 0x10 + 0x9)
/*
* ISR Handler
*/
static rtems_isr Clock_isr(rtems_vector_number vector)
{
Clock_driver_ticks += 1;
lcsr->timer_cnt_2 = 0; /* clear counter */
lcsr->intr_clear |= 0x02000000;
if ( Clock_isrs == 1 ) {
rtems_clock_tick();
Clock_isrs = rtems_configuration_get_microseconds_per_tick() / 1000;
}
else
Clock_isrs -= 1;
}
static void Install_clock(rtems_isr_entry clock_isr )
{
Clock_driver_ticks = 0;
Clock_isrs = rtems_configuration_get_microseconds_per_tick() / 1000;
Old_ticker = (rtems_isr_entry) set_vector( clock_isr, CLOCK_VECTOR, 1 );
lcsr->vector_base |= MASK_INT; /* unmask VMEchip2 interrupts */
lcsr->to_ctl = 0xE7; /* prescaler to 1 MHz (see Appendix A1) */
lcsr->timer_cmp_2 = MS_COUNT;
lcsr->timer_cnt_2 = 0; /* clear counter */
lcsr->board_ctl |= 0x700; /* increment, reset-on-compare, and */
/* clear-overflow-cnt */
lcsr->intr_level[0] |= CLOCK_INT_LEVEL * 0x10; /* set int level */
lcsr->intr_ena |= 0x02000000; /* enable tick timer 2 interrupt */
atexit( Clock_exit );
}
void Clock_exit( void )
{
/* Dummy for now. See other m68k BSP's for code examples */
}
void _Clock_Initialize( void )
{
Install_clock( Clock_isr );
}

View File

@@ -1,7 +0,0 @@
#
# mvme162 RTEMS Test Database
#
# Format is one line per test that is _NOT_ built.
#
exclude: fsdosfsname01

View File

@@ -1,29 +0,0 @@
#
# Config file for the mvme162 BSP
#
include $(RTEMS_ROOT)/make/custom/default.cfg
RTEMS_CPU=m68k
RTEMS_MVME162_MODEL=mvme162
# This contains the compiler options necessary to select the CPU model
# and (hopefully) optimize for it.
#
CPU_CFLAGS = -mcpu=68040 -msoft-float
# optimize flag: typically -O2
CFLAGS_OPTIMIZE_V = -O2 -g -fomit-frame-pointer
CFLAGS_OPTIMIZE_V += -ffunction-sections -fdata-sections
LDFLAGS = -Wl,--gc-sections
define bsp-post-link
$(default-bsp-post-link)
$(OBJCOPY) -O binary $(basename $@)$(EXEEXT) $(basename $@)$(DOWNEXT)
endef
# BSP-specific tools
SLOAD=$(PROJECT_TOOLS)/sload

View File

@@ -1,7 +0,0 @@
#
# mvme162lx RTEMS Test Database
#
# Format is one line per test that is _NOT_ built.
#
exclude: fsdosfsname01

View File

@@ -1,34 +0,0 @@
#
# Configuration file for a MVME162LX
#
# This is an MVME162 model with ...
#
# All mvme162 configurations share the same base file, only the cpu model
# differs.
#
RTEMS_MVME162_MODEL=mvme162lx
include $(RTEMS_ROOT)/make/custom/default.cfg
RTEMS_CPU=m68k
# This contains the compiler options necessary to select the CPU model
# and (hopefully) optimize for it.
#
CPU_CFLAGS = -mcpu=68040 -msoft-float
# optimize flag: typically -O2
CFLAGS_OPTIMIZE_V = -O2 -g -fomit-frame-pointer
CFLAGS_OPTIMIZE_V += -ffunction-sections -fdata-sections
LDFLAGS = -Wl,--gc-sections
define bsp-post-link
$(default-bsp-post-link)
$(OBJCOPY) -O binary $(basename $@)$(EXEEXT) $(basename $@)$(DOWNEXT)
endef
# BSP-specific tools
SLOAD=$(PROJECT_TOOLS)/sload

View File

@@ -1,277 +0,0 @@
/*
* This file contains the MVME162 console IO package.
*/
/*
* COPYRIGHT (c) 1989-2013.
* On-Line Applications Research Corporation (OAR).
*
* 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.
*
* Modifications of respective RTEMS file: COPYRIGHT (c) 1994.
* EISCAT Scientific Association. M.Savitski
*
* This material is a part of the MVME162 Board Support Package
* for the RTEMS executive. Its licensing policies are those of the
* RTEMS above.
*/
#define M162_INIT
#include <rtems/bspIo.h>
#include <rtems/console.h>
#include <rtems/libio.h>
#include <rtems/ringbuf.h>
#include <bsp.h>
Ring_buffer_t Console_Buffer[2];
/*
* Interrupt handler for receiver interrupts
*/
static rtems_isr C_Receive_ISR(rtems_vector_number vector)
{
register int ipend, port;
ZWRITE0(1, 0x38); /* reset highest IUS */
ipend = ZREAD(1, 3); /* read int pending from A side */
if (ipend == 0x04) port = 0; /* channel B intr pending */
else if (ipend == 0x20) port = 1; /* channel A intr pending */
else return;
Ring_buffer_Add_character(&Console_Buffer[port], ZREADD(port));
if (ZREAD(port, 1) & 0x70) { /* check error stat */
ZWRITE0(port, 0x30); /* reset error */
}
}
rtems_device_driver console_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg
)
{
int i;
rtems_status_code status;
/*
* Initialise receiver interrupts on both ports
*/
for (i = 0; i <= 1; i++) {
Ring_buffer_Initialize( &Console_Buffer[i] );
ZWRITE(i, 2, SCC_VECTOR);
ZWRITE(i, 10, 0);
ZWRITE(i, 1, 0x10); /* int on all Rx chars or special condition */
ZWRITE(i, 9, 8); /* master interrupt enable */
}
set_vector(C_Receive_ISR, SCC_VECTOR, 1); /* install ISR for ports A and B */
mcchip->vector_base = 0;
mcchip->gen_control = 2; /* MIEN */
mcchip->SCC_int_ctl = 0x13; /* SCC IEN, IPL3 */
status = rtems_io_register_name(
"/dev/console",
major,
(rtems_device_minor_number) 1
);
if (status != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred(status);
status = rtems_io_register_name(
"/dev/tty00",
major,
(rtems_device_minor_number) 0
);
if (status != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred(status);
status = rtems_io_register_name(
"/dev/tty01",
major,
(rtems_device_minor_number) 1
);
if (status != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred(status);
return RTEMS_SUCCESSFUL;
}
/*
* Non-blocking char input
*/
bool char_ready(int port, char *ch)
{
if ( Ring_buffer_Is_empty( &Console_Buffer[port] ) )
return false;
Ring_buffer_Remove_character( &Console_Buffer[port], *ch );
return true;
}
/*
* Block on char input
*/
static char inbyte(int port)
{
char tmp_char;
while ( !char_ready(port, &tmp_char) );
return tmp_char;
}
/*
* This routine transmits a character out the SCC. It no longer supports
* XON/XOFF flow control.
*/
static void outbyte(char ch, int port)
{
while (1) {
if (ZREAD0(port) & TX_BUFFER_EMPTY) break;
}
ZWRITED(port, ch);
}
/*
* Open entry point
*/
rtems_device_driver console_open(
rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg
)
{
return RTEMS_SUCCESSFUL;
}
/*
* Close entry point
*/
rtems_device_driver console_close(
rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg
)
{
return RTEMS_SUCCESSFUL;
}
/*
* read bytes from the serial port. We only have stdin.
*/
rtems_device_driver console_read(
rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg
)
{
rtems_libio_rw_args_t *rw_args;
char *buffer;
int maximum;
int count = 0;
rw_args = (rtems_libio_rw_args_t *) arg;
buffer = rw_args->buffer;
maximum = rw_args->count;
if ( minor > 1 )
return RTEMS_INVALID_NUMBER;
for (count = 0; count < maximum; count++) {
buffer[ count ] = inbyte( minor );
if (buffer[ count ] == '\n' || buffer[ count ] == '\r') {
buffer[ count++ ] = '\n';
break;
}
}
rw_args->bytes_moved = count;
return (count >= 0) ? RTEMS_SUCCESSFUL : RTEMS_UNSATISFIED;
}
/*
* write bytes to the serial port. Stdout and stderr are the same.
*/
rtems_device_driver console_write(
rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg
)
{
int count;
int maximum;
rtems_libio_rw_args_t *rw_args;
char *buffer;
rw_args = (rtems_libio_rw_args_t *) arg;
buffer = rw_args->buffer;
maximum = rw_args->count;
if ( minor > 1 )
return RTEMS_INVALID_NUMBER;
for (count = 0; count < maximum; count++) {
if ( buffer[ count ] == '\n') {
outbyte('\r', minor );
}
outbyte( buffer[ count ], minor );
}
rw_args->bytes_moved = maximum;
return 0;
}
/*
* IO Control entry point
*/
rtems_device_driver console_control(
rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg
)
{
return RTEMS_SUCCESSFUL;
}
/*
* _162Bug_output_char
*
* Output a single character using the 162Bug functions. The character
* will be written to the default output port.
*/
static void _162Bug_output_char( char c )
{
asm volatile( "moveb %0, -(%%sp)\n\t" /* char to output */
"trap #15\n\t" /* Trap to 162Bug */
".short 0x20" /* Code for .OUTCHR */
:: "d" (c) );
}
/*
* _BSP_output_char
*
* printk() function prototyped in bspIo.h. Does not use termios.
*
* If we have initialized the console device then use it, otherwise
* use the 162Bug routines to send it to the default output port.
*/
static void _BSP_output_char(char c)
{
_162Bug_output_char(c);
}
/* Printk function */
BSP_output_char_function_type BSP_output_char = _BSP_output_char;
BSP_polling_getchar_function_type BSP_poll_char = NULL;

View File

@@ -1,224 +0,0 @@
/**
* @file
*
* @ingroup RTEMSBSPsM68kMVME162
*
* @brief Global BSP definitions.
*/
/*
* This include file contains all MVME162fx board IO definitions.
*/
/*
* COPYRIGHT (c) 1989-2014.
* On-Line Applications Research Corporation (OAR).
*
* 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.
*
* Modifications of respective RTEMS file: COPYRIGHT (c) 1994.
* EISCAT Scientific Association. M.Savitski
*
* This material is a part of the MVME162 Board Support Package
* for the RTEMS executive. Its licensing policies are those of the
* RTEMS above.
*/
#ifndef LIBBSP_M68K_MVME162_BSP_H
#define LIBBSP_M68K_MVME162_BSP_H
/**
* @defgroup RTEMSBSPsM68kMVME162 MVME162
*
* @ingroup RTEMSBSPsM68k
*
* @brief MVME162 Board Support Package.
*
* @{
*/
#include <bspopts.h>
#include <bsp/default-initial-extension.h>
#include <rtems.h>
#include <mvme16x_hw.h>
#ifdef __cplusplus
extern "C" {
#endif
/*----------------------------------------------------------------*/
typedef volatile struct {
unsigned char chipID;
unsigned char chipREV;
unsigned char gen_control;
unsigned char vector_base;
unsigned long timer_cmp_1;
unsigned long timer_cnt_1;
unsigned long timer_cmp_2;
unsigned long timer_cnt_2;
unsigned char LSB_prescaler_count;
unsigned char prescaler_clock_adjust;
unsigned char time_ctl_2;
unsigned char time_ctl_1;
unsigned char time_int_ctl_4;
unsigned char time_int_ctl_3;
unsigned char time_int_ctl_2;
unsigned char time_int_ctl_1;
unsigned char dram_err_int_ctl;
unsigned char SCC_int_ctl;
unsigned char time_ctl_4;
unsigned char time_ctl_3;
unsigned short DRAM_space_base;
unsigned short SRAM_space_base;
unsigned char DRAM_size;
unsigned char DRAM_SRAM_opt;
unsigned char SRAM_size;
unsigned char reserved;
unsigned char LANC_error;
unsigned char reserved1;
unsigned char LANC_int_ctl;
unsigned char LANC_berr_ctl;
unsigned char SCSI_error;
unsigned char general_inputs;
unsigned char MVME_162_version;
unsigned char SCSI_int_ctl;
unsigned long timer_cmp_3;
unsigned long timer_cnt_3;
unsigned long timer_cmp_4;
unsigned long timer_cnt_4;
unsigned char bus_clk;
unsigned char PROM_acc_time_ctl;
unsigned char FLASH_acc_time_ctl;
unsigned char ABORT_int_ctl;
unsigned char RESET_ctl;
unsigned char watchdog_timer_ctl;
unsigned char acc_watchdog_time_base_sel;
unsigned char reserved2;
unsigned char DRAM_ctl;
unsigned char reserved4;
unsigned char MPU_status;
unsigned char reserved3;
unsigned long prescaler_count;
} mcchip_regs;
#define mcchip ((mcchip_regs * const) 0xFFF42000)
/*----------------------------------------------------------------*/
/*
* SCC Z8523(0) defines and macros
* -------------------------------
* Prototypes for the low-level serial io are also included here,
* because such stuff is bsp-specific (yet). The function bodies
* are in console.c
*
* NOTE from Eric Vaitl <evaitl@viasat.com>:
*
* I dropped RTEMS into a 162FX today (the MVME162-513). The 162FX has a
* bug in the MC2 chip (revision 1) such that the SCC data register is
* not accessible, it has to be accessed indirectly through the SCC
* control register.
*/
enum {portB, portA};
extern bool char_ready(int port, char *ch);
extern char char_wait(int port);
extern void char_put(int port, char ch);
#define TX_BUFFER_EMPTY 0x04
#define RX_DATA_AVAILABLE 0x01
#define SCC_VECTOR 0x40
typedef volatile struct {
unsigned char pad1;
volatile unsigned char csr;
unsigned char pad2;
volatile unsigned char buf;
} scc_regs;
#define scc ((scc_regs * const) 0xFFF45000)
#define ZWRITE0(port, v) (scc[port].csr = (unsigned char)(v))
#define ZREAD0(port) (scc[port].csr)
#define ZREAD(port, n) (ZWRITE0(port, n), (scc[port].csr))
#define ZREADD(port) (scc[port].csr=0x08, scc[port].csr )
#define ZWRITE(port, n, v) (ZWRITE0(port, n), ZWRITE0(port, v))
#define ZWRITED(port, v) (scc[port].csr = 0x08, \
scc[port].csr = (unsigned char)(v))
/*----------------------------------------------------------------*/
#ifdef M162_INIT
#undef EXTERN
#define EXTERN
#else
#undef EXTERN
#define EXTERN extern
#endif
/*
* This value is the default address location of the 162Bug vector table
* and is also the default start address of the boards DRAM. This value
* may be different for your specific board based on a number of factors:
*
* Default DRAM address: 0x00000000
* Default SRAM address: 0xFFE00000
*
* o If no DRAM can be found by the 162Bug program, it will use SRAM.
* o The default SRAM address may be different if SRAM mezzanine boards
* are installed on the main board.
* o Both the DRAM and SRAM addresses can be modified by changing the
* appropriate values in NVRAM using the ENV command at the 162Bug
* prompt.
*
* If your board has different values than the defaults, change the value
* of the following define.
*
*/
#define MOT_162BUG_VEC_ADDRESS 0x00000000
extern rtems_isr_entry M68Kvec[]; /* vector table address */
/* functions */
rtems_isr_entry set_vector(
rtems_isr_entry handler,
rtems_vector_number vector,
int type
);
/*
* Prototypes for methods in the BSP that cross file boundaries.
*/
bool char_ready(int port, char *ch);
#ifdef __cplusplus
}
#endif
/** @} */
#endif

View File

@@ -1 +0,0 @@
#include <bsp/irq-default.h>

View File

@@ -1,27 +0,0 @@
/*
* This file was submitted by Eric Vaitl <vaitl@viasat.com> and
* supports page table initialization.
*/
#ifndef PAGE_TABLE_H
#define PAGE_TABLE_H
extern void page_table_teardown(void);
extern void page_table_init(void);
extern int page_table_map(void *addr, unsigned long size, int cache_type);
enum {
CACHE_WRITE_THROUGH,
CACHE_COPYBACK,
CACHE_NONE_SERIALIZED,
CACHE_NONE
};
enum {
PTM_SUCCESS,
PTM_BAD_ADDR,
PTM_BAD_SIZE,
PTM_BAD_CACHE,
PTM_NO_TABLE_SPACE
};
#endif

View File

@@ -1,41 +0,0 @@
/*
* @file
* @ingroup m68k_mvme162
* @brief Implementations for interrupt mechanisms for Time Test 27
*/
/*
* 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 _RTEMS_TMTEST27
#error "This is an RTEMS internal file you must not include directly."
#endif
#ifndef __tm27_h
#define __tm27_h
/*
* Define the interrupt mechanism for Time Test 27
*
* NOTE: We use software interrupt 0
*/
#define MUST_WAIT_FOR_INTERRUPT 0
#define TM27_USE_VECTOR_HANDLER
#define Install_tm27_vector( handler ) \
set_vector( (handler), VBR1 * 0x10 + 0x8, 1 ); \
lcsr->intr_level[2] |= 3; \
lcsr->intr_ena |= 0x100;
#define Cause_tm27_intr() lcsr->intr_soft_set |= 0x100
#define Clear_tm27_intr() lcsr->intr_clear |= 0x100
#define Lower_tm27_intr() /* empty */
#endif

View File

@@ -1,88 +0,0 @@
/*
* Real Time Clock (MK48T08) for RTEMS on MVME162
*
* Author:
* COPYRIGHT (C) 1997
* by Katsutoshi Shibuya - BU Denken Co.,Ltd. - Sapporo - JAPAN
* ALL RIGHTS RESERVED
*
* 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.
*
* This material is a part of the MVME162 Board Support Package
* for the RTEMS executive. Its licensing policies are those of the
* RTEMS above.
*/
#include <rtems.h>
#include <rtems/tod.h>
#define tod ((volatile unsigned char *)0xfffc1ff8)
static int getTod(int n, unsigned char mask)
{
unsigned char x;
x = tod[n]&mask;
return (x>>4)*10+(x&0x0f);
}
static void setTod(int n, unsigned char d)
{
tod[n] = ((d/10)<<4)+(d%10);
}
void setRealTimeToRTEMS(void)
{
rtems_time_of_day t;
tod[0] |= 0x40; /* Stop read register */
t.year = 1900+getTod(7,0xff);
t.month = getTod(6,0x1f);
t.day = getTod(5,0x3f);
t.hour = getTod(3,0x3f);
t.minute = getTod(2,0x7f);
t.second = getTod(1,0x7f);
t.ticks = 0;
tod[0] &= 0x3f; /* Release read register */
rtems_clock_set(&t);
}
void setRealTimeFromRTEMS()
{
rtems_time_of_day t;
rtems_clock_get_tod(&t);
t.year -= 1900;
tod[0] |= 0x80; /* Stop write register */
setTod(7,t.year);
setTod(6,t.month);
setTod(5,t.day);
setTod(4,1); /* I don't know which day of week is */
setTod(3,t.hour);
setTod(2,t.minute);
setTod(1,t.second);
tod[0] &= 0x3f; /* Write these parameters */
}
int checkRealTime()
{
rtems_time_of_day t;
int d;
tod[0] |= 0x40; /* Stop read register */
rtems_clock_get_tod(&t);
if((t.year != 1900+getTod(7,0xff))
|| (t.month != getTod(6,0x1f))
|| (t.day != getTod(5,0x3f)))
d = 9999;
else
d = (t.hour-getTod(3,0x3f))*3600
+ (t.minute-getTod(3,0x7f))*60
+ (t.second - getTod(1,0x7f));
tod[1] &= 0x3f;
return d;
}

View File

@@ -1,47 +0,0 @@
/*
* This routine returns control to 162Bug.
*/
/*
* COPYRIGHT (c) 1989-2014.
* On-Line Applications Research Corporation (OAR).
*
* 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.
*
* Modifications of respective RTEMS file: COPYRIGHT (c) 1994.
* EISCAT Scientific Association. M.Savitski
*
* This material is a part of the MVME162 Board Support Package
* for the RTEMS executive. Its licensing policies are those of the
* RTEMS above.
*/
#include <bsp.h>
#include <bsp/bootcard.h>
#include <rtems/zilog/z8036.h>
#include <page_table.h>
static rtems_isr bsp_return_to_monitor_trap(
rtems_vector_number vector
)
{
page_table_teardown();
lcsr->intr_ena = 0; /* disable interrupts */
m68k_set_vbr(MOT_162BUG_VEC_ADDRESS); /* restore 162Bug vectors */
__asm__ volatile( "trap #15" ); /* trap to 162Bug */
__asm__ volatile( ".short 0x63" ); /* return to 162Bug (.RETURN) */
}
void bsp_reset( rtems_fatal_source source, rtems_fatal_code code )
{
(void) source;
(void) code;
M68Kvec[ 45 ] = bsp_return_to_monitor_trap; /* install handler */
__asm__ volatile( "trap #13" ); /* ensures SUPV mode */
RTEMS_UNREACHABLE();
}

View File

@@ -1,58 +0,0 @@
/*
* This routine does the bulk of the system initialization.
*/
/*
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
* 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.
*
* Modifications of respective RTEMS file: COPYRIGHT (c) 1994.
* EISCAT Scientific Association. M.Savitski
*
* This material is a part of the MVME162 Board Support Package
* for the RTEMS executive. Its licensing policies are those of the
* RTEMS above.
*/
#include <bsp.h>
#include <bsp/bootcard.h>
#include <page_table.h>
/*
* bsp_start
*
* This routine does the bulk of the system initialization.
*/
void bsp_start( void )
{
rtems_isr_entry *monitors_vector_table;
int index;
monitors_vector_table = (rtems_isr_entry *)MOT_162BUG_VEC_ADDRESS;
m68k_set_vbr( monitors_vector_table );
for ( index=2 ; index<=255 ; index++ )
M68Kvec[ index ] = monitors_vector_table[ 32 ];
M68Kvec[ 2 ] = monitors_vector_table[ 2 ]; /* bus error vector */
M68Kvec[ 4 ] = monitors_vector_table[ 4 ]; /* breakpoints vector */
M68Kvec[ 9 ] = monitors_vector_table[ 9 ]; /* trace vector */
M68Kvec[ 47 ] = monitors_vector_table[ 47 ]; /* system call vector */
m68k_set_vbr( &M68Kvec );
/*
* You may wish to make the VME arbitration round-robin here, currently
* we leave it as it is.
*/
/* set the Interrupt Base Vectors */
lcsr->vector_base = (VBR0 << 28) | (VBR1 << 24);
page_table_init();
}

View File

@@ -1,52 +0,0 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* This file contains directives for the GNU linker which are specific
* to the Motorola MVME162 boards.
*/
/*
* COPYRIGHT (c) 1989-2007,2016.
* On-Line Applications Research Corporation (OAR).
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* MVME147 port for TNI - Telecom Bretagne
* by Dominique LE CAMPION (Dominique.LECAMPION@enst-bretagne.fr)
* May 1996
*/
RamSize = DEFINED(RamSize) ? RamSize : 1M;
RamEnd = RamBase + RamSize;
MEMORY
{
bootrom_reserved : ORIGIN = 0x00000000, LENGTH = 0x20000
ram : ORIGIN = 0x00020000, LENGTH = RamSize - 0x20000
}
REGION_ALIAS ("REGION_TEXT", ram);
REGION_ALIAS ("REGION_TEXT_LOAD", ram);
REGION_ALIAS ("REGION_DATA", ram);
REGION_ALIAS ("REGION_DATA_LOAD", ram);
INCLUDE linkcmds.base

View File

@@ -1,196 +0,0 @@
/*
* This file was submitted by Eric Vaitl <vaitl@viasat.com>.
* The manipulation of the page table has a very positive impact on
* the performance of the MVME162.
*
* The following history is included verbatim from the submitter.
*
* Revision 1.8 1995/11/18 00:07:25 vaitl
* Modified asm-statements to get rid of the register hard-codes.
*
* Revision 1.7 1995/10/27 21:00:32 vaitl
* Modified page table routines so application code can map
* VME space.
*
* Revision 1.6 1995/10/26 17:40:01 vaitl
* Two cache changes after reading the mvme162 users manual.
*
* 1) The users manual says that the MPU can act as a source for the
* VME2 chip, so I made the VME accessable memory copy-back instead
* of write through. I have't changed the comments yet. If this
* causes problems, I'll change it back.
*
* 2) The 162 book also says that IO space should be serialized as well as
* non-cacheable. I flipped the appropriate dttr0 and ittr0 registers. I
* don't think this is really necessary because we don't recover from any
* exceptions. If it slows down IO addresses too much, I'll change it back
* and see what happens.
*
* Revision 1.5 1995/10/25 19:32:38 vaitl
* Got it. Three problems:
* 1) Must cpusha instead of cinva.
* 2) On page descriptors the PDT field of 1 or 3 is resident. On pointer
* descriptors resident is 2 or 3. I was using 2 for everything.
* Changed it to 3 for everything.
* 3) Forgot to do a pflusha.
*
* Revision 1.4 1995/10/25 17:47:11 vaitl
* Still working on it.
*
* Revision 1.3 1995/10/25 17:16:05 vaitl
* Working on page table. Caching partially set up, but can't currently
* set tc register.
*
*/
#include <string.h>
#include <page_table.h>
/* All page table must fit between BASE_TABLE_ADDR and
MAX_TABLE_ADDR. */
#define BASE_TABLE_ADDR 0x10000
#define MAX_TABLE_ADDR 0x20000
#define ROOT_TABLE_SIZE 512
#define POINTER_TABLE_SIZE 512
#define PAGE_TABLE_SIZE 256
static unsigned long *root_table;
static unsigned long *next_avail;
/* Returns a zeroed out table. */
static unsigned long *table_alloc(int size){
unsigned long *addr=next_avail;
if(((unsigned long)next_avail + size) > MAX_TABLE_ADDR){
return 0;
}
memset((void *)addr,0, size);
next_avail =(unsigned long *)((unsigned long)next_avail + size);
return addr;
}
/*
void page_table_init();
This should transparently map the first 4 Meg of ram. Caching is
turned off from 0x00000000 to 0x00020000 (this region is used by
162Bug and contains the page tables). From 0x00020000 to 0x00400000
we are using copy back caching. DTTR0 and ITTR0 are set up to
directly translate from 0x80000000-0xffffffff with caching turned
off and serialized. Addresses between 0x400000 and 0x80000000 are
illegal.
*/
void page_table_init(){
/* put everything in a known state */
page_table_teardown();
root_table=table_alloc(ROOT_TABLE_SIZE);
/* First set up TTR.
base address = 0x80000000
address mask = 0x7f
Ignore FC2 for match.
Noncachable.
Not write protected.*/
__asm__ volatile ("movec %0,%%dtt0\n\
movec %0,%%itt0"
:: "d" (0x807fc040));
/* Point urp and srp at root page table. */
__asm__ volatile ("movec %0,%%urp\n\
movec %0,%%srp"
:: "d" (BASE_TABLE_ADDR));
page_table_map((void *)0,0x20000, CACHE_NONE);
page_table_map((void *)0x20000,0x400000-0x20000,CACHE_COPYBACK);
/* Turn on paging with a 4 k page size.*/
__asm__ volatile ("movec %0,%%tc"
:: "d" (0x8000));
/* Turn on the cache. */
__asm__ volatile ("movec %0,%%cacr"
:: "d" (0x80008000));
}
void page_table_teardown(){
next_avail=(unsigned long *)BASE_TABLE_ADDR;
/* Turn off paging. Turn off the cache. Flush the cache. Tear down
the transparent translations. */
__asm__ volatile ("movec %0,%%tc\n\
movec %0,%%cacr\n\
cpusha %%bc\n\
movec %0,%%dtt0\n\
movec %0,%%itt0\n\
movec %0,%%dtt1\n\
movec %0,%%itt1"
:: "d" (0) );
}
/* Identity maps addr to addr+size with caching cache_type. */
int page_table_map(void *addr, unsigned long size, int cache_type){
unsigned long *pointer_table;
unsigned long *page_table;
unsigned long root_index, pointer_index, page_index;
/* addr must be a multiple of 4k */
if((unsigned long)addr & 0xfff){
return PTM_BAD_ADDR;
}
/* size must also be a multiple of 4k */
if(size & 0xfff){
return PTM_BAD_SIZE;
}
/* check for valid cache type */
if( (cache_type>CACHE_NONE) || (cache_type<CACHE_WRITE_THROUGH)){
return PTM_BAD_CACHE;
}
while(size){
root_index=(unsigned long)addr;
root_index >>= 25;
root_index &= 0x7f;
if(root_table[root_index]){
pointer_table =
(unsigned long *) (root_table[root_index] & 0xfffffe00);
}else{
if(!(pointer_table=table_alloc(POINTER_TABLE_SIZE))){
return PTM_NO_TABLE_SPACE;
}
root_table[root_index]=((unsigned long)pointer_table) + 0x03;
}
pointer_index=(unsigned long)addr;
pointer_index >>=18;
pointer_index &= 0x7f;
if(pointer_table[pointer_index]){
page_table =
(unsigned long *) (pointer_table[pointer_index] &
0xffffff00);
}else{
if(!(page_table=table_alloc(PAGE_TABLE_SIZE))){
return PTM_NO_TABLE_SPACE;
}
pointer_table[pointer_index]=
((unsigned long)page_table) + 0x03;
}
page_index=(unsigned long)addr;
page_index >>=12;
page_index &= 0x3f;
page_table[page_index] =
((unsigned long) addr & 0xfffff000) + 0x03 + (cache_type << 5);
size -= 4096;
addr = (void *) ((unsigned long)addr + 4096);
}
/* Flush the ATC. Push and invalidate the cache. */
__asm__ volatile ("pflusha\n\
cpusha %bc");
return PTM_SUCCESS;
}

View File

@@ -1,19 +0,0 @@
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
actions:
- get-string: null
- split: null
- env-append: null
build-type: option
copyrights:
- Copyright (C) 2020 embedded brains GmbH & Co. KG
default:
- enabled-by: true
value:
- -mcpu=68040
- -msoft-float
description: |
ABI flags
enabled-by: true
links: []
name: ABI_FLAGS
type: build

View File

@@ -1,21 +0,0 @@
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
arch: m68k
bsp: mvme162
build-type: bsp
cflags: []
copyrights:
- Copyright (C) 2020 embedded brains GmbH & Co. KG
cppflags: []
enabled-by: true
family: mvme162
includes: []
install: []
links:
- role: build-dependency
uid: tstmvme162
- role: build-dependency
uid: ../../opto2
- role: build-dependency
uid: grp
source: []
type: build

View File

@@ -1,21 +0,0 @@
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
arch: m68k
bsp: mvme162lx
build-type: bsp
cflags: []
copyrights:
- Copyright (C) 2020 embedded brains GmbH & Co. KG
cppflags: []
enabled-by: true
family: mvme162
includes: []
install: []
links:
- role: build-dependency
uid: tstmvme162lx
- role: build-dependency
uid: ../../opto2
- role: build-dependency
uid: grp
source: []
type: build

View File

@@ -1,33 +0,0 @@
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
build-type: group
cflags: []
copyrights:
- Copyright (C) 2020 embedded brains GmbH & Co. KG
cppflags: []
cxxflags: []
enabled-by: true
includes: []
install: []
ldflags: []
links:
- role: build-dependency
uid: ../grp
- role: build-dependency
uid: abi
- role: build-dependency
uid: obj
- role: build-dependency
uid: ../objfpsp
- role: build-dependency
uid: ../start
- role: build-dependency
uid: ../../obj
- role: build-dependency
uid: ../../objirqdflt
- role: build-dependency
uid: ../../objmem
- role: build-dependency
uid: ../../bspopts
type: build
use-after: []
use-before: []

View File

@@ -1,39 +0,0 @@
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
build-type: objects
cflags: []
copyrights:
- Copyright (C) 2020 embedded brains GmbH & Co. KG
cppflags: []
cxxflags: []
enabled-by: true
includes: []
install:
- destination: ${BSP_INCLUDEDIR}
source:
- bsps/m68k/mvme162/include/bsp.h
- bsps/m68k/mvme162/include/page_table.h
- destination: ${BSP_INCLUDEDIR}/bsp
source:
- bsps/m68k/mvme162/include/bsp/irq.h
- destination: ${BSP_LIBDIR}
source:
- bsps/m68k/mvme162/start/linkcmds
- bsps/m68k/shared/start/linkcmds.base
links: []
source:
- bsps/m68k/mvme162/btimer/btimer.c
- bsps/m68k/mvme162/btimer/timerisr.S
- bsps/m68k/mvme162/clock/ckinit.c
- bsps/m68k/mvme162/console/console.c
- bsps/m68k/mvme162/rtc/tod.c
- bsps/m68k/mvme162/start/bspstart.c
- bsps/m68k/mvme162/start/bspclean.c
- bsps/m68k/mvme162/start/page_table.c
- bsps/m68k/shared/cache/cache.c
- bsps/m68k/shared/m68kidle.c
- bsps/m68k/shared/memProbe.c
- bsps/shared/dev/getentropy/getentropy-cpucounter.c
- bsps/shared/start/gettargethash-default.c
- bsps/shared/start/sbrk.c
- bsps/shared/start/setvec.c
type: build

View File

@@ -1,15 +0,0 @@
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
actions:
- set-test-state:
reason: null
state: exclude
tests:
- fsdosfsname01
build-type: option
copyrights:
- Copyright (C) 2020 embedded brains GmbH & Co. KG
default: []
description: ''
enabled-by: true
links: []
type: build

View File

@@ -1,15 +0,0 @@
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
actions:
- set-test-state:
reason: null
state: exclude
tests:
- fsdosfsname01
build-type: option
copyrights:
- Copyright (C) 2020 embedded brains GmbH & Co. KG
default: []
description: ''
enabled-by: true
links: []
type: build