All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jerome Glisse <j.glisse@gmail.com>
To: "Christian König" <deathsimple@vodafone.de>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 3/4] drm/radeon: also make the cs_parse function per ring
Date: Fri, 24 Feb 2012 12:14:27 -0500	[thread overview]
Message-ID: <1330103667.2133.2.camel@localhost.localdomain> (raw)
In-Reply-To: <1330006725-2373-3-git-send-email-deathsimple@vodafone.de>

On Thu, 2012-02-23 at 15:18 +0100, Christian König wrote:
> Not all rings use PM4, so the cs_parser also needs to be per ring.
> 
> Signed-off-by: Christian König <deathsimple@vodafone.de>

Reviewed-by: Jerome Glisse <jglisse@redhat.com>

> ---
>  drivers/gpu/drm/radeon/radeon.h      |    4 +-
>  drivers/gpu/drm/radeon/radeon_asic.c |   38 +++++++++++++++++----------------
>  drivers/gpu/drm/radeon/radeon_cs.c   |    2 +-
>  3 files changed, 23 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index 4c1b981..ca98772 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -1147,13 +1147,13 @@ struct radeon_asic {
>  		void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence);
>  		void (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp,
>  				       struct radeon_semaphore *semaphore, bool emit_wait);
> +		int (*cs_parse)(struct radeon_cs_parser *p);
>  	} ring[RADEON_NUM_RINGS];
>  
>  	int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp);
>  	int (*irq_set)(struct radeon_device *rdev);
>  	int (*irq_process)(struct radeon_device *rdev);
>  	u32 (*get_vblank_counter)(struct radeon_device *rdev, int crtc);
> -	int (*cs_parse)(struct radeon_cs_parser *p);
>  	int (*copy_blit)(struct radeon_device *rdev,
>  			 uint64_t src_offset,
>  			 uint64_t dst_offset,
> @@ -1650,7 +1650,7 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v);
>  #define radeon_fini(rdev) (rdev)->asic->fini((rdev))
>  #define radeon_resume(rdev) (rdev)->asic->resume((rdev))
>  #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev))
> -#define radeon_cs_parse(p) rdev->asic->cs_parse((p))
> +#define radeon_cs_parse(rdev, r, p) (rdev)->asic->ring[(r)].cs_parse((p))
>  #define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state))
>  #define radeon_gpu_is_lockup(rdev, cp) (rdev)->asic->gpu_is_lockup((rdev), (cp))
>  #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev))
> diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
> index 36a6192..636c68f 100644
> --- a/drivers/gpu/drm/radeon/radeon_asic.c
> +++ b/drivers/gpu/drm/radeon/radeon_asic.c
> @@ -145,12 +145,12 @@ static struct radeon_asic r100_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r100_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r100_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r100_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r100_copy_blit,
> @@ -197,12 +197,12 @@ static struct radeon_asic r200_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r100_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r100_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r100_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -248,12 +248,12 @@ static struct radeon_asic r300_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -300,12 +300,12 @@ static struct radeon_asic r300_asic_pcie = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -351,12 +351,12 @@ static struct radeon_asic r420_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -403,12 +403,12 @@ static struct radeon_asic rs400_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -455,12 +455,12 @@ static struct radeon_asic rs600_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &rs600_irq_set,
>  	.irq_process = &rs600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -507,12 +507,12 @@ static struct radeon_asic rs690_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &rs600_irq_set,
>  	.irq_process = &rs600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r200_copy_dma,
> @@ -559,12 +559,12 @@ static struct radeon_asic rv515_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &rs600_irq_set,
>  	.irq_process = &rs600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -611,12 +611,12 @@ static struct radeon_asic r520_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &rs600_irq_set,
>  	.irq_process = &rs600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -662,12 +662,12 @@ static struct radeon_asic r600_asic = {
>  			.ib_execute = &r600_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &r600_cs_parse,
>  		}
>  	},
>  	.irq_set = &r600_irq_set,
>  	.irq_process = &r600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r600_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -713,12 +713,12 @@ static struct radeon_asic rs780_asic = {
>  			.ib_execute = &r600_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &r600_cs_parse,
>  		}
>  	},
>  	.irq_set = &r600_irq_set,
>  	.irq_process = &r600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r600_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -764,12 +764,12 @@ static struct radeon_asic rv770_asic = {
>  			.ib_execute = &r600_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &r600_cs_parse,
>  		}
>  	},
>  	.irq_set = &r600_irq_set,
>  	.irq_process = &r600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r600_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -815,12 +815,12 @@ static struct radeon_asic evergreen_asic = {
>  			.ib_execute = &evergreen_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &evergreen_cs_parse,
>  		}
>  	},
>  	.irq_set = &evergreen_irq_set,
>  	.irq_process = &evergreen_irq_process,
>  	.get_vblank_counter = &evergreen_get_vblank_counter,
> -	.cs_parse = &evergreen_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -866,12 +866,12 @@ static struct radeon_asic sumo_asic = {
>  			.ib_execute = &evergreen_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> -		}
> +			.cs_parse = &evergreen_cs_parse,
> +		},
>  	},
>  	.irq_set = &evergreen_irq_set,
>  	.irq_process = &evergreen_irq_process,
>  	.get_vblank_counter = &evergreen_get_vblank_counter,
> -	.cs_parse = &evergreen_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -917,12 +917,12 @@ static struct radeon_asic btc_asic = {
>  			.ib_execute = &evergreen_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &evergreen_cs_parse,
>  		}
>  	},
>  	.irq_set = &evergreen_irq_set,
>  	.irq_process = &evergreen_irq_process,
>  	.get_vblank_counter = &evergreen_get_vblank_counter,
> -	.cs_parse = &evergreen_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -979,24 +979,26 @@ static struct radeon_asic cayman_asic = {
>  			.ib_parse = &evergreen_ib_parse,
>  			.emit_fence = &cayman_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &evergreen_cs_parse,
>  		},
>  		[CAYMAN_RING_TYPE_CP1_INDEX] = {
>  			.ib_execute = &cayman_ring_ib_execute,
>  			.ib_parse = &evergreen_ib_parse,
>  			.emit_fence = &cayman_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &evergreen_cs_parse,
>  		},
>  		[CAYMAN_RING_TYPE_CP2_INDEX] = {
>  			.ib_execute = &cayman_ring_ib_execute,
>  			.ib_parse = &evergreen_ib_parse,
>  			.emit_fence = &cayman_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &evergreen_cs_parse,
>  		}
>  	},
>  	.irq_set = &evergreen_irq_set,
>  	.irq_process = &evergreen_irq_process,
>  	.get_vblank_counter = &evergreen_get_vblank_counter,
> -	.cs_parse = &evergreen_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
> index 7fd0987..dc79d08 100644
> --- a/drivers/gpu/drm/radeon/radeon_cs.c
> +++ b/drivers/gpu/drm/radeon/radeon_cs.c
> @@ -348,7 +348,7 @@ static int radeon_cs_ib_chunk(struct radeon_device *rdev,
>  		return r;
>  	}
>  	parser->ib->length_dw = ib_chunk->length_dw;
> -	r = radeon_cs_parse(parser);
> +	r = radeon_cs_parse(rdev, parser->ring, parser);
>  	if (r || parser->parser_error) {
>  		DRM_ERROR("Invalid command stream !\n");
>  		return r;


_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2012-02-24 17:14 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-23 14:18 [PATCH 1/4] drm/radeon: move ring syncing after bo validation Christian König
2012-02-23 14:18 ` [PATCH 2/4] drm/radeon/kms: no need to align IB like this Christian König
2012-02-23 17:00   ` Jerome Glisse
2012-02-23 18:19     ` Christian König
2012-02-23 14:18 ` [PATCH 3/4] drm/radeon: also make the cs_parse function per ring Christian König
2012-02-24 17:14   ` Jerome Glisse [this message]
2012-02-23 14:18 ` [PATCH 4/4] drm/radeon: fix IB debugfs files for multiple cards Christian König
2012-02-23 15:17 ` [PATCH 1/4] drm/radeon: move ring syncing after bo validation Alex Deucher
2012-02-24 17:15   ` Jerome Glisse
2012-02-23 17:05 ` Mathias Fröhlich
2012-02-23 17:32   ` Jerome Glisse
2012-02-23 18:27     ` Christian König

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1330103667.2133.2.camel@localhost.localdomain \
    --to=j.glisse@gmail.com \
    --cc=deathsimple@vodafone.de \
    --cc=dri-devel@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.