]> git.proxmox.com Git - mirror_edk2.git/blame - Omap35xxPkg/PciEmulation/PciEmulation.c
ArmPkg/CompilerIntrinsicsLib: Add uread, uwrite GCC assembly sources
[mirror_edk2.git] / Omap35xxPkg / PciEmulation / PciEmulation.c
CommitLineData
1e57a462 1/** @file\r
2\r
3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
04fd7859 4 Copyright (c) 2016, Linaro, Ltd. All rights reserved.<BR>\r
3402aac7 5\r
538311f7 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
1e57a462 7\r
8**/\r
9\r
04fd7859 10#include <PiDxe.h>\r
1e57a462 11\r
04fd7859
AB
12#include <Library/BaseLib.h>\r
13#include <Library/DebugLib.h>\r
14#include <Library/IoLib.h>\r
15#include <Library/NonDiscoverableDeviceRegistrationLib.h>\r
16#include <Library/UefiBootServicesTableLib.h>\r
1e57a462 17\r
04fd7859 18#include <Protocol/EmbeddedExternalDevice.h>\r
1e57a462 19\r
04fd7859
AB
20#include <TPS65950.h>\r
21#include <Omap3530/Omap3530.h>\r
1e57a462 22\r
04fd7859 23EMBEDDED_EXTERNAL_DEVICE *gTPS65950;\r
1e57a462 24\r
04fd7859 25#define HOST_CONTROLLER_OPERATION_REG_SIZE 0x44\r
1e57a462 26\r
27STATIC\r
04fd7859 28EFI_STATUS\r
1e57a462 29ConfigureUSBHost (\r
04fd7859 30 NON_DISCOVERABLE_DEVICE *Device\r
1e57a462 31 )\r
32{\r
33 EFI_STATUS Status;\r
34 UINT8 Data = 0;\r
35\r
36 // Take USB host out of force-standby mode\r
37 MmioWrite32 (UHH_SYSCONFIG, UHH_SYSCONFIG_MIDLEMODE_NO_STANDBY\r
38 | UHH_SYSCONFIG_CLOCKACTIVITY_ON\r
39 | UHH_SYSCONFIG_SIDLEMODE_NO_STANDBY\r
40 | UHH_SYSCONFIG_ENAWAKEUP_ENABLE\r
41 | UHH_SYSCONFIG_AUTOIDLE_ALWAYS_RUN);\r
42 MmioWrite32 (UHH_HOSTCONFIG, UHH_HOSTCONFIG_P3_CONNECT_STATUS_DISCONNECT\r
43 | UHH_HOSTCONFIG_P2_CONNECT_STATUS_DISCONNECT\r
44 | UHH_HOSTCONFIG_P1_CONNECT_STATUS_DISCONNECT\r
45 | UHH_HOSTCONFIG_ENA_INCR_ALIGN_DISABLE\r
46 | UHH_HOSTCONFIG_ENA_INCR16_ENABLE\r
47 | UHH_HOSTCONFIG_ENA_INCR8_ENABLE\r
48 | UHH_HOSTCONFIG_ENA_INCR4_ENABLE\r
49 | UHH_HOSTCONFIG_AUTOPPD_ON_OVERCUR_EN_ON\r
50 | UHH_HOSTCONFIG_P1_ULPI_BYPASS_ULPI_MODE);\r
51\r
52 // USB reset (GPIO 147 - Port 5 pin 19) output high\r
53 MmioAnd32 (GPIO5_BASE + GPIO_OE, ~BIT19);\r
54 MmioWrite32 (GPIO5_BASE + GPIO_SETDATAOUT, BIT19);\r
55\r
56 // Get the Power IC protocol\r
57 Status = gBS->LocateProtocol (&gEmbeddedExternalDeviceProtocolGuid, NULL, (VOID **)&gTPS65950);\r
3402aac7 58 ASSERT_EFI_ERROR (Status);\r
1e57a462 59\r
60 // Power the USB PHY\r
61 Data = VAUX_DEV_GRP_P1;\r
62 Status = gTPS65950->Write (gTPS65950, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID4, VAUX2_DEV_GRP), 1, &Data);\r
63 ASSERT_EFI_ERROR(Status);\r
64\r
65 Data = VAUX_DEDICATED_18V;\r
66 Status = gTPS65950->Write (gTPS65950, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID4, VAUX2_DEDICATED), 1, &Data);\r
3402aac7 67 ASSERT_EFI_ERROR (Status);\r
1e57a462 68\r
69 // Enable power to the USB hub\r
70 Status = gTPS65950->Read (gTPS65950, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID3, LEDEN), 1, &Data);\r
71 ASSERT_EFI_ERROR (Status);\r
72\r
73 // LEDAON controls the power to the USB host, PWM is disabled\r
74 Data &= ~LEDAPWM;\r
75 Data |= LEDAON;\r
76\r
77 Status = gTPS65950->Write (gTPS65950, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID3, LEDEN), 1, &Data);\r
78 ASSERT_EFI_ERROR (Status);\r
1e57a462 79\r
1e57a462 80 return EFI_SUCCESS;\r
81}\r
82\r
1e57a462 83EFI_STATUS\r
84EFIAPI\r
85PciEmulationEntryPoint (\r
86 IN EFI_HANDLE ImageHandle,\r
87 IN EFI_SYSTEM_TABLE *SystemTable\r
88 )\r
89{\r
1e57a462 90 UINT8 CapabilityLength;\r
91 UINT8 PhysicalPorts;\r
04fd7859
AB
92 UINTN MemorySize;\r
93\r
94 CapabilityLength = MmioRead8 (USB_EHCI_HCCAPBASE);\r
95 PhysicalPorts = MmioRead32 (USB_EHCI_HCCAPBASE + 0x4) & 0x0000000F;\r
96 MemorySize = CapabilityLength + HOST_CONTROLLER_OPERATION_REG_SIZE +\r
97 4 * PhysicalPorts - 1;\r
98\r
99 return RegisterNonDiscoverableMmioDevice (\r
100 NonDiscoverableDeviceTypeEhci,\r
101 NonDiscoverableDeviceDmaTypeNonCoherent,\r
102 ConfigureUSBHost,\r
103 NULL,\r
104 1,\r
105 USB_EHCI_HCCAPBASE, MemorySize\r
106 );\r
1e57a462 107}\r