From 083277e5000dc1828def066a96b72c44c1287bb5 Mon Sep 17 00:00:00 2001 From: songyanguang <345810377@qq.com> Date: Wed, 21 Aug 2024 17:22:54 +0800 Subject: [PATCH] The paddr parameter needs to be 0 in the naive_mmap function. --- .../usb/components/class/hub/usbh_hub.c | 2 ++ .../components/class/wireless/rndis_host.c | 4 ++++ .../components/class/wireless/usbh_rndis.c | 4 ++++ .../drivers/usb/components/core/usbh_core.c | 2 ++ .../drivers/usb/components/port/xhci/xhci.c | 21 ++++++++++++++++--- 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/hub/usbh_hub.c b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/hub/usbh_hub.c index 78768e91d..b98c3b7f9 100644 --- a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/hub/usbh_hub.c +++ b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/hub/usbh_hub.c @@ -336,6 +336,7 @@ static int usbh_hub_connect(struct usbh_hubport *hport, uint8_t intf) /* g_hub_buf allocate virtual address and physical address*/ vaddr = USB_MEM_VIRADDR_ALLOC; + paddr = 0; hub->g_hub_buf = (uint8_t *)vaddr; rc = naive_mmap(&vaddr, &paddr, 32, true); if(rc != 0){ @@ -343,6 +344,7 @@ static int usbh_hub_connect(struct usbh_hubport *hport, uint8_t intf) return -ENOMEM; } hub->g_hub_buf_phy = (uint8_t *)paddr; + USB_LOG_DBG("usbh_hub_connect hub->g_hub_buf=%lx hub->g_hub_buf_phy=%08lx\n", hub->g_hub_buf, hub->g_hub_buf_phy); hport->config.intf[intf].priv = hub; diff --git a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/wireless/rndis_host.c b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/wireless/rndis_host.c index 49dec828d..657057c00 100644 --- a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/wireless/rndis_host.c +++ b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/wireless/rndis_host.c @@ -149,6 +149,7 @@ void usbh_rndis_run(struct usbh_rndis *rndis_class) s_rndis_class_ptr = rndis_class; vaddr = USB_MEM_VIRADDR_ALLOC; + paddr = 0; tx_buffer = (uint8_t *)vaddr; ret = naive_mmap(&vaddr, &paddr, RNDIS_ETH_BUFFER_LEN, true); if(ret != 0){ @@ -156,8 +157,10 @@ void usbh_rndis_run(struct usbh_rndis *rndis_class) return; } tx_buffer_phy = (uint8_t *)paddr; + USB_LOG_DBG("usbh_rndis_run tx_buffer=%lx tx_buffer_phy=%08lx\n", tx_buffer, tx_buffer_phy); vaddr = USB_MEM_VIRADDR_ALLOC; + paddr = 0; rx_buffer = (uint8_t *)vaddr; ret = naive_mmap(&vaddr, &paddr, RNDIS_RXETH_BUFFER_LEN, true); if(ret != 0){ @@ -165,6 +168,7 @@ void usbh_rndis_run(struct usbh_rndis *rndis_class) return; } rx_buffer_phy = (uint8_t *)paddr; + USB_LOG_DBG("usbh_rndis_run rx_buffer=%lx rx_buffer_phy=%08lx\n", rx_buffer, rx_buffer_phy); mutex_sem_handle = usb_osal_sem_create(0); if (NULL == mutex_sem_handle) { diff --git a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/wireless/usbh_rndis.c b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/wireless/usbh_rndis.c index 73dbee68d..40da39f94 100644 --- a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/wireless/usbh_rndis.c +++ b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/class/wireless/usbh_rndis.c @@ -292,6 +292,7 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf) /* allocate virtual address and physical address*/ vaddr = USB_MEM_VIRADDR_ALLOC; + paddr = 0; g_rndis_buf = (uint8_t *)vaddr; ret = naive_mmap(&vaddr, &paddr, 4096, true); if(ret != 0){ @@ -299,8 +300,10 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf) return -ENOMEM; } g_rndis_buf_phy = (uint8_t *)paddr; + USB_LOG_DBG("usbh_rndis_connect g_rndis_buf=%lx g_rndis_buf_phy=%08lx\n", g_rndis_buf, g_rndis_buf_phy); vaddr = USB_MEM_VIRADDR_ALLOC; + paddr = 0; g_rndis_keepalive_buf = (uint8_t *)vaddr; ret = naive_mmap(&vaddr, &paddr, 4096, true); if(ret != 0){ @@ -308,6 +311,7 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf) return -ENOMEM; } g_rndis_keepalive_buf_phy = (uint8_t *)paddr; + USB_LOG_DBG("usbh_rndis_connect g_rndis_keepalive_buf=%lx g_rndis_keepalive_buf_phy=%08lx\n", g_rndis_keepalive_buf, g_rndis_keepalive_buf_phy); hport->config.intf[intf].priv = rndis_class; hport->config.intf[intf + 1].priv = NULL; diff --git a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/core/usbh_core.c b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/core/usbh_core.c index 051fc04dd..9e038cdff 100644 --- a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/core/usbh_core.c +++ b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/core/usbh_core.c @@ -851,6 +851,7 @@ int usbh_initialize(uint32_t id, struct usbh_bus *usb) /* ep0_request_buffer allocate virtual address and physical address*/ vaddr = USB_MEM_VIRADDR_ALLOC; + paddr = 0; usb->ep0_request_buffer = (uint8_t *)vaddr; rc = naive_mmap(&vaddr, &paddr, CONFIG_USBHOST_REQUEST_BUFFER_LEN, true); if(rc != 0){ @@ -858,6 +859,7 @@ int usbh_initialize(uint32_t id, struct usbh_bus *usb) return -ENOMEM; } usb->ep0_request_buffer_phy = (uint8_t *)paddr; + USB_LOG_DBG("usbh_initialize ep0_request_buffer=%lx ep0_request_buffer_phy=%08lx\n", usb->ep0_request_buffer, usb->ep0_request_buffer_phy); usb_slist_add_tail(&usb_buses, &(usb->list)); usbh_hub_initialize(usb); diff --git a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/xhci/xhci.c b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/xhci/xhci.c index dec0faded..00116df51 100644 --- a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/xhci/xhci.c +++ b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/xhci/xhci.c @@ -697,6 +697,7 @@ static int xhci_dcbaa_alloc ( struct xhci_host *xhci ) { xhci->dcbaa.context = NULL; dcbaap_addr = USB_MEM_VIRADDR_ALLOC; + dcbaap_phy = 0; xhci->dcbaa_addr = dcbaap_addr; rc = naive_mmap(&dcbaap_addr, &dcbaap_phy, len, true); @@ -708,6 +709,7 @@ static int xhci_dcbaa_alloc ( struct xhci_host *xhci ) { xhci->dcbaa_phy = dcbaap_phy; xhci->dcbaa.context = (void *)xhci->dcbaa_addr; + USB_LOG_DBG("xhci_dcbaa_alloc xhci->dcbaa_addr=%lx xhci->dcbaa_phy=%08lx\n", xhci->dcbaa_addr, xhci->dcbaa_phy); #if 0 if ( ! xhci->dcbaa.context ) { @@ -729,7 +731,7 @@ static int xhci_dcbaa_alloc ( struct xhci_host *xhci ) { USB_LOG_DBG("XHCI %s DCBAA at [%08lx,%08lx)\n", xhci->name, ( xhci->dcbaa.context ), - ( ( xhci->dcbaa.context ) + len ) ); + ( ( (uintptr_t)xhci->dcbaa.context ) + len ) ); return 0; err_writeq: @@ -764,6 +766,7 @@ static int xhci_scratchpad_alloc ( struct xhci_host *xhci ) { /* Allocate buffer to store */ array_len = scratch->count * sizeof ( scratch->array[0] ); vir_addr = USB_MEM_VIRADDR_ALLOC; + phy_addr = 0; scratch->array_addr = (void *)vir_addr; rc = naive_mmap(&vir_addr, &phy_addr, array_len, true); @@ -773,11 +776,11 @@ static int xhci_scratchpad_alloc ( struct xhci_host *xhci ) { rc = -ENOMEM; goto err_alloc; } + USB_LOG_DBG("xhci_scratchpad_alloc vir_addr=%lx phy_addr=%08lx\n", vir_addr, phy_addr); memset(scratch->array_addr, 0, array_len); scratch->array_phy = phy_addr; - /* * Allocate memory for storing all virtual address of physical pages allocated to xHCI as scratchpad buffer. */ @@ -795,6 +798,7 @@ static int xhci_scratchpad_alloc ( struct xhci_host *xhci ) { */ for(i = 0; i < scratch->count; i++){ vir_page_addr = USB_MEM_VIRADDR_ALLOC; + phy_page_addr = 0; scratch->sp_buffers[i] = (void *)vir_page_addr; rc = naive_mmap(&vir_page_addr, &phy_page_addr, xhci->pagesize, true); @@ -805,6 +809,7 @@ static int xhci_scratchpad_alloc ( struct xhci_host *xhci ) { goto err_alloc_array_vir; } scratch->array_addr[i] = phy_page_addr; + USB_LOG_DBG("xhci_scratchpad_alloc i=%d scratch->sp_buffers=%lx scratch->array_addr=%08lx\n", i, scratch->sp_buffers[i], scratch->array_addr[i]); } /* @@ -892,6 +897,7 @@ static int xhci_command_alloc ( struct xhci_host *xhci ) { len = sizeof(*xhci->cmds); cmds_addr = USB_MEM_VIRADDR_ALLOC; + cmds_phy = 0; xhci->cmds_addr = cmds_addr; rc = naive_mmap(&cmds_addr, &cmds_phy, len, true); @@ -901,6 +907,7 @@ static int xhci_command_alloc ( struct xhci_host *xhci ) { rc = -ENOMEM; goto err_ring_alloc; } + USB_LOG_DBG("xhci_command_alloc cmds_addr=%lx cmds_phy=%08lx\n", cmds_addr, cmds_phy); xhci->cmds_phy = cmds_phy; @@ -960,6 +967,7 @@ static int xhci_event_alloc ( struct xhci_host *xhci ) { /* Allocate event ring */ len = sizeof(*xhci->evts); evts_addr = USB_MEM_VIRADDR_ALLOC; + evts_phy = 0; xhci->evts_addr = evts_addr; rc = naive_mmap(&evts_addr, &evts_phy, len, true); @@ -979,6 +987,7 @@ static int xhci_event_alloc ( struct xhci_host *xhci ) { } #endif xhci->evts_phy = evts_phy; + USB_LOG_DBG("xhci_event_alloc xhci->evts_addr=%lx xhci->evts_phy=%08lx\n", xhci->evts_addr, xhci->evts_phy); xhci->evts = (struct xhci_ring *)xhci->evts_addr; memset(xhci->evts, 0U, sizeof(*xhci->evts)); @@ -987,6 +996,7 @@ static int xhci_event_alloc ( struct xhci_host *xhci ) { len = sizeof(*xhci->eseg); eseg_addr = USB_MEM_VIRADDR_ALLOC; + eseg_phy = 0; xhci->eseg_addr = eseg_addr; rc = naive_mmap(&eseg_addr, &eseg_phy, len, true); if(rc != 0){ @@ -1004,6 +1014,7 @@ static int xhci_event_alloc ( struct xhci_host *xhci ) { #endif xhci->eseg_phy = eseg_phy; + USB_LOG_DBG("xhci_event_alloc xhci->eseg_addr=%lx xhci->eseg_phy=%08lx\n", xhci->eseg_addr, xhci->eseg_phy); xhci->eseg = (struct xhci_er_seg *)xhci->eseg_addr; @@ -1824,14 +1835,16 @@ static int xhci_context ( struct xhci_host *xhci, struct xhci_slot *slot, } #endif input_vir = USB_MEM_VIRADDR_ALLOC; + input_phy = 0; input = (void *)input_vir; - memset ( input, 0, len ); rc = naive_mmap(&input_vir, &input_phy, len, true); if(rc != 0){ USB_LOG_ERR("XHCI %s could not allocate xhci context\n", xhci->name ); rc = -ENOMEM; goto err_alloc; } + USB_LOG_DBG("xhci_context input_vir=%lx input_phy=%08lx\n", input_vir, input_phy); + memset ( input, 0, len ); /* Populate input context */ populate ( xhci, slot, ep, input ); @@ -2089,6 +2102,7 @@ int xhci_device_open ( struct xhci_host *xhci, struct xhci_endpoint *ep, int *sl } #endif context_vir = USB_MEM_VIRADDR_ALLOC; + context_phy = 0; slot->context_vir = context_vir; rc = naive_mmap(&context_vir, &context_phy, len, true); if(rc != 0){ @@ -2097,6 +2111,7 @@ int xhci_device_open ( struct xhci_host *xhci, struct xhci_endpoint *ep, int *sl goto err_alloc; } slot->context_phy = context_phy; + USB_LOG_DBG("xhci_device_open slot->context_vir=%lx slot->context_phy=%08lx\n", slot->context_vir, slot->context_phy); slot->context = (struct xhci_slot_context *)slot->context_vir; memset ( slot->context, 0, len );