Message ID | 1418217227-10956-2-git-send-email-oded.gabbay@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Dec 10, 2014 at 8:13 AM, Oded Gabbay <oded.gabbay@amd.com> wrote: > From: Alexey Skidanov <Alexey.Skidanov@amd.com> > > This patch implements a new interface that was added to the kfd-->kgd interface. > The new interface function retrieves the firmware version that is currently > in use by the MEC engine. The firmware was uploaded to the MEC engine by the > radeon driver. > > Signed-off-by: Alexey Skidanov <Alexey.Skidanov@amd.com> > Reviewed-by: Oded Gabbay <oded.gabbay@amd.com> > --- > drivers/gpu/drm/radeon/radeon_kfd.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/drivers/gpu/drm/radeon/radeon_kfd.c b/drivers/gpu/drm/radeon/radeon_kfd.c > index 065d020..223c831 100644 > --- a/drivers/gpu/drm/radeon/radeon_kfd.c > +++ b/drivers/gpu/drm/radeon/radeon_kfd.c > @@ -28,6 +28,8 @@ > #include "cikd.h" > #include "cik_reg.h" > #include "radeon_kfd.h" > +#include "radeon_ucode.h" > +#include <linux/firmware.h> > > #define CIK_PIPE_PER_MEC (4) > > @@ -49,6 +51,7 @@ static uint64_t get_vmem_size(struct kgd_dev *kgd); > static uint64_t get_gpu_clock_counter(struct kgd_dev *kgd); > > static uint32_t get_max_engine_clock_in_mhz(struct kgd_dev *kgd); > +static uint16_t get_fw_version(struct kgd_dev *kgd); > > /* > * Register access functions > @@ -91,6 +94,7 @@ static const struct kfd2kgd_calls kfd2kgd = { > .hqd_load = kgd_hqd_load, > .hqd_is_occupies = kgd_hqd_is_occupies, > .hqd_destroy = kgd_hqd_destroy, > + .get_fw_version = get_fw_version > }; > > static const struct kgd2kfd_calls *kgd2kfd; > @@ -561,3 +565,22 @@ static int kgd_hqd_destroy(struct kgd_dev *kgd, uint32_t reset_type, > release_queue(kgd); > return 0; > } > + > +static uint16_t get_fw_version(struct kgd_dev *kgd) I think it would be better to call the is get_mec_fw_version or add an engine and/or instance parameter if it need to query other engines (e.g., MEC2 or GFX). > +{ > + struct radeon_device *rdev; > + const struct gfx_firmware_header_v1_0 *hdr; > + > + BUG_ON(kgd == NULL); > + > + rdev = (struct radeon_device *) kgd; > + > + BUG_ON(rdev->mec_fw == NULL); > + > + hdr = (const struct gfx_firmware_header_v1_0 *)rdev->mec_fw->data; > + Do you care about the fw version of MEC2? Alex
On 12/10/2014 11:57 PM, Alex Deucher wrote: > On Wed, Dec 10, 2014 at 8:13 AM, Oded Gabbay <oded.gabbay@amd.com> wrote: >> From: Alexey Skidanov <Alexey.Skidanov@amd.com> >> >> This patch implements a new interface that was added to the kfd-->kgd interface. >> The new interface function retrieves the firmware version that is currently >> in use by the MEC engine. The firmware was uploaded to the MEC engine by the >> radeon driver. >> >> Signed-off-by: Alexey Skidanov <Alexey.Skidanov@amd.com> >> Reviewed-by: Oded Gabbay <oded.gabbay@amd.com> >> --- >> drivers/gpu/drm/radeon/radeon_kfd.c | 23 +++++++++++++++++++++++ >> 1 file changed, 23 insertions(+) >> >> diff --git a/drivers/gpu/drm/radeon/radeon_kfd.c b/drivers/gpu/drm/radeon/radeon_kfd.c >> index 065d020..223c831 100644 >> --- a/drivers/gpu/drm/radeon/radeon_kfd.c >> +++ b/drivers/gpu/drm/radeon/radeon_kfd.c >> @@ -28,6 +28,8 @@ >> #include "cikd.h" >> #include "cik_reg.h" >> #include "radeon_kfd.h" >> +#include "radeon_ucode.h" >> +#include <linux/firmware.h> >> >> #define CIK_PIPE_PER_MEC (4) >> >> @@ -49,6 +51,7 @@ static uint64_t get_vmem_size(struct kgd_dev *kgd); >> static uint64_t get_gpu_clock_counter(struct kgd_dev *kgd); >> >> static uint32_t get_max_engine_clock_in_mhz(struct kgd_dev *kgd); >> +static uint16_t get_fw_version(struct kgd_dev *kgd); >> >> /* >> * Register access functions >> @@ -91,6 +94,7 @@ static const struct kfd2kgd_calls kfd2kgd = { >> .hqd_load = kgd_hqd_load, >> .hqd_is_occupies = kgd_hqd_is_occupies, >> .hqd_destroy = kgd_hqd_destroy, >> + .get_fw_version = get_fw_version >> }; >> >> static const struct kgd2kfd_calls *kgd2kfd; >> @@ -561,3 +565,22 @@ static int kgd_hqd_destroy(struct kgd_dev *kgd, uint32_t reset_type, >> release_queue(kgd); >> return 0; >> } >> + >> +static uint16_t get_fw_version(struct kgd_dev *kgd) > > I think it would be better to call the is get_mec_fw_version or add an > engine and/or instance parameter if it need to query other engines > (e.g., MEC2 or GFX). > Right, I will add the engine parameter. >> +{ >> + struct radeon_device *rdev; >> + const struct gfx_firmware_header_v1_0 *hdr; >> + >> + BUG_ON(kgd == NULL); >> + >> + rdev = (struct radeon_device *) kgd; >> + >> + BUG_ON(rdev->mec_fw == NULL); >> + >> + hdr = (const struct gfx_firmware_header_v1_0 *)rdev->mec_fw->data; >> + > > Do you care about the fw version of MEC2? Not currently, as MEC1 & MEC2 have the same fw version, although we load different fw files to them. Oded > > Alex >
diff --git a/drivers/gpu/drm/radeon/radeon_kfd.c b/drivers/gpu/drm/radeon/radeon_kfd.c index 065d020..223c831 100644 --- a/drivers/gpu/drm/radeon/radeon_kfd.c +++ b/drivers/gpu/drm/radeon/radeon_kfd.c @@ -28,6 +28,8 @@ #include "cikd.h" #include "cik_reg.h" #include "radeon_kfd.h" +#include "radeon_ucode.h" +#include <linux/firmware.h> #define CIK_PIPE_PER_MEC (4) @@ -49,6 +51,7 @@ static uint64_t get_vmem_size(struct kgd_dev *kgd); static uint64_t get_gpu_clock_counter(struct kgd_dev *kgd); static uint32_t get_max_engine_clock_in_mhz(struct kgd_dev *kgd); +static uint16_t get_fw_version(struct kgd_dev *kgd); /* * Register access functions @@ -91,6 +94,7 @@ static const struct kfd2kgd_calls kfd2kgd = { .hqd_load = kgd_hqd_load, .hqd_is_occupies = kgd_hqd_is_occupies, .hqd_destroy = kgd_hqd_destroy, + .get_fw_version = get_fw_version }; static const struct kgd2kfd_calls *kgd2kfd; @@ -561,3 +565,22 @@ static int kgd_hqd_destroy(struct kgd_dev *kgd, uint32_t reset_type, release_queue(kgd); return 0; } + +static uint16_t get_fw_version(struct kgd_dev *kgd) +{ + struct radeon_device *rdev; + const struct gfx_firmware_header_v1_0 *hdr; + + BUG_ON(kgd == NULL); + + rdev = (struct radeon_device *) kgd; + + BUG_ON(rdev->mec_fw == NULL); + + hdr = (const struct gfx_firmware_header_v1_0 *)rdev->mec_fw->data; + + BUG_ON(hdr == NULL); + + /* Only 12 bit in use*/ + return hdr->header.ucode_version; +}