Committed patch by Euan Kirkhope to improve routing problems with Radeon cards;

this should fix bug #1293.
I've tested it here on two machines, one works better now, the other stayed the
same (Radeon 9250, and a laptop FireGL (id 4c66) version). This apparently also
fixed bug #1394.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21930 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2007-08-13 17:22:32 +00:00
parent 8f4f70a56d
commit f9a5b215cd
12 changed files with 366 additions and 83 deletions
+10
View File
@@ -35,6 +35,7 @@
# define RADEON_FP2_PANEL_FORMAT (1 << 3)
# define RADEON_FP2_SOURCE_SEL_MASK (3 << 10)
# define RADEON_FP2_SOURCE_SEL_CRTC2 (1 << 10)
# define RADEON_FP2_SOURCE_SEL_RMX (2 << 10)
# define RADEON_FP2_SRC_SEL_MASK (3 << 13)
# define RADEON_FP2_SRC_SEL_CRTC2 (1 << 13)
# define RADEON_FP2_FP_POL (1 << 16)
@@ -68,6 +69,12 @@
# define RADEON_VERT_STRETCH_BLEND (1 << 26)
# define RADEON_VERT_AUTO_RATIO_EN (1 << 27)
# define RADEON_VERT_STRETCH_RESERVED 0xf1000000
#define RADEON_TMDS_PLL_CNTL 0x02a8
#define RADEON_TMDS_TRANSMITTER_CNTL 0x02a4
# define RADEON_TMDS_TRANSMITTER_PLLEN 1
# define RADEON_TMDS_TRANSMITTER_PLLRST 2
#define RADEON_FP_H_SYNC_STRT_WID 0x02c4
#define RADEON_FP_V_SYNC_STRT_WID 0x02c8
@@ -80,6 +87,9 @@
# define RADEON_LVDS_DIGON (1 << 18)
# define RADEON_LVDS_BLON (1 << 19)
# define RADEON_LVDS_SEL_CRTC2 (1 << 23)
#define RADEON_LVDS_PLL_CNTL 0x02d4
# define RADEON_HSYNC_DELAY_SHIFT 28
# define RADEON_HSYNC_DELAY_MASK (0xf << 28)
#define RADEON_FP_CRTC2_H_TOTAL_DISP 0x0350
#define RADEON_FP_CRTC2_V_TOTAL_DISP 0x0354
@@ -348,6 +348,11 @@ typedef struct {
uint32 best_vco; // preferred VCO frequency (0 for don't care)
} pll_info;
// info for ext tmds pll
typedef struct {
uint32 freq;
uint32 value;
} tmds_pll_info;
// one overlay buffer
typedef struct overlay_buffer_node {
@@ -520,24 +525,24 @@ typedef struct {
uint16 device_id; // PCI device id
uint8 revision; // PCI device revision
//bool has_crtc2; // has second CRTC
radeon_type asic; // ASIC version
bool is_mobility; // mobility version
bool is_igp; // might need to know if it's an integrated chip
bool is_mobility; // mobility version
bool is_igp; // might need to know if it's an integrated chip
bool is_atombios;
tv_chip_type tv_chip; // type of TV-Out encoder
tv_chip_type tv_chip; // type of TV-Out encoder
bool new_pll; // r300 style PLL
bool has_no_i2c; // I2C is broken
uint16 panel_pwr_delay;// delay for LCD backlight to stabilise
uint8 theatre_channel;// VIP channel of Rage Theatre (if applicable)
bool has_no_i2c; // I2C is broken
uint16 panel_pwr_delay; // delay for LCD backlight to stabilise
uint8 theatre_channel; // VIP channel of Rage Theatre (if applicable)
general_pll_info pll;
tmds_pll_info tmds_pll[4];
area_id regs_area; // area of memory mapped registers
area_id ROM_area; // area of ROM
//area_id fb_area; // area of frame buffer
void *framebuffer_pci; // physical address of frame buffer (aka local memory)
// this is a hack needed by BeOS
// this is a hack needed by BeOS
crtc_info crtc[2]; // info about each crtc
uint8 num_crtc; // number of physical heads
@@ -557,6 +562,8 @@ typedef struct {
uint32 active_vc; // currently selected virtual card in terms of 2D acceleration
uint32 dac_cntl2; // content of dac_cntl2 register
uint32 tmds_pll_cntl; // undocumented here be dragons
uint32 tmds_transmitter_cntl; // undocumented here be dragons
overlay_info pending_overlay; // overlay to be shown
overlay_info active_overlay; // overlay shown