File micro6-kernel.patch of Package nvidia-open-driver-G06-signed-sidecar

Index: nvidia-oot/drivers/misc/nvscic2c-pcie/pci-client.c
===================================================================
--- nvidia-oot/drivers/misc/nvscic2c-pcie/pci-client.c.orig
+++ nvidia-oot/drivers/misc/nvscic2c-pcie/pci-client.c
@@ -246,7 +246,11 @@ allocate_edma_rx_desc_iova(struct pci_cl
 		goto err;
 	}
 	prot = (IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE);
+#if 1
+	ret = iommu_map(ctx->domain, ctx->edma_ch_desc_iova, phys_addr, EDMA_CH_DESC_SZ, prot, GFP_KERNEL);
+#else
 	ret = iommu_map(ctx->domain, ctx->edma_ch_desc_iova, phys_addr, EDMA_CH_DESC_SZ, prot);
+#endif
 	if (ret) {
 		pr_err("pci client failed to map iova to 60K physical backing\n");
 		goto err;
@@ -408,7 +412,11 @@ pci_client_map_addr(void *pci_client_h,
 	if (WARN_ON(!ctx || !to_iova || !paddr || !size))
 		return -EINVAL;
 
+#if 1
+	return iommu_map(ctx->domain, to_iova, paddr, size, prot, GFP_KERNEL);
+#else
 	return iommu_map(ctx->domain, to_iova, paddr, size, prot);
+#endif
 }
 
 size_t
Index: nvidia-oot/drivers/misc/nvscic2c-pcie/epf/module.c
===================================================================
--- nvidia-oot/drivers/misc/nvscic2c-pcie/epf/module.c.orig
+++ nvidia-oot/drivers/misc/nvscic2c-pcie/epf/module.c
@@ -169,16 +169,6 @@ allocate_outbound_area(struct pci_epf *e
 	return ret;
 }
 
-static void
-clear_inbound_translation(struct pci_epf *epf)
-{
-	struct pci_epf_bar *epf_bar = &epf->bar[BAR_0];
-
-	pci_epc_clear_bar(epf->epc, epf->func_no, PCIE_VFNO, epf_bar);
-
-	/* no api to clear epf header.*/
-}
-
 static int
 set_inbound_translation(struct pci_epf *epf)
 {
@@ -482,42 +472,6 @@ deinit_work(struct work_struct *work)
 	atomic_set(&drv_ctx->epf_ctx->epf_initialized, 0);
 }
 
-/*
- * Graceful shutdown: PCIe subsystem calls struct pci_epc_event_ops.core_deinit
- * when @DRV_MODE_EPC .remove() or .shutdown() handlers are completed/exited.
- * Abnormal shutdown (when PCIe RP SoC - gets halted, or it's kernel oops):
- * PCIe subsystem also struct pci_epc_event_ops.core_deinit but
- * @DRV_MODE_EPC would have already gone then by the time
- * struct pci_epc_event_ops.core_deinit is called.
- */
-static int
-nvscic2c_pcie_epf_core_deinit(struct pci_epf *epf)
-{
-	struct driver_ctx_t *drv_ctx = NULL;
-
-	drv_ctx = epf_get_drvdata(epf);
-	if (!drv_ctx)
-		return -EINVAL;
-
-	if (atomic_read(&drv_ctx->epf_ctx->core_initialized)) {
-		/*
-		 * in case of PCIe RP SoC abnormal shutdown, comm-channel
-		 * shutdown message from @DRV_MODE_EPC won't come and
-		 * therefore scheduling the deinit work here is required
-		 * If its already scheduled, it won't be scheduled again.
-		 * Wait for deinit work to complete in either case.
-		 */
-		schedule_work(&drv_ctx->epf_ctx->deinitialization_work);
-		flush_work(&drv_ctx->epf_ctx->deinitialization_work);
-
-		clear_inbound_translation(epf);
-		atomic_set(&drv_ctx->epf_ctx->core_initialized, 0);
-	}
-	wake_up_interruptible_all(&drv_ctx->epf_ctx->core_initialized_waitq);
-
-	return 0;
-}
-
 /* Handle link message from @DRV_MODE_EPC. */
 static void
 link_msg_cb(void *data, void *ctx)
@@ -729,7 +683,6 @@ get_driverdata(const struct pci_epf_devi
 
 static const struct pci_epc_event_ops nvscic2c_event_ops = {
 	.core_init = nvscic2c_pcie_epf_core_init,
-	.core_deinit = nvscic2c_pcie_epf_core_deinit,
 };
 
 static int
Index: nvidia-oot/drivers/pci/endpoint/functions/pci-epf-dma-test.c
===================================================================
--- nvidia-oot/drivers/pci/endpoint/functions/pci-epf-dma-test.c.orig
+++ nvidia-oot/drivers/pci/endpoint/functions/pci-epf-dma-test.c
@@ -164,22 +164,6 @@ static int pcie_dma_epf_core_init(struct
 	return 0;
 }
 
-static int pcie_dma_epf_core_deinit(struct pci_epf *epf)
-{
-	struct pcie_epf_dma *epfnv = epf_get_drvdata(epf);
-	void *cookie = epfnv->edma.cookie;
-	struct pcie_epf_bar0 *epf_bar0 = (struct pcie_epf_bar0 *) epfnv->bar0_virt;
-	struct pci_epc *epc = epf->epc;
-	struct pci_epf_bar *epf_bar = &epf->bar[BAR_0];
-
-	epfnv->edma.cookie = NULL;
-	epf_bar0->rp_phy_addr = 0;
-	tegra_pcie_edma_deinit(cookie);
-	lpci_epc_clear_bar(epc, epf->func_no, epf_bar);
-
-	return 0;
-}
-
 static void pcie_dma_epf_unbind(struct pci_epf *epf)
 {
 	struct pcie_epf_dma *epfnv = epf_get_drvdata(epf);
@@ -263,7 +247,6 @@ static const struct pci_epf_device_id pc
 
 static const struct pci_epc_event_ops pci_epf_dma_test_event_ops = {
 	.core_init = pcie_dma_epf_core_init,
-	.core_deinit = pcie_dma_epf_core_deinit,
 };
 
 #if defined(NV_PCI_EPF_DRIVER_STRUCT_PROBE_HAS_ID_ARG) /* Linux 6.4 */
Index: nvidia-oot/drivers/pci/endpoint/functions/pci-epf-tegra-vnet.c
===================================================================
--- nvidia-oot/drivers/pci/endpoint/functions/pci-epf-tegra-vnet.c.orig
+++ nvidia-oot/drivers/pci/endpoint/functions/pci-epf-tegra-vnet.c
@@ -1237,7 +1237,7 @@ static int tvnet_ep_pci_epf_setup_irqsp(
 	syncpt_addr = nvhost_interrupt_syncpt_get_syncpt_addr(ctrl_irqsp->is);
 #endif
 	ret = iommu_map(domain, amap->iova, syncpt_addr, PAGE_SIZE,
-			IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE);
+			IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE, GFP_KERNEL);
 	if (ret < 0) {
 		dev_err(fdev, "%s: iommu_map of ctrlsp mem failed: %d\n",
 			__func__, ret);
@@ -1256,7 +1256,7 @@ static int tvnet_ep_pci_epf_setup_irqsp(
 	syncpt_addr = nvhost_interrupt_syncpt_get_syncpt_addr(data_irqsp->is);
 #endif
 	ret = iommu_map(domain, amap->iova + PAGE_SIZE, syncpt_addr, PAGE_SIZE,
-			IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE);
+			IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE, GFP_KERNEL);
 	if (ret < 0) {
 		dev_err(fdev, "%s: iommu_map of datasp mem failed: %d\n",
 			__func__, ret);
@@ -1323,7 +1323,7 @@ static int tvnet_ep_alloc_single_page_ba
 	}
 
 	ret = iommu_map(domain, amap->iova, page_to_phys(amap->page), PAGE_SIZE,
-			IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE);
+			IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE, GFP_KERNEL);
 	if (ret < 0) {
 		dev_err(tvnet->fdev, "%s: type: %d iommu_map(RAM) failed: %d\n",
 			__func__, type, ret);
@@ -1404,7 +1404,7 @@ static int tvnet_ep_alloc_multi_page_bar
 	}
 
 	ret = iommu_map(domain, amap->iova, page_to_phys(amap->page),
-			amap->size, IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE);
+			amap->size, IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE, GFP_KERNEL);
 	if (ret < 0) {
 		dev_err(tvnet->fdev, "%s: iommu_map(RAM) failed: %d\n",
 			__func__, ret);
@@ -1585,25 +1585,8 @@ static void tvnet_ep_pci_epf_linkup(stru
 #endif
 
 #if (LINUX_VERSION_CODE > KERNEL_VERSION(5, 14, 0))
-static int tvnet_ep_pci_epf_core_deinit(struct pci_epf *epf)
-{
-	struct pci_epf_bar *epf_bar = &epf->bar[BAR_0];
-	struct pci_epf_tvnet *tvnet = epf_get_drvdata(epf);
-	if (!tvnet)
-		return -EINVAL;
-
-	if (atomic_read(&tvnet->core_initialized)) {
-		lpci_epc_clear_bar(epf->epc, epf->func_no, epf_bar);
-		/* no api to clear epf header.*/
-		atomic_set(&tvnet->core_initialized, 0);
-	}
-
-	return 0;
-}
-
 static const struct pci_epc_event_ops tvnet_event_ops = {
 	.core_init = tvnet_ep_pci_epf_core_init,
-	.core_deinit = tvnet_ep_pci_epf_core_deinit,
 	.link_up = tvnet_ep_pci_epf_linkup,
 };
 
openSUSE Build Service is sponsored by