FreeCalypso > hg > freecalypso-docs
annotate TCS211-fw-arch @ 23:14391ad53281
FCDEV3B-repackaging article removed for legal reasons
The idea expressed in that article, namely the idea that some party other than
Mother Mychaela could be permitted to create a derived work based on FCDEV3B
board design and have it be accepted into the FreeCalypso family, is no longer
allowed by our current stance on the matters of intellectual property,
particularly Falconia IP.
For technical content, the new FC-modem-family and Quadband-ideas articles
should fully supplant this old FCDEV3B-repackaging article.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 23 Oct 2019 00:43:21 +0000 |
parents | f5ddeacbe744 |
children |
rev | line source |
---|---|
0
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 This document describes the architecture of TI's TCS211 firmware and that of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 our FreeCalypso Magnetite and Selenite firmwares which are based on it. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 What is TCS211, and why we use it as our reference |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 ================================================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 TI were in the business of making GSM baseband chipsets for about a decade |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 from the late 1990s up until 2009, and over that time span both their silicon |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 and their firmware architecture had evolved in many different ways. All of our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 work in the FreeCalypso family of projects is based on one fairly arbitrary |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 snapshot, a rather arbitrarily picked single point in that long evolutionary |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 line: we use the Calypso chipset as opposed to both the ones before and the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 ones after, and we use TI's TCS211 firmware from 2007 as our golden reference, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 as opposed to other equally valid ways of architecturing the fw that came |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 before and after our arbitrarily picked snapshot. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 Q: Why do we use the Calypso chipset as opposed to LoCosto or E-Costo or |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 whatever was TI's very last offering before they got out of that business? |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 A: Because that's what Openmoko used: their Neo FreeRunner aka GTA02 smartphones |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 were our primary hardware target for many years before we gathered the money |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 and the courage to build our own board-level hardware starting from just chips |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 bought on the Chinese surplus market. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 Q: Why do we use TI's TCS211 firmware from 2007 and its architecture as our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 golden reference, as opposed to any of the other infinitely many equally valid |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 ways of architecturing a working firmware implementation for the same Calypso |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 chipset? |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 A: Because it works flawlessly, and is extremely stable as a commercial product. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 The firmware which Openmoko got from TI had only a tiny difference from TI's |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 internal TCS211 mainline (TSPACT signal definitions in tpudrv12.h which are |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 different between the quadband RFFE on TI's internal reference hw and the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 triband one in FIC's commercial implementation), and with only a few additional |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 changes related to our use of a newer flash chip that wasn't supported back in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 TI's and Openmoko's days, this golden reference fw can run equally well on our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 own FCDEV3B. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 Relation between TCS211 and FreeCalypso |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 ======================================= |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 The only "pure" TCS211 firmware we got is the one that has been salvaged from |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 the ruins of Openmoko. To the best of our knowledge, it is the world's only |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 surviving copy of any version of TCS211 - it is entirely possible that even TI |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 may not have it any more in any of their archives, given the length of time that |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 has passed and the total lack of interest in this "ancient junk". In its pure |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 form, this world's sole surviving copy of TI's TCS211 fw is laden with blobs |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 (many components exist only as binary object libraries with no corresponding |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 source), and it features a build system that is very thoroughly Windows-based. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 And to top it off, that configuration and build system has many critical |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 components which also exist only as compiled binaries (Windows executables or |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 Java bytecode) with no corresponding source. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 We started by replacing the original configuration and build system of TCS211 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 with our own one that is Unix-based rather than Windows-based, and implemented |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 in Bourne shell with a few C helpers instead of XML, Java and Perl. The result |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 was named FreeCalypso Magnetite. At first we changed only the configuration |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 and build system, but kept all of the original TCS211 code, including all of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 the binary-only components. Then we deblobbed it gradually, replacing binary- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 only components with source, one component at a time. Where did we get the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 source for the pieces that came as binary objects with no corresponding source? |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 The answer is different for different components: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 * For GSM Layer 1 (a very critical and highly chipset-dependent component), we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 did a painstaking reconstruction which you can see in the tcs211-l1-reconst |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 repository. That world's last surviving copy of TCS211 which we got only had |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 *.c files censored out, while all of the original *.h files were preserved - |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 and thanks to the preserved configuration and build system, we also got all |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 of the original compilation lines including compiler options, -D definitions |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 and -I include paths. For most of the missing *.c files we got a "wrong" |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 version from the TCS3/LoCosto source. The reconstruction proceeded by taking |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 these "wrong version" *.c files, putting them one module (one *.c file) at a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 time into the TCS211 build environment, and massaging each individual *.c |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 file until it compiled into a perfect match to the original binary object. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 Thus we have reconstructed a full C source for the L1 component which for all |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 practical purposes can be treated as if it were the lost original source. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 * For some small pieces like the tpudrv12 RF driver and the OSL and OSX |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 components of GPF it was more of a translation from disassembly to C: the C |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 code we use is of our own writing, but it faithfully matches the logic |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 implemented by the original blobs as recovered through disassembly. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 * The G23M protocol stack is a very large and complex component, and our copy |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 of TCS211 (the world's only surviving copy to the best of our knowledge) has |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 it in binary-only form. Trying to source-reconstruct it precisely like we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 did with L1 would have been infeasible, hence we took a different approach: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 we put together a TCS2/TCS3 hybrid in which we made a wholesale replacement |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 of all G23M components: we adopted the new version of G23M wholesale without |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 trying to recreate the old version. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 * Both TCS211 and TI's newer TCS3.2 fw for the LoCosto chipset are based on |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 Nucleus PLUS RTOS (different versions), and both firmwares have their Nucleus |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 only as binary object libraries, no source. However, we got another version |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 of Nucleus from about the same time frame (slightly newer than the one TI used |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 in TCS211, but slightly older than the one in TCS3.2) from a non-TI source |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 (it was posted on a Russian web forum by Comrade XVilka), and in FreeCalypso |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 Selenite we use this new Nucleus as a replacement for TCS211 original version |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 in the same manner as how we had earlier made a wholesale replacement of the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 G23M protocol stack. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 With two major components (Nucleus and the G23M PS) replaced with non-TCS211 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 versions, our Magnetite hybrid and Selenite firmwares are no longer TCS211, but |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 they still faithfully follow the _architecture_ of TCS211: in each case when we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 replaced the code, we made the new code version fit perfectly into the original |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 architecture without any disruptive changes. Thus anyone who desires to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 understand our current FreeCalypso firmwares (Magnetite and Selenite) needs to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 first understand the original TCS211 architecture, as it is essentially |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 unchanged. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 Why not use the LoCosto chipset and its TCS3.2 firmware? |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 ======================================================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 We went the Calypso route and not the LoCosto route because of the circumstances |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 that surrounded the beginning of our family of projects. We did not get all of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 the tools needed for working with LoCosto chips and TI's TCS3.2 fw (CSST and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 SBuild) until the spring of 2015, and by that time we had invested too much into |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 the Calypso to throw it all away and restart anew in the uncharted waters of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 LoCosto. Another factor is that the software for talking to LoCosto's ROM |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 bootloader (CSST) exists only as Windows binaries sans source, and it would |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 require some effort to reverse-engineer the protocol and implement a free and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 Unix-based alternative - whereas for the Calypso this work was already done by |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 OsmocomBB folks before we entered the scene. Finally, in the case of the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 Calypso we have read out the actual content of the ROMs (both the ARM boot ROM |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 and the DSP ROM) and the ARM boot ROM code has been disassembled and thoroughly |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 understood - whereas in the case of LoCosto it is not certain if we can even |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 read out the ROM content, as it is said to be protected against reading. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 If someone else desires to play with LoCosto, either by hacking a Peek device |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 or by building an I-Sample board from the available PADS PCB file, go for it! |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 But the FreeCalypso core team is sticking with the Calypso chipset for now, and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 our actively maintained Magnetite and Selenite firmwares follow the architecture |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 of TCS211, not that of TCS3.2. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 Relation between the ARM and DSP cores in the Calypso |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 ===================================================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 The Calypso digital baseband processor chip has two processor cores in it: an |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 ARM7TDMI core that runs the main firmware and a C54x DSP core that performs the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 more burdensome signal processing tasks. The DSP is subservient to the ARM: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 only the ARM comes out of reset and starts executing code upon power-up, while |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 the DSP is held in reset (does not run) until and unless the ARM firmware starts |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 it running. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 The ARM core executes code from outside of the Calypso chip itself: in normal |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 operation (outside of development) there is a flash memory chip connected to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 Calypso's external memory bus, and the Calypso's ARM core executes firmware |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 stored in this flash. There is an optional (enabled or disabled by a hardware |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 pin) ARM boot ROM inside the Calypso chip; when this boot ROM is enabled by |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 nIBOOT pin strapping on the board (like it is on Openmoko and FreeCalypso |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 hardware), the ARM core executes code from this boot ROM first upon power-up or |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 reset before jumping to external flash. The tiny piece of code that is hard- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 cast in this mask ROM acts as an unbricking aid: it gives a certain time window |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 during which the boot process can be interrupted and diverted if certain magic |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 characters are sent into either of Calypso's two UARTs by an external |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 development host, and if nothing is received on either UART during that time |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 window (as would be the case in normal usage of a Calypso phone or modem), the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 boot ROM transfers control to the firmware image in the external flash. The |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 end result is that the ARM core always runs code from outside of the Calypso |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 chip itself, either the firmware image in the flash or whatever code is fed by |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 an external development host to the boot ROM serially over a UART. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 There is also an internal RAM inside the Calypso from which the ARM can execute |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 code (512 KiB on the full Calypso version or 256 KiB on Calypso Lite silicon |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 used in some historical low-end phones); the primary purpose of this internal |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 RAM is to allow chosen sections of code to execute faster without the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 performance penalty of the external memory bus, but it is volatile RAM, not ROM |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 or flash, hence it doesn't have any code in it until and unless loaded by the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 firmware copying code from flash or via the serial boot protocol. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 In contrast, the DSP is very different. The DSP core can never execute any |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 code from outside the chip, and has no access to the Calypso chip's external |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 memory bus at all. Instead the only two memories accessible to the DSP are a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 mask ROM and a fast internal RAM. The DSP's dedicated mask ROM is 128 Kwords; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 the DSP's RAM is 28 Kwords, out of which 8 Kwords constitute the so-called API |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 RAM which is accessible to both ARM and DSP cores. (The C54x DSP addresses |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 memory by words instead of bytes, hence the memory sizes are given in Kwords |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 instead of KiB.) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 The main bulk of the DSP's operating program is already hard-cast in the silicon |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 in the 128 Kword mask ROM. The DSP ROM code is structured in such a way that |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 any part of it can be overridden by downloadable patch codes which get loaded |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 somewhere in the DSP's 28 Kword RAM, but because the RAM is significantly |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 smaller than the ROM, downloadable DSP code cannot replace the entirety of the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 ROM code - instead the code needs to be patched very selectively only where |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 necessary to fix a bug that was discovered after the silicon was made or to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 extend the DSP functionality with a new feature. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 The DSP ROM code in the Calypso silicon we are using has been successfully read |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 out, but it is only the executable binary code and data - we never found a copy |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 of the source for this DSP ROM code. And even if we had this source, we would |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 not be able to casually modify and recompile it without spending millions of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 dollars to fab a new chip revision with a modified mask ROM. Having this source |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 would allow us to develop our own DSP patch codes and to understand and maintain |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 the existing ones, hence we need to make an effort to convince TI to release |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 the source for the DSP ROM if they have it in their archives, but if no |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 surviving copy of this source exists anywhere in the world, the fallback plan |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 would be to reverse-engineer the DSP ROM code by disassembly. The latter plan |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 has not been pursued yet because of the very high labor cost it would involve. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 It is possible to run the Calypso DSP without any patches, i.e., have it run |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 only the code that is already in the mask ROM. Our competitor OsmocomBB |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 operates in this manner, and we have also built and run modified versions of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 our TCS211-based FreeCalypso firmware with DSP patch loading disabled as an |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 experiment. However, all ARM-side firmwares that have been officially released |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 by TI for production use including our TCS211-20070608 golden reference do apply |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 downloadable patches to the DSP, and are designed to run with this patched DSP; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 running them with DSP patching disabled results in unstable operation. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 DSP patch codes that are included in ARM-side Calypso firmwares take the form |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 of const char arrays initialized with hex bytes; these C source files with hex |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 char arrays inside were apparently produced from C54x COFF files with a tool |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 called coff2c, but we never got any of those COFF files or whatever source (C |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 or assembly) they were built from. At the present time in the FreeCalypso |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 family of projects we use the DSP patch codes (hex char arrays) which we got |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 with our copy of TCS211 from 20070608, and we treat the entire DSP block (the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 combination of mask ROM plus patches) as a functional black box. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 Having to treat the DSP as a black box is certainly a major shortcoming of our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 FreeCalypso solution. However, I (Mother Mychaela) would much rather have a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 phone or modem in which only the DSP is a black box while I get to maintain all |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 of the upper layers with full freedom, as opposed to the status quo alternative |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 of a very high-level black box with FOTA backdoors. Unlike the ubiquitous |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 high-level black boxes from the likes of Qualcomm, the DSP in the Calypso cannot |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 be backdoored: it has no access to the ARM address space, thus no access to the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 flash (cannot surreptitiously modify the firmware) and no access to any of the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 higher-level radio protocol state maintained by the ARM, all it can do is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 modulate and demodulate bursts and run voice codecs _as commanded by the ARM_. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 Furthermore, the DSP has no access to the Calypso chip's TPU (Time Processing |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 Unit, the block that controls board-level RF hardware) and thus has no direct |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 control over any of the RF hardware: it cannot initiate radio transmission or |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 even reception on its own, instead the ARM firmware has to configure the RF |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 hardware via the TPU for each and every Rx or Tx time window. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 Finally, if anyone is truly paranoid about the possibility of backdoors in the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 DSP, the DSP ROM code has been read out - you are welcome to hire a professional |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 reverser of your choice to disassemble and audit it as thoroughly as you like. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 This code is unchangeable by virtue of being hard-cast in a mask ROM in the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 silicon. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 The rest of this document covers the firmware that runs on the ARM core; it |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 controls the DSP via its API RAM, a form of shared memory interface. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 High-level structure of TCS211 firmware |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 ======================================= |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 The code base that makes up TI's TCS211 firmware consists of 3 main divisions: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 chipset software, Condat G23M (GSM and GPRS L23 protocol stacks, ACI and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 optional handset UI layers) and GPF. Let us look at them in turn: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 chipsetsw division |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 ------------------ |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 In the original TCS211 delivery there was a top-level directory named chipsetsw |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 (chipset software), containing code that is specific to TI's chipsets in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 particular and was never intended to run on any other hardware. This code |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 division has been retained intact in our FreeCalypso Magnetite and Selenite |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 firmwares, taken in its entirety from our TCS211 golden reference, although we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 have shortened the name: this code division now resides under src/cs in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 Magnetite and Selenite. Aside from a few bits of system glue, this chipsetsw |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 breaks down into two further subdivisions: the L1+drivers core and the SSA |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 division. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 L1+drivers core |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 --------------- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 This division resides under chipsetsw/layer1 and chipsetsw/drivers/drv_core, or |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 under src/cs/layer1 and src/cs/drivers/drv_core in our version. The most |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 important piece here is L1 (GSM Layer 1): this code drives the DSP and the RF |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 hardware, and thereby makes the Calypso function as a GSM MS (mobile station) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 and not merely as a general purpose microprocessor platform. This code can be |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 considered to be the most important part of the entire firmware. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 At one time TI had a so-called standalone L1 configuration, selected by the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 OP_L1_STANDALONE C preprocessor symbol. We don't have the bits that are needed |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 to build this configuration (they were probably never released outside of TI at |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 all), but it appears that this fw build configuration consisted of just Nucleus, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 L1, the drivers under drv_core, the OSL and OSX parts of GPF without the rest, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 and some stubs for the few higher-level functions that are intertied with L1. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 The drivers under chipsetsw/drivers are divided into drv_core and drv_app: the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 former are the most essential or fundamental ones, used by L1 and/or needed for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 the OP_L1_STANDALONE config; the latter belong to the higher-level SSA division |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 described below. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 SSA division |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 ------------ |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 TI had a group called System Software and Applications (SSA), and they supplied |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 those parts of the firmware that are neither L1+drv_core nor Condat G23M. The |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 more interesting pieces here include the flash file system (FFS), the debug |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 trace facility (RVT), the Enhanced Test Mode (ETM) facility that allows |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 external development and production tools to poke at the firmware, RiViera Audio |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 Service (playing various beeps and ringtones through the DSP, a front-end to L1 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 audio functions), LCD and keypad drivers for Calypso-based handsets, and various |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 supportive functions implemented via the Iota ABB: switch-on and switch-off |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 logic, battery monitoring and charging, backlight LED control. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 All firmware components in the SSA division are built on top of a framework |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 called RiViera - more will be said about it later. Everything under |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 chipsetsw/drivers/drv_app, chipsetsw/riviera and chipsetsw/services (or under |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 src/cs/drivers/drv_app, src/cs/riviera and src/cs/services in our version) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 belongs to the SSA realm. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 Condat G23M division |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 -------------------- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 At the beginning of TI's involvement in the GSM baseband chipset business, they |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 only developed and maintained their own L1 code, which eventually grew into the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 larger chipsetsw division described above, while the rest of the protocol stack |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 (which is hardware-independent) was licensed from another company called Condat. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 Later Condat as a company was fully acquired by TI, and the once-customer of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 this code became its owner. The name of TI/Condat's implementation of GSM |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 layers 2&3 for the MS side is G23M, and it forms its own major division of the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 overall fw architecture. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 The overall Condat code realm can be further subdivided into GSM and GPRS L23 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 protocol stacks, the Application Control Interface (ACI) which includes the AT |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 command interpreter (ATI), and additional phone UI layers which are only |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 included in handset but not modem firmwares. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 We don't know exactly how TI maintained this software internally: given that it |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 is mostly hardware-independent aside from integration details and some minor |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 features which may be present on one hw platform but not on another, it would |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 have made the most sense for TI to maintain a single internal mainline common |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 to both Calypso and LoCosto, and then integrate the code from this mainline into |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 chipset-specific customer releases. We have no way of knowing if TI indeed |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 followed this approach or not, but when we took the version of G23M from the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 TCS3.2 source for the LoCosto chipset and grafted it onto the chipsetsw |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 foundation from TCS211 for the Calypso to produce our TCS2/TCS3 hybrid, the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 integration went surprisingly smoothly. The full-source version of G23M which |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 we took from TCS3/LoCosto is newer than the binary-only version featured in the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 world's last surviving copy of TCS211 from Openmoko. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 GPF island of stability |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 ----------------------- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 Underlying the G23M protocol stack is a special layer called GPF, which was |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 originally Condat's Generic Protocol stack Framework. Apparently Condat were |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339 in the business of developing and maintaining a whole bunch of protocol stacks: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 GSM MS side, GSM network side, TETRA and who knows what else. GPF was their |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 common underpinning for all of their protocol stack projects, which ran on top |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 of many different OS environments: Nucleus, pSOS, VxWorks, Unix/Linux, Win32 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 and who knows what else. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 In the case of TI/FreeCalypso GSM fw, both the protocol stack and the underlying |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 OS environment are fixed: GSM and Nucleus, respectively. But GPF is still a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 critically important layer in the firmware architecture: in addition to serving |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 as the glue between the G23M stack and Nucleus, it provides some important |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 support infrastructure for the protocol stack. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
350 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
351 However, what makes GPF very special is the way in which it relates to the rest |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 of the firmware architecture. GPF remained common and unchanged across TI's |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
353 many different projects, and it is so independent from the rest of the firmware |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
354 and its build configuration that TI were able to make company-wide GPF library |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
355 builds and then plop them into multiple fw projects which used them as |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
356 configuration-independent prebuilt libraries. All TI firmware (semi-)sources |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357 we've got use GPF in prebuilt library form and are not set up to recompile any |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 part of it from source. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
359 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
360 Our FC Magnetite firmware uses the original binary libs from TCS211-Openmoko |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
361 for its GPF component, but for FC Selenite the project requirement is to be |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
362 completely blob-free, hence we had to reconstruct the source for GPF. The |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
363 original source for most parts of GPF was found between TCS3.2 from Peek/FGW |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
364 and TCS211 from OM (the former had the source for the core "frame" modules and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
365 the latter had the source for misc and tst), but we never got the source for the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
366 OSL and OSX components, hence we had to reconstruct them from disassembly. OSL |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
367 is the glue layer between GPF and Nucleus, OSX is the glue layer between GPF |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 and L1. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
369 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
370 Firmware boot process |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
371 ===================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
372 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
373 As already mentioned earlier, the Calypso chip itself includes an ARM boot ROM |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
374 in the silicon that serves as an unbricking aid: it provides a certain time |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
375 window during which the boot process can be interrupted and diverted if certain |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 magic characters are sent into either of Calypso's two UARTs by an external |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
377 host, and if nothing is received on either UART during that time window, the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
378 boot ROM transfers control to the firmware image in the external flash. As we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
379 understand it, Calypso was TI's first DBB (digital baseband processor) chip to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
380 include this boot ROM, and their previous DBB chips did not have such: they |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
381 would always execute code directly from external flash immediately out of reset. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
382 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
383 TI's TCS211 and earlier firmwares are structured in such a way that they boot |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
384 and run exactly the same way whether the Calypso boot ROM is present and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
385 enabled, present but disabled, or not present at all. They put magic constant |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
386 0x00000001 in the 32-bit word at flash address 0x2000, which tells the Calypso |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
387 boot ROM (if it is present and enabled) to boot the flash fw image in legacy |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
388 mode: after providing the unbricking time window, the boot ROM moves itself out |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
389 of the way (sets two bits in the FFFF:FB10 register which tell the chip to unmap |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
390 the boot ROM and to map external memory at address 0) and induces a watchdog |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
391 reset, causing the chip to re-execute the reset vector, this time directly out |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
392 of external flash - thus the firmware boots as if the boot ROM weren't there, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
393 but the ROM's unbricking function is retained. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
394 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
395 In order to make it easier to load new firmware images during development on |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
396 pre-Calypso platforms which didn't have a boot ROM, TI had developed a flash- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
397 resident bootloader stage and included it in their fw architecture. This |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
398 bootloader stage is placed at the beginning of the flash at the reset vector, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
399 and the rest of the firmware begins at an erase unit boundary. The bootloader |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
400 stage executes first, and before it jumps to the main firmware entry point |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
401 (_INT_Initialize) for normal boot, it offers an opportunity for the boot process |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
402 to be interrupted and diverted if an external host sends certain magic command |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
403 packets into either of the two UARTs during the allotted time window. If the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
404 external host does interrupt and divert the boot process in this manner, it can |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
405 feed a code image to the bootloader to be written somewhere in target RAM, and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
406 then command the bootloader to jump to it. It is exactly the same functionality |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
407 (though with different serial protocol specifics) as implemented in the Calypso |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
408 boot ROM. The ROM version is obviously superior because it is unbrickable, but |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
409 the flash-resident, built-with-firmware version is what TI used before they |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
410 came up with the idea of the boot ROM for the Calypso. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
411 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
412 When the boot-ROM-equipped Calypso came along, TI kept the flash-resident |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
413 bootloader in the firmware: it does no harm aside from adding a little bit of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
414 delay to the boot process, it does not conflict with the ROM bootloader as the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
415 two speak different serial protocols and respond to different interrupt-boot |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
416 sequences, and it allowed TI to keep the same firmware architecture for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
417 platforms with and without a boot ROM. However, in our FreeCalypso firmwares |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
418 starting with Magnetite we have removed this extra bootloader stage for the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
419 following reasons: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
420 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
421 * It is not useful to us on any of our hardware targets: on those devices that |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
422 have the Calypso boot ROM enabled, we use that boot ROM and get full |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
423 unbrickability, whereas on Mot C1xx phones we have to work with Mot/Compal's |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
424 own different bootloader and serial protocol at least initially, hence it |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
425 makes the most sense to stick with the same after the conversion to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
426 FreeCalypso as well. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
427 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
428 * As delivered by TI with their full production TCS211 fw releases, their |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
429 firmware-resident bootloader works as intended only on hw platforms with |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
430 13 MHz VCXOs like the original D-Sample (Clara RF), and is broken on platforms |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
431 like Rita RF (the only RF chip for which we have driver code!) with 26 MHz |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
432 VCXOs: there is no conditionally-compiled code anywhere in the bootloader |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
433 code path to set the VCLKOUT_DIV2 bit in the CNTL_CLK register on 26 MHz |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
434 platforms, thus the UARTs are fed with 26 MHz instead of the standard 13 MHz |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
435 clock expected in normal operation, and the intended baud rate of 115200 bps |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
436 turns into 230400. Because 230400 bps is a baud rate which Calypso UARTs |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
437 *cannot* produce in normal GSM operation (when the peripheral clock network |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
438 runs at the expected 13 MHz), tools that are designed to talk to Calypso GSM |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
439 devices are typically not designed to support this baud rate. In particular |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
440 for CP2102 USB-serial adapters, the precedent established by the factory |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
441 CP2102 EEPROM programming in the Pirelli DP-L10 phone is that the baud rate |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
442 entry for 230400 bps is replaced with 203125 bps, which is a valid baud rate |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
443 for Calypso UARTs running at 13 MHz. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
444 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
445 * We have no source for TI's firmware-resident bootloader, only linkable binary |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
446 objects that came with our world's last surviving copy of TCS211, which are |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
447 incompatible with our goal of blob-free firmware. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
448 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
449 Because this extra bootloader stage is ultimately unnecessary in our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
450 environment, the deblobbing goal was easier accomplished by removing it |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
451 altogether instead of expending effort on a blob-free replacement. Because I |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
452 wasn't comfortable with modifying TMS470 assembly code and linker script magic, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
453 the removal of the bootloader was accomplished by stubbing out its C body with |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
454 an empty function. In the gcc-built FC Selenite version it is removed |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
455 completely, without any leftover stubs. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
456 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
457 Finally, it needs to be noted for the sake of completeness that Compal's |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
458 bootloader used on Mot C1xx phones is a modified version based on TI's original |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
459 bootloader. However, this factoid matters only for historians and genealogists; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
460 for all practical purposes it is an unrelated animal, as Mot/Compal's serial |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
461 protocol for interrupting and diverting the boot process is their own and bears |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
462 no resemblance to TI's version. And yes, Mot/Compal's version does set the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
463 VCLKOUT_DIV2 bit in the CNTL_CLK register to adjust for the 26 MHz clock input |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
464 as its first order of business; it was probably the very first issue they had |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
465 to fix. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
466 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
467 When we build FC Magnetite or FC Selenite TMS470 firmware for Mot C1xx targets, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
468 we use dd to strip off the first 64 KiB of the image produced by TI's linker |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
469 (the part where TI's bootloader resides, be it intact or stubbed out) and flash |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
470 the remaining image (the main body of the fw) starting at flash address 0x10000. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
471 In the gcc-built Selenite version we natively link images that are designed to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
472 be flashed at 0x10000 without any dirty hacks. Common to all FC firmwares for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
473 C1xx targets, the bootloader image we put at 0 (in the brickable flash sector) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
474 is a modified version based on one of Mot/Compal's originals: we have binary- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
475 patched it to redirect the exception vectors from Mot/Compal's 0x20A0 to 0x10000 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
476 and to move the main fw entry point from Mot/Compal's 0x20F8 to TI's 0x10058. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
477 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
478 None of this muckery applies to our own FreeCalypso hardware or to our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
479 predecessor Openmoko's hw: on these good hw targets the complete fw image as |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
480 built is flashed at 0, and there is no possibility of bricking because we use |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
481 the boot ROM to gain access irrespective of what's in the flash. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
482 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
483 Main firmware entry point |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
484 ------------------------- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
485 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
486 With the bootloader distraction out of the way, the main fw entry point is at |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
487 the _INT_Initialize symbol in the int.s assembly module, located in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
488 src/cs/system/main/int.s in Magnetite and Selenite. The functional equivalent |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
489 for the gcc environment in Selenite is in src/cs/system/main/gcc/bootentry.S. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
490 This assembly code performs some basic hardware initialization, sets up |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
491 sensible memory timings for the boot path phase before DPLL setup, copies the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
492 IRAM code (the code that is intended to execute out of the fast internal RAM) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
493 from flash to where it needs to be, zeros both IRAM and XRAM .bss regions, does |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
494 TI's cinit/auto_init business for initialized data in the TMS470 environment |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
495 (Selenite gcc version copies .data from flash to RAM instead), sets up the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
496 system, IRQ, FIQ and exception stacks, does some assembly initialization for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
497 Nucleus and finally jumps to Nucleus' C entry point INC_Initialize(). |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
498 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
499 Further initialization takes place in the Init_Target() and Init_Drivers() |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
500 functions called from Application_Initialize(), which is the last function |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
501 called by INC_Initialize() before starting the Nucleus task scheduler. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
502 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
503 Nucleus environment |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
504 =================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
505 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
506 Like all classic TI firmwares, ours is based on the Nucleus PLUS RTOS. Just |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
507 like TI's original code on which we are based, we use only a small subset of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
508 the functionality provided by Nucleus - but because the latter is a library, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
509 the pieces we don't use simply don't get pulled into the link. The main |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
510 function we get out of Nucleus is the scheduling of threads, or tasks as |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
511 Nucleus calls them. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
512 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
513 Aside from pre-stack-setup assembly init code and ARM exception handlers, every |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
514 piece of code in the firmware executes in one of the following contexts: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
515 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
516 * Application_Initialize(): this function and everything called from it execute |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
517 just before Nucleus' thread scheduler starts; at this point interrupts are |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
518 disabled at the ARM7 core level (in the CPSR) and must not be enabled; the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
519 stack is Nucleus' "system stack" which is also used by the scheduler and LISRs |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
520 as explained below. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
521 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
522 * Regular threads or tasks: once Application_Initialize() finishes, all code |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
523 with the exception of interrupt handlers (LISRs and HISRs as explained below) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
524 runs in the context of some Nucleus task. Whenever you are trying to debug |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
525 or simply understand some piece of code in the firmware, the first question |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
526 you should ask is "which task does this code execute in?". Most functional |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
527 components run in their own tasks, i.e., a given piece of code is only |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
528 intended to run within the Nucleus task that belongs to the component in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
529 question. On the other hand, some components are implemented as APIs, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
530 functions to be called from other components: these don't have their own task |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
531 associated with them, and instead they run in the context of whatever task |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
532 they were called from. Some only get called from one task: for example, the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
533 "uartfax" driver API calls only get called from the protocol stack's UART |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
534 entity, which is its own task. Other component API functions like FFS and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
535 trace can get called from just about any task in the system. Many components |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
536 have both their own task and some API functions to be called from other tasks, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
537 and the API functions oftentimes post messages to the task to be worked on by |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
538 the latter; the just-mentioned FFS and trace functions work in this manner. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
539 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
540 In our TCS211-mimicking Magnetite and Selenite firmwares every Nucleus task is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
541 created either through RiViera or through GPF, and not in any other way - see |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
542 the description of RiViera and GPF below. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
543 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
544 * LISRs (Low level Interrupt Service Routines): these are the interrupt handlers |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
545 that run immediately when an ARM IRQ or FIQ comes in. The code at the IRQ and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
546 FIQ vector entry points calls Nucleus' magic stack switching function |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
547 (switches the CPU from IRQ/FIQ into SVC mode, saves the interrupted thread's |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
548 registers on that thread's stack, and switches to the "system" stack) and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
549 then calls TI's IRQ dispatcher implemented in C. The latter figures out |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
550 which Calypso interrupt needs to be handled and calls the handler configured |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
551 in the compiled-in table. Nucleus' LISR registration framework is not used |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
552 by the GSM fw, but these interrupt handlers should be viewed as LISRs |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
553 nonetheless. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
554 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
555 There is one additional difference between canonical Nucleus and TI's version |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
556 (we've replicated the latter): canonical Nucleus was designed to support |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
557 nested LISRs, i.e., IRQs re-enabled in the magic stack switching function, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
558 but in TI's version which we follow this IRQ re-enabling is removed: each LISR |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
559 runs with interrupts disabled and cannot be interrupted. (The corner case of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
560 an FIQ interruping an IRQ remains to be looked at more closely as bugs may be |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
561 hiding there, but Calypso doesn't really use FIQ interrupts.) There is really |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
562 no need for LISR nesting in our GSM fw, as each LISR is very short: most LISRs |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
563 do nothing more than trigger the corresponding HISR. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
564 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
565 * HISRs (High level Interrupt Service Routines): these hold an intermediate |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
566 place between LISRs and tasks, similar to softirqs in the Linux kernel. A |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
567 HISR can be activated by a LISR calling NU_Activate_HISR(), and when the LISR |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
568 returns, the HISR will run before the interrupted task (or some higher |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
569 priority task, see below) can resume. HISRs run with CPU interrupts enabled, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
570 thus more interrupts can occur, with their LISRs executing and possibly |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
571 triggering other HISRs. All triggered HISRs must complete and thereby go |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
572 "quiescent" before task scheduling resumes, i.e., all HISRs as a group have a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
573 higher scheduling priority than tasks. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
574 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
575 Nucleus implements priority scheduling for tasks. Tasks have their priority set |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
576 when they are created (through RiViera or GPF, see below), and a higher priority |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
577 task will run until it gets blocked waiting for something, at which time lower |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
578 priority tasks will run. If a lower priority task sends a message to a higher |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
579 priority task, unblocking the latter which was waiting for incoming messages, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
580 the lower priority task will effectively suspend itself immediately while the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
581 higher priority task runs to process the message it was sent. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
582 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
583 HISRs oftentimes post messages to their associated tasks as well; if one of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
584 these messages unblocks a higher priority task, that unblocked task will run |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
585 upon the completion of the HISR instead of the original lower priority task |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
586 that was interrupted by the LISR that triggered the HISR. Nucleus' scheduler |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
587 is fun! |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
588 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
589 RiViera and GPF |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
590 =============== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
591 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
592 RiViera and GPF are two parallel/independent/competing wrappers around or |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
593 layers above Nucleus. GPF comes from Condat and is used by the G23M protocol |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
594 stack and indirectly by L1 (the peculiar way in which L1 ties in with the rest |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
595 of the firmware will be covered later), whereas RiViera is used by the fw |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
596 components from TI's SSA group: flash file system, debug trace, RiViera Audio |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
597 Service and so forth. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
598 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
599 At some point in their post-Calypso TCS3.x program TI decided to eliminate |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
600 RiViera as an independent framework and to reimplement RiViera APIs (used by |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
601 peripheral but necessary code such as FFS, ETM, various drivers etc) over GPF. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
602 This arrangement is used in the TCS3.2 LoCosto firmware from which we have |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
603 lifted our source replacements for much of the code that came as binary objects |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
604 in our reference TCS211 version. However, our current Magnetite and Selenite |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
605 firmwares follow the architecture of TCS211, not that of TCS3.2, and because |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
606 the entire SSA division of the fw including the RiViera core came in full source |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
607 form in our copy of TCS211, it was only natural to keep this code and its |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
608 architecture. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
609 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
610 Start-up process continued |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
611 ========================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
612 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
613 As mentioned earlier, Nucleus calls the application's software init function |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
614 called Application_Initialize() after it initializes itself but before starting |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
615 the task scheduler. This function in TCS211 is just the following: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
616 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
617 Application_Initialize() |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
618 { |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
619 Init_Target(); |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
620 Init_Drivers(); |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
621 Cust_Init_Layer1(); |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
622 Init_Serial_Flows(); |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
623 StartFrame(); |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
624 Init_Unmask_IT(); |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
625 } |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
626 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
627 Cust_Init_Layer1() is in L1, StartFrame() is in GPF, and the remaining 4 init |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
628 functions live in the init.c module under src/cs/system/main. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
629 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
630 The Init_Target() function finishes the hardware initialization that was |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
631 started by the assembly code at the firmware boot entry point (int.s): among |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
632 other things, it sets up the final memory timings that will be used by the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
633 running fw and configures the Calypso DPLL which provides multiplied internal |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
634 clocks to both ARM and DSP cores. On Calypso C035 silicon which is used on our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
635 own FreeCalypso boards and on most of our pre-existing hw targets the DPLL and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
636 the DSP run at 104 MHz and the ARM gets half of that, running at 52 MHz. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
637 Init_Target() also calls AI_InitIOConfig(), the function that initializes |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
638 Calypso GPIO directions and initial outputs; both of these functions typically |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
639 need to be tweaked when adding support for a new Calypso board target. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
640 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
641 The Init_Drivers() function is primarily responsible for initializing RiViera |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
642 and FFS, although it also does a bit of init related to ABB and SIM drivers. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
643 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
644 I mentioned earlier that every Nucleus task in our firmware gets created and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
645 started either through RiViera or through GPF. All GPF tasks are created and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
646 placed into the runable state in the Application_Initialize() context: the work |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
647 is done by GPF init code in gpf/frame/frame.c, and the top level GPF init |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
648 function called from Application_Initialize() is StartFrame(). Thus when |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
649 Application_Initialize() finishes and the Nucleus thread scheduler starts |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
650 running for the first time, all GPF tasks are there to be scheduled. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
651 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
652 There is a compiled-in table of all protocol stack entities and the tasks in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
653 which they need to run; in TCS211 these GPF config bits live under |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
654 g23m/condat/frame/config for the GSM+GPRS configuration and under |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
655 g23m/condat/com/src/config for the GSM-only config without GPRS. Canonically |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
656 each protocol stack entity runs in its own task, but sometimes two or more are |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
657 combined to run in the same task: for example, in the minimal GSM "voice only" |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
658 configuration (no CSD, fax or GPRS) CC, SMS and SS entities share the same task |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
659 named CM. Unlike RiViera, GPF does not support dynamic starting and stopping |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
660 of tasks. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
661 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
662 As each GPF task starts running (immediately upon entry into Nucleus' scheduling |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
663 loop as Application_Initialize() finishes), pf_TaskEntry() function in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
664 gpf/frame/frame.c is the first code it runs. This function creates the queue |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
665 for messages to be sent to all entities running within the task in question, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
666 calls each entity's pei_init() function (repeatedly until it succeeds: it will |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
667 fail until the other entities to which this entity needs to send messages have |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
668 created their message queues), and then falls into the main body of the task: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
669 for all "regular" entities/tasks except L1, this main body consists of waiting |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
670 for messages (or signals or timeouts) to arrive on the queue and dispatching |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
671 each received message to the appropriate handler in the right entity. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
672 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
673 RiViera tasks get started in a different way. The responsible code lives in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
674 src/cs/system/main/create_RVtasks.c, and the create_tasks() function found in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
675 that module is called by Init_Drivers() in the Application_Initialize() context. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
676 But this function does not directly create and start every configured RiViera |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
677 task like StartFrame() does for GPF. Instead it creates a special helper task |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
678 which will do this work once scheduled. Thus at the completion of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
679 Application_Initialize() and the beginning of scheduling the set of runable |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
680 Nucleus tasks consists of all GPF ones plus the special RV starter task. Once |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
681 the RV starter task gets scheduled, it will call rvm_start_swe() to launch |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
682 every configured RiViera SWE (SoftWare Entity), which in turns entails creating |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
683 the tasks in which these SWEs are to run. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
684 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
685 Dynamic memory allocation |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
686 ========================= |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
687 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
688 All dynamic memory allocation (i.e., all RAM usage beyond statically allocated |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
689 variables and buffers) is once again done either through RiViera or through GPF, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
690 and in no other way. Ultimately all areas of the physical RAM that will ever |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
691 be used by the fw in any way are allocated when the fw is compiled and linked: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
692 the areas from which RiViera and GPF serve their dynamic memory allocations are |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
693 statically allocated as char arrays in the respective C modules and placed in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
694 the appropriate IRAM or XRAM .bss section by the linker script; RiViera and GPF |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
695 then provide API functions that allocate memory dynamically from these |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
696 statically allocated large pools. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
697 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
698 RiViera and GPF have entirely separate memory pools from which they serve their |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
699 respective clients, hence there is no possibility of one affecting the other. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
700 Riviera's memory allocation scheme is very much like the classic malloc&free: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
701 there is one large unstructured pool from which all allocations are made, one |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
702 can allocate a chunk of any size, free chunks are merged when physically |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
703 adjacent, and fragmentation is an issue: a memory allocation request may fail |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
704 even when there is enough memory available in total if it is too fragmented. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
705 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
706 GPF's dynamic memory allocation facility is considerably more robust: while it |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
707 does maintain one or two (depending on configuration) memory pools of the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
708 traditional "dynamic" kind (like malloc&free, susceptible to fragmentation), |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
709 most GPF memory allocation works on "partition" memory instead. Here GPF |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
710 maintains 3 separate groups of pools: PRIM, TEST and DMEM; each allocation |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
711 request must specify the appropriate pool group and cannot affect the others. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
712 Within each pool there is a fixed number of partitions of a fixed size: for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
713 example, in TI's TCS211 GSM+GPRS configuration the PRIM pool group consists of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
714 190 partitions of 60 bytes, 110 partitions of 128 bytes, 50 partitions of 632 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
715 bytes and 7 partitions of 1600 bytes. An allocation request from a given pool |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
716 group (e.g., PRIM) can request any arbitrary size in bytes, but it gets rounded |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
717 up to the nearest partition size and allocated out of the respective pool. If |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
718 no free partition is available, the requesting task is suspended until another |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
719 task frees one. Because these partitions are used primarily for intertask |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
720 communication, if none are free, it can only mean (assuming that the firmware |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
721 functions correctly) that all partitions have been allocated and sent to some |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
722 queue for some task to work on, hence eventually they will get freed. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
723 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
724 This scheme implemented in GPF is extremely robust in the opinion of this |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
725 author, and the other purely "dynamic" scheme is used (in the case of GPF) only |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
726 for init-time allocations which are never freed, such as task stacks - hence |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
727 the GPF-based part of the firmware is not suspectible at all to the problem of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
728 memory fragmentation. But Riviera does suffer from this problem, and the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
729 concern is more than just theoretical: one major user of Riviera-based dynamic |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
730 memory allocation is the trace facility (described in its own section below), |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
731 and my observation of the trace output from Pirelli's proprietary fw (which |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
732 appears to use the same architecture with separate Riviera and GPF) suggests |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
733 that after the fw has been running for a while, Riviera memory gets fragmented |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
734 to a point where many traces are being dropped. Replacing Riviera's poor |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
735 dynamic memory allocation scheme with a GPF-like partition-based one is a to-do |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
736 item for our project. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
737 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
738 Message-based intertask communication |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
739 ===================================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
740 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
741 Even though all entities of the G23M protocol stack are linked together into |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
742 one monolithic fw image and there is nothing to stop them from calling each |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
743 other's functions and accessing each other's variables, they don't work that |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
744 way. Instead all communication between entities is done through messages, just |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
745 as if they ran in separate address spaces or even on separate processors. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
746 Buffers for this message exchange are allocated from a GPF partition pool: an |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
747 entity that needs to send a message to another entity allocates a buffer of the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
748 needed size, fills it with the message to be sent, and posts it on the recipient |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
749 entity's message queue, all through GPF services. The other entity simply |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
750 processes the stream of messages that arrives on its message queue, freeing each |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
751 message (returning the buffer to the partition pool it came from) as it is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
752 processed. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
753 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
754 Riviera-based tasks use a similar mechanism: unlike G23M protocol stack |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
755 entities, most Riviera-based functional modules provide APIs that are called as |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
756 functions from other tasks, but these API functions typically allocate a memory |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
757 buffer (through Riviera), fill it with the call parameters, and post it to the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
758 associated task's message queue (also in the Riviera land) to be worked on. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
759 Once the worker task gets the job done, it will either call a callback function |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
760 or post a response message back to the requestor - the latter option is only |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
761 possible if the requesting entity is also Riviera-based. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
762 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
763 A closer look at GPF |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
764 ==================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
765 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
766 There are certain sublayers within GPF which need to be pointed out. The 3 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
767 major subdivisions within GPF are: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
768 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
769 * The meaty core of GPF: this part is the code under src/gpf/frame in our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
770 Selenite GPF reconstruction, originating from gpf/FRAME in the TCS3.2 source |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
771 from Peek/FGW. It appears that this part was originally intended to be both |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
772 project-independent (same for GSM, TETRA etc) and OS-independent (same for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
773 Nucleus, pSOS, VxWorks etc). This is the part of GPF that matters for the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
774 G23M stack: all APIs called by PS entities are implemented here, and so are |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
775 all other PS-facing functions such as startup. (PS = protocol stack) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
776 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
777 * OS adaptation layer (OSL): this is the part of GPF that adapts it to a given |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
778 underlying OS, in our case Nucleus. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
779 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
780 * Test interface: see the code under gpf/tst in TCS211 from Openmoko or in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
781 FC Selenite. This part handles the trace output from all entities that run |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
782 under GPF and the mechanism for sending external debug commands to the GPF+PS |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
783 subsystem. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
784 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
785 GPF was a difficult step in our GSM firmware deblobbing process because no |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
786 complete source for it could be found anywhere: apparently GPF was so stable |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
787 and so independent of firmware particulars (Calypso or LoCosto, GSM only or |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
788 GSM+GPRS, modem or complete phone with UI etc) that it appears to have been |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
789 used and distributed as prebuilt binary libraries even inside TI. All TI fw |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
790 (semi-)sources we've got use GPF in prebuilt library form and are not set up to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
791 recompile any part of it from source. (They had to include all GPF header |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
792 files though, as most of them are included by G23M C modules, and it would be |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
793 too much hassle to figure out which ones are or aren't needed, hence all were |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
794 included.) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
795 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
796 Fortunately though, we were able to find the sources for most parts of GPF: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
797 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
798 * The LoCosto source in TCS3.2_N5.24_M18_V1.11_M23BTH_PSL1_src.zip features the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
799 source for the "core" part of GPF under gpf/FRAME - these sources aren't |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
800 actually used by that fw's build system (it only uses the prebuilt binary |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
801 libs for GPF), but they are there. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
802 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
803 * Our TCS211 semi-src doesn't have any sources for the core part of GPF, but |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
804 instead it features the source for the test interface and some "misc" parts: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
805 under gpf/MISC and gpf/tst in that source tree - these sources are not present |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
806 in the LoCosto version from Peek. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
807 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
808 The GPF frame, misc and tst sources we have found have been verified to match |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
809 the binary objects that came with TCS211 from OM: they can be compiled into a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
810 bit-for-bit match. However, one critical piece was still missing: the OS |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
811 adaptation layer. It appears that the GPF core (vsi_??? modules) and OSL |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
812 (os_??? modules) were maintained and built together, ending up together in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
813 frame_<blah>.lib files in the binary form used to build firmwares, but the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
814 source for the "frame" part in the Peek find contained only vsi_*.c and others, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
815 but not any of os_*.c. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
816 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
817 Our FC Magnetite firmware uses the original binary libs from TCS211-Openmoko |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
818 for its GPF component, but for FC Selenite the project requirement is to be |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
819 completely blob-free, hence we had to reconstruct the source for the OSL part |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
820 of GPF from disassembly. This work was originally done in 2014 in the context |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
821 of our first attempt at gcc-built blob-free GSM fw (FC Citrine, now deemed to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
822 be a dead end and fully retired); this reconstruction was then dug up and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
823 adapted for Selenite in 2018. As of this writing, this reconstruction is still |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
824 not 100% complete (one complex error handling function is stubbed out) and not |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
825 yet trusted to be fully correct, thus our fully deblobbed Selenite firmware is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
826 currently considered experimental; our current production fw is still Magnetite |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
827 with blobs for GPF. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
828 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
829 A closer look at L1 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
830 =================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
831 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
832 The L1 code is remarkable in how little intertie it has with the rest of the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
833 firmware it is linked into. It is almost entirely self-contained, expecting |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
834 only 4 functions to be provided by the underlying OS environment: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
835 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
836 os_alloc_sig -- allocate message buffer |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
837 os_free_sig -- free message buffer |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
838 os_send_sig -- send message to upper layers |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
839 os_receive_sig -- receive message from upper layers |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
840 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
841 It helps to remember that at the beginning of TI's involvement in the GSM |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
842 baseband chipset business, L1 was the only thing they "owned", while Condat, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
843 the maintainers of the higher level protocol stack, was a separate company. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
844 TI's "turnkey" solution must have consisted of their own L1 code plus G23M code |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
845 (including GPF etc) licensed from Condat, but I'm guessing that TI probably |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
846 wanted to retain the ability to sell their chips with their L1 without being |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
847 entangled by Condat: let the customer use their own GSM L23 stack, or perhaps |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
848 work out their own independent licensing arrangements with Condat. I'm |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
849 guessing that L1 was maintained as its own highly independent and at least |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
850 conceptually portable entity for these reasons. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
851 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
852 The way in which L1 is intertied into the rest of the fw is the same in all TI |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
853 production firmwares we have seen, including both our TCS211 reference and the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
854 TCS3.2 LoCosto version. There is a module called OSX, which is an extremely |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
855 thin adaptation layer that implements the APIs expected by L1 in terms of GPF. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
856 Furthermore, this OSX layer provides header file isolation: the only "outside" |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
857 (non-L1) header included by L1 is cust_os.h, and it defines the necessary |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
858 interface to OSX *without* including any other headers (no GPF headers in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
859 particular), using only the C language's native types. Apart from this |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
860 cust_os.h header, the entire OSX layer is implemented in one C module (osx.c, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
861 which we had to reconstruct from osx.obj as the source was missing - but it's |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
862 very simple) which does include some GPF headers and implements the OSX API in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
863 terms of GPF services. Thus in both TI's production firmwares and our own ones, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
864 L1 does sit on top of GPF, but very indirectly. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
865 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
866 More specifically, the "production" version of OSX implements its API in terms |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
867 of *high-level* GPF functions, i.e., VSI. However, they also had an interesting |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
868 OP_L1_STANDALONE configuration which omitted not only all of G23M, but also the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
869 core of GPF and possibly the Riviera environment as well. We don't have a way |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
870 to recreate this configuration exactly as it existed inside TI because we don't |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
871 have the source bits specific to this configuration, but we do have a little |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
872 bit of insight into how it worked. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
873 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
874 It appears that TI's OP_L1_STANDALONE build used a special "gutted" version of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
875 GPF in which the "meaty core" (VSI etc) was removed. The OS layer (os_??? |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
876 modules implementing os_*() functions) that interfaces to Nucleus was kept, and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
877 so was OSX used by L1 - but this time the OSX API functions were implemented in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
878 terms of os_*() ones (low-level wrappers around Nucleus) instead of the higher- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
879 level VSI APIs provided by the "meaty core" of GPF. It is purely a guess on my |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
880 part, but perhaps this hack was also done in the days before TI's acquisition |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
881 of Condat, and by omitting the "meaty core" of GPF, TI could claim that their |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
882 OP_L1_STANDALONE configuration did not contain any of Condat's "intellectual |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
883 property". |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
884 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
885 Run-time structure of L1 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
886 ======================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
887 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
888 L1 consists of two major parts: L1S and L1A. L1S is the synchronous part where |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
889 the most time-critical functions are performed; it runs as a Nucleus HISR. The |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
890 hardware in the Calypso generates an interrupt on every TDMA frame (4.615 ms, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
891 or more precisely 60/13 ms), and the LISR handler for this interrupt triggers |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
892 the L1S HISR. L1S communicates with L1A through a shared memory data structure, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
893 and also sometimes allocates message buffers and posts them to L1A's incoming |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
894 message queue (both via OSX API functions, i.e., via GPF in disguise). |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
895 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
896 L1A runs as a regular task under Nucleus, and includes a blocking call (to GPF |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
897 via OSX) to wait for incoming messages on its queue. It is one big loop that |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
898 waits for incoming messages, then processes each received message and commands |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
899 L1S to do most of the work. The entry point to L1A in the L1 code proper is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
900 l1a_task(), although the responsibility for running it as a task falls on some |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
901 "glue" code outside of L1 proper. TI's production firmwares with G23M included |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
902 have an L1 protocol stack entity within G23M whose only job (aside from some |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
903 initialization) is to run l1a_task() in the Nucleus task created by GPF for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
904 that protocol stack entity; we do the same in our firmwares. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
905 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
906 Communication between L1 and G23M |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
907 ================================= |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
908 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
909 It is remarkable that L1 and G23M don't have any header files in common: L1 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
910 uses its own (almost fully self-contained), whereas the G23M+GPF realm is its |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
911 own world with its own header files. One has to ask then: how do they |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
912 communicate? OK, we know they communicate through primitives (messages in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
913 buffers allocated from GPF's PRIM partition memory pool) passed via message |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
914 queues, but what about the data structures in these messages? Where are those |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
915 defined if there are no header files in common between L1 and G23M? |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
916 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
917 The answer is that there are separate definitions of the L1<->G23M interface on |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
918 each side, and TI must have kept them in sync manually. Not exactly a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
919 recommended programming or software maintenance practice for sure, but TI took |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
920 care of it, and the existing proprietary products based on TI's firmware are |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
921 rock solid, so it is not really our place to complain. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
922 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
923 TI's firmwares from the era we are working with (both our TCS211 golden |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
924 reference and the TCS3.2/LoCosto source from which we took the newer full-source |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
925 version of G23M for our TCS2/TCS3 hybrid) also include a component called ALR. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
926 It resides in the G23M code realm: G23M coding style, uses Condat header files, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
927 runs as its own protocol stack entity under GPF. This component appears to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
928 serve as a glue layer between the rest of the G23M stack (which is supposed to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
929 be truly hardware-independent) and TI's L1. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
930 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
931 Speaking of ALR, it is worth mentioning that there is a little naming |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
932 inconsistency here. ALR is known to the connect-by-name logic in GPF as "PL" |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
933 (physical layer, apparently), while the ACI entity (Application Control |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
934 Interface, the top level entity) is known to the same logic as "MMI". No big |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
935 deal really, but hopefully knowing this quirk will save someone some confusion. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
936 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
937 A closer look at our FreeCalypso TCS2/TCS3 hybrid |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
938 ================================================= |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
939 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
940 Because we don't have an official TI firmware release for the Calypso in full |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
941 source form and because I am not willing to throw away all of our Calypso work |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
942 and restart anew with LoCosto with its own host of unknowns, the only currently |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
943 available way for us to have blob-free production-quality GSM mobile station fw |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
944 is the TCS2/TCS3 hybrid implemented in FC Magnetite and Selenite. This hybrid |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
945 is made by taking the G23M version from TCS3/LoCosto and grafting it onto the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
946 chipsetsw foundation from TCS211, including the original TCS211/Calypso version |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
947 of L1 which we have meticulously source-reconstructed. The version of GPF used |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
948 for this hybrid is also the TCS211 version in Magnetite or our source |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
949 reconstruction thereof in Selenite. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
950 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
951 The Condat G23M pieces have been hybridized as follows: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
952 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
953 * cdginc generated header files are a special hybrid version described below; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
954 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
955 * The include files under condat/com/inc and condat/com/include are the TCS3 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
956 version, except for pwr.h and rtc.h for which we use the TCS2 version; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
957 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
958 * comlib is the TCS2 version, except for cl_rlcmac.c which is from TCS3; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
959 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
960 * config modules (condat/com/src/config and condat/frame/config) are the TCS2 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
961 version, with some fixes for the needs of the TCS3 version of G23M PS and our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
962 own FreeCalypso fixes; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
963 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
964 * Condat drivers (condat/com/src/driver) are the TCS2 version; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
965 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
966 * All G23M PS components are the TCS3 version by necessity, as this is the part |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
967 for which the source is missing in our TCS211 version, with the exception of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
968 ALR - the original source for the TCS211 version of ALR has miraculously |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
969 survived, the ALR source in TCS211 from OM can be compiled into a perfect |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
970 match for the binary lib version; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
971 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
972 * We use the TCS2 version of ALR (the interface to our TCS211 L1) and not the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
973 TCS3 version (a change from Citrine), but it is compiled with the same hybrid |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
974 cdginc headers as the rest of hybrid G23M, not the old TCS211 ones; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
975 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
976 * ACI is the TCS3 version - we have the source for both versions, but trying to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
977 use the old TCS2 version of ACI on top of the new TCS3 version of the PS |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
978 would cause untold breakage; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
979 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
980 * The UI layers (MFW and BMI) for handset fw builds are handled like ACI: we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
981 have the source for both versions, but we use the TCS3 version which works |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
982 with the TCS3 versions of ACI and cdginc; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
983 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
984 * The CST (Customer Specific Task) component is the TCS2 version - while it |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
985 logically belongs in the Condat realm, the code lives in the chipsetsw realm |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
986 under chipsetsw/services/cst (yes, it's under services with SSA stuff even |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
987 though it doesn't use RiViera) and thus our copy of TCS211 from OM has this |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
988 source preserved. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
989 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
990 With this hybrid arrangement the main splice point lies above ALR, and there |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
991 are many little splice points throughout the code where some upper-level code |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
992 from TCS3 needs to talk to lower-level code from TCS2. There are no inversions, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
993 i.e., no places where TCS2 code sits on top of code from TCS3, although there |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
994 are a few instances where TCS2 C code uses some TCS3 header files. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
995 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
996 TCS3 feature flags |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
997 ------------------ |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
998 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
999 Our TCS3.2/LoCosto code from Peek/FGW from 20090327 supports several new GSM |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1000 features (apparently related to GSM release 99) which are not supported by our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1001 TCS211-20070608 golden reference from OM. All of these new features can be |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1002 enabled or disabled with conditional compilation flags. Our TCS2/TCS3 hybrid |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1003 currently has all of these new features disabled: it was too difficult for me |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1004 to figure out if these new features require some support from the hardware or |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1005 the DSP which is present on LoCosto but not Calypso, and even if our hw and DSP |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1006 have all of the necessary capabilities, at least some of the new features |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1007 require adding some code to L1, which is incompatible with my approach of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1008 reconstructing TCS211 L1 pristinely. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1009 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1010 In any case, the GSM functionality we get by using the new version of G23M with |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1011 new feature flags disabled on top of pristine TCS211 L1 cannot be any worse |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1012 than what we would have had if we had the full corresponding source for our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1013 TCS211-20070608 golden reference, and it is probably a little better because we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1014 are using a newer version of G23M code. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1015 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1016 cdginc headers |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1017 -------------- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1018 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1019 Much of the code in the Condat G23M realm makes heavy use of a set of machine- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1020 generated C header files called cdginc. These header files contain various |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1021 definitions related both to the GSM air protocols being implemented and to G23M |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1022 protocol stack internals (interfaces and message structures between components), |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1023 and they are generated from a set of message definition files (*.mdf) and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1024 primitive definition files (*.pdf) by a tool called ccdgen. The *.{mdf,pdf} |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1025 inputs to ccdgen are human-readable ASCII, and of course the generated C header |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1026 files are human-readable too, but we have no source for the ccdgen tool itself, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1027 only a Windows binary which we can run under Wine. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1028 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1029 The ccdgen binary problem is yet another instance of so far incomplete |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1030 liberation of the GSM firmware. It is currently a very low-priority problem: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1031 we do not casually edit any of the *.{mdf,pdf} inputs to ccdgen, and we don't |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1032 run ccdgen on every fw build - instead we have run ccdgen once and checked its |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1033 output files (generated C headers) into our Magnetite and Selenite trees as if |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1034 they were sources. If we are not able to convince TI to dig up and release the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1035 source for ccdgen, there is a viable albeit costly alternative: hire a Windows |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1036 reverser to RE the ccdgen.exe binary (262144 bytes) and produce a C |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1037 reimplementation that replicates all of its logic. It is a Win32 console app, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1038 no GUI, and it is a pure data processing application without any hardware access |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1039 or OS functions or any other muckery: it is probably pure ANSI C code that reads |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1040 and parses a bunch of ASCII input files, performs some business logic on the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1041 data, and writes another bunch of ASCII text files as outputs. It is currently |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1042 a very low-priority task though; reversing the Calypso DSP ROM code should |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1043 probably be a higher priority. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1044 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1045 The set of cdginc headers for our TCS2/TCS3 hybrid has been generated as |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1046 follows: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1047 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1048 * All of the *.mdf files are the TCS3 version; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1049 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1050 * All of the *.pdf files except mphc.pdf and mphp.pdf are also the TCS3 version; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1051 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1052 * mphc.pdf and mphp.pdf are the TCS211 version - this is the interface to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1053 TCS211 L1; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1054 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1055 * All new feature flags (see discussion above) are set to disabled. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1056 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1057 Condat Coder and Decoder (CCD) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1058 ------------------------------ |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1059 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1060 CCD is a firmware component in the Condat G23M realm which I haven't really |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1061 studied yet. It consists of two parts: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1062 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1063 * A fixed portion which TI used to distribute in binary form and which various |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1064 firmware projects used as a prebuilt library like GPF - technically TI |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1065 considered it to be a part of GPF, although we prefer to treat it as its own |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1066 more independent entity; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1067 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1068 * The ccddata portion which needs to be compiled with cdginc headers for each |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1069 given project. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1070 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1071 We got the source for both parts of CCD only in the TCS3.2/LoCosto version, but |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1072 not in the TCS211 version, hence the decision was easy: we use the TCS3 version |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1073 of CCD (both parts) with the TCS3 version of cdginc with the TCS3 version of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1074 the G23M PS. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1075 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1076 TCS3.2 GPF discrepancy |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1077 ---------------------- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1078 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1079 A careful examination of the prebuilt GPF libraries under gpf/LIB in the TCS3.2 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1080 LoCosto source tree has revealed that a few of the binary objects exhibit some |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1081 differences from the TCS211 version which we've been treating as our golden |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1082 reference: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1083 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1084 * The os_mis module (OSL miscellany) in the IRAM library implements a new |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1085 function called os_CheckQueueEvent() and defines a new global data object |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1086 named my_os_mis_Protect; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1087 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1088 * The os_tim module (OSL timer code) in the flash (XIP) library has some code |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1089 differences; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1090 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1091 * The vsi_tim module (VSI timer code) in the flash (XIP) library has some code |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1092 differences; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1093 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1094 * The vsi_tim module (VSI timer code) in the IRAM library has some code |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1095 differences and makes use of the new os_CheckQueueEvent() function. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1096 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1097 In the case of os_??? modules we have no corresponding source for either |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1098 version, but the vsi_tim difference is more bizarre: we got our vsi_tim.c source |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1099 (and the rest of vsi_*.c) from the TCS3.2/LoCosto source, but this source |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1100 matches the TCS211 binary version and not the newer and different binary version |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1101 used by the TCS3.2 build system! (Remember that none of TI's firmware build |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1102 systems that we have seen are set up to recompile any part of GPF from source, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1103 they used it only as prebuilt libraries.) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1104 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1105 Because we have the corresponding source for the "old" version of GPF frame core |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1106 but not for the "new" version, we are continuing to treat the "old" TCS211 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1107 version as our golden reference: we use the source pieces which we got, and we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1108 use the "old" os_???.obj blobs as our basis for reconstruction via disassembly. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1109 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1110 Because the changes in the TCS3.2 binary version of GPF involve only the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1111 implementation of a part of VSI but not its API (there are no changes to any |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1112 part of the GPF API presented to the G23M PS that I can see anywhere), I have |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1113 every good reason to believe that there is no problem with using the new TCS3.2 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1114 version of G23M with the old version of GPF from TCS211: it should work no worse |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1115 than pure TCS211. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1116 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1117 It should also be noted that if we ever succeed in getting some more complete |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1118 GPF source out of TI (including the source for the OS adaptation layer which is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1119 difficult to reconstruct), thanks to the great stability and independence of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1120 GPF, we will be happy with *any* version, does not need to match either TCS211 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1121 or TCS3.2. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1122 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1123 GPRS implementation differences |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1124 ------------------------------- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1125 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1126 There is a visible difference between the way GPRS is implemented in the old |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1127 TCS211-20070608 blob version of G23M and the way it is implemented in the newer |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1128 TCS3.2/LoCosto version we are using for our hybrid. The new implementation adds |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1129 a new protocol stack entity named UPM (User Plane Manager), and the pre-existing |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1130 SM and SNDCP entities have been significantly changed to work with this UPM. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1131 Because we are using the GPRS config modules (condat/frame/config) from TCS211, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1132 we had to add a -DFF_UPM compilation flag to include UPM in the GPF |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1133 configuration for the GSM+GPRS protocol stack. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1134 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1135 A closer look at ACI |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1136 ==================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1137 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1138 The Application Control Interface (ACI) is the crown that sits on top of the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1139 G23M protocol stack. It includes the AT command interpreter (ATI) component, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1140 and this AT command interface is brought to the outside world via the UART |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1141 protocol stack entity. The UART entity implements the GSM 07.10 MUX, can |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1142 operate the physical UART in either multiplexed or non-multiplexed mode (the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1143 latter is the default on boot for a plain ASCII AT command interface) as |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1144 commanded by ACI, and establishes 1 to 4 logical channels carrying AT commands |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1145 to ACI. When a CSD or fax call or a GPRS PPP session is in progress, the data |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1146 path is switched to run between the UART entity and the appropriate GSM or GPRS |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1147 protocol stack destination. In the case of modem products that are designed to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1148 be controlled by an external host via AT commands, this combination of ACI and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1149 UART entities provides the ultimate end function of the device. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1150 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1151 The set of implemented AT commands is defined in ati_cmd.c: this is the C file |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1152 where new AT commands get added; there is also an enum of command IDs in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1153 aci_cmh.h which needs to be extended. For every AT command listed in the table |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1154 in ati_cmd.c there is a handler function: for example, for the AT+CFUN command |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1155 there is a setatPlusCFUN() function that handles setting and a queatPlusCFUN() |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1156 function that handles querying. For some simple AT commands like AT+CGxx |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1157 queries the function listed in ati_cmd.c does the entirety of the work, but for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1158 most of the interesting GSM commands (including the AT+CFUN example just used) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1159 the set and query functions implemented in the ATI layer only handle the parsing |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1160 of ASCII arguments and generation of ASCII output (if any), whereas the actual |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1161 command implementation happens in the CMH layer below. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1162 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1163 Below ATI but still within ACI lies the sublayer of command handlers (CMH). |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1164 For each AT command that does something to the GSM mobile station there is a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1165 functional equivalent, a C function that performs the same operation as the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1166 spec-defined AT command, but is designed to be used natively from C code, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1167 without AT command string parsing or output formatting. For the AT+CFUN example |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1168 used above, the setatPlusCFUN() ATI function parses the arguments from ASCII |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1169 and then calls sAT_PlusCFUN() to perform the actual operation, whereas the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1170 queatPlusCFUN() ATI function calls qAT_PlusCFUN() to retrieve the current state |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1171 and then prints it out in ASCII. This functional interface is used by TI's |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1172 demo/prototype phone UI implementation described in the Handset-UI-fw companion |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1173 document. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1174 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1175 Finally, at the bottom of ACI lies the sublayer of Protocol Stack Adapters |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1176 (PSA): these are pieces of code that execute within the ACI task and exchange |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1177 primitives with various G23M protocol stack entities below. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1178 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1179 We have the source for both TCS2 and TCS3 versions of ACI. The TCS2 version is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1180 from Openmoko, containing OM's modifications, and we had to go through these |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1181 changes and additions by OM, reject the bogus ones and reimplement the sensible |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1182 ones in the new TCS3 version of ACI for our TCS2/TCS3 hybrid going forward. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1183 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1184 Flash file system |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1185 ================= |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1186 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1187 Every GSM device that is based on TI's firmware architecture contains not only |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1188 the firmware image proper, but also a flash file system that is separate from |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1189 the fw image and is maintained in a different part of the flash chip. The FFS |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1190 implementation code is a mandatory part of the firmware; in TCS211 it resides |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1191 in chipsetsw/drivers/drv_app/ffs and logically belongs to the SSA realm. This |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1192 code initializes early in the fw boot process in the Application_Initialize() |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1193 context before the start of Nucleus task scheduling; the responsible function |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1194 is ffs_main_init() called from Init_Drivers(). |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1195 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1196 Flash driver support and FFS location |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1197 ------------------------------------- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1198 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1199 Determining the location of the flash area allocated for FFS and the flash |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1200 driver to be used to write to it is a combination of autodetection and hard- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1201 coding. The approach implemented in the original TCS211 code is as follows: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1202 there is a piece of autodetection code that reads the flash chip ID, and the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1203 autodetected ID is then looked up in a hard-coded table that gives the driver |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1204 and geometry details and the location of the FFS sectors for each supported |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1205 flash chip type. However, this approach has its limitations: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1206 |
9
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1207 * The sequence of write operations which TI's original autodetection code |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1208 issues in order to put the flash chip into its Read ID mode worked for older |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1209 flash chips that were used by TI and Openmoko, but does not work for the newer |
0
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1210 Spansion S71PL129NC0HFW4B flash chip which we (FreeCalypso) have copied from |
9
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1211 the Pirelli DP-L10 phone. We have now fixed it, but until recently we had to |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1212 disable flash autodetection and hard-code the flash chip type on Pirelli and |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1213 FCDEV3B targets. |
0
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1214 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1215 * While the physical flash chip used on a given phone or modem board is a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1216 physical property that can be autodetected, the choice of which flash sectors |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1217 should be used for FFS is a matter of policy. Before we built our own |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1218 FreeCalypso hardware, we had to run our fw on some pre-existing "alien" hw |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1219 targets, and we still support such usage to a limited extent. When we run |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1220 our FreeCalypso fw on an alien hw target as an aftermarket deal, our |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1221 aftermarket FFS location needs to be chosen quite carefully. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1222 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1223 * Some flash chips have two chip select banks, and with such chips it is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1224 generally desirable to put the FFS in the second bank. However, it is a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1225 matter of board wiring whether that second flash chip select is connected to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1226 Calypso chip select nCS2, nCS3 or nCS4 - thus FFS addresses in the second bank |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1227 have to be hard-coded with conditional compilation per board type and cannot |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1228 be autodetected. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1229 |
9
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1230 To support our new repertoire of possible hardware targets, we have made the |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1231 following changes in our Magnetite and Selenite firmwares: |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1232 |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1233 * We have a new version of the ffsdrv_device_id_read() autodetection function |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1234 that issues AMD's Read ID command sequence in a way that works with all flash |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1235 chips which we've encountered so far in real life, including Openmoko's |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1236 Samsung K5A3281 and our new (originally Pirelli's) Spansion flash chip. We |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1237 have also incorporated the logic from Pirelli's firmware that distinguishes |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1238 between S71PL-J and S71PL-N chips: they have different sector sizes which FFS |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1239 needs to know about, but they have the same ID codes and can only be |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1240 distinguished through CFI. |
0
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1241 |
9
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1242 * The autodetected flash ID code is looked up in a compiled-in table like |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1243 before, but we now have 4 different versions of this table selected by |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1244 conditional compilation based on the target for which the firmware is being |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1245 built: |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1246 |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1247 - For our own FC hardware family (CONFIG_TARGET_FCFAM) we have our brand-new |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1248 table of possible flash configurations which we keep free of any legacy |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1249 gunk; |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1250 |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1251 - For Mot C1xx targets (CONFIG_TARGET_COMPAL) we have a dedicated table |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1252 giving our aftermarket FFS configurations for Intel flash chip types found |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1253 in these phones; |
0
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1254 |
9
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1255 - For the Pirelli DP-L10 target (CONFIG_TARGET_PIRELLI) we likewise have |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1256 another dedicated table giving our aftermarket FFS config for Pirelli's |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1257 S71PL-J or S71PL-N flash; |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1258 |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1259 - The #else clause is the original table from TI/Openmoko, used on |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1260 dsample and gtamodem targets. |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1261 |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1262 The advantages of this new approach over our previous approach of disabling |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1263 flash autodetection and using a strictly fixed hard-coded FFS config for |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1264 FreeCalypso and Pirelli targets are: |
0
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1265 |
9
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1266 * The high-capacity flash chip we are currently using (S71PL129NC0HFW4B) is |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1267 great for development boards or perhaps for a high-end Pirelli-like feature |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1268 phone, but it would be way overkill for an embedded modem product - for the |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1269 latter device class a smaller flash chip like Openmoko's K5A32xx would be |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1270 more appropriate. The new autodetection approach makes it possible to build |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1271 a single fw image that can run on both large-flash and small-flash boards. |
0
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1272 |
9
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1273 * I've only seen Pirelli phones with S71PL-N flash so far, but their original |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1274 fw supports both S71PL-J and S71PL-N with autodetection. We can now do |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1275 likewise in our FreeCalypso fw. |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1276 |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1277 Finally, independent of flash chip type autodetection vs. hard-coding issues, |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1278 we have had to change the AMD multibank flash driver to issue write commands in |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1279 a way that is compatible with our new S71PL129NC0HFW4B chip. It still works |
5de1f72ce941
TCS211-fw-arch: flash chip type autodetection reinstated
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1280 just as well with Openmoko's K5A32xx. |
0
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1281 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1282 FFS life cycle |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1283 -------------- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1284 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1285 In products that have been built according to TI's original way, including |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1286 Openmoko GTA01/02 and our own FreeCalypso devices, the FFS is formatted and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1287 initialized with some essential content at the time of device manufacture, and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1288 this factory-created and factory-initialized FFS then persists for the lifetime |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1289 of the device. In our factory environment at FreeCalypso hardware manufacturing |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1290 we initialize the flash on our freshly assembled boards like this: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1291 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1292 flash erase 0 0x800000 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1293 flash program-bin 0 fwimage.bin |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1294 flash2 erase 0 0x800000 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1295 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1296 This factory procedure (which should ONLY be executed at the factory and never |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1297 by any end users or even sw/fw developers and tinkerers) ensures that the flash |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1298 is completely blank everywhere except the fw image loaded at the time of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1299 production, and when this fw image boots for the first time, it will see blank |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1300 flash in the FFS sectors. When TI's FFS code in ffs_main_init() sees this |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1301 condition, it performs what TI called a preformat: it writes a basic FFS block |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1302 header into each FFS sector, but does not automatically perform a full format - |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1303 instead the latter needs to be commanded explicitly by the production station |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1304 via one of TMFFS command packet protocols as described later in this article. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1305 In FreeCalypso we have adopted TMFFS2 as our choice of Test Mode FFS access |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1306 protocol, our host side implementation of this protocol is fc-fsio, and we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1307 format and initialize the FFS on our devices with an fc-fsio command script as |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1308 part of our factory procedure. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1309 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1310 FFS content and usage |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1311 --------------------- |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1312 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1313 TI's firmware architecture uses the FFS for many purposes: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1314 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1315 * The IMEI is stored in the FFS - GSMA can proclaim all they want that it |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1316 "MUST" be stored in some kind of super-secure one-time programmable fuses, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1317 but in TI's architecture and in FreeCalypso it is just a regular file in the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1318 FFS. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1319 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1320 * A number of RF calibration tables are stored in FFS and read by the RF code |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1321 in L1. If you have a Rohde&Schwarz CMU200 instrument which is itself in good |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1322 repair and calibration standing and a metrology-grade RF cabling setup whose |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1323 insertion loss at the relevant GSM frequencies is precisely known, creating |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1324 or recreating these RF calibration values is as simple as executing one shell |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1325 script that takes a few minutes to run - this is how we do it at FreeCalypso |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1326 hw manufacturing - but if you are an ordinary user or sw/fw developer or |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1327 tinkerer without a professional calibration station setup, you need to use |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1328 the RF calibration values that have been written into the FFS by the device |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1329 manufacturer. These RF calibration tables live under /gsm/rf. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1330 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1331 * /gsm/com/rfcap tells the RR component in the G23M protocol stack (not L1!) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1332 which frequency bands are supported on a given device - on our devices it is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1333 a factory-programmed file distinguishing between tri900 and tri850 units and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1334 telling the firmware which bands it should scan for possible GSM cells. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1335 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1336 * Manufacturer, model and revision ID strings may be written into /pcm/CGMI, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1337 /pcm/CGMM and /pcm/CGMR, respectively, to be returned by the corresponding |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1338 AT+CGxx query commands. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1339 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1340 * The G23M protocol stack writes a number of dynamically updated files under |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1341 the /gsm hierarchy and under /pcm. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1342 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1343 * TI's demo/prototype UI code (see Handset-UI-fw companion document) writes its |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1344 persistent state in files under /mmi. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1345 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1346 * Audio mode configuration files are kept under /aud - see the Audio-mode-config |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1347 article in freecalypso-tools. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1348 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1349 * If a given product uses the Melody E1 mechanism, melody files to be played |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1350 through the RiViera Audio Service are kept in FFS - see the Melody_E1 article |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1351 in freecalypso-tools. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1352 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1353 Building firmware for different targets |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1354 ======================================= |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1355 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1356 TI's TCS3.2 firmware for their LoCosto chipset which was rejected by the Mother |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1357 for reasons described near the beginning of this article makes a complete break |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1358 from the past and has no possibility of supporting any pre-LoCosto chips such |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1359 as our beloved Calypso, but TI's previous evolutionary developments weren't so |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1360 drastic: the evolution to Calypso from previous chips such as Hercules and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1361 Ulysse was smoother, and our reference TCS211 fw is littered with C preprocessor |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1362 conditionals supporting TI's earlier development boards prior to D-Sample and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1363 DBB chips prior to Calypso. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1364 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1365 TI's configuration management architecture supported only TI's own development |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1366 boards and not any of the end product boards: unfortunately they did not follow |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1367 a development model like the Linux kernel where everyone is encouraged to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1368 contribute their custom board support bits upstream and the mainline kernel |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1369 strives to support every hw target that was ever supported with a single source |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1370 tree, instead it was the divergent model where every end device manufacturer |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1371 would take TI's reference firmware source and hack it for their specific needs |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1372 with no concern for upstreamability or support for targets or applications |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1373 other than their own. TI's firmware build configuration model defined the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1374 following C preprocessor symbols relating to support for different hw targets, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1375 all numeric, i.e., each symbol is always defined to a number: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1376 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1377 BOARD identifies which board is to be targeted, with numbers assigned for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1378 different development boards made by various TI groups, but generally not for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1379 customer boards. The only Calypso-based BOARD number is 41, originally |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1380 assigned for the D-Sample but then also reused for the Leonardo; all other |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1381 BOARD numbers are for some other chipsets that aren't Calypso. The previous |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1382 board before D-Sample was C-Sample, which is BOARD 9, but I am not sure exactly |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1383 what chipset it had - perhaps it was Ulysse/Nausica/Clara. There is still |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1384 plenty of support for BOARD 9 and even earlier boards in the firmware source we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1385 got. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1386 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1387 CHIPSET identifies the main DBB chip. The interesting numbers are 7 for the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1388 very original Calypso C05 rev A, 8 for Calypso C05 rev B (found on the D-Sample |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1389 board which the Mother scored in 2015), 10 for Calypso C035 (the Calypso silicon |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1390 version we work with in FreeCalypso), 11 for Calypso Lite (same as the regular |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1391 Calypso except for smaller IRAM), 12 for Calypso+ (a short-lived intermediate |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1392 step between Calypso and LoCosto) and 15 for LoCosto. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1393 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1394 ANLG_FAM (previously ANALOG) identifies the ABB chip. The numbers are 1 for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1395 Nausica, 2 for Iota (what we use) and 3 for Syren (typically used with Calypso+ |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1396 like on the E-Sample board). |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1397 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1398 RF_FAM (previously just RF) identifies the RF hardware hooked up to the baseband |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1399 chipset. The interesting numbers are 10 for Clara (D-Sample) and 12 for Rita, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1400 the latter being the only RF chip for which we have driver support. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1401 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1402 Naturally any code that cares about DBB register differences would use the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1403 CHIPSET definition, ABB support code would use ANLG_FAM, RF support code would |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1404 use RF_FAM, and finally code that needs to know about board-level peripherals |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1405 like LCDs and keypads would use the BOARD symbol. This model worked fine up to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1406 D-Sample: for example, the code for C-Sample vs. D-Sample LCDs and keypads is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1407 cleanly conditionalized on BOARD 9 vs. BOARD 41. However, the waters got badly |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1408 muddied when TI introduced their Leonardo board and instead of giving it its |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1409 own BOARD number, reused BOARD number 41 from D-Sample. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1410 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1411 D-Sample was TI's primary internal development platform for the Calypso, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1412 featuring Iota for the ABB and Clara for the RF part. It was a great solid |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1413 platform in every way except the RF part: the old Clara RF is inconvenient |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1414 (needs more external parts) and TI were marketing their newer Rita RF to real |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1415 end device manufacturers, but the D-Sample still worked great for development: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1416 if you aren't working specifically on the RF part, it doesn't matter as long as |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1417 you have a working driver for it, which we lack. Then TI made another Calypso |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1418 development board called Leonardo, featuring the same Calypso+Iota baseband |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1419 plus the newer Rita RF. But this Leonardo never fully replaced the D-Sample |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1420 for any of the high-level development in the SSA and UI groups. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1421 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1422 Openmoko's modem is a direct derivative of the Leonardo, the only change being |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1423 the RFFE (for some reason FIC didn't like TI's quadband RFFE as implemented on |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1424 Leonardo and E-Sample boards and used their own slightly hobbled triband RFFE |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1425 instead), and the firmware build given to OM was TI's Leonardo fw with just a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1426 few tweaks in tpudrv12.h to account for the RFFE control signal differences. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1427 However, because Leonardo never got its own BOARD number and the BOARD symbol |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1428 is still set to 41, all of the SSA/UI code (LCD, keypad, battery charging etc) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1429 is still built as if for D-Sample - but none of that code is used on a pure AT |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1430 command modem without UI functions or UI hardware, hence OM probably never |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1431 noticed anything odd. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1432 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1433 And it wasn't just Openmoko - it appears that TI used their Leonardo boards |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1434 mostly or perhaps even solely in the ACI configuration without UI layers |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1435 (MMI=0 build configuration), while all or most UI development was done on |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1436 D-Sample kits. Their TCS211 reference fw product officially supported both |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1437 D-Sample and Leonardo targets in both ACI and BMI+MFW configurations, but if |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1438 one were to build a high-end UI-enabled config for the Leonardo like pdt_2272, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1439 it would target a 176x220 pixel color LCD, the LCD output driver would be the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1440 one for the D-Sample (expecting memory-mapped LCD registers on nCS3), and the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1441 keypad driver would expect D-Sample keypad wiring. Looking at the available |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1442 Leonardo schematics I see a serial (uWire) LCD interface instead and a more |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1443 basic keypad with different wiring, so I don't see how those Leonardo+UI |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1444 firmware builds could possibly work. Perhaps some other group at TI did some |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1445 UI work on Leonardo boards, but never made it into the internal mainline |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1446 from which TCS211 releases were cut - who knows... |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1447 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1448 Finally, aside from the basic failure to distinguish properly between D-Sample |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1449 and Leonardo boards, this whole BOARD number system provides absolutely no |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1450 mechanism to distinguish between TI's development boards and end product boards |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1451 derived from them, or between end product boards of vendor A vs. vendor B, or |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1452 between end product model A and model B from the same vendor - it's always |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1453 BOARD 41 as far as TI's code is concerned. When TI had to modify their code |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1454 for OM to support FIC's different TSPACT signal wiring, they just edited the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1455 definitions in tpudrv12.h without any conditionals, so one couldn't build |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1456 binaries for the original Leonardo vs. OM's hardware from the same source tree |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1457 in different configs. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1458 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1459 The build system of TCS211 produces a set of generated C header files named |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1460 *.cfg (instead of the more natural *.h); these generated config headers define |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1461 all of the C preprocessor symbols listed above and many more. They are included |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1462 sometimes as #include "board.cfg" and othertimes as #include "config/board.cfg" |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1463 (ditto for other *.cfg), thus the list of -I directories passed by the build |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1464 system on compiler invocation lines needs to include both the config directory |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1465 and its parent. In our Magnetite and Selenite build systems we likewise |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1466 generate these *.cfg headers; some of the symbols defined therein are variable |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1467 and originate from Bourne shell variables in our own configuration system, but |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1468 many others are fixed. See scripts/cfg-template in our Magnetite and Selenite |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1469 trees for the magic. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1470 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1471 The BOARD symbol is always fixed at 41 in all FreeCalypso firmwares, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1472 corresponding to TI's D-Sample and Leonardo, and we use our own different |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1473 mechanism to distinguish among our supported targets. The solution adopted in |
14
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1474 Magnetite and Selenite is as follows: we are supplementing TI's *.cfg and |
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1475 rv_swe.h files with our own fc-target.h (included as #include "fc-target.h" or |
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1476 as #include "config/fc-target.h" matching whatever existing TI code we are |
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1477 gently extending), and this fc-target.h header is populated by the build system |
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1478 by copying the appropriate targets/*.h header file. These targets/*.h |
0
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1479 header snippets define C preprocessor symbols of our own invention like |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1480 CONFIG_TARGET_xxx, and whenever we need to know our target in C code, we |
14
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1481 #include "fc-target.h" and use #ifdef logic based on these preprocessor symbols |
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1482 of our own addition. |
0
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1483 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1484 RVTMUX debug and development interface |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1485 ====================================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1486 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1487 The Calypso chip has two UARTs, and TI's TCS211 firmware and its predecessors |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1488 are designed with the assumption that both of these UARTs are available. Per |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1489 TI's fw architecture, Calypso's MODEM UART presents the standard AT command |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1490 interface with GSM 07.10 MUX, CSD, fax and GPRS capabilities as described |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1491 earlier when we looked at ACI and ATI, whereas the other UART (called the IrDA |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1492 UART in hardware docs but not used for that purpose) presents a vitally |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1493 important debug, development and production interface called RVTMUX. This |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1494 RVTMUX interface can also be moved to the MODEM UART, in which case the standard |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1495 AT command interface is lost. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1496 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1497 RVTMUX is a binary packet interface, and it got its name because it is a MUX of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1498 multiple logical channels managed by the RiViera Trace (RVT) firmware component. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1499 RVTMUX is often thought of as being primarily a debug trace interface, as that |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1500 is the primary use to which it is put: in normal operation the firmware emits |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1501 quite voluminous debug trace output on the IrDA UART, encapsulated in 3 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1502 different RVTMUX channels as explained below. However, it is also possible to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1503 send a number of different debug and development commands to the firmware via |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1504 this interface, and this functionality is used as a critical component in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1505 Calypso GSM device factory production line processes: this RVTMUX interface is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1506 the only way by which the FFS can be initialized, RF calibration and tests can |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1507 be performed and the IMEI can be set at the factory. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1508 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1509 Communication with a running firmware over this RVTMUX interface in a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1510 development or production setting (whether passively reading debug traces or |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1511 actively sending development or test commands to the running fw) requires |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1512 specialized host tools. TI originally had a suite of Windows-based tools for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1513 this purpose, but we are not using them in FreeCalypso: we only got Windows |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1514 binaries without any sources, and even in the case of those binaries we only |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1515 got an incomplete set with some important tools missing. Instead we are using |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1516 our own Unix-based tools called FreeCalypso host tools; these tools have been |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1517 developed from scratch by Mother Mychaela after studying the firmware components |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1518 with which they need to communicate. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1519 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1520 Debug trace output |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1521 ================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1522 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1523 The firmware component that "owns" the physical UART channel assigned to RVTMUX |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1524 is RVT, contained in chipsetsw/riviera/rvt in TCS211 or in src/cs/riviera/rvt |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1525 in our Magnetite and Selenite firmwares. It is a Riviera-based component, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1526 and it has a Nucleus task that is created and started through Riviera. All |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1527 calls to the actual driver for the UART are made from RVT. In the case of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1528 output from the Calypso GSM device to an external host, all such output is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1529 performed in the context of RVT's Nucleus task; this task drains RVT's message |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1530 queue and emits the content of allocated buffers posted to it, freeing them |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1531 afterward. (The dynamic memory allocation system in this case is Riviera's, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1532 which is susceptible to fragmentation - see discussion earlier in this article.) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1533 Therefore, every trace or other output packet emitted from a GSM device running |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1534 our fw (or any of the proprietary firmwares based on the same architecture) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1535 appears as a result of a message in a dynamically allocated buffer having been |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1536 posted to RVT's queue. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1537 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1538 RVT exports several API functions that are intended to be called from other |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1539 tasks, it is by way of these functions that most output is submitted to RVT. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1540 One can call rvt_send_trace_cpy() with a fully prepared output message, and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1541 that function will allocate a buffer from Riviera's dynamic memory allocator |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1542 properly accounted to RVT, fill it and post it to the RVT task's queue. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1543 Alternatively, one can call rvt_mem_alloc() to allocate the buffer, fill it in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1544 and then pass it to rvt_send_trace_no_cpy(). |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1545 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1546 At higher levels, there are a total of 3 kinds of debug traces that can be |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1547 emitted: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1548 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1549 * Riviera traces: these are generated by various components implemented in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1550 Riviera land, although in reality any component can generate a trace of this |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1551 form by calling rvf_send_trace() - this function can be called from any task. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1552 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1553 * L1 traces: L1 has its own trace facility implemented in |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1554 src/cs/layer1/cfile/l1_trace.c; it generates its traces as ASCII messages and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1555 sends them out via rvt_send_trace_cpy(). |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1556 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1557 * GPF traces: code that runs in GPF/G23M land and uses those header files and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1558 coding conventions etc can emit traces through GPF. GPF's trace functions |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1559 (implemented in gpf/frame/vsi_trc.c) allocate a memory partition from |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1560 GPF's TEST pool, format the trace into it, and send the trace primitive to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1561 GPF's special test interface task. That task receives trace and other GPF |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1562 test interface primitives on its queue, performs some manipulations on them, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1563 and ultimately generates RVT trace output, i.e., a new dynamic memory buffer |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1564 is allocated in the Riviera land, the trace is copied there, and the Riviera |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1565 buffer goes to the RVT task for the actual output. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1566 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1567 Trace masking |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1568 ============= |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1569 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1570 The RV trace facility invoked via rvf_send_trace() has a crude masking ability, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1571 but by default all traces are enabled. In TI's standard firmwares most of the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1572 trace output comes from L1: L1's trace output is very voluminous, and most of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1573 it is fully enabled by default. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1574 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1575 On the other hand, GPF and therefore G23M traces are mostly disabled by default. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1576 One can turn the trace verbosity level from any GPF-based entity up or down by |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1577 sending a "system primitive" command to the running fw, and another such command |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1578 can be used to save these masks in FFS, so that they will be restored on the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1579 next boot cycle and be effective at the earliest possible time. Enabling *all* |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1580 GPF trace output for all entities is generally not useful though, as it is so |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1581 verbose that a developer trying to make sense of it will likely drown in it - |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1582 and it will also overwhelm the debug trace facility itself, causing most of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1583 these far too voluminous traces to be lost. Therefore, a developer seeking to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1584 debug an issue in the G23M protocol stack needs to enable traces very |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1585 judiciously. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1586 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1587 GPF compressed trace hack |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1588 ========================= |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1589 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1590 TI's Windows-based GSM firmware build systems include a hack called str2ind. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1591 Seeking to reduce the fw image size by eliminating trace ASCII strings from it, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1592 and seeking to reduce the load on the RVTMUX serial interface by eliminating |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1593 the transmission time of these strings, they passed their sources through an |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1594 ad hoc preprocessor that replaces these ASCII strings with numeric indices. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1595 The compilation process with this str2ind hack becomes very messy: each source |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1596 file is first passed through the C preprocessor, then the intermediate form is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1597 passed through str2ind, and finally the de-string-ified form is compiled, with |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1598 the compiler being told not to run the C preprocessor again. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1599 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1600 TI's str2ind tool maintains a table of correspondence between the original trace |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1601 ASCII strings and the indices they've been turned into, and a copy of this table |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1602 becomes essential for making sense of GPF trace output: the firmware now emits |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1603 only numeric indices which are useless without this str2ind.tab mapping table. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1604 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1605 Our FC Magnetite build system retains the option of using str2ind, but it is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1606 disabled by default: str2ind significantly increases firmware compilation times, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1607 the resulting fw image sizes without str2ind are fine (the slight increase does |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1608 not push us over any limits), and we haven't had any issues with ASCII strings |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1609 overloading the trace interface. However, there is an additional complication |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1610 stemming from the choice of two possible G23M PS versions, one of which is a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1611 set of blob libraries: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1612 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1613 * If Magnetite is compiled in a pure TCS211 configuration using the original |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1614 blob version of G23M PS, these blobs already have str2ind indices baked into |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1615 them instead of trace ASCII strings, hence the frozen str2ind.tab file from |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1616 Openmoko that maps these indices back to strings needs to be used. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1617 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1618 * If Magnetite is compiled in a TCS2/TCS3 hybrid config without G23M blobs, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1619 then unless you enable it explicitly with USE_STR2IND=1, no str2ind will be |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1620 used at all. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1621 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1622 Our blob-free FC Selenite firmware does not support str2ind at all - we shall |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1623 stick with full ASCII string traces until and unless we run into an actual (as |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1624 opposed to hypothetical) problem with either fw image size or serial interface |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1625 load. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1626 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1627 RVTMUX command input |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1628 ==================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1629 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1630 RVTMUX is not just debug trace output: it is also possible for an external host |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1631 to send commands to the running fw via RVTMUX. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1632 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1633 Inside the fw RVTMUX input is handled by the RVT entity by way of a Nucleus |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1634 HISR. This HISR gets triggered when Rx bytes arrive at the designated UART, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1635 and it calls the UART driver to collect the input. RVT code running in this |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1636 HISR parses the message structure and figures out which fw component the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1637 incoming message is addressed to. Any fw component can register to receive |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1638 RVTMUX packets, and provides a callback function with this registration; this |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1639 callback function is called in the context of the HISR. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1640 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1641 In the original TCS211 fw there are only two components that register to receive |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1642 external host commands via RVTMUX: ETM and GPF, hence these are the only command |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1643 packet types that can be sent to this original fw. In FreeCalypso we have kept |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1644 these, and we've also added some new RVTMUX channels of our own invention. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1645 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1646 Test Mode (TM) and Enhanced Test Mode (ETM) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1647 =========================================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1648 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1649 A major use of the RVTMUX interface is sending so-called Test Mode commands |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1650 from an external host to a running GSM device. Depending on the firmware |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1651 version, a GSM device can be commanded to do any of the following things |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1652 through this mechanism: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1653 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1654 * Exercise RF test modes, e.g., transmit continuously at a set frequency and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1655 power level; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1656 * Read and write arbitrary memory locations in the Calypso ARM7 address space; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1657 * Read and write ABB chip registers; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1658 * Reboot or power off; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1659 * Access and manipulate the device's flash file system (FFS). |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1660 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1661 In the segment of history of interest to us TI has produced two different |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1662 target firmware components that can receive, interpret and act upon Test Mode |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1663 command packets: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1664 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1665 * The original Test Mode component of Layer 1, called L1TM or TML1: this |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1666 component handles all RF test modes (needed for RF calibration on device |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1667 production lines), and originally it also implemented memory and ABB register |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1668 read and write commands, and provided access to TMFFS1 (see below). In the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1669 original implementation this component registered itself as the handler for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1670 the "TM" RVTMUX channel (RVT packet type 0x14), so it would receive all TM |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1671 packets sent to the device. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1672 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1673 * Enhanced Test Mode (ETM) is a later invention. It registers itself (instead |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1674 of the old TM in L1) with RVT as the handler for the "TM" RVTMUX channel, and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1675 then provides a registration service of its own, such that various components |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1676 in the fw suite can register to receive external command packets passing |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1677 first through RVT, then through ETM, and can send responses passing through |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1678 ETM, then through RVT back to the external host. If a given fw version |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1679 contains both ETM and L1TM like TCS211 does, then L1TM registers itself with |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1680 ETM; an external host would send exactly the same binary command packets to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1681 exercise RF test modes, but inside the firmware they now pass through ETM on |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1682 their way to L1TM. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1683 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1684 The ETM_CORE module contained within ETM itself provides some low-level debug |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1685 commands: by sending the right binary command packets to the GSM device via the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1686 RVTMUX serial channel, an external host can examine or modify any memory |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1687 location and any hardware register, cause the device to reset, etc. Prior to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1688 ETM some of these functions (but not all) could be exercised through older TM3 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1689 commands, but in FreeCalypso we became familiar with the ETM versions of these |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1690 commands long before the older ones because we got the ETM component in full |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1691 source form, whereas the sole surviving copy of TCS211 that serves as our golden |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1692 reference came with L1TM in binary object form like the rest of L1, and we got |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1693 to source-reconstructing it only much later. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1694 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1695 ETM is implemented as a Riviera SWE and has its own Nucleus task; the callback |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1696 function that gets called from the RVT HISR posts received messages onto ETM's |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1697 own queue drained by its task. The ETM task gets scheduled, picks up the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1698 command posted to its queue, executes it, and sends a response message back to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1699 the external host through RVT. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1700 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1701 Because all ETM commands funnel through ETM's queue and task, and that task |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1702 won't start looking at a new command until it finished handling the previous |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1703 one, all ETM commands and responses are in strict lock-step: it is not possible |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1704 to send two commands and have their responses come in out of order, and it makes |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1705 no sense to send another ETM command prior to receiving the response to the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1706 previous one. (But there can still be debug traces or other traffic intermixed |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1707 on RVTMUX in between an ETM command and the corresponding response!) |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1708 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1709 L1TM commands get posted to the message queue of the L1A task and then executed |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1710 in that task's context. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1711 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1712 FFS access via TM/ETM |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1713 ===================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1714 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1715 One of the essential facilities provided in one form or another in all known |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1716 incarnations of the Test Mode mechanism (at least in TI's original architecture, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1717 as opposed to Motorola's bastardized version) is the ability to access and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1718 manipulate the GSM device's flash file system (FFS) that was described earlier |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1719 in this article. TI's TMFFS1 and TMFFS2 protocols provide a command and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1720 response packet interface to the FFS API functions inside the fw, and enable an |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1721 external host connected to the GSM device via the RVTMUX channel to perform |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1722 arbitrary read and write operations on the device file system. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1723 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1724 In the segment of history of interest to us TI has produced two different |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1725 and entirely incompatible versions of the TMFFS protocol: TMFFS1 and TMFFS2. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1726 Or rather, what is now called TMFFS1 was originally just TMFFS, and then came |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1727 TMFFS2. TMFFS2 works only through ETM, whereas TMFFS1 predates ETM: in the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1728 original implementation the tm_ffs() function in the FFS code was called from |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1729 L1TM code. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1730 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1731 Our copy of TCS211 reference fw includes the source for both TMFFS1 and TMFFS2; |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1732 it is theoretically possible to build a firmware image that includes both TMFFS |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1733 versions (they won't conflict because they respond to different command |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1734 packets), but it is pretty clear that TI never intended to have both enabled |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1735 at the same time. Our copy of TCS211 came with TMFFS1 enabled and we didn't |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1736 change it when we made the moko12 (leo2moko-r1) fw release for the Openmoko |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1737 community (the previous proprietary mokoN firmwares also implement TMFFS1), |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1738 but we have subsequently switched to TMFFS2 for our current Magnetite and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1739 Selenite firmwares. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1740 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1741 Our choice of TMFFS2 over TMFFS1 was driven by the need to develop our own host |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1742 tools to replace TI's original ones which we never got. We needed to develop |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1743 our own host tools for operating on GSM device FFS via one of the two TMFFS |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1744 protocols, and after studying the fw source implementing both, I (Mother |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1745 Mychaela) came to the conclusion that TMFFS2 is both more capable and more |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1746 reliable; my guess is that TMFFS1 was likely kept around only because some of |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1747 TI's crappy Weendoze host software depended on it. (See the implementation |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1748 code in chipsetsw/drivers/drv_app/ffs/board/tmffs.c in TCS211 if you would like |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1749 to judge for yourself.) Our host tool that speaks the TMFFS2 protocol is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1750 fc-fsio. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1751 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1752 GPF external command input |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1753 ========================== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1754 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1755 The other component that can receive external commands is GPF. GPF's test |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1756 interface can receive so-called "system primitives", which are ASCII string |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1757 commands parsed and acted upon by GPF, and also binary protocol stack |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1758 primitives. Remember how all entities in the G23M stack communicate by sending |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1759 messages to each other? Well, GPF's test interface allows such messages to be |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1760 injected externally as well, directed to any entity in the running fw. System |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1761 primitive commands can also be used to cause entities to send their outgoing |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1762 primitives to the test interface, either instead of or in addition to the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1763 originally intended recipient. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1764 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1765 AT commands over RVTMUX |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1766 ======================= |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1767 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1768 There is one more use to which we put the RVTMUX debug serial interface that is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1769 an original FreeCalypso invention: communicating with the AT command interpreter |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1770 (ATI). TI's original architecture assumes that if a product is to offer a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1771 standard AT command interface (the product is either a GSM/GPRS modem for which |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1772 this AT command interface is the sole mode of usage or a feature phone that |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1773 offers a data port as one of its features), then it will be presented on a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1774 dedicated UART separate from RVTMUX. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1775 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1776 However, in the case of our FreeCalypso family of projects about 2 years had |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1777 passed between our first functional GSM fw attempts in 2015 and us successfully |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1778 building our own development board in 2017; during this time we had to work on |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1779 various crippled pre-existing Calypso devices, and many of them had only one |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1780 UART practically accessible. In response to this situation we developed a way |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1781 to pass AT commands over RVTMUX. We created a new RVTMUX channel for this |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1782 interface and assigned it RVT packet type 0x1A. Packets sent from an external |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1783 host to the GSM device carry AT commands and SMS string input, whereas packets |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1784 flowing the other way carry ATI's responses to commands and asynchronous |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1785 notifications such as incoming calls. The host utility for talking AT commands |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1786 to a FreeCalypso GSM device via RVTMUX is fc-shell, described below. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1787 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1788 Now that we have built a proper FreeCalypso development board with two UARTs, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1789 the use of this AT-over-RVTMUX hack is deprecated for general usage: this hack |
14
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1790 does not support any data services (CSD or GPRS), and even for SMS it was |
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1791 crippled for a long time because maximum-length messages could not be sent in |
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1792 the more capable PDU mode until our recent extension that works around this |
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1793 limitation. However, it still comes in handy during certain casual testing |
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1794 sessions, and it is required if one needs to run our FreeCalypso firmware on |
f5ddeacbe744
TCS211-fw-arch: change from fc-target.cfg to fc-target.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
9
diff
changeset
|
1795 Mot C1xx or Pirelli DP-L10 hardware. |
0
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1796 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1797 FC host tools for talking to firmwares via RVTMUX |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1798 ================================================= |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1799 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1800 The fundamental tool for talking to running firmwares via RVTMUX is a program |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1801 called rvinterf. It runs on a Unix/Linux host machine, opens a serial port |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1802 that is expected to be connected to the RVTMUX UART on the target, and then |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1803 speaks TI's binary packet protocol on that serial port. It then performs two |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1804 functions: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1805 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1806 * If rvinterf is run in the foreground in a terminal window (or more precisely, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1807 if its default terminal output is not disabled), every packet received from |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1808 the target is decoded and printed on stdout in human-readable ASCII. For |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1809 some packets like TM/ETM responses this "human-readable" form is just a hex |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1810 dump, but the trace messages which the firmware emits on its own are printed |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1811 in truly human-readable form. This output can also be saved to a log file. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1812 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1813 * Rvinterf creates a local UNIX domain socket on the machine it is running on, |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1814 and other host tools can then connect to this socket to exchange packets with |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1815 the firmware. Client programs connected to rvinterf via this local socket |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1816 interface can register to receive copies of packets sent by the target on |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1817 specific RVTMUX channels, and they can also send arbitrary packets to the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1818 target. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1819 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1820 Our main "client" programs for actively interacting with running firmwares via |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1821 rvinterf are: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1822 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1823 fc-tmsh This utility speaks the TM/ETM protocol. It supports almost |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1824 all ETM and L1TM commands that are supported by our reference |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1825 TCS211 fw with the important exception of TMFFS; support means |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1826 that fc-tmsh can issue these commands and decode the firmware's |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1827 responses to them. fc-tmsh operates asynchronously in that the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1828 issuance of commands to the target and the display of firmware |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1829 responses are completely decoupled; this asynchronous model is |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1830 a good match for L1/RF test mode commands and simple ETM |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1831 operations, but is a poor fit for FFS manipulation. fc-tmsh's |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1832 companion fc-fsio implements FFS access via TMFFS2, and we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1833 don't have a host side implementation for TI's older TMFFS1 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1834 protocol. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1835 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1836 fc-fsio This utility speaks the TMFFS2 protocol over the TM/ETM RVTMUX |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1837 channel (same channel as used by fc-tmsh, so don't try to run |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1838 both at the same time) and implements fairly high-level FFS read |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1839 and write operations. fc-fsio is used to format and initialize |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1840 the FFS on newly made devices in our hardware manufacturing |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1841 environment, it can upload files or entire subtrees into target |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1842 device FFS, it has higher-level commands for writing some files |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1843 like the IMEI, rfcap and AT+CGxx ID strings, and it can list and |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1844 read out FFS content. Unlike fc-tmsh, fc-fsio is synchronous: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1845 it is built on command-response (send a command and expect a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1846 response) primitives, and a single user command can turn into a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1847 large number of command-response exchanges on the RVTMUX |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1848 interface. fc-fsio also implements a few non-FFS commands |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1849 because they naturally fit into this ETM synchronous model. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1850 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1851 fc-shell This tool is asynchronous like fc-tmsh, but instead of talking |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1852 and listening on the TM/ETM RVTMUX channel, it talks and listens |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1853 on GPF's channel and on the new AT-over-RVTMUX channel which we |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1854 added in FreeCalypso. fc-shell can be used to issue system |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1855 primitive commands to GPF (and to see firmware responses to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1856 them), and to talk AT commands via RVTMUX. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1857 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1858 Finally, if you only need to passively observe the firmware's debug trace output |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1859 and don't need to make any active pokes at the target, our rvtdump utility is a |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1860 stripped-down version of rvinterf (or historically its predecessor) that only |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1861 decodes and prints/logs the output from the target without sending anything to |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1862 it. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1863 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1864 Further reading |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1865 =============== |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1866 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1867 Believe it or not, some of the documentation that was written by the original |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1868 vendors of the software in question and which we've been able to locate turns |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1869 out to be fairly relevant and helpful, such that I recommend reading it. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1870 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1871 Documentation for Nucleus PLUS RTOS: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1872 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1873 ftp://ftp.freecalypso.org/pub/embedded/Nucleus/nucleus_manuals.tar.bz2 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1874 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1875 Quite informative, and fits our version of Nucleus just fine. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1876 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1877 Riviera environment: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1878 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1879 ftp://ftp.freecalypso.org/pub/GSM/Calypso/riviera_preso.pdf |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1880 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1881 It's in slide presentation form, not a detailed technical document, but |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1882 it covers a lot of points, and all that Riviera stuff described in the |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1883 preso *is* present in our fw for real, hence it should be considered |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1884 relevant. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1885 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1886 GPF documentation: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1887 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1888 https://www.freecalypso.org/LoCosto-docs/SW%20doc/frame_users_guide.pdf |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1889 https://www.freecalypso.org/LoCosto-docs/SW%20doc/vsipei_api.pdf |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1890 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1891 Very good reading, helped me understand GPF when I first reached this |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1892 part of firmware reintegration. |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1893 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1894 TCS3.x/LoCosto fw architecture: |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1895 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1896 https://www.freecalypso.org/LoCosto-docs/SW%20doc/TCS2_1_to_3_2_Migration_v0_8.pdf |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1897 ftp://ftp.freecalypso.org/pub/GSM/LoCosto/LoCosto_Software_Architecture_Specification_Document.pdf |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1898 |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1899 These TI docs focus mostly on how they changed the fw architecture from |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1900 their TCS2.x program (Calypso) to their newer TCS3.x (LoCosto), but one |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1901 can still get a little insight into the "old" TCS211 architecture they |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1902 were moving away from, which is the architecture we've adopted for |
fcd1cf531017
TCS211-fw-arch masterpiece written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1903 FreeCalypso. |