FreeCalypso > hg > fc-tourmaline
annotate doc/Nucleus-change @ 75:8697f358f505
backlight rework: Condat light driver accepts levels
The present change is another intermediate step on the path toward
new FreeCalypso backlight handling. At this intermediate step the
Condat light driver accepts 0-255 backlight levels driven by MFW,
and puts them out on PWL on Luna development boards. At the same
time on C139 it is now possible to turn on the display backlight
with or without the keypad bl - the lsb of the 0-255 backlight level
controls the keypad bl.
MFW presently drives only 0 and 255 backlight levels, thus there is
no visible behavioral change yet - but the plan for subsequent stages
of this backlight rework is to add a dimmed backlight state
(no keypad bl on C139) during active calls.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 24 Oct 2020 20:44:04 +0000 |
parents | a1799f6d6aa7 |
children |
rev | line source |
---|---|
54
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 The specific integration of ATI Nucleus PLUS RTOS in TI's stable TCS211 fw |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 (which served as the baseline for several vendors' production fw) exhibits one |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 hair-raising bug. While we don't know for sure where and how they maintained |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 Nucleus library sources for compilation (the version we got has them censored |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 out), we do see that Nucleus header files (nucleus.h and ??_defs.h) exist in |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 two different locations in the source tree in two different versions: |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 * One version exists under chipsetsw/os/nucleus |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 * The other version exists under gpf/inc/nuc & gpf/inc/nuc/arm7 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 The two versions of these header files under these two paths in TCS211 are not |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 the same! The main nucleus.h header file is the same in both places, cs_defs.h |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 and tm_defs.h versions differ only in comments, but tc_defs.h is the real |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 kicker: the version under gpf/inc/nuc has an extra field added to the TC_HCB |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 aka NU_HISR structure, making this structure one word longer than in the other |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 version! More specifically, in ATI's original Nucleus this structure is 22 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 words long with 4 unused dummy words at the end; TI's GPF version adds a fifth |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 dummy word (thankfully toward the end, not shifting any actually-used members |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 of the struct), putting the total struct size at 23 words. |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 It would be one thing if TI had made this change consistently, but they didn't: |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 some modules were compiled with one version of the headers and got the 22-word |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 version of the struct, while other modules were compiled with the other header |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 file version and got the 23-word version of the struct. How can their fw work |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 with this bug in it? Answer: TCS211 fw works despite this Nucleus integration |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 bug because: |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 * None of the actually-used members of the struct change offsets between the |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 two versions; |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 * Some places in the code have 22-word structs allocated in memory while other |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 places have 23-word structs, but when they pass pointers to these structs to |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 Nucleus API functions, those functions don't access past the actually-used |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 part at the beginning (the part before dummy words), and they never do |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 anything like zeroing out the full size of the expected struct. |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 * The only place in TCS211 fw where the total size of the struct matters is |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 where NU_HISR is embedded in another structure, and there is one such place |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 in GPF. Here breakage would result if different modules using these structs |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 and arrays were compiled with different header file versions, but all modules |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 that touch this part are compiled with the GPF version of nucleus.h, NU_DEBUG |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 and tc_defs.h. |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 Needless to say, resolving this bogosity has been an important part of |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 FreeCalypso firmware deblobbing. Naturally the most ideal solution would have |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 been to remove the bogus extra word added by TI and consistently use the |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 original 22-word struct everywhere, but there is one further complication: I |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 (Mother Mychaela) don't feel comfortable with moving away from the original blob |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 version of the OSL component of GPF, and these COFF objects have been compiled |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 with the 23-word version of TC_HCB aka NU_HISR. |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 The following alternative approach has been implemented in FC Tourmaline: |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 * The new source version of Nucleus by Comrade XVilka has been checked in under |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 src/nucleus, and this new source version is the one we are using instead of |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 TI's binary object version. |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 * The new Nucleus header files src/nucleus/nucleus.h and src/nucleus/??_defs.h |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 are the only ones used in Tourmaline - both old versions have been removed |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 from active -I include paths. |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 * The new src/nucleus/tc_defs.h header file has been patched to replicate TI's |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 23-word version of TC_HCB aka NU_HISR, and the NU_HISR_SIZE definition in |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 src/nucleus/nucleus.h has also been adjusted to match. |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 Thus we are using the 23-word version of TC_HCB aka NU_HISR everywhere, with 5 |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 dummy words at the end rather than 4, adding 4 extra bytes of wasted RAM space |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 to every instance of this struct throughout the firmware - but there are only a |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 small number of these instances, thus the waste is negligible. In return we |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 gain 100% consistency (the same version of the struct is used everywhere in our |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 fw), and we retain the ability to keep the original OSL blobs which I am not |
a1799f6d6aa7
doc/Nucleus-change article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 ready to give up. |