diff options
author | Dmitry Shmidt <dimitrysh@google.com> | 2018-03-27 17:18:55 -0700 |
---|---|---|
committer | Dmitry Shmidt <dimitrysh@google.com> | 2018-03-27 17:18:55 -0700 |
commit | 662f6b3adfcf742456efd5ef24106af71e0fab57 (patch) | |
tree | d0abdaa2a9c971d05521a937c07d9006bbd2e438 /Drivers | |
parent | 70378c6da6facccb8b49fee923d41fc26c9dd008 (diff) | |
parent | b2e01b201b1de31db139b29ccb819bbd9e70a943 (diff) | |
download | device_linaro_bootloader_OpenPlatformPkg-662f6b3adfcf742456efd5ef24106af71e0fab57.tar.gz device_linaro_bootloader_OpenPlatformPkg-662f6b3adfcf742456efd5ef24106af71e0fab57.tar.bz2 device_linaro_bootloader_OpenPlatformPkg-662f6b3adfcf742456efd5ef24106af71e0fab57.zip |
Merge remote-tracking branch 'aosp/upstream-hikey-aosp' into oppandroid-wear-p-preview-2android-p-preview-5android-p-preview-4android-p-preview-3android-p-preview-2android-o-mr1-iot-release-1.0.2android-o-mr1-iot-release-1.0.1android-o-mr1-iot-release-1.0.0android-o-mr1-iot-preview-8o-mr1-iot-preview-8
Change-Id: I8bb962b0adad705473a9ae8f82f4cda3fd484d07
Diffstat (limited to 'Drivers')
-rw-r--r-- | Drivers/Block/DwUfsHcDxe/DwUfsHcDxe.c | 14 | ||||
-rw-r--r-- | Drivers/Block/DwUfsHcDxe/DwUfsHcDxe.h | 5 | ||||
-rw-r--r-- | Drivers/SdMmc/DwMmcHcDxe/DwMmcHcDxe.c | 4 | ||||
-rw-r--r-- | Drivers/SdMmc/DwMmcHcDxe/DwMmcHci.c | 28 | ||||
-rw-r--r-- | Drivers/SdMmc/DwMmcHcDxe/DwMmcHci.h | 7 | ||||
-rw-r--r-- | Drivers/Usb/DwUsb3Dxe/DwUsb3Dxe.c | 4 |
6 files changed, 46 insertions, 16 deletions
diff --git a/Drivers/Block/DwUfsHcDxe/DwUfsHcDxe.c b/Drivers/Block/DwUfsHcDxe/DwUfsHcDxe.c index 562218e..4334269 100644 --- a/Drivers/Block/DwUfsHcDxe/DwUfsHcDxe.c +++ b/Drivers/Block/DwUfsHcDxe/DwUfsHcDxe.c @@ -310,6 +310,8 @@ UfsHcFlush ( IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This
)
{
+ ArmInstructionSynchronizationBarrier ();
+ ArmDataSynchronizationBarrier ();
return EFI_SUCCESS;
}
@@ -508,13 +510,23 @@ UfsHcPhyInit ( EFI_STATUS
EFIAPI
UfsHcPhySetPowerMode (
- IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This
+ IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This,
+ IN UINT32 DevQuirks
)
{
UFS_HOST_CONTROLLER_PRIVATE_DATA *Private;
UINT32 Data, TxLanes, RxLanes;
Private = UFS_HOST_CONTROLLER_PRIVATE_DATA_FROM_UFSHC (This);
+
+ if (DevQuirks & UFS_DEVICE_QUIRK_HOST_VS_DEBUGSAVECONFIGTIME) {
+ DEBUG ((DEBUG_INFO | DEBUG_LOAD, "ufs: H**** device must set VS_DebugSaveConfigTime 0x10\n"));
+ /* VS_DebugSaveConfigTime */
+ DwUfsDmeSet (Private->RegBase, 0xD0A0, 0x0, 0x10);
+ /* sync length */
+ DwUfsDmeSet (Private->RegBase, 0x1556, 0x0, 0x48);
+ }
+
// PA_Tactive
DwUfsDmeGet (Private->RegBase, 0x15A8, 0, &Data);
if (Data < 7) {
diff --git a/Drivers/Block/DwUfsHcDxe/DwUfsHcDxe.h b/Drivers/Block/DwUfsHcDxe/DwUfsHcDxe.h index 8c8476c..6c2fe34 100644 --- a/Drivers/Block/DwUfsHcDxe/DwUfsHcDxe.h +++ b/Drivers/Block/DwUfsHcDxe/DwUfsHcDxe.h @@ -113,6 +113,8 @@ extern EFI_DRIVER_BINDING_PROTOCOL gUfsHcDriverBinding; extern EFI_COMPONENT_NAME_PROTOCOL gUfsHcComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gUfsHcComponentName2;
+#define UFS_DEVICE_QUIRK_HOST_VS_DEBUGSAVECONFIGTIME (1 << 0)
+
//
// Unique signature for private data structure.
//
@@ -591,6 +593,7 @@ UfsHcPhyInit ( EFI_STATUS
EFIAPI
UfsHcPhySetPowerMode (
- IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This
+ IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This,
+ IN UINT32 DevQuirks
);
#endif /* _DW_UFS_HOST_CONTROLLER_H_ */
diff --git a/Drivers/SdMmc/DwMmcHcDxe/DwMmcHcDxe.c b/Drivers/SdMmc/DwMmcHcDxe/DwMmcHcDxe.c index 55e2fa4..f3c9156 100644 --- a/Drivers/SdMmc/DwMmcHcDxe/DwMmcHcDxe.c +++ b/Drivers/SdMmc/DwMmcHcDxe/DwMmcHcDxe.c @@ -248,7 +248,7 @@ return; for (Slot = 0; Slot < DW_MMC_HC_MAX_SLOT; Slot++) { if ((Private->Slot[Slot].Enable) && (Private->Slot[Slot].SlotType == RemovableSlot)) { - Status = DwMmcHcCardDetect (Private->PciIo, Slot, &MediaPresent); + Status = DwMmcHcCardDetect (Private->PciIo, Private->ControllerHandle, Slot, &MediaPresent); if ((Status == EFI_MEDIA_CHANGED) && !MediaPresent) { DEBUG ((DEBUG_INFO, "DwMmcHcEnumerateDevice: device disconnected at slot %d of pci %p\n", Slot, Private->PciIo)); Private->Slot[Slot].MediaPresent = FALSE; @@ -679,7 +679,7 @@ DwMmcHcDriverBindingStart ( DumpCapabilityReg (Slot, &Private->Capability[Slot]); MediaPresent = FALSE; - Status = DwMmcHcCardDetect (Private->PciIo, Slot, &MediaPresent); + Status = DwMmcHcCardDetect (Private->PciIo, Controller, Slot, &MediaPresent); if (MediaPresent == FALSE) { continue; } diff --git a/Drivers/SdMmc/DwMmcHcDxe/DwMmcHci.c b/Drivers/SdMmc/DwMmcHcDxe/DwMmcHci.c index 533f911..5db5f34 100644 --- a/Drivers/SdMmc/DwMmcHcDxe/DwMmcHci.c +++ b/Drivers/SdMmc/DwMmcHcDxe/DwMmcHci.c @@ -524,6 +524,7 @@ DwMmcHcGetMaxCurrent ( EFI_STATUS
DwMmcHcCardDetect (
IN EFI_PCI_IO_PROTOCOL *PciIo,
+ IN EFI_HANDLE Controller,
IN UINT8 Slot,
OUT BOOLEAN *MediaPresent
)
@@ -542,7 +543,7 @@ DwMmcHcCardDetect ( if (EFI_ERROR (Status)) {
return Status;
}
- *MediaPresent = PlatformDwMmc->CardDetect (Slot);
+ *MediaPresent = PlatformDwMmc->CardDetect (Controller, Slot);
return EFI_SUCCESS;
}
@@ -1521,10 +1522,13 @@ DwEmmcExecTrb ( UINT32 IntStatus;
UINT32 Argument;
UINT32 ErrMask;
+ UINT32 Timeout;
Packet = Trb->Packet;
PciIo = Trb->Private->PciIo;
+ ArmDataSynchronizationBarrier ();
+ ArmInstructionSynchronizationBarrier ();
// Wait until MMC is idle
do {
Status = DwMmcHcRwMmio (PciIo, Trb->Slot, DW_MMC_STATUS, TRUE, sizeof (MmcStatus), &MmcStatus);
@@ -1587,16 +1591,23 @@ DwEmmcExecTrb ( if (EFI_ERROR (Status)) {
return Status;
}
+ ArmDataSynchronizationBarrier ();
+ ArmInstructionSynchronizationBarrier ();
Status = DwMmcHcRwMmio (PciIo, Trb->Slot, DW_MMC_CMD, FALSE, sizeof (Cmd), &Cmd);
if (EFI_ERROR (Status)) {
return Status;
}
+ ArmDataSynchronizationBarrier ();
+ ArmInstructionSynchronizationBarrier ();
ErrMask = DW_MMC_INT_EBE | DW_MMC_INT_HLE | DW_MMC_INT_RTO |
DW_MMC_INT_RCRC | DW_MMC_INT_RE;
ErrMask |= DW_MMC_INT_DCRC | DW_MMC_INT_DRT | DW_MMC_INT_SBE;
do {
- MicroSecondDelay (500);
+ Timeout = 10000;
+ if (--Timeout == 0) {
+ break;
+ }
Status = DwMmcHcRwMmio (PciIo, Trb->Slot, DW_MMC_RINTSTS, TRUE, sizeof (IntStatus), &IntStatus);
if (EFI_ERROR (Status)) {
return Status;
@@ -1604,9 +1615,12 @@ DwEmmcExecTrb ( if (IntStatus & ErrMask) {
return EFI_DEVICE_ERROR;
}
- if (IntStatus & DW_MMC_INT_DTO) { // Transfer Done
- break;
+ if (Trb->DataLen && ((IntStatus & DW_MMC_INT_DTO) == 0)) {
+ // Transfer Not Done
+ MicroSecondDelay (10);
+ continue;
}
+ MicroSecondDelay (10);
} while (!(IntStatus & DW_MMC_INT_CMD_DONE));
switch (Packet->SdMmcCmdBlk->ResponseType) {
case SdMmcResponseTypeR1:
@@ -1790,12 +1804,12 @@ DwSdExecTrb ( if (IntStatus & ErrMask) {
return EFI_DEVICE_ERROR;
}
- if (Trb->DataLen && ((IntStatus & DW_MMC_INT_DTO) == 0)) { // Transfer Done
+ if (Trb->DataLen && ((IntStatus & DW_MMC_INT_DTO) == 0)) {
+ // Transfer not Done
MicroSecondDelay (10);
continue;
- } else {
- MicroSecondDelay (10);
}
+ MicroSecondDelay (10);
} while (!(IntStatus & DW_MMC_INT_CMD_DONE));
if (Packet->InTransferLength) {
do {
diff --git a/Drivers/SdMmc/DwMmcHcDxe/DwMmcHci.h b/Drivers/SdMmc/DwMmcHcDxe/DwMmcHci.h index 228b20f..d9c6211 100644 --- a/Drivers/SdMmc/DwMmcHcDxe/DwMmcHci.h +++ b/Drivers/SdMmc/DwMmcHcDxe/DwMmcHci.h @@ -522,9 +522,10 @@ DwMmcHcGetMaxCurrent ( **/
EFI_STATUS
DwMmcHcCardDetect (
- IN EFI_PCI_IO_PROTOCOL *PciIo,
- IN UINT8 Slot,
- OUT BOOLEAN *MediaPresent
+ IN EFI_PCI_IO_PROTOCOL *PciIo,
+ IN EFI_HANDLE Controller,
+ IN UINT8 Slot,
+ OUT BOOLEAN *MediaPresent
);
/**
diff --git a/Drivers/Usb/DwUsb3Dxe/DwUsb3Dxe.c b/Drivers/Usb/DwUsb3Dxe/DwUsb3Dxe.c index c2fad30..408d744 100644 --- a/Drivers/Usb/DwUsb3Dxe/DwUsb3Dxe.c +++ b/Drivers/Usb/DwUsb3Dxe/DwUsb3Dxe.c @@ -226,7 +226,7 @@ DwUsb3SetFifoSize ( IN UINT32 FifoNum ) { - UINT32 Reg; + UINT32 Reg = 0; if (Dir == FIFO_DIR_TX) { Reg = GTXFIFOSIZ (FifoNum); @@ -1219,7 +1219,7 @@ DwUsb3HandleEndPoint0 ( ) { usb3_pcd_ep_t *ep0 = &pcd->ep0; - usb3_dma_desc_t *desc; + usb3_dma_desc_t *desc = NULL; UINT32 byte_count, len; switch (pcd->ep0state) { |