diff mbox

[2/3] drm/radeon: Add implementation of get_fw_version

Message ID 1418217227-10956-2-git-send-email-oded.gabbay@amd.com (mailing list archive)
State New, archived
Headers show

Commit Message

Oded Gabbay Dec. 10, 2014, 1:13 p.m. UTC
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(+)

Comments

Alex Deucher Dec. 10, 2014, 9:57 p.m. UTC | #1
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
Oded Gabbay Dec. 14, 2014, 10:24 a.m. UTC | #2
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 mbox

Patch

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;
+}