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 UINT_32 isPolaris12
: 1;
66 // VI fusion (Carrizo)
67 UINT_32 isCarrizo
: 1;
72 ***************************************************************************************************
73 * @brief This class is the CI specific address library
75 ***************************************************************************************************
77 class CiAddrLib
: public SiAddrLib
80 /// Creates CiAddrLib object
81 static AddrLib
* CreateObj(const AddrClient
* pClient
)
83 return new(pClient
) CiAddrLib(pClient
);
87 CiAddrLib(const AddrClient
* pClient
);
92 // Hwl interface - defined in AddrLib1
93 virtual ADDR_E_RETURNCODE
HwlComputeSurfaceInfo(
94 const ADDR_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
95 ADDR_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const;
97 virtual ADDR_E_RETURNCODE
HwlComputeFmaskInfo(
98 const ADDR_COMPUTE_FMASK_INFO_INPUT
* pIn
,
99 ADDR_COMPUTE_FMASK_INFO_OUTPUT
* pOut
);
101 virtual AddrChipFamily
HwlConvertChipFamily(
102 UINT_32 uChipFamily
, UINT_32 uChipRevision
);
104 virtual BOOL_32
HwlInitGlobalParams(
105 const ADDR_CREATE_INPUT
* pCreateIn
);
107 virtual ADDR_E_RETURNCODE
HwlSetupTileCfg(
108 UINT_32 bpp
, INT_32 index
, INT_32 macroModeIndex
, ADDR_TILEINFO
* pInfo
,
109 AddrTileMode
* pMode
= 0, AddrTileType
* pType
= 0) const;
111 virtual VOID
HwlComputeTileDataWidthAndHeightLinear(
112 UINT_32
* pMacroWidth
, UINT_32
* pMacroHeight
,
113 UINT_32 bpp
, ADDR_TILEINFO
* pTileInfo
) const;
115 virtual INT_32
HwlComputeMacroModeIndex(
116 INT_32 tileIndex
, ADDR_SURFACE_FLAGS flags
, UINT_32 bpp
, UINT_32 numSamples
,
117 ADDR_TILEINFO
* pTileInfo
, AddrTileMode
* pTileMode
= NULL
, AddrTileType
* pTileType
= NULL
120 // Sub-hwl interface - defined in EgBasedAddrLib
121 virtual VOID
HwlSetupTileInfo(
122 AddrTileMode tileMode
, ADDR_SURFACE_FLAGS flags
,
123 UINT_32 bpp
, UINT_32 pitch
, UINT_32 height
, UINT_32 numSamples
,
124 ADDR_TILEINFO
* inputTileInfo
, ADDR_TILEINFO
* outputTileInfo
,
125 AddrTileType inTileType
, ADDR_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const;
127 virtual INT_32
HwlPostCheckTileIndex(
128 const ADDR_TILEINFO
* pInfo
, AddrTileMode mode
, AddrTileType type
,
129 INT curIndex
= TileIndexInvalid
) const;
131 virtual VOID
HwlFmaskPreThunkSurfInfo(
132 const ADDR_COMPUTE_FMASK_INFO_INPUT
* pFmaskIn
,
133 const ADDR_COMPUTE_FMASK_INFO_OUTPUT
* pFmaskOut
,
134 ADDR_COMPUTE_SURFACE_INFO_INPUT
* pSurfIn
,
135 ADDR_COMPUTE_SURFACE_INFO_OUTPUT
* pSurfOut
) const;
137 virtual VOID
HwlFmaskPostThunkSurfInfo(
138 const ADDR_COMPUTE_SURFACE_INFO_OUTPUT
* pSurfOut
,
139 ADDR_COMPUTE_FMASK_INFO_OUTPUT
* pFmaskOut
) const;
141 virtual AddrTileMode
HwlDegradeThickTileMode(
142 AddrTileMode baseTileMode
, UINT_32 numSlices
, UINT_32
* pBytesPerTile
) const;
144 virtual VOID
HwlOverrideTileMode(ADDR_COMPUTE_SURFACE_INFO_INPUT
* pInOut
) const;
146 virtual ADDR_E_RETURNCODE
HwlComputeDccInfo(
147 const ADDR_COMPUTE_DCCINFO_INPUT
* pIn
,
148 ADDR_COMPUTE_DCCINFO_OUTPUT
* pOut
) const;
150 virtual ADDR_E_RETURNCODE
HwlComputeCmaskAddrFromCoord(
151 const ADDR_COMPUTE_CMASK_ADDRFROMCOORD_INPUT
* pIn
,
152 ADDR_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT
* pOut
) const;
154 virtual ADDR_E_RETURNCODE
HwlComputeHtileAddrFromCoord(
155 const ADDR_COMPUTE_HTILE_ADDRFROMCOORD_INPUT
* pIn
,
156 ADDR_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT
* pOut
) const;
158 virtual ADDR_E_RETURNCODE
HwlGetMaxAlignments(ADDR_GET_MAX_ALINGMENTS_OUTPUT
* pOut
) const;
160 virtual VOID
HwlPadDimensions(
161 AddrTileMode tileMode
, UINT_32 bpp
, ADDR_SURFACE_FLAGS flags
,
162 UINT_32 numSamples
, ADDR_TILEINFO
* pTileInfo
, UINT_32 padDims
, UINT_32 mipLevel
,
163 UINT_32
* pPitch
, UINT_32 pitchAlign
, UINT_32
* pHeight
, UINT_32 heightAlign
,
164 UINT_32
* pSlices
, UINT_32 sliceAlign
) const;
168 UINT_32 regValue
, AddrTileConfig
* pCfg
) const;
170 VOID
ReadGbMacroTileCfg(
171 UINT_32 regValue
, ADDR_TILEINFO
* pCfg
) const;
173 BOOL_32
InitTileSettingTable(
174 const UINT_32
*pSetting
, UINT_32 noOfEntries
);
176 BOOL_32
InitMacroTileCfgTable(
177 const UINT_32
*pSetting
, UINT_32 noOfEntries
);
179 UINT_64
HwlComputeMetadataNibbleAddress(
180 UINT_64 uncompressedDataByteAddress
,
181 UINT_64 dataBaseByteAddress
,
182 UINT_64 metadataBaseByteAddress
,
183 UINT_32 metadataBitSize
,
184 UINT_32 elementBitSize
,
185 UINT_32 blockByteSize
,
186 UINT_32 pipeInterleaveBytes
,
189 UINT_32 numOfSamplesPerSplit
) const;
191 static const UINT_32 MacroTileTableSize
= 16;
192 ADDR_TILEINFO m_macroTileTable
[MacroTileTableSize
];
193 UINT_32 m_noOfMacroEntries
;
194 BOOL_32 m_allowNonDispThickModes
;
196 CIChipSettings m_settings
;