1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>libreboot tutorials</title>
<style type="text/css">
@import url('../css/main.css');
</style>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="glugman">
<meta name="description" content="tutorials for libreboot, the reboot library.">
<meta name="robots" content="all">
</head>
<body>
<div class="section">
<h1 id="pagetop">Development notes (old/obsolete notes)</h1>
<p>
For current notes, see <a href="index.html">index.html</a>.
</p>
<p>
These are old (obsolete) notes that mare kept because they might become useful again in the future.
</p>
</div>
<div class="section">
<h1>Table of contents</h1>
<ul>
<li><a href="#x60_native_notes">X60 native graphics initialization (backlight controls)</a></li>
<li><a href="#t60_native_notes">T60 native graphics initialization (backlight controls)</a></li>
<li><a href="#5320_kernel312fix">i945: 3D fix (based on 5927) for kernel 3.12+ on 5320</a></li>
<li><a href="#x60_cb5927_testing">i945/x60: coreboot 5927 testing (3D fix for kernel 3.12+ on replay code)</a></li>
</ul>
</div>
<div class="section">
<h1 id="x60_native_notes">X60 native graphics initialization (with backlight controls)</h1>
<p>
<b>
This is now obsolete. A better way was found (included in libreboot): <a href="http://review.coreboot.org/#/c/6731/">http://review.coreboot.org/#/c/6731/</a>
</b>
</p>
<p>
<b><i>Also check <a href="#5320_kernel312fix">#5320_kernel312fix</a> (to fix 3D on kernel 3.12/higher)</i></b>
</p>
<p>
<b>The fix below was done on 5320/6 (from review.coreboot.org) but should work just fine on later versions of 5320.</b>
</p>
<p>
Native gpu init + backlight controls! (Fn keys). Also confirmed on X60 Tablet (1024x768) and X60 Tablet (1400x1050)
</p>
<p>
<b>Add backlight controls:</b> in <i>src/mainboard/lenovo/x60/devicetree.cb</i>, change <b>gpu_backlight</b> to <b>0x879F879E</b>
</p>
<p>
That's all! <b>This has also been backported into libreboot 5th release (line 1233 in src/mainboard/lenovo/x60/i915io.c)</b>. GNUtoo (Denis Carikli)
told me about the register <b>BLC_PWM_CTL</b> and that you could set it to control backlight. I read that address using devmem2 while running the VBIOS:<br/>
<b># devmem2 0xe4361254 w</b>
</p>
<p>
The change is also included in libreboot 6.
</p>
<p>
When doing this, it gave back that value. The same trick was used to get backlight controls for T60 (see <a href="#t60_native_notes">#t60_native_notes</a>).
</p>
<h2>Further notes</h2>
<p>
Reading <b>0xe4361254</b> (address) in Lenovo BIOS always yields FFFFFFFF, even when writing to it (and writing to it doesn't affect brightness controls).
'mtjm' on IRC found that the buttons (Fn keys) control /sys/class/backlight/acpi_video0 which has no affect on 61254 (BLC_PWM_CTL). This person says
intel_backlight has different values and uses the register. devmem2 works, needs checking <b>lspci -vv</b> for where the memory is mapped,
which is different than on coreboot; mtjm found that it was 0xec061254 on his system (X60 Tablet), and the register value is different too.
<b>This is relevant, because we still don't know how backlight controls are actually handled. We got it working by accident. We need to know more.</b>.
</p>
<p>
Intel-gpu-tools may prove useful for further debugging: <a href="http://cgit.freedesktop.org/xorg/app/intel-gpu-tools/">http://cgit.freedesktop.org/xorg/app/intel-gpu-tools/</a>
</p>
<p>
mtjm says 0xe4300000 is an MMIO region of the gpu (lspci -vv shows it), 0x61254 (BLC_PWM_CTL) is a documented register. Searching the kernel driver for backlight
shows that in intel_panel.c this register is used (there is an XXX comment about finding the right value, where recent kernels get it from.
</p>
<p>
What we want to do is calculate a good value, instead of setting it in devicetree.cb. mtjm says about backlight physics:
it has a light source , uses pulse width modulation (PWM) to turn it on/off, dimming is done by spending less time on.
<b>Note: this may not be correct; this person says that their understanding is based on how the Lenote yeeloong works</b>.
</p>
<p>
mtjm goes on to say, that the register specifies the frequency used for PWM in its depending on the GPU core frequency, so it
might be possible to calculate it without hardcoded laptop-specific values. Therefore, I am supposed to find out the 'display core frequency'
(mtjm says there might be a register for it; also, it might be in 5320 or the replay code) and the PWM modulation frequency.
https://en.wikipedia.org/wiki/Backlight#Flicker_due_to_backlight_dimming
</p>
<p>
phcoder (Vladimir Serbinenko) who is author of 5320 (review.coreboot.org) talks about 'duty cycle limit' and 'flickering frequency'.
</p>
<p><a href="#pagetop">Back to top of page</a></p>
</div>
<div class="section">
<h1 id="t60_native_notes">T60 native graphics initialization (with backlight controls)</h1>
<p>
<b>
This is now obsolete. A better way was found (included in libreboot): <a href="http://review.coreboot.org/#/c/6731/">http://review.coreboot.org/#/c/6731/</a>
</b>
</p>
<p>
<b><i>Also check <a href="#5320_kernel312fix">#5320_kernel312fix</a> (to fix 3D on kernel 3.12/higher)</i></b>
</p>
<p>
<b>The fix below was done on an earlier version of 5345 changeset (review.coreboot.org), but should work on the current version. it is included in libreboot 6</b>
</p>
<p>
<b>Add backlight controls:</b> in <i>src/mainboard/lenovo/t60/devicetree.cb</i>, change <b>gpu_backlight</b> to <b>0x58BF58BE</b>
</p>
<p>
Hold on! Check <a href="../misc/index.html#get_edid_panelname">../misc/index.html#get_edid_panelname</a> to know what LCD panel you have. This is important for the next step!
</p>
<h2>Supported panels</h2>
<p>
<a href="../hcl/index.html#supported_t60_list">../hcl/index.html#supported_t60_list</a>.
</p>
<p>
See <a href="index.html#lcd_i945_incompatibility">index.html#lcd_i945_incompatibility</a>.
</p>
<p><a href="#pagetop">Back to top of page</a></p>
</div>
<div class="section">
<h1 id="5320_kernel312fix">i945: 3D fix (based on 5927) for kernel 3.12+ on 5320</h1>
<p>
<b>
This is now obsolete. Merged in coreboot: <a href="http://review.coreboot.org/#/c/5927/">http://review.coreboot.org/#/c/5927/</a>
</b>
</p>
<p><b>This needs to be rewritten (or better organized, or deleted?)</b>. This is also now included in libreboot 6 (using the proper way, not the 7c0000 method which was a hack)</p>
<p>
<b>This was done on 5320/6 so far. The fix below is for 5320/6 which is now obsolete. This needs to be re-done for the latest version
of 5320. The fix below is (in practise) only for reference, therefore.</b>
</p>
<p>
See <a href="#x60_cb5927_testing">#x60_cb5927_testing</a> for the original (and current) fix, for the replay code. Now we want
to implement that on top of <a href="http://review.coreboot.org/#/c/5320">http://review.coreboot.org/#/c/5320</a>
which is the current code for native graphics initialization on i945.
</p>
<p>
src/northbridge/intel/i945/gma.c (using the 7c0000 hack) on 5320: <a href="dumps/5320_7c0000_gma.c">5320_7c0000_gma.c</a> (rename it to gma.c,
replacing the current one).
</p>
<p>
The above is a hack (as is the original). A better (more correct) method is implemented in later versions of 5927, so
that should also be adapted for 5320. For now, you can use the above fix.
</p>
<p>
The correct way to do it is to set gtt address to (end of stolen memory - gtt size), which is what later versions of 5927 do (successfully).
</p>
<p>
Here is some debugging output using intel_gpu_tools v1.2-1 (from trisquel repositories) using tool "intel_gtt":
</p>
<ul>
<li>
Trisquel 6. kernel 3.14.4:
<ul>
<li>with libreboot 5th release (using the 7c0000 gtt hack from 5927/3): <a href="http://paste.debian.net/104306">http://paste.debian.net/104306</a></li>
<li>with coreboot+vgarom: <a href="http://paste.debian.net/104309">http://paste.debian.net/104309</a></li>
</ul>
</li>
<li>
Trisquel 6. kernel 3.2.0-60 (from Trisquel repositories):
<ul>
<li>with coreboot (no vbios or native init): <a href="http://paste.debian.net/104341">http://paste.debian.net/104341</a></li>
</ul>
</li>
</ul>
<p><a href="#pagetop">Back to top of page</a></p>
</div>
<div class="section">
<h1 id="x60_cb5927_testing">i945/X60: Coreboot 5927 testing (3D fix for kernel 3.12+ on replay code)</h1>
<p>
<b>
This is now obsolete. Merged in coreboot: <a href="http://review.coreboot.org/#/c/5927/">http://review.coreboot.org/#/c/5927/</a>
</b>
</p>
<p><b>The latest version as-is (5927/11) has not been tested by me yet. Always boot with 'drm.debug=0x06' kernel parameter when testing this.</b></p>
<p>
This is the fix for 3D on kernel 3.12 and higher on i945 (ThinkPad X60 in this case). This is for the replay code.
Libreboot 5th release has a version of this backported already (based on 5927/3 using the '7c0000' hack).
</p>
<p>
<b>
The replay code is obsolete (see 5320 changeset on review.coreboot.org for better version
which supports more systems/screens, and then 5345 for T60). Information here for reference since that is where the fix was first applied.
</b>
</p>
<p>
Read the information on <a href="http://review.coreboot.org/#/c/5927/">http://review.coreboot.org/#/c/5927/</a>.
</p>
<p>
For historical purposes, here is a collection of IRC logs that once existed on this page, related to the issue:
<a href="dumps/kernel312_irc">kernel312_irc</a>.
</p>
<p>
PGETBL_CTL differs between VBIOS (-) and native graphics init (+).<br/>
- PGETBL_CTL: 0x3ffc0001<br/>
+ PGETBL_CTL: 0x3f800001
</p>
<p>GTT (graphics translation table) size is PGETBL_save, max 256 KiB. BSM (Base of Stolen Memory) is given by the bios.</p>
<ul>
<li>5927/7: <a href="dumps/5927_7.tar.gz">5927_7.tar.gz</a> (GRUB graphics are correct now, and 3D still works)</li>
<li>5927/6: <a href="dumps/5927_6.tar.gz">5927_6.tar.gz</a> (GRUB graphics still corrupt, 3D/everything still works after GRUB)</li>
<li>5927/5: <a href="dumps/5927_5.tar.gz">5927_5.tar.gz</a> (GRUB graphics corrupt, 3D/everything still works after GRUB)</li>
<li>5927/3: <a href="dumps/5927_3.tar.gz">5927_3.tar.gz</a> (3D still works! kernel 3.14.4) - the '7c0000' hack</li>
<li>5927/2: <a href="dumps/5927_2.tar.gz">5927_2.tar.gz</a> (3D works! kernel 3.14.4) - the '7c0000' hack</li>
<li>
5927/1 (didn't fix the 3D issue):
<ul>
<li><a href="dumps/5927_cbmemc">cbmem -c</a></li>
<li><a href="dumps/5927_crashdump">/sys/class/drm/card0/error</a></li>
<li><a href="dumps/5927_config">.config</a></li>
</ul>
</li>
</ul>
<p><a href="#pagetop">Back to top of page</a></p>
</div>
<div class="section">
<p>
Copyright © 2014, 2015 Minifree Ltd <info@minifree.org><br/>
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license can be found at <a href="../gfdl-1.3.txt">../gfdl-1.3.txt</a>
</p>
<p>
Updated versions of the license (when available) can be found at
<a href="https://www.gnu.org/licenses/licenses.html">https://www.gnu.org/licenses/licenses.html</a>
</p>
<p>
UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
</p>
<p>
TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
</p>
<p>
The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
</p>
</div>
</body>
</html>
|