All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/amdgpu: export gpu always on cu bitmap
@ 2017-06-20  8:15 Flora Cui
       [not found] ` <1497946521-21500-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
  0 siblings, 1 reply; 16+ messages in thread
From: Flora Cui @ 2017-06-20  8:15 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Flora Cui

Change-Id: I056d8af23340d46e5140bd10cc38dfb887cc78ab
Signed-off-by: Flora Cui <Flora.Cui@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h     | 7 +++++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 3 ++-
 drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c   | 4 +++-
 drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c   | 4 +++-
 drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c   | 4 +++-
 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c   | 4 +++-
 include/uapi/drm/amdgpu_drm.h           | 2 +-
 8 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 6b7d2a1..6b9a91c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1029,12 +1029,15 @@ struct amdgpu_gfx_config {
 };
 
 struct amdgpu_cu_info {
-	uint32_t number; /* total active CU number */
-	uint32_t ao_cu_mask;
 	uint32_t max_waves_per_simd;
 	uint32_t wave_front_size;
 	uint32_t max_scratch_slots_per_cu;
 	uint32_t lds_size;
+
+	/* total active CU number */
+	uint32_t number;
+	uint32_t ao_cu_mask;
+	uint32_t ao_cu_bitmap[4][4];
 	uint32_t bitmap[4][4];
 };
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 0424711..5a1d794 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -67,9 +67,10 @@
  * - 3.15.0 - Export more gpu info for gfx9
  * - 3.16.0 - Add reserved vmid support
  * - 3.17.0 - Add AMDGPU_NUM_VRAM_CPU_PAGE_FAULTS.
+ * - 3.18.0 - Export gpu always on cu bitmap
  */
 #define KMS_DRIVER_MAJOR	3
-#define KMS_DRIVER_MINOR	17
+#define KMS_DRIVER_MINOR	18
 #define KMS_DRIVER_PATCHLEVEL	0
 
 int amdgpu_vram_limit = 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index f68ced6..6ba8204 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -591,8 +591,9 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
 		dev_info.gart_page_size = AMDGPU_GPU_PAGE_SIZE;
 
 		dev_info.cu_active_number = adev->gfx.cu_info.number;
-		dev_info.cu_ao_mask = adev->gfx.cu_info.ao_cu_mask;
 		dev_info.ce_ram_size = adev->gfx.ce_ram_size;
+		memcpy(&dev_info.cu_ao_bitmap[0], &adev->gfx.cu_info.ao_cu_bitmap[0],
+		       sizeof(adev->gfx.cu_info.ao_cu_bitmap));
 		memcpy(&dev_info.cu_bitmap[0], &adev->gfx.cu_info.bitmap[0],
 		       sizeof(adev->gfx.cu_info.bitmap));
 		dev_info.vram_type = adev->mc.vram_type;
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
index 7b0b3cf..5173ca1 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
@@ -3535,7 +3535,9 @@ static void gfx_v6_0_get_cu_info(struct amdgpu_device *adev)
 				mask <<= 1;
 			}
 			active_cu_number += counter;
-			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			if (i < 2 && j < 2)
+				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
 		}
 	}
 
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index fb0a94c..8c4dd7b 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -5427,7 +5427,9 @@ static void gfx_v7_0_get_cu_info(struct amdgpu_device *adev)
 				mask <<= 1;
 			}
 			active_cu_number += counter;
-			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			if (i < 2 && j < 2)
+				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
 		}
 	}
 	gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 1a75ab1..9edb509 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -7080,7 +7080,9 @@ static void gfx_v8_0_get_cu_info(struct amdgpu_device *adev)
 				mask <<= 1;
 			}
 			active_cu_number += counter;
-			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			if (i < 2 && j < 2)
+				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
 		}
 	}
 	gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
index 5d56126..0d6a6d9 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
@@ -4459,7 +4459,9 @@ static int gfx_v9_0_get_cu_info(struct amdgpu_device *adev,
 				mask <<= 1;
 			}
 			active_cu_number += counter;
-			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			if (i < 2 && j < 2)
+				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
 		}
 	}
 	gfx_v9_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
index 4f34394..4304422 100644
--- a/include/uapi/drm/amdgpu_drm.h
+++ b/include/uapi/drm/amdgpu_drm.h
@@ -760,7 +760,7 @@ struct drm_amdgpu_info_device {
 	__u64 max_memory_clock;
 	/* cu information */
 	__u32 cu_active_number;
-	__u32 cu_ao_mask;
+	__u32 cu_ao_bitmap[4][4];
 	__u32 cu_bitmap[4][4];
 	/** Render backend pipe mask. One render backend is CB+DB. */
 	__u32 enabled_rb_pipes_mask;
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH libdrm] amdgpu: update always on cu bitmap
       [not found] ` <1497946521-21500-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
@ 2017-06-20  9:04   ` Flora Cui
       [not found]     ` <1497949479-22146-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
  2017-06-20 14:47   ` [PATCH] drm/amdgpu: export gpu always on cu bitmap Alex Deucher
  2017-06-22  3:13   ` [PATCH v2] " Flora Cui
  2 siblings, 1 reply; 16+ messages in thread
From: Flora Cui @ 2017-06-20  9:04 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: Flora Cui

Change-Id: Ie2a812716a6802f7a5a0bc09b1a8db824c5bf2ed
Signed-off-by: Flora Cui <Flora.Cui@amd.com>
---
 amdgpu/amdgpu.h          | 2 +-
 amdgpu/amdgpu_gpu_info.c | 2 +-
 include/drm/amdgpu_drm.h | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h
index b6779f9..34ca5f1 100644
--- a/amdgpu/amdgpu.h
+++ b/amdgpu/amdgpu.h
@@ -486,7 +486,7 @@ struct amdgpu_gpu_info {
 	uint32_t pa_sc_raster_cfg1[4];
 	/* CU info */
 	uint32_t cu_active_number;
-	uint32_t cu_ao_mask;
+	uint32_t cu_ao_bitmap[4][4];
 	uint32_t cu_bitmap[4][4];
 	/* video memory type info*/
 	uint32_t vram_type;
diff --git a/amdgpu/amdgpu_gpu_info.c b/amdgpu/amdgpu_gpu_info.c
index 34f77be..acfd700 100644
--- a/amdgpu/amdgpu_gpu_info.c
+++ b/amdgpu/amdgpu_gpu_info.c
@@ -229,7 +229,7 @@ drm_private int amdgpu_query_gpu_info_init(amdgpu_device_handle dev)
 	}
 
 	dev->info.cu_active_number = dev->dev_info.cu_active_number;
-	dev->info.cu_ao_mask = dev->dev_info.cu_ao_mask;
+	memcpy(&dev->info.cu_ao_bitmap[0][0], &dev->dev_info.cu_ao_bitmap[0][0], sizeof(dev->info.cu_ao_bitmap));
 	memcpy(&dev->info.cu_bitmap[0][0], &dev->dev_info.cu_bitmap[0][0], sizeof(dev->info.cu_bitmap));
 
 	/* TODO: info->max_quad_shader_pipes is not set */
diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
index df250de..dcbe22c 100644
--- a/include/drm/amdgpu_drm.h
+++ b/include/drm/amdgpu_drm.h
@@ -832,7 +832,7 @@ struct drm_amdgpu_info_device {
 	__u64 max_memory_clock;
 	/* cu information */
 	__u32 cu_active_number;
-	__u32 cu_ao_mask;
+	__u32 cu_ao_bitmap[4][4];
 	__u32 cu_bitmap[4][4];
 	/** Render backend pipe mask. One render backend is CB+DB. */
 	__u32 enabled_rb_pipes_mask;
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH libdrm] amdgpu: update always on cu bitmap
       [not found]     ` <1497949479-22146-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
@ 2017-06-20  9:49       ` Christian König
       [not found]         ` <75494a7b-0ee1-b8e4-9b5e-a82bfeb0d1bb-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
  2017-06-26  6:12       ` [PATCH libdrm] amdgpu: update the exported always on CU bitmap Flora Cui
  1 sibling, 1 reply; 16+ messages in thread
From: Christian König @ 2017-06-20  9:49 UTC (permalink / raw)
  To: Flora Cui, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

I'm not 100% sure what this is all about, but it clearly won't work like 
this.

> diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
> index df250de..dcbe22c 100644
> --- a/include/drm/amdgpu_drm.h
> +++ b/include/drm/amdgpu_drm.h
> @@ -832,7 +832,7 @@ struct drm_amdgpu_info_device {
>   	__u64 max_memory_clock;
>   	/* cu information */
>   	__u32 cu_active_number;
> -	__u32 cu_ao_mask;
> +	__u32 cu_ao_bitmap[4][4];
>   	__u32 cu_bitmap[4][4];
>   	/** Render backend pipe mask. One render backend is CB+DB. */
>   	__u32 enabled_rb_pipes_mask;
That is a non-backward compatible change to the kernel interface and as 
such forbidden.

Regards,
Christian.

Am 20.06.2017 um 11:04 schrieb Flora Cui:
> Change-Id: Ie2a812716a6802f7a5a0bc09b1a8db824c5bf2ed
> Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> ---
>   amdgpu/amdgpu.h          | 2 +-
>   amdgpu/amdgpu_gpu_info.c | 2 +-
>   include/drm/amdgpu_drm.h | 2 +-
>   3 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h
> index b6779f9..34ca5f1 100644
> --- a/amdgpu/amdgpu.h
> +++ b/amdgpu/amdgpu.h
> @@ -486,7 +486,7 @@ struct amdgpu_gpu_info {
>   	uint32_t pa_sc_raster_cfg1[4];
>   	/* CU info */
>   	uint32_t cu_active_number;
> -	uint32_t cu_ao_mask;
> +	uint32_t cu_ao_bitmap[4][4];
>   	uint32_t cu_bitmap[4][4];
>   	/* video memory type info*/
>   	uint32_t vram_type;
> diff --git a/amdgpu/amdgpu_gpu_info.c b/amdgpu/amdgpu_gpu_info.c
> index 34f77be..acfd700 100644
> --- a/amdgpu/amdgpu_gpu_info.c
> +++ b/amdgpu/amdgpu_gpu_info.c
> @@ -229,7 +229,7 @@ drm_private int amdgpu_query_gpu_info_init(amdgpu_device_handle dev)
>   	}
>   
>   	dev->info.cu_active_number = dev->dev_info.cu_active_number;
> -	dev->info.cu_ao_mask = dev->dev_info.cu_ao_mask;
> +	memcpy(&dev->info.cu_ao_bitmap[0][0], &dev->dev_info.cu_ao_bitmap[0][0], sizeof(dev->info.cu_ao_bitmap));
>   	memcpy(&dev->info.cu_bitmap[0][0], &dev->dev_info.cu_bitmap[0][0], sizeof(dev->info.cu_bitmap));
>   
>   	/* TODO: info->max_quad_shader_pipes is not set */
> diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
> index df250de..dcbe22c 100644
> --- a/include/drm/amdgpu_drm.h
> +++ b/include/drm/amdgpu_drm.h
> @@ -832,7 +832,7 @@ struct drm_amdgpu_info_device {
>   	__u64 max_memory_clock;
>   	/* cu information */
>   	__u32 cu_active_number;
> -	__u32 cu_ao_mask;
> +	__u32 cu_ao_bitmap[4][4];
>   	__u32 cu_bitmap[4][4];
>   	/** Render backend pipe mask. One render backend is CB+DB. */
>   	__u32 enabled_rb_pipes_mask;


_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH libdrm] amdgpu: update always on cu bitmap
       [not found]         ` <75494a7b-0ee1-b8e4-9b5e-a82bfeb0d1bb-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
@ 2017-06-20 10:13           ` Daniel Vetter
  2017-06-21  2:13           ` Flora Cui
  1 sibling, 0 replies; 16+ messages in thread
From: Daniel Vetter @ 2017-06-20 10:13 UTC (permalink / raw)
  To: Christian König
  Cc: Flora Cui, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

On Tue, Jun 20, 2017 at 11:49:23AM +0200, Christian König wrote:
> I'm not 100% sure what this is all about, but it clearly won't work like
> this.
> 
> > diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
> > index df250de..dcbe22c 100644
> > --- a/include/drm/amdgpu_drm.h
> > +++ b/include/drm/amdgpu_drm.h
> > @@ -832,7 +832,7 @@ struct drm_amdgpu_info_device {
> >   	__u64 max_memory_clock;
> >   	/* cu information */
> >   	__u32 cu_active_number;
> > -	__u32 cu_ao_mask;
> > +	__u32 cu_ao_bitmap[4][4];
> >   	__u32 cu_bitmap[4][4];
> >   	/** Render backend pipe mask. One render backend is CB+DB. */
> >   	__u32 enabled_rb_pipes_mask;
> That is a non-backward compatible change to the kernel interface and as such
> forbidden.

The uabi changes should also flow from the kernel first, only then land in
libdrm. See libdrm/include/drm/README.
-Daniel

> 
> Regards,
> Christian.
> 
> Am 20.06.2017 um 11:04 schrieb Flora Cui:
> > Change-Id: Ie2a812716a6802f7a5a0bc09b1a8db824c5bf2ed
> > Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> > ---
> >   amdgpu/amdgpu.h          | 2 +-
> >   amdgpu/amdgpu_gpu_info.c | 2 +-
> >   include/drm/amdgpu_drm.h | 2 +-
> >   3 files changed, 3 insertions(+), 3 deletions(-)
> > 
> > diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h
> > index b6779f9..34ca5f1 100644
> > --- a/amdgpu/amdgpu.h
> > +++ b/amdgpu/amdgpu.h
> > @@ -486,7 +486,7 @@ struct amdgpu_gpu_info {
> >   	uint32_t pa_sc_raster_cfg1[4];
> >   	/* CU info */
> >   	uint32_t cu_active_number;
> > -	uint32_t cu_ao_mask;
> > +	uint32_t cu_ao_bitmap[4][4];
> >   	uint32_t cu_bitmap[4][4];
> >   	/* video memory type info*/
> >   	uint32_t vram_type;
> > diff --git a/amdgpu/amdgpu_gpu_info.c b/amdgpu/amdgpu_gpu_info.c
> > index 34f77be..acfd700 100644
> > --- a/amdgpu/amdgpu_gpu_info.c
> > +++ b/amdgpu/amdgpu_gpu_info.c
> > @@ -229,7 +229,7 @@ drm_private int amdgpu_query_gpu_info_init(amdgpu_device_handle dev)
> >   	}
> >   	dev->info.cu_active_number = dev->dev_info.cu_active_number;
> > -	dev->info.cu_ao_mask = dev->dev_info.cu_ao_mask;
> > +	memcpy(&dev->info.cu_ao_bitmap[0][0], &dev->dev_info.cu_ao_bitmap[0][0], sizeof(dev->info.cu_ao_bitmap));
> >   	memcpy(&dev->info.cu_bitmap[0][0], &dev->dev_info.cu_bitmap[0][0], sizeof(dev->info.cu_bitmap));
> >   	/* TODO: info->max_quad_shader_pipes is not set */
> > diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
> > index df250de..dcbe22c 100644
> > --- a/include/drm/amdgpu_drm.h
> > +++ b/include/drm/amdgpu_drm.h
> > @@ -832,7 +832,7 @@ struct drm_amdgpu_info_device {
> >   	__u64 max_memory_clock;
> >   	/* cu information */
> >   	__u32 cu_active_number;
> > -	__u32 cu_ao_mask;
> > +	__u32 cu_ao_bitmap[4][4];
> >   	__u32 cu_bitmap[4][4];
> >   	/** Render backend pipe mask. One render backend is CB+DB. */
> >   	__u32 enabled_rb_pipes_mask;
> 
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] drm/amdgpu: export gpu always on cu bitmap
       [not found] ` <1497946521-21500-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
  2017-06-20  9:04   ` [PATCH libdrm] amdgpu: update " Flora Cui
@ 2017-06-20 14:47   ` Alex Deucher
       [not found]     ` <CADnq5_PQcrNDSHeJyWr=401vn_EKc6i7+Lk+8jUfWfC1H4_EWA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  2017-06-22  3:13   ` [PATCH v2] " Flora Cui
  2 siblings, 1 reply; 16+ messages in thread
From: Alex Deucher @ 2017-06-20 14:47 UTC (permalink / raw)
  To: Flora Cui; +Cc: amd-gfx list

On Tue, Jun 20, 2017 at 4:15 AM, Flora Cui <Flora.Cui@amd.com> wrote:
> Change-Id: I056d8af23340d46e5140bd10cc38dfb887cc78ab
> Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h     | 7 +++++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 ++-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 3 ++-
>  drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c   | 4 +++-
>  drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c   | 4 +++-
>  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c   | 4 +++-
>  drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c   | 4 +++-
>  include/uapi/drm/amdgpu_drm.h           | 2 +-
>  8 files changed, 22 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 6b7d2a1..6b9a91c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1029,12 +1029,15 @@ struct amdgpu_gfx_config {
>  };
>
>  struct amdgpu_cu_info {
> -       uint32_t number; /* total active CU number */
> -       uint32_t ao_cu_mask;
>         uint32_t max_waves_per_simd;
>         uint32_t wave_front_size;
>         uint32_t max_scratch_slots_per_cu;
>         uint32_t lds_size;
> +
> +       /* total active CU number */
> +       uint32_t number;
> +       uint32_t ao_cu_mask;
> +       uint32_t ao_cu_bitmap[4][4];
>         uint32_t bitmap[4][4];
>  };
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 0424711..5a1d794 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -67,9 +67,10 @@
>   * - 3.15.0 - Export more gpu info for gfx9
>   * - 3.16.0 - Add reserved vmid support
>   * - 3.17.0 - Add AMDGPU_NUM_VRAM_CPU_PAGE_FAULTS.
> + * - 3.18.0 - Export gpu always on cu bitmap
>   */
>  #define KMS_DRIVER_MAJOR       3
> -#define KMS_DRIVER_MINOR       17
> +#define KMS_DRIVER_MINOR       18
>  #define KMS_DRIVER_PATCHLEVEL  0
>
>  int amdgpu_vram_limit = 0;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index f68ced6..6ba8204 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -591,8 +591,9 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
>                 dev_info.gart_page_size = AMDGPU_GPU_PAGE_SIZE;
>
>                 dev_info.cu_active_number = adev->gfx.cu_info.number;
> -               dev_info.cu_ao_mask = adev->gfx.cu_info.ao_cu_mask;
>                 dev_info.ce_ram_size = adev->gfx.ce_ram_size;
> +               memcpy(&dev_info.cu_ao_bitmap[0], &adev->gfx.cu_info.ao_cu_bitmap[0],
> +                      sizeof(adev->gfx.cu_info.ao_cu_bitmap));
>                 memcpy(&dev_info.cu_bitmap[0], &adev->gfx.cu_info.bitmap[0],
>                        sizeof(adev->gfx.cu_info.bitmap));
>                 dev_info.vram_type = adev->mc.vram_type;
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> index 7b0b3cf..5173ca1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> @@ -3535,7 +3535,9 @@ static void gfx_v6_0_get_cu_info(struct amdgpu_device *adev)
>                                 mask <<= 1;
>                         }
>                         active_cu_number += counter;
> -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +                       if (i < 2 && j < 2)
> +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>                 }
>         }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> index fb0a94c..8c4dd7b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> @@ -5427,7 +5427,9 @@ static void gfx_v7_0_get_cu_info(struct amdgpu_device *adev)
>                                 mask <<= 1;
>                         }
>                         active_cu_number += counter;
> -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +                       if (i < 2 && j < 2)
> +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>                 }
>         }
>         gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> index 1a75ab1..9edb509 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> @@ -7080,7 +7080,9 @@ static void gfx_v8_0_get_cu_info(struct amdgpu_device *adev)
>                                 mask <<= 1;
>                         }
>                         active_cu_number += counter;
> -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +                       if (i < 2 && j < 2)
> +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>                 }
>         }
>         gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> index 5d56126..0d6a6d9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> @@ -4459,7 +4459,9 @@ static int gfx_v9_0_get_cu_info(struct amdgpu_device *adev,
>                                 mask <<= 1;
>                         }
>                         active_cu_number += counter;
> -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +                       if (i < 2 && j < 2)
> +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>                 }
>         }
>         gfx_v9_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
> index 4f34394..4304422 100644
> --- a/include/uapi/drm/amdgpu_drm.h
> +++ b/include/uapi/drm/amdgpu_drm.h
> @@ -760,7 +760,7 @@ struct drm_amdgpu_info_device {
>         __u64 max_memory_clock;
>         /* cu information */
>         __u32 cu_active_number;
> -       __u32 cu_ao_mask;
> +       __u32 cu_ao_bitmap[4][4];
>         __u32 cu_bitmap[4][4];
>         /** Render backend pipe mask. One render backend is CB+DB. */
>         __u32 enabled_rb_pipes_mask;

You need to add these to the end of the structure for backwards compatibility.

Alex
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH libdrm] amdgpu: update always on cu bitmap
       [not found]         ` <75494a7b-0ee1-b8e4-9b5e-a82bfeb0d1bb-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
  2017-06-20 10:13           ` Daniel Vetter
@ 2017-06-21  2:13           ` Flora Cui
  2017-06-21  7:08             ` Daniel Vetter
  1 sibling, 1 reply; 16+ messages in thread
From: Flora Cui @ 2017-06-21  2:13 UTC (permalink / raw)
  To: Christian König
  Cc: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

each SE take 16 bit in cu_ao_mask. For ASICs with 4 SE, cu_ao_mask
has invalid value. so I change cu_ao_mask to cu_ao_bitmap[4][4] and increase
kmd driver version.

On Tue, Jun 20, 2017 at 11:49:23AM +0200, Christian König wrote:
> I'm not 100% sure what this is all about, but it clearly won't work like
> this.
> 
> >diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
> >index df250de..dcbe22c 100644
> >--- a/include/drm/amdgpu_drm.h
> >+++ b/include/drm/amdgpu_drm.h
> >@@ -832,7 +832,7 @@ struct drm_amdgpu_info_device {
> >  	__u64 max_memory_clock;
> >  	/* cu information */
> >  	__u32 cu_active_number;
> >-	__u32 cu_ao_mask;
> >+	__u32 cu_ao_bitmap[4][4];
> >  	__u32 cu_bitmap[4][4];
> >  	/** Render backend pipe mask. One render backend is CB+DB. */
> >  	__u32 enabled_rb_pipes_mask;
> That is a non-backward compatible change to the kernel interface and as such
> forbidden.
> 
> Regards,
> Christian.
> 
> Am 20.06.2017 um 11:04 schrieb Flora Cui:
> >Change-Id: Ie2a812716a6802f7a5a0bc09b1a8db824c5bf2ed
> >Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> >---
> >  amdgpu/amdgpu.h          | 2 +-
> >  amdgpu/amdgpu_gpu_info.c | 2 +-
> >  include/drm/amdgpu_drm.h | 2 +-
> >  3 files changed, 3 insertions(+), 3 deletions(-)
> >
> >diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h
> >index b6779f9..34ca5f1 100644
> >--- a/amdgpu/amdgpu.h
> >+++ b/amdgpu/amdgpu.h
> >@@ -486,7 +486,7 @@ struct amdgpu_gpu_info {
> >  	uint32_t pa_sc_raster_cfg1[4];
> >  	/* CU info */
> >  	uint32_t cu_active_number;
> >-	uint32_t cu_ao_mask;
> >+	uint32_t cu_ao_bitmap[4][4];
> >  	uint32_t cu_bitmap[4][4];
> >  	/* video memory type info*/
> >  	uint32_t vram_type;
> >diff --git a/amdgpu/amdgpu_gpu_info.c b/amdgpu/amdgpu_gpu_info.c
> >index 34f77be..acfd700 100644
> >--- a/amdgpu/amdgpu_gpu_info.c
> >+++ b/amdgpu/amdgpu_gpu_info.c
> >@@ -229,7 +229,7 @@ drm_private int amdgpu_query_gpu_info_init(amdgpu_device_handle dev)
> >  	}
> >  	dev->info.cu_active_number = dev->dev_info.cu_active_number;
> >-	dev->info.cu_ao_mask = dev->dev_info.cu_ao_mask;
> >+	memcpy(&dev->info.cu_ao_bitmap[0][0], &dev->dev_info.cu_ao_bitmap[0][0], sizeof(dev->info.cu_ao_bitmap));
> >  	memcpy(&dev->info.cu_bitmap[0][0], &dev->dev_info.cu_bitmap[0][0], sizeof(dev->info.cu_bitmap));
> >  	/* TODO: info->max_quad_shader_pipes is not set */
> >diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
> >index df250de..dcbe22c 100644
> >--- a/include/drm/amdgpu_drm.h
> >+++ b/include/drm/amdgpu_drm.h
> >@@ -832,7 +832,7 @@ struct drm_amdgpu_info_device {
> >  	__u64 max_memory_clock;
> >  	/* cu information */
> >  	__u32 cu_active_number;
> >-	__u32 cu_ao_mask;
> >+	__u32 cu_ao_bitmap[4][4];
> >  	__u32 cu_bitmap[4][4];
> >  	/** Render backend pipe mask. One render backend is CB+DB. */
> >  	__u32 enabled_rb_pipes_mask;
> 
> 
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH libdrm] amdgpu: update always on cu bitmap
  2017-06-21  2:13           ` Flora Cui
@ 2017-06-21  7:08             ` Daniel Vetter
  0 siblings, 0 replies; 16+ messages in thread
From: Daniel Vetter @ 2017-06-21  7:08 UTC (permalink / raw)
  To: Flora Cui
  Cc: Christian König, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

On Wed, Jun 21, 2017 at 10:13:54AM +0800, Flora Cui wrote:
> each SE take 16 bit in cu_ao_mask. For ASICs with 4 SE, cu_ao_mask
> has invalid value. so I change cu_ao_mask to cu_ao_bitmap[4][4] and increase
> kmd driver version.

Please read Documentation/ioctl/botching-up-ioctls.txt

You cannot change ioctl structures like you're proposing here.

Thanks, Daniel
> 
> On Tue, Jun 20, 2017 at 11:49:23AM +0200, Christian König wrote:
> > I'm not 100% sure what this is all about, but it clearly won't work like
> > this.
> > 
> > >diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
> > >index df250de..dcbe22c 100644
> > >--- a/include/drm/amdgpu_drm.h
> > >+++ b/include/drm/amdgpu_drm.h
> > >@@ -832,7 +832,7 @@ struct drm_amdgpu_info_device {
> > >  	__u64 max_memory_clock;
> > >  	/* cu information */
> > >  	__u32 cu_active_number;
> > >-	__u32 cu_ao_mask;
> > >+	__u32 cu_ao_bitmap[4][4];
> > >  	__u32 cu_bitmap[4][4];
> > >  	/** Render backend pipe mask. One render backend is CB+DB. */
> > >  	__u32 enabled_rb_pipes_mask;
> > That is a non-backward compatible change to the kernel interface and as such
> > forbidden.
> > 
> > Regards,
> > Christian.
> > 
> > Am 20.06.2017 um 11:04 schrieb Flora Cui:
> > >Change-Id: Ie2a812716a6802f7a5a0bc09b1a8db824c5bf2ed
> > >Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> > >---
> > >  amdgpu/amdgpu.h          | 2 +-
> > >  amdgpu/amdgpu_gpu_info.c | 2 +-
> > >  include/drm/amdgpu_drm.h | 2 +-
> > >  3 files changed, 3 insertions(+), 3 deletions(-)
> > >
> > >diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h
> > >index b6779f9..34ca5f1 100644
> > >--- a/amdgpu/amdgpu.h
> > >+++ b/amdgpu/amdgpu.h
> > >@@ -486,7 +486,7 @@ struct amdgpu_gpu_info {
> > >  	uint32_t pa_sc_raster_cfg1[4];
> > >  	/* CU info */
> > >  	uint32_t cu_active_number;
> > >-	uint32_t cu_ao_mask;
> > >+	uint32_t cu_ao_bitmap[4][4];
> > >  	uint32_t cu_bitmap[4][4];
> > >  	/* video memory type info*/
> > >  	uint32_t vram_type;
> > >diff --git a/amdgpu/amdgpu_gpu_info.c b/amdgpu/amdgpu_gpu_info.c
> > >index 34f77be..acfd700 100644
> > >--- a/amdgpu/amdgpu_gpu_info.c
> > >+++ b/amdgpu/amdgpu_gpu_info.c
> > >@@ -229,7 +229,7 @@ drm_private int amdgpu_query_gpu_info_init(amdgpu_device_handle dev)
> > >  	}
> > >  	dev->info.cu_active_number = dev->dev_info.cu_active_number;
> > >-	dev->info.cu_ao_mask = dev->dev_info.cu_ao_mask;
> > >+	memcpy(&dev->info.cu_ao_bitmap[0][0], &dev->dev_info.cu_ao_bitmap[0][0], sizeof(dev->info.cu_ao_bitmap));
> > >  	memcpy(&dev->info.cu_bitmap[0][0], &dev->dev_info.cu_bitmap[0][0], sizeof(dev->info.cu_bitmap));
> > >  	/* TODO: info->max_quad_shader_pipes is not set */
> > >diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
> > >index df250de..dcbe22c 100644
> > >--- a/include/drm/amdgpu_drm.h
> > >+++ b/include/drm/amdgpu_drm.h
> > >@@ -832,7 +832,7 @@ struct drm_amdgpu_info_device {
> > >  	__u64 max_memory_clock;
> > >  	/* cu information */
> > >  	__u32 cu_active_number;
> > >-	__u32 cu_ao_mask;
> > >+	__u32 cu_ao_bitmap[4][4];
> > >  	__u32 cu_bitmap[4][4];
> > >  	/** Render backend pipe mask. One render backend is CB+DB. */
> > >  	__u32 enabled_rb_pipes_mask;
> > 
> > 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] drm/amdgpu: export gpu always on cu bitmap
       [not found]     ` <CADnq5_PQcrNDSHeJyWr=401vn_EKc6i7+Lk+8jUfWfC1H4_EWA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2017-06-21  7:42       ` Flora Cui
  2017-06-21  8:32         ` Christian König
  2017-06-21 15:36         ` Deucher, Alexander
  0 siblings, 2 replies; 16+ messages in thread
From: Flora Cui @ 2017-06-21  7:42 UTC (permalink / raw)
  To: Alex Deucher; +Cc: amd-gfx list

On Tue, Jun 20, 2017 at 10:47:39AM -0400, Alex Deucher wrote:
> On Tue, Jun 20, 2017 at 4:15 AM, Flora Cui <Flora.Cui@amd.com> wrote:
> > Change-Id: I056d8af23340d46e5140bd10cc38dfb887cc78ab
> > Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> > ---
> >  drivers/gpu/drm/amd/amdgpu/amdgpu.h     | 7 +++++--
> >  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 ++-
> >  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 3 ++-
> >  drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c   | 4 +++-
> >  drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c   | 4 +++-
> >  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c   | 4 +++-
> >  drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c   | 4 +++-
> >  include/uapi/drm/amdgpu_drm.h           | 2 +-
> >  8 files changed, 22 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > index 6b7d2a1..6b9a91c 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > @@ -1029,12 +1029,15 @@ struct amdgpu_gfx_config {
> >  };
> >
> >  struct amdgpu_cu_info {
> > -       uint32_t number; /* total active CU number */
> > -       uint32_t ao_cu_mask;
> >         uint32_t max_waves_per_simd;
> >         uint32_t wave_front_size;
> >         uint32_t max_scratch_slots_per_cu;
> >         uint32_t lds_size;
> > +
> > +       /* total active CU number */
> > +       uint32_t number;
> > +       uint32_t ao_cu_mask;
> > +       uint32_t ao_cu_bitmap[4][4];
> >         uint32_t bitmap[4][4];
> >  };
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > index 0424711..5a1d794 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > @@ -67,9 +67,10 @@
> >   * - 3.15.0 - Export more gpu info for gfx9
> >   * - 3.16.0 - Add reserved vmid support
> >   * - 3.17.0 - Add AMDGPU_NUM_VRAM_CPU_PAGE_FAULTS.
> > + * - 3.18.0 - Export gpu always on cu bitmap
> >   */
> >  #define KMS_DRIVER_MAJOR       3
> > -#define KMS_DRIVER_MINOR       17
> > +#define KMS_DRIVER_MINOR       18
> >  #define KMS_DRIVER_PATCHLEVEL  0
> >
> >  int amdgpu_vram_limit = 0;
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> > index f68ced6..6ba8204 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> > @@ -591,8 +591,9 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
> >                 dev_info.gart_page_size = AMDGPU_GPU_PAGE_SIZE;
> >
> >                 dev_info.cu_active_number = adev->gfx.cu_info.number;
> > -               dev_info.cu_ao_mask = adev->gfx.cu_info.ao_cu_mask;
> >                 dev_info.ce_ram_size = adev->gfx.ce_ram_size;
> > +               memcpy(&dev_info.cu_ao_bitmap[0], &adev->gfx.cu_info.ao_cu_bitmap[0],
> > +                      sizeof(adev->gfx.cu_info.ao_cu_bitmap));
> >                 memcpy(&dev_info.cu_bitmap[0], &adev->gfx.cu_info.bitmap[0],
> >                        sizeof(adev->gfx.cu_info.bitmap));
> >                 dev_info.vram_type = adev->mc.vram_type;
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> > index 7b0b3cf..5173ca1 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> > @@ -3535,7 +3535,9 @@ static void gfx_v6_0_get_cu_info(struct amdgpu_device *adev)
> >                                 mask <<= 1;
> >                         }
> >                         active_cu_number += counter;
> > -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > +                       if (i < 2 && j < 2)
> > +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
> >                 }
> >         }
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> > index fb0a94c..8c4dd7b 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> > @@ -5427,7 +5427,9 @@ static void gfx_v7_0_get_cu_info(struct amdgpu_device *adev)
> >                                 mask <<= 1;
> >                         }
> >                         active_cu_number += counter;
> > -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > +                       if (i < 2 && j < 2)
> > +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
> >                 }
> >         }
> >         gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> > index 1a75ab1..9edb509 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> > @@ -7080,7 +7080,9 @@ static void gfx_v8_0_get_cu_info(struct amdgpu_device *adev)
> >                                 mask <<= 1;
> >                         }
> >                         active_cu_number += counter;
> > -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > +                       if (i < 2 && j < 2)
> > +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
> >                 }
> >         }
> >         gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> > index 5d56126..0d6a6d9 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> > @@ -4459,7 +4459,9 @@ static int gfx_v9_0_get_cu_info(struct amdgpu_device *adev,
> >                                 mask <<= 1;
> >                         }
> >                         active_cu_number += counter;
> > -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > +                       if (i < 2 && j < 2)
> > +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
> >                 }
> >         }
> >         gfx_v9_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> > diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
> > index 4f34394..4304422 100644
> > --- a/include/uapi/drm/amdgpu_drm.h
> > +++ b/include/uapi/drm/amdgpu_drm.h
> > @@ -760,7 +760,7 @@ struct drm_amdgpu_info_device {
> >         __u64 max_memory_clock;
> >         /* cu information */
> >         __u32 cu_active_number;
> > -       __u32 cu_ao_mask;
> > +       __u32 cu_ao_bitmap[4][4];
> >         __u32 cu_bitmap[4][4];
> >         /** Render backend pipe mask. One render backend is CB+DB. */
> >         __u32 enabled_rb_pipes_mask;
> 
> You need to add these to the end of the structure for backwards compatibility.
> 
OK. How to handle cu_ao_mask? it's invalid, yet kmd has to keep it for backward compatibility.
> Alex
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] drm/amdgpu: export gpu always on cu bitmap
  2017-06-21  7:42       ` Flora Cui
@ 2017-06-21  8:32         ` Christian König
  2017-06-21 15:36         ` Deucher, Alexander
  1 sibling, 0 replies; 16+ messages in thread
From: Christian König @ 2017-06-21  8:32 UTC (permalink / raw)
  To: Flora Cui, Alex Deucher; +Cc: amd-gfx list

Am 21.06.2017 um 09:42 schrieb Flora Cui:
> On Tue, Jun 20, 2017 at 10:47:39AM -0400, Alex Deucher wrote:
>> On Tue, Jun 20, 2017 at 4:15 AM, Flora Cui <Flora.Cui@amd.com> wrote:
>>> Change-Id: I056d8af23340d46e5140bd10cc38dfb887cc78ab
>>> Signed-off-by: Flora Cui <Flora.Cui@amd.com>
>>> ---
>>>   drivers/gpu/drm/amd/amdgpu/amdgpu.h     | 7 +++++--
>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 ++-
>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 3 ++-
>>>   drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c   | 4 +++-
>>>   drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c   | 4 +++-
>>>   drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c   | 4 +++-
>>>   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c   | 4 +++-
>>>   include/uapi/drm/amdgpu_drm.h           | 2 +-
>>>   8 files changed, 22 insertions(+), 9 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>> index 6b7d2a1..6b9a91c 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>> @@ -1029,12 +1029,15 @@ struct amdgpu_gfx_config {
>>>   };
>>>
>>>   struct amdgpu_cu_info {
>>> -       uint32_t number; /* total active CU number */
>>> -       uint32_t ao_cu_mask;
>>>          uint32_t max_waves_per_simd;
>>>          uint32_t wave_front_size;
>>>          uint32_t max_scratch_slots_per_cu;
>>>          uint32_t lds_size;
>>> +
>>> +       /* total active CU number */
>>> +       uint32_t number;
>>> +       uint32_t ao_cu_mask;
>>> +       uint32_t ao_cu_bitmap[4][4];
>>>          uint32_t bitmap[4][4];
>>>   };
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>> index 0424711..5a1d794 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>> @@ -67,9 +67,10 @@
>>>    * - 3.15.0 - Export more gpu info for gfx9
>>>    * - 3.16.0 - Add reserved vmid support
>>>    * - 3.17.0 - Add AMDGPU_NUM_VRAM_CPU_PAGE_FAULTS.
>>> + * - 3.18.0 - Export gpu always on cu bitmap
>>>    */
>>>   #define KMS_DRIVER_MAJOR       3
>>> -#define KMS_DRIVER_MINOR       17
>>> +#define KMS_DRIVER_MINOR       18
>>>   #define KMS_DRIVER_PATCHLEVEL  0
>>>
>>>   int amdgpu_vram_limit = 0;
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>> index f68ced6..6ba8204 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>> @@ -591,8 +591,9 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
>>>                  dev_info.gart_page_size = AMDGPU_GPU_PAGE_SIZE;
>>>
>>>                  dev_info.cu_active_number = adev->gfx.cu_info.number;
>>> -               dev_info.cu_ao_mask = adev->gfx.cu_info.ao_cu_mask;
>>>                  dev_info.ce_ram_size = adev->gfx.ce_ram_size;
>>> +               memcpy(&dev_info.cu_ao_bitmap[0], &adev->gfx.cu_info.ao_cu_bitmap[0],
>>> +                      sizeof(adev->gfx.cu_info.ao_cu_bitmap));
>>>                  memcpy(&dev_info.cu_bitmap[0], &adev->gfx.cu_info.bitmap[0],
>>>                         sizeof(adev->gfx.cu_info.bitmap));
>>>                  dev_info.vram_type = adev->mc.vram_type;
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
>>> index 7b0b3cf..5173ca1 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
>>> @@ -3535,7 +3535,9 @@ static void gfx_v6_0_get_cu_info(struct amdgpu_device *adev)
>>>                                  mask <<= 1;
>>>                          }
>>>                          active_cu_number += counter;
>>> -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
>>> +                       if (i < 2 && j < 2)
>>> +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
>>> +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>>>                  }
>>>          }
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
>>> index fb0a94c..8c4dd7b 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
>>> @@ -5427,7 +5427,9 @@ static void gfx_v7_0_get_cu_info(struct amdgpu_device *adev)
>>>                                  mask <<= 1;
>>>                          }
>>>                          active_cu_number += counter;
>>> -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
>>> +                       if (i < 2 && j < 2)
>>> +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
>>> +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>>>                  }
>>>          }
>>>          gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
>>> index 1a75ab1..9edb509 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
>>> @@ -7080,7 +7080,9 @@ static void gfx_v8_0_get_cu_info(struct amdgpu_device *adev)
>>>                                  mask <<= 1;
>>>                          }
>>>                          active_cu_number += counter;
>>> -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
>>> +                       if (i < 2 && j < 2)
>>> +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
>>> +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>>>                  }
>>>          }
>>>          gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>>> index 5d56126..0d6a6d9 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>>> @@ -4459,7 +4459,9 @@ static int gfx_v9_0_get_cu_info(struct amdgpu_device *adev,
>>>                                  mask <<= 1;
>>>                          }
>>>                          active_cu_number += counter;
>>> -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
>>> +                       if (i < 2 && j < 2)
>>> +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
>>> +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>>>                  }
>>>          }
>>>          gfx_v9_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
>>> diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
>>> index 4f34394..4304422 100644
>>> --- a/include/uapi/drm/amdgpu_drm.h
>>> +++ b/include/uapi/drm/amdgpu_drm.h
>>> @@ -760,7 +760,7 @@ struct drm_amdgpu_info_device {
>>>          __u64 max_memory_clock;
>>>          /* cu information */
>>>          __u32 cu_active_number;
>>> -       __u32 cu_ao_mask;
>>> +       __u32 cu_ao_bitmap[4][4];
>>>          __u32 cu_bitmap[4][4];
>>>          /** Render backend pipe mask. One render backend is CB+DB. */
>>>          __u32 enabled_rb_pipes_mask;
>> You need to add these to the end of the structure for backwards compatibility.
>>
> OK. How to handle cu_ao_mask? it's invalid, yet kmd has to keep it for backward compatibility.

I can't completely answer that question since I don't know the hardware 
background well enough.

But the main questions are how it is used today and what can we do to 
avoid breaking existing userspace?

If the value is completely ignored by user space then we can simply set 
it to zero and add some deprecated comment on the field.

If the the incorrect value is somehow used then we should still provide 
it even when it is completely wrong.

Regards,
Christian.


>> Alex
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH] drm/amdgpu: export gpu always on cu bitmap
  2017-06-21  7:42       ` Flora Cui
  2017-06-21  8:32         ` Christian König
@ 2017-06-21 15:36         ` Deucher, Alexander
  1 sibling, 0 replies; 16+ messages in thread
From: Deucher, Alexander @ 2017-06-21 15:36 UTC (permalink / raw)
  To: Cui, Flora, Alex Deucher; +Cc: amd-gfx list

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Flora Cui
> Sent: Wednesday, June 21, 2017 3:42 AM
> To: Alex Deucher
> Cc: amd-gfx list
> Subject: Re: [PATCH] drm/amdgpu: export gpu always on cu bitmap
> 
> On Tue, Jun 20, 2017 at 10:47:39AM -0400, Alex Deucher wrote:
> > On Tue, Jun 20, 2017 at 4:15 AM, Flora Cui <Flora.Cui@amd.com> wrote:
> > > Change-Id: I056d8af23340d46e5140bd10cc38dfb887cc78ab
> > > Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> > > ---
> > >  drivers/gpu/drm/amd/amdgpu/amdgpu.h     | 7 +++++--
> > >  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 ++-
> > >  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 3 ++-
> > >  drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c   | 4 +++-
> > >  drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c   | 4 +++-
> > >  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c   | 4 +++-
> > >  drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c   | 4 +++-
> > >  include/uapi/drm/amdgpu_drm.h           | 2 +-
> > >  8 files changed, 22 insertions(+), 9 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > > index 6b7d2a1..6b9a91c 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > > @@ -1029,12 +1029,15 @@ struct amdgpu_gfx_config {
> > >  };
> > >
> > >  struct amdgpu_cu_info {
> > > -       uint32_t number; /* total active CU number */
> > > -       uint32_t ao_cu_mask;
> > >         uint32_t max_waves_per_simd;
> > >         uint32_t wave_front_size;
> > >         uint32_t max_scratch_slots_per_cu;
> > >         uint32_t lds_size;
> > > +
> > > +       /* total active CU number */
> > > +       uint32_t number;
> > > +       uint32_t ao_cu_mask;
> > > +       uint32_t ao_cu_bitmap[4][4];
> > >         uint32_t bitmap[4][4];
> > >  };
> > >
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > index 0424711..5a1d794 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > @@ -67,9 +67,10 @@
> > >   * - 3.15.0 - Export more gpu info for gfx9
> > >   * - 3.16.0 - Add reserved vmid support
> > >   * - 3.17.0 - Add AMDGPU_NUM_VRAM_CPU_PAGE_FAULTS.
> > > + * - 3.18.0 - Export gpu always on cu bitmap
> > >   */
> > >  #define KMS_DRIVER_MAJOR       3
> > > -#define KMS_DRIVER_MINOR       17
> > > +#define KMS_DRIVER_MINOR       18
> > >  #define KMS_DRIVER_PATCHLEVEL  0
> > >
> > >  int amdgpu_vram_limit = 0;
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> > > index f68ced6..6ba8204 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> > > @@ -591,8 +591,9 @@ static int amdgpu_info_ioctl(struct drm_device
> *dev, void *data, struct drm_file
> > >                 dev_info.gart_page_size = AMDGPU_GPU_PAGE_SIZE;
> > >
> > >                 dev_info.cu_active_number = adev->gfx.cu_info.number;
> > > -               dev_info.cu_ao_mask = adev->gfx.cu_info.ao_cu_mask;
> > >                 dev_info.ce_ram_size = adev->gfx.ce_ram_size;
> > > +               memcpy(&dev_info.cu_ao_bitmap[0], &adev-
> >gfx.cu_info.ao_cu_bitmap[0],
> > > +                      sizeof(adev->gfx.cu_info.ao_cu_bitmap));
> > >                 memcpy(&dev_info.cu_bitmap[0], &adev-
> >gfx.cu_info.bitmap[0],
> > >                        sizeof(adev->gfx.cu_info.bitmap));
> > >                 dev_info.vram_type = adev->mc.vram_type;
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> > > index 7b0b3cf..5173ca1 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> > > @@ -3535,7 +3535,9 @@ static void gfx_v6_0_get_cu_info(struct
> amdgpu_device *adev)
> > >                                 mask <<= 1;
> > >                         }
> > >                         active_cu_number += counter;
> > > -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > > +                       if (i < 2 && j < 2)
> > > +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > > +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
> > >                 }
> > >         }
> > >
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> > > index fb0a94c..8c4dd7b 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> > > @@ -5427,7 +5427,9 @@ static void gfx_v7_0_get_cu_info(struct
> amdgpu_device *adev)
> > >                                 mask <<= 1;
> > >                         }
> > >                         active_cu_number += counter;
> > > -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > > +                       if (i < 2 && j < 2)
> > > +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > > +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
> > >                 }
> > >         }
> > >         gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> > > index 1a75ab1..9edb509 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> > > @@ -7080,7 +7080,9 @@ static void gfx_v8_0_get_cu_info(struct
> amdgpu_device *adev)
> > >                                 mask <<= 1;
> > >                         }
> > >                         active_cu_number += counter;
> > > -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > > +                       if (i < 2 && j < 2)
> > > +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > > +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
> > >                 }
> > >         }
> > >         gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> > > index 5d56126..0d6a6d9 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> > > @@ -4459,7 +4459,9 @@ static int gfx_v9_0_get_cu_info(struct
> amdgpu_device *adev,
> > >                                 mask <<= 1;
> > >                         }
> > >                         active_cu_number += counter;
> > > -                       ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > > +                       if (i < 2 && j < 2)
> > > +                               ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> > > +                       cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
> > >                 }
> > >         }
> > >         gfx_v9_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> > > diff --git a/include/uapi/drm/amdgpu_drm.h
> b/include/uapi/drm/amdgpu_drm.h
> > > index 4f34394..4304422 100644
> > > --- a/include/uapi/drm/amdgpu_drm.h
> > > +++ b/include/uapi/drm/amdgpu_drm.h
> > > @@ -760,7 +760,7 @@ struct drm_amdgpu_info_device {
> > >         __u64 max_memory_clock;
> > >         /* cu information */
> > >         __u32 cu_active_number;
> > > -       __u32 cu_ao_mask;
> > > +       __u32 cu_ao_bitmap[4][4];
> > >         __u32 cu_bitmap[4][4];
> > >         /** Render backend pipe mask. One render backend is CB+DB. */
> > >         __u32 enabled_rb_pipes_mask;
> >
> > You need to add these to the end of the structure for backwards
> compatibility.
> >
> OK. How to handle cu_ao_mask? it's invalid, yet kmd has to keep it for
> backward compatibility.

Correct.  You'll have to leave it there for compatibility, but the UMDs should use the new data if the kernel is new enough.

Alex

> > Alex
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v2] drm/amdgpu: export gpu always on cu bitmap
       [not found] ` <1497946521-21500-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
  2017-06-20  9:04   ` [PATCH libdrm] amdgpu: update " Flora Cui
  2017-06-20 14:47   ` [PATCH] drm/amdgpu: export gpu always on cu bitmap Alex Deucher
@ 2017-06-22  3:13   ` Flora Cui
       [not found]     ` <1498101191-19634-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
  2 siblings, 1 reply; 16+ messages in thread
From: Flora Cui @ 2017-06-22  3:13 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Flora Cui

v2: keep cu_ao_mask for backward compatibility.

Change-Id: I056d8af23340d46e5140bd10cc38dfb887cc78ab
Signed-off-by: Flora Cui <Flora.Cui@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h     | 7 +++++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 4 +++-
 drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c   | 4 +++-
 drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c   | 4 +++-
 drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c   | 4 +++-
 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c   | 4 +++-
 include/uapi/drm/amdgpu_drm.h           | 3 +++
 8 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 6b7d2a1..6b9a91c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1029,12 +1029,15 @@ struct amdgpu_gfx_config {
 };
 
 struct amdgpu_cu_info {
-	uint32_t number; /* total active CU number */
-	uint32_t ao_cu_mask;
 	uint32_t max_waves_per_simd;
 	uint32_t wave_front_size;
 	uint32_t max_scratch_slots_per_cu;
 	uint32_t lds_size;
+
+	/* total active CU number */
+	uint32_t number;
+	uint32_t ao_cu_mask;
+	uint32_t ao_cu_bitmap[4][4];
 	uint32_t bitmap[4][4];
 };
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 0424711..5a1d794 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -67,9 +67,10 @@
  * - 3.15.0 - Export more gpu info for gfx9
  * - 3.16.0 - Add reserved vmid support
  * - 3.17.0 - Add AMDGPU_NUM_VRAM_CPU_PAGE_FAULTS.
+ * - 3.18.0 - Export gpu always on cu bitmap
  */
 #define KMS_DRIVER_MAJOR	3
-#define KMS_DRIVER_MINOR	17
+#define KMS_DRIVER_MINOR	18
 #define KMS_DRIVER_PATCHLEVEL	0
 
 int amdgpu_vram_limit = 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index f68ced6..eff2e11 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -591,8 +591,10 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
 		dev_info.gart_page_size = AMDGPU_GPU_PAGE_SIZE;
 
 		dev_info.cu_active_number = adev->gfx.cu_info.number;
-		dev_info.cu_ao_mask = adev->gfx.cu_info.ao_cu_mask;
+		dev_info.cu_ao_mask = 0;
 		dev_info.ce_ram_size = adev->gfx.ce_ram_size;
+		memcpy(&dev_info.cu_ao_bitmap[0], &adev->gfx.cu_info.ao_cu_bitmap[0],
+		       sizeof(adev->gfx.cu_info.ao_cu_bitmap));
 		memcpy(&dev_info.cu_bitmap[0], &adev->gfx.cu_info.bitmap[0],
 		       sizeof(adev->gfx.cu_info.bitmap));
 		dev_info.vram_type = adev->mc.vram_type;
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
index 7b0b3cf..5173ca1 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
@@ -3535,7 +3535,9 @@ static void gfx_v6_0_get_cu_info(struct amdgpu_device *adev)
 				mask <<= 1;
 			}
 			active_cu_number += counter;
-			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			if (i < 2 && j < 2)
+				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
 		}
 	}
 
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index fb0a94c..8c4dd7b 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -5427,7 +5427,9 @@ static void gfx_v7_0_get_cu_info(struct amdgpu_device *adev)
 				mask <<= 1;
 			}
 			active_cu_number += counter;
-			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			if (i < 2 && j < 2)
+				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
 		}
 	}
 	gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 1a75ab1..9edb509 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -7080,7 +7080,9 @@ static void gfx_v8_0_get_cu_info(struct amdgpu_device *adev)
 				mask <<= 1;
 			}
 			active_cu_number += counter;
-			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			if (i < 2 && j < 2)
+				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
 		}
 	}
 	gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
index 5d56126..0d6a6d9 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
@@ -4459,7 +4459,9 @@ static int gfx_v9_0_get_cu_info(struct amdgpu_device *adev,
 				mask <<= 1;
 			}
 			active_cu_number += counter;
-			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			if (i < 2 && j < 2)
+				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
+			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
 		}
 	}
 	gfx_v9_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
index 4f34394..d0ee739 100644
--- a/include/uapi/drm/amdgpu_drm.h
+++ b/include/uapi/drm/amdgpu_drm.h
@@ -760,6 +760,7 @@ struct drm_amdgpu_info_device {
 	__u64 max_memory_clock;
 	/* cu information */
 	__u32 cu_active_number;
+	/* NOTE: cu_ao_mask is INVALID, DON'T use it */
 	__u32 cu_ao_mask;
 	__u32 cu_bitmap[4][4];
 	/** Render backend pipe mask. One render backend is CB+DB. */
@@ -814,6 +815,8 @@ struct drm_amdgpu_info_device {
 	/* max gs wavefront per vgt*/
 	__u32 max_gs_waves_per_vgt;
 	__u32 _pad1;
+	/* always on cu bitmap */
+	__u32 cu_ao_bitmap[4][4];
 };
 
 struct drm_amdgpu_info_hw_ip {
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v2] drm/amdgpu: export gpu always on cu bitmap
       [not found]     ` <1498101191-19634-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
@ 2017-06-22  7:37       ` Christian König
  2017-06-22 12:33       ` Deucher, Alexander
  1 sibling, 0 replies; 16+ messages in thread
From: Christian König @ 2017-06-22  7:37 UTC (permalink / raw)
  To: Flora Cui, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Am 22.06.2017 um 05:13 schrieb Flora Cui:
> v2: keep cu_ao_mask for backward compatibility.
>
> Change-Id: I056d8af23340d46e5140bd10cc38dfb887cc78ab
> Signed-off-by: Flora Cui <Flora.Cui@amd.com>

I can't judge the technical correctness, but at least it looks backward 
compatible now.

Patch is Acked-by: Christian König <christian.koenig@amd.com>.

Regards,
Christian.

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu.h     | 7 +++++--
>   drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 ++-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 4 +++-
>   drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c   | 4 +++-
>   drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c   | 4 +++-
>   drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c   | 4 +++-
>   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c   | 4 +++-
>   include/uapi/drm/amdgpu_drm.h           | 3 +++
>   8 files changed, 25 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 6b7d2a1..6b9a91c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1029,12 +1029,15 @@ struct amdgpu_gfx_config {
>   };
>   
>   struct amdgpu_cu_info {
> -	uint32_t number; /* total active CU number */
> -	uint32_t ao_cu_mask;
>   	uint32_t max_waves_per_simd;
>   	uint32_t wave_front_size;
>   	uint32_t max_scratch_slots_per_cu;
>   	uint32_t lds_size;
> +
> +	/* total active CU number */
> +	uint32_t number;
> +	uint32_t ao_cu_mask;
> +	uint32_t ao_cu_bitmap[4][4];
>   	uint32_t bitmap[4][4];
>   };
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 0424711..5a1d794 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -67,9 +67,10 @@
>    * - 3.15.0 - Export more gpu info for gfx9
>    * - 3.16.0 - Add reserved vmid support
>    * - 3.17.0 - Add AMDGPU_NUM_VRAM_CPU_PAGE_FAULTS.
> + * - 3.18.0 - Export gpu always on cu bitmap
>    */
>   #define KMS_DRIVER_MAJOR	3
> -#define KMS_DRIVER_MINOR	17
> +#define KMS_DRIVER_MINOR	18
>   #define KMS_DRIVER_PATCHLEVEL	0
>   
>   int amdgpu_vram_limit = 0;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index f68ced6..eff2e11 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -591,8 +591,10 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
>   		dev_info.gart_page_size = AMDGPU_GPU_PAGE_SIZE;
>   
>   		dev_info.cu_active_number = adev->gfx.cu_info.number;
> -		dev_info.cu_ao_mask = adev->gfx.cu_info.ao_cu_mask;
> +		dev_info.cu_ao_mask = 0;
>   		dev_info.ce_ram_size = adev->gfx.ce_ram_size;
> +		memcpy(&dev_info.cu_ao_bitmap[0], &adev->gfx.cu_info.ao_cu_bitmap[0],
> +		       sizeof(adev->gfx.cu_info.ao_cu_bitmap));
>   		memcpy(&dev_info.cu_bitmap[0], &adev->gfx.cu_info.bitmap[0],
>   		       sizeof(adev->gfx.cu_info.bitmap));
>   		dev_info.vram_type = adev->mc.vram_type;
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> index 7b0b3cf..5173ca1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> @@ -3535,7 +3535,9 @@ static void gfx_v6_0_get_cu_info(struct amdgpu_device *adev)
>   				mask <<= 1;
>   			}
>   			active_cu_number += counter;
> -			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			if (i < 2 && j < 2)
> +				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>   		}
>   	}
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> index fb0a94c..8c4dd7b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> @@ -5427,7 +5427,9 @@ static void gfx_v7_0_get_cu_info(struct amdgpu_device *adev)
>   				mask <<= 1;
>   			}
>   			active_cu_number += counter;
> -			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			if (i < 2 && j < 2)
> +				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>   		}
>   	}
>   	gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> index 1a75ab1..9edb509 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> @@ -7080,7 +7080,9 @@ static void gfx_v8_0_get_cu_info(struct amdgpu_device *adev)
>   				mask <<= 1;
>   			}
>   			active_cu_number += counter;
> -			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			if (i < 2 && j < 2)
> +				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>   		}
>   	}
>   	gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> index 5d56126..0d6a6d9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> @@ -4459,7 +4459,9 @@ static int gfx_v9_0_get_cu_info(struct amdgpu_device *adev,
>   				mask <<= 1;
>   			}
>   			active_cu_number += counter;
> -			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			if (i < 2 && j < 2)
> +				ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>   		}
>   	}
>   	gfx_v9_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
> index 4f34394..d0ee739 100644
> --- a/include/uapi/drm/amdgpu_drm.h
> +++ b/include/uapi/drm/amdgpu_drm.h
> @@ -760,6 +760,7 @@ struct drm_amdgpu_info_device {
>   	__u64 max_memory_clock;
>   	/* cu information */
>   	__u32 cu_active_number;
> +	/* NOTE: cu_ao_mask is INVALID, DON'T use it */
>   	__u32 cu_ao_mask;
>   	__u32 cu_bitmap[4][4];
>   	/** Render backend pipe mask. One render backend is CB+DB. */
> @@ -814,6 +815,8 @@ struct drm_amdgpu_info_device {
>   	/* max gs wavefront per vgt*/
>   	__u32 max_gs_waves_per_vgt;
>   	__u32 _pad1;
> +	/* always on cu bitmap */
> +	__u32 cu_ao_bitmap[4][4];
>   };
>   
>   struct drm_amdgpu_info_hw_ip {


_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH v2] drm/amdgpu: export gpu always on cu bitmap
       [not found]     ` <1498101191-19634-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
  2017-06-22  7:37       ` Christian König
@ 2017-06-22 12:33       ` Deucher, Alexander
  1 sibling, 0 replies; 16+ messages in thread
From: Deucher, Alexander @ 2017-06-22 12:33 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org; +Cc: Cui, Flora

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Flora Cui
> Sent: Wednesday, June 21, 2017 11:13 PM
> To: amd-gfx@lists.freedesktop.org
> Cc: Cui, Flora
> Subject: [PATCH v2] drm/amdgpu: export gpu always on cu bitmap


Tweak the subject and commit message a bit.  Something like:

drm/amdgpu: Fix the exported always on CU bitmap

Newer asics with 4 SEs are not able to fit the entire bitmask in the original field, use
an array instead.

With that,
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

> 
> v2: keep cu_ao_mask for backward compatibility.
> 
> Change-Id: I056d8af23340d46e5140bd10cc38dfb887cc78ab
> Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h     | 7 +++++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 ++-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 4 +++-
>  drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c   | 4 +++-
>  drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c   | 4 +++-
>  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c   | 4 +++-
>  drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c   | 4 +++-
>  include/uapi/drm/amdgpu_drm.h           | 3 +++
>  8 files changed, 25 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 6b7d2a1..6b9a91c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1029,12 +1029,15 @@ struct amdgpu_gfx_config {
>  };
> 
>  struct amdgpu_cu_info {
> -	uint32_t number; /* total active CU number */
> -	uint32_t ao_cu_mask;
>  	uint32_t max_waves_per_simd;
>  	uint32_t wave_front_size;
>  	uint32_t max_scratch_slots_per_cu;
>  	uint32_t lds_size;
> +
> +	/* total active CU number */
> +	uint32_t number;
> +	uint32_t ao_cu_mask;
> +	uint32_t ao_cu_bitmap[4][4];
>  	uint32_t bitmap[4][4];
>  };
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 0424711..5a1d794 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -67,9 +67,10 @@
>   * - 3.15.0 - Export more gpu info for gfx9
>   * - 3.16.0 - Add reserved vmid support
>   * - 3.17.0 - Add AMDGPU_NUM_VRAM_CPU_PAGE_FAULTS.
> + * - 3.18.0 - Export gpu always on cu bitmap
>   */
>  #define KMS_DRIVER_MAJOR	3
> -#define KMS_DRIVER_MINOR	17
> +#define KMS_DRIVER_MINOR	18
>  #define KMS_DRIVER_PATCHLEVEL	0
> 
>  int amdgpu_vram_limit = 0;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index f68ced6..eff2e11 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -591,8 +591,10 @@ static int amdgpu_info_ioctl(struct drm_device
> *dev, void *data, struct drm_file
>  		dev_info.gart_page_size = AMDGPU_GPU_PAGE_SIZE;
> 
>  		dev_info.cu_active_number = adev->gfx.cu_info.number;
> -		dev_info.cu_ao_mask = adev->gfx.cu_info.ao_cu_mask;
> +		dev_info.cu_ao_mask = 0;
>  		dev_info.ce_ram_size = adev->gfx.ce_ram_size;
> +		memcpy(&dev_info.cu_ao_bitmap[0], &adev-
> >gfx.cu_info.ao_cu_bitmap[0],
> +		       sizeof(adev->gfx.cu_info.ao_cu_bitmap));
>  		memcpy(&dev_info.cu_bitmap[0], &adev-
> >gfx.cu_info.bitmap[0],
>  		       sizeof(adev->gfx.cu_info.bitmap));
>  		dev_info.vram_type = adev->mc.vram_type;
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> index 7b0b3cf..5173ca1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
> @@ -3535,7 +3535,9 @@ static void gfx_v6_0_get_cu_info(struct
> amdgpu_device *adev)
>  				mask <<= 1;
>  			}
>  			active_cu_number += counter;
> -			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			if (i < 2 && j < 2)
> +				ao_cu_mask |= (ao_bitmap << (i * 16 + j *
> 8));
> +			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>  		}
>  	}
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> index fb0a94c..8c4dd7b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> @@ -5427,7 +5427,9 @@ static void gfx_v7_0_get_cu_info(struct
> amdgpu_device *adev)
>  				mask <<= 1;
>  			}
>  			active_cu_number += counter;
> -			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			if (i < 2 && j < 2)
> +				ao_cu_mask |= (ao_bitmap << (i * 16 + j *
> 8));
> +			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>  		}
>  	}
>  	gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> index 1a75ab1..9edb509 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> @@ -7080,7 +7080,9 @@ static void gfx_v8_0_get_cu_info(struct
> amdgpu_device *adev)
>  				mask <<= 1;
>  			}
>  			active_cu_number += counter;
> -			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			if (i < 2 && j < 2)
> +				ao_cu_mask |= (ao_bitmap << (i * 16 + j *
> 8));
> +			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>  		}
>  	}
>  	gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> index 5d56126..0d6a6d9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> @@ -4459,7 +4459,9 @@ static int gfx_v9_0_get_cu_info(struct
> amdgpu_device *adev,
>  				mask <<= 1;
>  			}
>  			active_cu_number += counter;
> -			ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
> +			if (i < 2 && j < 2)
> +				ao_cu_mask |= (ao_bitmap << (i * 16 + j *
> 8));
> +			cu_info->ao_cu_bitmap[i][j] = ao_bitmap;
>  		}
>  	}
>  	gfx_v9_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
> diff --git a/include/uapi/drm/amdgpu_drm.h
> b/include/uapi/drm/amdgpu_drm.h
> index 4f34394..d0ee739 100644
> --- a/include/uapi/drm/amdgpu_drm.h
> +++ b/include/uapi/drm/amdgpu_drm.h
> @@ -760,6 +760,7 @@ struct drm_amdgpu_info_device {
>  	__u64 max_memory_clock;
>  	/* cu information */
>  	__u32 cu_active_number;
> +	/* NOTE: cu_ao_mask is INVALID, DON'T use it */
>  	__u32 cu_ao_mask;
>  	__u32 cu_bitmap[4][4];
>  	/** Render backend pipe mask. One render backend is CB+DB. */
> @@ -814,6 +815,8 @@ struct drm_amdgpu_info_device {
>  	/* max gs wavefront per vgt*/
>  	__u32 max_gs_waves_per_vgt;
>  	__u32 _pad1;
> +	/* always on cu bitmap */
> +	__u32 cu_ao_bitmap[4][4];
>  };
> 
>  struct drm_amdgpu_info_hw_ip {
> --
> 2.7.4
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH libdrm] amdgpu: update the exported always on CU bitmap
       [not found]     ` <1497949479-22146-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
  2017-06-20  9:49       ` Christian König
@ 2017-06-26  6:12       ` Flora Cui
  2017-06-26  6:52         ` Michel Dänzer
       [not found]         ` <1498457550-27605-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
  1 sibling, 2 replies; 16+ messages in thread
From: Flora Cui @ 2017-06-26  6:12 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: Flora Cui

keep cu_ao_mask unchanged for backward compatibility.

Change-Id: I9f497aadd309977468e246fea333b392c0150276
Signed-off-by: Flora Cui <Flora.Cui@amd.com>
---
This patch should be landed after the kmd patch upsteam. right?
 amdgpu/amdgpu.h          | 2 ++
 amdgpu/amdgpu_gpu_info.c | 1 +
 include/drm/amdgpu_drm.h | 3 +++
 3 files changed, 6 insertions(+)

diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h
index b6779f9..cc80493 100644
--- a/amdgpu/amdgpu.h
+++ b/amdgpu/amdgpu.h
@@ -486,7 +486,9 @@ struct amdgpu_gpu_info {
 	uint32_t pa_sc_raster_cfg1[4];
 	/* CU info */
 	uint32_t cu_active_number;
+	/* NOTE: cu_ao_mask is INVALID, DON'T use it */
 	uint32_t cu_ao_mask;
+	uint32_t cu_ao_bitmap[4][4];
 	uint32_t cu_bitmap[4][4];
 	/* video memory type info*/
 	uint32_t vram_type;
diff --git a/amdgpu/amdgpu_gpu_info.c b/amdgpu/amdgpu_gpu_info.c
index 34f77be..7a5feb9 100644
--- a/amdgpu/amdgpu_gpu_info.c
+++ b/amdgpu/amdgpu_gpu_info.c
@@ -230,6 +230,7 @@ drm_private int amdgpu_query_gpu_info_init(amdgpu_device_handle dev)
 
 	dev->info.cu_active_number = dev->dev_info.cu_active_number;
 	dev->info.cu_ao_mask = dev->dev_info.cu_ao_mask;
+	memcpy(&dev->info.cu_ao_bitmap[0][0], &dev->dev_info.cu_ao_bitmap[0][0], sizeof(dev->info.cu_ao_bitmap));
 	memcpy(&dev->info.cu_bitmap[0][0], &dev->dev_info.cu_bitmap[0][0], sizeof(dev->info.cu_bitmap));
 
 	/* TODO: info->max_quad_shader_pipes is not set */
diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
index df250de..05c4e72 100644
--- a/include/drm/amdgpu_drm.h
+++ b/include/drm/amdgpu_drm.h
@@ -832,6 +832,7 @@ struct drm_amdgpu_info_device {
 	__u64 max_memory_clock;
 	/* cu information */
 	__u32 cu_active_number;
+	/* NOTE: cu_ao_mask is INVALID, DON'T use it */
 	__u32 cu_ao_mask;
 	__u32 cu_bitmap[4][4];
 	/** Render backend pipe mask. One render backend is CB+DB. */
@@ -886,6 +887,8 @@ struct drm_amdgpu_info_device {
 	/* max gs wavefront per vgt*/
 	__u32 max_gs_waves_per_vgt;
 	__u32 _pad1;
+	/* always on cu bitmap */
+	__u32 cu_ao_bitmap[4][4];
 };
 
 struct drm_amdgpu_info_hw_ip {
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH libdrm] amdgpu: update the exported always on CU bitmap
  2017-06-26  6:12       ` [PATCH libdrm] amdgpu: update the exported always on CU bitmap Flora Cui
@ 2017-06-26  6:52         ` Michel Dänzer
       [not found]         ` <1498457550-27605-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
  1 sibling, 0 replies; 16+ messages in thread
From: Michel Dänzer @ 2017-06-26  6:52 UTC (permalink / raw)
  To: Flora Cui; +Cc: dri-devel, amd-gfx

On 26/06/17 03:12 PM, Flora Cui wrote:
> keep cu_ao_mask unchanged for backward compatibility.
> 
> Change-Id: I9f497aadd309977468e246fea333b392c0150276
> Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> ---
> This patch should be landed after the kmd patch upsteam. right?

Right. Also, include/drm/amdgpu_drm.h should be updated in a separate
patch, see  include/drm/README (in particular the "When and how to
update these files").


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH libdrm] amdgpu: update the exported always on CU bitmap
       [not found]         ` <1498457550-27605-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
@ 2017-06-26  7:15           ` Christian König
  0 siblings, 0 replies; 16+ messages in thread
From: Christian König @ 2017-06-26  7:15 UTC (permalink / raw)
  To: Flora Cui, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Am 26.06.2017 um 08:12 schrieb Flora Cui:
> keep cu_ao_mask unchanged for backward compatibility.
>
> Change-Id: I9f497aadd309977468e246fea333b392c0150276
> Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> ---
> This patch should be landed after the kmd patch upsteam. right?

In general yes, but this patch is a NAK as well.

>   amdgpu/amdgpu.h          | 2 ++
>   amdgpu/amdgpu_gpu_info.c | 1 +
>   include/drm/amdgpu_drm.h | 3 +++
>   3 files changed, 6 insertions(+)
>
> diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h
> index b6779f9..cc80493 100644
> --- a/amdgpu/amdgpu.h
> +++ b/amdgpu/amdgpu.h
> @@ -486,7 +486,9 @@ struct amdgpu_gpu_info {
>   	uint32_t pa_sc_raster_cfg1[4];
>   	/* CU info */
>   	uint32_t cu_active_number;
> +	/* NOTE: cu_ao_mask is INVALID, DON'T use it */
>   	uint32_t cu_ao_mask;
> +	uint32_t cu_ao_bitmap[4][4];
>   	uint32_t cu_bitmap[4][4];

You can't change the amdgpu_gpu_info structure here for the same reasons 
you can't change the kernel interface.

Even worse in oposite to the kernel interface this structure isn't 
versionized, so you can't change it at all.

I suggest that we deprecate amdgpu_gpu_info and clients just call the 
appropriate info query directly.

Regards,
Christian.

>   	/* video memory type info*/
>   	uint32_t vram_type;
> diff --git a/amdgpu/amdgpu_gpu_info.c b/amdgpu/amdgpu_gpu_info.c
> index 34f77be..7a5feb9 100644
> --- a/amdgpu/amdgpu_gpu_info.c
> +++ b/amdgpu/amdgpu_gpu_info.c
> @@ -230,6 +230,7 @@ drm_private int amdgpu_query_gpu_info_init(amdgpu_device_handle dev)
>   
>   	dev->info.cu_active_number = dev->dev_info.cu_active_number;
>   	dev->info.cu_ao_mask = dev->dev_info.cu_ao_mask;
> +	memcpy(&dev->info.cu_ao_bitmap[0][0], &dev->dev_info.cu_ao_bitmap[0][0], sizeof(dev->info.cu_ao_bitmap));
>   	memcpy(&dev->info.cu_bitmap[0][0], &dev->dev_info.cu_bitmap[0][0], sizeof(dev->info.cu_bitmap));
>   
>   	/* TODO: info->max_quad_shader_pipes is not set */
> diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
> index df250de..05c4e72 100644
> --- a/include/drm/amdgpu_drm.h
> +++ b/include/drm/amdgpu_drm.h
> @@ -832,6 +832,7 @@ struct drm_amdgpu_info_device {
>   	__u64 max_memory_clock;
>   	/* cu information */
>   	__u32 cu_active_number;
> +	/* NOTE: cu_ao_mask is INVALID, DON'T use it */
>   	__u32 cu_ao_mask;
>   	__u32 cu_bitmap[4][4];
>   	/** Render backend pipe mask. One render backend is CB+DB. */
> @@ -886,6 +887,8 @@ struct drm_amdgpu_info_device {
>   	/* max gs wavefront per vgt*/
>   	__u32 max_gs_waves_per_vgt;
>   	__u32 _pad1;
> +	/* always on cu bitmap */
> +	__u32 cu_ao_bitmap[4][4];
>   };
>   
>   struct drm_amdgpu_info_hw_ip {


_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2017-06-26  7:15 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-20  8:15 [PATCH] drm/amdgpu: export gpu always on cu bitmap Flora Cui
     [not found] ` <1497946521-21500-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
2017-06-20  9:04   ` [PATCH libdrm] amdgpu: update " Flora Cui
     [not found]     ` <1497949479-22146-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
2017-06-20  9:49       ` Christian König
     [not found]         ` <75494a7b-0ee1-b8e4-9b5e-a82bfeb0d1bb-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
2017-06-20 10:13           ` Daniel Vetter
2017-06-21  2:13           ` Flora Cui
2017-06-21  7:08             ` Daniel Vetter
2017-06-26  6:12       ` [PATCH libdrm] amdgpu: update the exported always on CU bitmap Flora Cui
2017-06-26  6:52         ` Michel Dänzer
     [not found]         ` <1498457550-27605-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
2017-06-26  7:15           ` Christian König
2017-06-20 14:47   ` [PATCH] drm/amdgpu: export gpu always on cu bitmap Alex Deucher
     [not found]     ` <CADnq5_PQcrNDSHeJyWr=401vn_EKc6i7+Lk+8jUfWfC1H4_EWA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-06-21  7:42       ` Flora Cui
2017-06-21  8:32         ` Christian König
2017-06-21 15:36         ` Deucher, Alexander
2017-06-22  3:13   ` [PATCH v2] " Flora Cui
     [not found]     ` <1498101191-19634-1-git-send-email-Flora.Cui-5C7GfCeVMHo@public.gmane.org>
2017-06-22  7:37       ` Christian König
2017-06-22 12:33       ` Deucher, Alexander

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.