On Wed, Feb 16, 2022 at 09:41:45AM -0800, Lucas De Marchi wrote: > Now that the regset list is prepared, convert guc_mmio_reg_state_init() > to use iosys_map to copy the array to the final location and > initialize additional fields in ads.reg_state_list. > > v2: Just use an offset instead of temporary iosys_map. > > Cc: Matt Roper <matthew.d.roper@xxxxxxxxx> > Cc: Thomas Hellström <thomas.hellstrom@xxxxxxxxxxxxxxx> > Cc: Daniel Vetter <daniel@xxxxxxxx> > Cc: John Harrison <John.C.Harrison@xxxxxxxxx> > Cc: Matthew Brost <matthew.brost@xxxxxxxxx> > Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@xxxxxxxxx> > Signed-off-by: Lucas De Marchi <lucas.demarchi@xxxxxxxxx> Reviewed-by: Matthew Brost <matthew.brost@xxxxxxxxx> > --- > drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c | 28 ++++++++++++---------- > 1 file changed, 16 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c > index ec0ccdf98dfa..90cbb93a2945 100644 > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c > @@ -383,40 +383,44 @@ static long guc_mmio_reg_state_create(struct intel_guc *guc) > return ret; > } > > -static void guc_mmio_reg_state_init(struct intel_guc *guc, > - struct __guc_ads_blob *blob) > +static void guc_mmio_reg_state_init(struct intel_guc *guc) > { > struct intel_gt *gt = guc_to_gt(guc); > struct intel_engine_cs *engine; > - struct guc_mmio_reg *ads_registers; > enum intel_engine_id id; > u32 addr_ggtt, offset; > > offset = guc_ads_regset_offset(guc); > addr_ggtt = intel_guc_ggtt_offset(guc, guc->ads_vma) + offset; > - ads_registers = (struct guc_mmio_reg *)(((u8 *)blob) + offset); > > - memcpy(ads_registers, guc->ads_regset, guc->ads_regset_size); > + iosys_map_memcpy_to(&guc->ads_map, offset, guc->ads_regset, > + guc->ads_regset_size); > > for_each_engine(engine, gt, id) { > u32 count = guc->ads_regset_count[id]; > - struct guc_mmio_reg_set *ads_reg_set; > u8 guc_class; > > /* Class index is checked in class converter */ > GEM_BUG_ON(engine->instance >= GUC_MAX_INSTANCES_PER_CLASS); > > guc_class = engine_class_to_guc_class(engine->class); > - ads_reg_set = &blob->ads.reg_state_list[guc_class][engine->instance]; > > if (!count) { > - ads_reg_set->address = 0; > - ads_reg_set->count = 0; > + ads_blob_write(guc, > + ads.reg_state_list[guc_class][engine->instance].address, > + 0); > + ads_blob_write(guc, > + ads.reg_state_list[guc_class][engine->instance].count, > + 0); > continue; > } > > - ads_reg_set->address = addr_ggtt; > - ads_reg_set->count = count; > + ads_blob_write(guc, > + ads.reg_state_list[guc_class][engine->instance].address, > + addr_ggtt); > + ads_blob_write(guc, > + ads.reg_state_list[guc_class][engine->instance].count, > + count); > > addr_ggtt += count * sizeof(struct guc_mmio_reg); > } > @@ -643,7 +647,7 @@ static void __guc_ads_init(struct intel_guc *guc) > blob->ads.gt_system_info = base + ptr_offset(blob, system_info); > > /* MMIO save/restore list */ > - guc_mmio_reg_state_init(guc, blob); > + guc_mmio_reg_state_init(guc); > > /* Private Data */ > blob->ads.private_data = base + guc_ads_private_data_offset(guc); > -- > 2.35.1 >