3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
4 Copyright (c) 2016, Linaro, Ltd. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
12 #include <Library/BaseLib.h>
13 #include <Library/DebugLib.h>
14 #include <Library/IoLib.h>
15 #include <Library/NonDiscoverableDeviceRegistrationLib.h>
16 #include <Library/UefiBootServicesTableLib.h>
18 #include <Protocol/EmbeddedExternalDevice.h>
21 #include <Omap3530/Omap3530.h>
23 EMBEDDED_EXTERNAL_DEVICE
*gTPS65950
;
25 #define HOST_CONTROLLER_OPERATION_REG_SIZE 0x44
30 NON_DISCOVERABLE_DEVICE
*Device
36 // Take USB host out of force-standby mode
37 MmioWrite32 (UHH_SYSCONFIG
, UHH_SYSCONFIG_MIDLEMODE_NO_STANDBY
38 | UHH_SYSCONFIG_CLOCKACTIVITY_ON
39 | UHH_SYSCONFIG_SIDLEMODE_NO_STANDBY
40 | UHH_SYSCONFIG_ENAWAKEUP_ENABLE
41 | UHH_SYSCONFIG_AUTOIDLE_ALWAYS_RUN
);
42 MmioWrite32 (UHH_HOSTCONFIG
, UHH_HOSTCONFIG_P3_CONNECT_STATUS_DISCONNECT
43 | UHH_HOSTCONFIG_P2_CONNECT_STATUS_DISCONNECT
44 | UHH_HOSTCONFIG_P1_CONNECT_STATUS_DISCONNECT
45 | UHH_HOSTCONFIG_ENA_INCR_ALIGN_DISABLE
46 | UHH_HOSTCONFIG_ENA_INCR16_ENABLE
47 | UHH_HOSTCONFIG_ENA_INCR8_ENABLE
48 | UHH_HOSTCONFIG_ENA_INCR4_ENABLE
49 | UHH_HOSTCONFIG_AUTOPPD_ON_OVERCUR_EN_ON
50 | UHH_HOSTCONFIG_P1_ULPI_BYPASS_ULPI_MODE
);
52 // USB reset (GPIO 147 - Port 5 pin 19) output high
53 MmioAnd32 (GPIO5_BASE
+ GPIO_OE
, ~BIT19
);
54 MmioWrite32 (GPIO5_BASE
+ GPIO_SETDATAOUT
, BIT19
);
56 // Get the Power IC protocol
57 Status
= gBS
->LocateProtocol (&gEmbeddedExternalDeviceProtocolGuid
, NULL
, (VOID
**)&gTPS65950
);
58 ASSERT_EFI_ERROR (Status
);
61 Data
= VAUX_DEV_GRP_P1
;
62 Status
= gTPS65950
->Write (gTPS65950
, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID4
, VAUX2_DEV_GRP
), 1, &Data
);
63 ASSERT_EFI_ERROR(Status
);
65 Data
= VAUX_DEDICATED_18V
;
66 Status
= gTPS65950
->Write (gTPS65950
, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID4
, VAUX2_DEDICATED
), 1, &Data
);
67 ASSERT_EFI_ERROR (Status
);
69 // Enable power to the USB hub
70 Status
= gTPS65950
->Read (gTPS65950
, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID3
, LEDEN
), 1, &Data
);
71 ASSERT_EFI_ERROR (Status
);
73 // LEDAON controls the power to the USB host, PWM is disabled
77 Status
= gTPS65950
->Write (gTPS65950
, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID3
, LEDEN
), 1, &Data
);
78 ASSERT_EFI_ERROR (Status
);
85 PciEmulationEntryPoint (
86 IN EFI_HANDLE ImageHandle
,
87 IN EFI_SYSTEM_TABLE
*SystemTable
90 UINT8 CapabilityLength
;
94 CapabilityLength
= MmioRead8 (USB_EHCI_HCCAPBASE
);
95 PhysicalPorts
= MmioRead32 (USB_EHCI_HCCAPBASE
+ 0x4) & 0x0000000F;
96 MemorySize
= CapabilityLength
+ HOST_CONTROLLER_OPERATION_REG_SIZE
+
97 4 * PhysicalPorts
- 1;
99 return RegisterNonDiscoverableMmioDevice (
100 NonDiscoverableDeviceTypeEhci
,
101 NonDiscoverableDeviceDmaTypeNonCoherent
,
105 USB_EHCI_HCCAPBASE
, MemorySize