[Intel-gfx] [PATCH i-g-t 7/7] tools/intel_watermark: Try not to dump nonexistent planes on SKL+

Pandiyan, Dhinakaran dhinakaran.pandiyan at intel.com
Tue Nov 21 00:50:51 UTC 2017




On Fri, 2017-09-15 at 20:57 +0300, Ville Syrjala wrote:
> From: Dhinakaran Pandiyan <dhinakaran.pandiyan at intel.com>

This should be yours :)

> 
> Having registers for nonexistent planes in the dumpo might end up being
> rather confusing. Try to only include real planes.
> 


Thanks for resubmitting 3/7 and the cleanups.

One nit, this patch leaves a hard-coded line that looks ugly on SKL.
"printf("LEVEL   CURSOR   PLANE_1   PLANE_2   PLANE_3   PLANE_4\n");"


Btw, I notice a possibly spurious watermark level for plane 3, pipe A on
my SKL even when the display is off.

LINETIME: 0 (0.000 usec)
LEVEL   CURSOR   PLANE_1   PLANE_2   PLANE_3   PLANE_4
    0    0 ( 0)    0 ( 0)    0 ( 0)    7 ( 1)
    1    0 ( 0)    0 ( 0)    0 ( 0)    7 ( 1)
    2    0 ( 0)    0 ( 0)    0 ( 0)    7 ( 1)
    3    0 ( 0)    0 ( 0)    0 ( 0)    7 ( 1)
    4    0 ( 0)    0 ( 0)    0 ( 0)    7 ( 1)
    5    0 ( 0)    0 ( 0)    0 ( 0)    7 ( 1)
    6    0 ( 0)    0 ( 0)    0 ( 0)    7 ( 1)
    7    0 ( 0)    0 ( 0)    0 ( 0)    7 ( 1)
TRANS:   0 ( 0)    0 ( 0)    0 ( 0)    7 ( 1)


The series lgtm, 
Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan at intel.com> for all
patches except 3/7, which I've partially authored.


> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>  tools/intel_watermark.c | 40 +++++++++++++++++++++++++++++++++-------
>  1 file changed, 33 insertions(+), 7 deletions(-)
> 
> diff --git a/tools/intel_watermark.c b/tools/intel_watermark.c
> index ce920192295b..d81e95771efb 100644
> --- a/tools/intel_watermark.c
> +++ b/tools/intel_watermark.c
> @@ -135,23 +135,42 @@ static int is_hsw_plus(uint32_t d)
>  	return !(IS_GEN5(d) || IS_GEN6(d) || IS_IVYBRIDGE(d));
>  }
>  
> +static int skl_num_planes(uint32_t d, int pipe)
> +{
> +	if (IS_GEN10(d) || IS_GEMINILAKE(d))
> +		return 5;
> +	else if (IS_BROXTON(d))
> +		return pipe == 2 ? 4 : 5;
> +	else
> +		return 4;
> +}
> +
> +static int skl_max_planes(uint32_t d)
> +{
> +	if (IS_GEN10(d) || IS_GEMINILAKE(d) || IS_BROXTON(d))
> +		return 5;
> +	else
> +		return 4;
> +}
>  
>  static void skl_wm_dump(void)
>  {
>  	int pipe, plane, level;
>  	int num_pipes = 3;
> -	int num_planes = 5;
> +	int max_planes = skl_max_planes(devid);
>  	int num_levels = 8;
>  	uint32_t base_addr = 0x70000, addr, wm_offset;
> -	uint32_t wm[num_levels][num_pipes][num_planes];
> -	uint32_t wm_trans[num_pipes][num_planes];
> -	uint32_t buf_cfg[num_pipes][num_planes];
> +	uint32_t wm[num_levels][num_pipes][max_planes];
> +	uint32_t wm_trans[num_pipes][max_planes];
> +	uint32_t buf_cfg[num_pipes][max_planes];
>  	uint32_t wm_linetime[num_pipes];
>  	char reg_name[20];
>  
>  	intel_register_access_init(intel_get_pci_device(), 0, drm_fd);
>  
>  	for (pipe = 0; pipe < num_pipes; pipe++) {
> +		int num_planes = skl_num_planes(devid, pipe);
> +
>  		wm_linetime[pipe] = read_reg(0x45270 + pipe * 0x4);
>  
>  		for (plane = 0; plane < num_planes; plane++) {
> @@ -173,9 +192,11 @@ static void skl_wm_dump(void)
>  	}
>  	printf("\n\n");
>  
> -	for (plane = 0; plane < num_planes; plane++) {
> +	for (plane = 0; plane < max_planes; plane++) {
>  		for (level = 0; level < num_levels; level++) {
>  			for (pipe = 0; pipe < num_pipes; pipe++) {
> +				if (plane >= skl_num_planes(devid, pipe))
> +					break;
>  				if (plane == 0)
>  					snprintf(reg_name, sizeof(reg_name), "CUR_WM_%c_%1d",
>  						 pipe_name(pipe), level);
> @@ -190,8 +211,10 @@ static void skl_wm_dump(void)
>  		printf("\n");
>  	}
>  
> -	for (plane = 0; plane < num_planes; plane++) {
> +	for (plane = 0; plane < max_planes; plane++) {
>  		for (pipe = 0; pipe < num_pipes; pipe++) {
> +			if (plane >= skl_num_planes(devid, pipe))
> +				break;
>  			if (plane == 0)
>  				snprintf(reg_name, sizeof(reg_name), "CUR_WM_TRANS_%c",
>  					 pipe_name(pipe));
> @@ -205,8 +228,10 @@ static void skl_wm_dump(void)
>  	}
>  	printf("\n");
>  
> -	for (plane = 0; plane < num_planes; plane++) {
> +	for (plane = 0; plane < max_planes; plane++) {
>  		for (pipe = 0; pipe < num_pipes; pipe++) {
> +			if (plane >= skl_num_planes(devid, pipe))
> +				break;
>  			if (plane == 0)
>  				snprintf(reg_name, sizeof(reg_name), "CUR_BUF_CFG_%c",
>  					 pipe_name(pipe));
> @@ -224,6 +249,7 @@ static void skl_wm_dump(void)
>  		uint32_t start, end, size;
>  		uint32_t lines, blocks, enable;
>  		uint32_t linetime;
> +		int num_planes = skl_num_planes(devid, pipe);
>  
>  		printf("PIPE_%c\n", pipe_name(pipe));
>  









More information about the Intel-gfx mailing list