Skip to content

Commit b43f0fc

Browse files
mwajdeczdanvet
authored andcommitted
drm/i915/guc: Replace CTB array with explicit members
Upcoming GuC firmware will always require just two CTBs and we also plan to configure them with different sizes, so definining them as array is no longer suitable. v2: Use %p for ptrdiff print v3: Use %tx for ptrdiff print Signed-off-by: Michal Wajdeczko <[email protected]> Signed-off-by: Matthew Brost <[email protected]> Reviewed-by: Matthew Brost <[email protected]> Reported-by: kernel test robot <[email protected]> Signed-off-by: Daniel Vetter <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 480c6fe commit b43f0fc

File tree

2 files changed

+30
-23
lines changed

2 files changed

+30
-23
lines changed

drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,10 @@ int intel_guc_ct_init(struct intel_guc_ct *ct)
168168
struct intel_guc *guc = ct_to_guc(ct);
169169
struct guc_ct_buffer_desc *desc;
170170
u32 blob_size;
171+
u32 cmds_size;
171172
void *blob;
172173
u32 *cmds;
173174
int err;
174-
int i;
175175

176176
GEM_BUG_ON(ct->vma);
177177

@@ -207,15 +207,23 @@ int intel_guc_ct_init(struct intel_guc_ct *ct)
207207

208208
CT_DEBUG(ct, "base=%#x size=%u\n", intel_guc_ggtt_offset(guc, ct->vma), blob_size);
209209

210-
/* store pointers to desc and cmds */
211-
for (i = 0; i < ARRAY_SIZE(ct->ctbs); i++) {
212-
GEM_BUG_ON((i != CTB_SEND) && (i != CTB_RECV));
210+
/* store pointers to desc and cmds for send ctb */
211+
desc = blob;
212+
cmds = blob + PAGE_SIZE / 2;
213+
cmds_size = PAGE_SIZE / 4;
214+
CT_DEBUG(ct, "%s desc %#tx cmds %#tx size %u\n", "send",
215+
ptrdiff(desc, blob), ptrdiff(cmds, blob), cmds_size);
213216

214-
desc = blob + PAGE_SIZE / 4 * i;
215-
cmds = blob + PAGE_SIZE / 4 * i + PAGE_SIZE / 2;
217+
guc_ct_buffer_init(&ct->ctbs.send, desc, cmds, cmds_size);
216218

217-
guc_ct_buffer_init(&ct->ctbs[i], desc, cmds, PAGE_SIZE / 4);
218-
}
219+
/* store pointers to desc and cmds for recv ctb */
220+
desc = blob + PAGE_SIZE / 4;
221+
cmds = blob + PAGE_SIZE / 4 + PAGE_SIZE / 2;
222+
cmds_size = PAGE_SIZE / 4;
223+
CT_DEBUG(ct, "%s desc %#tx cmds %#tx size %u\n", "recv",
224+
ptrdiff(desc, blob), ptrdiff(cmds, blob), cmds_size);
225+
226+
guc_ct_buffer_init(&ct->ctbs.recv, desc, cmds, cmds_size);
219227

220228
return 0;
221229
}
@@ -246,7 +254,6 @@ int intel_guc_ct_enable(struct intel_guc_ct *ct)
246254
u32 base, cmds;
247255
void *blob;
248256
int err;
249-
int i;
250257

251258
GEM_BUG_ON(ct->enabled);
252259

@@ -257,28 +264,25 @@ int intel_guc_ct_enable(struct intel_guc_ct *ct)
257264

258265
/* blob should start with send descriptor */
259266
blob = __px_vaddr(ct->vma->obj);
260-
GEM_BUG_ON(blob != ct->ctbs[CTB_SEND].desc);
267+
GEM_BUG_ON(blob != ct->ctbs.send.desc);
261268

262269
/* (re)initialize descriptors */
263-
for (i = 0; i < ARRAY_SIZE(ct->ctbs); i++) {
264-
GEM_BUG_ON((i != CTB_SEND) && (i != CTB_RECV));
270+
cmds = base + ptrdiff(ct->ctbs.send.cmds, blob);
271+
guc_ct_buffer_reset(&ct->ctbs.send, cmds);
265272

266-
cmds = base + ptrdiff(ct->ctbs[i].cmds, blob);
267-
CT_DEBUG(ct, "%d: cmds addr=%#x\n", i, cmds);
268-
269-
guc_ct_buffer_reset(&ct->ctbs[i], cmds);
270-
}
273+
cmds = base + ptrdiff(ct->ctbs.recv.cmds, blob);
274+
guc_ct_buffer_reset(&ct->ctbs.recv, cmds);
271275

272276
/*
273277
* Register both CT buffers starting with RECV buffer.
274278
* Descriptors are in first half of the blob.
275279
*/
276-
err = ct_register_buffer(ct, base + ptrdiff(ct->ctbs[CTB_RECV].desc, blob),
280+
err = ct_register_buffer(ct, base + ptrdiff(ct->ctbs.recv.desc, blob),
277281
INTEL_GUC_CT_BUFFER_TYPE_RECV);
278282
if (unlikely(err))
279283
goto err_out;
280284

281-
err = ct_register_buffer(ct, base + ptrdiff(ct->ctbs[CTB_SEND].desc, blob),
285+
err = ct_register_buffer(ct, base + ptrdiff(ct->ctbs.send.desc, blob),
282286
INTEL_GUC_CT_BUFFER_TYPE_SEND);
283287
if (unlikely(err))
284288
goto err_deregister;
@@ -341,7 +345,7 @@ static int ct_write(struct intel_guc_ct *ct,
341345
u32 len /* in dwords */,
342346
u32 fence)
343347
{
344-
struct intel_guc_ct_buffer *ctb = &ct->ctbs[CTB_SEND];
348+
struct intel_guc_ct_buffer *ctb = &ct->ctbs.send;
345349
struct guc_ct_buffer_desc *desc = ctb->desc;
346350
u32 head = desc->head;
347351
u32 tail = desc->tail;
@@ -557,7 +561,7 @@ static inline bool ct_header_is_response(u32 header)
557561

558562
static int ct_read(struct intel_guc_ct *ct, u32 *data)
559563
{
560-
struct intel_guc_ct_buffer *ctb = &ct->ctbs[CTB_RECV];
564+
struct intel_guc_ct_buffer *ctb = &ct->ctbs.recv;
561565
struct guc_ct_buffer_desc *desc = ctb->desc;
562566
u32 head = desc->head;
563567
u32 tail = desc->tail;

drivers/gpu/drm/i915/gt/uc/intel_guc_ct.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,11 @@ struct intel_guc_ct {
4747
struct i915_vma *vma;
4848
bool enabled;
4949

50-
/* buffers for sending(0) and receiving(1) commands */
51-
struct intel_guc_ct_buffer ctbs[2];
50+
/* buffers for sending and receiving commands */
51+
struct {
52+
struct intel_guc_ct_buffer send;
53+
struct intel_guc_ct_buffer recv;
54+
} ctbs;
5255

5356
struct {
5457
u32 last_fence; /* last fence used to send request */

0 commit comments

Comments
 (0)