mirror of https://github.com/acidanthera/audk.git
MdeModulePkg: Enable port power if port power control feature is supported by EHCI
signed-off-by: erictian reviewed-by: li-elvin git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12725 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
96aace827e
commit
f01219e875
|
@ -469,9 +469,12 @@ EhcSetRootHubPortFeature (
|
||||||
|
|
||||||
case EfiUsbPortPower:
|
case EfiUsbPortPower:
|
||||||
//
|
//
|
||||||
// Not supported, ignore the operation
|
// Set port power bit when PPC is 1
|
||||||
//
|
//
|
||||||
Status = EFI_SUCCESS;
|
if ((Ehc->HcCapParams & HCSP_PPC) == HCSP_PPC) {
|
||||||
|
State |= PORTSC_POWER;
|
||||||
|
EhcWriteOpReg (Ehc, Offset, State);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EfiUsbPortOwner:
|
case EfiUsbPortOwner:
|
||||||
|
@ -598,6 +601,14 @@ EhcClearRootHubPortFeature (
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EfiUsbPortPower:
|
case EfiUsbPortPower:
|
||||||
|
//
|
||||||
|
// Clear port power bit when PPC is 1
|
||||||
|
//
|
||||||
|
if ((Ehc->HcCapParams & HCSP_PPC) == HCSP_PPC) {
|
||||||
|
State &= ~PORTSC_POWER;
|
||||||
|
EhcWriteOpReg (Ehc, Offset, State);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case EfiUsbPortSuspendChange:
|
case EfiUsbPortSuspendChange:
|
||||||
case EfiUsbPortResetChange:
|
case EfiUsbPortResetChange:
|
||||||
//
|
//
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
The EHCI register operation routines.
|
The EHCI register operation routines.
|
||||||
|
|
||||||
Copyright (c) 2007 - 2009, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -554,6 +554,7 @@ EhcInitHC (
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
UINT32 Index;
|
||||||
|
|
||||||
// This ASSERT crashes the BeagleBoard. There is some issue in the USB stack.
|
// This ASSERT crashes the BeagleBoard. There is some issue in the USB stack.
|
||||||
// This ASSERT needs to be removed so the BeagleBoard will boot. When we fix
|
// This ASSERT needs to be removed so the BeagleBoard will boot. When we fix
|
||||||
|
@ -580,21 +581,29 @@ EhcInitHC (
|
||||||
EhcWriteOpReg (Ehc, EHC_USBINTR_OFFSET, 0);
|
EhcWriteOpReg (Ehc, EHC_USBINTR_OFFSET, 0);
|
||||||
|
|
||||||
//
|
//
|
||||||
// 2. Program periodic frame list, already done in EhcInitSched
|
// 2. Start the Host Controller
|
||||||
// 3. Start the Host Controller
|
|
||||||
//
|
//
|
||||||
EhcSetOpRegBit (Ehc, EHC_USBCMD_OFFSET, USBCMD_RUN);
|
EhcSetOpRegBit (Ehc, EHC_USBCMD_OFFSET, USBCMD_RUN);
|
||||||
|
|
||||||
//
|
//
|
||||||
// 4. Set all ports routing to EHC
|
// 3. Power up all ports if EHCI has Port Power Control (PPC) support
|
||||||
//
|
//
|
||||||
EhcSetOpRegBit (Ehc, EHC_CONFIG_FLAG_OFFSET, CONFIGFLAG_ROUTE_EHC);
|
if (Ehc->HcStructParams & HCSP_PPC) {
|
||||||
|
for (Index = 0; Index < (UINT8) (Ehc->HcStructParams & HCSP_NPORTS); Index++) {
|
||||||
|
EhcSetOpRegBit (Ehc, (UINT32) (EHC_PORT_STAT_OFFSET + (4 * Index)), PORTSC_POWER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Wait roothub port power stable
|
// Wait roothub port power stable
|
||||||
//
|
//
|
||||||
gBS->Stall (EHC_ROOT_PORT_RECOVERY_STALL);
|
gBS->Stall (EHC_ROOT_PORT_RECOVERY_STALL);
|
||||||
|
|
||||||
|
//
|
||||||
|
// 4. Set all ports routing to EHC
|
||||||
|
//
|
||||||
|
EhcSetOpRegBit (Ehc, EHC_CONFIG_FLAG_OFFSET, CONFIGFLAG_ROUTE_EHC);
|
||||||
|
|
||||||
Status = EhcEnablePeriodSchd (Ehc, EHC_GENERIC_TIMEOUT);
|
Status = EhcEnablePeriodSchd (Ehc, EHC_GENERIC_TIMEOUT);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
This file contains the definination for host controller register operation routines.
|
This file contains the definination for host controller register operation routines.
|
||||||
|
|
||||||
Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -32,6 +32,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
// Capability register bit definition
|
// Capability register bit definition
|
||||||
//
|
//
|
||||||
#define HCSP_NPORTS 0x0F // Number of root hub port
|
#define HCSP_NPORTS 0x0F // Number of root hub port
|
||||||
|
#define HCSP_PPC 0x10 // Port Power Control
|
||||||
#define HCCP_64BIT 0x01 // 64-bit addressing capability
|
#define HCCP_64BIT 0x01 // 64-bit addressing capability
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue