- Fix BMG probe on unsupported mailbox command (Raag)

- Fix OA static checker warning about null gt (Ashutosh)
 - Fix a NULL vs IS_ERR() bug in xe_i2c_register_adapter (Dan)
 - Fix missing unwind goto in GuC/HuC (Zhanjun)
 - Don't register I2C devices if VF (Lukasz)
 - Clear whole GuC g2h_fence during initialization (Michal)
 - Avoid call kfree for drmm_kzalloc (Shuicheng)
 - Fix pci_dev reference leak on configfs (Michal)
 - SRIOV: Disable CSC support on VF (Lukasz)
 -----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCgAdFiEEbSBwaO7dZQkcLOKj+mJfZA7rE8oFAmiLx7gACgkQ+mJfZA7r
 E8pA/Qf9HpCjo14VZXxNCdTIK6lEi5jgN6QZ40yuumJqj5uNFTSi74PIVFNxFBCL
 34nkdc0K2mOzop3Bf3X3y7fvH3YHsIEERYJOpfrWLOCEWBVDkM03m8KZouKKahzW
 zNv3ahcMUa6qckwDu/iRe7ApIGiBSe3G7Q0uE4dG9y2PPD8E1FNJhU/oWXzDtjUA
 0ZxL283+hg/NI/nJKw2LYDmcwZnqK5mqjTMGfCYIX2DRzCJF6rHb4O7m12Oza57+
 9ffLrwP9xhgjU/e4pPYpeIG4VmxrHh86CcGcwlI6dZhsCoUgCOxLaLhUsTlfYFrU
 L29F69WcDNa43jxhJHqD8WMBeDlKjg==
 =sxwp
 -----END PGP SIGNATURE-----

Merge tag 'drm-xe-next-fixes-2025-07-31' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-next

- Fix BMG probe on unsupported mailbox command (Raag)
- Fix OA static checker warning about null gt (Ashutosh)
- Fix a NULL vs IS_ERR() bug in xe_i2c_register_adapter (Dan)
- Fix missing unwind goto in GuC/HuC (Zhanjun)
- Don't register I2C devices if VF (Lukasz)
- Clear whole GuC g2h_fence during initialization (Michal)
- Avoid call kfree for drmm_kzalloc (Shuicheng)
- Fix pci_dev reference leak on configfs (Michal)
- SRIOV: Disable CSC support on VF (Lukasz)

Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://lore.kernel.org/r/aIvIAANnXv-j_bNA@intel.com
This commit is contained in:
Dave Airlie 2025-08-01 07:09:11 +10:00
commit 6531a2cf07
8 changed files with 23 additions and 33 deletions

View File

@ -267,7 +267,8 @@ static struct config_group *xe_config_make_device_group(struct config_group *gro
pdev = pci_get_domain_bus_and_slot(domain, bus, PCI_DEVFN(slot, function));
if (!pdev)
return ERR_PTR(-EINVAL);
return ERR_PTR(-ENODEV);
pci_dev_put(pdev);
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
if (!dev)

View File

@ -681,6 +681,7 @@ static void sriov_update_device_info(struct xe_device *xe)
/* disable features that are not available/applicable to VFs */
if (IS_SRIOV_VF(xe)) {
xe->info.probe_display = 0;
xe->info.has_heci_cscfi = 0;
xe->info.has_heci_gscfi = 0;
xe->info.skip_guc_pc = 1;
xe->info.skip_pcode = 1;

View File

@ -160,8 +160,13 @@ static int late_bind_create_files(struct device *dev)
ret = xe_pcode_read(root, PCODE_MBOX(PCODE_LATE_BINDING, GET_CAPABILITY_STATUS, 0),
&cap, NULL);
if (ret)
if (ret) {
if (ret == -ENXIO) {
drm_dbg(&xe->drm, "Late binding not supported by firmware\n");
ret = 0;
}
goto out;
}
if (REG_FIELD_GET(V1_FAN_SUPPORTED, cap)) {
ret = sysfs_create_file(&dev->kobj, &dev_attr_lb_fan_control_version.attr);

View File

@ -95,12 +95,8 @@ struct g2h_fence {
static void g2h_fence_init(struct g2h_fence *g2h_fence, u32 *response_buffer)
{
memset(g2h_fence, 0, sizeof(*g2h_fence));
g2h_fence->response_buffer = response_buffer;
g2h_fence->response_data = 0;
g2h_fence->response_len = 0;
g2h_fence->fail = false;
g2h_fence->retry = false;
g2h_fence->done = false;
g2h_fence->seqno = ~0x0;
}

View File

@ -75,25 +75,18 @@ int xe_hw_engine_setup_groups(struct xe_gt *gt)
enum xe_hw_engine_id id;
struct xe_hw_engine_group *group_rcs_ccs, *group_bcs, *group_vcs_vecs;
struct xe_device *xe = gt_to_xe(gt);
int err;
group_rcs_ccs = hw_engine_group_alloc(xe);
if (IS_ERR(group_rcs_ccs)) {
err = PTR_ERR(group_rcs_ccs);
goto err_group_rcs_ccs;
}
if (IS_ERR(group_rcs_ccs))
return PTR_ERR(group_rcs_ccs);
group_bcs = hw_engine_group_alloc(xe);
if (IS_ERR(group_bcs)) {
err = PTR_ERR(group_bcs);
goto err_group_bcs;
}
if (IS_ERR(group_bcs))
return PTR_ERR(group_bcs);
group_vcs_vecs = hw_engine_group_alloc(xe);
if (IS_ERR(group_vcs_vecs)) {
err = PTR_ERR(group_vcs_vecs);
goto err_group_vcs_vecs;
}
if (IS_ERR(group_vcs_vecs))
return PTR_ERR(group_vcs_vecs);
for_each_hw_engine(hwe, gt, id) {
switch (hwe->class) {
@ -116,15 +109,6 @@ int xe_hw_engine_setup_groups(struct xe_gt *gt)
}
return 0;
err_group_vcs_vecs:
kfree(group_vcs_vecs);
err_group_bcs:
kfree(group_bcs);
err_group_rcs_ccs:
kfree(group_rcs_ccs);
return err;
}
/**

View File

@ -96,8 +96,8 @@ static int xe_i2c_register_adapter(struct xe_i2c *i2c)
int ret;
fwnode = fwnode_create_software_node(xe_i2c_adapter_properties, NULL);
if (!fwnode)
return -ENOMEM;
if (IS_ERR(fwnode))
return PTR_ERR(fwnode);
/*
* Not using platform_device_register_full() here because we don't have
@ -283,6 +283,9 @@ int xe_i2c_probe(struct xe_device *xe)
if (xe->info.platform != XE_BATTLEMAGE)
return 0;
if (IS_SRIOV_VF(xe))
return 0;
xe_i2c_read_endpoint(xe_root_tile_mmio(xe), &ep);
if (ep.cookie != XE_I2C_EP_COOKIE_DEVICE)
return 0;

View File

@ -1941,7 +1941,7 @@ static int xe_oa_assign_hwe(struct xe_oa *oa, struct xe_oa_open_param *param)
/* If not provided, OA unit defaults to OA unit 0 as per uapi */
if (!param->oa_unit)
param->oa_unit = &xe_device_get_gt(oa->xe, 0)->oa.oa_unit[0];
param->oa_unit = &xe_root_mmio_gt(oa->xe)->oa.oa_unit[0];
/* When we have an exec_q, get hwe from the exec_q */
if (param->exec_q) {

View File

@ -164,7 +164,7 @@ static int vf_uc_load_hw(struct xe_uc *uc)
err = xe_guc_opt_in_features_enable(&uc->guc);
if (err)
return err;
goto err_out;
err = xe_gt_record_default_lrcs(uc_to_gt(uc));
if (err)