2 * Copyright © 2014 Advanced Micro Devices, Inc.
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sub license, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
15 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
16 * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS
17 * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 * USE OR OTHER DEALINGS IN THE SOFTWARE.
22 * The above copyright notice and this permission notice (including the
23 * next paragraph) shall be included in all copies or substantial portions
28 ***************************************************************************************************
30 * @brief Contains the CIAddrLib class definition.
31 ***************************************************************************************************
34 #ifndef __CI_ADDR_LIB_H__
35 #define __CI_ADDR_LIB_H__
38 #include "siaddrlib.h"
41 ***************************************************************************************************
42 * @brief CI specific settings structure.
43 ***************************************************************************************************
49 UINT_32 isSeaIsland
: 1;
50 UINT_32 isBonaire
: 1;
52 UINT_32 isSpectre
: 1;
54 UINT_32 isKalindi
: 1;
55 // Hawaii is GFXIP 7.2, similar with CI (Bonaire)
59 UINT_32 isVolcanicIslands
: 1;
60 UINT_32 isIceland
: 1;
63 UINT_32 isPolaris10
: 1;
64 UINT_32 isPolaris11
: 1;
65 // VI fusion (Carrizo)
66 UINT_32 isCarrizo
: 1;
71 ***************************************************************************************************
72 * @brief This class is the CI specific address library
74 ***************************************************************************************************
76 class CIAddrLib
: public SIAddrLib
79 /// Creates CIAddrLib object
80 static AddrLib
* CreateObj(const AddrClient
* pClient
)
82 return new(pClient
) CIAddrLib(pClient
);
86 CIAddrLib(const AddrClient
* pClient
);
91 // Hwl interface - defined in AddrLib
92 virtual ADDR_E_RETURNCODE
HwlComputeSurfaceInfo(
93 const ADDR_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
94 ADDR_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const;
96 virtual ADDR_E_RETURNCODE
HwlComputeFmaskInfo(
97 const ADDR_COMPUTE_FMASK_INFO_INPUT
* pIn
,
98 ADDR_COMPUTE_FMASK_INFO_OUTPUT
* pOut
);
100 virtual AddrChipFamily
HwlConvertChipFamily(
101 UINT_32 uChipFamily
, UINT_32 uChipRevision
);
103 virtual BOOL_32
HwlInitGlobalParams(
104 const ADDR_CREATE_INPUT
* pCreateIn
);
106 virtual ADDR_E_RETURNCODE
HwlSetupTileCfg(
107 INT_32 index
, INT_32 macroModeIndex
, ADDR_TILEINFO
* pInfo
,
108 AddrTileMode
* pMode
= 0, AddrTileType
* pType
= 0) const;
110 virtual VOID
HwlComputeTileDataWidthAndHeightLinear(
111 UINT_32
* pMacroWidth
, UINT_32
* pMacroHeight
,
112 UINT_32 bpp
, ADDR_TILEINFO
* pTileInfo
) const;
114 virtual INT_32
HwlComputeMacroModeIndex(
115 INT_32 tileIndex
, ADDR_SURFACE_FLAGS flags
, UINT_32 bpp
, UINT_32 numSamples
,
116 ADDR_TILEINFO
* pTileInfo
, AddrTileMode
* pTileMode
= NULL
, AddrTileType
* pTileType
= NULL
119 // Sub-hwl interface - defined in EgBasedAddrLib
120 virtual VOID
HwlSetupTileInfo(
121 AddrTileMode tileMode
, ADDR_SURFACE_FLAGS flags
,
122 UINT_32 bpp
, UINT_32 pitch
, UINT_32 height
, UINT_32 numSamples
,
123 ADDR_TILEINFO
* inputTileInfo
, ADDR_TILEINFO
* outputTileInfo
,
124 AddrTileType inTileType
, ADDR_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const;
126 virtual INT_32
HwlPostCheckTileIndex(
127 const ADDR_TILEINFO
* pInfo
, AddrTileMode mode
, AddrTileType type
,
128 INT curIndex
= TileIndexInvalid
) const;
130 virtual VOID
HwlFmaskPreThunkSurfInfo(
131 const ADDR_COMPUTE_FMASK_INFO_INPUT
* pFmaskIn
,
132 const ADDR_COMPUTE_FMASK_INFO_OUTPUT
* pFmaskOut
,
133 ADDR_COMPUTE_SURFACE_INFO_INPUT
* pSurfIn
,
134 ADDR_COMPUTE_SURFACE_INFO_OUTPUT
* pSurfOut
) const;
136 virtual VOID
HwlFmaskPostThunkSurfInfo(
137 const ADDR_COMPUTE_SURFACE_INFO_OUTPUT
* pSurfOut
,
138 ADDR_COMPUTE_FMASK_INFO_OUTPUT
* pFmaskOut
) const;
140 virtual AddrTileMode
HwlDegradeThickTileMode(
141 AddrTileMode baseTileMode
, UINT_32 numSlices
, UINT_32
* pBytesPerTile
) const;
143 virtual BOOL_32
HwlOverrideTileMode(
144 const ADDR_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
145 AddrTileMode
* pTileMode
,
146 AddrTileType
* pTileType
) const;
148 virtual BOOL_32
HwlStereoCheckRightOffsetPadding() const;
150 virtual ADDR_E_RETURNCODE
HwlComputeDccInfo(
151 const ADDR_COMPUTE_DCCINFO_INPUT
* pIn
,
152 ADDR_COMPUTE_DCCINFO_OUTPUT
* pOut
) const;
154 virtual ADDR_E_RETURNCODE
HwlComputeCmaskAddrFromCoord(
155 const ADDR_COMPUTE_CMASK_ADDRFROMCOORD_INPUT
* pIn
,
156 ADDR_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT
* pOut
) const;
159 virtual VOID
HwlPadDimensions(
160 AddrTileMode tileMode
, UINT_32 bpp
, ADDR_SURFACE_FLAGS flags
,
161 UINT_32 numSamples
, ADDR_TILEINFO
* pTileInfo
, UINT_32 padDims
, UINT_32 mipLevel
,
162 UINT_32
* pPitch
, UINT_32 pitchAlign
, UINT_32
* pHeight
, UINT_32 heightAlign
,
163 UINT_32
* pSlices
, UINT_32 sliceAlign
) const;
167 UINT_32 regValue
, ADDR_TILECONFIG
* pCfg
) const;
169 VOID
ReadGbMacroTileCfg(
170 UINT_32 regValue
, ADDR_TILEINFO
* pCfg
) const;
172 UINT_32
GetPrtSwitchP4Threshold() const;
174 BOOL_32
InitTileSettingTable(
175 const UINT_32
*pSetting
, UINT_32 noOfEntries
);
177 BOOL_32
InitMacroTileCfgTable(
178 const UINT_32
*pSetting
, UINT_32 noOfEntries
);
180 UINT_64
HwlComputeMetadataNibbleAddress(
181 UINT_64 uncompressedDataByteAddress
,
182 UINT_64 dataBaseByteAddress
,
183 UINT_64 metadataBaseByteAddress
,
184 UINT_32 metadataBitSize
,
185 UINT_32 elementBitSize
,
186 UINT_32 blockByteSize
,
187 UINT_32 pipeInterleaveBytes
,
190 UINT_32 numOfSamplesPerSplit
) const;
192 static const UINT_32 MacroTileTableSize
= 16;
193 ADDR_TILEINFO m_macroTileTable
[MacroTileTableSize
];
194 UINT_32 m_noOfMacroEntries
;
195 BOOL_32 m_allowNonDispThickModes
;
197 CIChipSettings m_settings
;