source: rtems/c/src/lib/libcpu/powerpc/ppc403/ictrl/ictrl.h @ aecfa2b
Last change on this file since aecfa2b was aecfa2b, checked in by Joel Sherrill <joel.sherrill@…>, on Sep 30, 1998 at 9:55:53 PM

BSP submitted by Thomas Doerfler <td@…>:

Finally I am through: I have found the last bugs that made RTEMS-
4.0-beta3 start on my ppc403 board from ROM. So now the '403
support is up to date again.

Roughly I have added the following features:

  • support for the on-chip interrupt controller (in a separate module)
  • interrupt support for the console device
  • termios support for the console device

Since the BSP behaivour changed in some details (console no
longer is polling, other memory layout etc) I have created a new
BSP "helas403" rather than changing the "papyrus" BSP. The old
"polled" console driver still sticks around in "console.c.polled"

To get the BSP up and running, I had to create the new BSP files
(derived from papyrus). Besides that, the following source areas
have been changed:

  • c/src/lib/libcpu/powerpc/ppc403: changes to console driver, small changes to clock driver, new "ictrl" interrupt controller driver
  • c/src/exec/score/cpu/powerpc/ppc.h: some small changes (added ppc403 characteristics like a exception vector prefix register, some special register definitions). I am quite sure, they are compatible with the existing sources, although I did not check
  • c/src/exec/score/cpu/powerpc/cpu.c: There is one severe limitation in the exception entries: Due to the current code arrangement, the "branch absolute" to the ISR handler may only jump to the first 128MByte or the last 128MByte of the 4GByte address range. When the ppc403 is running out of ROM, the ROM functions are located in the last 128MByte (0xFFF00000 and up). These addresses were not handled correctly (sign reduced) in "install_raw_handler". The change I added should work on existing ppc BSPs aswell...
  • c/src/lib/libc/termios.c: During my tests, I added one change you sent me, so this patch will already be incorporated in the current source tree.

There are some smaller changes, see the attached diff file.

Concerning the GNU toolchain:

I tried several tool chains. Finally I almost succeeded with

egcs-1.0.3a with patch egcs-1.0.3-rtems-diff-19980527

I had to add the following lines to the egcs files. Without them
configure complaint that the cross compiler could not generate
executable output.

  • additional lines needed in egcs distribution in file gcc/config/rs6000/rtems.h:

+++ lines start
#define STARTFILE_DEFAULT_SPEC "ecrti.o%s"

#define ENDFILE_DEFAULT_SPEC "ecrtn.o%s"
++++ lines end

As far as I have seen in the Changelog of egcs, you have recently
sent two patches affecting the powerpc support, but they were
added in the wrong order.... :-(

egcs-19980628 with patch egcs-19980628-rtems-diff-19980707 does
not work!

I used binutils 2.9.1 with patch binutils-2.9.1-rtems-diff-19980515

(binutils 2.8.1 does not work, internal error in gas)

and newlib-1.8.0 with patch newlib-1.8.0-rtems-diff-19980707

Finally I had to poke a line in the "bit" script, since, on my LINUX
machine, the GNU make is only available as "make", not as

For all the tools and newlib I selected configuration "powerpc-

IMD Ingenieurbuero fuer Microcomputertechnik
Thomas Doerfler Herbststrasse 8
D-82178 Puchheim Germany
email: td@…

  • Property mode set to 100644
File size: 2.4 KB
1/*  ictrl.h
2 *
3 *  This file contains definitions and declarations for the
4 *  PowerPC 403 CPU built-in external interrupt controller
5 *
6 *
7 *  Author: Thomas Doerfler <>
8 *
9 *  COPYRIGHT (c) 1998 by IMD, Puchheim, Germany
10 *
11 *  To anyone who acknowledges that this file is provided "AS IS"
12 *  without any express or implied warranty:
13 *      permission to use, copy, modify, and distribute this file
14 *      for any purpose is hereby granted without fee, provided that
15 *      the above copyright notice and this notice appears in all
16 *      copies, and that the name of IMD not be used in
17 *      advertising or publicity pertaining to distribution of the
18 *      software without specific, written prior permission.
19 *      IMD makes no representations about the suitability
20 *      of this software for any purpose.
21 *
22 */
25#ifndef _INCLUDE_ICTRL_h
26#define _INCLUDE_ICTRL_h
28#include <rtems.h>
29#include <rtems/system.h>
30#include <rtems/score/isr.h>
31#ifdef __cplusplus
32extern "C" {
36 *  definitions for second level IRQ handler support
37 *  External Interrupts via EXTERNAL/EISR
38 */
39#define PPC_IRQ_EXT_BASE        (PPC_IRQ_LAST+1)
41/* mask for external interrupt status in EXIER/EXISR register */
42/* note: critical interrupt is in these registers aswell */
43#define PPC_EXI_MASK           0x0FFFFFFF
45#define PPC_IRQ_EXT_SPIR        (PPC_IRQ_EXT_BASE+4)
46#define PPC_IRQ_EXT_SPIT        (PPC_IRQ_EXT_BASE+5)
47#define PPC_IRQ_EXT_JTAGR       (PPC_IRQ_EXT_BASE+6)
48#define PPC_IRQ_EXT_JTAGT       (PPC_IRQ_EXT_BASE+7)
49#define PPC_IRQ_EXT_DMA0        (PPC_IRQ_EXT_BASE+8)
50#define PPC_IRQ_EXT_DMA1        (PPC_IRQ_EXT_BASE+9)
51#define PPC_IRQ_EXT_DMA2        (PPC_IRQ_EXT_BASE+10)
52#define PPC_IRQ_EXT_DMA3        (PPC_IRQ_EXT_BASE+11)
53#define PPC_IRQ_EXT_0           (PPC_IRQ_EXT_BASE+27)
54#define PPC_IRQ_EXT_1           (PPC_IRQ_EXT_BASE+28)
55#define PPC_IRQ_EXT_2           (PPC_IRQ_EXT_BASE+29)
56#define PPC_IRQ_EXT_3           (PPC_IRQ_EXT_BASE+30)
57#define PPC_IRQ_EXT_4           (PPC_IRQ_EXT_BASE+31)
59#define PPC_IRQ_EXT_MAX         (32)
61#define VEC_TO_EXMSK(v)         (0x80000000 >> (v))
64 *
65 * install a user vector for one of the external interrupt sources
66 *
67 */ 
69ictrl_set_vector(rtems_isr_entry   new_handler,
70                 unsigned32        vector,
71                 rtems_isr_entry   *old_handler
74 * activate the interrupt controller
75 */
79#ifdef __cplusplus
83#endif /* ! _INCLUDE_ICTRL_h */
84/* end of include file */
Note: See TracBrowser for help on using the repository browser.