问题描述: 由于公司规划,后续项目都是使用pm-3,因此有客户提出pm-3的模块在fastboot 下无法识别mirco-usb。
原因分析: 1.通过对比 pm-2 mirco usb ok pm-3 mirco usb fail pm-3 typec usb ok的log发现fail的log没有走“HandlePortPartnerXtach”函数 (BOOT.XF.4.1boot_imagesQcomPkgSocPkgAgattiPkgLibraryUsbConfigLibUsbConfigLib.c)。 初步怀疑是由于typec走的ssusb ,mirco 是high usb导致的
pm-2 mirco usb ok -log
UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 0 UsbConfigPortsQueryConnectionChange: Vbus FALSE 1 UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 0 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 0 UsbConfigPortsQueryConnectionChange: Vbus FALSE 1 UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 0 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 0 UsbConfigPortsQueryConnectionChange: Vbus FALSE 1 UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 0 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsQueryConnectionChange: UFP and micro-USB UsbConfigPortsQueryConnectionChange: 000000 ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: usbport->connectstate: ATT HandlePortPartnerXtach: HandlePortPartnerXtach HandlePortPartnerXtach: Cable Attach HandlePortPartnerXtach: HandlePortPartnerXtach 1111 HandlePortPartnerXtach: HandlePortPartnerXtach 22222 UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 DevSmProcessEvent: Processing event EfiUsbMsgBusEventAttach in state DEV_STATE_DETACHED UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 DevSmProcessEvent: Processing event EfiUsbMsgBusEventSuspend in state DEV_STATE_ATTACHED UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 DevSmProcessEvent: Processing event EfiUsbMsgBusEventReset in state DEV_STATE_SUSPENDED DevSmProcessEvent: Processing event EfiUsbMsgBusEventSpeed in state DEV_STATE_DEFAULT_ADDRESSED Dev_Common_Speed: Bus Speed 2222: High DevSmProcessEvent: Processing event EfiUsbMsgSetupPacket in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedTx in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedRx in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgSetupPacket in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedTx in state DEV_STATE_DEFAULT_ADDRESSED UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 1 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 DevSmProcessEvent: Processing event EfiUsbMsgSetupPacket in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedTx in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedRx in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgSetupPacket in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedTx in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedRx in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgSetupPacket in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedTx in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedRx in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgSetupPacket in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedTx in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedRx in state DEV_STATE_DEFAULT_ADDRESSED
pm-3 typec usb ok - log
UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 0 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 0 UsbConfigPortsQueryConnectionChange: Vbus FALSE 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 0 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 0 UsbConfigPortsQueryConnectionChange: Vbus FALSE 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 0 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsQueryConnectionChange: UFP and micro-USB UsbConfigPortsQueryConnectionChange: 000000 ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: usbport->connectstate: ATT UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :2 2 HandlePortPartnerXtach: HandlePortPartnerXtach HandlePortPartnerXtach: Cable Attach HandlePortPartnerXtach: HandlePortPartnerXtach 1111 HandlePortPartnerXtach: HandlePortPartnerXtach 22222 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 DevSmProcessEvent: Processing event EfiUsbMsgBusEventAttach in state DEV_STATE_DETACHED DevSmProcessEvent: Processing event EfiUsbMsgBusEventReset in state DEV_STATE_ATTACHED UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 DevSmProcessEvent: Processing event EfiUsbMsgBusEventSpeed in state DEV_STATE_DEFAULT_ADDRESSED Dev_Common_Speed: Bus Speed 2222: Super DevSmProcessEvent: Processing event EfiUsbMsgSetupPacket in state DEV_STATE_DEFAULT_ADDRESSED DevSmProcessEvent: Processing event EfiUsbMsgEndpointStatusChangedTx in state DEV_STATE_DEFAULT_ADDRESSED
pm-3 typec usb ok -log
UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 0 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 0 UsbConfigPortsQueryConnectionChange: Vbus FALSE 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 0 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 0 UsbConfigPortsQueryConnectionChange: Vbus FALSE 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 0 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 0 UsbConfigPortsQueryConnectionChange: Vbus FALSE 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 0 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsQueryConnectionChange: UFP and micro-USB UsbConfigPortsQueryConnectionChange: 000000 ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: usbport->connectstate: ATT UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :2 2 HandlePortPartnerXtach: HandlePortPartnerXtach HandlePortPartnerXtach: Cable Attach HandlePortPartnerXtach: HandlePortPartnerXtach 22222 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1 UsbConfigPortsQueryConnectionChange: GetHwInfo : Status = Success,UsbPortHwInfo.ConnectorType = 2 UsbConfigPortsQueryConnectionChange: VbusStatus: 1 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler Message :0 2 UsbConfigPortsEventHandler: UsbConfigPortsEventHandler UsbConfigPortsQueryConnectionChange: UsbConfigPortsQueryConnectionChange ConnectModeStatus: 1
2.这个函数HandlePortPartnerXtach中
if (IS_PORT_UFP(PortMode) ){//&& IS_SDP_CDP(ChargerType)) 条件成立时才会走HandlePortPartnerXtach 1111;失败的log没有走到这里。
typedef enum _USB_CFG_PORT_MESSAGE
75 {
76 UsbCfgPortMsgNone = 0,
77
78 UsbCfgPortMsgPartnerDetach,
79
80 UsbCfgPortMsgPartnerAttach,
81
82 }
162 EfiUsbMsgSetupPacket,
163
164 EfiUsbMsgEndpointStatusChangedRx,
165
170 EfiUsbMsgEndpointStatusChangedTx,
171
176 EfiUsbMsgBusEventDetach,
177
178 EfiUsbMsgBusEventAttach,
179
180 EfiUsbMsgBusEventReset,
181
182 EfiUsbMsgBusEventSuspend,
183
184 EfiUsbMsgBusEventResume,
185
186 EfiUsbMsgBusEventSpeed
187
188 } EFI_USBFN_MESSAGE;
#define IS_PORT_UFP(PORT) ((PORT) == (USB_TYPEC_PORT_MODE_UFP))
boot_images/QcomPkg/SocPkg/DivarPkg/Library/UsbConfigLib/UsbConfigLibPrivate.h:78:
#define IS_SDP_CDP(CHG_TYPE) (((CHG_TYPE) == (EFI_USB_PWR_CTRL_HSUSB_CHGPORT_SDP)) || ((CHG_TYPE) == (EFI_USB_PWR_CTRL_HSUSB_CHGPORT_CDP)))
所以看下这个CHG_TYPE怎么来的,改了有什么影响?
改了上面的判断逻辑还是不识别:
通过log 发现走的是UsbDevSmImpl.c
继续看下怎么走到这个判断速度的地方的?
失败的时候 DevSmProcessEvent 没走,UsbFnMsg:0一直为0导致没有走进DevSmProcessEvent,那么进而我们看下UsbFnMsg值怎么获取的?
Status = gUsbfnIo->EventHandler(gUsbfnIo, &UsbFnMsg, &UsbFnPayloadSize, &UsbFnPayload);
STATIC EFI_USBFN_IO_PROTOCOL *gUsbfnIo = NULL;
看起来像但是不是它:UsbConfigPortsEventHandler
vim boot_images/QcomPkg/Drivers/UsbfnDxe/Usbfn.c +2091
Status = gBS->InstallMultipleProtocolInterfaces(&Controller, &gEfiUsbfnIoProtocolGuid, &Usbfn->UsbfnIo(interface), NULL);
STATIC
841 USBFN_DEV
842 *CreateUsbfnInstance (
843 VOID
844 )
845 {
846 EFI_STATUS Status = EFI_SUCCESS;
847 USBFN_DEV *Usbfn = NULL;
848 UINTN i = 0;
849 EFI_PLATFORMINFO_PROTOCOL *PlatformInfoProtocol = NULL;
850 EFI_PLATFORMINFO_PLATFORM_INFO_TYPE PlatformInfo;
851 ConST UINTN TX_BUFF_SIZE = 65536;
852
853 FNC_ENTER_MSG ();
854
855 Usbfn = (USBFN_DEV *) AllocateZeroPool(sizeof(USBFN_DEV));
856 if (!Usbfn) {
857 DBG (EFI_D_ERROR, "memory allocation failed for USB FN");
858 goto ON_EXIT;
859 }
860
861 Usbfn->Signature = USBFN_DEV_SIGNATURE;
862
863 // USBFN IO protocol.
864 Usbfn->UsbfnIo.Revision = EFI_USBFN_IO_PROTOCOL_REVISION;
865 Usbfn->UsbfnIo.DetectPort = UsbfnDetectPort;
866 Usbfn->UsbfnIo.ConfigureEnableEndpoints = UsbfnConfigureEnableEndpoints;
867 Usbfn->UsbfnIo.ConfigureEnableEndpointsEx = UsbfnConfigureEnableEndpointsEx;
868 Usbfn->UsbfnIo.GetEndpointMaxPacketSize = UsbfnGetEndpointMaxPacketSize;
869 Usbfn->UsbfnIo.GetDeviceInfo = UsbfnGetDeviceInfo;
870 Usbfn->UsbfnIo.GetVendorIdProductId = UsbfnGetVendorIdProductId;
871 Usbfn->UsbfnIo.AbortTransfer = UsbfnAbortTransfer;
872 Usbfn->UsbfnIo.GetEndpointStallState = UsbfnGetEndpointStallState;
873 Usbfn->UsbfnIo.SetEndpointStallState = UsbfnSetEndpointStallState;
874 Usbfn->UsbfnIo.EventHandler = UsbfnEventHandler;
875 Usbfn->UsbfnIo.Transfer = UsbfnTransfer;
876 Usbfn->UsbfnIo.GetMaxTransferSize = UsbfnGetMaxTransferSize;
877 Usbfn->UsbfnIo.AllocateTransferBuffer = UsbfnAllocateTransferBuffer;
878 Usbfn->UsbfnIo.FreeTransferBuffer = UsbfnFreeTransferBuffer;
879 Usbfn->UsbfnIo.StartController = UsbfnStartController;
880 Usbfn->UsbfnIo.StopController = UsbfnStopController;
881 Usbfn->UsbfnIo.SetEndpointPolicy = UsbfnSetEndpointPolicy;
882 Usbfn->UsbfnIo.GetEndpointPolicy = UsbfnGetEndpointPolicy;
函数本体是 UsbfnEventHandler;它获取的 UsbFnMsg 为0导致mirco 不识别;接着看:
UsbFnMsg = 5 表示 usb attach???
UsbFnMsg没走是因为 UsbDeviceHandleEvent 没走,这个为什么没走???
新发现:
mirco -usb 失败的时候 UsbDeviceHandleEvent 就没继续走了
378 struct _EFI_USB_DEVICE_PROTOCOL {
379 UINTN Revision;
380 USB_DEVICE_START Start;
381 USB_DEVICE_SEND Send;
382 USB_DEVICE_HANDLE_EVENT HandleEvent;
383 USB_DEVICE_ALLOCATE_TRANSFER_BUFFER AllocateTransferBuffer;
384 USB_DEVICE_FREE_TRANSFER_BUFFER FreeTransferBuffer;
385 USB_DEVICE_STOP Stop;
386 USB_DEVICE_ABORT_XFER AbortXfer;
387 USB_DEVICE_SET_ENDPOINT_STALL_STATE SetEndpointStallState;
388 USB_DEVICE_START_EX StartEx;
389 };
EFI_USB_DEVICE_PROTOCOL UsbDeviceProtocol =
{
EFI_USB_DEVICE_PROTOCOL_REVISION,
UsbDeviceStart,
UsbDeviceSend,
UsbDeviceHandleEvent,
UsbDeviceAllocateBuffer,
UsbDeviceFreeTransferBuffer,
UsbDeviceStop,
UsbDeviceAbortXfer,
UsbDeviceSetEndpointStallState,
UsbDeviceStartEx
};
Status = gBS->InstallMultipleProtocolInterfaces( &ImageHandle, &gEfiUsbDeviceProtocolGuid, &UsbDeviceProtocol, NULL);
找一下 gEfiUsbDeviceProtocolGuid
boot_images/QcomPkg/Application/FastbootApp/Fastboot.c
boot_images/QcomPkg/Drivers/UsbfnChgDxe/UsbfnChgDxe.c
boot_images/QcomPkg/Drivers/UsbDeviceDxe/UsbDeviceDxe.c
在这三个文件中搜 HandleEvent,此时log打印不出来?
解决方案: 那么此时回到起点,最后发现还是因为UsbDeviceHandleEvent这个函数没走,那么回到HandlePortPartnerXtach函数,只有ChargerType这个值有差异: BOOT.XF.4.1boot_imagesQcomPkgSocPkgAgattiPkgLibraryUsbConfigLibUsbConfigLib.c
@@ -1228,17 +1229,19 @@ HandlePortPartnerXtach(
if (EFI_ERROR(Status)) { // cannot get charger type, assume invalid
WRN_CHK("Cannot Get Charger Type");
}
- if(FeaturePcdGet(UsbNoPmic)) {
+ if(FeaturePcdGet(UsbNoPmic) || IS_PORT_UFP(PortMode)) {
ChargerType = EFI_USB_PWR_CTRL_HSUSB_CHGPORT_SDP;
}
- if (IS_PORT_UFP(PortMode) && IS_SDP_CDP(ChargerType)) {
- // For the Device Mode, reinit onLY the USB link and PHY. Keep the clocks and power rails on.
- Status = UsbCoreIfc->InitCommon(UsbCoreIfc,TRUE);
- ERR_CHK ("ConfigUsb: Error - failed to perform common initialization for USB core %d: %r", CoreNum, Status);
+ if (IS_PORT_UFP(PortMode) ){//&& IS_SDP_CDP(ChargerType)) {
+ DBG(EFI_D_ERROR, "HandlePortPartnerXtach 1111");
+ // For the Device Mode, reinit onLY the USB link and PHY. Keep the clocks and power rails on.
+ Status = UsbCoreIfc->InitCommon(UsbCoreIfc,TRUE);
+ ERR_CHK ("ConfigUsb: Error - failed to perform common initialization for USB core %d: %r", CoreNum, Status);
- Status = UsbCoreIfc->InitDevice(UsbCoreIfc);
- ERR_CHK ("ConfigUsb: Error - failed to perform device initializaition for USB core %d: %r", CoreNum, Status);
- }
+ Status = UsbCoreIfc->InitDevice(UsbCoreIfc);
+ ERR_CHK ("ConfigUsb: Error - failed to perform device initializaition for USB core %d: %r", CoreNum, Status);
+ }
+ DBG(EFI_D_ERROR, "HandlePortPartnerXtach 22222 ChargerType:%d",ChargerType);
}
// for host mode, we still need to reset the SS PHY in order to update the lane number
else if (IS_USB_HOST_MODE(gUsbConfigDevice[CoreNum].UsbConfig.modeType))
BOOT.XF.4.1/boot_images/QcomPkg/SocPkg/AgattiPkg/Library/UsbConfigLib/UsbConfigUsbPorts.c
@@ -56,6 +56,8 @@ UsbConfigPortsInit(
{
EFI_STATUS Status = EFI_SUCCESS;
QCOM_USB_PORT *Port;
+
+ DBG(EFI_D_ERROR, "000000 UsbConfigPortsInit");
if (!UsbPortHandle) {
Status = EFI_INVALID_PARAMETER;
@@ -204,6 +206,7 @@ UsbConfigPortsQueryConnectionChange(
EFI_STATUS Status = EFI_SUCCESS;
//Initialize Message value to UsbCfgPortMsgNone
*Message = UsbCfgPortMsgNone;
+ //DBG(EFI_D_ERROR, "UsbConfigPortsQueryConnectionChange ConnectModeStatus: %d", UsbPort->PortStatus.DataRole);
// Since there is no Type-C support for Pre-SI,
// assume port in UFP mode and it is always attached.
@@ -212,15 +215,16 @@ UsbConfigPortsQueryConnectionChange(
(PlatformInfo.platform == EFI_PLATFORMINFO_TYPE_VIRTIO) ||
(PlatformInfo.platform == EFI_PLATFORMINFO_TYPE_ADP) ||
(PlatformInfo.platform == EFI_PLATFORMINFO_TYPE_UNKNOWN)) {
- DBG(EFI_D_VERBOSE, "Pre-SI: Assume UFP and attached");
+ DBG(EFI_D_ERROR, "Pre-SI: Assume UFP and attached");
- if (UsbPort->ConnectState == FALSE) {
- UsbPort->ConnectState = TRUE;
+ if (UsbPort->ConnectState != USBC_STATE_ATTACHED) {
+ UsbPort->ConnectState = USBC_STATE_ATTACHED;
*Message = UsbCfgPortMsgPartnerAttach;
*PayloadSize = sizeof(USB_TYPEC_PORT_MODE);
Payload->UsbTypeCPortMode = USB_TYPEC_PORT_MODE_UFP;
// set to CC1 for RUMI
UsbPort->PortStatus.CCOrientation = EFI_USB_PWR_CTRL_TYPEC_ORIENTATION_CC1;
+ UsbPort->PortStatus.DataRole = EFI_USB_PWR_CTRL_TYPEC_DATAROLE_UFP;
}
goto ON_EXIT;
}
@@ -241,8 +245,8 @@ UsbConfigPortsQueryConnectionChange(
EFI_USB_PWR_CTRL_USB_PORTHW_INFO UsbPortHwInfo;
Status = gPwrCtrlProtocol->GetHwInfo(&UsbPortHwInfo);
- DBG(EFI_D_INFO,"GetHwInfo : Status = %r,UsbPortHwInfo.ConnectorType = %d ", Status, UsbPortHwInfo.ConnectorType[0]);
- if( (EFI_SUCCESS == Status) && (UsbPortHwInfo.ConnectorType[0] == EFI_USB_PWR_CTRL_USB_CONNECTOR_TYPE_TYPEC))
+ // DBG(EFI_D_ERROR,"GetHwInfo : Status = %r,UsbPortHwInfo.ConnectorType = %d ", Status, UsbPortHwInfo.ConnectorType[0]);
+
Status = gPwrCtrlProtocol->GetVbusDetectStatus(CoreNum, &VbusStatus);
ERR_CHK("Failed to get VbusStatus");
- DBG(EFI_D_INFO, "VbusStatus: %d", VbusStatus);
+ //DBG(EFI_D_ERROR, "VbusStatus: %d", VbusStatus);
if(VbusStatus)
{
@@ -332,11 +345,12 @@ UsbConfigPortsQueryConnectionChange(
DBG(EFI_D_ERROR, "UFP and micro-USB");
Payload->UsbTypeCPortMode = USB_TYPEC_PORT_MODE_UFP;
UsbPort->PortStatus.DataRole = EFI_USB_PWR_CTRL_TYPEC_DATAROLE_UFP;
+ DBG(EFI_D_ERROR, "000000 ConnectModeStatus: %d", UsbPort->PortStatus.DataRole);
}
}
else
{
- DBG(EFI_D_INFO, "Vbus FALSE %d", UsbPort->ConnectState);
+ //DBG(EFI_D_ERROR, "Vbus FALSE %d", UsbPort->ConnectState);
if (UsbPort->ConnectState == USBC_STATE_DETACHED)
goto ON_EXIT;
@@ -349,16 +363,16 @@ UsbConfigPortsQueryConnectionChange(
UsbPort->PortStatus.DataRole = EFI_USB_PWR_CTRL_TYPEC_DATAROLE_UNKNOWN;
}
}
- }
- else {
- DBG(EFI_D_ERROR,"Invalid Port type");
- }
+ // }
+ // else {
+ // DBG(EFI_D_ERROR,"Invalid Port type");
+ //}
}
else if(CoreNum == USB_CORE_1) { //For the secondary core
Status = gPwrCtrlProtocol->GetVbusDetectStatus(CoreNum, &VbusStatus);
ERR_CHK("Failed to get VbusStatus");
- DBG(EFI_D_INFO, "VbusStatus: %d", VbusStatus);
+ DBG(EFI_D_ERROR, " USB_CORE_1 VbusStatus: %d", VbusStatus);
if(VbusStatus)
{
@@ -374,7 +388,7 @@ UsbConfigPortsQueryConnectionChange(
}
else
{
- DBG(EFI_D_INFO, "Vbus FALSE %d", UsbPort->ConnectState);
+ DBG(EFI_D_ERROR, " USB_CORE_1 Vbus FALSE %d", UsbPort->ConnectState);
if (UsbPort->ConnectState == USBC_STATE_DETACHED)
goto ON_EXIT;
@@ -421,6 +435,7 @@ UsbConfigPortsEventHandler(
QCOM_USB_PORT *UsbPort = (QCOM_USB_PORT *)UsbPortHandle;
FNC_ENTER_MSG();
+ //DBG(EFI_D_ERROR, "UsbConfigPortsEventHandler");
if (!UsbPortHandle || !Message || !PayloadSize || !Payload) {
Status = EFI_INVALID_PARAMETER;
@@ -429,6 +444,7 @@ UsbConfigPortsEventHandler(
Message,
PayloadSize,
Payload);
+ DBG(EFI_D_ERROR, "UsbConfigPortsEventHandler 1");
}
*Message = UsbCfgPortMsgNone;
@@ -440,6 +456,7 @@ UsbConfigPortsEventHandler(
PayloadSize,
Payload,
CoreNum);
+ //DBG(EFI_D_ERROR, "UsbConfigPortsEventHandler Message :%d 2",*Message);
WRN_CHK("UsbConfigPortsQueryPortConnectionUpdate failed %r", Status);
@@ -499,6 +516,8 @@ UsbPortGetRtConnectionMode(
EFI_STATUS Status = EFI_SUCCESS;
EFI_USB_PWR_CTRL_TYPEC_PORT_STATUS PortStatus = {0};
PortStatus.DataRole = EFI_USB_PWR_CTRL_TYPEC_DATAROLE_UNKNOWN;
+
+ DBG(EFI_D_ERROR, "000000 UsbPortGetRtConnectionMode");
FNC_ENTER_MSG();



