<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>change log for rtems (2011-07-15)</title>
</head>
<body text='#000000' bgcolor='#ffffff'>
<a name='cs1'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
<font color='#bb2222'><strong>strauman</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-07-15 Till Straumann <strauman@slac.stanford.edu>
* shared/irq/init_irq.c, shared/irq/openpic_i8259_irq.c,
shared/pci/detect_raven_bridge.c: conditionally compile
ISA and PCI-interrupt related stuff only if BSP defines
BSP_ISA_IRQ_NUMBER > 0 and/or BSP_PCI_IRQ_NUMBER > 0,
respectively.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/ChangeLog.diff?r1=text&tr1=1.252&r2=text&tr2=1.253&diff_format=h">M</a></td><td width='1%'>1.253</td><td width='100%'>c/src/lib/libbsp/powerpc/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/irq/irq_init.c.diff?r1=text&tr1=1.29&r2=text&tr2=1.30&diff_format=h">M</a></td><td width='1%'>1.30</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/irq/irq_init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/irq/openpic_i8259_irq.c.diff?r1=text&tr1=1.11&r2=text&tr2=1.12&diff_format=h">M</a></td><td width='1%'>1.12</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/irq/openpic_i8259_irq.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c.diff?r1=text&tr1=1.16&r2=text&tr2=1.17&diff_format=h">M</a></td><td width='1%'>1.17</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.252 rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.253
--- rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.252 Sun Jun 19 02:40:37 2011
+++ rtems/c/src/lib/libbsp/powerpc/ChangeLog Fri Jul 15 20:15:05 2011
</font><font color='#997700'>@@ -1,3 +1,11 @@
</font><font color='#000088'>+2011-07-15 Till Straumann <strauman@slac.stanford.edu>
+
+ * shared/irq/init_irq.c, shared/irq/openpic_i8259_irq.c,
+ shared/pci/detect_raven_bridge.c: conditionally compile
+ ISA and PCI-interrupt related stuff only if BSP defines
+ BSP_ISA_IRQ_NUMBER > 0 and/or BSP_PCI_IRQ_NUMBER > 0,
+ respectively.
+<span style="background-color: #FF0000"> </span>
</font> 2011-06-19 Ralf Corsépius <ralf.corsepius@rtems.org>
* Makefile.am: Remove references to non-existing files.
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/irq/irq_init.c:1.29 rtems/c/src/lib/libbsp/powerpc/shared/irq/irq_init.c:1.30
--- rtems/c/src/lib/libbsp/powerpc/shared/irq/irq_init.c:1.29 Wed Apr 28 13:51:58 2010
+++ rtems/c/src/lib/libbsp/powerpc/shared/irq/irq_init.c Fri Jul 15 20:15:05 2011
</font><font color='#997700'>@@ -22,8 +22,10 @@
</font> #include <libcpu/spr.h>
#include <bsp/pci.h>
#include <bsp/residual.h>
<font color='#880000'>-#include <bsp/openpic.h>
</font> #include <bsp/irq.h>
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
+#include <bsp/openpic.h>
+#endif
</font> #include <bsp/irq_supp.h>
#include <bsp.h>
#include <bsp/motorola.h>
<font color='#997700'>@@ -36,7 +38,9 @@
</font> } pci_isa_bridge_device;
pci_isa_bridge_device* via_82c586 = 0;
<font color='#000088'>+#ifndef qemu
</font> static pci_isa_bridge_device bridge;
<font color='#000088'>+#endif
</font>
/*
* default methods
<font color='#997700'>@@ -83,16 +87,19 @@
</font> 0,0,
255,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> /*
* PCI Interrupts
*/
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, /* for raven prio 0 means unactive... */
<font color='#000088'>+#endif
</font> /*
* Processor exceptions handled as interrupts
*/
0
};
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> #if defined(mvme2100)
static unsigned char mvme2100_openpic_initpolarities[16] = {
0, /* Not used - should be disabled */
<font color='#997700'>@@ -156,7 +163,9 @@
</font> 1, /* MCP750_INT_PCI_BUS2_INTD */
};
#endif
<font color='#000088'>+#endif
</font>
<font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0 && !defined(qemu)
</font> void VIA_isa_bridge_interrupts_setup(void)
{
pci_isa_bridge_device pci_dev;
<font color='#997700'>@@ -259,6 +268,7 @@
</font> #endif
}
}
<font color='#000088'>+#endif
</font>
/*
* This code assumes the exceptions management setup has already
<font color='#997700'>@@ -268,7 +278,7 @@
</font> */
void BSP_rtems_irq_mng_init(unsigned cpuId)
{
<font color='#880000'>-#if !defined(mvme2100)
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0 && !defined(mvme2100)
</font> int known_cpi_isa_bridge = 0;
#endif
int i;
<font color='#997700'>@@ -285,6 +295,7 @@
</font> */
openpic_init(1, mvme2100_openpic_initpolarities, mvme2100_openpic_initsenses, 16, 16, BSP_bus_frequency);
#else
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> #ifdef TRACE_IRQ_INIT
printk("Going to initialize raven interrupt controller (openpic compliant)\n");
#endif
<font color='#997700'>@@ -292,8 +303,13 @@
</font> #ifdef TRACE_IRQ_INIT
printk("Going to initialize the PCI/ISA bridge IRQ related setting (VIA 82C586)\n");
#endif
<font color='#000088'>+#endif
+
+#if BSP_ISA_IRQ_NUMBER > 0
</font> if ( currentBoard == MESQUITE ) {
<font color='#000088'>+#ifndef qemu
</font> VIA_isa_bridge_interrupts_setup();
<font color='#000088'>+#endif
</font> known_cpi_isa_bridge = 1;
}
if ( currentBoard == MVME_2300 ) {
<font color='#997700'>@@ -316,6 +332,8 @@
</font> BSP_i8259s_init();
#endif
<font color='#000088'>+#endif
+
</font> /*
* Initialize RTEMS management interrupt table
*/
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/irq/openpic_i8259_irq.c:1.11 rtems/c/src/lib/libbsp/powerpc/shared/irq/openpic_i8259_irq.c:1.12
--- rtems/c/src/lib/libbsp/powerpc/shared/irq/openpic_i8259_irq.c:1.11 Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/irq/openpic_i8259_irq.c Fri Jul 15 20:15:06 2011
</font><font color='#997700'>@@ -20,15 +20,22 @@
</font> #ifndef BSP_HAS_NO_VME
#include <bsp/VMEConfig.h>
#endif
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> #include <bsp/openpic.h>
<font color='#000088'>+#endif
</font> #include <libcpu/io.h>
#include <bsp/vectors.h>
#include <stdlib.h>
#include <rtems/bspIo.h> /* for printk */
<font color='#000088'>+
+#ifndef qemu
</font> #define RAVEN_INTR_ACK_REG 0xfeff0030
<font color='#000088'>+#else
+#define RAVEN_INTR_ACK_REG 0xbffffff0
+#endif
</font>
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> /*
* pointer to the mask representing the additionnal irq vectors
* that must be disabled when a particular entry is activated.
<font color='#997700'>@@ -47,33 +54,35 @@
</font>
static rtems_irq_connect_data* rtems_hdl_tbl;
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> /*
* Check if IRQ is an ISA IRQ
*/
static inline int is_isa_irq(const rtems_irq_number irqLine)
{
<font color='#880000'>- return (((int) irqLine <= BSP_ISA_IRQ_MAX_OFFSET) &
</font><font color='#000088'>+ return (((int) irqLine <= BSP_ISA_IRQ_MAX_OFFSET) &&
</font> ((int) irqLine >= BSP_ISA_IRQ_LOWEST_OFFSET)
);
}
#endif
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> /*
* Check if IRQ is an OPENPIC IRQ
*/
static inline int is_pci_irq(const rtems_irq_number irqLine)
{
<font color='#880000'>- return (((int) irqLine <= BSP_PCI_IRQ_MAX_OFFSET) &
</font><font color='#000088'>+ return OpenPIC && (((int) irqLine <= BSP_PCI_IRQ_MAX_OFFSET) &&
</font> ((int) irqLine >= BSP_PCI_IRQ_LOWEST_OFFSET)
);
}
<font color='#000088'>+#endif
</font>
/*
* ------------------------ RTEMS Irq helper functions ----------------
*/
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> /*
* Caution : this function assumes the variable "*config"
* is already set and that the tables it contains are still valid
<font color='#997700'>@@ -103,7 +112,7 @@
</font> void
BSP_enable_irq_at_pic(const rtems_irq_number name)
{
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> if (is_isa_irq(name)) {
/*
* Enable interrupt at PIC level
<font color='#997700'>@@ -112,18 +121,20 @@
</font> }
#endif
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> if (is_pci_irq(name)) {
/*
* Enable interrupt at OPENPIC level
*/
openpic_enable_irq ((int) name - BSP_PCI_IRQ_LOWEST_OFFSET);
}
<font color='#000088'>+#endif
</font> }
int
BSP_disable_irq_at_pic(const rtems_irq_number name)
{
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> if (is_isa_irq(name)) {
/*
* disable interrupt at PIC level
<font color='#997700'>@@ -131,12 +142,14 @@
</font> return BSP_irq_disable_at_i8259s ((int) name - BSP_ISA_IRQ_LOWEST_OFFSET);
}
#endif
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> if (is_pci_irq(name)) {
/*
* disable interrupt at OPENPIC level
*/
return openpic_disable_irq ((int) name - BSP_PCI_IRQ_LOWEST_OFFSET);
}
<font color='#000088'>+#endif
</font> return -1;
}
<font color='#997700'>@@ -156,7 +169,7 @@
</font> * set up internal tables used by rtems interrupt prologue
*/
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> /*
* start with ISA IRQ
*/
<font color='#997700'>@@ -179,6 +192,9 @@
</font> }
#endif
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
+ if ( ! OpenPIC )
+ return 1;
</font> /*
* continue with PCI IRQ
*/
<font color='#997700'>@@ -197,12 +213,11 @@
</font> }
#ifdef BSP_PCI_ISA_BRIDGE_IRQ
<font color='#880000'>- if ( BSP_ISA_IRQ_NUMBER > 0 ) {
-<span style="background-color: #FF0000"> </span> /*
- * Must enable PCI/ISA bridge IRQ
- */
-<span style="background-color: #FF0000"> </span> openpic_enable_irq (0);
- }
</font><font color='#000088'>+<span style="background-color: #FF0000"> </span> /*
+ * Must enable PCI/ISA bridge IRQ
+ */
+<span style="background-color: #FF0000"> </span> openpic_enable_irq (BSP_PCI_ISA_BRIDGE_IRQ);
+#endif
</font> #endif
return 1;
<font color='#997700'>@@ -218,7 +233,7 @@
</font> int C_dispatch_irq_handler (BSP_Exception_frame *frame, unsigned int excNum)
{
register unsigned int irq;
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> register unsigned isaIntr; /* boolean */
register unsigned oldMask = 0; /* old isa pic masks */
register unsigned newMask; /* new isa pic masks */
<font color='#997700'>@@ -231,17 +246,39 @@
</font> return 0;
}
<font color='#880000'>- irq = openpic_irq(0);
- if (irq == OPENPIC_VEC_SPURIOUS) {
- ++BSP_spuriousIntr;
- return 0;
- }
</font>
<font color='#880000'>- /* some BSPs might want to use a different numbering... */
- irq = irq - OPENPIC_VEC_SOURCE + BSP_PCI_IRQ_LOWEST_OFFSET;
</font><font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
+ if ( OpenPIC ) {
+ irq = openpic_irq(0);
+ if (irq == OPENPIC_VEC_SPURIOUS) {
+ ++BSP_spuriousIntr;
+ return 0;
+ }
+
+ /* some BSPs might want to use a different numbering... */
+ irq = irq - OPENPIC_VEC_SOURCE + BSP_PCI_IRQ_LOWEST_OFFSET;
+ } else {
+#if BSP_ISA_IRQ_NUMBER > 0
+#ifdef BSP_PCI_ISA_BRIDGE_IRQ
+ irq = BSP_PCI_ISA_BRIDGE_IRQ;
+#else
+#error "Configuration Error -- BSP with ISA + PCI IRQs MUST define BSP_PCI_ISA_BRIDGE_IRQ"
+#endif
+#else
+ rtems_panic("MUST have an OpenPIC if BSP has PCI IRQs but no ISA IRQs");
+#endif
+ }
+#endif
</font>
<font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> #ifdef BSP_PCI_ISA_BRIDGE_IRQ
<font color='#000088'>+#if 0 == BSP_PCI_IRQ_NUMBER<span style="background-color: #FF0000"> </span>
+#error "Configuration Error -- BSP w/o PCI IRQs MUST NOT define BSP_PCI_ISA_BRIDGE_IRQ"
+#endif
</font> isaIntr = (irq == BSP_PCI_ISA_BRIDGE_IRQ);
<font color='#000088'>+#else
+ isaIntr = 1;
+#endif
</font> if (isaIntr) {
/*
* Acknowledge and read 8259 vector
<font color='#997700'>@@ -256,14 +293,17 @@
</font> outport_byte(PIC_MASTER_IMR_IO_PORT, i8259s_cache & 0xff);
outport_byte(PIC_SLAVE_IMR_IO_PORT, ((i8259s_cache & 0xff00) >> 8));
BSP_irq_ack_at_i8259s (irq);
<font color='#880000'>- openpic_eoi(0);
</font><font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
+ if ( OpenPIC )
+ openpic_eoi(0);
+#endif
</font> }
#endif
/* dispatch handlers */
bsp_irq_dispatch_list(rtems_hdl_tbl, irq, default_rtems_entry.hdl);
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> if (isaIntr) {
i8259s_cache = oldMask;
outport_byte(PIC_MASTER_IMR_IO_PORT, i8259s_cache & 0xff);
<font color='#997700'>@@ -272,14 +312,18 @@
</font> else
#endif
{
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> #ifdef BSP_PCI_VME_DRIVER_DOES_EOI
/* leave it to the VME bridge driver to do EOI, so
* it can re-enable the openpic while handling
* VME interrupts (-> VME priorities in software)
*/
<font color='#880000'>- if (_BSP_vme_bridge_irq != irq)
</font><font color='#000088'>+ if (_BSP_vme_bridge_irq != irq && OpenPIC)
</font> #endif
openpic_eoi(0);
<font color='#000088'>+#else
+ do {} while (0);
+#endif
</font> }
return 0;
}
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c:1.16 rtems/c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c:1.17
--- rtems/c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c:1.16 Wed Jan 19 10:54:20 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c Fri Jul 15 20:15:06 2011
</font><font color='#997700'>@@ -10,6 +10,7 @@
</font> #include <bsp/consoleIo.h>
#include <bsp/residual.h>
#include <bsp/openpic.h>
<font color='#000088'>+#include <bsp/irq.h>
</font>
#include <rtems/bspIo.h>
#include <libcpu/cpuIdent.h>
<font color='#997700'>@@ -187,9 +188,12 @@
</font> printk("OpenPIC found at %x.\n", OpenPIC);
}
}
<font color='#000088'>+
+#if BSP_PCI_IRQ_NUMBER > 0
</font> if (OpenPIC == (volatile struct OpenPIC *)0) {
BSP_panic("OpenPic Not found\n");
}
<font color='#000088'>+#endif
</font>
}
</pre>
<p> </p>
<a name='cs2'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
<font color='#bb2222'><strong>strauman</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-07-15 Till Straumann <strauman@slac.stanford.edu>
* shared/startup/ppc_idle.c: added an 'idle task' body
which switches the CPU into power-save mode. IIRC, this
cannot be used on real hardware due to errata :-( but
it still saves valuable host-CPU cycles when used by
the qemuprep BSP.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/ChangeLog.diff?r1=text&tr1=1.253&r2=text&tr2=1.254&diff_format=h">M</a></td><td width='1%'>1.254</td><td width='100%'>c/src/lib/libbsp/powerpc/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/startup/ppc_idle.c?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/shared/startup/ppc_idle.c</font></td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.253 rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.254
--- rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.253 Fri Jul 15 20:15:05 2011
+++ rtems/c/src/lib/libbsp/powerpc/ChangeLog Fri Jul 15 20:18:25 2011
</font><font color='#997700'>@@ -1,5 +1,13 @@
</font> 2011-07-15 Till Straumann <strauman@slac.stanford.edu>
<font color='#000088'>+ * shared/startup/ppc_idle.c: added an 'idle task' body
+ which switches the CPU into power-save mode. IIRC, this
+ cannot be used on real hardware due to errata :-( but
+ it still saves valuable host-CPU cycles when used by
+ the qemuprep BSP.
+
+2011-07-15 Till Straumann <strauman@slac.stanford.edu>
+
</font> * shared/irq/init_irq.c, shared/irq/openpic_i8259_irq.c,
shared/pci/detect_raven_bridge.c: conditionally compile
ISA and PCI-interrupt related stuff only if BSP defines
<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/shared/startup/ppc_idle.c:1.1
--- /dev/null Fri Jul 15 21:10:49 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/startup/ppc_idle.c Fri Jul 15 20:18:25 2011
</font><font color='#997700'>@@ -0,0 +1,87 @@
</font><font color='#000088'>+/* $Id$ */
+
+/*
+ * ppc_idle.c
+ *
+ * Authorship
+ * ----------
+ * This software was created by
+ * Till Straumann <strauman@slac.stanford.edu>, 2010,
+ *<span style="background-color: #FF0000"> </span> Stanford Linear Accelerator Center, Stanford University.
+ *
+ * Acknowledgement of sponsorship
+ * ------------------------------
+ * This software was produced by
+ * the Stanford Linear Accelerator Center, Stanford University,
+ *<span style="background-color: #FF0000"> </span> under Contract DE-AC03-76SFO0515 with the Department of Energy.
+ *
+ * Government disclaimer of liability
+ * ----------------------------------
+ * Neither the United States nor the United States Department of Energy,
+ * nor any of their employees, makes any warranty, express or implied, or
+ * assumes any legal liability or responsibility for the accuracy,
+ * completeness, or usefulness of any data, apparatus, product, or process
+ * disclosed, or represents that its use would not infringe privately owned
+ * rights.
+ *
+ * Stanford disclaimer of liability
+ * --------------------------------
+ * Stanford University makes no representations or warranties, express or
+ * implied, nor assumes any liability for the use of this software.
+ *
+ * Stanford disclaimer of copyright
+ * --------------------------------
+ * Stanford University, owner of the copyright, hereby disclaims its
+ * copyright and all other rights in this software. Hence, anyone may
+ * freely use it for any purpose without restriction.
+ *
+ * Maintenance of notices
+ * ----------------------
+ * In the interest of clarity regarding the origin and status of this
+ * SLAC software, this and all the preceding Stanford University notices
+ * are to remain affixed to any copy or derivative of this software made
+ * or distributed by the recipient and are to be affixed to any copy of
+ * software made or distributed by the recipient that contains a copy or
+ * derivative of this software.
+ *
+ * ------------------ SLAC Software Notices, Set 4 OTT.002a, 2004 FEB 03
+ */
+#include <bsp.h>
+#include <stdint.h>
+
+#ifdef BSP_IDLE_TASK_BODY
+
+/* Provide an idle-task body which switches the
+ * CPU into power-save mode when idle. Any exception
+ * (including an interrupt/external-exception)
+ * wakes it up.
+ *
+ * IIRC - this cannot be used on real hardware due
+ * to errata on many chips which is a real
+ * pity. However, when used under qemu it
+ * saves host-CPU cycles.
+ * While qemu-0.12.4 needed to be patched
+ * (would otherwise hang because an exception
+ * didn't clear MSR_POW) qemu-0.14.1 seems
+ * to work fine.
+ */
+
+#include <rtems/powerpc/registers.h>
+
+void *
+bsp_ppc_idle_task_body(uintptr_t ignored)
+{
+uint32_t msr;
+ _CPU_MSR_GET(msr);
+ msr |= MSR_POW;
+ asm volatile(
+ "1: sync \n"
+ " mtmsr %0 \n"
+ " isync \n"
+ " b 1b \n"
+ ::"r"(msr)
+ );
+ return 0;
+}
+
+#endif
</font></pre>
<p> </p>
<a name='cs3'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
<font color='#bb2222'><strong>strauman</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-07-15 Till Straumann <strauman@slac.stanford.edu>
* shared/bootloader/misc.c: Copy residual data
_before_ decompressing the kernel since the firmware
may have stored it in an area that is overwritten
by decompress_kernel().
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/ChangeLog.diff?r1=text&tr1=1.254&r2=text&tr2=1.255&diff_format=h">M</a></td><td width='1%'>1.255</td><td width='100%'>c/src/lib/libbsp/powerpc/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/bootloader/misc.c.diff?r1=text&tr1=1.12&r2=text&tr2=1.13&diff_format=h">M</a></td><td width='1%'>1.13</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/bootloader/misc.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.254 rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.255
--- rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.254 Fri Jul 15 20:18:25 2011
+++ rtems/c/src/lib/libbsp/powerpc/ChangeLog Fri Jul 15 20:21:36 2011
</font><font color='#997700'>@@ -1,5 +1,12 @@
</font> 2011-07-15 Till Straumann <strauman@slac.stanford.edu>
<font color='#000088'>+ * shared/bootloader/misc.c: Copy residual data<span style="background-color: #FF0000"> </span>
+ _before_ decompressing the kernel since the firmware
+ may have stored it in an area that is overwritten
+ by decompress_kernel().
+
+2011-07-15 Till Straumann <strauman@slac.stanford.edu>
+
</font> * shared/startup/ppc_idle.c: added an 'idle task' body
which switches the CPU into power-save mode. IIRC, this
cannot be used on real hardware due to errata :-( but
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/bootloader/misc.c:1.12 rtems/c/src/lib/libbsp/powerpc/shared/bootloader/misc.c:1.13
--- rtems/c/src/lib/libbsp/powerpc/shared/bootloader/misc.c:1.12 Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/bootloader/misc.c Fri Jul 15 20:21:36 2011
</font><font color='#997700'>@@ -176,15 +176,17 @@
</font> printk("Not enough memory to uncompress the kernel.");
exit();
}
<font color='#000088'>+
+ rescopy=salloc(sizeof(RESIDUAL));
+ /* Let us hope that residual data is aligned on word boundary */
+ *rescopy = *bd->residual;
+ bd->residual = (void *)PAGE_ALIGN(kernel_size);
+
</font> /* Note that this clears the bss as a side effect, so some code
* with ugly special case for SMP could be removed from the kernel!
*/
memset(parea, 0, kernel_size);
printk("\nUncompressing the kernel...\n");
<font color='#880000'>- rescopy=salloc(sizeof(RESIDUAL));
- /* Let us hope that residual data is aligned on word boundary */
- *rescopy = *bd->residual;
- bd->residual = (void *)PAGE_ALIGN(kernel_size);
</font>
gunzip(parea, kernel_size, zimage_start, &zimage_size);
<font color='#997700'>@@ -287,13 +289,15 @@
</font> printk("\nModel: %s\nSerial: %s\n"
"Processor/Bus frequencies (Hz): %ld/%ld\n"
"Time Base Divisor: %ld\n"
<font color='#880000'>- "Memory Size: %lx\n",
</font><font color='#000088'>+ "Memory Size: %lx\n"
+ "Residual: %lx (length %u)\n",
</font> vpd.PrintableModel,
vpd.Serial,
vpd.ProcessorHz,
vpd.ProcessorBusHz,
(vpd.TimeBaseDivisor ? vpd.TimeBaseDivisor : 4000),
<font color='#880000'>- res->TotalMemory);
</font><font color='#000088'>+ res->TotalMemory,
+ (unsigned long)res, res->ResidualLength);
</font>
/* This reconfigures all the PCI subsystem */
pci_init();
</pre>
<p> </p>
<a name='cs4'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
<font color='#bb2222'><strong>strauman</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-07-15 Till Straumann <strauman@slac.stanford.edu>
* shared/bootloader/mm.c, shared/bootloader/pci.c,
shared/bootloader/qemu_fakeres.c, shared/bootloader/qemu_fakerom.S,
shared/irq/irq.h, shared/motorola/motorola.c, shared/residual/residual.h,
shared/startup/bspstart.c,
Added 'qemuprep' BSP variant.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/ChangeLog.diff?r1=text&tr1=1.255&r2=text&tr2=1.256&diff_format=h">M</a></td><td width='1%'>1.256</td><td width='100%'>c/src/lib/libbsp/powerpc/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/bootloader/mm.c.diff?r1=text&tr1=1.7&r2=text&tr2=1.8&diff_format=h">M</a></td><td width='1%'>1.8</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/bootloader/mm.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/bootloader/pci.c.diff?r1=text&tr1=1.17&r2=text&tr2=1.18&diff_format=h">M</a></td><td width='1%'>1.18</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/bootloader/pci.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakeres.c?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakeres.c</font></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakerom.S?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakerom.S</font></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/irq/irq.h.diff?r1=text&tr1=1.16&r2=text&tr2=1.17&diff_format=h">M</a></td><td width='1%'>1.17</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/irq/irq.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/motorola/motorola.c.diff?r1=text&tr1=1.17&r2=text&tr2=1.18&diff_format=h">M</a></td><td width='1%'>1.18</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/motorola/motorola.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/residual/residual.h.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/residual/residual.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c.diff?r1=text&tr1=1.55&r2=text&tr2=1.56&diff_format=h">M</a></td><td width='1%'>1.56</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/startup/bspstart.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.255 rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.256
--- rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.255 Fri Jul 15 20:21:36 2011
+++ rtems/c/src/lib/libbsp/powerpc/ChangeLog Fri Jul 15 20:29:04 2011
</font><font color='#997700'>@@ -1,5 +1,13 @@
</font> 2011-07-15 Till Straumann <strauman@slac.stanford.edu>
<font color='#000088'>+ * shared/bootloader/mm.c, shared/bootloader/pci.c,
+ shared/bootloader/qemu_fakeres.c, shared/bootloader/qemu_fakerom.S,
+ shared/irq/irq.h, shared/motorola/motorola.c, shared/residual/residual.h,
+ shared/startup/bspstart.c,
+ Added 'qemuprep' BSP variant.
+
+2011-07-15 Till Straumann <strauman@slac.stanford.edu>
+
</font> * shared/bootloader/misc.c: Copy residual data<span style="background-color: #FF0000"> </span>
_before_ decompressing the kernel since the firmware
may have stored it in an area that is overwritten
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/bootloader/mm.c:1.7 rtems/c/src/lib/libbsp/powerpc/shared/bootloader/mm.c:1.8
--- rtems/c/src/lib/libbsp/powerpc/shared/bootloader/mm.c:1.7 Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/bootloader/mm.c Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -474,6 +474,19 @@
</font> register RESIDUAL *res = bd->residual;
u_long minpages = PAGE_ALIGN(image_size)>>PAGE_SHIFT;
<font color='#000088'>+ if ( residual_fw_is_qemu( res ) ) {
+ /* save command-line - QEMU firmware sets R6/R7 to
+ * commandline start/end (NON-PReP STD)
+ */
+ int len = bd->r7 - bd->r6;
+ if ( len > 0 ) {
+ if ( len > sizeof(bd->cmd_line) - 1 )
+ len = sizeof(bd->cmd_line) - 1;
+ codemove(bd->cmd_line, bd->r6, len, bd->cache_lsize);
+ bd->cmd_line[len] = 0;
+ }
+ }
+
</font> /* Fix residual if we are loaded by Motorola NT firmware */
if ( res && res->VitalProductData.FirmwareSupplier == 0x10000 )
fix_residual( res );
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/bootloader/pci.c:1.17 rtems/c/src/lib/libbsp/powerpc/shared/bootloader/pci.c:1.18
--- rtems/c/src/lib/libbsp/powerpc/shared/bootloader/pci.c:1.17 Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/bootloader/pci.c Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -24,6 +24,7 @@
</font> #include <libcpu/page.h>
#include <bsp/consoleIo.h>
#include <string.h>
<font color='#000088'>+#include <bsp.h>
</font>
#include <string.h>
<font color='#997700'>@@ -480,6 +481,14 @@
</font> pci_resource *r;
struct pci_dev *dev;
<font color='#000088'>+ u_long bus0_mem_start = BUS0_MEM_START;
+ u_long bus0_mem_end = BUS0_MEM_END;
+
+ if ( residual_fw_is_qemu( bd->residual ) ) {
+ bus0_mem_start += PREP_ISA_MEM_BASE;
+ bus0_mem_end += PREP_ISA_MEM_BASE;
+ }
+
</font> /* FIXME: for now memory is relocated from low, it's better
* to start from higher addresses.
*/
<font color='#997700'>@@ -489,7 +498,7 @@
</font> */
init_free_area(&pci->io, BUS0_IO_START, BUS0_IO_END, 0xfff, 0);
<font color='#880000'>- init_free_area(&pci->mem, BUS0_MEM_START, BUS0_MEM_END, 0xfffff, 0);
</font><font color='#000088'>+ init_free_area(&pci->mem, bus0_mem_start, bus0_mem_end, 0xfffff, 0);
</font>
/* First reconfigure the I/O space, this will be more
* complex when there is more than 1 bus. And 64 bits
<font color='#997700'>@@ -520,6 +529,14 @@
</font> pci_bootloader_write_config_dword(r->dev,
PCI_BASE_ADDRESS_0+(r->reg<<2),
r->base);
<font color='#000088'>+
+ if ( residual_fw_is_qemu( bd->residual ) && r->dev->sysdata ) {
+ if ( PCI_BASE_ADDRESS_SPACE_IO == (r->type & PCI_BASE_ADDRESS_SPACE) )
+ ((pci_resource*)r->dev->sysdata)->cmd |= PCI_COMMAND_IO;
+ else
+ ((pci_resource*)r->dev->sysdata)->cmd |= PCI_COMMAND_MEMORY;
+ }
+
</font> if ((r->type&
(PCI_BASE_ADDRESS_SPACE|
PCI_BASE_ADDRESS_MEM_TYPE_MASK)) ==
<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakeres.c:1.1
--- /dev/null Fri Jul 15 21:10:49 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakeres.c Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -0,0 +1,226 @@
</font><font color='#000088'>+#include <bsp/residual.h>
+#include <stdint.h>
+
+/* Magic knowledge - qemu loads image here.<span style="background-color: #FF0000"> </span>
+ * However, we use the value from NVRAM if possible...
+ */
+#define KERNELBASE 0x01000000
+
+/* When starting qemu make sure to give the correct
+ * amount of memory!
+ *
+ * NOTE: Code now supports reading the actual memory
+ * amount from NVRAM. The residual copy in RAM
+ * is fixed-up accordingly.
+ */
+#define MEM_MEGS 32
+
+/* Mock up a minimal/fake residual; just enough to make the
+ * bootloader happy.
+ */
+struct fake_data {
+ unsigned long dat_len;
+ unsigned long res_off;
+ unsigned long cmd_off;
+ unsigned long cmd_len;
+ unsigned long img_adr;
+ RESIDUAL fake_residual;
+ char cmdline[1024];
+} fake_data = {
+dat_len: sizeof(fake_data),
+res_off: (unsigned long) &fake_data.fake_residual
+ -(unsigned long) &fake_data,
+cmd_off: (unsigned long) &fake_data.cmdline
+ -(unsigned long) &fake_data,
+cmd_len: sizeof(fake_data.cmdline),
+img_adr: KERNELBASE,
+fake_residual:<span style="background-color: #FF0000"> </span>
+{
+ ResidualLength: sizeof(RESIDUAL),
+ Version: 0,
+ Revision: 0,
+ EC: 0,
+ VitalProductData: {
+ FirmwareSupplier: QEMU,
+ ProcessorHz: 300000000, /* fantasy */
+ ProcessorBusHz: 100000000, /* qemu timebase clock */
+ TimeBaseDivisor:1*1000,
+ },
+ MaxNumCpus: 1,
+ ActualNumCpus: 1,
+ Cpus: {
+ {
+ CpuType: 0x00040103, /* FIXME: fill from PVR */
+ CpuNumber: 0,<span style="background-color: #FF0000"> </span>
+ CpuState: 0,
+ },
+ },
+ /* Memory */
+ TotalMemory: 1024*1024*MEM_MEGS,
+ GoodMemory: 1024*1024*MEM_MEGS,
+ ActualNumMemSegs: 13,
+ Segs: {
+ { 0x2000, 0xFFF00, 0x00100 },
+ { 0x0020, MEM_MEGS*0x100, 0x80000 - MEM_MEGS*0x100 },
+ { 0x0008, 0x00800, 0x00168 },
+ { 0x0004, 0x00000, 0x00005 },
+ { 0x0001, 0x006F1, 0x0010F },
+ { 0x0002, 0x006AD, 0x00044 },
+ { 0x0010, 0x00005, 0x006A8 },
+ { 0x0010, 0x00968, MEM_MEGS*0x100 - 0x00968 },
+ { 0x0800, 0xC0000, 0x3F000 },
+ { 0x0600, 0xBF800, 0x00800 },
+ { 0x0500, 0x81000, 0x3E800 },
+ { 0x0480, 0x80800, 0x00800 },
+ { 0x0440, 0x80000, 0x00800 }<span style="background-color: #FF0000"> </span>
+ },
+ ActualNumMemories: 0,
+ Memories: {
+ {0},
+ },
+ /* Devices */
+ ActualNumDevices: 1,
+ Devices: {
+ {
+ DeviceId: {
+ BusId: PROCESSORDEVICE,
+ BaseType: BridgeController,
+ SubType: PCIBridge,
+ Interface: PCIBridgeIndirect,
+ },
+ }
+ },
+ DevicePnPHeap: {0}
+},
+/* This is overwritten by command line passed by qemu. */
+cmdline: {
+ '-','-','n','e','2','k','-','i','r','q','=','9',
+ 0,
+}
+};
+
+/* Read one byte from NVRAM */
+static inline uint8_t
+nvram_rd(void)
+{
+uint8_t rval = *(volatile uint8_t*)0x80000077;
+ asm volatile("eieio");
+ return rval;
+}
+
+/* Set NVRAM address pointer */
+static inline void
+nvram_addr(uint16_t addr)
+{
+ *(volatile uint8_t*)0x80000074 = (addr & 0xff);
+ asm volatile("eieio");
+ *(volatile uint8_t*)0x80000075 = ((addr>>8) & 0xff);
+ asm volatile("eieio");
+}
+
+/* Read a 32-bit (big-endian) work from NVRAM */
+uint32_t
+nvram_rdl_be(uint16_t addr)
+{
+int i;
+uint32_t rval = 0;
+ for ( i=0; i<sizeof(rval); i++ ) {<span style="background-color: #FF0000"> </span>
+ nvram_addr( addr + i );
+ rval = (rval<<8) | nvram_rd();
+ }
+ return rval;
+}
+
+
+/* !!! NOTE !!!
+ *
+ * We use a special hack to propagate command-line info to the bootloader.
+ * This is NOT PreP compliant (but who cares).
+ * We set R6 and R7 to point to the start/end of the command line string
+ * and hacked the bootloader so it uses R6/R7 (provided that the firmware
+ * is detected as 'QEMU').
+ *
+ * (see bootloader/mm.c, bootloader/misc.c, bootloader/bootldr.h, -- boot_data.cmd_line[])
+ */
+uint32_t
+res_copy(void)
+{
+struct fake_data *p;
+uint32_t addr, cmdl, l, imga;
+uint32_t mem_sz, pgs;
+int i;
+int have_nvram;
+
+ /* Make sure we have a valid NVRAM -- just check for 'QEMU' at the
+ * beginning<span style="background-color: #FF0000"> </span>
+ */
+ have_nvram = ( (('Q'<<24) | ('E'<<16) | ('M'<< 8) | ('U'<< 0)) == nvram_rdl_be( 0x0000 ) );
+
+ if ( !have_nvram ) {
+ /* reading NVRAM failed - fall back to using the static residual copy;
+ * this means no support for variable memory size or 'true' command line.
+ */
+ return (uint32_t)&fake_data;
+ }
+
+ /* Dilemma - we don't really know where to put the residual copy
+ * (original is in ROM and cannot be modified).
+ * We can't put it at the top of memory since the bootloader starts
+ * allocating memory from there, before saving the residual, that is.
+ * Too close to the final image might not work either because RTEMS
+ * zeroes its BSS *before* making its copies of the residual and commandline.
+ *
+<span style="background-color: #FF0000"> </span> * For now we hope that appending to the kernel image works (and that
+ * the bootloader puts it somewhere safe).
+ */
+ imga = nvram_rdl_be( 0x0038 );
+ addr = imga + nvram_rdl_be( 0x003c );
+ addr += 0x1f;
+ addr &= ~(0x1f);
+
+ p = (struct fake_data *)addr;
+
+ /* commandline + length from NVRAM */
+ cmdl = nvram_rdl_be( 0x0040 );
+ l = nvram_rdl_be( 0x0044 );
+
+ if ( l > 0 ) {
+ /* have a command-line; copy it into our local buffer */
+ if ( l > sizeof( p->cmdline ) - 1 ) {
+ l = sizeof( p->cmdline ) - 1;
+ }
+ /* original may overlap our buffer; must safely move around */
+ if ( p->cmdline < (char*)cmdl ) {
+ for ( i=0; i<l; i++ ) {
+ p->cmdline[i] = ((char*)cmdl)[i];
+ }
+ } else {
+ for ( i=l-1; i>=0; i-- ) {
+ p->cmdline[i] = ((char*)cmdl)[i];
+ }
+ }
+ }
+ p->cmdline[l] = 0;
+ /* Copy rest of residual */
+ for ( i=0; i<sizeof(p->fake_residual); i++ )
+ ((char*)&p->fake_residual)[i] = ((char*)&fake_data.fake_residual)[i];
+ p->dat_len = fake_data.dat_len;
+ p->res_off = fake_data.res_off;
+ p->cmd_off = fake_data.cmd_off;
+ p->cmd_len = l+1;
+ p->img_adr = imga;
+
+ /* Fix up memory in residual from NVRAM settings */
+
+ mem_sz = nvram_rdl_be( 0x0030 );
+ pgs = mem_sz >> 12;
+
+ p->fake_residual.TotalMemory = mem_sz;
+ p->fake_residual.GoodMemory = mem_sz;
+
+ p->fake_residual.Segs[1].BasePage = pgs;
+ p->fake_residual.Segs[1].PageCount = 0x80000 - pgs;
+ p->fake_residual.Segs[7].PageCount = pgs - 0x00968;
+
+ return (uint32_t)p;
+}
</font>
<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakerom.S:1.1
--- /dev/null Fri Jul 15 21:10:49 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakerom.S Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -0,0 +1,198 @@
</font><font color='#000088'>+/* A fake 'bios' which does nothing but move a kernel image<span style="background-color: #FF0000"> </span>
+ * to RAM address zero and then starts that...
+ */
+#define LD_CACHE_LINE_SIZE 5
+#define INIT_STACK (0x100 - 16) /* 16-byte/svr4 aligned */
+
+/* These offsets must correspond to declaration in qemu_fakeres.c */
+#define DAT_LEN 0
+#define RES_OFF 4
+#define CMD_OFF 8
+#define CMD_LEN 12
+#define IMG_ADR 16
+
+/* Non-volatile registers */
+#define OBASE 30
+#define PCID 25
+#define PCIA 26
+
+#define PCI_MAX_DEV 32
+
+ .global fake_data
+ .global res_set_memsz
+
+ .global _start
+_start:
+ lis 1, INIT_STACK@h
+ ori 1,1,INIT_STACK@l
+ bl pci_irq_set
+ /* copy residual to RAM and fix up;<span style="background-color: #FF0000"> </span>
+ * this routine returns a pointer to
+ * a 'fake_data' struct. If reading
+ * NVRAM failed then the return value
+ * points to a fall-back version in
+ * ROM...
+ */
+ bl res_copy
+ /* fake_data pointer to R29 */
+ mr 29, 3
+
+ /* Load up R3..R5 with PreP mandated<span style="background-color: #FF0000"> </span>
+ * values (R3: residual, R4: kernel image,
+ * R5: OpenFirmware PTR (or NULL).
+ */
+
+ /* load R3 with residual pointer */
+ lwz 3, RES_OFF(29)
+ add 3, 3, 29
+
+ /* load R4 with image address */
+ lwz 4, IMG_ADR(29)
+
+ /* load R5 with zero (OFW = NULL) */
+ li 5, 0
+ /* EXTENSION: R6 = cmdline start */
+ lwz 6, CMD_OFF(29)
+ add 6, 6, 29
+ /* EXTENSION: R7 = cmdline end */
+ lwz 7, CMD_LEN(29)
+ add 7, 7, 6
+
+ /* jump to image address */
+ mtctr 4
+ bctr
+
+ .org 0x100
+ b _start
+
+ .org 0x110
+template:
+ mfsrr0 30
+ mfsrr1 31
+1: b 1b
+template_end:
+
+ .org 0xc00
+ b monitor
+<span style="background-color: #FF0000"> </span>
+
+ .org 0x4000
+codemove: /* src/dst are cache-aligned */
+ addi 5,5,(1<<LD_CACHE_LINE_SIZE)-1
+ srwi 5,5,LD_CACHE_LINE_SIZE
+ addi 3,3,-4
+ addi 4,4,-4
+1:
+ li 0, (1<<LD_CACHE_LINE_SIZE)
+ mtctr 0
+2:
+ lwzu 0, 4(3)
+ stwu 0, 4(4)
+ bdnz 2b
+ dcbf 0,4
+ icbi 0,4
+ addic. 5,5,-1
+ bne 1b
+ blr
+
+cpexc:
+ lis 3,template@h
+ ori 3,3,template@l
+ li 5,template_end-template
+ b codemove
+
+monitor:
+ stwu 1,-16(1)
+ stw OBASE, 8(1)
+ lis OBASE, 0x80000000@h
+ cmplwi 10,0x63 /* enter_monitor -> RESET */
+ bne 10f
+hwreset:
+ li 3,1
+ stb 3,0x92(OBASE)
+1: b 1b
+10: cmplwi 10,0x1d /* .NETCTRL -> ignore */
+ bne 10f
+ b ret_from_mon
+10: b hwreset /* unknown -> RESET */<span style="background-color: #FF0000"> </span>
+
+ret_from_mon:
+ lwz OBASE,8(1)
+ lwz 1,0(1)
+ rfi
+
+rcb:
+ stwbrx 3, 0, PCIA
+ lbzx 3, 0, PCID
+ blr
+
+wcb:
+ stwbrx 3, 0, PCIA
+ stbx 4, 0, PCID
+ blr
+
+rcd:
+ stwbrx 3, 0, PCIA
+ lwbrx 3, 0, PCID
+ blr
+
+/* fixup pci interrupt line register according to what
+ * qemu does: line = ((pin-1) + slot_no) & 1 ? 11 : 9;
+ */
+pci_irq_set:
+ /* set up stack frame */
+ stwu 1, -32(1)
+ mflr 0
+ stw 0, 32+4(1)
+ /* load counter with # of PCI devs */<span style="background-color: #FF0000"> </span>
+ li 0, PCI_MAX_DEV
+ mtctr 0
+ /* save non-volatile registers we use
+ * in stack frame
+ */
+ stw 20, 8(1)
+ stw PCIA, 12(1)
+ stw PCID, 16(1)
+ /* load non-volatile registers with
+ * intended values.
+ */
+ lis 20, 0x80000000@h /* key for slot # 0 */
+ lis PCIA, 0x80000cf8@h /* PCI config space address reg */
+ ori PCIA, PCIA, 0x80000cf8@l<span style="background-color: #FF0000"> </span>
+ addi PCID, PCIA, 4 /* PCI config space data reg */
+
+ /* loop over all slots and fix up PCI IRQ LINE */
+1:
+ mr 3, 20
+ bl rcd
+ addi 3, 3, 1
+ cmplwi 3, 0 /* slot empty (= -1 + 1 = 0) ? */
+ beq 2f
+ addi 3, 20, 0x3d
+ bl rcb
+ cmplwi 3, 0
+ beq 2f
+ slwi 4, 3, 11
+ addi 3, 20, 0x3c
+ xor 4, 4, 3 /* bit 11 = slot # + irq_num [zero-based] + 1 */
+ andi. 4, 4, 0x0800
+ li 4, 11
+ beq 3f
+ li 4, 9
+3:
+ bl wcb
+2:
+ addi 20, 20, 0x0800 /* next slot */
+ bdnz 1b
+
+ /* restore and return */
+ lwz 20, 32+4(1)
+ mtlr 20
+ lwz PCID, 16(1)
+ lwz PCIA, 12(1)
+ lwz 20, 8(1)
+ lwz 1, 0(1)
+ blr
+
+ .section .romentry, "ax"
+ b _start
</font>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/irq/irq.h:1.16 rtems/c/src/lib/libbsp/powerpc/shared/irq/irq.h:1.17
--- rtems/c/src/lib/libbsp/powerpc/shared/irq/irq.h:1.16 Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/irq/irq.h Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -78,7 +78,11 @@
</font> * PCI IRQ handlers related definitions
* CAUTION : BSP_PCI_IRQ_LOWEST_OFFSET should be equal to OPENPIC_VEC_SOURCE
*/
<font color='#000088'>+#ifndef qemu
</font> #define BSP_PCI_IRQ_NUMBER (16)
<font color='#000088'>+#else
+#define BSP_PCI_IRQ_NUMBER (0)
+#endif
</font> #define BSP_PCI_IRQ_LOWEST_OFFSET (BSP_ISA_IRQ_NUMBER)
#define BSP_PCI_IRQ_MAX_OFFSET (BSP_PCI_IRQ_LOWEST_OFFSET + BSP_PCI_IRQ_NUMBER - 1)
/*
<font color='#997700'>@@ -90,7 +94,12 @@
</font> #define BSP_PROCESSOR_IRQ_MAX_OFFSET (BSP_PROCESSOR_IRQ_LOWEST_OFFSET + BSP_PROCESSOR_IRQ_NUMBER - 1)
/* Misc vectors for OPENPIC irqs (IPI, timers)
*/
<font color='#000088'>+#ifndef qemu
</font> #define BSP_MISC_IRQ_NUMBER (8)
<font color='#000088'>+#else
+#define BSP_MISC_IRQ_NUMBER (0)
+#endif
+
</font> #define BSP_MISC_IRQ_LOWEST_OFFSET (BSP_PROCESSOR_IRQ_MAX_OFFSET + 1)
#define BSP_MISC_IRQ_MAX_OFFSET (BSP_MISC_IRQ_LOWEST_OFFSET + BSP_MISC_IRQ_NUMBER - 1)
/*
<font color='#997700'>@@ -112,7 +121,9 @@
</font> * Some PCI IRQ symbolic name definition
*/
#define BSP_PCI_IRQ0 (BSP_PCI_IRQ_LOWEST_OFFSET)
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> #define BSP_PCI_ISA_BRIDGE_IRQ (BSP_PCI_IRQ0)
<font color='#000088'>+#endif
</font>
#if defined(mvme2100)
#define BSP_DEC21143_IRQ (BSP_PCI_IRQ_LOWEST_OFFSET + 1)
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/motorola/motorola.c:1.17 rtems/c/src/lib/libbsp/powerpc/shared/motorola/motorola.c:1.18
--- rtems/c/src/lib/libbsp/powerpc/shared/motorola/motorola.c:1.17 Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/motorola/motorola.c Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -67,6 +67,16 @@
</font> #define NULL_PINMAP {-1,{-1,-1,-1,-1}}
#define NULL_INTMAP {-1,-1,-1,{}}
<font color='#000088'>+#ifdef qemu
+static struct _int_map qemu_prep_intmap[] = {
+ { 0, -1, PCI_FIXUP_OPT_OVERRIDE_NAME,
+ { { 1, { 9, -1, -1, -1}},
+ { 2, {11, -1 -1, -1}},
+ NULL_PINMAP }},
+ NULL_INTMAP
+};
+#endif
+
</font> static struct _int_map mcp750_intmap[] = {
{ 0, 16, 0, {{1, {5, 19,-1,-1}}, /* pmc slot */
<font color='#997700'>@@ -304,7 +314,11 @@
</font> {0x050, 0x00, PPC_UNKNOWN, "Omaha (PowerStack II Pro3000)", NULL, NULL},
{0x060, 0x00, PPC_UNKNOWN, "Utah (Powerstack II Pro4000)", NULL, NULL},
{0x0A0, 0x00, PPC_UNKNOWN, "Powerstack (Series EX)", NULL, NULL},
<font color='#000088'>+#ifdef qemu
+ {0x1E0, 0xE0, PPC_UNKNOWN, "QEMU", qemu_prep_intmap, prep_pci_swizzle},
+#else
</font> {0x1E0, 0xE0, PPC_UNKNOWN, "Mesquite cPCI (MCP750)", mcp750_intmap, prep_pci_swizzle},
<font color='#000088'>+#endif
</font> {0x1E0, 0xE1, PPC_UNKNOWN, "Sitka cPCI (MCPN750)", mcp750_intmap, prep_pci_swizzle},
{0x1E0, 0xE2, PPC_UNKNOWN, "Mesquite cPCI (MCP750) w/ HAC", mcp750_intmap, prep_pci_swizzle},
{0x1E0, 0xF6, PPC_UNKNOWN, "MTX Plus", NULL, NULL},
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/residual/residual.h:1.2 rtems/c/src/lib/libbsp/powerpc/shared/residual/residual.h:1.3
--- rtems/c/src/lib/libbsp/powerpc/shared/residual/residual.h:1.2 Thu Apr 15 08:26:19 2004
+++ rtems/c/src/lib/libbsp/powerpc/shared/residual/residual.h Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -63,6 +63,7 @@
</font> MotoFirmware = 0x01, /* 7/18/95 */
FirmWorks = 0x02, /* 10/5/95 */
Bull = 0x03, /* 04/03/96 */
<font color='#000088'>+ QEMU = ('q'<<24) | ('e'<<16) | ('m'<<8) | ('u'<<0),
</font> } FIRMWARE_SUPPLIERS;
typedef enum _ENDIAN_SWITCH_METHODS {
<font color='#997700'>@@ -321,6 +322,12 @@
</font> #define NULL 0
#endif
<font color='#000088'>+static inline int
+residual_fw_is_qemu(RESIDUAL *r)
+{
+ return QEMU == r->VitalProductData.FirmwareSupplier;
+}
+
</font> extern RESIDUAL residualCopy;
extern void print_residual_device_info(void);
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c:1.55 rtems/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c:1.56
--- rtems/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c:1.55 Wed Apr 28 13:51:58 2010
+++ rtems/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -41,7 +41,6 @@
</font> extern void set_L2CR(unsigned);
extern Triv121PgTbl BSP_pgtbl_setup(unsigned int *);
extern void BSP_pgtbl_activate(Triv121PgTbl);
<font color='#880000'>-extern void BSP_vme_config(void);
</font>
SPR_RW(SPRG1)
<font color='#997700'>@@ -180,7 +179,11 @@
</font> /*
* Must have acces to open pic PCI ACK registers provided by the RAVEN
*/
<font color='#000088'>+#ifndef qemu
</font> setdbat(3, 0xf0000000, 0xf0000000, 0x10000000, IO_PAGE);
<font color='#000088'>+#else
+ setdbat(3, 0xb0000000, 0xb0000000, 0x10000000, IO_PAGE);
+#endif
</font>
#if defined(mvme2100)
/* Need 0xfec00000 mapped for this */
<font color='#997700'>@@ -253,7 +256,6 @@
</font> #ifdef SHOW_MORE_INIT_SETTINGS
printk("Residuals are located at %x\n", (unsigned) &residualCopy);
printk("Additionnal boot options are %s\n", loaderParam);
<font color='#880000'>- printk("Initial system stack at %x\n",stack);
</font> printk("Software IRQ stack starts at %x with size %u\n", intrStackStart, intrStackSize);
printk("-----------------------------------------\n");
#endif
<font color='#997700'>@@ -329,7 +331,13 @@
</font> pt = BSP_pgtbl_setup(&BSP_mem_size);
if (!pt || TRIV121_MAP_SUCCESS != triv121PgTblMap(
<font color='#880000'>- pt, TRIV121_121_VSID, 0xfeff0000, 1,
</font><font color='#000088'>+ pt, TRIV121_121_VSID,
+#ifndef qemu
+ 0xfeff0000,
+#else
+ 0xbffff000,
+#endif
+ 1,
</font> TRIV121_ATTR_IO_PAGE, TRIV121_PP_RW_PAGE)) {
printk("WARNING: unable to setup page tables VME "
"bridge must share PCI space\n");
</pre>
<p> </p>
<a name='cs5'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
<font color='#bb2222'><strong>strauman</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-07-15 Till Straumann <strauman@slac.stanford.edu>
* motorola_powerpc/Makefile.am,
motorola_powerpc/configure.ac, motorola_powerpc/preinstall.am,
motorola_powerpc/include/bsp.h, motorola_powerpc/make/custom/qemuprep.cfg,
motorola_powerpc/qemu_fakerom/Makefile.am,
motorola_powerpc/qemu_fakerom/.cvsignore:
Added 'qemuprep' BSP variant.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog.diff?r1=text&tr1=1.162&r2=text&tr2=1.163&diff_format=h">M</a></td><td width='1%'>1.163</td><td width='100%'>c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am.diff?r1=text&tr1=1.60&r2=text&tr2=1.61&diff_format=h">M</a></td><td width='1%'>1.61</td><td width='100%'>c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac.diff?r1=text&tr1=1.38&r2=text&tr2=1.39&diff_format=h">M</a></td><td width='1%'>1.39</td><td width='100%'>c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h.diff?r1=text&tr1=1.26&r2=text&tr2=1.27&diff_format=h">M</a></td><td width='1%'>1.27</td><td width='100%'>c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/make/custom/qemuprep.cfg?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/motorola_powerpc/make/custom/qemuprep.cfg</font></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am.diff?r1=text&tr1=1.12&r2=text&tr2=1.13&diff_format=h">M</a></td><td width='1%'>1.13</td><td width='100%'>c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/.cvsignore?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/.cvsignore</font></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/Makefile.am?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/Makefile.am</font></td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog:1.162 rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog:1.163
--- rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog:1.162 Sat Jun 18 02:26:24 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -1,3 +1,12 @@
</font><font color='#000088'>+2011-07-15 Till Straumann <strauman@slac.stanford.edu>
+
+ * motorola_powerpc/Makefile.am,
+ motorola_powerpc/configure.ac, motorola_powerpc/preinstall.am,
+ motorola_powerpc/include/bsp.h, motorola_powerpc/make/custom/qemuprep.cfg,
+ motorola_powerpc/qemu_fakerom/Makefile.am,
+ motorola_powerpc/qemu_fakerom/.cvsignore:
+ Added 'qemuprep' BSP variant.
+
</font> 2011-06-18 Ralf Corsépius <ralf.corsepius@rtems.org>
* Makefile.am: Remove references to non-existing files.
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am:1.60 rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am:1.61
--- rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am:1.60 Sat Jun 18 02:26:24 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -4,7 +4,11 @@
</font>
ACLOCAL_AMFLAGS = -I ../../../../aclocal
<font color='#880000'>-SUBDIRS = . bootloader
</font><font color='#000088'>+SUBDIRS = .
+SUBDIRS+= bootloader
+if QEMU
+SUBDIRS+= qemu_fakerom
+endif
</font>
include $(top_srcdir)/../../../../automake/compile.am
<font color='#997700'>@@ -49,9 +53,12 @@
</font> ../../powerpc/shared/startup/zerobss.c \
../../powerpc/shared/startup/pgtbl_setup.c \
../../powerpc/shared/startup/pgtbl_activate.c \
<font color='#000088'>+ ../../powerpc/shared/startup/ppc_idle.c \
</font> ../../powerpc/shared/startup/sbrk.c ../../shared/bootcard.c \
../../shared/bspclean.c ../../shared/bsplibc.c ../../shared/bsppost.c \
../../shared/gnatinstallhandler.c
<font color='#000088'>+
+
</font> # tod
libbsp_a_SOURCES += ../../shared/tod.c ../../powerpc/shared/tod/todcfg.c
# pclock
<font color='#997700'>@@ -127,6 +134,18 @@
</font> ../../powerpc/shared/vme/vme_universe.c \
../../powerpc/shared/vme/VMEConfig.h
<font color='#000088'>+if QEMU
+if HAS_NETWORKING
+nodist_include_HEADERS += $(srcdir)/../../i386/pc386/include/wd80x3.h
+ne2000_CPPFLAGS = -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
+ne2000_CPPFLAGS += '-Dbsp_cmdline_arg=rtems_bsp_cmdline_get_param_raw'
+noinst_PROGRAMS += ne2000.rel
+ne2000_rel_SOURCES = ../../i386/pc386/ne2000/ne2000.c
+ne2000_rel_CPPFLAGS = $(AM_CPPFLAGS) $(ne2000_CPPFLAGS)
+ne2000_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
+endif
+endif
+
</font> libbsp_a_LIBADD = \
polledIO.rel \
../../../libcpu/@RTEMS_CPU@/shared/cache.rel \
<font color='#997700'>@@ -139,6 +158,10 @@
</font> ../../../libcpu/@RTEMS_CPU@/mpc6xx/mmu.rel \
../../../libcpu/@RTEMS_CPU@/mpc6xx/timer.rel
<font color='#000088'>+if QEMU
+libbsp_a_LIBADD+=ne2000.rel
+endif
+
</font> EXTRA_DIST = BOOTING README.mtx603e README.MVME2100 README.MVME2300 \
README.MVME2400 \
README.OTHERBOARDS
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac:1.38 rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac:1.39
--- rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac:1.38 Tue Jun 7 08:33:18 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -48,12 +48,21 @@
</font> RTEMS_BSPOPTS_HELP([mpc8240],
[Defined for boards with MPC8240 -- undefined for others])
<font color='#000088'>+RTEMS_BSPOPTS_SET([qemu],[qemuprep],[1])
+RTEMS_BSPOPTS_SET([qemu],[*],[])
+RTEMS_BSPOPTS_HELP([qemu],[Defined for QEMU BSP -- undefined for others])
+
</font> RTEMS_BSP_CLEANUP_OPTIONS(0, 0)
# Explicitly list all Makefiles here
<font color='#880000'>-AC_CONFIG_FILES([Makefile
-bootloader/Makefile])
</font><font color='#000088'>+AC_CONFIG_FILES([Makefile])
+if test xx"${RTEMS_BSP}" = xxqemuprep ; then
+AC_CONFIG_FILES([qemu_fakerom/Makefile])
+fi
+AC_CONFIG_FILES([bootloader/Makefile])
</font>
RTEMS_PPC_EXCEPTIONS
<font color='#000088'>+AM_CONDITIONAL([QEMU],[test xx"${RTEMS_BSP}" = xxqemuprep])
+
</font> AC_OUTPUT
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h:1.26 rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h:1.27
--- rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h:1.26 Wed May 18 00:26:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -19,6 +19,14 @@
</font> #include <libcpu/io.h>
#include <rtems/clockdrv.h>
#include <bsp/vectors.h>
<font color='#000088'>+<span style="background-color: #FF0000"> </span>
+#ifdef qemu
+#include <rtems/bspcmdline.h>
+#endif
+<span style="background-color: #FF0000"> </span>
+#ifdef __cplusplus
+extern "C" {
+#endif
</font>
/*
* confdefs.h overrides for this BSP:
<font color='#997700'>@@ -86,11 +94,17 @@
</font> #else
#define _IO_BASE PREP_ISA_IO_BASE
#define _ISA_MEM_BASE PREP_ISA_MEM_BASE
<font color='#000088'>+#ifndef qemu
</font> /* address of our ram on the PCI bus */
#define PCI_DRAM_OFFSET PREP_PCI_DRAM_OFFSET
/* offset of pci memory as seen from the CPU */
#define PCI_MEM_BASE PREP_ISA_MEM_BASE
#define PCI_MEM_WIN0 0
<font color='#000088'>+#else
+#define PCI_DRAM_OFFSET 0
+#define PCI_MEM_BASE 0
+#define PCI_MEM_WIN0 PREP_ISA_MEM_BASE
+#endif
</font> #endif
<font color='#997700'>@@ -112,8 +126,10 @@
</font> #define BSP_UART_IOBASE_COM1 ((_IO_BASE)+0x3f8)
#define BSP_UART_IOBASE_COM2 ((_IO_BASE)+0x2f8)
<font color='#000088'>+#if ! defined(qemu)
</font> #define BSP_KBD_IOBASE ((_IO_BASE)+0x60)
#define BSP_VGA_IOBASE ((_IO_BASE)+0x3c0)
<font color='#000088'>+#endif
</font>
#if defined(mvme2300)
#define MVME_HAS_DEC21140
<font color='#997700'>@@ -130,6 +146,17 @@
</font> extern int rtems_dec21140_driver_attach();
#endif
<font color='#000088'>+#ifdef qemu
+#define RTEMS_BSP_NETWORK_DRIVER_NAME "ne1"
+#define RTEMS_BSP_NETWORK_DRIVER_ATTACH rtems_ne_driver_attach
+extern int rtems_ne_driver_attach();
+#endif
+
+#ifdef qemu
+#define BSP_IDLE_TASK_BODY bsp_ppc_idle_task_body
+extern void *bsp_ppc_idle_task_body(uintptr_t arg);
+#endif
+
</font> #include <bsp/openpic.h>
/* BSP_PIC_DO_EOI is optionally used by the 'vmeUniverse' driver
* to implement VME IRQ priorities in software.
<font color='#997700'>@@ -208,4 +235,8 @@
</font>
#endif
<font color='#000088'>+#ifdef __cplusplus
+};
+#endif
+
</font> #endif
<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/make/custom/qemuprep.cfg:1.1
--- /dev/null Fri Jul 15 21:10:50 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/make/custom/qemuprep.cfg Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -0,0 +1,36 @@
</font><font color='#000088'>+#
+# Config file for the PowerPC 604 based mvme2307
+#
+# $Id$
+#
+
+include $(RTEMS_ROOT)/make/custom/default.cfg
+
+RTEMS_CPU=powerpc
+RTEMS_CPU_MODEL=mpc604
+
+# This contains the compiler options necessary to select the CPU model
+# and (hopefully) optimize for it.<span style="background-color: #FF0000"> </span>
+#
+CPU_CFLAGS = -mcpu=powerpc -mmultiple -mstring -mstrict-align -D__ppc_generic
+
+# optimize flag: typically -O2
+CFLAGS_OPTIMIZE_V = -O2 -g
+
+ifdef PURE_BINARY
+define bsp-post-link
+ $(default-bsp-post-link)
+<span style="background-color: #FF0000"> </span> $(OBJCOPY) -O binary -R .comment -S $(basename $@).exe $(basename $@)$(DOWNEXT)
+endef
+else
+define bsp-post-link
+ $(default-bsp-post-link)
+<span style="background-color: #FF0000"> </span> $(OBJCOPY) -O binary -R .comment -S $(basename $@).exe rtems
+<span style="background-color: #FF0000"> </span> gzip -vf9 rtems
+<span style="background-color: #FF0000"> </span> $(LD) -o $(basename $@)$(DOWNEXT) $(PROJECT_RELEASE)/lib/bootloader.o \
+ --just-symbols=$(basename $@).exe \
+<span style="background-color: #FF0000"> </span> -b binary rtems.gz -T $(PROJECT_RELEASE)/lib/ppcboot.lds \
+<span style="background-color: #FF0000"> </span> -Map $(basename $@).map && chmod 755 $@
+<span style="background-color: #FF0000"> </span> rm -f rtems.gz
+endef
+endif
</font>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am:1.12 rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am:1.13
--- rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am:1.12 Fri Oct 23 02:32:44 2009
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -145,3 +145,10 @@
</font> $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/VMEDMA.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/VMEDMA.h
<font color='#000088'>+if QEMU
+if HAS_NETWORKING
+$(PROJECT_INCLUDE)/wd80x3.h: $(srcdir)/../../i386/pc386/include/wd80x3.h $(PROJECT_INCLUDE)/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/wd80x3.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/wd80x3.h
+endif
+endif
</font>
<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/.cvsignore:1.1
--- /dev/null Fri Jul 15 21:10:50 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/.cvsignore Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -0,0 +1 @@
</font><font color='#000088'>+Makefile.in
</font>
<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/Makefile.am:1.1
--- /dev/null Fri Jul 15 21:10:51 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/Makefile.am Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -0,0 +1,31 @@
</font><font color='#000088'>+##
+## $Id$
+##
+
+## NOTE: This Makefile.am does not apply RTEMS's compilation rules.
+ACLOCAL_AMFLAGS = -I ../../../../aclocal
+
+include $(top_srcdir)/../../../../automake/compile.am
+include $(top_srcdir)/../../bsp.am
+
+AUTOMAKE_OPTIONS = no-exeext
+
+project_lib_DATA = qemu_fakerom.$(OBJEXT)
+project_lib_DATA += qemu_fakerom.elf
+project_lib_DATA += qemu_fakerom.bin
+
+
+## IMPORTANT: head.S must be first, T. Straumann 12/17/2001
+qemu_fakerom.$(OBJEXT): ../../../powerpc/shared/bootloader/qemu_fakerom.S
+ $(CPPASCOMPILE) -c -o $@ $^
+
+qemu_fakeres.$(OBJEXT): ../../../powerpc/shared/bootloader/qemu_fakeres.c
+ $(CC) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o $@ $^
+
+qemu_fakerom.elf: qemu_fakerom.$(OBJEXT) qemu_fakeres.$(OBJEXT)
+ $(LD) -o $@ $^ -nostdlib -Ttext 0xfff00000 --section-start=.romentry=0xfffffffc
+
+qemu_fakerom.bin: qemu_fakerom.$(OBJEXT) qemu_fakeres.$(OBJEXT)
+ $(LD) -o $@ $^ --oformat binary -nostdlib -Ttext 0xfff00000 --section-start=.romentry=0xfffffffc
+
+include $(top_srcdir)/../../../../automake/local.am
</font></pre>
<p> </p>
<p>--<br />
<small>Generated by <a href="http://www.codewiz.org/projects/index.html#loginfo">Deluxe Loginfo</a> 2.122 by Bernardo Innocenti <bernie@develer.com></small></p>
</body>
</html>