Implement Niagara I/O interface and rework interrupts
authorAli Saidi <saidi@eecs.umich.edu>
Sat, 3 Mar 2007 22:22:47 +0000 (17:22 -0500)
committerAli Saidi <saidi@eecs.umich.edu>
Sat, 3 Mar 2007 22:22:47 +0000 (17:22 -0500)
configs/common/FSConfig.py:
    Use binaries we've compiled instead of the ones that come with Legion
src/arch/alpha/interrupts.hh:
    get rid of post(int int_type) and add a get_vec function that gets the interrupt vector for an interrupt number
src/arch/sparc/asi.cc:
    Add AsiIsInterrupt() to AsiIsMmu()
src/arch/sparc/faults.cc:
src/arch/sparc/faults.hh:
    Add InterruptVector type
src/arch/sparc/interrupts.hh:
    rework interrupts. They are no longer cleared when created... A I/O or ASI read/write needs to happen before they are cleared
src/arch/sparc/isa_traits.hh:
    Add the "interrupt" trap types to isa traits
src/arch/sparc/miscregfile.cc:
    add names for all the misc registers and possible post an interrupt when TL is changed.
src/arch/sparc/miscregfile.hh:
    Add a helper function to post an interrupt when pil < some set softint
src/arch/sparc/regfile.cc:
src/arch/sparc/regfile.hh:
    InterruptLevel shouldn't really live here, moved to interrupt.hh
src/arch/sparc/tlb.cc:
    Add interrupt ASIs to TLB
src/arch/sparc/ua2005.cc:
    Add checkSoftInt to check if a softint needs to be posted
    Check that a tickCompare isn't scheduled before scheduling one
    Post and clear interrupts on queue writes and what not
src/base/bitfield.hh:
    Add an helper function to return the msb that is set
src/cpu/base.cc:
src/cpu/base.hh:
    get rid of post_interrupt(type) since it's no longer needed.. Add a way to see what interrupts are pending
src/cpu/intr_control.cc:
src/cpu/intr_control.hh:
src/dev/alpha/tsunami_cchip.cc:
src/python/m5/objects/IntrControl.py:
    Make IntrControl have a system pointer rather than using a cpu pointer to get one
src/dev/sparc/SConscript:
    add iob to SConsscrip
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-atomic-dual/config.ini:
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-atomic-dual/config.out:
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-atomic/config.ini:
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-atomic/config.out:
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-timing-dual/config.ini:
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-timing-dual/config.out:
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-timing/config.ini:
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-timing/config.out:
tests/quick/80.netperf-stream/ref/alpha/linux/twosys-tsunami-simple-atomic/config.ini:
tests/quick/80.netperf-stream/ref/alpha/linux/twosys-tsunami-simple-atomic/config.out:
    update config.ini/out for intrcntrl not having a cpu pointer anymore

--HG--
extra : convert_revision : 38614f6b9ffc8f3c93949a94ff04b7d2987168dd

31 files changed:
configs/common/FSConfig.py
src/arch/alpha/interrupts.hh
src/arch/sparc/asi.cc
src/arch/sparc/faults.cc
src/arch/sparc/faults.hh
src/arch/sparc/interrupts.hh
src/arch/sparc/isa_traits.hh
src/arch/sparc/miscregfile.cc
src/arch/sparc/miscregfile.hh
src/arch/sparc/regfile.cc
src/arch/sparc/regfile.hh
src/arch/sparc/tlb.cc
src/arch/sparc/ua2005.cc
src/base/bitfield.hh
src/cpu/base.cc
src/cpu/base.hh
src/cpu/intr_control.cc
src/cpu/intr_control.hh
src/dev/alpha/tsunami_cchip.cc
src/dev/sparc/SConscript
src/python/m5/objects/IntrControl.py
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-atomic-dual/config.ini
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-atomic-dual/config.out
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-atomic/config.ini
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-atomic/config.out
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-timing-dual/config.ini
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-timing-dual/config.out
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-timing/config.ini
tests/quick/10.linux-boot/ref/alpha/linux/tsunami-simple-timing/config.out
tests/quick/80.netperf-stream/ref/alpha/linux/twosys-tsunami-simple-atomic/config.ini
tests/quick/80.netperf-stream/ref/alpha/linux/twosys-tsunami-simple-atomic/config.out

index 2b13388d65dcbfcc267974162d924aa77270fdcd..00ce105e0f0496234f38def33b5ea4136dfd6468 100644 (file)
@@ -111,9 +111,9 @@ def makeSparcSystem(mem_mode, mdesc = None):
     self.disk0 = CowMmDisk()
     self.disk0.childImage(disk('disk.s10hw2'))
     self.disk0.pio = self.iobus.port
-    self.reset_bin = binary('reset.bin')
-    self.hypervisor_bin = binary('q.bin')
-    self.openboot_bin = binary('openboot.bin')
+    self.reset_bin = binary('reset_new.bin')
+    self.hypervisor_bin = binary('q_new.bin')
+    self.openboot_bin = binary('openboot_new.bin')
     self.nvram_bin = binary('nvram1')
     self.hypervisor_desc_bin = binary('1up-hv.bin')
     self.partition_desc_bin = binary('1up-md.bin')
index a522dec6c142e1f51f34d14b1bf43b2e49c915e6..0500714ad0d070572c5ddbc16b498c99861aadc9 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "arch/alpha/faults.hh"
 #include "arch/alpha/isa_traits.hh"
+#include "base/compiler.hh"
 #include "cpu/thread_context.hh"
 
 namespace AlphaISA
@@ -52,11 +53,6 @@ namespace AlphaISA
             newInfoSet = false;
         }
 
-        void post(int int_type)
-        {
-            // sparc only
-        }
-
         void post(int int_num, int index)
         {
             DPRINTF(Interrupt, "Interrupt %d:%d posted\n", int_num, index);
@@ -163,6 +159,12 @@ namespace AlphaISA
             newInfoSet = false;
         }
 
+        uint64_t get_vec(int int_num)
+        {
+            panic("Shouldn't be called for Alpha\n");
+            M5_DUMMY_RETURN
+        }
+
       private:
         bool newInfoSet;
         int newIpl;
index 3d553955fd700966c135dd24858d802ae105005d..d8cd84af5bb80c2233a137d005e39fdfe59be765 100644 (file)
@@ -294,7 +294,8 @@ namespace SparcISA
 
     bool AsiIsReg(ASI asi)
     {
-        return AsiIsMmu(asi) || AsiIsScratchPad(asi) | AsiIsSparcError(asi);
+        return AsiIsMmu(asi) || AsiIsScratchPad(asi) ||
+               AsiIsSparcError(asi) || AsiIsInterrupt(asi);
     }
 
     bool AsiIsSparcError(ASI asi)
index a6f4343ae4105967f52c8970a795656aae1e5c20..8ecb6e3df54e35109a0824ff915faed28f634b46 100644 (file)
@@ -207,6 +207,10 @@ template<> SparcFaultBase::FaultVals
     SparcFault<TrapLevelZero>::vals =
     {"trap_level_zero", 0x05F, 202, {H, H, SH}};
 
+template<> SparcFaultBase::FaultVals
+    SparcFault<InterruptVector>::vals =
+    {"interrupt_vector", 0x060, 2630, {H, H, H}};
+
 template<> SparcFaultBase::FaultVals
     SparcFault<PAWatchpoint>::vals =
     {"PA_watchpoint", 0x061, 1209, {H, H, H}};
index 3c0d9674f045e22108eed9b1e1cac6451e00cee8..cb03033345838553c967a9bd908a2841d53ae44d 100644 (file)
@@ -193,6 +193,8 @@ class HstickMatch : public SparcFault<HstickMatch> {};
 
 class TrapLevelZero : public SparcFault<TrapLevelZero> {};
 
+class InterruptVector : public SparcFault<InterruptVector> {};
+
 class PAWatchpoint : public SparcFault<PAWatchpoint> {};
 
 class VAWatchpoint : public SparcFault<VAWatchpoint> {};
index dc3b235fe075480accf63575e0eb8abbd0460e4a..3234002c5baa7a9dc020c106c3caed549322acc9 100644 (file)
  * 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.
+ *
+ * Authors: Ali Saidi
+ *          Lisa Hsu
  */
 
 #ifndef __ARCH_SPARC_INTERRUPT_HH__
 #define __ARCH_SPARC_INTERRUPT_HH__
 
 #include "arch/sparc/faults.hh"
+#include "arch/sparc/isa_traits.hh"
 #include "cpu/thread_context.hh"
 
 namespace SparcISA
 {
 
-enum interrupts_t {
-    trap_level_zero,
-    hstick_match,
-    interrupt_vector,
-    cpu_mondo,
-    dev_mondo,
-    resumable_error,
-    soft_interrupt,
-    num_interrupt_types
-};
-
 class Interrupts
 {
 
   private:
 
-    bool interrupts[num_interrupt_types];
-    int numPosted;
+    uint64_t interrupts[NumInterruptTypes];
+    uint64_t intStatus;
 
   public:
     Interrupts()
     {
-        for (int i = 0; i < num_interrupt_types; ++i) {
-            interrupts[i] = false;
-        }
-        numPosted = 0;
+        clear_all();
     }
 
-    void post(int int_type)
+    int InterruptLevel(uint64_t softint)
     {
-        if (int_type < 0 || int_type >= num_interrupt_types)
-            panic("posting unknown interrupt!\n");
-        if (interrupts[int_type] == false) {
-            interrupts[int_type] = true;
-            ++numPosted;
-        }
+        if (softint & 0x10000 || softint & 0x1)
+            return 14;
+
+        int level = 15;
+        while (level > 0 && !(1 << level & softint))
+            level--;
+        if (1 << level & softint)
+            return level;
+        return 0;
     }
 
     void post(int int_num, int index)
     {
+        DPRINTF(Interrupt, "Interrupt %d:%d posted\n", int_num, index);
+        assert(int_num >= 0 && int_num < NumInterruptTypes);
+        assert(index >= 0 && index < 64);
 
+        interrupts[int_num] |= ULL(1) << index;
+        intStatus |= ULL(1) << int_num;
     }
 
     void clear(int int_num, int index)
     {
+        DPRINTF(Interrupt, "Interrupt %d:%d cleared\n", int_num, index);
+        assert(int_num >= 0 && int_num < NumInterruptTypes);
+        assert(index >= 0 && index < 64);
 
+        interrupts[int_num] &= ~(ULL(1) << index);
+        if (!interrupts[int_num])
+            intStatus &= ~(ULL(1) << int_num);
     }
 
     void clear_all()
     {
-
+        for (int i = 0; i < NumInterruptTypes; ++i) {
+            interrupts[i] = 0;
+        }
+        intStatus = 0;
     }
 
     bool check_interrupts(ThreadContext * tc) const
     {
-        if (numPosted)
-            return true;
-        else
-            return false;
+        return intStatus;
     }
 
     Fault getInterrupt(ThreadContext * tc)
@@ -109,84 +113,45 @@ class Interrupts
         // in the right order of processing
         if (hpstate & HPSTATE::hpriv) {
             if (ie) {
-                if (interrupts[hstick_match]) {
-                    if (tc->readMiscReg(MISCREG_HINTP) & 1) {
-                        interrupts[hstick_match] = false;
-                        --numPosted;
-                        return new HstickMatch;
-                    }
-                }
-                if (interrupts[interrupt_vector]) {
-                    interrupts[interrupt_vector] = false;
-                    --numPosted;
-                    //HAVEN'T IMPLed THIS YET
-                    return NoFault;
+                if (interrupts[IT_HINTP]) {
+                    // This will be cleaned by a HINTP write
+                    return new HstickMatch;
                 }
-            } else {
-                if (interrupts[hstick_match]) {
-                    return NoFault;
+                if (interrupts[IT_INT_VEC]) {
+                    // this will be cleared by an ASI read (or write)
+                    return new InterruptVector;
                 }
-
             }
         } else {
-            if (interrupts[trap_level_zero]) {
-                if ((pstate & HPSTATE::tlz) && (tc->readMiscReg(MISCREG_TL) == 0)) {
-                    interrupts[trap_level_zero] = false;
-                    --numPosted;
+            if (interrupts[IT_TRAP_LEVEL_ZERO]) {
+                    // this is cleared by deasserting HPSTATE::tlz
                     return new TrapLevelZero;
-                }
             }
-            if (interrupts[hstick_match]) {
-                if (tc->readMiscReg(MISCREG_HINTP) & 1) {
-                    interrupts[hstick_match] = false;
-                    --numPosted;
-                    return new HstickMatch;
-                    }
+            // HStick matches always happen in priv mode (ie doesn't matter)
+            if (interrupts[IT_HINTP]) {
+                return new HstickMatch;
+            }
+            if (interrupts[IT_INT_VEC]) {
+                // this will be cleared by an ASI read (or write)
+                return new InterruptVector;
             }
             if (ie) {
-                if (interrupts[cpu_mondo]) {
-                    interrupts[cpu_mondo] = false;
-                    --numPosted;
+                if (interrupts[IT_CPU_MONDO]) {
                     return new CpuMondo;
                 }
-                if (interrupts[dev_mondo]) {
-                    interrupts[dev_mondo] = false;
-                    --numPosted;
+                if (interrupts[IT_DEV_MONDO]) {
                     return new DevMondo;
                 }
-                if (interrupts[soft_interrupt]) {
-                    int il = InterruptLevel(tc->readMiscReg(MISCREG_SOFTINT));
-                    // it seems that interrupt vectors are right in
-                    // the middle of interrupt levels with regard to
-                    // priority, so have to check
-                    if ((il < 6) &&
-                        interrupts[interrupt_vector]) {
-                            // may require more details here since there
-                            // may be lots of interrupts embedded in an
-                            // platform interrupt vector
-                            interrupts[interrupt_vector] = false;
-                            --numPosted;
-                            //HAVEN'T IMPLed YET
-                            return NoFault;
-                    } else {
-                        if (il > tc->readMiscReg(MISCREG_PIL)) {
-                            uint64_t si = tc->readMiscReg(MISCREG_SOFTINT);
-                            uint64_t more = si & ~(1 << (il + 1));
-                            if (!InterruptLevel(more)) {
-                                interrupts[soft_interrupt] = false;
-                                --numPosted;
-                            }
-                            return new InterruptLevelN(il);
-                        }
-                    }
+                if (interrupts[IT_SOFT_INT]) {
+                    return new
+                        InterruptLevelN(InterruptLevel(interrupts[IT_SOFT_INT]));
                 }
-                if (interrupts[resumable_error]) {
-                    interrupts[resumable_error] = false;
-                    --numPosted;
+
+                if (interrupts[IT_RES_ERROR]) {
                     return new ResumableError;
                 }
-            }
-        }
+            } // !hpriv && ie
+        }  // !hpriv
         return NoFault;
     }
 
@@ -195,16 +160,22 @@ class Interrupts
 
     }
 
+    uint64_t get_vec(int int_num)
+    {
+        assert(int_num >= 0 && int_num < NumInterruptTypes);
+        return interrupts[int_num];
+    }
+
     void serialize(std::ostream &os)
     {
-        SERIALIZE_ARRAY(interrupts,num_interrupt_types);
-        SERIALIZE_SCALAR(numPosted);
+        SERIALIZE_ARRAY(interrupts,NumInterruptTypes);
+        SERIALIZE_SCALAR(intStatus);
     }
 
     void unserialize(Checkpoint *cp, const std::string &section)
     {
-        UNSERIALIZE_ARRAY(interrupts,num_interrupt_types);
-        UNSERIALIZE_SCALAR(numPosted);
+        UNSERIALIZE_ARRAY(interrupts,NumInterruptTypes);
+        UNSERIALIZE_SCALAR(intStatus);
     }
 };
 } // namespace SPARC_ISA
index 1fbdd160d5f0ef253e0025904cdcd83bfa3995b7..d0b8827f388ddda3dad85acc710f924244957b05 100644 (file)
@@ -113,6 +113,18 @@ namespace SparcISA
     const Addr PAddrImplMask = ULL(0x000000FFFFFFFFFF);
     const Addr BytesInPageMask = ULL(0x1FFF);
 
+    enum InterruptTypes
+    {
+        IT_TRAP_LEVEL_ZERO,
+        IT_HINTP,
+        IT_INT_VEC,
+        IT_CPU_MONDO,
+        IT_DEV_MONDO,
+        IT_RES_ERROR,
+        IT_SOFT_INT,
+        NumInterruptTypes
+    };
+
 #endif
 }
 
index 9a69d337459ac03b751315d0a82ebed2e7557486..849eed1ccd2be1e1f7f72f9b3151d61060a266d2 100644 (file)
@@ -54,7 +54,15 @@ string SparcISA::getMiscRegName(RegIndex index)
          "wstate",*/ "gl",
          "hpstate", "htstate", "hintp", "htba", "hver", "strand_sts_reg",
          "hstick_cmpr",
-         "fsr"};
+         "fsr", "prictx", "secctx", "partId", "lsuCtrlReg", "itbTsbC0Ps0",
+         "itbTsbC0Ps1", "iTlbC0Cnfg", "itbTsbCXPs0", "itbTsbCXPs1",
+         "iTlbCXCnfg","iTlbSfsr", "iTlbTagAcs", "dtbTsbC0Ps0",
+         "dtbTsbC0Ps1", "dTlbC0Cnfg", "dtbTsbCXPs0", "dtbTsbCXPs1",
+         "dTlbCXCnfg","dTlbSfsr", "dTlbSfar", "dTlbTagAcs",
+         "scratch0", "scratch1", "scratch2", "scratch3", "scratch4",
+         "scratch5", "scratch6", "scratch7", "cpuMondoHead", "cpuMondoTail",
+         "devMondoHead", "devMondoTail", "resErrorHead", "resErrorTail",
+         "nresErrorHead", "nresErrorTail", "TlbData" };
 
     return miscRegName[index];
 }
@@ -608,7 +616,6 @@ void MiscRegFile::setReg(int miscReg, const MiscReg &val)
       case MISCREG_QUEUE_NRES_ERROR_TAIL:
         nres_error_tail = val;
         break;
-
       default:
         panic("Miscellaneous register %d not implemented\n", miscReg);
     }
@@ -639,6 +646,12 @@ void MiscRegFile::setRegWithEffect(int miscReg,
         return;
       case MISCREG_TL:
         tl = val;
+#if FULL_SYSTEM
+        if (hpstate & HPSTATE::tlz && tl == 0 && !(hpstate & HPSTATE::hpriv))
+            tc->getCpuPtr()->post_interrupt(IT_TRAP_LEVEL_ZERO,0);
+        else
+            tc->getCpuPtr()->clear_interrupt(IT_TRAP_LEVEL_ZERO,0);
+#endif
         return;
       case MISCREG_CWP:
         new_val = val > NWindows ? NWindows - 1 : val;
index 66c9f17df7349a1193566d8fd2b8a3df2768a719..4207de823725f2da12bfff254af5fd4ad04727b0 100644 (file)
@@ -259,6 +259,9 @@ namespace SparcISA
                 ThreadContext *tc);
         MiscReg readFSRegWithEffect(int miscReg, ThreadContext * tc);
 
+        // Update interrupt state on softint or pil change
+        void checkSoftInt(ThreadContext *tc);
+
         /** Process a tick compare event and generate an interrupt on the cpu if
          * appropriate. */
         void processTickCompare(ThreadContext *tc);
index 827e22c310b1e3b168872eb84216ccccb7593eea..944b1f40159da3fb0cd57d62299a4c9e86e966d8 100644 (file)
@@ -254,19 +254,6 @@ void RegFile::changeContext(RegContextParam param, RegContextVal val)
     }
 }
 
-int SparcISA::InterruptLevel(uint64_t softint)
-{
-    if (softint & 0x10000 || softint & 0x1)
-        return 14;
-
-    int level = 15;
-    while (level > 0 && !(1 << level & softint))
-        level--;
-    if (1 << level & softint)
-        return level;
-    return 0;
-}
-
 void SparcISA::copyMiscRegs(ThreadContext *src, ThreadContext *dest)
 {
 
index d9af0757cd8ec1d224a18ed18a4691bc9223e478..9e0b3beb33604f2f89a5d1e7bc7f8afcb0ad1d0d 100644 (file)
@@ -126,8 +126,6 @@ namespace SparcISA
 
     void copyMiscRegs(ThreadContext *src, ThreadContext *dest);
 
-    int InterruptLevel(uint64_t softint);
-
 } // namespace SparcISA
 
 #endif
index 2dca6d5e797d0d326e8ffd591d56880f6a639282..41d55158eb476394397b4e9b530b13b1204d611e 100644 (file)
@@ -40,6 +40,7 @@
 #include "mem/packet_access.hh"
 #include "mem/request.hh"
 #include "sim/builder.hh"
+#include "sim/system.hh"
 
 /* @todo remove some of the magic constants.  -- ali
  * */
@@ -691,9 +692,9 @@ DTB::translate(RequestPtr &req, ThreadContext *tc, bool write)
 
         if (AsiIsPartialStore(asi))
             panic("Partial Store ASIs not supported\n");
-        if (AsiIsInterrupt(asi))
-            panic("Interrupt ASIs not supported\n");
 
+        if (AsiIsInterrupt(asi))
+            goto handleIntRegAccess;
         if (AsiIsMmu(asi))
             goto handleMmuRegAccess;
         if (AsiIsScratchPad(asi))
@@ -793,7 +794,25 @@ DTB::translate(RequestPtr &req, ThreadContext *tc, bool write)
                   vaddr & e->pte.size()-1);
     DPRINTF(TLB, "TLB: %#X -> %#X\n", vaddr, req->getPaddr());
     return NoFault;
+
     /** Normal flow ends here. */
+handleIntRegAccess:
+    if (!hpriv) {
+        writeSfr(tc, vaddr, write, Primary, true, IllegalAsi, asi);
+        if (priv)
+            return new DataAccessException;
+         else
+            return new PrivilegedAction;
+    }
+
+    if (asi == ASI_SWVR_UDB_INTR_W && !write ||
+                    asi == ASI_SWVR_UDB_INTR_R && write) {
+        writeSfr(tc, vaddr, write, Primary, true, IllegalAsi, asi);
+        return new DataAccessException;
+    }
+
+    goto regAccessOk;
+
 
 handleScratchRegAccess:
     if (vaddr > 0x38 || (vaddr >= 0x20 && vaddr < 0x30 && !hpriv)) {
@@ -988,7 +1007,14 @@ DTB::doMmuRegRead(ThreadContext *tc, Packet *pkt)
                 tc->readMiscRegWithEffect(MISCREG_MMU_ITLB_CX_TSB_PS1),
                 tc->readMiscRegWithEffect(MISCREG_MMU_ITLB_CX_CONFIG)));
         break;
-
+      case ASI_SWVR_INTR_RECEIVE:
+        pkt->set(tc->getCpuPtr()->get_interrupts(IT_INT_VEC));
+        break;
+      case ASI_SWVR_UDB_INTR_R:
+        temp = findMsbSet(tc->getCpuPtr()->get_interrupts(IT_INT_VEC));
+        tc->getCpuPtr()->clear_interrupt(IT_INT_VEC, temp);
+        pkt->set(temp);
+        break;
       default:
 doMmuReadError:
         panic("need to impl DTB::doMmuRegRead() got asi=%#x, va=%#x\n",
@@ -1222,7 +1248,19 @@ DTB::doMmuRegWrite(ThreadContext *tc, Packet *pkt)
             panic("Invalid type for IMMU demap\n");
         }
         break;
-      default:
+       case ASI_SWVR_INTR_RECEIVE:
+        int msb;
+        // clear all the interrupts that aren't set in the write
+        while(tc->getCpuPtr()->get_interrupts(IT_INT_VEC) & data) {
+            msb = findMsbSet(tc->getCpuPtr()->get_interrupts(IT_INT_VEC) & data);
+            tc->getCpuPtr()->clear_interrupt(IT_INT_VEC, msb);
+        }
+        break;
+      case ASI_SWVR_UDB_INTR_W:
+            tc->getSystemPtr()->threadContexts[bits(data,12,8)]->getCpuPtr()->
+            post_interrupt(bits(data,5,0),0);
+        break;
+ default:
 doMmuWriteError:
         panic("need to impl DTB::doMmuRegWrite() got asi=%#x, va=%#x d=%#x\n",
             (uint32_t)pkt->req->getAsi(), pkt->getAddr(), data);
index ecb63bb9a0d29b4b218efc68a0172d68c32f70c8..5b13cd041431865fcd6d7856dcc55c8dcf7ce55a 100644 (file)
 
 using namespace SparcISA;
 
+
+void
+MiscRegFile::checkSoftInt(ThreadContext *tc)
+{
+    // If PIL < 14, copy over the tm and sm bits
+    if (pil < 14 && softint & 0x10000)
+        tc->getCpuPtr()->post_interrupt(IT_SOFT_INT,16);
+    else
+        tc->getCpuPtr()->clear_interrupt(IT_SOFT_INT,16);
+    if (pil < 14 && softint & 0x1)
+        tc->getCpuPtr()->post_interrupt(IT_SOFT_INT,0);
+    else
+        tc->getCpuPtr()->clear_interrupt(IT_SOFT_INT,0);
+
+    // Copy over any of the other bits that are set
+    for (int bit = 15; bit > 0; --bit) {
+        if (1 << bit & softint && bit > pil)
+            tc->getCpuPtr()->post_interrupt(IT_SOFT_INT,bit);
+        else
+            tc->getCpuPtr()->clear_interrupt(IT_SOFT_INT,bit);
+    }
+}
+
+
 void
 MiscRegFile::setFSRegWithEffect(int miscReg, const MiscReg &val,
                                 ThreadContext *tc)
@@ -43,23 +67,25 @@ MiscRegFile::setFSRegWithEffect(int miscReg, const MiscReg &val,
         /* Full system only ASRs */
       case MISCREG_SOFTINT:
         setReg(miscReg, val);;
+        checkSoftInt(tc);
         break;
-
       case MISCREG_SOFTINT_CLR:
         return setRegWithEffect(MISCREG_SOFTINT, ~val & softint, tc);
       case MISCREG_SOFTINT_SET:
-        tc->getCpuPtr()->post_interrupt(soft_interrupt);
         return setRegWithEffect(MISCREG_SOFTINT, val | softint, tc);
 
       case MISCREG_TICK_CMPR:
         if (tickCompare == NULL)
             tickCompare = new TickCompareEvent(this, tc);
         setReg(miscReg, val);
-        if ((tick_cmpr & mask(63)) && tickCompare->scheduled())
+        if ((tick_cmpr & ~mask(63)) && tickCompare->scheduled())
             tickCompare->deschedule();
         time = (tick_cmpr & mask(63)) - (tick & mask(63));
-        if (!(tick_cmpr & ~mask(63)) && time > 0)
+        if (!(tick_cmpr & ~mask(63)) && time > 0) {
+            if (tickCompare->scheduled())
+                tickCompare->deschedule();
             tickCompare->schedule(time * tc->getCpuPtr()->cycles(1));
+        }
         panic("writing to TICK compare register %#X\n", val);
         break;
 
@@ -71,8 +97,11 @@ MiscRegFile::setFSRegWithEffect(int miscReg, const MiscReg &val,
             sTickCompare->deschedule();
         time = ((int64_t)(stick_cmpr & mask(63)) - (int64_t)stick) -
             tc->getCpuPtr()->instCount();
-        if (!(stick_cmpr & ~mask(63)) && time > 0)
+        if (!(stick_cmpr & ~mask(63)) && time > 0) {
+            if (sTickCompare->scheduled())
+                sTickCompare->deschedule();
             sTickCompare->schedule(time * tc->getCpuPtr()->cycles(1) + curTick);
+        }
         DPRINTF(Timer, "writing to sTICK compare register value %#X\n", val);
         break;
 
@@ -81,6 +110,7 @@ MiscRegFile::setFSRegWithEffect(int miscReg, const MiscReg &val,
 
       case MISCREG_PIL:
         setReg(miscReg, val);
+        checkSoftInt(tc);
         break;
 
       case MISCREG_HVER:
@@ -88,6 +118,11 @@ MiscRegFile::setFSRegWithEffect(int miscReg, const MiscReg &val,
 
       case MISCREG_HINTP:
         setReg(miscReg, val);
+        if (hintp)
+            tc->getCpuPtr()->post_interrupt(IT_HINTP,0);
+        else
+            tc->getCpuPtr()->clear_interrupt(IT_HINTP,0);
+        break;
 
       case MISCREG_HTBA:
         // clear lower 7 bits on writes.
@@ -96,14 +131,32 @@ MiscRegFile::setFSRegWithEffect(int miscReg, const MiscReg &val,
 
       case MISCREG_QUEUE_CPU_MONDO_HEAD:
       case MISCREG_QUEUE_CPU_MONDO_TAIL:
+        setReg(miscReg, val);
+        if (cpu_mondo_head != cpu_mondo_tail)
+            tc->getCpuPtr()->post_interrupt(IT_CPU_MONDO,0);
+        else
+            tc->getCpuPtr()->clear_interrupt(IT_CPU_MONDO,0);
+        break;
       case MISCREG_QUEUE_DEV_MONDO_HEAD:
       case MISCREG_QUEUE_DEV_MONDO_TAIL:
+        setReg(miscReg, val);
+        if (dev_mondo_head != dev_mondo_tail)
+            tc->getCpuPtr()->post_interrupt(IT_DEV_MONDO,0);
+        else
+            tc->getCpuPtr()->clear_interrupt(IT_DEV_MONDO,0);
+        break;
       case MISCREG_QUEUE_RES_ERROR_HEAD:
       case MISCREG_QUEUE_RES_ERROR_TAIL:
+        setReg(miscReg, val);
+        if (res_error_head != res_error_tail)
+            tc->getCpuPtr()->post_interrupt(IT_RES_ERROR,0);
+        else
+            tc->getCpuPtr()->clear_interrupt(IT_RES_ERROR,0);
+        break;
       case MISCREG_QUEUE_NRES_ERROR_HEAD:
       case MISCREG_QUEUE_NRES_ERROR_TAIL:
         setReg(miscReg, val);
-        //do something to post mondo interrupt
+        // This one doesn't have an interrupt to report to the guest OS
         break;
 
       case MISCREG_HSTICK_CMPR:
@@ -114,14 +167,23 @@ MiscRegFile::setFSRegWithEffect(int miscReg, const MiscReg &val,
             hSTickCompare->deschedule();
         time = ((int64_t)(hstick_cmpr & mask(63)) - (int64_t)stick) -
             tc->getCpuPtr()->instCount();
-        if (!(hstick_cmpr & ~mask(63)) && time > 0)
+        if (!(hstick_cmpr & ~mask(63)) && time > 0) {
+            if (hSTickCompare->scheduled())
+                hSTickCompare->deschedule();
             hSTickCompare->schedule(curTick + time * tc->getCpuPtr()->cycles(1));
+        }
         DPRINTF(Timer, "writing to hsTICK compare register value %#X\n", val);
         break;
 
       case MISCREG_HPSTATE:
         // T1000 spec says impl. dependent val must always be 1
         setReg(miscReg, val | HPSTATE::id);
+#if FULL_SYSTEM
+        if (hpstate & HPSTATE::tlz && tl == 0 && !(hpstate & HPSTATE::hpriv))
+            tc->getCpuPtr()->post_interrupt(IT_TRAP_LEVEL_ZERO,0);
+        else
+            tc->getCpuPtr()->clear_interrupt(IT_TRAP_LEVEL_ZERO,0);
+#endif
         break;
       case MISCREG_HTSTATE:
       case MISCREG_STRAND_STS_REG:
@@ -198,7 +260,6 @@ MiscRegFile::processSTickCompare(ThreadContext *tc)
         DPRINTF(Timer, "STick compare cycle reached at %#x\n",
                 (stick_cmpr & mask(63)));
         if (!(tc->readMiscReg(MISCREG_STICK_CMPR) & (ULL(1) << 63))) {
-            tc->getCpuPtr()->post_interrupt(soft_interrupt);
             setRegWithEffect(MISCREG_SOFTINT, softint | (ULL(1) << 16), tc);
         }
     } else
@@ -221,10 +282,9 @@ MiscRegFile::processHSTickCompare(ThreadContext *tc)
                 (stick_cmpr & mask(63)));
         if (!(tc->readMiscReg(MISCREG_HSTICK_CMPR) & (ULL(1) << 63))) {
             setRegWithEffect(MISCREG_HINTP, 1, tc);
-            tc->getCpuPtr()->post_interrupt(hstick_match);
         }
         // Need to do something to cause interrupt to happen here !!! @todo
     } else
-        sTickCompare->schedule(ticks * tc->getCpuPtr()->cycles(1) + curTick);
+        hSTickCompare->schedule(ticks * tc->getCpuPtr()->cycles(1) + curTick);
 }
 
index 0f1233677998af7b3d72b51e11c03b119e02b3cf..83b9138b4ee50e7f71819ca6f7c69387d7e481dd 100644 (file)
@@ -112,4 +112,29 @@ replaceBits(T& val, int first, int last, B bit_val)
     val = insertBits(val, first, last, bit_val);
 }
 
+/**
+ * Returns the bit position of the MSB that is set in the input
+ */
+inline
+int
+findMsbSet(uint64_t val) {
+    int msb = 0;
+    if (!val)
+        return 0;
+    if (bits(val, 63,32)) msb += 32;
+    val >>= 32;
+    if (bits(val, 31,16)) msb += 16;
+    val >>= 16;
+    if (bits(val, 15,8)) msb += 8;
+    val >>= 8;
+    if (bits(val, 7,4)) msb += 4;
+    val >>= 4;
+    if (bits(val, 3,2)) msb += 2;
+    val >>= 2;
+    if (bits(val, 1,1)) msb += 1;
+    return msb;
+}
+
+
+
 #endif // __BASE_BITFIELD_HH__
index d5a023c59e5f9f16540daadb8081d8de2afa1d2e..104b3b6bb5baf5c8be3339dcfa6d4067a673d5eb 100644 (file)
@@ -371,12 +371,6 @@ BaseCPU::ProfileEvent::process()
     schedule(curTick + interval);
 }
 
-void
-BaseCPU::post_interrupt(int int_type)
-{
-    interrupts.post(int_type);
-}
-
 void
 BaseCPU::post_interrupt(int int_num, int index)
 {
@@ -395,6 +389,11 @@ BaseCPU::clear_interrupts()
     interrupts.clear_all();
 }
 
+uint64_t
+BaseCPU::get_interrupts(int int_num)
+{
+    return interrupts.get_vec(int_num);
+}
 
 void
 BaseCPU::serialize(std::ostream &os)
index a1265b7485a866dad32aa80547d4bb4bf64b3c36..d4213887dd50a626987e898a62f3147b75f56ac4 100644 (file)
@@ -102,10 +102,10 @@ class BaseCPU : public MemObject
     TheISA::Interrupts interrupts;
 
   public:
-    virtual void post_interrupt(int int_type);
     virtual void post_interrupt(int int_num, int index);
     virtual void clear_interrupt(int int_num, int index);
     virtual void clear_interrupts();
+    virtual uint64_t get_interrupts(int int_num);
 
     bool check_interrupts(ThreadContext * tc) const
     { return interrupts.check_interrupts(tc); }
index 4cbc868914428b1e4ecaca40aa504dfd2c69b9dd..be0f6599bcdd9cc146b79e5cef6831aaaec58ae4 100644 (file)
 
 using namespace std;
 
-IntrControl::IntrControl(const string &name, BaseCPU *c)
-    : SimObject(name), cpu(c)
+IntrControl::IntrControl(const string &name, System *s)
+    : SimObject(name), sys(s)
 {}
 
-/* @todo
- *Fix the cpu sim object parameter to be a system pointer
- *instead, to avoid some extra dereferencing
- */
 void
 IntrControl::post(int int_num, int index)
 {
-    std::vector<ThreadContext *> &tcvec = cpu->system->threadContexts;
+    std::vector<ThreadContext *> &tcvec = sys->threadContexts;
     BaseCPU *temp = tcvec[0]->getCpuPtr();
     temp->post_interrupt(int_num, index);
 }
@@ -59,7 +55,7 @@ IntrControl::post(int int_num, int index)
 void
 IntrControl::post(int cpu_id, int int_num, int index)
 {
-    std::vector<ThreadContext *> &tcvec = cpu->system->threadContexts;
+    std::vector<ThreadContext *> &tcvec = sys->threadContexts;
     BaseCPU *temp = tcvec[cpu_id]->getCpuPtr();
     temp->post_interrupt(int_num, index);
 }
@@ -67,7 +63,7 @@ IntrControl::post(int cpu_id, int int_num, int index)
 void
 IntrControl::clear(int int_num, int index)
 {
-    std::vector<ThreadContext *> &tcvec = cpu->system->threadContexts;
+    std::vector<ThreadContext *> &tcvec = sys->threadContexts;
     BaseCPU *temp = tcvec[0]->getCpuPtr();
     temp->clear_interrupt(int_num, index);
 }
@@ -75,26 +71,26 @@ IntrControl::clear(int int_num, int index)
 void
 IntrControl::clear(int cpu_id, int int_num, int index)
 {
-    std::vector<ThreadContext *> &tcvec = cpu->system->threadContexts;
+    std::vector<ThreadContext *> &tcvec = sys->threadContexts;
     BaseCPU *temp = tcvec[cpu_id]->getCpuPtr();
     temp->clear_interrupt(int_num, index);
 }
 
 BEGIN_DECLARE_SIM_OBJECT_PARAMS(IntrControl)
 
-    SimObjectParam<BaseCPU *> cpu;
+    SimObjectParam<System *> sys;
 
 END_DECLARE_SIM_OBJECT_PARAMS(IntrControl)
 
 BEGIN_INIT_SIM_OBJECT_PARAMS(IntrControl)
 
-    INIT_PARAM(cpu, "the cpu")
+    INIT_PARAM(sys, "the system we are part of")
 
 END_INIT_SIM_OBJECT_PARAMS(IntrControl)
 
 CREATE_SIM_OBJECT(IntrControl)
 {
-    return new IntrControl(getInstanceName(), cpu);
+    return new IntrControl(getInstanceName(), sys);
 }
 
 REGISTER_SIM_OBJECT("IntrControl", IntrControl)
index 2e3f9e038d7ff1cd8c7f999539d53bc9ed717770..c6f75abf0cd1f49eca7f2375d9205cac76f9fa61 100644 (file)
@@ -42,8 +42,8 @@
 class IntrControl : public SimObject
 {
   public:
-    BaseCPU *cpu;
-    IntrControl(const std::string &name, BaseCPU *c);
+    System *sys;
+    IntrControl(const std::string &name, System *s);
 
     void clear(int int_num, int index = 0);
     void post(int int_num, int index = 0);
index 15c47984b11b48380f79a15ec1cd9fc63b92b4b6..118160adfbac82ad1269a7546652dafaa0b893cd 100644 (file)
@@ -372,7 +372,7 @@ TsunamiCChip::write(PacketPtr pkt)
 void
 TsunamiCChip::clearIPI(uint64_t ipintr)
 {
-    int numcpus = tsunami->intrctrl->cpu->system->threadContexts.size();
+    int numcpus = sys->threadContexts.size();
     assert(numcpus <= Tsunami::Max_CPUs);
 
     if (ipintr) {
@@ -398,7 +398,7 @@ TsunamiCChip::clearIPI(uint64_t ipintr)
 void
 TsunamiCChip::clearITI(uint64_t itintr)
 {
-    int numcpus = tsunami->intrctrl->cpu->system->threadContexts.size();
+    int numcpus = sys->threadContexts.size();
     assert(numcpus <= Tsunami::Max_CPUs);
 
     if (itintr) {
@@ -418,7 +418,7 @@ TsunamiCChip::clearITI(uint64_t itintr)
 void
 TsunamiCChip::reqIPI(uint64_t ipreq)
 {
-    int numcpus = tsunami->intrctrl->cpu->system->threadContexts.size();
+    int numcpus = sys->threadContexts.size();
     assert(numcpus <= Tsunami::Max_CPUs);
 
     if (ipreq) {
@@ -445,7 +445,7 @@ TsunamiCChip::reqIPI(uint64_t ipreq)
 void
 TsunamiCChip::postRTC()
 {
-    int size = tsunami->intrctrl->cpu->system->threadContexts.size();
+    int size = sys->threadContexts.size();
     assert(size <= Tsunami::Max_CPUs);
 
     for (int i = 0; i < size; i++) {
@@ -463,7 +463,7 @@ void
 TsunamiCChip::postDRIR(uint32_t interrupt)
 {
     uint64_t bitvector = ULL(1) << interrupt;
-    uint64_t size = tsunami->intrctrl->cpu->system->threadContexts.size();
+    uint64_t size = sys->threadContexts.size();
     assert(size <= Tsunami::Max_CPUs);
     drir |= bitvector;
 
@@ -481,7 +481,7 @@ void
 TsunamiCChip::clearDRIR(uint32_t interrupt)
 {
     uint64_t bitvector = ULL(1) << interrupt;
-    uint64_t size = tsunami->intrctrl->cpu->system->threadContexts.size();
+    uint64_t size = sys->threadContexts.size();
     assert(size <= Tsunami::Max_CPUs);
 
     if (drir & bitvector)
index 44b082b685aecb16c03285e9929deb4d05d01556..4d63690c28f76ec345de8a748d66f4fc48b8bc21 100644 (file)
@@ -38,6 +38,7 @@ sources = []
 
 sources += Split('''
        dtod.cc
+        iob.cc
        t1000.cc
        mm_disk.cc
        ''')
index a7cf5cc84c93a244070ad6a4bfda604915b13de7..398ba47f9cf9243f431ee36f2e7dd9a31f76685a 100644 (file)
@@ -3,4 +3,4 @@ from m5.params import *
 from m5.proxy import *
 class IntrControl(SimObject):
     type = 'IntrControl'
-    cpu = Param.BaseCPU(Parent.cpu[0], "the cpu")
+    sys = Param.System(Parent.any, "the system we are part of")
index 034ed9fa081ef4a15da2864f4b18434e827ad8e9..ce952d718af7a1da742ae0d7e323978801e7b5eb 100644 (file)
@@ -7,43 +7,6 @@ max_tick=0
 output_file=cout
 progress_interval=0
 
-[exetrace]
-intel_format=false
-legion_lockstep=false
-pc_symbol=true
-print_cpseq=false
-print_cycle=true
-print_data=true
-print_effaddr=true
-print_fetchseq=false
-print_iregs=false
-print_opclass=true
-print_thread=true
-speculative=true
-trace_system=client
-
-[serialize]
-count=10
-cycle=0
-dir=cpt.%012d
-period=0
-
-[stats]
-descriptions=true
-dump_cycle=0
-dump_period=0
-dump_reset=false
-ignore_events=
-mysql_db=
-mysql_host=
-mysql_password=
-mysql_user=
-project_name=test
-simulation_name=test
-simulation_sample=0
-text_compat=true
-text_file=m5stats.txt
-
 [system]
 type=LinuxAlphaSystem
 children=bridge cpu0 cpu1 disk0 disk2 intrctrl iobus membus physmem sim_console simple_disk tsunami
@@ -177,7 +140,7 @@ read_only=true
 
 [system.intrctrl]
 type=IntrControl
-cpu=system.cpu0
+sys=system
 
 [system.iobus]
 type=Bus
@@ -224,15 +187,10 @@ port=system.membus.port[1]
 
 [system.sim_console]
 type=SimConsole
-children=listener
 append_name=true
 intr_control=system.intrctrl
-listener=system.sim_console.listener
 number=0
 output=console
-
-[system.sim_console.listener]
-type=ConsoleListener
 port=3456
 
 [system.simple_disk]
@@ -748,12 +706,3 @@ sim_console=system.sim_console
 system=system
 pio=system.iobus.port[24]
 
-[trace]
-bufsize=0
-cycle=0
-dump_on_exit=false
-file=cout
-flags=
-ignore=
-start=0
-
index 35abc9f2411f5e889be34d436681a79c6a4b009d..313620c595b47171bc9bde080a608bc4f938e4f1 100644 (file)
@@ -34,40 +34,9 @@ clock=2
 width=64
 responder_set=false
 
-[system.cpu0.itb]
-type=AlphaITB
-size=48
-
-[system.cpu0.dtb]
-type=AlphaDTB
-size=64
-
-[system.cpu0]
-type=AtomicSimpleCPU
-max_insts_any_thread=0
-max_insts_all_threads=0
-max_loads_any_thread=0
-max_loads_all_threads=0
-progress_interval=0
-system=system
-cpu_id=0
-itb=system.cpu0.itb
-dtb=system.cpu0.dtb
-profile=0
-do_quiesce=true
-do_checkpoint_insts=true
-do_statistics_insts=true
-clock=1
-phase=0
-defer_registration=false
-width=1
-function_trace=false
-function_trace_start=0
-simulate_stalls=false
-
 [system.intrctrl]
 type=IntrControl
-cpu=system.cpu0
+sys=system
 
 [system.tsunami]
 type=Tsunami
@@ -132,6 +101,37 @@ image=system.disk2.image
 driveID=master
 delay=2000
 
+[system.cpu0.itb]
+type=AlphaITB
+size=48
+
+[system.cpu0.dtb]
+type=AlphaDTB
+size=64
+
+[system.cpu0]
+type=AtomicSimpleCPU
+max_insts_any_thread=0
+max_insts_all_threads=0
+max_loads_any_thread=0
+max_loads_all_threads=0
+progress_interval=0
+system=system
+cpu_id=0
+itb=system.cpu0.itb
+dtb=system.cpu0.dtb
+profile=0
+do_quiesce=true
+do_checkpoint_insts=true
+do_statistics_insts=true
+clock=1
+phase=0
+defer_registration=false
+width=1
+function_trace=false
+function_trace_start=0
+simulate_stalls=false
+
 [system.cpu1.itb]
 type=AlphaITB
 size=48
@@ -275,15 +275,11 @@ size=16777216
 platform=system.tsunami
 system=system
 
-[system.sim_console.listener]
-type=ConsoleListener
-port=3456
-
 [system.sim_console]
 type=SimConsole
-listener=system.sim_console.listener
 intr_control=system.intrctrl
 output=console
+port=3456
 append_name=true
 number=0
 
@@ -654,51 +650,3 @@ clock=2
 width=64
 responder_set=true
 
-[trace]
-flags=
-start=0
-cycle=0
-bufsize=0
-file=cout
-dump_on_exit=false
-ignore=
-
-[stats]
-descriptions=true
-project_name=test
-simulation_name=test
-simulation_sample=0
-text_file=m5stats.txt
-text_compat=true
-mysql_db=
-mysql_user=
-mysql_password=
-mysql_host=
-events_start=-1
-dump_reset=false
-dump_cycle=0
-dump_period=0
-ignore_events=
-
-[random]
-seed=1
-
-[exetrace]
-speculative=true
-print_cycle=true
-print_opclass=true
-print_thread=true
-print_effaddr=true
-print_data=true
-print_iregs=false
-print_fetchseq=false
-print_cpseq=false
-print_reg_delta=false
-pc_symbol=true
-intel_format=false
-legion_lockstep=false
-trace_system=client
-
-[statsreset]
-reset_cycle=0
-
index fbc68db88bcd6536f958b9cde2eaaa599c464d5a..8cb8b6cbd488aff135dcbd4eb20160ff3278c9f3 100644 (file)
@@ -7,43 +7,6 @@ max_tick=0
 output_file=cout
 progress_interval=0
 
-[exetrace]
-intel_format=false
-legion_lockstep=false
-pc_symbol=true
-print_cpseq=false
-print_cycle=true
-print_data=true
-print_effaddr=true
-print_fetchseq=false
-print_iregs=false
-print_opclass=true
-print_thread=true
-speculative=true
-trace_system=client
-
-[serialize]
-count=10
-cycle=0
-dir=cpt.%012d
-period=0
-
-[stats]
-descriptions=true
-dump_cycle=0
-dump_period=0
-dump_reset=false
-ignore_events=
-mysql_db=
-mysql_host=
-mysql_password=
-mysql_user=
-project_name=test
-simulation_name=test
-simulation_sample=0
-text_compat=true
-text_file=m5stats.txt
-
 [system]
 type=LinuxAlphaSystem
 children=bridge cpu disk0 disk2 intrctrl iobus membus physmem sim_console simple_disk tsunami
@@ -143,7 +106,7 @@ read_only=true
 
 [system.intrctrl]
 type=IntrControl
-cpu=system.cpu
+sys=system
 
 [system.iobus]
 type=Bus
@@ -190,15 +153,10 @@ port=system.membus.port[1]
 
 [system.sim_console]
 type=SimConsole
-children=listener
 append_name=true
 intr_control=system.intrctrl
-listener=system.sim_console.listener
 number=0
 output=console
-
-[system.sim_console.listener]
-type=ConsoleListener
 port=3456
 
 [system.simple_disk]
@@ -714,12 +672,3 @@ sim_console=system.sim_console
 system=system
 pio=system.iobus.port[24]
 
-[trace]
-bufsize=0
-cycle=0
-dump_on_exit=false
-file=cout
-flags=
-ignore=
-start=0
-
index 673f2c89cfa3780a9a38ffb81103c5b851195f05..ab56c5d90e50d8b3b6ab58aef1cdee37218d0c75 100644 (file)
@@ -34,40 +34,9 @@ clock=2
 width=64
 responder_set=false
 
-[system.cpu.itb]
-type=AlphaITB
-size=48
-
-[system.cpu.dtb]
-type=AlphaDTB
-size=64
-
-[system.cpu]
-type=AtomicSimpleCPU
-max_insts_any_thread=0
-max_insts_all_threads=0
-max_loads_any_thread=0
-max_loads_all_threads=0
-progress_interval=0
-system=system
-cpu_id=0
-itb=system.cpu.itb
-dtb=system.cpu.dtb
-profile=0
-do_quiesce=true
-do_checkpoint_insts=true
-do_statistics_insts=true
-clock=1
-phase=0
-defer_registration=false
-width=1
-function_trace=false
-function_trace_start=0
-simulate_stalls=false
-
 [system.intrctrl]
 type=IntrControl
-cpu=system.cpu
+sys=system
 
 [system.tsunami]
 type=Tsunami
@@ -244,18 +213,45 @@ size=16777216
 platform=system.tsunami
 system=system
 
-[system.sim_console.listener]
-type=ConsoleListener
-port=3456
-
 [system.sim_console]
 type=SimConsole
-listener=system.sim_console.listener
 intr_control=system.intrctrl
 output=console
+port=3456
 append_name=true
 number=0
 
+[system.cpu.itb]
+type=AlphaITB
+size=48
+
+[system.cpu.dtb]
+type=AlphaDTB
+size=64
+
+[system.cpu]
+type=AtomicSimpleCPU
+max_insts_any_thread=0
+max_insts_all_threads=0
+max_loads_any_thread=0
+max_loads_all_threads=0
+progress_interval=0
+system=system
+cpu_id=0
+itb=system.cpu.itb
+dtb=system.cpu.dtb
+profile=0
+do_quiesce=true
+do_checkpoint_insts=true
+do_statistics_insts=true
+clock=1
+phase=0
+defer_registration=false
+width=1
+function_trace=false
+function_trace_start=0
+simulate_stalls=false
+
 [system.tsunami.console]
 type=AlphaConsole
 sim_console=system.sim_console
@@ -623,51 +619,3 @@ clock=2
 width=64
 responder_set=true
 
-[trace]
-flags=
-start=0
-cycle=0
-bufsize=0
-file=cout
-dump_on_exit=false
-ignore=
-
-[stats]
-descriptions=true
-project_name=test
-simulation_name=test
-simulation_sample=0
-text_file=m5stats.txt
-text_compat=true
-mysql_db=
-mysql_user=
-mysql_password=
-mysql_host=
-events_start=-1
-dump_reset=false
-dump_cycle=0
-dump_period=0
-ignore_events=
-
-[random]
-seed=1
-
-[exetrace]
-speculative=true
-print_cycle=true
-print_opclass=true
-print_thread=true
-print_effaddr=true
-print_data=true
-print_iregs=false
-print_fetchseq=false
-print_cpseq=false
-print_reg_delta=false
-pc_symbol=true
-intel_format=false
-legion_lockstep=false
-trace_system=client
-
-[statsreset]
-reset_cycle=0
-
index 5a824717f2161fa5b05a7fb4b37db73cb33cbd04..856856ae8861f7376b913bdf5a43447bc3c74aa6 100644 (file)
@@ -7,43 +7,6 @@ max_tick=0
 output_file=cout
 progress_interval=0
 
-[exetrace]
-intel_format=false
-legion_lockstep=false
-pc_symbol=true
-print_cpseq=false
-print_cycle=true
-print_data=true
-print_effaddr=true
-print_fetchseq=false
-print_iregs=false
-print_opclass=true
-print_thread=true
-speculative=true
-trace_system=client
-
-[serialize]
-count=10
-cycle=0
-dir=cpt.%012d
-period=0
-
-[stats]
-descriptions=true
-dump_cycle=0
-dump_period=0
-dump_reset=false
-ignore_events=
-mysql_db=
-mysql_host=
-mysql_password=
-mysql_user=
-project_name=test
-simulation_name=test
-simulation_sample=0
-text_compat=true
-text_file=m5stats.txt
-
 [system]
 type=LinuxAlphaSystem
 children=bridge cpu0 cpu1 disk0 disk2 intrctrl iobus membus physmem sim_console simple_disk tsunami
@@ -173,7 +136,7 @@ read_only=true
 
 [system.intrctrl]
 type=IntrControl
-cpu=system.cpu0
+sys=system
 
 [system.iobus]
 type=Bus
@@ -220,15 +183,10 @@ port=system.membus.port[1]
 
 [system.sim_console]
 type=SimConsole
-children=listener
 append_name=true
 intr_control=system.intrctrl
-listener=system.sim_console.listener
 number=0
 output=console
-
-[system.sim_console.listener]
-type=ConsoleListener
 port=3456
 
 [system.simple_disk]
@@ -744,12 +702,3 @@ sim_console=system.sim_console
 system=system
 pio=system.iobus.port[24]
 
-[trace]
-bufsize=0
-cycle=0
-dump_on_exit=false
-file=cout
-flags=
-ignore=
-start=0
-
index c1e5baadbfbb0450b6147db8f72392fef7fa817a..a4dd003e484086e0822cf872ae36f2e53a897749 100644 (file)
@@ -34,40 +34,9 @@ clock=2
 width=64
 responder_set=false
 
-[system.cpu0.itb]
-type=AlphaITB
-size=48
-
-[system.cpu0.dtb]
-type=AlphaDTB
-size=64
-
-[system.cpu0]
-type=TimingSimpleCPU
-max_insts_any_thread=0
-max_insts_all_threads=0
-max_loads_any_thread=0
-max_loads_all_threads=0
-progress_interval=0
-system=system
-cpu_id=0
-itb=system.cpu0.itb
-dtb=system.cpu0.dtb
-profile=0
-do_quiesce=true
-do_checkpoint_insts=true
-do_statistics_insts=true
-clock=1
-phase=0
-defer_registration=false
-// width not specified
-function_trace=false
-function_trace_start=0
-// simulate_stalls not specified
-
 [system.intrctrl]
 type=IntrControl
-cpu=system.cpu0
+sys=system
 
 [system.tsunami]
 type=Tsunami
@@ -132,6 +101,37 @@ image=system.disk2.image
 driveID=master
 delay=2000
 
+[system.cpu0.itb]
+type=AlphaITB
+size=48
+
+[system.cpu0.dtb]
+type=AlphaDTB
+size=64
+
+[system.cpu0]
+type=TimingSimpleCPU
+max_insts_any_thread=0
+max_insts_all_threads=0
+max_loads_any_thread=0
+max_loads_all_threads=0
+progress_interval=0
+system=system
+cpu_id=0
+itb=system.cpu0.itb
+dtb=system.cpu0.dtb
+profile=0
+do_quiesce=true
+do_checkpoint_insts=true
+do_statistics_insts=true
+clock=1
+phase=0
+defer_registration=false
+// width not specified
+function_trace=false
+function_trace_start=0
+// simulate_stalls not specified
+
 [system.cpu1.itb]
 type=AlphaITB
 size=48
@@ -275,15 +275,11 @@ size=16777216
 platform=system.tsunami
 system=system
 
-[system.sim_console.listener]
-type=ConsoleListener
-port=3456
-
 [system.sim_console]
 type=SimConsole
-listener=system.sim_console.listener
 intr_control=system.intrctrl
 output=console
+port=3456
 append_name=true
 number=0
 
@@ -654,51 +650,3 @@ clock=2
 width=64
 responder_set=true
 
-[trace]
-flags=
-start=0
-cycle=0
-bufsize=0
-file=cout
-dump_on_exit=false
-ignore=
-
-[stats]
-descriptions=true
-project_name=test
-simulation_name=test
-simulation_sample=0
-text_file=m5stats.txt
-text_compat=true
-mysql_db=
-mysql_user=
-mysql_password=
-mysql_host=
-events_start=-1
-dump_reset=false
-dump_cycle=0
-dump_period=0
-ignore_events=
-
-[random]
-seed=1
-
-[exetrace]
-speculative=true
-print_cycle=true
-print_opclass=true
-print_thread=true
-print_effaddr=true
-print_data=true
-print_iregs=false
-print_fetchseq=false
-print_cpseq=false
-print_reg_delta=false
-pc_symbol=true
-intel_format=false
-legion_lockstep=false
-trace_system=client
-
-[statsreset]
-reset_cycle=0
-
index 104bbce3609925974175b693541cca30cfa51ea8..6f48977b02573830c375dc2663ab1e4a4b5c899c 100644 (file)
@@ -7,43 +7,6 @@ max_tick=0
 output_file=cout
 progress_interval=0
 
-[exetrace]
-intel_format=false
-legion_lockstep=false
-pc_symbol=true
-print_cpseq=false
-print_cycle=true
-print_data=true
-print_effaddr=true
-print_fetchseq=false
-print_iregs=false
-print_opclass=true
-print_thread=true
-speculative=true
-trace_system=client
-
-[serialize]
-count=10
-cycle=0
-dir=cpt.%012d
-period=0
-
-[stats]
-descriptions=true
-dump_cycle=0
-dump_period=0
-dump_reset=false
-ignore_events=
-mysql_db=
-mysql_host=
-mysql_password=
-mysql_user=
-project_name=test
-simulation_name=test
-simulation_sample=0
-text_compat=true
-text_file=m5stats.txt
-
 [system]
 type=LinuxAlphaSystem
 children=bridge cpu disk0 disk2 intrctrl iobus membus physmem sim_console simple_disk tsunami
@@ -141,7 +104,7 @@ read_only=true
 
 [system.intrctrl]
 type=IntrControl
-cpu=system.cpu
+sys=system
 
 [system.iobus]
 type=Bus
@@ -188,15 +151,10 @@ port=system.membus.port[1]
 
 [system.sim_console]
 type=SimConsole
-children=listener
 append_name=true
 intr_control=system.intrctrl
-listener=system.sim_console.listener
 number=0
 output=console
-
-[system.sim_console.listener]
-type=ConsoleListener
 port=3456
 
 [system.simple_disk]
@@ -712,12 +670,3 @@ sim_console=system.sim_console
 system=system
 pio=system.iobus.port[24]
 
-[trace]
-bufsize=0
-cycle=0
-dump_on_exit=false
-file=cout
-flags=
-ignore=
-start=0
-
index 8791359a121b61c0c18ae5f98f142c59a2e1a10b..a99b59ae7ac320471e981dc0d036e9c512378869 100644 (file)
@@ -34,40 +34,9 @@ clock=2
 width=64
 responder_set=false
 
-[system.cpu.itb]
-type=AlphaITB
-size=48
-
-[system.cpu.dtb]
-type=AlphaDTB
-size=64
-
-[system.cpu]
-type=TimingSimpleCPU
-max_insts_any_thread=0
-max_insts_all_threads=0
-max_loads_any_thread=0
-max_loads_all_threads=0
-progress_interval=0
-system=system
-cpu_id=0
-itb=system.cpu.itb
-dtb=system.cpu.dtb
-profile=0
-do_quiesce=true
-do_checkpoint_insts=true
-do_statistics_insts=true
-clock=1
-phase=0
-defer_registration=false
-// width not specified
-function_trace=false
-function_trace_start=0
-// simulate_stalls not specified
-
 [system.intrctrl]
 type=IntrControl
-cpu=system.cpu
+sys=system
 
 [system.tsunami]
 type=Tsunami
@@ -244,18 +213,45 @@ size=16777216
 platform=system.tsunami
 system=system
 
-[system.sim_console.listener]
-type=ConsoleListener
-port=3456
-
 [system.sim_console]
 type=SimConsole
-listener=system.sim_console.listener
 intr_control=system.intrctrl
 output=console
+port=3456
 append_name=true
 number=0
 
+[system.cpu.itb]
+type=AlphaITB
+size=48
+
+[system.cpu.dtb]
+type=AlphaDTB
+size=64
+
+[system.cpu]
+type=TimingSimpleCPU
+max_insts_any_thread=0
+max_insts_all_threads=0
+max_loads_any_thread=0
+max_loads_all_threads=0
+progress_interval=0
+system=system
+cpu_id=0
+itb=system.cpu.itb
+dtb=system.cpu.dtb
+profile=0
+do_quiesce=true
+do_checkpoint_insts=true
+do_statistics_insts=true
+clock=1
+phase=0
+defer_registration=false
+// width not specified
+function_trace=false
+function_trace_start=0
+// simulate_stalls not specified
+
 [system.tsunami.console]
 type=AlphaConsole
 sim_console=system.sim_console
@@ -623,51 +619,3 @@ clock=2
 width=64
 responder_set=true
 
-[trace]
-flags=
-start=0
-cycle=0
-bufsize=0
-file=cout
-dump_on_exit=false
-ignore=
-
-[stats]
-descriptions=true
-project_name=test
-simulation_name=test
-simulation_sample=0
-text_file=m5stats.txt
-text_compat=true
-mysql_db=
-mysql_user=
-mysql_password=
-mysql_host=
-events_start=-1
-dump_reset=false
-dump_cycle=0
-dump_period=0
-ignore_events=
-
-[random]
-seed=1
-
-[exetrace]
-speculative=true
-print_cycle=true
-print_opclass=true
-print_thread=true
-print_effaddr=true
-print_data=true
-print_iregs=false
-print_fetchseq=false
-print_cpseq=false
-print_reg_delta=false
-pc_symbol=true
-intel_format=false
-legion_lockstep=false
-trace_system=client
-
-[statsreset]
-reset_cycle=0
-
index 67632ca0800b84b0d73886fe5dc4b9860b2fe3fa..2750dd3c0e785c66d9039666417191302cedfacd 100644 (file)
@@ -18,7 +18,7 @@ kernel=/dist/m5/system/binaries/vmlinux
 mem_mode=atomic
 pal=/dist/m5/system/binaries/ts_osfpal
 physmem=drivesys.physmem
-readfile=/y/binkertn/research/m5/rtc/configs/boot/netperf-server.rcS
+readfile=/z/saidi/work/m5.newmem/configs/boot/netperf-server.rcS
 symbolfile=
 system_rev=1024
 system_type=34
@@ -106,7 +106,7 @@ read_only=true
 
 [drivesys.intrctrl]
 type=IntrControl
-cpu=drivesys.cpu
+sys=drivesys
 
 [drivesys.iobus]
 type=Bus
@@ -153,15 +153,10 @@ port=drivesys.membus.port[1]
 
 [drivesys.sim_console]
 type=SimConsole
-children=listener
 append_name=true
 intr_control=drivesys.intrctrl
-listener=drivesys.sim_console.listener
 number=0
 output=console
-
-[drivesys.sim_console.listener]
-type=ConsoleListener
 port=3456
 
 [drivesys.simple_disk]
@@ -691,43 +686,6 @@ int1=testsys.tsunami.etherint
 int2=drivesys.tsunami.etherint
 speed=8000.000000
 
-[exetrace]
-intel_format=false
-legion_lockstep=false
-pc_symbol=true
-print_cpseq=false
-print_cycle=true
-print_data=true
-print_effaddr=true
-print_fetchseq=false
-print_iregs=false
-print_opclass=true
-print_thread=true
-speculative=true
-trace_system=client
-
-[serialize]
-count=10
-cycle=0
-dir=cpt.%012d
-period=0
-
-[stats]
-descriptions=true
-dump_cycle=0
-dump_period=0
-dump_reset=false
-ignore_events=
-mysql_db=
-mysql_host=
-mysql_password=
-mysql_user=
-project_name=test
-simulation_name=test
-simulation_sample=0
-text_compat=true
-text_file=m5stats.txt
-
 [testsys]
 type=LinuxAlphaSystem
 children=bridge cpu disk0 disk2 intrctrl iobus membus physmem sim_console simple_disk tsunami
@@ -739,7 +697,7 @@ kernel=/dist/m5/system/binaries/vmlinux
 mem_mode=atomic
 pal=/dist/m5/system/binaries/ts_osfpal
 physmem=testsys.physmem
-readfile=/y/binkertn/research/m5/rtc/configs/boot/netperf-stream-client.rcS
+readfile=/z/saidi/work/m5.newmem/configs/boot/netperf-stream-client.rcS
 symbolfile=
 system_rev=1024
 system_type=34
@@ -827,7 +785,7 @@ read_only=true
 
 [testsys.intrctrl]
 type=IntrControl
-cpu=testsys.cpu
+sys=testsys
 
 [testsys.iobus]
 type=Bus
@@ -874,15 +832,10 @@ port=testsys.membus.port[1]
 
 [testsys.sim_console]
 type=SimConsole
-children=listener
 append_name=true
 intr_control=testsys.intrctrl
-listener=testsys.sim_console.listener
 number=0
 output=console
-
-[testsys.sim_console.listener]
-type=ConsoleListener
 port=3456
 
 [testsys.simple_disk]
@@ -1398,12 +1351,3 @@ sim_console=testsys.sim_console
 system=testsys
 pio=testsys.iobus.port[24]
 
-[trace]
-bufsize=0
-cycle=0
-dump_on_exit=false
-file=cout
-flags=
-ignore=
-start=0
-
index 7ef28f570707dd76c2b82306fb09bccfd12612d6..c422f07acd194cdaf312eead2d8395856a9f1a9e 100644 (file)
@@ -21,273 +21,28 @@ kernel=/dist/m5/system/binaries/vmlinux
 console=/dist/m5/system/binaries/console
 pal=/dist/m5/system/binaries/ts_osfpal
 boot_osflags=root=/dev/hda1 console=ttyS0
-readfile=/y/binkertn/research/m5/rtc/configs/boot/netperf-stream-client.rcS
+readfile=/z/saidi/work/m5.newmem/configs/boot/netperf-stream-client.rcS
 symbolfile=
 init_param=0
 system_type=34
 system_rev=1024
 
-[testsys.cpu.itb]
-type=AlphaITB
-size=48
-
-[testsys.cpu.dtb]
-type=AlphaDTB
-size=64
-
-[testsys.cpu]
-type=AtomicSimpleCPU
-max_insts_any_thread=0
-max_insts_all_threads=0
-max_loads_any_thread=0
-max_loads_all_threads=0
-progress_interval=0
-system=testsys
-cpu_id=0
-itb=testsys.cpu.itb
-dtb=testsys.cpu.dtb
-profile=0
-do_quiesce=true
-do_checkpoint_insts=true
-do_statistics_insts=true
-clock=1
-phase=0
-defer_registration=false
-width=1
-function_trace=false
-function_trace_start=0
-simulate_stalls=false
+[testsys.membus]
+type=Bus
+bus_id=1
+clock=1000
+width=64
+responder_set=false
 
 [testsys.intrctrl]
 type=IntrControl
-cpu=testsys.cpu
+sys=testsys
 
 [testsys.tsunami]
 type=Tsunami
 system=testsys
 intrctrl=testsys.intrctrl
 
-[testsys.tsunami.ethernet.configdata]
-type=PciConfigData
-VendorID=4107
-DeviceID=34
-Command=0
-Status=656
-Revision=0
-ProgIF=0
-SubClassCode=0
-ClassCode=2
-CacheLineSize=0
-LatencyTimer=0
-HeaderType=0
-BIST=0
-BAR0=1
-BAR1=0
-BAR2=0
-BAR3=0
-BAR4=0
-BAR5=0
-CardbusCIS=0
-SubsystemVendorID=0
-SubsystemID=0
-ExpansionROM=0
-InterruptLine=30
-InterruptPin=1
-MinimumGrant=176
-MaximumLatency=52
-BAR0Size=256
-BAR1Size=4096
-BAR2Size=0
-BAR3Size=0
-BAR4Size=0
-BAR5Size=0
-
-[testsys.tsunami.ethernet]
-type=NSGigE
-system=testsys
-platform=testsys.tsunami
-configdata=testsys.tsunami.ethernet.configdata
-pci_bus=0
-pci_dev=1
-pci_func=0
-pio_latency=1000
-config_latency=20000
-clock=0
-dma_desc_free=false
-dma_data_free=false
-dma_read_delay=0
-dma_write_delay=0
-dma_read_factor=0
-dma_write_factor=0
-dma_no_allocate=true
-intr_delay=10000000
-rx_delay=1000000
-tx_delay=1000000
-rx_fifo_size=524288
-tx_fifo_size=524288
-rx_filter=true
-hardware_address=00:90:00:00:00:02
-rx_thread=false
-tx_thread=false
-rss=false
-
-[testsys.tsunami.etherint]
-type=NSGigEInt
-peer=null
-device=testsys.tsunami.ethernet
-
-[drivesys.physmem]
-type=PhysicalMemory
-file=
-range=[0,134217727]
-latency=1
-zero=false
-
-[drivesys]
-type=LinuxAlphaSystem
-boot_cpu_frequency=1
-physmem=drivesys.physmem
-mem_mode=atomic
-kernel=/dist/m5/system/binaries/vmlinux
-console=/dist/m5/system/binaries/console
-pal=/dist/m5/system/binaries/ts_osfpal
-boot_osflags=root=/dev/hda1 console=ttyS0
-readfile=/y/binkertn/research/m5/rtc/configs/boot/netperf-server.rcS
-symbolfile=
-init_param=0
-system_type=34
-system_rev=1024
-
-[drivesys.cpu.itb]
-type=AlphaITB
-size=48
-
-[drivesys.cpu.dtb]
-type=AlphaDTB
-size=64
-
-[drivesys.cpu]
-type=AtomicSimpleCPU
-max_insts_any_thread=0
-max_insts_all_threads=0
-max_loads_any_thread=0
-max_loads_all_threads=0
-progress_interval=0
-system=drivesys
-cpu_id=0
-itb=drivesys.cpu.itb
-dtb=drivesys.cpu.dtb
-profile=0
-do_quiesce=true
-do_checkpoint_insts=true
-do_statistics_insts=true
-clock=1
-phase=0
-defer_registration=false
-width=1
-function_trace=false
-function_trace_start=0
-simulate_stalls=false
-
-[drivesys.intrctrl]
-type=IntrControl
-cpu=drivesys.cpu
-
-[drivesys.tsunami]
-type=Tsunami
-system=drivesys
-intrctrl=drivesys.intrctrl
-
-[drivesys.tsunami.ethernet.configdata]
-type=PciConfigData
-VendorID=4107
-DeviceID=34
-Command=0
-Status=656
-Revision=0
-ProgIF=0
-SubClassCode=0
-ClassCode=2
-CacheLineSize=0
-LatencyTimer=0
-HeaderType=0
-BIST=0
-BAR0=1
-BAR1=0
-BAR2=0
-BAR3=0
-BAR4=0
-BAR5=0
-CardbusCIS=0
-SubsystemVendorID=0
-SubsystemID=0
-ExpansionROM=0
-InterruptLine=30
-InterruptPin=1
-MinimumGrant=176
-MaximumLatency=52
-BAR0Size=256
-BAR1Size=4096
-BAR2Size=0
-BAR3Size=0
-BAR4Size=0
-BAR5Size=0
-
-[drivesys.tsunami.ethernet]
-type=NSGigE
-system=drivesys
-platform=drivesys.tsunami
-configdata=drivesys.tsunami.ethernet.configdata
-pci_bus=0
-pci_dev=1
-pci_func=0
-pio_latency=1000
-config_latency=20000
-clock=0
-dma_desc_free=false
-dma_data_free=false
-dma_read_delay=0
-dma_write_delay=0
-dma_read_factor=0
-dma_write_factor=0
-dma_no_allocate=true
-intr_delay=10000000
-rx_delay=1000000
-tx_delay=1000000
-rx_fifo_size=524288
-tx_fifo_size=524288
-rx_filter=true
-hardware_address=00:90:00:00:00:02
-rx_thread=false
-tx_thread=false
-rss=false
-
-[drivesys.tsunami.etherint]
-type=NSGigEInt
-peer=null
-device=drivesys.tsunami.ethernet
-
-[etherdump]
-type=EtherDump
-file=ethertrace
-maxlen=96
-
-[etherlink]
-type=EtherLink
-int1=testsys.tsunami.etherint
-int2=drivesys.tsunami.etherint
-speed=8000
-delay=0
-delay_var=0
-dump=etherdump
-
-[testsys.membus]
-type=Bus
-bus_id=1
-clock=1000
-width=64
-responder_set=false
-
 [testsys.membus.responder]
 type=IsaFake
 pio_addr=0
@@ -458,18 +213,45 @@ size=16777216
 platform=testsys.tsunami
 system=testsys
 
-[testsys.sim_console.listener]
-type=ConsoleListener
-port=3456
-
 [testsys.sim_console]
 type=SimConsole
-listener=testsys.sim_console.listener
 intr_control=testsys.intrctrl
 output=console
+port=3456
 append_name=true
 number=0
 
+[testsys.cpu.itb]
+type=AlphaITB
+size=48
+
+[testsys.cpu.dtb]
+type=AlphaDTB
+size=64
+
+[testsys.cpu]
+type=AtomicSimpleCPU
+max_insts_any_thread=0
+max_insts_all_threads=0
+max_loads_any_thread=0
+max_loads_all_threads=0
+progress_interval=0
+system=testsys
+cpu_id=0
+itb=testsys.cpu.itb
+dtb=testsys.cpu.dtb
+profile=0
+do_quiesce=true
+do_checkpoint_insts=true
+do_statistics_insts=true
+clock=1
+phase=0
+defer_registration=false
+width=1
+function_trace=false
+function_trace_start=0
+simulate_stalls=false
+
 [testsys.tsunami.console]
 type=AlphaConsole
 sim_console=testsys.sim_console
@@ -661,6 +443,75 @@ system=testsys
 platform=testsys.tsunami
 pio_latency=1000
 
+[testsys.tsunami.ethernet.configdata]
+type=PciConfigData
+VendorID=4107
+DeviceID=34
+Command=0
+Status=656
+Revision=0
+ProgIF=0
+SubClassCode=0
+ClassCode=2
+CacheLineSize=0
+LatencyTimer=0
+HeaderType=0
+BIST=0
+BAR0=1
+BAR1=0
+BAR2=0
+BAR3=0
+BAR4=0
+BAR5=0
+CardbusCIS=0
+SubsystemVendorID=0
+SubsystemID=0
+ExpansionROM=0
+InterruptLine=30
+InterruptPin=1
+MinimumGrant=176
+MaximumLatency=52
+BAR0Size=256
+BAR1Size=4096
+BAR2Size=0
+BAR3Size=0
+BAR4Size=0
+BAR5Size=0
+
+[testsys.tsunami.ethernet]
+type=NSGigE
+system=testsys
+platform=testsys.tsunami
+configdata=testsys.tsunami.ethernet.configdata
+pci_bus=0
+pci_dev=1
+pci_func=0
+pio_latency=1000
+config_latency=20000
+clock=0
+dma_desc_free=false
+dma_data_free=false
+dma_read_delay=0
+dma_write_delay=0
+dma_read_factor=0
+dma_write_factor=0
+dma_no_allocate=true
+intr_delay=10000000
+rx_delay=1000000
+tx_delay=1000000
+rx_fifo_size=524288
+tx_fifo_size=524288
+rx_filter=true
+hardware_address=00:90:00:00:00:02
+rx_thread=false
+tx_thread=false
+rss=false
+
+[testsys.tsunami.etherint]
+type=NSGigEInt
+peer=null
+device=testsys.tsunami.ethernet
+
 [testsys.tsunami.fake_OROM]
 type=IsaFake
 pio_addr=8796093677568
@@ -768,6 +619,120 @@ clock=1000
 width=64
 responder_set=true
 
+[drivesys.physmem]
+type=PhysicalMemory
+file=
+range=[0,134217727]
+latency=1
+zero=false
+
+[drivesys]
+type=LinuxAlphaSystem
+boot_cpu_frequency=1
+physmem=drivesys.physmem
+mem_mode=atomic
+kernel=/dist/m5/system/binaries/vmlinux
+console=/dist/m5/system/binaries/console
+pal=/dist/m5/system/binaries/ts_osfpal
+boot_osflags=root=/dev/hda1 console=ttyS0
+readfile=/z/saidi/work/m5.newmem/configs/boot/netperf-server.rcS
+symbolfile=
+init_param=0
+system_type=34
+system_rev=1024
+
+[drivesys.intrctrl]
+type=IntrControl
+sys=drivesys
+
+[drivesys.tsunami]
+type=Tsunami
+system=drivesys
+intrctrl=drivesys.intrctrl
+
+[drivesys.tsunami.ethernet.configdata]
+type=PciConfigData
+VendorID=4107
+DeviceID=34
+Command=0
+Status=656
+Revision=0
+ProgIF=0
+SubClassCode=0
+ClassCode=2
+CacheLineSize=0
+LatencyTimer=0
+HeaderType=0
+BIST=0
+BAR0=1
+BAR1=0
+BAR2=0
+BAR3=0
+BAR4=0
+BAR5=0
+CardbusCIS=0
+SubsystemVendorID=0
+SubsystemID=0
+ExpansionROM=0
+InterruptLine=30
+InterruptPin=1
+MinimumGrant=176
+MaximumLatency=52
+BAR0Size=256
+BAR1Size=4096
+BAR2Size=0
+BAR3Size=0
+BAR4Size=0
+BAR5Size=0
+
+[drivesys.tsunami.ethernet]
+type=NSGigE
+system=drivesys
+platform=drivesys.tsunami
+configdata=drivesys.tsunami.ethernet.configdata
+pci_bus=0
+pci_dev=1
+pci_func=0
+pio_latency=1000
+config_latency=20000
+clock=0
+dma_desc_free=false
+dma_data_free=false
+dma_read_delay=0
+dma_write_delay=0
+dma_read_factor=0
+dma_write_factor=0
+dma_no_allocate=true
+intr_delay=10000000
+rx_delay=1000000
+tx_delay=1000000
+rx_fifo_size=524288
+tx_fifo_size=524288
+rx_filter=true
+hardware_address=00:90:00:00:00:02
+rx_thread=false
+tx_thread=false
+rss=false
+
+[drivesys.tsunami.etherint]
+type=NSGigEInt
+peer=null
+device=drivesys.tsunami.ethernet
+
+[etherdump]
+type=EtherDump
+file=ethertrace
+maxlen=96
+
+[etherlink]
+type=EtherLink
+int1=testsys.tsunami.etherint
+int2=drivesys.tsunami.etherint
+speed=8000
+delay=0
+delay_var=0
+dump=etherdump
+
 [drivesys.membus]
 type=Bus
 bus_id=1
@@ -945,18 +910,45 @@ size=16777216
 platform=drivesys.tsunami
 system=drivesys
 
-[drivesys.sim_console.listener]
-type=ConsoleListener
-port=3456
-
 [drivesys.sim_console]
 type=SimConsole
-listener=drivesys.sim_console.listener
 intr_control=drivesys.intrctrl
 output=console
+port=3456
 append_name=true
 number=0
 
+[drivesys.cpu.itb]
+type=AlphaITB
+size=48
+
+[drivesys.cpu.dtb]
+type=AlphaDTB
+size=64
+
+[drivesys.cpu]
+type=AtomicSimpleCPU
+max_insts_any_thread=0
+max_insts_all_threads=0
+max_loads_any_thread=0
+max_loads_all_threads=0
+progress_interval=0
+system=drivesys
+cpu_id=0
+itb=drivesys.cpu.itb
+dtb=drivesys.cpu.dtb
+profile=0
+do_quiesce=true
+do_checkpoint_insts=true
+do_statistics_insts=true
+clock=1
+phase=0
+defer_registration=false
+width=1
+function_trace=false
+function_trace_start=0
+simulate_stalls=false
+
 [drivesys.tsunami.console]
 type=AlphaConsole
 sim_console=drivesys.sim_console
@@ -1255,51 +1247,3 @@ clock=1000
 width=64
 responder_set=true
 
-[trace]
-flags=
-start=0
-cycle=0
-bufsize=0
-file=cout
-dump_on_exit=false
-ignore=
-
-[stats]
-descriptions=true
-project_name=test
-simulation_name=test
-simulation_sample=0
-text_file=m5stats.txt
-text_compat=true
-mysql_db=
-mysql_user=
-mysql_password=
-mysql_host=
-events_start=-1
-dump_reset=false
-dump_cycle=0
-dump_period=0
-ignore_events=
-
-[random]
-seed=1
-
-[exetrace]
-speculative=true
-print_cycle=true
-print_opclass=true
-print_thread=true
-print_effaddr=true
-print_data=true
-print_iregs=false
-print_fetchseq=false
-print_cpseq=false
-print_reg_delta=false
-pc_symbol=true
-intel_format=false
-legion_lockstep=false
-trace_system=client
-
-[statsreset]
-reset_cycle=0
-