<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>38777</bug_id>
          
          <creation_ts>2020-08-02 00:34:34 +0300</creation_ts>
          <short_desc>xorg устанавливает малый неверный размер матрицы</short_desc>
          <delta_ts>2020-08-27 05:04:10 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>xorg-server</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>regression</keywords>
          <priority>P3</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Speccyfighter">zxwarior</reporter>
          <assigned_to name="Valery Inozemtsev">shrek</assigned_to>
          <cc>asy</cc>
    
    <cc>shrek</cc>
    
    <cc>slazav</cc>
    
    <cc>stranger573</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>191659</commentid>
    <comment_count>0</comment_count>
    <who name="Speccyfighter">zxwarior</who>
    <bug_when>2020-08-02 00:34:34 +0300</bug_when>
    <thetext>Всем доброго

В p9 xorg-server на intel kms через intel_drv устанавливает неверный заниженный размер активной зоны матрицы ноутбука Lenovo G50-80. Устанавливая его вместо 344x194, на 340x190 миллиметров. В результате приложение запускаемое в полный экран на рекомендуемом максимальном разрешении, например 0ad, рассыпает графику в мозаику. Возврат графики в номальное состояние, убить процесс по kill из tty.

В p8 на intel kms через intel_drv этой ошибки нет и xorg-server правильно устанавливает верный размер активной зоны матрицы в 344x194 mm и правильный 100 dpi.

Даташит на матрицу Lenovo G50-80:
LG Display LP156WHB-TPC1 Lenovo G50-80
http://www.datasheet-pdf.com/PDF/LP156WHB-TPC1-Datasheet-LG-929726

VESA EEDID Version 1, Revision 4:
https://glenwing.github.io/docs/VESA-EEDID-A2.pdf


Множество выбросов, включая выбросы X-сервера и разбор edid Lenovo G50-80:

Сравнение kms intel_drv и kms modesetting_drv в p9 и p8, с выбросами xdpyinfo и логами X-сервера, плюс скриншоты и ссылка на даташит LG Display LP156WHB-TPC1 Lenovo G50-80:
https://forum.altlinux.org/index.php?topic=13216.msg351069#msg351069

Разбор edid LP156WHB-TPC1, плюс грепаный лог X-сервера на p9 intel kms intel_drv:
https://forum.altlinux.org/index.php?topic=13216.msg351089#msg351089

Некоторые соображения в отношении неверных установок X-сервером с p9 kms intel_drv и кратко упоминанием сравнения этого же, но на p8:
https://forum.altlinux.org/index.php?topic=13216.msg351090#msg351090


Основная суть:

Активная зона матрицы LG Display LP156WHB-TPC1 Lenovo G50-80:
1366x768, 344.232x193.536 mm, 0.252 mm точка

В p9 с драйвером intel_drv, X-сервер устанвливает неверный физический размер активной зоны матрицы:

$ sed -n &apos;86p; 89p; 143,144p; 1044,1045p&apos; /var/log/Xorg.0.log
[    41.850] (--) intel(0): Output eDP1 using initial mode 1366x768 on pipe 0
[    41.852] (==) intel(0): DPI set to (96, 96)
[    42.472] (II) intel(0): switch to mode 1366x768@60.0 on eDP1 using pipe 0, position (0, 0), rotation normal, reflection none
[    42.480] (II) intel(0): Setting screen physical size to 340 x 190
[    45.964] (II) intel(0): switch to mode 1366x768@60.0 on eDP1 using pipe 0, position (0, 0), rotation normal, reflection none
[    45.989] (II) intel(0): Setting screen physical size to 340 x 190

В результате чего, приложение запускаемое в полный экран на максимальном рекомендуемом разрешении, рассыпает графику в мозаику.


Байты 12, 13, 14, descriptor 1, 

# cat /sys/class/drm/card0-eDP-1/edid &gt; edid-LP156WHB-TPC1_intel_drv.bin

# edid-decode edid-LP156WHB-TPC1_intel_drv.bin
Extracted contents:
header:          00 ff ff ff ff ff ff 00
serial number:   30 e4 68 04 00 00 00 00 00 18
version:         01 04
basic params:    95 22 13 78 ea
chroma info:     05 f5 94 58 56 92 28 1e 50 54
established:     00 00 00
standard:        01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
descriptor 1:    d0 1d 56 f4 50 00 16 30 30 20 35 00 58 c2 10 00 00 19
descriptor 2:    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
descriptor 3:    00 00 00 fe 00 4c 47 20 44 69 73 70 6c 61 79 0a 20 20
descriptor 4:    00 00 00 fe 00 4c 50 31 35 36 57 48 42 2d 54 50 43 31
extensions:      00
checksum:        b3

Manufacturer: LGD Model 468 Serial Number 0
Made week 0 of 2014
EDID version: 1.4
Digital display
6 bits per primary color channel
DisplayPort interface
Maximum image size: 34 cm x 19 cm
Gamma: 2.20
DPMS levels: Standby Suspend Off
Supported color formats: RGB 4:4:4, YCrCb 4:4:4
First detailed timing is preferred timing
Established timings supported:
Standard timings supported:
Detailed mode: Clock 76.320 MHz, 344 mm x 194 mm
               1366 1414 1446 1610 hborder 0
                768  771  776  790 vborder 0
               -hsync -vsync
Manufacturer-specified data, tag 0
ASCII string: LG Display
ASCII string: LP156WHB-TPC1
Checksum: 0xb3 (valid)
EDID block does NOT conform to EDID 1.3!
	Missing name descriptor
	Missing monitor ranges


содержат в edid верный размер активной зоны матрицы:

$ ./base.sh 0x58
hex=58    dec=88    oct=130    bin=1011000

$ ./base.sh 0xc2
hex=C2    dec=194    oct=302    bin=11000010

$ ./base.sh 0x10
hex=10    dec=16    oct=20    bin=10000

$ echo &apos;88+256&apos; | bc -l # байт 12 + полубайт байта 14 (младший бит старшего байта, для байтов 12 и 13) из descriptor 1
344


Но в p9 с kms intel_drv, активную зону матрицы, X-сервер устанавливает в 340x190 mm. Что неверно и меньше реального 344x194 mm. И предположительно, это значение берётся из второго и третьего байта basic params из edid-decode. Которые хранятся как целочисленное значение в сантиметрах по адресам 15h 16h (спецификация), что правильно для спецификации VESA EEDID 1R4, но неправильно для установки физического размера активной зоны матрицы.


При этом X-сервер в p9, установленный размер матрицы в конфиге, игнорирует:

$ cat /etc/X11/xorg.conf.d/10-monitor.conf 
# Generated by xsetup

Section &quot;Monitor&quot;
    Identifier &quot;Monitor0&quot;
    DisplaySize 344 194
EndSection

Section &quot;Device&quot;
    Identifier &quot;Card0&quot;
    Option &quot;SwapbuffersWait&quot; &quot;false&quot;
    Driver &quot;intel&quot;
EndSection

устанавливая Setting screen physical size to 340 x 190


В p8 это значение, X-сервер с этим же драйвером, устанавливает верно в 344x194 mm с правильным dpi для этой матрицы:

$ sed -n &apos;81p; 84,85p; 123,124p; 269,271p&apos; /var/log/Xorg.0.log
[    32.851] (--) intel(0): Output eDP1 using initial mode 1366x768 on pipe 0
[    32.852] (**) intel(0): Display dimensions: (344, 194) mm
[    32.852] (**) intel(0): DPI set to (100, 100)
[    33.416] (II) intel(0): switch to mode 1366x768@60.0 on eDP1 using pipe 0, position (0, 0), rotation normal, reflection none
[    33.430] (II) intel(0): Setting screen physical size to 344 x 194
...


Ошибка тестировалась и анализировалась на ноутбуке Lenovo G50-80 в системах на alt-p8-sysv-xfce и alt-p9-xfce-sysv.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191660</commentid>
    <comment_count>1</comment_count>
    <who name="Valery Inozemtsev">shrek</who>
    <bug_when>2020-08-02 13:13:51 +0300</bug_when>
    <thetext>Удалите /etc/X11/xorg.conf.d/10-monitor.conf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191661</commentid>
    <comment_count>2</comment_count>
    <who name="Speccyfighter">zxwarior</who>
    <bug_when>2020-08-02 14:01:16 +0300</bug_when>
    <thetext>(Ответ для Valery Inozemtsev на комментарий #1)
&gt; Удалите /etc/X11/xorg.conf.d/10-monitor.conf

Удаление 10-monitor.conf не устранит ошибку, а заменит intel_drv на modesetting_drv.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192036</commentid>
    <comment_count>3</comment_count>
    <who name="Speccyfighter">zxwarior</who>
    <bug_when>2020-08-25 22:47:24 +0300</bug_when>
    <thetext>Эта ошибка пересекается с багом #38841, в котором parse-edid возвращает такой же неверный размер активной зоны дисплея в 340 x 190 mm, байтами 15h 16h edid, что неверно и не соответствует истинному размеру экрана в 344 x 194 mm дисплея LP156WHB-TPC1. Поскольку байты 15h 16h edid, это размер экрана в сантиметрах, округлённый до ближайшего сантиметра (описание двух байтов разделом 3.6.2 спецификации VESA E-EDID Release 1, Revision 4).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192039</commentid>
    <comment_count>4</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2020-08-26 08:34:51 +0300</bug_when>
    <thetext>(In reply to Speccyfighter from comment #0)

&gt; При этом X-сервер в p9, установленный размер матрицы в конфиге, игнорирует:

Такое впечатление у меня тоже сложилось при попытке избавиться от bug 36470. Хотя что не осень понятно - как оно там у меня потом правильно работает после логина.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192047</commentid>
    <comment_count>5</comment_count>
    <who name="">stranger573</who>
    <bug_when>2020-08-26 20:39:06 +0300</bug_when>
    <thetext>(Ответ для Speccyfighter на комментарий #0)

&gt; При этом X-сервер в p9, установленный размер матрицы в конфиге, игнорирует:

Если Identifier &quot;Monitor0&quot;, то игнорирует.

Если:
Section &quot;Monitor&quot;
    Identifier &quot;&lt;default monitor&gt;&quot;
    DisplaySize 344 194
EndSection
Вполне себе принимает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192048</commentid>
    <comment_count>6</comment_count>
    <who name="">stranger573</who>
    <bug_when>2020-08-26 20:45:03 +0300</bug_when>
    <thetext>Похоже попутно ещё и синтаксис в конфигах разломали.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192050</commentid>
    <comment_count>7</comment_count>
    <who name="Speccyfighter">zxwarior</who>
    <bug_when>2020-08-27 05:04:10 +0300</bug_when>
    <thetext>(Ответ для stranger573 на комментарий #5)
&gt; (Ответ для Speccyfighter на комментарий #0)
&gt; 
&gt; &gt; При этом X-сервер в p9, установленный размер матрицы в конфиге, игнорирует:
&gt; 
&gt; Если Identifier &quot;Monitor0&quot;, то игнорирует.
&gt; 
&gt; Если:
&gt; Section &quot;Monitor&quot;
&gt;     Identifier &quot;&lt;default monitor&gt;&quot;
&gt;     DisplaySize 344 194
&gt; EndSection
&gt; Вполне себе принимает.

Спасибо!
Так работает, размер экрана и dpi устанавливается, оба верные, те, которые и должны быть:

$ cat /etc/X11/xorg.conf.d/10-monitor.conf
Section &quot;Monitor&quot;
    Identifier &quot;&lt;default monitor&gt;&quot;
    DisplaySize 344 194
EndSection

Section &quot;Device&quot;
    Identifier &quot;Card0&quot;
    Option &quot;SwapbuffersWait&quot; &quot;false&quot;
    Driver &quot;intel&quot;
EndSection


$ sed -n &apos;145,146p&apos; /var/log/Xorg.0.log
[    41.503] (II) intel(0): switch to mode 1366x768@60.0 on eDP1 using pipe 0, position (0, 0), rotation normal, reflection none
[    41.514] (II) intel(0): Setting screen physical size to 344 x 194

$ xdpyinfo | grep -B2 resol
screen #0:
  dimensions:    1366x768 pixels (344x194 millimeters)
  resolution:    101x101 dots per inch</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>