annotate cdg-hybrid/sap/gmmaa.pdf @ 220:0ed36de51973

ABB semaphore protection overhaul The ABB semaphone protection logic that came with TCS211 from TI was broken in several ways: * Some semaphore-protected functions were called from Application_Initialize() context. NU_Obtain_Semaphore() called with NU_SUSPEND fails with NU_INVALID_SUSPEND in this context, but the return value wasn't checked, and NU_Release_Semaphore() would be called unconditionally at the end. The latter call would increment the semaphore count past 1, making the semaphore no longer binary and thus no longer effective for resource protection. The fix is to check the return value from NU_Obtain_Semaphore() and skip the NU_Release_Semaphore() call if the semaphore wasn't properly obtained. * Some SPI hardware manipulation was being done before entering the semaphore- protected critical section. The fix is to reorder the code: first obtain the semaphore, then do everything else. * In the corner case of L1/DSP recovery, l1_abb_power_on() would call some non-semaphore-protected ABB & SPI init functions. The fix is to skip those calls in the case of recovery. * A few additional corner cases existed, all of which are fixed by making ABB semaphore protection 100% consistent for all ABB functions and code paths. There is still one remaining problem of priority inversion: suppose a low- priority task calls an ABB function, and some medium-priority task just happens to preempt right in the middle of that semaphore-protected ABB operation. Then the high-priority SPI task is locked out for a non-deterministic time until that medium-priority task finishes its work and goes back to sleep. This priority inversion problem remains outstanding for now.
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Apr 2021 20:55:25 +0000
parents 35f7a1dc9f7d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 ;********************************************************************************
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 ;*** File : gmmaa.pdf
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 ;*** Creation : Wed Mar 11 09:58:03 CST 2009
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 ;*** XSLT Processor : Apache Software Foundation / http://xml.apache.org/xalan-j / supports XSLT-Ver: 1
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 ;*** Copyright : (c) Texas Instruments AG, Berlin Germany 2002
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 ;********************************************************************************
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 ;*** Document Type : Service Access Point Specification
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 ;*** Document Name : gmmaa
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 ;*** Document No. : 8441.107.99.001
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 ;*** Document Date : 1999-06-22
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 ;*** Document Status: BEING_PROCESSED
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 ;*** Document Author: ANS
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 ;********************************************************************************
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 PRAGMA SRC_FILE_TIME "Thu Nov 29 09:41:58 2007"
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 PRAGMA LAST_MODIFIED "1999-06-22"
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 PRAGMA ID_AND_VERSION "8441.107.99.001"
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 VALTAB VAL_aa_timer
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 VAL DEF "value is incremented in multiples of 1 min"
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 VAL 0 GMMAA_TIMER_2_SEC "value is incremented in multiples of 2 sec"
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 VAL 1 GMMAA_TIMER_1_MIN "value is incremented in multiples of 1 min"
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 VAL 2 GMMAA_TIMER_1_DH "value is incremented in multiples of 1 decihour"
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 VAL 7 GMMAA_TIMER_DEACT "timer is deactivated"
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 VAR aa_timer "GPRS READY timer" B
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 VAL @p_gmmaa - VAL_aa_timer@
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 ; GMMAA_ESTABLISH_REQ 0x2500
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 ; GMMAA_RELEASE_IND 0x6500
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 ; GMMAA_ESTABLISH_REJ 0x6501
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 ; GMMAA_TIMER_REQ 0x2501
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 PRIM GMMAA_ESTABLISH_REQ 0x2500
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 {
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 }
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 PRIM GMMAA_RELEASE_IND 0x6500
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 {
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 }
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 PRIM GMMAA_ESTABLISH_REJ 0x6501
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 {
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 }
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 PRIM GMMAA_TIMER_REQ 0x2501
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 {
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 aa_timer ; GPRS AA-READY timer
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 }
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91
35f7a1dc9f7d cdg-hybrid: import from Magnetite
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92