drm/radeon: Report doorbell configuration to amdkfd
[deliverable/linux.git] / drivers / gpu / drm / radeon / radeon_device.c
index ea2676954dde7ce6e157aa1d628782c0906bc7c2..0b41f5eeb1251475d5630b7292f989cc2dd176ac 100644 (file)
@@ -377,6 +377,37 @@ void radeon_doorbell_free(struct radeon_device *rdev, u32 doorbell)
                __clear_bit(doorbell, rdev->doorbell.used);
 }
 
+/**
+ * radeon_doorbell_get_kfd_info - Report doorbell configuration required to
+ *                                setup KFD
+ *
+ * @rdev: radeon_device pointer
+ * @aperture_base: output returning doorbell aperture base physical address
+ * @aperture_size: output returning doorbell aperture size in bytes
+ * @start_offset: output returning # of doorbell bytes reserved for radeon.
+ *
+ * Radeon and the KFD share the doorbell aperture. Radeon sets it up,
+ * takes doorbells required for its own rings and reports the setup to KFD.
+ * Radeon reserved doorbells are at the start of the doorbell aperture.
+ */
+void radeon_doorbell_get_kfd_info(struct radeon_device *rdev,
+                                 phys_addr_t *aperture_base,
+                                 size_t *aperture_size,
+                                 size_t *start_offset)
+{
+       /* The first num_doorbells are used by radeon.
+        * KFD takes whatever's left in the aperture. */
+       if (rdev->doorbell.size > rdev->doorbell.num_doorbells * sizeof(u32)) {
+               *aperture_base = rdev->doorbell.base;
+               *aperture_size = rdev->doorbell.size;
+               *start_offset = rdev->doorbell.num_doorbells * sizeof(u32);
+       } else {
+               *aperture_base = 0;
+               *aperture_size = 0;
+               *start_offset = 0;
+       }
+}
+
 /*
  * radeon_wb_*()
  * Writeback is the the method by which the the GPU updates special pages
This page took 0.027629 seconds and 5 git commands to generate.