Rev 1430 | Rev 2004 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1430 | Rev 1963 | ||
---|---|---|---|
Line 28... | Line 28... | ||
28 | #include "drmP.h" |
28 | #include "drmP.h" |
29 | #include "radeon_reg.h" |
29 | #include "radeon_reg.h" |
30 | #include "radeon.h" |
30 | #include "radeon.h" |
31 | #include "atom.h" |
31 | #include "atom.h" |
Line -... | Line 32... | ||
- | 32 | ||
- | 33 | //#include |
|
32 | 34 | #include |
|
33 | /* |
35 | /* |
34 | * BIOS. |
36 | * BIOS. |
Line 35... | Line 37... | ||
35 | */ |
37 | */ |
Line 44... | Line 46... | ||
44 | { |
46 | { |
45 | uint8_t __iomem *bios; |
47 | uint8_t __iomem *bios; |
46 | resource_size_t vram_base; |
48 | resource_size_t vram_base; |
47 | resource_size_t size = 256 * 1024; /* ??? */ |
49 | resource_size_t size = 256 * 1024; /* ??? */ |
Line -... | Line 50... | ||
- | 50 | ||
- | 51 | if (!(rdev->flags & RADEON_IS_IGP)) |
|
- | 52 | if (!radeon_card_posted(rdev)) |
|
- | 53 | return false; |
|
48 | 54 | ||
49 | rdev->bios = NULL; |
55 | rdev->bios = NULL; |
50 | vram_base = drm_get_resource_start(rdev->ddev, 0); |
56 | vram_base = pci_resource_start(rdev->pdev, 0); |
51 | bios = ioremap(vram_base, size); |
57 | bios = ioremap(vram_base, size); |
52 | if (!bios) { |
58 | if (!bios) { |
53 | return false; |
59 | return false; |
Line 123... | Line 129... | ||
123 | kfree(rdev->bios); |
129 | kfree(rdev->bios); |
124 | return false; |
130 | return false; |
125 | } |
131 | } |
126 | return true; |
132 | return true; |
127 | } |
133 | } |
- | 134 | ||
- | 135 | static bool ni_read_disabled_bios(struct radeon_device *rdev) |
|
- | 136 | { |
|
- | 137 | u32 bus_cntl; |
|
- | 138 | u32 d1vga_control; |
|
- | 139 | u32 d2vga_control; |
|
- | 140 | u32 vga_render_control; |
|
- | 141 | u32 rom_cntl; |
|
- | 142 | bool r; |
|
- | 143 | ||
- | 144 | bus_cntl = RREG32(R600_BUS_CNTL); |
|
- | 145 | d1vga_control = RREG32(AVIVO_D1VGA_CONTROL); |
|
- | 146 | d2vga_control = RREG32(AVIVO_D2VGA_CONTROL); |
|
- | 147 | vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL); |
|
- | 148 | rom_cntl = RREG32(R600_ROM_CNTL); |
|
- | 149 | ||
- | 150 | /* enable the rom */ |
|
- | 151 | WREG32(R600_BUS_CNTL, (bus_cntl & ~R600_BIOS_ROM_DIS)); |
|
- | 152 | /* Disable VGA mode */ |
|
- | 153 | WREG32(AVIVO_D1VGA_CONTROL, |
|
- | 154 | (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | |
|
- | 155 | AVIVO_DVGA_CONTROL_TIMING_SELECT))); |
|
- | 156 | WREG32(AVIVO_D2VGA_CONTROL, |
|
- | 157 | (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | |
|
- | 158 | AVIVO_DVGA_CONTROL_TIMING_SELECT))); |
|
- | 159 | WREG32(AVIVO_VGA_RENDER_CONTROL, |
|
- | 160 | (vga_render_control & ~AVIVO_VGA_VSTATUS_CNTL_MASK)); |
|
- | 161 | WREG32(R600_ROM_CNTL, rom_cntl | R600_SCK_OVERWRITE); |
|
- | 162 | ||
- | 163 | r = radeon_read_bios(rdev); |
|
- | 164 | ||
- | 165 | /* restore regs */ |
|
- | 166 | WREG32(R600_BUS_CNTL, bus_cntl); |
|
- | 167 | WREG32(AVIVO_D1VGA_CONTROL, d1vga_control); |
|
- | 168 | WREG32(AVIVO_D2VGA_CONTROL, d2vga_control); |
|
- | 169 | WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control); |
|
- | 170 | WREG32(R600_ROM_CNTL, rom_cntl); |
|
- | 171 | return r; |
|
- | 172 | } |
|
- | 173 | ||
128 | static bool r700_read_disabled_bios(struct radeon_device *rdev) |
174 | static bool r700_read_disabled_bios(struct radeon_device *rdev) |
129 | { |
175 | { |
130 | uint32_t viph_control; |
176 | uint32_t viph_control; |
131 | uint32_t bus_cntl; |
177 | uint32_t bus_cntl; |
132 | uint32_t d1vga_control; |
178 | uint32_t d1vga_control; |
Line 136... | Line 182... | ||
136 | uint32_t cg_spll_func_cntl = 0; |
182 | uint32_t cg_spll_func_cntl = 0; |
137 | uint32_t cg_spll_status; |
183 | uint32_t cg_spll_status; |
138 | bool r; |
184 | bool r; |
Line 139... | Line 185... | ||
139 | 185 | ||
140 | viph_control = RREG32(RADEON_VIPH_CONTROL); |
186 | viph_control = RREG32(RADEON_VIPH_CONTROL); |
141 | bus_cntl = RREG32(RADEON_BUS_CNTL); |
187 | bus_cntl = RREG32(R600_BUS_CNTL); |
142 | d1vga_control = RREG32(AVIVO_D1VGA_CONTROL); |
188 | d1vga_control = RREG32(AVIVO_D1VGA_CONTROL); |
143 | d2vga_control = RREG32(AVIVO_D2VGA_CONTROL); |
189 | d2vga_control = RREG32(AVIVO_D2VGA_CONTROL); |
144 | vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL); |
190 | vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL); |
Line 145... | Line 191... | ||
145 | rom_cntl = RREG32(R600_ROM_CNTL); |
191 | rom_cntl = RREG32(R600_ROM_CNTL); |
146 | 192 | ||
147 | /* disable VIP */ |
193 | /* disable VIP */ |
148 | WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN)); |
194 | WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN)); |
149 | /* enable the rom */ |
195 | /* enable the rom */ |
150 | WREG32(RADEON_BUS_CNTL, (bus_cntl & ~RADEON_BUS_BIOS_DIS_ROM)); |
196 | WREG32(R600_BUS_CNTL, (bus_cntl & ~R600_BIOS_ROM_DIS)); |
151 | /* Disable VGA mode */ |
197 | /* Disable VGA mode */ |
152 | WREG32(AVIVO_D1VGA_CONTROL, |
198 | WREG32(AVIVO_D1VGA_CONTROL, |
153 | (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | |
199 | (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | |
Line 184... | Line 230... | ||
184 | cg_spll_status = 0; |
230 | cg_spll_status = 0; |
185 | while (!(cg_spll_status & R600_SPLL_CHG_STATUS)) |
231 | while (!(cg_spll_status & R600_SPLL_CHG_STATUS)) |
186 | cg_spll_status = RREG32(R600_CG_SPLL_STATUS); |
232 | cg_spll_status = RREG32(R600_CG_SPLL_STATUS); |
187 | } |
233 | } |
188 | WREG32(RADEON_VIPH_CONTROL, viph_control); |
234 | WREG32(RADEON_VIPH_CONTROL, viph_control); |
189 | WREG32(RADEON_BUS_CNTL, bus_cntl); |
235 | WREG32(R600_BUS_CNTL, bus_cntl); |
190 | WREG32(AVIVO_D1VGA_CONTROL, d1vga_control); |
236 | WREG32(AVIVO_D1VGA_CONTROL, d1vga_control); |
191 | WREG32(AVIVO_D2VGA_CONTROL, d2vga_control); |
237 | WREG32(AVIVO_D2VGA_CONTROL, d2vga_control); |
192 | WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control); |
238 | WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control); |
193 | WREG32(R600_ROM_CNTL, rom_cntl); |
239 | WREG32(R600_ROM_CNTL, rom_cntl); |
194 | return r; |
240 | return r; |
Line 209... | Line 255... | ||
209 | uint32_t ctxsw_vid_lower_gpio_cntl; |
255 | uint32_t ctxsw_vid_lower_gpio_cntl; |
210 | uint32_t lower_gpio_enable; |
256 | uint32_t lower_gpio_enable; |
211 | bool r; |
257 | bool r; |
Line 212... | Line 258... | ||
212 | 258 | ||
213 | viph_control = RREG32(RADEON_VIPH_CONTROL); |
259 | viph_control = RREG32(RADEON_VIPH_CONTROL); |
214 | bus_cntl = RREG32(RADEON_BUS_CNTL); |
260 | bus_cntl = RREG32(R600_BUS_CNTL); |
215 | d1vga_control = RREG32(AVIVO_D1VGA_CONTROL); |
261 | d1vga_control = RREG32(AVIVO_D1VGA_CONTROL); |
216 | d2vga_control = RREG32(AVIVO_D2VGA_CONTROL); |
262 | d2vga_control = RREG32(AVIVO_D2VGA_CONTROL); |
217 | vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL); |
263 | vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL); |
218 | rom_cntl = RREG32(R600_ROM_CNTL); |
264 | rom_cntl = RREG32(R600_ROM_CNTL); |
Line 224... | Line 270... | ||
224 | lower_gpio_enable = RREG32(R600_LOWER_GPIO_ENABLE); |
270 | lower_gpio_enable = RREG32(R600_LOWER_GPIO_ENABLE); |
Line 225... | Line 271... | ||
225 | 271 | ||
226 | /* disable VIP */ |
272 | /* disable VIP */ |
227 | WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN)); |
273 | WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN)); |
228 | /* enable the rom */ |
274 | /* enable the rom */ |
229 | WREG32(RADEON_BUS_CNTL, (bus_cntl & ~RADEON_BUS_BIOS_DIS_ROM)); |
275 | WREG32(R600_BUS_CNTL, (bus_cntl & ~R600_BIOS_ROM_DIS)); |
230 | /* Disable VGA mode */ |
276 | /* Disable VGA mode */ |
231 | WREG32(AVIVO_D1VGA_CONTROL, |
277 | WREG32(AVIVO_D1VGA_CONTROL, |
232 | (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | |
278 | (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | |
233 | AVIVO_DVGA_CONTROL_TIMING_SELECT))); |
279 | AVIVO_DVGA_CONTROL_TIMING_SELECT))); |
Line 255... | Line 301... | ||
255 | 301 | ||
Line 256... | Line 302... | ||
256 | r = radeon_read_bios(rdev); |
302 | r = radeon_read_bios(rdev); |
257 | 303 | ||
258 | /* restore regs */ |
304 | /* restore regs */ |
259 | WREG32(RADEON_VIPH_CONTROL, viph_control); |
305 | WREG32(RADEON_VIPH_CONTROL, viph_control); |
260 | WREG32(RADEON_BUS_CNTL, bus_cntl); |
306 | WREG32(R600_BUS_CNTL, bus_cntl); |
261 | WREG32(AVIVO_D1VGA_CONTROL, d1vga_control); |
307 | WREG32(AVIVO_D1VGA_CONTROL, d1vga_control); |
262 | WREG32(AVIVO_D2VGA_CONTROL, d2vga_control); |
308 | WREG32(AVIVO_D2VGA_CONTROL, d2vga_control); |
263 | WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control); |
309 | WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control); |
Line 408... | Line 454... | ||
408 | 454 | ||
409 | static bool radeon_read_disabled_bios(struct radeon_device *rdev) |
455 | static bool radeon_read_disabled_bios(struct radeon_device *rdev) |
410 | { |
456 | { |
411 | if (rdev->flags & RADEON_IS_IGP) |
457 | if (rdev->flags & RADEON_IS_IGP) |
- | 458 | return igp_read_bios_from_vram(rdev); |
|
- | 459 | else if (rdev->family >= CHIP_BARTS) |
|
412 | return igp_read_bios_from_vram(rdev); |
460 | return ni_read_disabled_bios(rdev); |
413 | else if (rdev->family >= CHIP_RV770) |
461 | else if (rdev->family >= CHIP_RV770) |
414 | return r700_read_disabled_bios(rdev); |
462 | return r700_read_disabled_bios(rdev); |
415 | else if (rdev->family >= CHIP_R600) |
463 | else if (rdev->family >= CHIP_R600) |
416 | return r600_read_disabled_bios(rdev); |
464 | return r600_read_disabled_bios(rdev); |