fs.py revision 2948
113996Sgiacomo.travaglini@arm.comimport optparse, os, sys
213996Sgiacomo.travaglini@arm.com
313996Sgiacomo.travaglini@arm.comimport m5
413996Sgiacomo.travaglini@arm.comfrom m5.objects import *
513996Sgiacomo.travaglini@arm.comfrom SysPaths import *
613996Sgiacomo.travaglini@arm.comfrom FullO3Config import *
713996Sgiacomo.travaglini@arm.com
813996Sgiacomo.travaglini@arm.comparser = optparse.OptionParser()
913996Sgiacomo.travaglini@arm.com
1013996Sgiacomo.travaglini@arm.comparser.add_option("-d", "--detailed", action="store_true")
1113996Sgiacomo.travaglini@arm.comparser.add_option("-t", "--timing", action="store_true")
1213996Sgiacomo.travaglini@arm.comparser.add_option("-m", "--maxtick", type="int")
1313996Sgiacomo.travaglini@arm.comparser.add_option("--maxtime", type="float")
1413996Sgiacomo.travaglini@arm.comparser.add_option("--dual", help="Run full system using dual systems",
1513996Sgiacomo.travaglini@arm.com                  action="store_true")
1613996Sgiacomo.travaglini@arm.com
1713996Sgiacomo.travaglini@arm.com(options, args) = parser.parse_args()
1813996Sgiacomo.travaglini@arm.com
1913996Sgiacomo.travaglini@arm.comif args:
2013996Sgiacomo.travaglini@arm.com    print "Error: script doesn't take any positional arguments"
2113996Sgiacomo.travaglini@arm.com    sys.exit(1)
2213996Sgiacomo.travaglini@arm.com
2313996Sgiacomo.travaglini@arm.com# Base for tests is directory containing this file.
2413996Sgiacomo.travaglini@arm.comtest_base = os.path.dirname(__file__)
2513996Sgiacomo.travaglini@arm.com
2613996Sgiacomo.travaglini@arm.comscript.dir =  '/z/saidi/work/m5.newmem/configs/boot'
2713996Sgiacomo.travaglini@arm.com
2813996Sgiacomo.travaglini@arm.comlinux_image = env.get('LINUX_IMAGE', disk('linux-latest.img'))
2913996Sgiacomo.travaglini@arm.com
3013996Sgiacomo.travaglini@arm.comclass CowIdeDisk(IdeDisk):
3113996Sgiacomo.travaglini@arm.com    image = CowDiskImage(child=RawDiskImage(read_only=True),
3213996Sgiacomo.travaglini@arm.com                         read_only=False)
3313996Sgiacomo.travaglini@arm.com
3413996Sgiacomo.travaglini@arm.com    def childImage(self, ci):
3513996Sgiacomo.travaglini@arm.com        self.image.child.image_file = ci
3613996Sgiacomo.travaglini@arm.com
3713996Sgiacomo.travaglini@arm.comclass BaseTsunami(Tsunami):
3813996Sgiacomo.travaglini@arm.com    ethernet = NSGigE(configdata=NSGigEPciData(),
3913996Sgiacomo.travaglini@arm.com                      pci_bus=0, pci_dev=1, pci_func=0)
4013996Sgiacomo.travaglini@arm.com    etherint = NSGigEInt(device=Parent.ethernet)
4113996Sgiacomo.travaglini@arm.com    ide = IdeController(disks=[Parent.disk0, Parent.disk2],
4213996Sgiacomo.travaglini@arm.com                        pci_func=0, pci_dev=0, pci_bus=0)
4313996Sgiacomo.travaglini@arm.com
4413996Sgiacomo.travaglini@arm.comclass MyLinuxAlphaSystem(LinuxAlphaSystem):
4513996Sgiacomo.travaglini@arm.com    iobus = Bus(bus_id=0)
4613996Sgiacomo.travaglini@arm.com    membus = Bus(bus_id=1)
4713996Sgiacomo.travaglini@arm.com    bridge = Bridge()
4813996Sgiacomo.travaglini@arm.com    physmem = PhysicalMemory(range = AddrRange('128MB'))
4913996Sgiacomo.travaglini@arm.com    bridge.side_a = iobus.port
5013996Sgiacomo.travaglini@arm.com    bridge.side_b = membus.port
5113996Sgiacomo.travaglini@arm.com    physmem.port = membus.port
5213996Sgiacomo.travaglini@arm.com    disk0 = CowIdeDisk(driveID='master')
5313996Sgiacomo.travaglini@arm.com    disk2 = CowIdeDisk(driveID='master')
5413996Sgiacomo.travaglini@arm.com    disk0.childImage(linux_image)
5514181Sgiacomo.travaglini@arm.com    disk2.childImage(disk('linux-bigswap2.img'))
5614181Sgiacomo.travaglini@arm.com    tsunami = BaseTsunami()
5713996Sgiacomo.travaglini@arm.com    tsunami.attachIO(iobus)
5813996Sgiacomo.travaglini@arm.com    tsunami.ide.pio = iobus.port
5913996Sgiacomo.travaglini@arm.com    tsunami.ide.dma = iobus.port
6013996Sgiacomo.travaglini@arm.com    tsunami.ide.config = iobus.port
6113996Sgiacomo.travaglini@arm.com    tsunami.ethernet.pio = iobus.port
6213996Sgiacomo.travaglini@arm.com    tsunami.ethernet.dma = iobus.port
6313996Sgiacomo.travaglini@arm.com    tsunami.ethernet.config = iobus.port
6413996Sgiacomo.travaglini@arm.com    simple_disk = SimpleDisk(disk=RawDiskImage(image_file = linux_image,
6513996Sgiacomo.travaglini@arm.com                                               read_only = True))
6613996Sgiacomo.travaglini@arm.com    intrctrl = IntrControl()
6713996Sgiacomo.travaglini@arm.com    if options.detailed:
6813996Sgiacomo.travaglini@arm.com        cpu = DetailedO3CPU()
6913996Sgiacomo.travaglini@arm.com    elif options.timing:
7013996Sgiacomo.travaglini@arm.com        cpu = TimingSimpleCPU()
7113996Sgiacomo.travaglini@arm.com        mem_mode = 'timing'
7213996Sgiacomo.travaglini@arm.com    else:
7313996Sgiacomo.travaglini@arm.com        cpu = AtomicSimpleCPU()
7413996Sgiacomo.travaglini@arm.com    cpu.mem = membus
7513996Sgiacomo.travaglini@arm.com    cpu.icache_port = membus.port
7613996Sgiacomo.travaglini@arm.com    cpu.dcache_port = membus.port
7713996Sgiacomo.travaglini@arm.com    cpu.itb = AlphaITB()
7813996Sgiacomo.travaglini@arm.com    cpu.dtb = AlphaDTB()
7913996Sgiacomo.travaglini@arm.com    cpu.clock = '2GHz'
8013996Sgiacomo.travaglini@arm.com    sim_console = SimConsole(listener=ConsoleListener(port=3456))
8113996Sgiacomo.travaglini@arm.com    kernel = binary('vmlinux')
8213996Sgiacomo.travaglini@arm.com    pal = binary('ts_osfpal')
8313996Sgiacomo.travaglini@arm.com    console = binary('console')
8413996Sgiacomo.travaglini@arm.com    boot_osflags = 'root=/dev/hda1 console=ttyS0'
8513996Sgiacomo.travaglini@arm.com
8613996Sgiacomo.travaglini@arm.comclass TsunamiRoot(Root):
8713996Sgiacomo.travaglini@arm.com    pass
8813996Sgiacomo.travaglini@arm.com
8913996Sgiacomo.travaglini@arm.comdef DualRoot(clientSystem, serverSystem):
9013996Sgiacomo.travaglini@arm.com    self = Root()
9113996Sgiacomo.travaglini@arm.com    self.client = clientSystem
9213996Sgiacomo.travaglini@arm.com    self.server = serverSystem
9313996Sgiacomo.travaglini@arm.com
9413996Sgiacomo.travaglini@arm.com    self.etherdump = EtherDump(file='ethertrace')
9513996Sgiacomo.travaglini@arm.com    self.etherlink = EtherLink(int1 = Parent.client.tsunami.etherint[0],
9613996Sgiacomo.travaglini@arm.com                               int2 = Parent.server.tsunami.etherint[0],
9713996Sgiacomo.travaglini@arm.com                               dump = Parent.etherdump)
9813996Sgiacomo.travaglini@arm.com    self.clock = '1THz'
9913996Sgiacomo.travaglini@arm.com    return self
10013996Sgiacomo.travaglini@arm.com
10113996Sgiacomo.travaglini@arm.comif options.dual:
10213996Sgiacomo.travaglini@arm.com    root = DualRoot(
10313996Sgiacomo.travaglini@arm.com        MyLinuxAlphaSystem(readfile=script('netperf-stream-nt-client.rcS')),
10413996Sgiacomo.travaglini@arm.com        MyLinuxAlphaSystem(readfile=script('netperf-server.rcS')))
10513996Sgiacomo.travaglini@arm.comelse:
10613996Sgiacomo.travaglini@arm.com    root = TsunamiRoot(clock = '1THz', system = MyLinuxAlphaSystem())
10713996Sgiacomo.travaglini@arm.com
10813996Sgiacomo.travaglini@arm.comm5.instantiate(root)
10913996Sgiacomo.travaglini@arm.com
11013996Sgiacomo.travaglini@arm.com#exit_event = m5.simulate(2600000000000)
11113996Sgiacomo.travaglini@arm.com#if exit_event.getCause() != "user interrupt received":
11213996Sgiacomo.travaglini@arm.com#    m5.checkpoint(root, 'cpt')
11313996Sgiacomo.travaglini@arm.com#    exit_event = m5.simulate(300000000000)
11413996Sgiacomo.travaglini@arm.com#    if exit_event.getCause() != "user interrupt received":
11513996Sgiacomo.travaglini@arm.com#        m5.checkpoint(root, 'cptA')
11613996Sgiacomo.travaglini@arm.com
11713996Sgiacomo.travaglini@arm.com
11813996Sgiacomo.travaglini@arm.comif options.maxtick:
11913996Sgiacomo.travaglini@arm.com    exit_event = m5.simulate(options.maxtick)
12013996Sgiacomo.travaglini@arm.comelif options.maxtime:
12113996Sgiacomo.travaglini@arm.com    simtime = int(options.maxtime * root.clock.value)
12213996Sgiacomo.travaglini@arm.com    print "simulating for: ", simtime
12313996Sgiacomo.travaglini@arm.com    exit_event = m5.simulate(simtime)
12413996Sgiacomo.travaglini@arm.comelse:
12513996Sgiacomo.travaglini@arm.com    exit_event = m5.simulate()
12613996Sgiacomo.travaglini@arm.com
12713996Sgiacomo.travaglini@arm.comprint 'Exiting @ cycle', m5.curTick(), 'because', exit_event.getCause()
12813996Sgiacomo.travaglini@arm.com