diff --git a/headers/private/graphics/radeon_hd/radeon_hd.h b/headers/private/graphics/radeon_hd/radeon_hd.h index 979d44ae56..33c6634921 100644 --- a/headers/private/graphics/radeon_hd/radeon_hd.h +++ b/headers/private/graphics/radeon_hd/radeon_hd.h @@ -75,6 +75,7 @@ struct overlay_registers; struct radeon_shared_info { + uint32 device_index; // accelerant index uint32 device_id; // device pciid area_id mode_list_area; // area containing display mode list uint32 mode_count; diff --git a/src/add-ons/accelerants/radeon_hd/bios.cpp b/src/add-ons/accelerants/radeon_hd/bios.cpp index 7a507cfee2..1c60c18e97 100644 --- a/src/add-ons/accelerants/radeon_hd/bios.cpp +++ b/src/add-ons/accelerants/radeon_hd/bios.cpp @@ -69,6 +69,10 @@ radeon_init_bios(uint8* bios) return B_ERROR; } + #ifdef TRACE_ATOM + radeon_dump_bios(); + #endif + struct card_info *atom_card_info = (card_info*)malloc(sizeof(card_info)); @@ -119,3 +123,33 @@ radeon_init_bios(uint8* bios) return B_OK; } + + +status_t +radeon_dump_bios() +{ + // For debugging use, dump card AtomBIOS + radeon_shared_info &info = *gInfo->shared_info; + + TRACE("%s: Dumping AtomBIOS as ATOM_DEBUG is set...\n", + __func__); + + FILE* fp; + char filename[255]; + sprintf(filename, "/boot/common/cache/tmp/radeon_hd_bios_1002_%" B_PRIx32 + "_%" B_PRIu32 ".bin", info.device_id, info.device_index); + + fp = fopen(filename, "wb"); + if (fp == NULL) { + TRACE("%s: Cannot create AtomBIOS blob at %s\n", __func__, filename); + return B_ERROR; + } + + fwrite(gInfo->rom, info.rom_size, 1, fp); + + fclose(fp); + + TRACE("%s: AtomBIOS dumped to %s\n", __func__, filename); + + return B_OK; +} diff --git a/src/add-ons/accelerants/radeon_hd/bios.h b/src/add-ons/accelerants/radeon_hd/bios.h index 7b9263dca9..f686de1425 100644 --- a/src/add-ons/accelerants/radeon_hd/bios.h +++ b/src/add-ons/accelerants/radeon_hd/bios.h @@ -15,6 +15,7 @@ status_t radeon_init_bios(uint8* bios); +status_t radeon_dump_bios(); #endif /* RADEON_HD_BIOS_H */ diff --git a/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp b/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp index b73f5089f1..e53d997317 100644 --- a/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp +++ b/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp @@ -375,6 +375,7 @@ radeon_hd_init(radeon_info &info) frambufferMapper.Detach(); // Pass common information to accelerant + info.shared_info->device_index = info.id; info.shared_info->device_id = info.device_id; info.shared_info->device_chipset = info.device_chipset; info.shared_info->registers_area = info.registers_area;