Hi Badal, [...] > @@ -614,12 +793,22 @@ void xe_hwmon_register(struct xe_device *xe) > > /* primary GT to access device level properties */ > ddat->gt = xe->tiles[0].primary_gt; > +// ddat->gt = &xe->gt[0]; please clean it up before sending > + ddat->gt_n = -1; > > ddat->hwmon = hwmon; > snprintf(ddat->name, sizeof(ddat->name), "xe"); > > init_waitqueue_head(&ddat->waitq); > > + for_each_gt(gt, xe, id) { > + ddat_tile = hwmon->ddat_tile + id; > + ddat_tile->hwmon = hwmon; > + ddat_tile->gt = gt; > + snprintf(ddat_tile->name, sizeof(ddat_tile->name), "xe_tile%u", id); > + ddat_tile->gt_n = id; > + } > + > hwm_get_preregistration_info(ddat); > > drm_dbg(&xe->drm, "Register xe hwmon interface\n"); > @@ -637,6 +826,23 @@ void xe_hwmon_register(struct xe_device *xe) > } > > ddat->hwmon_dev = hwmon_dev; > + > + for_each_gt(gt, xe, id) { you could eventually make a for_each_hwmon_gt() Andi > + ddat_tile = hwmon->ddat_tile + id; > + /* > + * Create per-gt directories only if a per-gt attribute is > + * visible. Currently this is only energy > + */ > + if (!hwm_gt_is_visible(ddat_tile, hwmon_energy, hwmon_energy_input, 0)) > + continue; > + > + hwmon_dev = devm_hwmon_device_register_with_info(dev, ddat_tile->name, > + ddat_tile, > + &hwm_gt_chip_info, > + NULL); > + if (!IS_ERR(hwmon_dev)) > + ddat_tile->hwmon_dev = hwmon_dev; > + }