Rev 885 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
808 | serge | 1 | |
868 | serge | 2 | |
812 | serge | 3 | |
808 | serge | 4 | |
5 | |||
6 | |||
7 | |||
8 | |||
813 | serge | 9 | |
10 | |||
11 | # define RADEON_PLL_WR_EN (1 << 7) |
||
12 | # define RADEON_PLL_DIV_SEL (3 << 8) |
||
13 | # define RADEON_PLL2_DIV_SEL_MASK ~(3 << 8) |
||
14 | |||
15 | |||
16 | # define RADEON_FORCEON_MCLKA (1 << 16) |
||
17 | # define RADEON_FORCEON_MCLKB (1 << 17) |
||
18 | # define RADEON_FORCEON_YCLKA (1 << 18) |
||
19 | # define RADEON_FORCEON_YCLKB (1 << 19) |
||
20 | # define RADEON_FORCEON_MC (1 << 20) |
||
21 | # define RADEON_FORCEON_AIC (1 << 21) |
||
22 | # define R300_DISABLE_MC_MCLKA (1 << 21) |
||
23 | # define R300_DISABLE_MC_MCLKB (1 << 21) |
||
24 | |||
25 | |||
26 | |||
27 | |||
28 | |||
808 | serge | 29 | * Flush all dirty data in the Pixel Cache to memory. |
30 | */ |
||
31 | |||
32 | |||
33 | R5xx2DFlush() |
||
34 | { |
||
35 | int i; |
||
36 | |||
37 | |||
38 | R5XX_DSTCACHE_FLUSH_ALL, R5XX_DSTCACHE_FLUSH_ALL); |
||
39 | |||
40 | |||
41 | if (!(INREG(R5XX_DSTCACHE_CTLSTAT) & R5XX_DSTCACHE_BUSY)) |
||
1002 | serge | 42 | return TRUE; |
43 | |||
808 | serge | 44 | |
45 | (unsigned int)INREG(R5XX_DSTCACHE_CTLSTAT)); |
||
46 | return FALSE; |
||
47 | } |
||
48 | |||
49 | |||
50 | R5xx2DIdleLocal() //R100-R500 |
||
51 | { |
||
52 | int i; |
||
53 | |||
54 | |||
55 | for (i = 0; i < R5XX_LOOP_COUNT; i++) |
||
56 | if (64 == (INREG(R5XX_RBBM_STATUS) & R5XX_RBBM_FIFOCNT_MASK)) |
||
1002 | serge | 57 | break; |
58 | |||
808 | serge | 59 | |
60 | dbgprintf("%s: FIFO Timeout 0x%08X.\n", __func__,INREG(R5XX_RBBM_STATUS)); |
||
1002 | serge | 61 | return FALSE; |
62 | } |
||
808 | serge | 63 | |
64 | |||
65 | for (i = 0; i < R5XX_LOOP_COUNT; i++) { |
||
66 | if (!(INREG(R5XX_RBBM_STATUS) & R5XX_RBBM_ACTIVE)) { |
||
1002 | serge | 67 | R5xx2DFlush(); |
68 | return TRUE; |
||
69 | } |
||
70 | } |
||
808 | serge | 71 | dbgprintf("%s: Idle Timeout 0x%08X.\n", __func__,INREG(R5XX_RBBM_STATUS)); |
72 | return FALSE; |
||
73 | } |
||
74 | |||
75 | |||
76 | |||
77 | R5xx2DSetup() |
||
78 | { |
||
79 | |||
80 | |||
81 | * set them appropriately before any accel ops, but let's avoid |
||
82 | * random bogus DMA in case we inadvertently trigger the engine |
||
83 | * in the wrong place (happened). */ |
||
84 | R5xxFIFOWaitLocal(2); |
||
85 | OUTREG(R5XX_DST_PITCH_OFFSET,rhd.dst_pitch_offset); |
||
86 | OUTREG(R5XX_SRC_PITCH_OFFSET,rhd.dst_pitch_offset); |
||
87 | |||
88 | |||
89 | MASKREG(R5XX_DP_DATATYPE, 0, R5XX_HOST_BIG_ENDIAN_EN); |
||
90 | |||
91 | |||
92 | |||
93 | |||
883 | serge | 94 | OUTREG(R5XX_SC_TOP_LEFT, 0); |
95 | OUTREG(R5XX_SC_BOTTOM_RIGHT, |
||
96 | RADEON_DEFAULT_SC_RIGHT_MAX | RADEON_DEFAULT_SC_BOTTOM_MAX); |
||
97 | OUTREG(R5XX_DEFAULT_SC_BOTTOM_RIGHT, |
||
808 | serge | 98 | RADEON_DEFAULT_SC_RIGHT_MAX | RADEON_DEFAULT_SC_BOTTOM_MAX); |
883 | serge | 99 | |
100 | |||
808 | serge | 101 | // OUTREG(R5XX_DP_GUI_MASTER_CNTL, rhd.gui_control | |
883 | serge | 102 | // R5XX_GMC_BRUSH_SOLID_COLOR | R5XX_GMC_SRC_DATATYPE_COLOR); |
103 | OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM); |
||
104 | |||
808 | serge | 105 | |
106 | OUTREG(R5XX_DP_BRUSH_FRGD_CLR, 0xFFFFFFFF); |
||
107 | OUTREG(R5XX_DP_BRUSH_BKGD_CLR, 0x00000000); |
||
108 | OUTREG(R5XX_DP_SRC_FRGD_CLR, 0xFFFFFFFF); |
||
109 | OUTREG(R5XX_DP_SRC_BKGD_CLR, 0x00000000); |
||
110 | OUTREG(R5XX_DP_WRITE_MASK, 0xFFFFFFFF); |
||
111 | |||
112 | |||
113 | } |
||
114 | |||
115 | |||
877 | serge | 116 | { |
808 | serge | 117 | if (!R5xxFIFOWaitLocal(required)) { |
118 | // R5xx2DReset(); |
||
883 | serge | 119 | R5xx2DSetup(); |
808 | serge | 120 | } |
121 | } |
||
122 | |||
123 | |||
124 | { |
||
125 | if (!R5xx2DIdleLocal()) { |
||
126 | // R5xx2DReset(); |
||
883 | serge | 127 | R5xx2DSetup(); |
808 | serge | 128 | } |
129 | } |
||
130 | |||
131 | |||
132 | |||
133 | |||
134 | { |
||
135 | u32_t base; |
||
877 | serge | 136 | int screensize; |
878 | serge | 137 | int screenpitch; |
138 | |||
808 | serge | 139 | |
878 | serge | 140 | screenpitch = GetScreenPitch(); |
141 | |||
808 | serge | 142 | |
878 | serge | 143 | rhd.displayHeight = screensize & 0xFFFF; |
144 | |||
145 | |||
808 | serge | 146 | rhd.__ymin = 0; |
147 | rhd.__xmax = rhd.displayWidth - 1; |
||
148 | rhd.__ymax = rhd.displayHeight - 1; |
||
149 | |||
150 | |||
151 | clip.ymin = 0; |
||
152 | clip.xmax = rhd.displayWidth - 1; |
||
153 | clip.ymax = rhd.displayHeight - 1; |
||
154 | |||
155 | |||
883 | serge | 156 | rhd.displayWidth, rhd.displayHeight); |
157 | |||
808 | serge | 158 | |
883 | serge | 159 | | RADEON_GMC_CLR_CMP_CNTL_DIS |
160 | | RADEON_GMC_DST_PITCH_OFFSET_CNTL); |
||
161 | |||
808 | serge | 162 | |
163 | |||
164 | |||
165 | |||
166 | |||
883 | serge | 167 | (rhd.fbLocation >> 10)); |
168 | |||
169 | |||
170 | |||
808 | serge | 171 | |
172 | |||
815 | serge | 173 | scr_pixmap.height = rhd.displayHeight; |
174 | scr_pixmap.format = PICT_a8r8g8b8; |
||
175 | scr_pixmap.flags = PX_MEM_LOCAL; |
||
1002 | serge | 176 | scr_pixmap.pitch = rhd.displayWidth * 4 ;//screenpitch; |
885 | serge | 177 | scr_pixmap.local = (void*)rhd.fbLocation; |
881 | serge | 178 | scr_pixmap.pitch_offset = rhd.dst_pitch_offset; |
815 | serge | 179 | scr_pixmap.mapped = (void*)0; |
876 | serge | 180 | |
815 | serge | 181 | |
883 | serge | 182 | OUTREG(R5XX_DST_PITCH_OFFSET,rhd.dst_pitch_offset); |
183 | OUTREG(R5XX_SRC_PITCH_OFFSET,rhd.dst_pitch_offset); |
||
184 | |||
815 | serge | 185 | |
883 | serge | 186 | MASKREG(R5XX_DP_DATATYPE, 0, R5XX_HOST_BIG_ENDIAN_EN); |
187 | |||
808 | serge | 188 | |
883 | serge | 189 | |
808 | serge | 190 | |
1002 | serge | 191 | |
192 | |||
883 | serge | 193 | |
1002 | serge | 194 | |
883 | serge | 195 | |
196 | |||
808 | serge | 197 | |
198 | |||
199 |