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