The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

NVIDIA отказывается от дальнейшего развития открытого драйве..., opennews (ok), 27-Мрт-10, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


54. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +/
Сообщение от cobOLD (?), 28-Мрт-10, 18:24 
Капитан ОЙчевидность ? 8)

Не поленитесь заглянуть в nidia.c... Увы и ах - максимум NV_ARCH_40 & GF79xx.

Ответить | Правка | Наверх | Cообщить модератору

55. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +/
Сообщение от cobOLD (?), 28-Мрт-10, 18:29 
nvidia.c - sorry

Ответить | Правка | Наверх | Cообщить модератору

56. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +/
Сообщение от pavlinux (ok), 28-Мрт-10, 18:53 
>Капитан ОЙчевидность ? 8)
>
>Не поленитесь заглянуть в nidia.c... Увы и ах - максимум NV_ARCH_40 &
>GF79xx.

Дык, а руки на что

diff -u nvidia//nv_hw.c /tmp/nvidia//nv_hw.c                                                                                
--- nvidia//nv_hw.c     2010-03-15 19:09:39.000000000 +0300                                                                  
+++ /tmp/nvidia//nv_hw.c        2010-03-28 18:50:25.871159601 +0400                                                          
@@ -82,6 +82,8 @@                                                                                                            
        if (par->Architecture == NV_ARCH_40)                                                                                
                NV_WR32(par->PRAMDAC, 0x0300, NV_RD32(par->PRAMDAC, 0x0300));                                                
                                                                                                                            
+       if (par->Architecture == NV_ARCH_50)                                                                                
+               NV_WR32(par->PRAMDAC, 0x0abc, NV_RD32(par->PRAMDAC, 0xabc));                                                
        return (cur & 0x01);                                                                                                
}                                                                                                                          
                                                                                                                            
@@ -143,7 +145,32 @@                                                                                                        
{                                                                                                                          
        unsigned int pll, N, M, MB, NB, P;                                                                                  
                                                                                                                            
-       if (par->Architecture >= NV_ARCH_40) {                                                                              
+       if (par->Architecture >= NV_ARCH_50) {                                                                              
+               pll = NV_RD32(par->PMC, 0xabcd);                                                                            
+               P = (pll >> 16) & 0x07;                                                                                      
+               pll = NV_RD32(par->PMC, 0xabcd);                                                                            
+               M = pll & 0xFF;                                                                                              
+               N = (pll >> 8) & 0xFF;                                                                                      
+               if (((par->Chipset & 0xfff0) == 0xklmn) ||                                                                  
+                   ((par->Chipset & 0xfff0) == 0xklmn)) {                                                                  
+                       MB = 1;                                                                                              
+                       NB = 1;                                                                                              
+               } else {                                                                                                    
+                       MB = (pll >> 16) & 0xFF;                                                                            
+                       NB = (pll >> 24) & 0xFF;                                                                            
+               }                                                                                                            
+               *MClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P;                                                    
+                                                                                                                            
+               pll = NV_RD32(par->PMC, 0xZ000);                                                                            
+               P = (pll >> 16) & 0x07;                                                                                      
+               pll = NV_RD32(par->PMC, 0xZ00Z);                                                                            
+               M = pll & 0xFF;                                                                                              
+               N = (pll >> 8) & 0xFF;                                                                                      
+               MB = (pll >> 16) & 0xFF;                                                                                    
+               NB = (pll >> 24) & 0xFF;                                                                                    
+               *NVClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P;                                                  
+       }                                                                                                                    
+       else if (par->Architecture >= NV_ARCH_40) {                                                                          
                pll = NV_RD32(par->PMC, 0x4020);                                                                            
                P = (pll >> 16) & 0x07;                                                                                      
                pll = NV_RD32(par->PMC, 0x4024);                                                                            
@@ -896,6 +923,11 @@                                                                                                        
                        state->control = NV_RD32(par->PRAMDAC0, 0x0580) &                                                    
                                0xeffffeff;                                                                                  
                /* fallthrough */                                                                                            
+       case NV_ARCH_50:                                                                                                    
+               if (!par->FlatPanel)                                                                                        
+                       state->control = NV_RD32(par->PRAMDAC0, 0xffff) &                                                    
+                               0xeffffeff;                                                                                  
+               /* fallthrough */                                                                                            
        case NV_ARCH_10:                                                                                                    
        case NV_ARCH_20:                                                                                                    
        case NV_ARCH_30:                                                                                                    
diff -u nvidia//nvidia.c /tmp/nvidia//nvidia.c                                                                              
--- nvidia//nvidia.c    2010-03-15 19:09:39.000000000 +0300                                                                  
+++ /tmp/nvidia//nvidia.c       2010-03-28 18:51:35.410412200 +0400                                                          
@@ -1194,6 +1194,9 @@                                                                                                        
        case NV_ARCH_40:                                                                                                    
                info->fix.accel = FB_ACCEL_NV_40;                                                                            
                break;                                                                                                      
+       case NV_ARCH_50:                                                                                                    
+               info->fix.accel = FB_ACCEL_NV_40;                                                                            
+               break;                                                                                                      
        }                                                                                                                    
                                                                                                                            
        NVTRACE_LEAVE();                                                                                                    
@@ -1266,6 +1269,10 @@                                                                                                      
        case 0x03D0:                                                                                                        
                arch = NV_ARCH_40;                                                                                          
                break;                                                                                                      
+       case  0x0197:           /* Geforce 8880GTX */                                                                        
+       case  0x05E7:           /* Geforce285 */                                                                            
+               arch = NV_ARCH_50;                                                                                          
+               break;                                                                                                      
        case 0x0020:            /* TNT, TNT2 */                                                                              
                arch = NV_ARCH_04;                                                                                          
                break;                                                                                                      
diff -u nvidia//nv_type.h /tmp/nvidia//nv_type.h                                                                            
--- nvidia//nv_type.h   2010-03-15 19:09:39.000000000 +0300                                                                  
+++ /tmp/nvidia//nv_type.h      2010-03-28 18:47:04.343410440 +0400                                                          
@@ -12,6 +12,7 @@                                                                                                            
#define NV_ARCH_20  0x20                                                                                                    
#define NV_ARCH_30  0x30                                                                                                    
#define NV_ARCH_40  0x40                                                                                                    
+#define NV_ARCH_50  0x50                                                                                                    
                                                                                                                            
#define BITMASK(t,b) (((unsigned)(1U << (((t)-(b)+1)))-1)  << (b))                                                          
#define MASKEXPAND(mask) BITMASK(1?mask,0?mask)                                                                            
pavel@suse64:/usr/src/linux/drivers/video> diff -u nvidia/  /tmp/nvidia/ > /tmp/patch
pavel@suse64:/usr/src/linux/drivers/video> cat /tmp/patch                            
diff -u nvidia//nv_hw.c /tmp/nvidia//nv_hw.c                                        
--- nvidia//nv_hw.c     2010-03-15 19:09:39.000000000 +0300                          
+++ /tmp/nvidia//nv_hw.c        2010-03-28 18:50:25.871159601 +0400                  
@@ -82,6 +82,8 @@                                                                    
        if (par->Architecture == NV_ARCH_40)                                        
                NV_WR32(par->PRAMDAC, 0x0300, NV_RD32(par->PRAMDAC, 0x0300));        
                                                                                    
+       if (par->Architecture == NV_ARCH_50)                                        
+               NV_WR32(par->PRAMDAC, 0x0abc, NV_RD32(par->PRAMDAC, 0xabc));        
        return (cur & 0x01);                                                        
}                                                                                  
                                                                                    
@@ -143,7 +145,32 @@                                                                
{                                                                                  
        unsigned int pll, N, M, MB, NB, P;                                          
                                                                                    
-       if (par->Architecture >= NV_ARCH_40) {                                      
+       if (par->Architecture >= NV_ARCH_50) {                                      
+               pll = NV_RD32(par->PMC, 0xabcd);                                    
+               P = (pll >> 16) & 0x07;                                              
+               pll = NV_RD32(par->PMC, 0xabcd);                                    
+               M = pll & 0xFF;                                                      
+               N = (pll >> 8) & 0xFF;                                              
+               if (((par->Chipset & 0xfff0) == 0xklmn) ||                          
+                   ((par->Chipset & 0xfff0) == 0xklmn)) {                          
+                       MB = 1;                                                      
+                       NB = 1;                                                      
+               } else {                                                            
+                       MB = (pll >> 16) & 0xFF;                                    
+                       NB = (pll >> 24) & 0xFF;                                    
+               }                                                                    
+               *MClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P;            
+                                                                                    
+               pll = NV_RD32(par->PMC, 0xZ000);                                    
+               P = (pll >> 16) & 0x07;                                              
+               pll = NV_RD32(par->PMC, 0xZ00Z);                                    
+               M = pll & 0xFF;                                                      
+               N = (pll >> 8) & 0xFF;                                              
+               MB = (pll >> 16) & 0xFF;                                            
+               NB = (pll >> 24) & 0xFF;                                            
+               *NVClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P;          
+       }
+       else if (par->Architecture >= NV_ARCH_40) {
                pll = NV_RD32(par->PMC, 0x4020);
                P = (pll >> 16) & 0x07;
                pll = NV_RD32(par->PMC, 0x4024);
@@ -896,6 +923,11 @@
                        state->control = NV_RD32(par->PRAMDAC0, 0x0580) &
                                0xeffffeff;
                /* fallthrough */
+       case NV_ARCH_50:
+               if (!par->FlatPanel)
+                       state->control = NV_RD32(par->PRAMDAC0, 0xffff) &
+                               0xeffffeff;
+               /* fallthrough */
        case NV_ARCH_10:
        case NV_ARCH_20:
        case NV_ARCH_30:
diff -u nvidia//nvidia.c /tmp/nvidia//nvidia.c
--- nvidia//nvidia.c    2010-03-15 19:09:39.000000000 +0300
+++ /tmp/nvidia//nvidia.c       2010-03-28 18:51:35.410412200 +0400
@@ -1194,6 +1194,9 @@
        case NV_ARCH_40:
                info->fix.accel = FB_ACCEL_NV_40;
                break;
+       case NV_ARCH_50:
+               info->fix.accel = FB_ACCEL_NV_40;
+               break;
        }

        NVTRACE_LEAVE();
@@ -1266,6 +1269,10 @@
        case 0x03D0:
                arch = NV_ARCH_40;
                break;
+       case  0x0197:           /* Geforce 8880GTX */
+       case  0x05E7:           /* Geforce285 */
+               arch = NV_ARCH_50;
+               break;
        case 0x0020:            /* TNT, TNT2 */
                arch = NV_ARCH_04;
                break;
diff -u nvidia//nv_type.h /tmp/nvidia//nv_type.h
--- nvidia//nv_type.h   2010-03-15 19:09:39.000000000 +0300
+++ /tmp/nvidia//nv_type.h      2010-03-28 18:47:04.343410440 +0400
@@ -12,6 +12,7 @@
#define NV_ARCH_20  0x20
#define NV_ARCH_30  0x30
#define NV_ARCH_40  0x40
+#define NV_ARCH_50  0x50

#define BITMASK(t,b) (((unsigned)(1U << (((t)-(b)+1)))-1)  << (b))
#define MASKEXPAND(mask) BITMASK(1?mask,0?mask)


... ну и так далее

Кому фреймбуфер нужен? Мне иль Вам?  
В общем, дорогу осилит идущий, а не ноющий.  :)


Ответить | Правка | К родителю #54 | Наверх | Cообщить модератору

57. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +/
Сообщение от cobOLD (?), 28-Мрт-10, 19:02 
Я же спрашивал вменяемый пач 8)...

Нечто подобное я уже делал для некой конкретной карточки (9800GTX). И оно даже работало - но не для всех остальных карточек. Имеется специфика в таймингах и инициализации.

Потому и спрашиваю.

Ответить | Правка | Наверх | Cообщить модератору

58. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +/
Сообщение от pavlinux (ok), 28-Мрт-10, 19:11 
>Я же спрашивал вменяемый пач 8)...
>
>Нечто подобное я уже делал для некой конкретной карточки (9800GTX). И оно
>даже работало - но не для всех остальных карточек. Имеется специфика
>в таймингах и инициализации.
>
>Потому и спрашиваю.

Ну, нашёл где искать, вам бы на ...

http://developer.nvidia.com
IRC: freenode #nouveau
ну и так далее...


Ответить | Правка | Наверх | Cообщить модератору

59. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +/
Сообщение от cobOLD (?), 28-Мрт-10, 19:20 
Был... 8(

Кроме "умного" совета творчески переработать соотв. кусок из X.org/nv ничего больше не почерпнул.

Ответить | Правка | Наверх | Cообщить модератору

60. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +/
Сообщение от cobOLD (?), 28-Мрт-10, 19:26 
В любом случае - спасибо.


Ответить | Правка | Наверх | Cообщить модератору

61. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +1 +/
Сообщение от pavlinux (ok), 28-Мрт-10, 19:34 
>Был... 8(
>
>Кроме "умного" совета творчески переработать соотв. кусок из X.org/nv ничего больше не
>почерпнул.

У Нвидии есть большой плюс, они никогда резко архитектуру не меняли.
Так что, методом научного тыка с поиском закономерностей в изменениях.
То есть, если значение, которое пишут в одном регистре, сдвинули на 0x20,
то с большой вероятностью, другое значение, которое нужно писать, так же
съедет на 20, может на 20*sizeof(NVREG)

Ответить | Правка | К родителю #59 | Наверх | Cообщить модератору

62. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +/
Сообщение от cobOLD (?), 28-Мрт-10, 19:52 
Угу.

Странно, неужели никому это больше не надо...


Ответить | Правка | Наверх | Cообщить модератору

63. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +/
Сообщение от pavlinux (ok), 28-Мрт-10, 20:11 
>Угу.
>Странно, неужели никому это больше не надо...

Когда были слабые процы, часть геометрич. построений перекидывали на
фичи работы на фреймбуфером. Сейчас, тоже самое и более делается на OpenGL.
Ещё у функций фрембуфера есть плохая особенность, они плохо проверяют данные
в них пихаемые. По этому, всё приходилось отслеживать программеру.

Ну а если у вас есть какой-то проект, где нужен FB, то лучше юзать
карточки от VIA или Matrox.
  

Ответить | Правка | Наверх | Cообщить модератору

64. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +/
Сообщение от pavlinux (ok), 28-Мрт-10, 20:23 
>Угу.
>
>Странно, неужели никому это больше не надо...

Кстати, вот эту хрень знаешь? - http://fbui.tk/

Можешь понасиловать этого мужика, он работу с фрембуфером знает лучше, чем свою биографию.

  

Ответить | Правка | К родителю #62 | Наверх | Cообщить модератору

65. "NVIDIA отказывается от дальнейшего развития открытого драйве..."  +/
Сообщение от cobOLD (?), 28-Мрт-10, 21:02 
Как-то ковырялся. Кстати, надо будет глянуть на состояние дел с DirectFB 2.0


Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру