<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">That is perfectly fine as long as you
add the code using it in the same set of patches.<br>
<br>
What we should avoid is adding a lot of code and then not using
for for quite some time, that get certainly removed sooner or
later.<br>
<br>
Regards,<br>
Christian.<br>
<br>
Am 16.01.2017 um 09:20 schrieb Liu, Monk:<br>
</div>
<blockquote
cite="mid:BY2PR1201MB111021CE95196ED42C7694E4847D0@BY2PR1201MB1110.namprd12.prod.outlook.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
<meta content="text/html; charset=UTF-8">
<style type="text/css" style="">
<!--
p
{margin-top:0;
margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="x_divtagdefaultwrapper" dir="ltr"
style="font-size:12pt; color:#000000;
font-family:Calibri,Arial,Helvetica,sans-serif">
<p>if ring_write_multiple is organized in a separate patch,
doesn't it introduces an function that no client using it ??</p>
<p><br>
</p>
<p>fine by me although ...<br>
</p>
<p><br>
</p>
<p>BR Monk<br>
</p>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font style="font-size:11pt"
color="#000000" face="Calibri, sans-serif"><b>发件人:</b>
Christian König <a class="moz-txt-link-rfc2396E" href="mailto:deathsimple@vodafone.de"><deathsimple@vodafone.de></a><br>
<b>发送时间:</b> 2017年1月12日 20:27:48<br>
<b>收件人:</b> Liu, Monk; <a class="moz-txt-link-abbreviated" href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a><br>
<b>主题:</b> Re: [PATCH 2/3] drm/amdgpu:implement META-DATA
write routines</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">Am 12.01.2017 um 08:41 schrieb Monk
Liu:<br>
> Change-Id: I66007a7f7e4e27fb129121f36143dce3cfb43738<br>
> Signed-off-by: Monk Liu <a class="moz-txt-link-rfc2396E" href="mailto:Monk.Liu@amd.com"><Monk.Liu@amd.com></a><br>
> ---<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 31
++++++++++++++++++<br>
> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 61
+++++++++++++++++++++++++++++++++++<br>
> 2 files changed, 92 insertions(+)<br>
><br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
> index e9983fb..2039da7 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
> @@ -1599,6 +1599,37 @@ static inline void
amdgpu_ring_write(struct amdgpu_ring *ring, uint32_t v)<br>
> ring->count_dw--;<br>
> }<br>
> <br>
> +static inline void amdgpu_ring_write_multiple(struct
amdgpu_ring *ring, void *src, int count_dw)<br>
> +{<br>
> + unsigned occupied, chunk1, chunk2;<br>
> + void *dst;<br>
> +<br>
> + if (ring->count_dw < count_dw)<br>
> + DRM_ERROR("amdgpu: writing more dwords to
the ring than expected!\n");<br>
> + else {<br>
<br>
Coding style says when either the "if" or the "else" branch
uses "{" and <br>
"}" both should use them.<br>
<br>
I think even better would be to use a return statement in
the "if", <br>
cause this is just checking the prerequisites for errors.<br>
<br>
Additional to that adding this function should be a separate
patch.<br>
<br>
Christian.<br>
<br>
> + occupied = ring->wptr &
ring->ptr_mask;<br>
> + dst = (void
*)&ring->ring[occupied];<br>
> + chunk1 = ring->ptr_mask + 1 -
occupied;<br>
> + chunk1 = (chunk1 >= count_dw) ?
count_dw: chunk1;<br>
> + chunk2 = count_dw - chunk1;<br>
> + chunk1 <<= 2;<br>
> + chunk2 <<= 2;<br>
> + if (chunk1) {<br>
> + memcpy(dst, src, chunk1);<br>
> + }<br>
> +<br>
> + if (chunk2) {<br>
> + src += chunk1;<br>
> + dst = (void *)ring->ring;<br>
> + memcpy(dst, src, chunk2);<br>
> + }<br>
> +<br>
> + ring->wptr += count_dw;<br>
> + ring->wptr &= ring->ptr_mask;<br>
> + ring->count_dw -= count_dw;<br>
> + }<br>
> +}<br>
> +<br>
> static inline struct amdgpu_sdma_instance *<br>
> amdgpu_get_sdma_instance(struct amdgpu_ring *ring)<br>
> {<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c<br>
> index 375784d..3e8cff3 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c<br>
> @@ -657,6 +657,8 @@ static void
gfx_v8_0_set_gds_init(struct amdgpu_device *adev);<br>
> static void gfx_v8_0_set_rlc_funcs(struct
amdgpu_device *adev);<br>
> static u32 gfx_v8_0_get_csb_size(struct amdgpu_device
*adev);<br>
> static void gfx_v8_0_get_cu_info(struct amdgpu_device
*adev);<br>
> +static void gfx_v8_0_ring_emit_ce_meta_init(struct
amdgpu_ring *ring, uint64_t addr);<br>
> +static void gfx_v8_0_ring_emit_de_meta_init(struct
amdgpu_ring *ring, uint64_t addr);<br>
> <br>
> static void gfx_v8_0_init_golden_registers(struct
amdgpu_device *adev)<br>
> {<br>
> @@ -7212,3 +7214,62 @@ const struct
amdgpu_ip_block_version gfx_v8_1_ip_block =<br>
> .rev = 0,<br>
> .funcs = &gfx_v8_0_ip_funcs,<br>
> };<br>
> +<br>
> +static void gfx_v8_0_ring_emit_ce_meta_init(struct
amdgpu_ring *ring, uint64_t csa_addr)<br>
> +{<br>
> + uint64_t ce_payload_addr;<br>
> + int cnt_ce;<br>
> + static union {<br>
> + struct amdgpu_ce_ib_state regular;<br>
> + struct amdgpu_ce_ib_state_chained_ib
chained;<br>
> + } ce_payload = {0};<br>
> +<br>
> + if (ring->adev->virt.chained_ib_support) {<br>
> + ce_payload_addr = csa_addr +
offsetof(struct amdgpu_gfx_meta_data_chained_ib,
ce_payload);<br>
> + cnt_ce = (sizeof(ce_payload.chained)
>> 2) + 4 - 2;<br>
> + } else {<br>
> + ce_payload_addr = csa_addr +
offsetof(struct amdgpu_gfx_meta_data, ce_payload);<br>
> + cnt_ce = (sizeof(ce_payload.regular)
>> 2) + 4 - 2;<br>
> + }<br>
> +<br>
> + amdgpu_ring_write(ring,
PACKET3(PACKET3_WRITE_DATA, cnt_ce));<br>
> + amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(2)
|<br>
> + WRITE_DATA_DST_SEL(8) |<br>
> + WR_CONFIRM) |<br>
> +
WRITE_DATA_CACHE_POLICY(0));<br>
> + amdgpu_ring_write(ring,
lower_32_bits(ce_payload_addr));<br>
> + amdgpu_ring_write(ring,
upper_32_bits(ce_payload_addr));<br>
> + amdgpu_ring_write_multiple(ring, (void
*)&ce_payload, cnt_ce - 2);<br>
> +}<br>
> +<br>
> +static void gfx_v8_0_ring_emit_de_meta_init(struct
amdgpu_ring *ring, uint64_t csa_addr)<br>
> +{<br>
> + uint64_t de_payload_addr, gds_addr;<br>
> + int cnt_de;<br>
> + static union {<br>
> + struct amdgpu_de_ib_state regular;<br>
> + struct amdgpu_de_ib_state_chained_ib
chained;<br>
> + } de_payload = {0};<br>
> +<br>
> + gds_addr = csa_addr + 4096;<br>
> + if (ring->adev->virt.chained_ib_support) {<br>
> + de_payload.chained.gds_backup_addrlo =
lower_32_bits(gds_addr);<br>
> + de_payload.chained.gds_backup_addrhi =
upper_32_bits(gds_addr);<br>
> + de_payload_addr = csa_addr +
offsetof(struct amdgpu_gfx_meta_data_chained_ib,
de_payload);<br>
> + cnt_de = (sizeof(de_payload.chained)
>> 2) + 4 - 2;<br>
> + } else {<br>
> + de_payload.regular.gds_backup_addrlo =
lower_32_bits(gds_addr);<br>
> + de_payload.regular.gds_backup_addrhi =
upper_32_bits(gds_addr);<br>
> + de_payload_addr = csa_addr +
offsetof(struct amdgpu_gfx_meta_data, de_payload);<br>
> + cnt_de = (sizeof(de_payload.regular)
>> 2) + 4 - 2;<br>
> + }<br>
> +<br>
> + amdgpu_ring_write(ring,
PACKET3(PACKET3_WRITE_DATA, cnt_de));<br>
> + amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(1)
|<br>
> + WRITE_DATA_DST_SEL(8) |<br>
> + WR_CONFIRM) |<br>
> +
WRITE_DATA_CACHE_POLICY(0));<br>
> + amdgpu_ring_write(ring,
lower_32_bits(de_payload_addr));<br>
> + amdgpu_ring_write(ring,
upper_32_bits(de_payload_addr));<br>
> + amdgpu_ring_write_multiple(ring, (void
*)&de_payload, cnt_de - 2);<br>
> +}<br>
<br>
<br>
</div>
</span></font>
</blockquote>
<p><br>
</p>
</body>
</html>