Re: [PATCH v4 03/23] drm/radeon: Report doorbell configuration to amdkfd

From: Alex Deucher
Date: Tue Oct 14 2014 - 12:52:31 EST


On Wed, Sep 24, 2014 at 4:45 PM, Oded Gabbay <oded.gabbay@xxxxxxx> wrote:
> radeon and amdkfd share the doorbell aperture.
> radeon sets it up, takes the doorbells required for its own rings
> and reports the setup to amdkfd.
> radeon reserved doorbells are at the start of the doorbell aperture.
>
> Signed-off-by: Oded Gabbay <oded.gabbay@xxxxxxx>

Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx>

> ---
> drivers/gpu/drm/radeon/radeon.h | 4 ++++
> drivers/gpu/drm/radeon/radeon_device.c | 31 +++++++++++++++++++++++++++++++
> 2 files changed, 35 insertions(+)
>
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index bb75e57..67d249a 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -697,6 +697,10 @@ struct radeon_doorbell {
>
> int radeon_doorbell_get(struct radeon_device *rdev, u32 *page);
> void radeon_doorbell_free(struct radeon_device *rdev, u32 doorbell);
> +void radeon_doorbell_get_kfd_info(struct radeon_device *rdev,
> + phys_addr_t *aperture_base,
> + size_t *aperture_size,
> + size_t *start_offset);
>
> /*
> * IRQS.
> diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
> index e84a76e..da3035f 100644
> --- a/drivers/gpu/drm/radeon/radeon_device.c
> +++ b/drivers/gpu/drm/radeon/radeon_device.c
> @@ -373,6 +373,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
> --
> 1.9.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@xxxxxxxxxxxxxxxxxxxxx
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/