[haiku-commits] haiku: hrev47758 - src/add-ons/kernel/drivers/graphics/radeon_hd

  • From: julian.harnath@xxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 28 Aug 2014 22:22:04 +0200 (CEST)

hrev47758 adds 1 changeset to branch 'master'
old head: 49b9fce5ecdc6d109e2e5362981a2ba74c6a9901
new head: 72ec5a3630aa77a763c645e698c18259b8892953
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=72ec5a3+%5E49b9fce

----------------------------------------------------------------------------

72ec5a3: Use correct PCI register base address for newer Radeon chips
  
  * Radeon chips since Bonaire use a different PCI register base
    address. Select the correct one depending on chipset generation
    (values from Linux driver).
  
  * Makes radeon_hd work for newer APUs/GPUs (tested with Kabini APU).

                          [ Julian Harnath <julian.harnath@xxxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev47758
Commit:      72ec5a3630aa77a763c645e698c18259b8892953
URL:         http://cgit.haiku-os.org/haiku/commit/?id=72ec5a3
Author:      Julian Harnath <julian.harnath@xxxxxxxxxxxxxx>
Date:        Thu Aug 28 20:16:21 2014 UTC

----------------------------------------------------------------------------

2 files changed, 13 insertions(+), 3 deletions(-)
.../kernel/drivers/graphics/radeon_hd/radeon_hd.cpp   | 15 +++++++++++++--
.../drivers/graphics/radeon_hd/radeon_hd_private.h    |  1 -

----------------------------------------------------------------------------

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 fb444e7..5769b11 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
@@ -517,6 +517,16 @@ radeon_hd_getbios_avivo(radeon_info &info)
 }
 
 
+static uint32
+radeon_hd_pci_bar_mmio(uint16 chipsetID)
+{
+       if (chipsetID < RADEON_BONAIRE)
+               return 2;
+       else
+               return 5;
+}
+
+
 status_t
 radeon_hd_init(radeon_info &info)
 {
@@ -542,9 +552,10 @@ radeon_hd_init(radeon_info &info)
 
        // *** Map Memory mapped IO
        AreaKeeper mmioMapper;
+       const uint32 pciBarMmio = radeon_hd_pci_bar_mmio(info.chipsetID);
        info.registers_area = mmioMapper.Map("radeon hd mmio",
-               info.pci->u.h0.base_registers[PCI_BAR_MMIO],
-               info.pci->u.h0.base_register_sizes[PCI_BAR_MMIO],
+               info.pci->u.h0.base_registers[pciBarMmio],
+               info.pci->u.h0.base_register_sizes[pciBarMmio],
                B_ANY_KERNEL_ADDRESS, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA,
                (void**)&info.registers);
        if (mmioMapper.InitCheck() < B_OK) {
diff --git a/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd_private.h 
b/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd_private.h
index ad9d2ed..c4e3203 100644
--- a/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd_private.h
+++ b/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd_private.h
@@ -21,7 +21,6 @@
 
 // PCI Base Address Registers
 #define PCI_BAR_FB      0
-#define PCI_BAR_MMIO    2
 
 #define RADEON_BIOS8(adr, v)   (adr[v])
 #define RADEON_BIOS16(adr, v)  ((adr[v]) | (adr[(v) + 1] << 8))


Other related posts: