AGESA_STATUS GfxFmMapEngineToDisplayPath ( IN PCIe_ENGINE_CONFIG *Engine, OUT EXT_DISPLAY_PATH *DisplayPathList, IN GFX_PLATFORM_CONFIG *Gfx ) { AGESA_STATUS Status; UINT8 PrimaryDisplayPathId; UINT8 SecondaryDisplayPathId; UINTN DisplayPathIndex; PrimaryDisplayPathId = 0xff; SecondaryDisplayPathId = 0xff; for (DisplayPathIndex = 0; DisplayPathIndex < (sizeof (DdiLaneConfigArrayTN) / 4); DisplayPathIndex++) { if (DdiLaneConfigArrayTN[DisplayPathIndex][0] == Engine->EngineData.StartLane && DdiLaneConfigArrayTN[DisplayPathIndex][1] == Engine->EngineData.EndLane) { PrimaryDisplayPathId = DdiLaneConfigArrayTN[DisplayPathIndex][2]; SecondaryDisplayPathId = DdiLaneConfigArrayTN[DisplayPathIndex][3]; break; } } if (PrimaryDisplayPathId != 0xff) { IDS_HDT_CONSOLE (GFX_MISC, " Allocate Display Connector at Primary sPath[%d]\n", PrimaryDisplayPathId); Engine->InitStatus |= INIT_STATUS_DDI_ACTIVE; GfxIntegratedCopyDisplayInfo ( Engine, &DisplayPathList[PrimaryDisplayPathId], (PrimaryDisplayPathId != SecondaryDisplayPathId) ? &DisplayPathList[SecondaryDisplayPathId] : NULL, Gfx ); Status = AGESA_SUCCESS; } else { IDS_HDT_CONSOLE (GFX_MISC, " Error!!! Map DDI lanes %d - %d to display path failed\n", Engine->EngineData.StartLane, Engine->EngineData.EndLane ); PutEventLog ( AGESA_ERROR, GNB_EVENT_INVALID_DDI_LINK_CONFIGURATION, Engine->EngineData.StartLane, Engine->EngineData.EndLane, 0, 0, GnbLibGetHeader (Gfx) ); Status = AGESA_ERROR; } return Status; }
AGESA_STATUS GfxFmMapEngineToDisplayPath ( IN PCIe_ENGINE_CONFIG *Engine, OUT EXT_DISPLAY_PATH *DisplayPathList, IN GFX_PLATFORM_CONFIG *Gfx ) { AGESA_STATUS Status; UINT8 PrimaryDisplayPathId; UINT8 SecondaryDisplayPathId; UINTN DisplayPathIndex; PrimaryDisplayPathId = 0xff; SecondaryDisplayPathId = 0xff; for (DisplayPathIndex = 0; DisplayPathIndex < (sizeof (DdiLaneConfigArray) / 4); DisplayPathIndex++) { if (DdiLaneConfigArray[DisplayPathIndex][0] == Engine->EngineData.StartLane && DdiLaneConfigArray[DisplayPathIndex][1] == Engine->EngineData.EndLane) { PrimaryDisplayPathId = DdiLaneConfigArray[DisplayPathIndex][2]; SecondaryDisplayPathId = DdiLaneConfigArray[DisplayPathIndex][3]; break; } } if (Engine->Type.Ddi.DdiData.ConnectorType == ConnectorTypeDualLinkDVI || (Engine->Type.Ddi.DdiData.ConnectorType == ConnectorTypeLvds && PrimaryDisplayPathId != 0)) { // Display config invalid for ON PrimaryDisplayPathId = 0xff; } if (PrimaryDisplayPathId != 0xff) { ASSERT (Engine->Type.Ddi.DdiData.AuxIndex <= Aux3); IDS_HDT_CONSOLE (GFX_MISC, " Allocate Display Connector at Primary sPath[%d]\n", PrimaryDisplayPathId); Engine->InitStatus |= INIT_STATUS_DDI_ACTIVE; if (Engine->Type.Ddi.DdiData.AuxIndex == Aux3) { Engine->Type.Ddi.DdiData.AuxIndex = 7; } GfxIntegratedCopyDisplayInfo ( Engine, &DisplayPathList[PrimaryDisplayPathId], (PrimaryDisplayPathId != SecondaryDisplayPathId) ? &DisplayPathList[SecondaryDisplayPathId] : NULL, Gfx ); if (Engine->Type.Ddi.DdiData.ConnectorType == ConnectorTypeSingleLinkDviI) { LibAmdMemCopy (&DisplayPathList[6], &DisplayPathList[PrimaryDisplayPathId], sizeof (EXT_DISPLAY_PATH), GnbLibGetHeader (Gfx)); DisplayPathList[6].usDeviceACPIEnum = 0x100; DisplayPathList[6].usDeviceTag = ATOM_DEVICE_CRT1_SUPPORT; } Status = AGESA_SUCCESS; } else { IDS_HDT_CONSOLE (GFX_MISC, " ERROR!!! Map DDI lanes %d - %d to display path failed\n", Engine->EngineData.StartLane, Engine->EngineData.EndLane ); PutEventLog ( AGESA_ERROR, GNB_EVENT_INVALID_DDI_LINK_CONFIGURATION, Engine->EngineData.StartLane, Engine->EngineData.EndLane, 0, 0, GnbLibGetHeader (Gfx) ); Status = AGESA_ERROR; } return Status; }