LINUX.ORG.RU

s3 trio64 V+ (again)


0

0

Нашел обрывки документации (вперемежку со всяким остальным старым железом): 

http://www.oopweb.com/Assembly/Documents/InterList/Volume/PORTS.B
смотреть регистр CR67 

Bitfields for S3 Trio32/64/64V+ "CR67" Extended Miscellaneous Control 2 reg:
Bit(s)	Description	(Table P0751)
 7-4	color mode (see #P0688)
 3-2	(Trio32/Trio64) reserved (0)
 3-2	(Trio64V+) streams mode
	00 disable Streams Processor
	01 overlay secondary stream on VGA-mode background
	10 reserved
	11 full Streams Processor operation
 1	reserved (0)
 0	VCLK phase (=0 VCLK is inverted DCLK; =1 VCLK in phase with DCLK)
Note:	the streams mode should only be changed during vertical sync
	  (PORT 03DAh bit 3)

вот боюсь из-за этого note у меня все и виснет.


Пример работы этого Streams Processor:
http://www.angelfire.com/linux/tarpai/NVGA/s3/s3.html
Там кажется и код инициализации.

Другие ресурсы:
Linux kernel  >= 2.6.21
(linux-2.6.21.1/drivers/video/s3fb.c)
этот драйвер работает

MPlayer
(mplayer/libvo/vo_s3fb.c)
а вот этот - уже нет. Такой же зависон.

xf86-video-s3 and xf86-video-s3virge in Xorg git.
★★★★★

Давай, рассказывай, что у тебя виснет и при каких настройках. Сразу говорю, что в драйвере s3 инициализация stream processor (а V+ имеет stream processor?) не сделана. Но этот процессор отвечает только за режим bpp=24 бита. Для режима 16 бит он не нужен, поэтому на 800x600x16bpp работать должен. Проверяй. S3 Trio64V2 работает в этом режиме без проблем с 2D ускорением. Далее. Документации по s3 trio, в которых описан этот процессор, нет. Есть без него. Но имеется еще datasheet на S3 Virge, где этот процессор описан. Есть у меня косвенное предположение, что в S3 Trio 64V+,64V2 все тоже самое с точностью до регистров.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

800x600x16 bit и 640x480x16 bit работают. Виснет оно именно если раскомментировать недоделанную (?) инициализацию Stream Processor. (я обманул драйвер, заставив думать что у меня карточка умеет new-mmio. Она похоже действительно умеет, картинка нормальная, в логах ошибок нет. Еще добавил вызов xf86InitFBManager(pScreen, &AvailFBArea); в s3_accel.c и немного комментариев, чтобы в лог сыпались).

Но проблема в том, что я не умею обращаться с регистрами, особенно индексными, типа этого CR67. Попытка использовать outb(vgaCRIndex, 0x67); .... outb(vgaCRReg, a);

(как в примере с PCI_CHIP_968 выше по s3_driver.c) не привела ни к чему хорошему, я кажется записал один байт вместо 2-х. (проверял с помощью ф-ии S3Regdump).

Процессоры-то в virge и v64+/v2 возможно и одинаковые, но мой допустим явно не любит манипуляции с SET_*STREAM_* регистрами в выключенном состоянии. А в инициализации Virge такой трюк (сначала программирование регистров управления, потом включение) вроде бы проходит.

В принципе на моей 1Мб карте yuy2 оверлей не поможет, пытаюсь запустить чисто ради спортивного интереса. А вот на v2 с 2Мб памяти может и будет что интересное.

Andrew-R ★★★★★
() автор топика
Ответ на: комментарий от Andrew-R

Я думаю, что если бы все, что написано в s3_video.c работало, то его 
бы не закомментировали. Никто не знает, работает этот код или нет. 
Судя по тому, что при сборке (а я писал для xorg последний патч по 
сборке этого драйвера) этот файл не был даже не был в прежнем списке 
для системы imake. Аналогично я сделал и Makefile.am.


>Но проблема в том, что я не умею обращаться с регистрами, особенно 
индексными, типа этого CR67. Попытка использовать outb(vgaCRIndex, 
0x67); .... outb(vgaCRReg, a);

Не понял, а в чем проблема? Ты же все правильно написал: сначала 
заносится номер регистра в индексный, а потом записывается значение.


>Процессоры-то в virge и v64+/v2 возможно и одинаковые, но мой 
допустим явно не любит манипуляции с SET_*STREAM_* регистрами в 
выключенном состоянии. А в инициализации Virge такой трюк (сначала 
программирование регистров управления, потом включение) вроде бы 
проходит.


Я начинал работать с этим кодом, но потом появились другие дела. 
Последний раз я что-то пробовал в мае делать. Сейчас не вспомню, на 
чем остановился. Задача ставилась так: добавить поддержку streams 
processor, добавить xvideo, добавить режим 1024x768@16bpp, добавить 
DPMS. Последние два пункта я сделал. Если интересно, вот код для DPMS 
(его еще в драйвере нет). Замени старый код на этот. Заодно проверь, 
работает ли этот код для V+. На V2 работает.


static void
S3DisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode,
                            int flags)
{
     S3Ptr pS3 = S3PTR(pScrn);
     switch (pS3->Chipset) {
     case PCI_CHIP_TRIO64V2_DXGX:
     case PCI_CHIP_TRIO:          /* Probably others too - need data */
     {
          int srd;
      
          outb(0x3c4, 0x08);
          outb(0x3c5, 0x06);      /* unlock extended sequence registers */

          outb(0x3c4, 0x0d);
          srd = inb(0x3c5) & 0xf;  /* clear the sync control bits */
  
          switch (PowerManagementMode) {
          case DPMSModeOn:
               /* Screen: On; HSync: On, VSync: On */
               break;
          case DPMSModeStandby:
               /* Screen: Off; HSync: Off, VSync: On */
               srd |= 0x10;
               break;
          case DPMSModeSuspend:
               /* Screen: Off; HSync: On, VSync: Off */
               srd |= 0x40;
               break;
          case DPMSModeOff:
               /* Screen: Off; HSync: Off, VSync: Off */
               srd |= 0x50;
               break;
          }
          outb(0x3c4, 0x0d);
          outb(0x3c5, srd);
     }
     default:
          vgaHWDPMSSet(pScrn, PowerManagementMode, flags);
     }
}

Zubok ★★★★★
()
Ответ на: комментарий от Andrew-R

>Процессоры-то в virge и v64+/v2 возможно и одинаковые, но мой допустим явно не любит манипуляции с SET_*STREAM_* регистрами в выключенном состоянии. А в инициализации Virge такой трюк (сначала программирование регистров управления, потом включение) вроде бы проходит.

Я как раз на этом в последний раз и остановился. Переписал процедуру инициализации streams, но, кажется, я неправильно записывал в регистры streams. И на этом как-то стопорнулся и пока не возвращался. Дело в том, что запись туда осуществляется через NEW_MMIO. И я просто еще не проверял корректность записи туда. Надо бы вернуться и закончить начатое дело. :)

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

вот сейчас тестирую. (на чистой версии xf86-video-s3 + этот DPMS код)

Только у меня оно вроде и так работало, может через VESA BIOS (?). Я свои модификации перетащил на рабочую машину, вместе с логом X-ов и lspci -v. Куда послать? (могу на pastebin.ca)

Andrew-R ★★★★★
() автор топика
Ответ на: комментарий от Andrew-R

>Только у меня оно вроде и так работало, может через VESA BIOS (?).

Не, так оно не работало. Там был какой-то умолчательный метод, который просто гасил экран, но не управлял питанием монитора. Можно проверить при помощи xset dpms force (standby | suspend | off) с патчем и без него. С моим патчем все ок: в какой режим прошу перейти, в такой и переходит, сообщая это перед переходом в режим.

Патчи гляну.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Да, и надо опцию Option "DPMS" в xorg.conf поставить, разумеется.

Zubok ★★★★★
()
Ответ на: комментарий от Andrew-R

Посмотрел. Я не смотрел только на s3_accel. Глянул на инициализацию streams. Она слишком сумбурная у тебя. Много закомментировано, а Stride вообще почему-то 0x500, когда он должен быть для 800x600@16bpp равен 800*2=0x640. Давай вот что. Проще будет, если я тебе вышлю документацию по s3trio в виде ascii-файла (без описания streams) и 400-страничную документацию на S3 Virge, которую мне любезно предоставил Alex Deucher. Там по Streams Processor исчерпывающая информация. Там вообще очень много схожего. Инициализация также описана. 11Мб в почту твою пролезет?

Zubok ★★★★★
()
Ответ на: комментарий от Andrew-R

Ушло. Проверяй. В mail.ru лимит на атач 30 Mb. Должно все пролезть.

Zubok ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.