proximity_domain = atomic_inc_return(&topology_crat_proximity_domain);
 
+       adev = (struct amdgpu_device *)(gpu->kgd);
+
+       /* Include the CPU in xGMI hive if xGMI connected by assigning it the hive ID. */
+       if (gpu->hive_id && adev->gmc.xgmi.connected_to_cpu) {
+               struct kfd_topology_device *top_dev;
+
+               down_read(&topology_lock);
+
+               list_for_each_entry(top_dev, &topology_device_list, list) {
+                       if (top_dev->gpu)
+                               break;
+
+                       top_dev->node_props.hive_id = gpu->hive_id;
+               }
+
+               up_read(&topology_lock);
+       }
+
        /* Check to see if this gpu device exists in the topology_device_list.
         * If so, assign the gpu to that device,
         * else create a Virtual CRAT for this gpu device and then parse that
                dev->node_props.max_waves_per_simd = 10;
        }
 
-       adev = (struct amdgpu_device *)(dev->gpu->kgd);
        /* kfd only concerns sram ecc on GFX and HBM ecc on UMC */
        dev->node_props.capability |=
                ((adev->ras_enabled & BIT(AMDGPU_RAS_BLOCK__GFX)) != 0) ?