summaryrefslogtreecommitdiff
path: root/bootwrapper/big-little-mp4.mxscript
blob: 35168570adbe247d5ee7df6542a58b7b72a1ec45 (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
// Replace the string with the absolute path of the Kingfisher model executable
// e.g. string model = "/home/working_dir/RTSM_VE_Cortex-A15x4-A7x4"
string model = "<path to the model>";

// Replace the string with the absolute path of the Virutalizer+Payload software image
// e.g. string app = "/home/working_dir/bootwrapper/img.axf"
string app   = "<path to the software image>";

// Replace the string with the absolute path of the wboot.bin image created in the 
// bootwrapper/big-little directory. This image is load in flash at 0x0 and distinguishes
// between a warm and a cold reset
string wboot = "<path to warm reset handler image>";

int ctr = 0;

// NOTE
//
// Uncomment the next 4 'string' variables and update them _only_ if the run is required
// to generate trace output as described in docs/04-Cache-hit-rate-howto.txt. Also, 
// comment out the system() invocation on line 47 and uncomment the system() command on line 34.
// Each 'trace' parameter is described below.

// Add the path to the trace plugin
// string trace_plugin = " --trace-plugin <path to>/GenericTrace.so";

// Parameters for selecting the trace sources to monitor outbound cache hits
// string trace_sources = " --parameter TRACE.GenericTrace.trace-sources=\*sw_trace_event\*,\*read_for_3_came_from_snoop\*,\*read_for_4_came_from_snoop\* ";

// Add the path to the trace file where all the output will be collected
// string trace_file = " --parameter TRACE.GenericTrace.trace-file=<path to trace file> ";

// Miscellaneous parameters. The frequency at which the performance metrics of the
// model appear in the trace source can be changed here (default is 0x100).
// string trace_misc = " -C TRACE.GenericTrace.perf-period=0x100 -C TRACE.GenericTrace.flush=1 ";

// The commented 'system' command below will launch the model and register the trace
// sources selected in 'trace_sources' with the Generic Trace plugin selected using
// 'trace_plugin'. Other parameters are specified in 'trace_file' & 'trace_misc'.
// system(model + trace_plugin + trace_sources + trace_file + trace_misc + " -C coretile.cache_state_modelled=1" + " -a coretile.cluster0.\*=" + app + " -a coretile.cluster1.\*=" + app + " --verbose -S &");

string networking = " -C motherboard.hostbridge.userNetworking=1 -C motherboard.hostbridge.userNetPorts=\"8080=8080\" -C motherboard.smsc_91c111.enabled=1";
string console = " -C motherboard.pl011_uart0.untimed_fifos=1 -C motherboard.pl011_uart1.untimed_fifos=1 -C motherboard.pl011_uart2.untimed_fifos=1 -C motherboard.pl011_uart3.untimed_fifos=1";

// NOTE
// 
// _Only_ if a run is needed using an optional rootfs MMC image built using the instructions in
// docs/06-Optional-rootfs-build.txt, then comment out the system() invocation 
// below (on line 47) and uncomment the following lines taking care to update 
// the paths accordingly.
// string mmcimage  = "<path to mmc.img>";
// system(model + " -C motherboard.mmc.p_mmc_file=" + mmcimage + trace_plugin + trace_sources + trace_file + trace_misc + " -C coretile.cache_state_modelled=1" + " -a coretile.cluster0.\*=" + app + " -a coretile.cluster1.\*=" + app + " --verbose -S &");

// Invoke the model. It then listens for connection requests from the model debugger
// Vanilla invocation of the model.
system(model + " -C motherboard.flashloader0.fname=" + wboot + " -C coretile.cache_state_modelled=1" + " -a coretile.cluster0.\*=" + app + " -a coretile.cluster1.\*=" + app + networking + console +" --verbose -S &");

// Wait for the model to load before connecting to it. There will be times when we
// try connecting before the model has loded resulting in a "Connection refused"
// error. Increasing 'ctr' or retrying should solve the problem.
while(ctr < 400000000) 
{
	ctr++;
}

// Model listens at port 7000
connectToModel("7000");

// The following lines can be uncommented to set any breakpoints on each cluster
selectTarget("coretile.cluster0.cpu0");
//bpAdd(<address>, "Normal");
//bpAdd(<address>, "Secure");
selectTarget("coretile.cluster0.cpu1");
//bpAdd(<address>, "Normal");
//bpAdd(<address>, "Secure");
selectTarget("coretile.cluster0.cpu2");
//bpAdd(<address>, "Normal");
//bpAdd(<address>, "Secure");
selectTarget("coretile.cluster0.cpu3");
//bpAdd(<address>, "Normal");
//bpAdd(<address>, "Secure");
selectTarget("coretile.cluster1.cpu0");
//bpAdd(<address>, "Normal");
//bpAdd(<address>, "Secure");
selectTarget("coretile.cluster1.cpu1");
//bpAdd(<address>, "Normal");
//bpAdd(<address>, "Secure");
selectTarget("coretile.cluster1.cpu2");
//bpAdd(<address>, "Normal");
//bpAdd(<address>, "Secure");
selectTarget("coretile.cluster1.cpu3");
//bpAdd(<address>, "Normal");
//bpAdd(<address>, "Secure");

// Select the primary cpu on the primary cluster and set the ball rolling
selectTarget("coretile.cluster0.cpu0");
run();