bool initAddrLib() { ADDR_CREATE_INPUT input; ADDR_CREATE_OUTPUT output; std::memset(&input, 0, sizeof(input)); std::memset(&output, 0, sizeof(output)); input.size = sizeof(ADDR_CREATE_INPUT); output.size = sizeof(ADDR_CREATE_OUTPUT); input.chipEngine = CIASICIDGFXENGINE_R600; input.chipFamily = 0x51; input.chipRevision = 71; input.createFlags.fillSizeFields = 1; input.regValue.gbAddrConfig = 0x44902; input.callbacks.allocSysMem = &allocSysMem; input.callbacks.freeSysMem = &freeSysMem; auto result = AddrCreate(&input, &output); if (result != ADDR_OK) { return false; } gAddrLibHandle = output.hLib; return true; }
ADDR_HANDLE amdgpu_addr_create(struct amdgpu_winsys *ws) { ADDR_CREATE_INPUT addrCreateInput = {0}; ADDR_CREATE_OUTPUT addrCreateOutput = {0}; ADDR_REGISTER_VALUE regValue = {0}; ADDR_CREATE_FLAGS createFlags = {{0}}; ADDR_E_RETURNCODE addrRet; addrCreateInput.size = sizeof(ADDR_CREATE_INPUT); addrCreateOutput.size = sizeof(ADDR_CREATE_OUTPUT); regValue.noOfBanks = ws->amdinfo.mc_arb_ramcfg & 0x3; regValue.gbAddrConfig = ws->amdinfo.gb_addr_cfg; regValue.noOfRanks = (ws->amdinfo.mc_arb_ramcfg & 0x4) >> 2; regValue.backendDisables = ws->amdinfo.backend_disable[0]; regValue.pTileConfig = ws->amdinfo.gb_tile_mode; regValue.noOfEntries = ARRAY_SIZE(ws->amdinfo.gb_tile_mode); if (ws->info.chip_class == SI) { regValue.pMacroTileConfig = NULL; regValue.noOfMacroEntries = 0; } else { regValue.pMacroTileConfig = ws->amdinfo.gb_macro_tile_mode; regValue.noOfMacroEntries = ARRAY_SIZE(ws->amdinfo.gb_macro_tile_mode); } createFlags.value = 0; createFlags.useTileIndex = 1; createFlags.degradeBaseLevel = 1; createFlags.useHtileSliceAlign = 1; addrCreateInput.chipEngine = CIASICIDGFXENGINE_SOUTHERNISLAND; addrCreateInput.chipFamily = ws->family; addrCreateInput.chipRevision = ws->rev_id; addrCreateInput.createFlags = createFlags; addrCreateInput.callbacks.allocSysMem = allocSysMem; addrCreateInput.callbacks.freeSysMem = freeSysMem; addrCreateInput.callbacks.debugPrint = 0; addrCreateInput.regValue = regValue; addrRet = AddrCreate(&addrCreateInput, &addrCreateOutput); if (addrRet != ADDR_OK) return NULL; return addrCreateOutput.hLib; }