[Mesa-dev] [PATCH 1/2] amd/addrlib: import Raven support

Nils Wallménius nils.wallmenius at gmail.com
Wed May 10 19:36:24 UTC 2017


Hi Marek,

A comment below

Den 10 maj 2017 20:29 skrev "Marek Olšák" <maraeo at gmail.com>:

From: Marek Olšák <marek.olsak at amd.com>

Cc: 17.1 <mesa-stable at lists.freedesktop.org>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
---
 src/amd/addrlib/gfx9/gfx9addrlib.cpp | 57 ++++++++++++++++++++++++++++++
++++++
 src/amd/addrlib/gfx9/gfx9addrlib.h   |  8 +++--
 src/amd/common/amdgpu_id.h           | 10 +++++++
 3 files changed, 72 insertions(+), 3 deletions(-)

diff --git a/src/amd/addrlib/gfx9/gfx9addrlib.cpp b/src/amd/addrlib/gfx9/
gfx9addrlib.cpp
index 96b05de..9b25371 100644
--- a/src/amd/addrlib/gfx9/gfx9addrlib.cpp
+++ b/src/amd/addrlib/gfx9/gfx9addrlib.cpp
@@ -1186,20 +1186,34 @@ ChipFamily Gfx9Lib::HwlConvertChipFamily(
             if (m_settings.isVega10)
             {
                 m_settings.isDce12  = 1;
             }

             m_settings.metaBaseAlignFix = 1;

             m_settings.depthPipeXorDisable = 1;
             break;

+        case FAMILY_RV:
+            m_settings.isArcticIsland = 1;
+            m_settings.isRaven        = ASICREV_IS_RAVEN(uChipRevision);
+
+            if (m_settings.isRaven)
+            {
+                m_settings.isDcn1   = 1;
+            }
+
+            m_settings.metaBaseAlignFix = 1;
+
+            m_settings.depthPipeXorDisable = 1;
+            break;
+
         default:
             ADDR_ASSERT(!"This should be a Fusion");
             break;
     }

     return family;
 }

 /**
 ************************************************************
************************************************************
@@ -2727,20 +2741,49 @@ BOOL_32 Gfx9Lib::IsValidDisplaySwizzleMode(
             case ADDR_SW_64KB_R_X:
             case ADDR_SW_VAR_D_X:
             case ADDR_SW_VAR_R_X:
                 support = (pIn->bpp <= 64);
                 break;

             default:
                 break;
         }
     }
+    else if (m_settings.isDcn1)
+    {
+        switch (swizzleMode)
+        {
+            case ADDR_SW_4KB_D:
+            case ADDR_SW_64KB_D:
+            case ADDR_SW_VAR_D:
+            case ADDR_SW_64KB_D_T:
+            case ADDR_SW_4KB_D_X:
+            case ADDR_SW_64KB_D_X:
+            case ADDR_SW_VAR_D_X:
+                support = (pIn->bpp == 64);
+                break;
+
+            case ADDR_SW_LINEAR:
+            case ADDR_SW_4KB_S:
+            case ADDR_SW_64KB_S:
+            case ADDR_SW_VAR_S:
+            case ADDR_SW_64KB_S_T:
+            case ADDR_SW_4KB_S_X:
+            case ADDR_SW_64KB_S_X:
+            case ADDR_SW_VAR_S_X:
+                support = (pIn->bpp <= 64);
+                break;
+
+            default:
+                break;
+        }
+    }
     else
     {
         ADDR_NOT_IMPLEMENTED();
     }

     return support;
 }

 /**
 ************************************************************
************************************************************
@@ -3188,20 +3231,34 @@ ADDR_E_RETURNCODE Gfx9Lib::
HwlGetPreferredSurfaceSetting(
                     else if (m_settings.isDce12)
                     {
                         if (pIn->bpp != 32)
                         {
                             blockSet.micro = FALSE;
                         }

                         // DCE12 does not support display surface to be _T
swizzle mode
                         prtXor = FALSE;
                     }
+                    else if (m_settings.isDcn1)
+                    {
+                        // _R is not supported by Dcn1
+                        if (pIn->bpp == 64)
+                        {
+                            swType = ADDR_SW_D;
+                        }
+                        else
+                        {
+                            swType = ADDR_SW_S;
+                        }
+
+                        blockSet.micro = FALSE;
+                    }
                     else
                     {
                         ADDR_NOT_IMPLEMENTED();
                         returnCode = ADDR_NOTSUPPORTED;
                     }
                 }
             }
         }

         if ((numFrags > 1) &&
diff --git a/src/amd/addrlib/gfx9/gfx9addrlib.h b/src/amd/addrlib/gfx9/
gfx9addrlib.h
index 73d51f1..9623610 100644
--- a/src/amd/addrlib/gfx9/gfx9addrlib.h
+++ b/src/amd/addrlib/gfx9/gfx9addrlib.h
@@ -47,25 +47,27 @@ namespace V2
 * @brief GFX9 specific settings structure.
 ************************************************************
************************************************************
 */
 struct Gfx9ChipSettings
 {
     struct
     {
         // Asic/Generation name
         UINT_32 isArcticIsland      : 1;
         UINT_32 isVega10            : 1;
-        UINT_32 reserved0           : 30;
+        UINT_32 isRaven             : 1;
+        UINT_32 reserved0           : 29;

         // Display engine IP version name
         UINT_32 isDce12             : 1;
-        UINT_32 reserved1           : 31;
+        UINT_32 isDcn1              : 1;
+        UINT_32 reserved1           : 29;


The above reserved1 should be 30 bits to make an even 32, not sure it
matters but looks off.

BR
Nils

[snip]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170510/f8044f5f/attachment-0001.html>


More information about the mesa-dev mailing list