All of lore.kernel.org
 help / color / mirror / Atom feed
* release exclusive mode after hw init if no kfd
@ 2017-11-01  5:53 Pixel Ding
       [not found] ` <1509515636-13709-1-git-send-email-Pixel.Ding-5C7GfCeVMHo@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Pixel Ding @ 2017-11-01  5:53 UTC (permalink / raw)
  To: oded.gabbay-Re5JQEeQqe8AvxtiuMwx3w
  Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Hi Oded,

Please review.

[PATCH 1/2] drm/amdkfd: initialise kgd field inside kfd device_init
As you suggested, move kgd assignment to device_init

[PATCH 2/2] drm/amdgpu: release exclusive mode after hw_init if no
We still need this change because pdev is passed in.
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] drm/amdkfd: initialise kgd field inside kfd device_init
       [not found] ` <1509515636-13709-1-git-send-email-Pixel.Ding-5C7GfCeVMHo@public.gmane.org>
@ 2017-11-01  5:53   ` Pixel Ding
  2017-11-01  5:53   ` [PATCH 2/2] drm/amdgpu: release exclusive mode after hw_init if no kfd (v2) Pixel Ding
  2017-11-01  7:54   ` release exclusive mode after hw init if no kfd Ding, Pixel
  2 siblings, 0 replies; 4+ messages in thread
From: Pixel Ding @ 2017-11-01  5:53 UTC (permalink / raw)
  To: oded.gabbay-Re5JQEeQqe8AvxtiuMwx3w
  Cc: pding, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

From: pding <Pixel.Ding@amd.com>

kgd field is dependent on kgd device_init. Move the assignment
to kfd device_init.

Signed-off-by: pding <Pixel.Ding@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c      | 6 +++---
 drivers/gpu/drm/amd/amdkfd/kfd_device.c         | 8 ++++----
 drivers/gpu/drm/amd/amdkfd/kfd_priv.h           | 6 +++---
 drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 4 ++--
 drivers/gpu/drm/radeon/radeon_kfd.c             | 6 +++---
 5 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index c70cda0..5b10ce9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -89,8 +89,7 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
 		return;
 	}
 
-	adev->kfd = kgd2kfd->probe((struct kgd_dev *)adev,
-				   adev->pdev, kfd2kgd);
+	adev->kfd = kgd2kfd->probe(adev->pdev, kfd2kgd);
 }
 
 void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
@@ -131,7 +130,8 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
 				&gpu_resources.doorbell_aperture_size,
 				&gpu_resources.doorbell_start_offset);
 
-		kgd2kfd->device_init(adev->kfd, &gpu_resources);
+		kgd2kfd->device_init(adev->kfd, (struct kgd_dev *)adev,
+				     &gpu_resources);
 	}
 }
 
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
index 5df12b2..b95fc61 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
@@ -109,8 +109,8 @@ static const struct kfd_device_info *lookup_device_info(unsigned short did)
 	return NULL;
 }
 
-struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd,
-	struct pci_dev *pdev, const struct kfd2kgd_calls *f2g)
+struct kfd_dev *kgd2kfd_probe(struct pci_dev *pdev,
+			      const struct kfd2kgd_calls *f2g)
 {
 	struct kfd_dev *kfd;
 
@@ -126,7 +126,6 @@ struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd,
 	if (!kfd)
 		return NULL;
 
-	kfd->kgd = kgd;
 	kfd->device_info = device_info;
 	kfd->pdev = pdev;
 	kfd->init_complete = false;
@@ -217,11 +216,12 @@ static int iommu_invalid_ppr_cb(struct pci_dev *pdev, int pasid,
 	return AMD_IOMMU_INV_PRI_RSP_INVALID;
 }
 
-bool kgd2kfd_device_init(struct kfd_dev *kfd,
+bool kgd2kfd_device_init(struct kfd_dev *kfd, struct kgd_dev *kgd,
 			 const struct kgd2kfd_shared_resources *gpu_resources)
 {
 	unsigned int size;
 
+	kfd->kgd = kgd;
 	kfd->shared_resources = *gpu_resources;
 
 	/* calculate max size of mqds needed for queues */
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
index 4cb90f5..cf97e7f 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
@@ -200,9 +200,9 @@ struct kfd_dev {
 
 /* KGD2KFD callbacks */
 void kgd2kfd_exit(void);
-struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd,
-			struct pci_dev *pdev, const struct kfd2kgd_calls *f2g);
-bool kgd2kfd_device_init(struct kfd_dev *kfd,
+struct kfd_dev *kgd2kfd_probe(struct pci_dev *pdev,
+			      const struct kfd2kgd_calls *f2g);
+bool kgd2kfd_device_init(struct kfd_dev *kfd, struct kgd_dev *kgd,
 			const struct kgd2kfd_shared_resources *gpu_resources);
 void kgd2kfd_device_exit(struct kfd_dev *kfd);
 
diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
index f516fd1..f9ca238 100644
--- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
@@ -248,9 +248,9 @@ struct kfd2kgd_calls {
  */
 struct kgd2kfd_calls {
 	void (*exit)(void);
-	struct kfd_dev* (*probe)(struct kgd_dev *kgd, struct pci_dev *pdev,
+	struct kfd_dev* (*probe)(struct pci_dev *pdev,
 		const struct kfd2kgd_calls *f2g);
-	bool (*device_init)(struct kfd_dev *kfd,
+	bool (*device_init)(struct kfd_dev *kfd, struct kgd_dev *kgd,
 			const struct kgd2kfd_shared_resources *gpu_resources);
 	void (*device_exit)(struct kfd_dev *kfd);
 	void (*interrupt)(struct kfd_dev *kfd, const void *ih_ring_entry);
diff --git a/drivers/gpu/drm/radeon/radeon_kfd.c b/drivers/gpu/drm/radeon/radeon_kfd.c
index 385b4d7..083deb1 100644
--- a/drivers/gpu/drm/radeon/radeon_kfd.c
+++ b/drivers/gpu/drm/radeon/radeon_kfd.c
@@ -181,8 +181,7 @@ void radeon_kfd_fini(void)
 void radeon_kfd_device_probe(struct radeon_device *rdev)
 {
 	if (kgd2kfd)
-		rdev->kfd = kgd2kfd->probe((struct kgd_dev *)rdev,
-			rdev->pdev, &kfd2kgd);
+		rdev->kfd = kgd2kfd->probe(rdev->pdev, &kfd2kgd);
 }
 
 void radeon_kfd_device_init(struct radeon_device *rdev)
@@ -214,7 +213,8 @@ void radeon_kfd_device_init(struct radeon_device *rdev)
 				&gpu_resources.doorbell_aperture_size,
 				&gpu_resources.doorbell_start_offset);
 
-		kgd2kfd->device_init(rdev->kfd, &gpu_resources);
+		kgd2kfd->device_init(rdev->kfd, (struct kgd_dev *)rdev,
+				     &gpu_resources);
 	}
 }
 
-- 
2.9.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] drm/amdgpu: release exclusive mode after hw_init if no kfd (v2)
       [not found] ` <1509515636-13709-1-git-send-email-Pixel.Ding-5C7GfCeVMHo@public.gmane.org>
  2017-11-01  5:53   ` [PATCH 1/2] drm/amdkfd: initialise kgd field inside kfd device_init Pixel Ding
@ 2017-11-01  5:53   ` Pixel Ding
  2017-11-01  7:54   ` release exclusive mode after hw init if no kfd Ding, Pixel
  2 siblings, 0 replies; 4+ messages in thread
From: Pixel Ding @ 2017-11-01  5:53 UTC (permalink / raw)
  To: oded.gabbay-Re5JQEeQqe8AvxtiuMwx3w
  Cc: pding, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

From: pding <Pixel.Ding@amd.com>

Move kfd probe prior to device init. Release exclusive mode
after hw_init if kfd is not enabled.

v2:
 - pass pdev param

Signed-off-by: pding <Pixel.Ding@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 5 +++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 3 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 +++
 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c    | 5 +++--
 4 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index 5b10ce9..83d18c8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -68,7 +68,8 @@ void amdgpu_amdkfd_fini(void)
 	}
 }
 
-void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
+void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev,
+				struct pci_dev *pdev)
 {
 	const struct kfd2kgd_calls *kfd2kgd;
 
@@ -89,7 +90,7 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
 		return;
 	}
 
-	adev->kfd = kgd2kfd->probe(adev->pdev, kfd2kgd);
+	adev->kfd = kgd2kfd->probe(pdev, kfd2kgd);
 }
 
 void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
index 8d689ab..707c892 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
@@ -44,7 +44,8 @@ void amdgpu_amdkfd_suspend(struct amdgpu_device *adev);
 int amdgpu_amdkfd_resume(struct amdgpu_device *adev);
 void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev,
 			const void *ih_ring_entry);
-void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev);
+void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev,
+				struct pci_dev *pdev);
 void amdgpu_amdkfd_device_init(struct amdgpu_device *adev);
 void amdgpu_amdkfd_device_fini(struct amdgpu_device *adev);
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 068b56a..ef01aa3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1716,6 +1716,9 @@ static int amdgpu_init(struct amdgpu_device *adev)
 		adev->ip_blocks[i].status.hw = true;
 	}
 
+	if (amdgpu_sriov_vf(adev) && !adev->kfd)
+		amdgpu_virt_release_full_gpu(adev, true);
+
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index 3e9760d..f872052 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -138,6 +138,8 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
 	    !pci_is_thunderbolt_attached(dev->pdev))
 		flags |= AMD_IS_PX;
 
+	amdgpu_amdkfd_device_probe(adev, dev->pdev);
+
 	/* amdgpu_device_init should report only fatal error
 	 * like memory allocation failure or iomapping failure,
 	 * or memory manager initialization failure, it must
@@ -170,7 +172,6 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
 				"Error during ACPI methods call\n");
 	}
 
-	amdgpu_amdkfd_device_probe(adev);
 	amdgpu_amdkfd_device_init(adev);
 
 	if (amdgpu_device_is_px(dev)) {
@@ -182,7 +183,7 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
 		pm_runtime_put_autosuspend(dev->dev);
 	}
 
-	if (amdgpu_sriov_vf(adev))
+	if (amdgpu_sriov_vf(adev) && adev->kfd)
 		amdgpu_virt_release_full_gpu(adev, true);
 
 out:
-- 
2.9.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: release exclusive mode after hw init if no kfd
       [not found] ` <1509515636-13709-1-git-send-email-Pixel.Ding-5C7GfCeVMHo@public.gmane.org>
  2017-11-01  5:53   ` [PATCH 1/2] drm/amdkfd: initialise kgd field inside kfd device_init Pixel Ding
  2017-11-01  5:53   ` [PATCH 2/2] drm/amdgpu: release exclusive mode after hw_init if no kfd (v2) Pixel Ding
@ 2017-11-01  7:54   ` Ding, Pixel
  2 siblings, 0 replies; 4+ messages in thread
From: Ding, Pixel @ 2017-11-01  7:54 UTC (permalink / raw)
  To: oded.gabbay-Re5JQEeQqe8AvxtiuMwx3w
  Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Hi Oded,

Please ignore them so far. I need to consider more like that the probe is included in retry init logics.
— 
Sincerely Yours,
Pixel








On 01/11/2017, 1:53 PM, "amd-gfx on behalf of Pixel Ding" <amd-gfx-bounces@lists.freedesktop.org on behalf of Pixel.Ding@amd.com> wrote:

>Hi Oded,
>
>Please review.
>
>[PATCH 1/2] drm/amdkfd: initialise kgd field inside kfd device_init
>As you suggested, move kgd assignment to device_init
>
>[PATCH 2/2] drm/amdgpu: release exclusive mode after hw_init if no
>We still need this change because pdev is passed in.
>_______________________________________________
>amd-gfx mailing list
>amd-gfx@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-11-01  7:54 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-01  5:53 release exclusive mode after hw init if no kfd Pixel Ding
     [not found] ` <1509515636-13709-1-git-send-email-Pixel.Ding-5C7GfCeVMHo@public.gmane.org>
2017-11-01  5:53   ` [PATCH 1/2] drm/amdkfd: initialise kgd field inside kfd device_init Pixel Ding
2017-11-01  5:53   ` [PATCH 2/2] drm/amdgpu: release exclusive mode after hw_init if no kfd (v2) Pixel Ding
2017-11-01  7:54   ` release exclusive mode after hw init if no kfd Ding, Pixel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.