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 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel