[haiku-commits] haiku: hrev43769 - in src/add-ons/accelerants/radeon_hd: . atombios

  • From: kallisti5@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 22 Feb 2012 22:27:46 +0100 (CET)

hrev43769 adds 5 changesets to branch 'master'
old head: c1cd48b72f6be4828edf9a25ed306f354e99dcd0
new head: 24dfcdc1950fac5f74340ebe11a05a06b433a6a5

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

962eb31: radeon_hd: Add better tracing

4ee41b2: radeon_hd: Disable spread spectrum
  
  * SS requires complex pll adjustments that we don't do atm

c937ca1: radeon_hd: Improve pll DP bridge code
  
  * Only set DP bridge on DP bridge.
  * Add a bit of tracing

43b4a25: radeon_hd: The lack of a default case here was on purpose

24dfcdc: radeon_hd: AtomBIOS parser improvements
  
  * "DANGER" is a little strong of a warning
  * Provide better tracing when things go wrong
  * Give raw table / operation values in addition
    to AtomBIOS pointers

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

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

6 files changed, 71 insertions(+), 18 deletions(-)
src/add-ons/accelerants/radeon_hd/accelerant.cpp   |    3 +
.../accelerants/radeon_hd/atombios/atom.cpp        |   33 +++++++++++-----
src/add-ons/accelerants/radeon_hd/encoder.cpp      |    1 +
src/add-ons/accelerants/radeon_hd/gpu.cpp          |   33 ++++++++++++++++
src/add-ons/accelerants/radeon_hd/gpu.h            |    1 +
src/add-ons/accelerants/radeon_hd/pll.cpp          |   18 +++++----

############################################################################

Commit:      962eb31b1cb88dea2f96bbbee412834e0e716775
URL:         http://cgit.haiku-os.org/haiku/commit/?id=962eb31
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Wed Feb 22 11:10:37 2012 UTC

radeon_hd: Add better tracing

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

diff --git a/src/add-ons/accelerants/radeon_hd/encoder.cpp 
b/src/add-ons/accelerants/radeon_hd/encoder.cpp
index df218c4..e8447f2 100644
--- a/src/add-ons/accelerants/radeon_hd/encoder.cpp
+++ b/src/add-ons/accelerants/radeon_hd/encoder.cpp
@@ -1476,6 +1476,10 @@ encoder_dpms_set(uint8 crtcID, int mode)
                        else
                                index = GetIndexIntoMasterTable(COMMAND, 
DAC2OutputControl);
                        break;
+               default:
+                       ERROR("%s: Unknown encoder object! (%" B_PRIu16 ")\n",
+                               __func__, encoderID);
+                       return;
        }
 
        switch (mode) {

############################################################################

Commit:      4ee41b26a00408835f410ee25b3241093c7f40d9
URL:         http://cgit.haiku-os.org/haiku/commit/?id=4ee41b2
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Wed Feb 22 12:31:53 2012 UTC

radeon_hd: Disable spread spectrum

* SS requires complex pll adjustments that we don't do atm

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

diff --git a/src/add-ons/accelerants/radeon_hd/accelerant.cpp 
b/src/add-ons/accelerants/radeon_hd/accelerant.cpp
index 9fd4da4..a778475 100644
--- a/src/add-ons/accelerants/radeon_hd/accelerant.cpp
+++ b/src/add-ons/accelerants/radeon_hd/accelerant.cpp
@@ -263,6 +263,9 @@ radeon_init_accelerant(int device)
 
        radeon_init_bios(gInfo->rom);
 
+       // disable spread spectrum as it requires lots of extra calculations
+       radeon_gpu_ss_disable();
+
        // find GPIO pins from AtomBIOS
        gpio_probe();
 
diff --git a/src/add-ons/accelerants/radeon_hd/gpu.cpp 
b/src/add-ons/accelerants/radeon_hd/gpu.cpp
index fa26593..3d3829e 100644
--- a/src/add-ons/accelerants/radeon_hd/gpu.cpp
+++ b/src/add-ons/accelerants/radeon_hd/gpu.cpp
@@ -524,3 +524,36 @@ radeon_gpu_irq_setup()
 
        return B_ERROR;
 }
+
+
+status_t
+radeon_gpu_ss_disable()
+{
+       TRACE("%s called\n", __func__);
+
+       radeon_shared_info &info = *gInfo->shared_info;
+       uint32 ssControl;
+
+       if (info.chipsetID >= RADEON_CEDAR) {
+               // PLL1
+               ssControl = Read32(OUT, EVERGREEN_P1PLL_SS_CNTL);
+               ssControl &= ~EVERGREEN_PxPLL_SS_EN;
+               Write32(OUT, EVERGREEN_P1PLL_SS_CNTL, ssControl);
+               // PLL2
+               ssControl = Read32(OUT, EVERGREEN_P2PLL_SS_CNTL);
+               ssControl &= ~EVERGREEN_PxPLL_SS_EN;
+               Write32(OUT, EVERGREEN_P2PLL_SS_CNTL, ssControl);
+       } else if (info.chipsetID >= RADEON_RS600) {
+               // PLL1
+               ssControl = Read32(OUT, AVIVO_P1PLL_INT_SS_CNTL);
+               ssControl &= ~1;
+               Write32(OUT, AVIVO_P1PLL_INT_SS_CNTL, ssControl);
+               // PLL2
+               ssControl = Read32(OUT, AVIVO_P2PLL_INT_SS_CNTL);
+               ssControl &= ~1;
+               Write32(OUT, AVIVO_P2PLL_INT_SS_CNTL, ssControl);
+       } else
+               return B_ERROR;
+
+       return B_OK;
+}
diff --git a/src/add-ons/accelerants/radeon_hd/gpu.h 
b/src/add-ons/accelerants/radeon_hd/gpu.h
index 6ca5087..324ba28 100644
--- a/src/add-ons/accelerants/radeon_hd/gpu.h
+++ b/src/add-ons/accelerants/radeon_hd/gpu.h
@@ -176,6 +176,7 @@ void radeon_gpu_mc_resume(struct gpu_state *gpuState);
 uint32 radeon_gpu_mc_idlecheck();
 status_t radeon_gpu_mc_setup();
 status_t radeon_gpu_irq_setup();
+status_t radeon_gpu_ss_disable();
 
 
 #endif

############################################################################

Commit:      c937ca1987565eae3496d16b3e8b1580c5f550a5
URL:         http://cgit.haiku-os.org/haiku/commit/?id=c937ca1
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Wed Feb 22 12:52:51 2012 UTC

radeon_hd: Improve pll DP bridge code

* Only set DP bridge on DP bridge.
* Add a bit of tracing

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

diff --git a/src/add-ons/accelerants/radeon_hd/pll.cpp 
b/src/add-ons/accelerants/radeon_hd/pll.cpp
index 075c0ba..b63efa1 100644
--- a/src/add-ons/accelerants/radeon_hd/pll.cpp
+++ b/src/add-ons/accelerants/radeon_hd/pll.cpp
@@ -50,6 +50,9 @@ pll_limit_probe(pll_info* pll)
                return B_ERROR;
        }
 
+       TRACE("%s: table %" B_PRIu8 ".%" B_PRIu8 "\n", __func__,
+               tableMajor, tableMinor);
+
        union atomFirmwareInfo {
                ATOM_FIRMWARE_INFO info;
                ATOM_FIRMWARE_INFO_V1_2 info_12;
@@ -342,14 +345,7 @@ pll_adjust(pll_info* pll, uint8 crtcID)
        uint32 encoderID = gConnector[connectorIndex]->encoder.objectID;
        uint32 encoderMode = display_get_encoder_mode(connectorIndex);
        uint32 encoderFlags = gConnector[connectorIndex]->encoder.flags;
-       bool dpBridge = false;
-
-       if ((encoderFlags & (ATOM_DEVICE_LCD_SUPPORT | ATOM_DEVICE_DFP_SUPPORT))
-               || gConnector[connectorIndex]->encoder.isDPBridge) {
-               TRACE("%s: external DP bridge detected!\n", __func__);
-               dpBridge = true;
-       }
-
+       bool dpBridge = gConnector[connectorIndex]->encoder.isDPBridge;
 
        if (info.dceMajor >= 3) {
 
@@ -362,6 +358,9 @@ pll_adjust(pll_info* pll, uint8 crtcID)
                        return B_ERROR;
                }
 
+               TRACE("%s: table %" B_PRIu8 ".%" B_PRIu8 "\n", __func__,
+                       tableMajor, tableMinor);
+
                // Prepare arguments for AtomBIOS call
                union adjustPixelClock {
                        ADJUST_DISPLAY_PLL_PS_ALLOCATION v1;
@@ -500,6 +499,9 @@ pll_set(uint8 pllID, uint32 pixelClock, uint8 crtcID)
        int index = GetIndexIntoMasterTable(COMMAND, SetPixelClock);
        atom_parse_cmd_header(gAtomContext, index, &tableMajor, &tableMinor);
 
+       TRACE("%s: table %" B_PRIu8 ".%" B_PRIu8 "\n", __func__,
+               tableMajor, tableMinor);
+
        uint32 bitsPerColor = 8;
                // TODO: Digital Depth, EDID 1.4+ on digital displays
                // isn't in Haiku edid common code?

############################################################################

Commit:      43b4a25fe4354104a35e578caf56dee187b813bd
URL:         http://cgit.haiku-os.org/haiku/commit/?id=43b4a25
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Wed Feb 22 13:50:21 2012 UTC

radeon_hd: The lack of a default case here was on purpose

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

diff --git a/src/add-ons/accelerants/radeon_hd/encoder.cpp 
b/src/add-ons/accelerants/radeon_hd/encoder.cpp
index e8447f2..0a88ca7 100644
--- a/src/add-ons/accelerants/radeon_hd/encoder.cpp
+++ b/src/add-ons/accelerants/radeon_hd/encoder.cpp
@@ -1476,10 +1476,7 @@ encoder_dpms_set(uint8 crtcID, int mode)
                        else
                                index = GetIndexIntoMasterTable(COMMAND, 
DAC2OutputControl);
                        break;
-               default:
-                       ERROR("%s: Unknown encoder object! (%" B_PRIu16 ")\n",
-                               __func__, encoderID);
-                       return;
+               // default, none on purpose
        }
 
        switch (mode) {

############################################################################

Revision:    hrev43769
Commit:      24dfcdc1950fac5f74340ebe11a05a06b433a6a5
URL:         http://cgit.haiku-os.org/haiku/commit/?id=24dfcdc
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Wed Feb 22 15:35:15 2012 UTC

radeon_hd: AtomBIOS parser improvements

* "DANGER" is a little strong of a warning
* Provide better tracing when things go wrong
* Give raw table / operation values in addition
  to AtomBIOS pointers

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

diff --git a/src/add-ons/accelerants/radeon_hd/atombios/atom.cpp 
b/src/add-ons/accelerants/radeon_hd/atombios/atom.cpp
index 6df03d2..3d71400 100644
--- a/src/add-ons/accelerants/radeon_hd/atombios/atom.cpp
+++ b/src/add-ons/accelerants/radeon_hd/atombios/atom.cpp
@@ -661,9 +661,8 @@ atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
        if (execute) {
                if (ctx->last_jump == (ctx->start + target)) {
                        if (ctx->last_jump_count > ATOM_OP_JMP_TIMEOUT) {
-                               ERROR("%s: DANGER! AtomBIOS stuck in loop"
-                                       " for more then %d jumps... abort!\n",
-                                       __func__, ATOM_OP_JMP_TIMEOUT);
+                               ERROR("%s: Error: AtomBIOS stuck in loop for 
more then %d"
+                                       " jumps... abort!\n", __func__, 
ATOM_OP_JMP_TIMEOUT);
                                ctx->abort = true;
                        } else {
                                ctx->last_jump_count++;
@@ -1160,15 +1159,19 @@ atom_execute_table_locked(atom_context *ctx, int index, 
uint32 * params)
        debug_depth++;
        while (1) {
                op = CU8(ptr++);
-               if (op < ATOM_OP_NAMES_CNT) {
-                       TRACE("%s: %s (0x%" B_PRIX16 ")\n", __func__,
-                               atom_op_names[op], ptr - 1);
-               } else
-                       TRACE("%s: unknown (0x%" B_PRIX16 ")\n", __func__, ptr 
- 1);
+               const char* operationName;
+
+               if (op < ATOM_OP_NAMES_CNT)
+                       operationName = atom_op_names[op];
+               else
+                       operationName = "UNKNOWN";
+
+               TRACE("%s: %s @ 0x%" B_PRIX16 "\n", __func__, operationName, 
ptr - 1);
 
                if (ectx.abort == true) {
-                       ERROR("AtomBios parser was aborted executing (0x%" 
B_PRIX16 ")\n",
-                               ptr - 1);
+                       ERROR("%s: AtomBIOS parser aborted calling operation %s"
+                               " (0x%" B_PRIX8 ") @ 0x%" B_PRIX16 "\n", 
__func__,
+                               operationName, op, ptr - 1);
                        free(ectx.ws);
                        return B_ERROR;
                }
@@ -1203,6 +1206,16 @@ atom_execute_table(atom_context *ctx, int index, uint32 
*params)
        /* reset io mode */
        ctx->io_mode = ATOM_IO_MM;
        status_t result = atom_execute_table_locked(ctx, index, params);
+       if (result != B_OK) {
+               const char* tableName;
+               if (index < ATOM_TABLE_NAMES_CNT)
+                       tableName = atom_table_names[index];
+               else
+                       tableName = "Unknown"; 
+                       
+               ERROR("%s: AtomBIOS parser was aborted in table %s (0x%" 
B_PRIX8 ")\n",
+                       __func__, tableName, index);
+       }
 
        release_sem(ctx->exec_sem);
        return result;


Other related posts:

  • » [haiku-commits] haiku: hrev43769 - in src/add-ons/accelerants/radeon_hd: . atombios - kallisti5