Hi,
Please add these 4 patches to cboot and see if it can resolve this issue.
Patch1
diff --git a/drivers/usbh/xhci.c b/drivers/usbh/xhci.c
index aa0547a..40a1aee 100644
--- a/drivers/usbh/xhci.c
+++ b/drivers/usbh/xhci.c
@@ -1774,7 +1774,6 @@
}
trb->data_buffer_lo = U64_TO_U32_LO(dma);
trb->data_buffer_hi = U64_TO_U32_HI(dma);
- dma += transfer_size;
trb->trb_tfr_len = transfer_size;
trb->td_size = (total_packets - ((size + transfer_size) / ctx->curr_dev_priv->enum_dev.ep[dir].packet_size));
if (count != (need_trbs - 1)) {
Patch2
diff --git a/lib/gpt/tegrabl_gpt.c b/lib/gpt/tegrabl_gpt.c
index a3b3deb..203aeea 100644
--- a/lib/gpt/tegrabl_gpt.c
+++ b/lib/gpt/tegrabl_gpt.c
@@ -118,12 +118,7 @@
pr_trace("GPT read: for device %08x\n", dev->device_id);
size = sizeof(struct tegrabl_gpt_entry) * TEGRABL_GPT_MAX_PARTITION_ENTRIES;
-
-#if defined(CONFIG_OS_IS_L4T)
- size += (5 * TEGRABL_BLOCKDEV_BLOCK_SIZE(dev));
-#else
size += TEGRABL_BLOCKDEV_BLOCK_SIZE(dev);
-#endif
if ((*buf) == NULL) {
buffer = (uint8_t *)tegrabl_alloc_align(TEGRABL_HEAP_DMA, 4096, size);
Patch3
diff --git a/lib/gpt/tegrabl_gpt.c b/lib/gpt/tegrabl_gpt.c
index 8aab6cb..a3b3deb 100644
--- a/lib/gpt/tegrabl_gpt.c
+++ b/lib/gpt/tegrabl_gpt.c
@@ -120,7 +120,7 @@
size = sizeof(struct tegrabl_gpt_entry) * TEGRABL_GPT_MAX_PARTITION_ENTRIES;
#if defined(CONFIG_OS_IS_L4T)
- size += (6 * TEGRABL_BLOCKDEV_BLOCK_SIZE(dev));
+ size += (5 * TEGRABL_BLOCKDEV_BLOCK_SIZE(dev));
#else
size += TEGRABL_BLOCKDEV_BLOCK_SIZE(dev);
#endif
Patch4
diff --git a/drivers/usbh/xhci.c b/drivers/usbh/xhci.c
index 0613876..aa0547a 100644
--- a/drivers/usbh/xhci.c
+++ b/drivers/usbh/xhci.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2020, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
*
* NVIDIA CORPORATION and its licensors retain all intellectual property
* and proprietary rights in and to this software, related documentation
@@ -548,7 +548,7 @@
xusbh_xhci_writel(DB(0), 0);
pr_debug("Ding Dong! @%08x 0x%x\n", DB(0), xusbh_xhci_readl(DB(0)));
- err = xusbh_wait_irq(ctx, 100);
+ err = xusbh_wait_irq(ctx, 300);
set_enq_ptr(&ctx->cmd_ring);
return err;
}
@@ -730,7 +730,7 @@
xusbh_xhci_writel(DB(ctx->slot_id), DB_VALUE(ep_index, 0));
pr_debug("Ding Dong!!! Ring EP%d doorbell (%x)\n", ep_index, xusbh_xhci_readl(DB(ctx->slot_id)));
- err = xusbh_wait_irq(ctx, 1000);
+ err = xusbh_wait_irq(ctx, 3000);
return err;
}
@@ -924,7 +924,7 @@
xusbh_xhci_writel(DB(0), 0);
pr_debug("Ding Dong! @%08x 0x%x\n", DB(0), xusbh_xhci_readl(DB(0)));
- err = xusbh_wait_irq(ctx, 100);
+ err = xusbh_wait_irq(ctx, 300);
/*
xhci_print_slot_ctx(ctx, 0);
xhci_print_ep_ctx(ctx, 0, 3, 0);
@@ -990,7 +990,7 @@
xusbh_xhci_writel(DB(0), 0);
pr_debug("Ding Dong! @%08x 0x%x\n", DB(0), xusbh_xhci_readl(DB(0)));
- err = xusbh_wait_irq(ctx, 100);
+ err = xusbh_wait_irq(ctx, 300);
tegrabl_dma_unmap_buffer(TEGRABL_MODULE_XUSB_HOST, 0, (void *)ctx->curr_dev_priv->dev_context, sizeof(struct EP) * 10,
TEGRABL_DMA_FROM_DEVICE);
/*