annotate doc/Loadtools-performance @ 672:57cb825b505a

fc-loadtool code: flprogbin.c refactoring in prep for e-program-bin
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 08 Mar 2020 04:09:08 +0000
parents e66fafeeb377
children f2a023c20653
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
671
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
1 Memory dump performance
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
2 =======================
630
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
3
611
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 Here are the expected run times for the flash dump2bin operation of dumping the
671
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
5 entire flash content of a Calypso GSM device with the current version of
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
6 fc-loadtool which uses the new binary transfer protocol:
611
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 Dump of 4 MiB flash (e.g., Openmoko GTA01/02 or Mot C139/140) at 115200 baud:
671
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
9 6m4s
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
10
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
11 The same 4 MiB flash dump at 812500 baud: 0m52s
611
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12
671
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
13 Dump of 8 MiB flash (e.g., Mot C155/156) at 812500 baud: 1m44s
611
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14
671
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
15 These times are a 2x improvement compared to all previous versions of
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
16 fc-loadtool (prior to fc-host-tools-r13) which used a hex-based transfer
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
17 protocol.
611
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 Because of the architecture of fc-loadtool and its loadagent back-end, the run
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 time of a flash dump operation depends only on the serial baud rate and the
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 size of the flash area to be dumped; it should not depend on the USB-serial
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 adapter type or any host system properties, as long as the host system and
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 serial adapter combination supports the desired baud rate. In contrast, flash
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 programming and fc-xram loading operations are quite different in that their
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 run times do depend on the host system and USB-serial adapter or other serial
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 port hardware - this host system dependency exists because of the way these
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 operations are implemented in our architecture.
c847d742ab38 doc/Loadtools-performance: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28
671
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
29 Flash programming operations
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
30 ============================
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
31
615
39b74c39d914 doc/Loadtools-performance: complete for now
Mychaela Falconia <falcon@freecalypso.org>
parents: 613
diff changeset
32 Here are some examples of expected flash programming times, all obtained on the
630
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
33 Mother's Slackware 14.2 host system:
615
39b74c39d914 doc/Loadtools-performance: complete for now
Mychaela Falconia <falcon@freecalypso.org>
parents: 613
diff changeset
34
39b74c39d914 doc/Loadtools-performance: complete for now
Mychaela Falconia <falcon@freecalypso.org>
parents: 613
diff changeset
35 Flashing an Openmoko GTA02 modem (K5A3281CTM flash chip) with a new firmware
671
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
36 image (2376448 bytes), using a PL2303 USB-serial cable at 115200 baud: 0m19s to
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
37 erase 37 sectors, 3m45s to program the image.
615
39b74c39d914 doc/Loadtools-performance: complete for now
Mychaela Falconia <falcon@freecalypso.org>
parents: 613
diff changeset
38
39b74c39d914 doc/Loadtools-performance: complete for now
Mychaela Falconia <falcon@freecalypso.org>
parents: 613
diff changeset
39 Flashing the same OM GTA02 modem with the same fw image, using a CP2102
671
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
40 USB-serial cable at 812500 baud: 0m19s to erase, 0m51s to program.
615
39b74c39d914 doc/Loadtools-performance: complete for now
Mychaela Falconia <falcon@freecalypso.org>
parents: 613
diff changeset
41
39b74c39d914 doc/Loadtools-performance: complete for now
Mychaela Falconia <falcon@freecalypso.org>
parents: 613
diff changeset
42 Flashing a Magnetite hybrid fw image (2378084 bytes) into an FCDEV3B board
671
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
43 (S71PL129N flash chip) via an FT2232D adapter at 812500 baud: 0m24s to erase
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
44 13 sectors (4 small and 9 large), 1m27s to program the image.
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
45
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
46 Regardless of whether you execute these two steps separately or use one of our
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
47 new flash e-program-{bin,m0,srec} commands, flash programming is always done in
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
48 two steps: first the erase operation covering the needed range of sectors, then
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
49 the actual programming operation that includes the data transfer.
615
39b74c39d914 doc/Loadtools-performance: complete for now
Mychaela Falconia <falcon@freecalypso.org>
parents: 613
diff changeset
50
671
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
51 Flash erase times are determined entirely by physical processes inside the
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
52 flash chip and thus should not be affected by software design or the serial
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
53 link: for each sector to be erased, fc-loadtool issues the sector erase command
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
54 to the flash chip and then polls the chip for operation completion status; the
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
55 polling is done over the serial link and thus may seem very slow, but the extra
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
56 bit of latency added by the finite polling speed is still negligible (at least
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
57 on the Mother's Slackware system) compared to the time of the actual sector
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
58 erase operation inside the flash chip. One remaining flaw is that in our
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
59 current implementation the issuance of each individual sector erase command to
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
60 the flash chip takes 6 command-response exchanges between fc-loadtool and
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
61 loadagent; on my Slackware host system this extra overhead is still negligible
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
62 compared to the 0.5s or more for the actual erase operation time, but this
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
63 overhead may become more significant on host systems with higher latency.
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
64
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
65 After the erase operation, the execution time of the main flash programming
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
66 operation is a sum of 3 components:
613
ab4021fb1c66 doc/Loadtools-performance: flash programming added
Mychaela Falconia <falcon@freecalypso.org>
parents: 611
diff changeset
67
ab4021fb1c66 doc/Loadtools-performance: flash programming added
Mychaela Falconia <falcon@freecalypso.org>
parents: 611
diff changeset
68 * The time it takes for the bits to be transferred over the serial link;
ab4021fb1c66 doc/Loadtools-performance: flash programming added
Mychaela Falconia <falcon@freecalypso.org>
parents: 611
diff changeset
69 * The time it takes for the flash programming operation to complete on the
ab4021fb1c66 doc/Loadtools-performance: flash programming added
Mychaela Falconia <falcon@freecalypso.org>
parents: 611
diff changeset
70 target (physics inside the flash chip);
ab4021fb1c66 doc/Loadtools-performance: flash programming added
Mychaela Falconia <falcon@freecalypso.org>
parents: 611
diff changeset
71 * The overhead of command-response exchanges between fc-loadtool and loadagent.
ab4021fb1c66 doc/Loadtools-performance: flash programming added
Mychaela Falconia <falcon@freecalypso.org>
parents: 611
diff changeset
72
671
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
73 Because image data transfer is taking place in this step, flash programming at
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
74 812500 baud is faster than 115200 baud, although it is not the same 7x
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
75 improvement as happens with flash dumps. The present version of fc-loadtool
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
76 also uses a new binary transfer protocol instead of the hex-based one used in
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
77 previous versions (prior to fc-host-tools-r13); this change produces a 2x
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
78 improvement for OM GTA02 flashing, but only a smaller improvement for FCDEV3B
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
79 flashing.
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
80
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
81 Notice the difference in flash programming times between GTA02 and FCDEV3B: the
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
82 fw image size is almost exactly the same, any difference in latency between
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
83 CP2102 and FT2232D is less likely to produce such significant time difference
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
84 given our current 2048 byte transfer block size, thus the difference in physical
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
85 flash program operation times between K5A3281CTM and S71PL129N flash chips seems
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
86 to be the most likely explanation.
e66fafeeb377 doc/Loadtools-performance: new faster flash operations
Mychaela Falconia <falcon@freecalypso.org>
parents: 630
diff changeset
87
630
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
88 Programming flash using program-m0 or program-srec
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
89 ==================================================
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
90
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
91 Prior to fc-host-tools-r12 flash programming via flash program-m0 or
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
92 program-srec commands was much slower than flash program-bin. The reason for
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
93 this performance discrepancy was that the original implementation of these
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
94 commands from 2013 was very straightforward: they operated in one pass, reading
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
95 the S-record image file, and as each individual S-record was read, it was turned
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
96 into an AMFW or INFW command to loadagent. In the case of *.m0 files generated
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
97 by TI's hex470 post-linker, each S-record carries 30 bytes of payload, thus the
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
98 flashing operation proceeded in 30-byte units, incurring the overhead of a
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
99 command-response exchange for every 30 bytes. In contrast, our current flash
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
100 program-bin implementation sends 256 bytes of payload per each AMFW or INFW
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
101 command; this larger unit size decreases the overhead of command-response
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
102 exchanges between fc-loadtool and loadagent.
618
6824c4d55848 doc/Loadtools-performance: program-m0 slowness documented
Mychaela Falconia <falcon@freecalypso.org>
parents: 615
diff changeset
103
630
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
104 Why do we need flash program-m0 and program-srec commands at all, why not
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
105 simply convert all SREC images to straight binary first and then program with
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
106 flash program-bin? The reason is that S-record images can contain multiple
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
107 discontiguous program regions with gaps in between. All of our current
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
108 FreeCalypso firmwares built with TI's TMS470 toolchain contain a few small gaps
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
109 in the fwimage.m0 file, filled with 0xFF bytes when converted to straight binary
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
110 with mokosrec2bin, but TI's own firmwares built for 8 MiB flash configurations
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
111 often had much bigger gaps in them.
618
6824c4d55848 doc/Loadtools-performance: program-m0 slowness documented
Mychaela Falconia <falcon@freecalypso.org>
parents: 615
diff changeset
112
630
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
113 As of fc-host-tools-r12 we finally have a more efficient solution for flashing
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
114 discontiguous SREC images: our new implementation of flash program-m0 and
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
115 program-srec commands begins with a preliminary pass (pure host operation, no
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
116 target interaction) of reading the S-record image file; the payload bits are
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
117 written into a temporary binary file (automatically deleted afterward), while
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
118 the address and length of each discontiguous region are remembered internally.
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
119 Then the actual flash programming operation proceeds just like program-bin,
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
120 reading from the internal binary file and sending 256 bytes of payload at a time
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
121 to loadagent, but using the remembered knowledge of where the discontiguous
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
122 regions lie.
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
123
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
124 XRAM loading via fc-xram
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
125 ========================
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
126
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
127 Our current fc-xram implementation is similar to the old 2013 implementation of
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
128 flash program-m0 and program-srec commands in that fc-xram sends a separate ML
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
129 command to loadagent for each S-record, thus the total XRAM image loading time
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
130 is not only the serial bit transfer time, but also the overhead of command-
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
131 response exchanges between fc-xram and loadagent. The flash programming times
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
132 listed above include flashing an FC Magnetite fw image into an FCDEV3B, which
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
133 took 2m11s; doing an fc-xram load of the same FC Magnetite fw image (built as
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
134 ramimage.srec) into the same FCDEV3B via the same FT2232D adapter at 812500
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
135 baud takes 2m54s.
615
39b74c39d914 doc/Loadtools-performance: complete for now
Mychaela Falconia <falcon@freecalypso.org>
parents: 613
diff changeset
136
39b74c39d914 doc/Loadtools-performance: complete for now
Mychaela Falconia <falcon@freecalypso.org>
parents: 613
diff changeset
137 Why does XRAM loading take longer than flashing? Shouldn't it be faster because
39b74c39d914 doc/Loadtools-performance: complete for now
Mychaela Falconia <falcon@freecalypso.org>
parents: 613
diff changeset
138 the flash programming step on the target is replaced with a simple memcpy()?
630
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
139 Answer: fc-xram is currently slower than flash program operations because the
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
140 latter send 256 bytes at a time to loadagent, whereas fc-xram sends one
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
141 S-record at a time; the division of the image into S-records is determined by
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
142 the tool that generates the SREC image, but TI's hex470 post-linker generates
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
143 images with 30 bytes of payload per S-record. Having the operation proceed in
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
144 smaller chunks increases the overhead of command-response exchanges and thus
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
145 increases the overall time.
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
146
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
147 Additional complication with FTDI adapters and newer Linux kernel versions
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
148 ==========================================================================
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
149
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
150 If you are using an FTDI adapter and a Linux kernel version newer than early
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
151 2017 (the change was introduced between 4.10 and 4.11), then you have one
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
152 additional complication: a change was made to the ftdi_sio driver in the Linux
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
153 kernel that makes many loadtools operations (basically everything other than
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
154 flash dumps which are entirely target-driven) unbearably slow (much slower than
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
155 the Slackware 14.2 reference times given above) unless you execute a special
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
156 setserial command first. After you plug in your FTDI-based USB-serial cable or
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
157 connect the USB cable between your PC or laptop and your FTDI adapter board,
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
158 causing the corresponding ttyUSBx device to appear, execute the following
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
159 command:
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
160
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
161 setserial /dev/ttyUSBx low_latency
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
162
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
163 (Obviously change ttyUSBx to your actual ttyUSB number.) Execute this
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
164 setserial command before running fc-loadtool or fc-xram, and then hopefully you
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
165 should get performance that is comparable to what I get on classic Slackware.
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
166 I say "hopefully" because I am not able to test it myself - I refuse to run any
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
167 OS that can be categorized as "modern" - but field reports of performance on
8c6e7b7e701c doc/Loadtools-performance: updates for new program-m0 and setserial
Mychaela Falconia <falcon@freecalypso.org>
parents: 618
diff changeset
168 non-Slackware systems running newer Linux kernels (4.11 or later) are welcome.