tridentfb: fix hang on Blade3D with CONFIG_CC_OPTIMIZE_FOR_SIZE
Subsystems (2)
PATCH RESEND 1/4 tridentfb: fix hang on Blade3D with CONFIG_CC_OPTIMIZE_FOR_SIZE
When the kernel is compiled with -Os (CONFIG_CC_OPTIMIZE_FOR_SIZE), tridentfb hangs the machine upon load with Blade3D cards unless acceleration is disabled.
This is caused by memcpy() which copies data byte-by-byte (rep movsb) when compiled with -Os. The card does not like that - it requires 32-bit access.
Use iowrite_32() instead.
--- drivers/video/fbdev/tridentfb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/video/fbdev/tridentfb.c +1 -1
@@ -226,7 +226,7 @@ static void blade_image_blit(struct tridentfb_par *par, const char *data,writemmr (par,DST1 ,point (x, y));writemmr (par,DST2 ,point (x + w -1 , y + h -1 )); -memcpy (par->io_virt +0x10000 , data,4 * size); +iowrite32_rep (par->io_virt +0x10000 , data, size); } static void blade_copy_rect(struct tridentfb_par *par,
Signature · 1 line
Ondrej Zary
PATCH RESEND 2/4 tridentfb: Fix set_lwidth on TGUI9440 and CYBER9320
According to X.Org driver, chips older than TGUI9660 have only 1 width bit in AddColReg. Touching the 2nd one causes I2C/DDC to fail on TGUI9440.
Set only 1 bit of width in AddColReg on TGUI9440 and CYBER9320.
--- drivers/video/fbdev/tridentfb.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
drivers/video/fbdev/tridentfb.c +8 -2
@@ -673,8 +673,14 @@ static int get_nativex(struct tridentfb_par *par)static inline void set_lwidth (struct tridentfb_par *par,int width) {write3X4 (par,VGA_CRTC_OFFSET , width &0xFF ); -write3X4 (par, AddColReg, - (read3X4 (par, AddColReg) &0xCF ) | ((width &0x300 ) >>4 )); +/* chips older than TGUI9660 have only 1 width bit in AddColReg */ +/* touching the other one breaks I2C/DDC */ +if (par->chip_id =TGUI9440 || par->chip_id =CYBER9320 ) +write3X4 (par, AddColReg, + (read3X4 (par, AddColReg) &0xEF ) | ((width &0x100 ) >>4 )); +else +write3X4 (par, AddColReg, + (read3X4 (par, AddColReg) &0xCF ) | ((width &0x300 ) >>4 )); }/* For resolutions smaller than FP resolution stretch */
Signature · 1 line
Ondrej Zary
PATCH RESEND 3/4 fb_ddc: Allow I2C adapters without SCL read capability
In reply to Ondrej Zaryi2c-algo-bit allows I2C adapters without SCL read capability to work but fb_ddc_read fails to work on them.
Fix fb_ddc_read to work with I2C adapters not capable of reading SCL.
--- drivers/video/fbdev/core/fb_ddc.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/video/fbdev/core/fb_ddc.c +5 -3
@@ -69,10 +69,11 @@ unsigned char *fb_ddc_read(struct i2c_adapter *adapter) algo_data->setscl (algo_data->data,1 );for (j =0 ; j <5 ; j++) {msleep (10 ); -if (algo_data->getscl (algo_data->data)) +if (algo_data->getscl && + algo_data->getscl (algo_data->data))break ; } -if (j =5 ) +if (algo_data->getscl && j =5 )continue ; algo_data->setsda (algo_data->data,0 );
@@ -91,7 +92,8 @@ unsigned char *fb_ddc_read(struct i2c_adapter *adapter) algo_data->setscl (algo_data->data,1 );for (j =0 ; j <10 ; j++) {msleep (10 ); -if (algo_data->getscl (algo_data->data)) +if (algo_data->getscl && + algo_data->getscl (algo_data->data))break ; }
Signature · 1 line
Ondrej Zary
PATCH RESEND 4/4 tridentfb: Add DDC support
In reply to Ondrej ZaryAdd DDC support for Trident cards.
Tested on TGUI9440, TGUI9680, 3DImage 9750, Blade3D 9880 and Blade XP.
--- drivers/video/fbdev/Kconfig | 9 ++ drivers/video/fbdev/tridentfb.c | 192 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 196 insertions(+), 5 deletions(-)
drivers/video/fbdev/Kconfig +9 -0
@@ -1682,6 +1682,15 @@ config FB_TRIDENT To compile this driver as a module, choose M here: the module will be called tridentfb. +config FB_TRIDENT_DDC + bool "DDC for Trident support" + depends on FB_TRIDENT + select FB_DDC + select FB_MODE_HELPERS + default y + help + Say Y here if you want DDC support for your Trident graphics card. + config FB_ARK tristate "ARK 2000PV support" depends on FB && PCI
drivers/video/fbdev/tridentfb.c +187 -5
247 lines not on this page · raw message
Signature · 1 line
Ondrej Zary