栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

QCM2290 PM-3 fastboot不识别USB

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

QCM2290 PM-3 fastboot不识别USB

项目场景: 在QCM2290 有两种型号的pm4125,这两种型号硬件上完全pin-to-pin,可以互换的。 pm-2 仅支持mirco-usb。 pm-3 支持typec-usb,通过软件兼容可以做到支持mirco-usb。
问题描述: 由于公司规划,后续项目都是使用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();

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/675477.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号