summaryrefslogtreecommitdiff
path: root/configs/test/fs.py
blob: f4c50fc2348e5cbe1553dad3518936e7b22dfeae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import optparse, os, sys

import m5
from m5.objects import *
from SysPaths import *
from FullO3Config import *

parser = optparse.OptionParser()

parser.add_option("-d", "--detailed", action="store_true")
parser.add_option("-t", "--timing", action="store_true")
parser.add_option("-m", "--maxtick", type="int")
parser.add_option("--dual", help="Run full system using dual systems",
                  action="store_true")

(options, args) = parser.parse_args()

if args:
    print "Error: script doesn't take any positional arguments"
    sys.exit(1)

# Base for tests is directory containing this file.
test_base = os.path.dirname(__file__)

script.dir =  '/z/saidi/work/m5.newmem/configs/boot'

linux_image = env.get('LINUX_IMAGE', disk('linux-latest.img'))

class CowIdeDisk(IdeDisk):
    image = CowDiskImage(child=RawDiskImage(read_only=True),
                         read_only=False)

    def childImage(self, ci):
        self.image.child.image_file = ci

class BaseTsunami(Tsunami):
    ethernet = NSGigE(configdata=NSGigEPciData(),
                      pci_bus=0, pci_dev=1, pci_func=0)
    etherint = NSGigEInt(device=Parent.ethernet)
    ide = IdeController(disks=[Parent.disk0, Parent.disk2],
                        pci_func=0, pci_dev=0, pci_bus=0)

class MyLinuxAlphaSystem(LinuxAlphaSystem):
    iobus = Bus(bus_id=0)
    membus = Bus(bus_id=1)
    bridge = Bridge()
    physmem = PhysicalMemory(range = AddrRange('128MB'))
    bridge.side_a = iobus.port
    bridge.side_b = membus.port
    physmem.port = membus.port
    disk0 = CowIdeDisk(driveID='master')
    disk2 = CowIdeDisk(driveID='master')
    disk0.childImage(linux_image)
    disk2.childImage(disk('linux-bigswap2.img'))
    tsunami = BaseTsunami()
    tsunami.attachIO(iobus)
    tsunami.ide.pio = iobus.port
    tsunami.ide.dma = iobus.port
    tsunami.ide.config = iobus.port
    tsunami.ethernet.pio = iobus.port
    tsunami.ethernet.dma = iobus.port
    tsunami.ethernet.config = iobus.port
    simple_disk = SimpleDisk(disk=RawDiskImage(image_file = linux_image,
                                               read_only = True))
    intrctrl = IntrControl()
    if options.detailed:
        cpu = DetailedO3CPU()
    elif options.timing:
        cpu = TimingSimpleCPU()
        mem_mode = 'timing'
    else:
        cpu = AtomicSimpleCPU()
    cpu.mem = membus
    cpu.icache_port = membus.port
    cpu.dcache_port = membus.port
    cpu.itb = AlphaITB()
    cpu.dtb = AlphaDTB()
    cpu.clock = '2GHz'
    sim_console = SimConsole(listener=ConsoleListener(port=3456))
    kernel = binary('vmlinux')
    pal = binary('ts_osfpal')
    console = binary('console')
    boot_osflags = 'root=/dev/hda1 console=ttyS0'

class TsunamiRoot(Root):
    pass

def DualRoot(clientSystem, serverSystem):
    self = Root()
    self.client = clientSystem
    self.server = serverSystem

    self.etherdump = EtherDump(file='ethertrace')
    self.etherlink = EtherLink(int1 = Parent.client.tsunami.etherint[0],
                               int2 = Parent.server.tsunami.etherint[0],
                               dump = Parent.etherdump)
    self.clock = '1THz'
    return self

if options.dual:
    root = DualRoot(
        MyLinuxAlphaSystem(readfile=script('netperf-stream-nt-client.rcS')),
        MyLinuxAlphaSystem(readfile=script('netperf-server.rcS')))
else:
    root = TsunamiRoot(clock = '2GHz', system = MyLinuxAlphaSystem())

m5.instantiate(root)

#exit_event = m5.simulate(2600000000000)
#if exit_event.getCause() != "user interrupt received":
#    m5.checkpoint(root, 'cpt')
#    exit_event = m5.simulate(300000000000)
#    if exit_event.getCause() != "user interrupt received":
#        m5.checkpoint(root, 'cptA')


if options.maxtick:
    exit_event = m5.simulate(options.maxtick)
else:
    exit_event = m5.simulate()

print 'Exiting @ cycle', m5.curTick(), 'because', exit_event.getCause()