diff --git a/Ubiquitous/XiZi_AIoT/services/drivers/usb/usb_service/usb_host.c b/Ubiquitous/XiZi_AIoT/services/drivers/usb/usb_service/usb_host.c index 14b2f8a76..e0b7cd6b9 100644 --- a/Ubiquitous/XiZi_AIoT/services/drivers/usb/usb_service/usb_host.c +++ b/Ubiquitous/XiZi_AIoT/services/drivers/usb/usb_service/usb_host.c @@ -77,6 +77,34 @@ void ipc_rndis_init(void){ } } +static void usb_check_phymode(int id) +{ +#define PIPE_PHY_GRF0 0xFDC70000 +#define PIPE_PHY_GRF1 0xFDC80000 +#define PIPE_PHY_GRF_PIPE_CON0 0x00 +#define PIPE_PHY_GRF_VIRADDR_BASE 0x0000002100000000ULL + void *base = (void *)PIPE_PHY_GRF0; + void *base_vir = (void *)PIPE_PHY_GRF_VIRADDR_BASE; + uint32_t pipe_phymode; + + if (USB3_0_ID == id) { + base = (void *)PIPE_PHY_GRF0; + } + if (USB3_1_ID == id) { + base = (void *)PIPE_PHY_GRF1; + } + + if(!mmap((uintptr_t)base_vir, (uintptr_t)base, 0xFF, true)){ + USB_LOG_ERR("usb_check_phy mmap fail\n"); + } + + pipe_phymode = readl ( base_vir + PIPE_PHY_GRF_PIPE_CON0 ); + USB_LOG_DBG("usbh_initialize PIPE_PHY_GRF_PIPE_CON0=%08X\n", pipe_phymode); + if ( (pipe_phymode & 0x000C) != 0x0004) { + USB_LOG_ERR("usbh_initialize PIPE_PHY_GRF_PIPE_CON0=%08X is not USB3 mode\n", pipe_phymode); + } +} + static void usb_init(int id) { if (0 == usbh_initialize(id, &usb[id])){ @@ -100,6 +128,8 @@ int main(int argc, char* argv[]) } } printf("main usb3 id=%d init.\r\n", id); + + usb_check_phymode(id); usb_init(id); ipc_rndis_init();