From ec31c689fc59a59c4ffaeb06c48660872edd64e1 Mon Sep 17 00:00:00 2001 From: zwei4 Date: Fri, 22 Dec 2017 15:41:32 +0800 Subject: I2S Audio Configure Customize I2S virtual bus ID for different boards. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: zwei4 --- Silicon/BroxtonSoC/BroxtonSiPkg/BroxtonSiPkg.dec | 12 ++++++++ .../Library/Private/DxeScHdaLib/DxeScHdaLib.inf | 5 ++++ .../Library/Private/DxeScHdaLib/ScHdaLib.c | 25 ++++++---------- .../BroxtonSiPkg/SouthCluster/ScInit/Dxe/ScHda.c | 33 ++++++++++++++++++++++ 4 files changed, 58 insertions(+), 17 deletions(-) (limited to 'Silicon/BroxtonSoC') diff --git a/Silicon/BroxtonSoC/BroxtonSiPkg/BroxtonSiPkg.dec b/Silicon/BroxtonSoC/BroxtonSiPkg/BroxtonSiPkg.dec index c06b4e1312..a28765f233 100644 --- a/Silicon/BroxtonSoC/BroxtonSiPkg/BroxtonSiPkg.dec +++ b/Silicon/BroxtonSoC/BroxtonSiPkg/BroxtonSiPkg.dec @@ -332,6 +332,18 @@ gEfiBxtTokenSpaceGuid.PcdSetCoreCount|0|UINT32|0x10000223 gEfiBxtTokenSpaceGuid.PcdVtdGfxBaseAddress|0xFED64000|UINT32|0x10000224 gSiPkgTokenSpaceGuid.PcdForceVolatileVariable|FALSE|BOOLEAN|0x30000012 + + ## I2S Audio Configuration + ## Blue Tooth Render + gEfiBxtTokenSpaceGuid.HdaEndpointBtRenderVirtualBusId|0x0F|UINT8|0x80000001 + ## Blue Tooth Capture + gEfiBxtTokenSpaceGuid.HdaEndpointBtCaptureVirtualBusId|0x0F|UINT8|0x80000002 + ## Speaker Render + gEfiBxtTokenSpaceGuid.HdaEndpointI2sRenderSKPVirtualBusId|0x0F|UINT8|0x80000003 + ## Headphone Render + gEfiBxtTokenSpaceGuid.HdaEndpointI2sRenderHPVirtualBusId|0x0F|UINT8|0x80000004 + ## Headphone Capture + gEfiBxtTokenSpaceGuid.HdaEndpointI2sCaptureVirtualBusId|0x0F|UINT8|0x80000005 [PcdsFeatureFlag] gBxtRefCodePkgTokenSpaceGuid.PcdCeAtaSupport|FALSE|BOOLEAN|0x12 diff --git a/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Library/Private/DxeScHdaLib/DxeScHdaLib.inf b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Library/Private/DxeScHdaLib/DxeScHdaLib.inf index 2013054fdb..03be306481 100644 --- a/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Library/Private/DxeScHdaLib/DxeScHdaLib.inf +++ b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Library/Private/DxeScHdaLib/DxeScHdaLib.inf @@ -40,6 +40,11 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemRevision ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision ## CONSUMES + gEfiBxtTokenSpaceGuid.HdaEndpointBtRenderVirtualBusId + gEfiBxtTokenSpaceGuid.HdaEndpointBtCaptureVirtualBusId + gEfiBxtTokenSpaceGuid.HdaEndpointI2sRenderSKPVirtualBusId + gEfiBxtTokenSpaceGuid.HdaEndpointI2sRenderHPVirtualBusId + gEfiBxtTokenSpaceGuid.HdaEndpointI2sCaptureVirtualBusId [Sources] ScHdaLib.c diff --git a/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Library/Private/DxeScHdaLib/ScHdaLib.c b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Library/Private/DxeScHdaLib/ScHdaLib.c index e27b38ddab..028f6ee624 100644 --- a/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Library/Private/DxeScHdaLib/ScHdaLib.c +++ b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Library/Private/DxeScHdaLib/ScHdaLib.c @@ -568,7 +568,7 @@ NhltEndpointConstructor ( case HdaBtRender: DEBUG ((DEBUG_INFO, "Endpoint: HdaBtRender\n")); if (GetBxtSeries() == BxtP) { - HdaEndpointBtRender.VirtualBusId = 2; + HdaEndpointBtRender.VirtualBusId = PcdGet8(HdaEndpointBtRenderVirtualBusId); DEBUG ((DEBUG_INFO, "For BXT-P, HdaEndpointBtRender.VirtualBusId Change to 0x%02x.\n", HdaEndpointBtRender.VirtualBusId)); } CopyMem (Endpoint, &HdaEndpointBtRender, sizeof (ENDPOINT_DESCRIPTOR)); @@ -579,7 +579,7 @@ NhltEndpointConstructor ( case HdaBtCapture: DEBUG ((DEBUG_INFO, "Endpoint: HdaBtCapture\n")); if (GetBxtSeries() == BxtP) { - HdaEndpointBtCapture.VirtualBusId = 2; + HdaEndpointBtCapture.VirtualBusId = PcdGet8(HdaEndpointBtCaptureVirtualBusId); DEBUG ((DEBUG_INFO, "For BXT-P, HdaEndpointBtCapture.VirtualBusId Change to 0x%02x.\n", HdaEndpointBtCapture.VirtualBusId)); } CopyMem (Endpoint, &HdaEndpointBtCapture, sizeof (ENDPOINT_DESCRIPTOR)); @@ -589,12 +589,9 @@ NhltEndpointConstructor ( break; case HdaI2sRenderSKP: DEBUG ((DEBUG_INFO, "Endpoint: HdaI2sRenderSKP\n")); - // - // For BXT-P, Virtual Bus ID is 5, while it is 0 for BXTM - // if (GetBxtSeries() == BxtP) { - HdaEndpointI2sRenderSKP.VirtualBusId = 5; - DEBUG ((DEBUG_INFO, "For BXT-P, Endpoint: HdaI2sRenderSKP virtual bus ID is 5.\n")); + HdaEndpointI2sRenderSKP.VirtualBusId = PcdGet8(HdaEndpointI2sRenderSKPVirtualBusId); + DEBUG ((DEBUG_INFO, "For BXT-P, Endpoint: HdaI2sRenderSKP virtual bus ID is 0x%02x.\n", HdaEndpointI2sRenderSKP.VirtualBusId)); } CopyMem (Endpoint, &HdaEndpointI2sRenderSKP, sizeof (ENDPOINT_DESCRIPTOR)); EndpointConfigBuffer = I2sConfigSKP; @@ -610,12 +607,9 @@ NhltEndpointConstructor ( break; case HdaI2sRenderHP: DEBUG ((DEBUG_INFO, "Endpoint: HdaI2sRenderHP\n")); - // - // For BXT-P, Virtual Bus ID is 5, while it is 0 for BXTM - // if (GetBxtSeries() == BxtP) { - HdaEndpointI2sRenderHP.VirtualBusId = 5; - DEBUG ((DEBUG_INFO, "For BXT-P, Endpoint: HdaI2sRenderHP virtual bus ID is 5.\n")); + HdaEndpointI2sRenderHP.VirtualBusId = PcdGet8(HdaEndpointI2sRenderHPVirtualBusId); + DEBUG ((DEBUG_INFO, "For BXT-P, Endpoint: HdaI2sRenderHP virtual bus ID is 0x%02x.\n", HdaEndpointI2sRenderHP.VirtualBusId )); } CopyMem (Endpoint, &HdaEndpointI2sRenderHP, sizeof (ENDPOINT_DESCRIPTOR)); EndpointConfigBuffer = I2sConfig; @@ -624,12 +618,9 @@ NhltEndpointConstructor ( break; case HdaI2sCaptureHP: DEBUG ((DEBUG_INFO, "Endpoint: HdaI2sCaptureHP\n")); - // - // For BXT-P, Virtual Bus ID is 5, while it is 0 for BXTM - // if (GetBxtSeries() == BxtP) { - HdaEndpointI2sCapture.VirtualBusId = 5; - DEBUG ((DEBUG_INFO, "For BXT-P, Endpoint: HdaI2sCaptureHP virtual bus ID is 5.\n")); + HdaEndpointI2sCapture.VirtualBusId = PcdGet8(HdaEndpointI2sCaptureVirtualBusId); + DEBUG ((DEBUG_INFO, "For BXT-P, Endpoint: HdaI2sCaptureHP virtual bus ID is 0x%02x.\n", HdaEndpointI2sCapture.VirtualBusId)); } CopyMem (Endpoint, &HdaEndpointI2sCapture, sizeof (ENDPOINT_DESCRIPTOR)); EndpointConfigBuffer = I2sConfig; diff --git a/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/ScInit/Dxe/ScHda.c b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/ScInit/Dxe/ScHda.c index 16efcbe859..4600b5326e 100644 --- a/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/ScInit/Dxe/ScHda.c +++ b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/ScInit/Dxe/ScHda.c @@ -266,6 +266,39 @@ ConfigureHdaAtBoot ( Status = GetConfigBlock ((VOID *) ScPolicy, &gHdAudioConfigGuid, (VOID *) &HdaConfig); ASSERT_EFI_ERROR (Status); + if ((HdaConfig->IoBufferOwnership == ScHdaIoBufOwnerHdaLinkI2sPort) || \ + (HdaConfig->IoBufferOwnership == ScHdaIoBufOwnerI2sPort)) { + HdaConfig->DspEndpointBluetooth = TRUE; + HdaConfig->DspEndpointI2sSkp = TRUE; + HdaConfig->DspEndpointI2sHp = TRUE; + } + + DEBUG ((DEBUG_INFO, "------------------ HD-Audio Config ------------------\n")); + DEBUG ((DEBUG_INFO, " HDA Enable = %x\n", HdaConfig->Enable)); + DEBUG ((DEBUG_INFO, " DSP Enable = %x\n", HdaConfig->DspEnable)); + DEBUG ((DEBUG_INFO, " Pme = %x\n", HdaConfig->Pme)); + DEBUG ((DEBUG_INFO, " I/O Buffer Ownership = %x\n", HdaConfig->IoBufferOwnership)); + DEBUG ((DEBUG_INFO, " I/O Buffer Voltage = %x\n", HdaConfig->IoBufferVoltage)); + DEBUG ((DEBUG_INFO, " VC Type = %x\n", HdaConfig->VcType)); + DEBUG ((DEBUG_INFO, " DSP Feature Mask = %x\n", HdaConfig->DspFeatureMask)); + DEBUG ((DEBUG_INFO, " DSP PP Module Mask = %x\n", HdaConfig->DspPpModuleMask)); + DEBUG ((DEBUG_INFO, " ResetWaitTimer = %x\n", HdaConfig->ResetWaitTimer)); + DEBUG ((DEBUG_INFO, " VcType = %x\n", HdaConfig->VcType)); + DEBUG ((DEBUG_INFO, " HD-A Link Frequency = %x\n", HdaConfig->HdAudioLinkFrequency)); + DEBUG ((DEBUG_INFO, " iDisp Link Frequency = %x\n", HdaConfig->IDispLinkFrequency)); + DEBUG ((DEBUG_INFO, " iDisp Link T-Mode = %x\n", HdaConfig->IDispLinkTmode)); + DEBUG ((DEBUG_INFO, " DSP Endpoint DMIC = %x\n", HdaConfig->DspEndpointDmic)); + DEBUG ((DEBUG_INFO, " DSP Endpoint I2S SKP = %x\n", HdaConfig->DspEndpointI2sSkp)); + DEBUG ((DEBUG_INFO, " DSP Endpoint I2S HP = %x\n", HdaConfig->DspEndpointI2sHp)); + DEBUG ((DEBUG_INFO, " DSP Endpoint BT = %x\n", HdaConfig->DspEndpointBluetooth)); + DEBUG ((DEBUG_INFO, " DSP Feature Mask = %x\n", HdaConfig->DspFeatureMask)); + DEBUG ((DEBUG_INFO, " DSP PP Module Mask = %x\n", HdaConfig->DspPpModuleMask)); + DEBUG ((DEBUG_INFO, " CSME Memory Transfers = %x\n", HdaConfig->Mmt)); + DEBUG ((DEBUG_INFO, " Host Memory Transfers = %x\n", HdaConfig->Hmt)); + DEBUG ((DEBUG_INFO, " BIOS Configuration Lock Down = %x\n", HdaConfig->BiosCfgLockDown)); + DEBUG ((DEBUG_INFO, " Power Gating = %x\n", HdaConfig->PwrGate)); + DEBUG ((DEBUG_INFO, " Clock Gating = %x\n", HdaConfig->ClkGate)); + HdaPciBase = MmPciBase ( DEFAULT_PCI_BUS_NUMBER_SC, PCI_DEVICE_NUMBER_HDA, -- cgit v1.2.3