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

2014-12-15 Thread Alex Deucher
On Sun, Dec 14, 2014 at 7:29 AM, Oded Gabbay  wrote:
> 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 a specific engine. The firmware was uploaded to the engine by the
> radeon driver.
>
> v2: Returns the fw version of the specific engine, as passed into the function
> by a new parameter
>
> Signed-off-by: Oded Gabbay 

Reviewed-by: Alex Deucher 

> ---
>  drivers/gpu/drm/radeon/radeon_kfd.c | 53 
> +
>  1 file changed, 53 insertions(+)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_kfd.c 
> b/drivers/gpu/drm/radeon/radeon_kfd.c
> index 065d020..242fd8b 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 
>
>  #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, enum kgd_engine_type 
> type);
>
>  /*
>   * 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,52 @@ 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, enum kgd_engine_type 
> type)
> +{
> +   struct radeon_device *rdev = (struct radeon_device *) kgd;
> +   const union radeon_firmware_header *hdr;
> +
> +   BUG_ON(kgd == NULL || rdev->mec_fw == NULL);
> +
> +   switch (type) {
> +   case KGD_ENGINE_PFP:
> +   hdr = (const union radeon_firmware_header *) 
> rdev->pfp_fw->data;
> +   break;
> +
> +   case KGD_ENGINE_ME:
> +   hdr = (const union radeon_firmware_header *) 
> rdev->me_fw->data;
> +   break;
> +
> +   case KGD_ENGINE_CE:
> +   hdr = (const union radeon_firmware_header *) 
> rdev->ce_fw->data;
> +   break;
> +
> +   case KGD_ENGINE_MEC1:
> +   hdr = (const union radeon_firmware_header *) 
> rdev->mec_fw->data;
> +   break;
> +
> +   case KGD_ENGINE_MEC2:
> +   hdr = (const union radeon_firmware_header *)
> +   rdev->mec2_fw->data;
> +   break;
> +
> +   case KGD_ENGINE_RLC:
> +   hdr = (const union radeon_firmware_header *) 
> rdev->rlc_fw->data;
> +   break;
> +
> +   case KGD_ENGINE_SDMA:
> +   hdr = (const union radeon_firmware_header *)
> +   rdev->sdma_fw->data;
> +   break;
> +
> +   default:
> +   return 0;
> +   }
> +
> +   if (hdr == NULL)
> +   return 0;
> +
> +   /* Only 12 bit in use*/
> +   return hdr->common.ucode_version;
> +}
> --
> 1.9.1
>
> ___
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


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

2014-12-14 Thread Oded Gabbay
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 a specific engine. The firmware was uploaded to the engine by the
radeon driver.

v2: Returns the fw version of the specific engine, as passed into the function
by a new parameter

Signed-off-by: Oded Gabbay 
---
 drivers/gpu/drm/radeon/radeon_kfd.c | 53 +
 1 file changed, 53 insertions(+)

diff --git a/drivers/gpu/drm/radeon/radeon_kfd.c 
b/drivers/gpu/drm/radeon/radeon_kfd.c
index 065d020..242fd8b 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 

 #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, enum kgd_engine_type type);

 /*
  * 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,52 @@ 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, enum kgd_engine_type type)
+{
+   struct radeon_device *rdev = (struct radeon_device *) kgd;
+   const union radeon_firmware_header *hdr;
+
+   BUG_ON(kgd == NULL || rdev->mec_fw == NULL);
+
+   switch (type) {
+   case KGD_ENGINE_PFP:
+   hdr = (const union radeon_firmware_header *) rdev->pfp_fw->data;
+   break;
+
+   case KGD_ENGINE_ME:
+   hdr = (const union radeon_firmware_header *) rdev->me_fw->data;
+   break;
+
+   case KGD_ENGINE_CE:
+   hdr = (const union radeon_firmware_header *) rdev->ce_fw->data;
+   break;
+
+   case KGD_ENGINE_MEC1:
+   hdr = (const union radeon_firmware_header *) rdev->mec_fw->data;
+   break;
+
+   case KGD_ENGINE_MEC2:
+   hdr = (const union radeon_firmware_header *)
+   rdev->mec2_fw->data;
+   break;
+
+   case KGD_ENGINE_RLC:
+   hdr = (const union radeon_firmware_header *) rdev->rlc_fw->data;
+   break;
+
+   case KGD_ENGINE_SDMA:
+   hdr = (const union radeon_firmware_header *)
+   rdev->sdma_fw->data;
+   break;
+
+   default:
+   return 0;
+   }
+
+   if (hdr == NULL)
+   return 0;
+
+   /* Only 12 bit in use*/
+   return hdr->common.ucode_version;
+}
-- 
1.9.1



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

2014-12-14 Thread Oded Gabbay


On 12/10/2014 11:57 PM, Alex Deucher wrote:
> On Wed, Dec 10, 2014 at 8:13 AM, Oded Gabbay  wrote:
>> From: Alexey Skidanov 
>>
>> 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 
>> Reviewed-by: Oded Gabbay 
>> ---
>>   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 
>>
>>   #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
>


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

2014-12-10 Thread Alex Deucher
On Wed, Dec 10, 2014 at 8:13 AM, Oded Gabbay  wrote:
> From: Alexey Skidanov 
>
> 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 
> Reviewed-by: Oded Gabbay 
> ---
>  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 
>
>  #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


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

2014-12-10 Thread Oded Gabbay
From: Alexey Skidanov 

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 
Reviewed-by: Oded Gabbay 
---
 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 

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