radeon_bios.c revision 1.8
1/* $OpenBSD: radeon_bios.c,v 1.8 2016/02/05 08:49:59 kettenis Exp $ */ 2/* 3 * Copyright 2008 Advanced Micro Devices, Inc. 4 * Copyright 2008 Red Hat Inc. 5 * Copyright 2009 Jerome Glisse. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the "Software"), 9 * to deal in the Software without restriction, including without limitation 10 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 * and/or sell copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included in 15 * all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 * OTHER DEALINGS IN THE SOFTWARE. 24 * 25 * Authors: Dave Airlie 26 * Alex Deucher 27 * Jerome Glisse 28 */ 29#include <dev/pci/drm/drmP.h> 30#include <dev/pci/pcidevs.h> 31#include "radeon_reg.h" 32#include "radeon.h" 33#include "atom.h" 34 35#if defined(__amd64__) || defined(__i386__) 36#include <dev/isa/isareg.h> 37#include <dev/isa/isavar.h> 38#endif 39 40/* 41 * BIOS. 42 */ 43 44bool radeon_read_platform_bios(struct radeon_device *); 45 46bool 47radeon_read_platform_bios(struct radeon_device *rdev) 48{ 49#if defined(__amd64__) || defined(__i386__) 50 uint8_t __iomem *bios; 51 bus_size_t size = 256 * 1024; /* ??? */ 52 uint8_t *found = NULL; 53 int i; 54 55 56 if (!(rdev->flags & RADEON_IS_IGP)) 57 if (!radeon_card_posted(rdev)) 58 return false; 59 60 rdev->bios = NULL; 61 62 bios = (u8 *)ISA_HOLE_VADDR(0xc0000); 63 64 for (i = 0; i + 2 < size; i++) { 65 if (bios[i] == 0x55 && bios[i + 1] == 0xaa) { 66 found = bios + i; 67 break; 68 } 69 70 } 71 if (found == NULL) { 72 DRM_ERROR("bios size zero or checksum mismatch\n"); 73 return false; 74 } 75 76 rdev->bios = kmalloc(size, GFP_KERNEL); 77 if (rdev->bios == NULL) 78 return false; 79 80 memcpy(rdev->bios, found, size); 81 82 return true; 83#endif 84 return false; 85} 86 87/* If you boot an IGP board with a discrete card as the primary, 88 * the IGP rom is not accessible via the rom bar as the IGP rom is 89 * part of the system bios. On boot, the system bios puts a 90 * copy of the igp rom at the start of vram if a discrete card is 91 * present. 92 */ 93static bool igp_read_bios_from_vram(struct radeon_device *rdev) 94{ 95 uint8_t __iomem *bios; 96 bus_size_t size = 256 * 1024; /* ??? */ 97 bus_space_handle_t bsh; 98 bus_space_tag_t bst = rdev->memt; 99 100 if (!(rdev->flags & RADEON_IS_IGP)) 101 if (!radeon_card_posted(rdev)) 102 return false; 103 104 rdev->bios = NULL; 105 106 if (bus_space_map(bst, rdev->fb_aper_offset, size, BUS_SPACE_MAP_LINEAR, &bsh) != 0) 107 return false; 108 109 bios = bus_space_vaddr(rdev->memt, bsh); 110 if (bios == NULL) { 111 bus_space_unmap(bst, bsh, size); 112 return false; 113 } 114 if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) { 115 bus_space_unmap(bst, bsh, size); 116 return false; 117 } 118 119 rdev->bios = kmalloc(size, GFP_KERNEL); 120 if (rdev->bios == NULL) { 121 bus_space_unmap(bst, bsh, size); 122 return false; 123 } 124 memcpy_fromio(rdev->bios, bios, size); 125 bus_space_unmap(bst, bsh, size); 126 return true; 127} 128 129static bool radeon_read_bios(struct radeon_device *rdev) 130{ 131 uint8_t __iomem *bios; 132 bus_size_t size; 133 pcireg_t address, mask; 134 bus_space_handle_t romh; 135 int rc; 136 137 rdev->bios = NULL; 138 /* XXX: some cards may return 0 for rom size? ddx has a workaround */ 139 140 address = pci_conf_read(rdev->pc, rdev->pa_tag, PCI_ROM_REG); 141 pci_conf_write(rdev->pc, rdev->pa_tag, PCI_ROM_REG, ~PCI_ROM_ENABLE); 142 mask = pci_conf_read(rdev->pc, rdev->pa_tag, PCI_ROM_REG); 143 address |= PCI_ROM_ENABLE; 144 pci_conf_write(rdev->pc, rdev->pa_tag, PCI_ROM_REG, address); 145 146 size = PCI_ROM_SIZE(mask); 147 if (size == 0) 148 return false; 149 rc = bus_space_map(rdev->memt, PCI_ROM_ADDR(address), size, 150 BUS_SPACE_MAP_LINEAR, &romh); 151 if (rc != 0) { 152 printf(": can't map PCI ROM (%d)\n", rc); 153 return false; 154 } 155 bios = (uint8_t *)bus_space_vaddr(rdev->memt, romh); 156 if (!bios) { 157 printf(": bus_space_vaddr failed\n"); 158 return false; 159 } 160 161 if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) 162 goto fail; 163 rdev->bios = kmalloc(size, GFP_KERNEL); 164 memcpy(rdev->bios, bios, size); 165 bus_space_unmap(rdev->memt, romh, size); 166 return true; 167fail: 168 bus_space_unmap(rdev->memt, romh, size); 169 return false; 170} 171 172#ifdef CONFIG_ACPI 173/* ATRM is used to get the BIOS on the discrete cards in 174 * dual-gpu systems. 175 */ 176/* retrieve the ROM in 4k blocks */ 177#define ATRM_BIOS_PAGE 4096 178/** 179 * radeon_atrm_call - fetch a chunk of the vbios 180 * 181 * @atrm_handle: acpi ATRM handle 182 * @bios: vbios image pointer 183 * @offset: offset of vbios image data to fetch 184 * @len: length of vbios image data to fetch 185 * 186 * Executes ATRM to fetch a chunk of the discrete 187 * vbios image on PX systems (all asics). 188 * Returns the length of the buffer fetched. 189 */ 190static int radeon_atrm_call(acpi_handle atrm_handle, uint8_t *bios, 191 int offset, int len) 192{ 193 acpi_status status; 194 union acpi_object atrm_arg_elements[2], *obj; 195 struct acpi_object_list atrm_arg; 196 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL}; 197 198 atrm_arg.count = 2; 199 atrm_arg.pointer = &atrm_arg_elements[0]; 200 201 atrm_arg_elements[0].type = ACPI_TYPE_INTEGER; 202 atrm_arg_elements[0].integer.value = offset; 203 204 atrm_arg_elements[1].type = ACPI_TYPE_INTEGER; 205 atrm_arg_elements[1].integer.value = len; 206 207 status = acpi_evaluate_object(atrm_handle, NULL, &atrm_arg, &buffer); 208 if (ACPI_FAILURE(status)) { 209 printk("failed to evaluate ATRM got %s\n", acpi_format_exception(status)); 210 return -ENODEV; 211 } 212 213 obj = (union acpi_object *)buffer.pointer; 214 memcpy(bios+offset, obj->buffer.pointer, obj->buffer.length); 215 len = obj->buffer.length; 216 kfree(buffer.pointer); 217 return len; 218} 219 220static bool radeon_atrm_get_bios(struct radeon_device *rdev) 221{ 222 int ret; 223 int size = 256 * 1024; 224 int i; 225 struct pci_dev *pdev = NULL; 226 acpi_handle dhandle, atrm_handle; 227 acpi_status status; 228 bool found = false; 229 230 /* ATRM is for the discrete card only */ 231 if (rdev->flags & RADEON_IS_IGP) 232 return false; 233 234 while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) { 235 dhandle = DEVICE_ACPI_HANDLE(&pdev->dev); 236 if (!dhandle) 237 continue; 238 239 status = acpi_get_handle(dhandle, "ATRM", &atrm_handle); 240 if (!ACPI_FAILURE(status)) { 241 found = true; 242 break; 243 } 244 } 245 246 if (!found) { 247 while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) { 248 dhandle = ACPI_HANDLE(&pdev->dev); 249 if (!dhandle) 250 continue; 251 252 status = acpi_get_handle(dhandle, "ATRM", &atrm_handle); 253 if (!ACPI_FAILURE(status)) { 254 found = true; 255 break; 256 } 257 } 258 } 259 260 if (!found) 261 return false; 262 263 rdev->bios = kmalloc(size, GFP_KERNEL); 264 if (!rdev->bios) { 265 DRM_ERROR("Unable to allocate bios\n"); 266 return false; 267 } 268 269 for (i = 0; i < size / ATRM_BIOS_PAGE; i++) { 270 ret = radeon_atrm_call(atrm_handle, 271 rdev->bios, 272 (i * ATRM_BIOS_PAGE), 273 ATRM_BIOS_PAGE); 274 if (ret < ATRM_BIOS_PAGE) 275 break; 276 } 277 278 if (i == 0 || rdev->bios[0] != 0x55 || rdev->bios[1] != 0xaa) { 279 kfree(rdev->bios); 280 return false; 281 } 282 return true; 283} 284#else 285static inline bool radeon_atrm_get_bios(struct radeon_device *rdev) 286{ 287 return false; 288} 289#endif 290 291static bool ni_read_disabled_bios(struct radeon_device *rdev) 292{ 293 u32 bus_cntl; 294 u32 d1vga_control; 295 u32 d2vga_control; 296 u32 vga_render_control; 297 u32 rom_cntl; 298 bool r; 299 300 bus_cntl = RREG32(R600_BUS_CNTL); 301 d1vga_control = RREG32(AVIVO_D1VGA_CONTROL); 302 d2vga_control = RREG32(AVIVO_D2VGA_CONTROL); 303 vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL); 304 rom_cntl = RREG32(R600_ROM_CNTL); 305 306 /* enable the rom */ 307 WREG32(R600_BUS_CNTL, (bus_cntl & ~R600_BIOS_ROM_DIS)); 308 /* Disable VGA mode */ 309 WREG32(AVIVO_D1VGA_CONTROL, 310 (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | 311 AVIVO_DVGA_CONTROL_TIMING_SELECT))); 312 WREG32(AVIVO_D2VGA_CONTROL, 313 (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | 314 AVIVO_DVGA_CONTROL_TIMING_SELECT))); 315 WREG32(AVIVO_VGA_RENDER_CONTROL, 316 (vga_render_control & ~AVIVO_VGA_VSTATUS_CNTL_MASK)); 317 WREG32(R600_ROM_CNTL, rom_cntl | R600_SCK_OVERWRITE); 318 319 r = radeon_read_bios(rdev); 320 321 /* restore regs */ 322 WREG32(R600_BUS_CNTL, bus_cntl); 323 WREG32(AVIVO_D1VGA_CONTROL, d1vga_control); 324 WREG32(AVIVO_D2VGA_CONTROL, d2vga_control); 325 WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control); 326 WREG32(R600_ROM_CNTL, rom_cntl); 327 return r; 328} 329 330static bool r700_read_disabled_bios(struct radeon_device *rdev) 331{ 332 uint32_t viph_control; 333 uint32_t bus_cntl; 334 uint32_t d1vga_control; 335 uint32_t d2vga_control; 336 uint32_t vga_render_control; 337 uint32_t rom_cntl; 338 uint32_t cg_spll_func_cntl = 0; 339 uint32_t cg_spll_status; 340 bool r; 341 342 viph_control = RREG32(RADEON_VIPH_CONTROL); 343 bus_cntl = RREG32(R600_BUS_CNTL); 344 d1vga_control = RREG32(AVIVO_D1VGA_CONTROL); 345 d2vga_control = RREG32(AVIVO_D2VGA_CONTROL); 346 vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL); 347 rom_cntl = RREG32(R600_ROM_CNTL); 348 349 /* disable VIP */ 350 WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN)); 351 /* enable the rom */ 352 WREG32(R600_BUS_CNTL, (bus_cntl & ~R600_BIOS_ROM_DIS)); 353 /* Disable VGA mode */ 354 WREG32(AVIVO_D1VGA_CONTROL, 355 (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | 356 AVIVO_DVGA_CONTROL_TIMING_SELECT))); 357 WREG32(AVIVO_D2VGA_CONTROL, 358 (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | 359 AVIVO_DVGA_CONTROL_TIMING_SELECT))); 360 WREG32(AVIVO_VGA_RENDER_CONTROL, 361 (vga_render_control & ~AVIVO_VGA_VSTATUS_CNTL_MASK)); 362 363 if (rdev->family == CHIP_RV730) { 364 cg_spll_func_cntl = RREG32(R600_CG_SPLL_FUNC_CNTL); 365 366 /* enable bypass mode */ 367 WREG32(R600_CG_SPLL_FUNC_CNTL, (cg_spll_func_cntl | 368 R600_SPLL_BYPASS_EN)); 369 370 /* wait for SPLL_CHG_STATUS to change to 1 */ 371 cg_spll_status = 0; 372 while (!(cg_spll_status & R600_SPLL_CHG_STATUS)) 373 cg_spll_status = RREG32(R600_CG_SPLL_STATUS); 374 375 WREG32(R600_ROM_CNTL, (rom_cntl & ~R600_SCK_OVERWRITE)); 376 } else 377 WREG32(R600_ROM_CNTL, (rom_cntl | R600_SCK_OVERWRITE)); 378 379 r = radeon_read_bios(rdev); 380 381 /* restore regs */ 382 if (rdev->family == CHIP_RV730) { 383 WREG32(R600_CG_SPLL_FUNC_CNTL, cg_spll_func_cntl); 384 385 /* wait for SPLL_CHG_STATUS to change to 1 */ 386 cg_spll_status = 0; 387 while (!(cg_spll_status & R600_SPLL_CHG_STATUS)) 388 cg_spll_status = RREG32(R600_CG_SPLL_STATUS); 389 } 390 WREG32(RADEON_VIPH_CONTROL, viph_control); 391 WREG32(R600_BUS_CNTL, bus_cntl); 392 WREG32(AVIVO_D1VGA_CONTROL, d1vga_control); 393 WREG32(AVIVO_D2VGA_CONTROL, d2vga_control); 394 WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control); 395 WREG32(R600_ROM_CNTL, rom_cntl); 396 return r; 397} 398 399static bool r600_read_disabled_bios(struct radeon_device *rdev) 400{ 401 uint32_t viph_control; 402 uint32_t bus_cntl; 403 uint32_t d1vga_control; 404 uint32_t d2vga_control; 405 uint32_t vga_render_control; 406 uint32_t rom_cntl; 407 uint32_t general_pwrmgt; 408 uint32_t low_vid_lower_gpio_cntl; 409 uint32_t medium_vid_lower_gpio_cntl; 410 uint32_t high_vid_lower_gpio_cntl; 411 uint32_t ctxsw_vid_lower_gpio_cntl; 412 uint32_t lower_gpio_enable; 413 bool r; 414 415 viph_control = RREG32(RADEON_VIPH_CONTROL); 416 bus_cntl = RREG32(R600_BUS_CNTL); 417 d1vga_control = RREG32(AVIVO_D1VGA_CONTROL); 418 d2vga_control = RREG32(AVIVO_D2VGA_CONTROL); 419 vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL); 420 rom_cntl = RREG32(R600_ROM_CNTL); 421 general_pwrmgt = RREG32(R600_GENERAL_PWRMGT); 422 low_vid_lower_gpio_cntl = RREG32(R600_LOW_VID_LOWER_GPIO_CNTL); 423 medium_vid_lower_gpio_cntl = RREG32(R600_MEDIUM_VID_LOWER_GPIO_CNTL); 424 high_vid_lower_gpio_cntl = RREG32(R600_HIGH_VID_LOWER_GPIO_CNTL); 425 ctxsw_vid_lower_gpio_cntl = RREG32(R600_CTXSW_VID_LOWER_GPIO_CNTL); 426 lower_gpio_enable = RREG32(R600_LOWER_GPIO_ENABLE); 427 428 /* disable VIP */ 429 WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN)); 430 /* enable the rom */ 431 WREG32(R600_BUS_CNTL, (bus_cntl & ~R600_BIOS_ROM_DIS)); 432 /* Disable VGA mode */ 433 WREG32(AVIVO_D1VGA_CONTROL, 434 (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | 435 AVIVO_DVGA_CONTROL_TIMING_SELECT))); 436 WREG32(AVIVO_D2VGA_CONTROL, 437 (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | 438 AVIVO_DVGA_CONTROL_TIMING_SELECT))); 439 WREG32(AVIVO_VGA_RENDER_CONTROL, 440 (vga_render_control & ~AVIVO_VGA_VSTATUS_CNTL_MASK)); 441 442 WREG32(R600_ROM_CNTL, 443 ((rom_cntl & ~R600_SCK_PRESCALE_CRYSTAL_CLK_MASK) | 444 (1 << R600_SCK_PRESCALE_CRYSTAL_CLK_SHIFT) | 445 R600_SCK_OVERWRITE)); 446 447 WREG32(R600_GENERAL_PWRMGT, (general_pwrmgt & ~R600_OPEN_DRAIN_PADS)); 448 WREG32(R600_LOW_VID_LOWER_GPIO_CNTL, 449 (low_vid_lower_gpio_cntl & ~0x400)); 450 WREG32(R600_MEDIUM_VID_LOWER_GPIO_CNTL, 451 (medium_vid_lower_gpio_cntl & ~0x400)); 452 WREG32(R600_HIGH_VID_LOWER_GPIO_CNTL, 453 (high_vid_lower_gpio_cntl & ~0x400)); 454 WREG32(R600_CTXSW_VID_LOWER_GPIO_CNTL, 455 (ctxsw_vid_lower_gpio_cntl & ~0x400)); 456 WREG32(R600_LOWER_GPIO_ENABLE, (lower_gpio_enable | 0x400)); 457 458 r = radeon_read_bios(rdev); 459 460 /* restore regs */ 461 WREG32(RADEON_VIPH_CONTROL, viph_control); 462 WREG32(R600_BUS_CNTL, bus_cntl); 463 WREG32(AVIVO_D1VGA_CONTROL, d1vga_control); 464 WREG32(AVIVO_D2VGA_CONTROL, d2vga_control); 465 WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control); 466 WREG32(R600_ROM_CNTL, rom_cntl); 467 WREG32(R600_GENERAL_PWRMGT, general_pwrmgt); 468 WREG32(R600_LOW_VID_LOWER_GPIO_CNTL, low_vid_lower_gpio_cntl); 469 WREG32(R600_MEDIUM_VID_LOWER_GPIO_CNTL, medium_vid_lower_gpio_cntl); 470 WREG32(R600_HIGH_VID_LOWER_GPIO_CNTL, high_vid_lower_gpio_cntl); 471 WREG32(R600_CTXSW_VID_LOWER_GPIO_CNTL, ctxsw_vid_lower_gpio_cntl); 472 WREG32(R600_LOWER_GPIO_ENABLE, lower_gpio_enable); 473 return r; 474} 475 476static bool avivo_read_disabled_bios(struct radeon_device *rdev) 477{ 478 uint32_t seprom_cntl1; 479 uint32_t viph_control; 480 uint32_t bus_cntl; 481 uint32_t d1vga_control; 482 uint32_t d2vga_control; 483 uint32_t vga_render_control; 484 uint32_t gpiopad_a; 485 uint32_t gpiopad_en; 486 uint32_t gpiopad_mask; 487 bool r; 488 489 seprom_cntl1 = RREG32(RADEON_SEPROM_CNTL1); 490 viph_control = RREG32(RADEON_VIPH_CONTROL); 491 bus_cntl = RREG32(RV370_BUS_CNTL); 492 d1vga_control = RREG32(AVIVO_D1VGA_CONTROL); 493 d2vga_control = RREG32(AVIVO_D2VGA_CONTROL); 494 vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL); 495 gpiopad_a = RREG32(RADEON_GPIOPAD_A); 496 gpiopad_en = RREG32(RADEON_GPIOPAD_EN); 497 gpiopad_mask = RREG32(RADEON_GPIOPAD_MASK); 498 499 WREG32(RADEON_SEPROM_CNTL1, 500 ((seprom_cntl1 & ~RADEON_SCK_PRESCALE_MASK) | 501 (0xc << RADEON_SCK_PRESCALE_SHIFT))); 502 WREG32(RADEON_GPIOPAD_A, 0); 503 WREG32(RADEON_GPIOPAD_EN, 0); 504 WREG32(RADEON_GPIOPAD_MASK, 0); 505 506 /* disable VIP */ 507 WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN)); 508 509 /* enable the rom */ 510 WREG32(RV370_BUS_CNTL, (bus_cntl & ~RV370_BUS_BIOS_DIS_ROM)); 511 512 /* Disable VGA mode */ 513 WREG32(AVIVO_D1VGA_CONTROL, 514 (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | 515 AVIVO_DVGA_CONTROL_TIMING_SELECT))); 516 WREG32(AVIVO_D2VGA_CONTROL, 517 (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | 518 AVIVO_DVGA_CONTROL_TIMING_SELECT))); 519 WREG32(AVIVO_VGA_RENDER_CONTROL, 520 (vga_render_control & ~AVIVO_VGA_VSTATUS_CNTL_MASK)); 521 522 r = radeon_read_bios(rdev); 523 524 /* restore regs */ 525 WREG32(RADEON_SEPROM_CNTL1, seprom_cntl1); 526 WREG32(RADEON_VIPH_CONTROL, viph_control); 527 WREG32(RV370_BUS_CNTL, bus_cntl); 528 WREG32(AVIVO_D1VGA_CONTROL, d1vga_control); 529 WREG32(AVIVO_D2VGA_CONTROL, d2vga_control); 530 WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control); 531 WREG32(RADEON_GPIOPAD_A, gpiopad_a); 532 WREG32(RADEON_GPIOPAD_EN, gpiopad_en); 533 WREG32(RADEON_GPIOPAD_MASK, gpiopad_mask); 534 return r; 535} 536 537static bool legacy_read_disabled_bios(struct radeon_device *rdev) 538{ 539 uint32_t seprom_cntl1; 540 uint32_t viph_control; 541 uint32_t bus_cntl; 542 uint32_t crtc_gen_cntl; 543 uint32_t crtc2_gen_cntl; 544 uint32_t crtc_ext_cntl; 545 uint32_t fp2_gen_cntl; 546 bool r; 547 548 seprom_cntl1 = RREG32(RADEON_SEPROM_CNTL1); 549 viph_control = RREG32(RADEON_VIPH_CONTROL); 550 if (rdev->flags & RADEON_IS_PCIE) 551 bus_cntl = RREG32(RV370_BUS_CNTL); 552 else 553 bus_cntl = RREG32(RADEON_BUS_CNTL); 554 crtc_gen_cntl = RREG32(RADEON_CRTC_GEN_CNTL); 555 crtc2_gen_cntl = 0; 556 crtc_ext_cntl = RREG32(RADEON_CRTC_EXT_CNTL); 557 fp2_gen_cntl = 0; 558 559 if (rdev->ddev->pci_device == PCI_DEVICE_ID_ATI_RADEON_QY) { 560 fp2_gen_cntl = RREG32(RADEON_FP2_GEN_CNTL); 561 } 562 563 if (!(rdev->flags & RADEON_SINGLE_CRTC)) { 564 crtc2_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL); 565 } 566 567 WREG32(RADEON_SEPROM_CNTL1, 568 ((seprom_cntl1 & ~RADEON_SCK_PRESCALE_MASK) | 569 (0xc << RADEON_SCK_PRESCALE_SHIFT))); 570 571 /* disable VIP */ 572 WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN)); 573 574 /* enable the rom */ 575 if (rdev->flags & RADEON_IS_PCIE) 576 WREG32(RV370_BUS_CNTL, (bus_cntl & ~RV370_BUS_BIOS_DIS_ROM)); 577 else 578 WREG32(RADEON_BUS_CNTL, (bus_cntl & ~RADEON_BUS_BIOS_DIS_ROM)); 579 580 /* Turn off mem requests and CRTC for both controllers */ 581 WREG32(RADEON_CRTC_GEN_CNTL, 582 ((crtc_gen_cntl & ~RADEON_CRTC_EN) | 583 (RADEON_CRTC_DISP_REQ_EN_B | 584 RADEON_CRTC_EXT_DISP_EN))); 585 if (!(rdev->flags & RADEON_SINGLE_CRTC)) { 586 WREG32(RADEON_CRTC2_GEN_CNTL, 587 ((crtc2_gen_cntl & ~RADEON_CRTC2_EN) | 588 RADEON_CRTC2_DISP_REQ_EN_B)); 589 } 590 /* Turn off CRTC */ 591 WREG32(RADEON_CRTC_EXT_CNTL, 592 ((crtc_ext_cntl & ~RADEON_CRTC_CRT_ON) | 593 (RADEON_CRTC_SYNC_TRISTAT | 594 RADEON_CRTC_DISPLAY_DIS))); 595 596 if (rdev->ddev->pci_device == PCI_DEVICE_ID_ATI_RADEON_QY) { 597 WREG32(RADEON_FP2_GEN_CNTL, (fp2_gen_cntl & ~RADEON_FP2_ON)); 598 } 599 600 r = radeon_read_bios(rdev); 601 602 /* restore regs */ 603 WREG32(RADEON_SEPROM_CNTL1, seprom_cntl1); 604 WREG32(RADEON_VIPH_CONTROL, viph_control); 605 if (rdev->flags & RADEON_IS_PCIE) 606 WREG32(RV370_BUS_CNTL, bus_cntl); 607 else 608 WREG32(RADEON_BUS_CNTL, bus_cntl); 609 WREG32(RADEON_CRTC_GEN_CNTL, crtc_gen_cntl); 610 if (!(rdev->flags & RADEON_SINGLE_CRTC)) { 611 WREG32(RADEON_CRTC2_GEN_CNTL, crtc2_gen_cntl); 612 } 613 WREG32(RADEON_CRTC_EXT_CNTL, crtc_ext_cntl); 614 if (rdev->ddev->pci_device == PCI_DEVICE_ID_ATI_RADEON_QY) { 615 WREG32(RADEON_FP2_GEN_CNTL, fp2_gen_cntl); 616 } 617 return r; 618} 619 620static bool radeon_read_disabled_bios(struct radeon_device *rdev) 621{ 622 if (rdev->flags & RADEON_IS_IGP) 623 return igp_read_bios_from_vram(rdev); 624 else if (rdev->family >= CHIP_BARTS) 625 return ni_read_disabled_bios(rdev); 626 else if (rdev->family >= CHIP_RV770) 627 return r700_read_disabled_bios(rdev); 628 else if (rdev->family >= CHIP_R600) 629 return r600_read_disabled_bios(rdev); 630 else if (rdev->family >= CHIP_RS600) 631 return avivo_read_disabled_bios(rdev); 632 else 633 return legacy_read_disabled_bios(rdev); 634} 635 636#ifdef CONFIG_ACPI 637static bool radeon_acpi_vfct_bios(struct radeon_device *rdev) 638{ 639 bool ret = false; 640 struct acpi_table_header *hdr; 641 acpi_size tbl_size; 642 UEFI_ACPI_VFCT *vfct; 643 GOP_VBIOS_CONTENT *vbios; 644 VFCT_IMAGE_HEADER *vhdr; 645 646 if (!ACPI_SUCCESS(acpi_get_table_with_size("VFCT", 1, &hdr, &tbl_size))) 647 return false; 648 if (tbl_size < sizeof(UEFI_ACPI_VFCT)) { 649 DRM_ERROR("ACPI VFCT table present but broken (too short #1)\n"); 650 goto out_unmap; 651 } 652 653 vfct = (UEFI_ACPI_VFCT *)hdr; 654 if (vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) > tbl_size) { 655 DRM_ERROR("ACPI VFCT table present but broken (too short #2)\n"); 656 goto out_unmap; 657 } 658 659 vbios = (GOP_VBIOS_CONTENT *)((char *)hdr + vfct->VBIOSImageOffset); 660 vhdr = &vbios->VbiosHeader; 661 DRM_INFO("ACPI VFCT contains a BIOS for %02x:%02x.%d %04x:%04x, size %d\n", 662 vhdr->PCIBus, vhdr->PCIDevice, vhdr->PCIFunction, 663 vhdr->VendorID, vhdr->DeviceID, vhdr->ImageLength); 664 665 if (vhdr->PCIBus != rdev->pdev->bus->number || 666 vhdr->PCIDevice != PCI_SLOT(rdev->pdev->devfn) || 667 vhdr->PCIFunction != PCI_FUNC(rdev->pdev->devfn) || 668 vhdr->VendorID != rdev->pdev->vendor || 669 vhdr->DeviceID != rdev->pdev->device) { 670 DRM_INFO("ACPI VFCT table is not for this card\n"); 671 goto out_unmap; 672 }; 673 674 if (vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) + vhdr->ImageLength > tbl_size) { 675 DRM_ERROR("ACPI VFCT image truncated\n"); 676 goto out_unmap; 677 } 678 679 rdev->bios = kmemdup(&vbios->VbiosContent, vhdr->ImageLength, GFP_KERNEL); 680 ret = !!rdev->bios; 681 682out_unmap: 683 return ret; 684} 685#else 686static inline bool radeon_acpi_vfct_bios(struct radeon_device *rdev) 687{ 688 return false; 689} 690#endif 691 692bool radeon_get_bios(struct radeon_device *rdev) 693{ 694 bool r; 695 uint16_t tmp; 696 697 r = radeon_atrm_get_bios(rdev); 698 if (r == false) 699 r = radeon_acpi_vfct_bios(rdev); 700 if (r == false) 701 r = igp_read_bios_from_vram(rdev); 702 if (r == false) 703 r = radeon_read_platform_bios(rdev); 704 if (r == false) 705 r = radeon_read_bios(rdev); 706 if (r == false) { 707 r = radeon_read_disabled_bios(rdev); 708 } 709 if (r == false || rdev->bios == NULL) { 710 DRM_ERROR("Unable to locate a BIOS ROM\n"); 711 rdev->bios = NULL; 712 return false; 713 } 714 if (rdev->bios[0] != 0x55 || rdev->bios[1] != 0xaa) { 715 printk("BIOS signature incorrect %x %x\n", rdev->bios[0], rdev->bios[1]); 716 goto free_bios; 717 } 718 719 tmp = RBIOS16(0x18); 720 if (RBIOS8(tmp + 0x14) != 0x0) { 721 DRM_INFO("Not an x86 BIOS ROM, not using.\n"); 722 goto free_bios; 723 } 724 725 rdev->bios_header_start = RBIOS16(0x48); 726 if (!rdev->bios_header_start) { 727 goto free_bios; 728 } 729 tmp = rdev->bios_header_start + 4; 730 if (!memcmp(rdev->bios + tmp, "ATOM", 4) || 731 !memcmp(rdev->bios + tmp, "MOTA", 4)) { 732 rdev->is_atom_bios = true; 733 } else { 734 rdev->is_atom_bios = false; 735 } 736 737 DRM_DEBUG("%sBIOS detected\n", rdev->is_atom_bios ? "ATOM" : "COM"); 738 return true; 739free_bios: 740 kfree(rdev->bios); 741 rdev->bios = NULL; 742 return false; 743} 744