xe_pm_init is the very last thing during the xe_pci_probe(),
hence these protections are useless from the point of view
of ensuring that the device is awake.
Let's remove it so we continue towards the goal of killing
xe_device_mem_access.
v2: Adding more cases
v3: Provide a separate fix for xe_tile_init_noalloc return (Matt)
    Adding a new case where display HDCP init calls which
    are also called at display probe time.
Cc: Matthew Auld <matthew.auld@intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240417203952.25503-5-rodrigo.vivi@intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
        int ret = 0;
 
        /* allocate object of two page for HDCP command memory and store it */
-       xe_device_mem_access_get(xe);
        bo = xe_bo_create_pin_map(xe, xe_device_get_root_tile(xe), NULL, PAGE_SIZE * 2,
                                  ttm_bo_type_kernel,
                                  XE_BO_FLAG_SYSTEM |
        hdcp_message->hdcp_cmd_in = cmd_in;
        hdcp_message->hdcp_cmd_out = cmd_out;
 out:
-       xe_device_mem_access_put(xe);
        return ret;
 }
 
 
        u64 start, end;
 
        /* Display may have allocated inside ggtt, so be careful with clearing here */
-       xe_device_mem_access_get(tile_to_xe(ggtt->tile));
        mutex_lock(&ggtt->lock);
        drm_mm_for_each_hole(hole, &ggtt->mm, start, end)
                xe_ggtt_clear(ggtt, start, end - start);
 
        xe_ggtt_invalidate(ggtt);
        mutex_unlock(&ggtt->lock);
-       xe_device_mem_access_put(tile_to_xe(ggtt->tile));
 }
 
 int xe_ggtt_init(struct xe_ggtt *ggtt)
 
 {
        int err, i;
 
-       xe_device_mem_access_get(gt_to_xe(gt));
        err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
        if (err)
                goto err_hw_fence_irq;
 
        err = xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
        XE_WARN_ON(err);
-       xe_device_mem_access_put(gt_to_xe(gt));
 
        return 0;
 
 err_hw_fence_irq:
        for (i = 0; i < XE_ENGINE_CLASS_MAX; ++i)
                xe_hw_fence_irq_finish(>->fence_irq[i]);
-       xe_device_mem_access_put(gt_to_xe(gt));
 
        return err;
 }
 {
        int err, i;
 
-       xe_device_mem_access_get(gt_to_xe(gt));
        err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
        if (err)
                goto err_hw_fence_irq;
 
        err = xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
        XE_WARN_ON(err);
-       xe_device_mem_access_put(gt_to_xe(gt));
 
        return 0;
 
 err_hw_fence_irq:
        for (i = 0; i < XE_ENGINE_CLASS_MAX; ++i)
                xe_hw_fence_irq_finish(>->fence_irq[i]);
-       xe_device_mem_access_put(gt_to_xe(gt));
 
        return err;
 }
 {
        int err;
 
-       xe_device_mem_access_get(gt_to_xe(gt));
        err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
        if (err)
                goto out;
 out_fw:
        xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
 out:
-       xe_device_mem_access_put(gt_to_xe(gt));
-
        return err;
 }
 
 
 {
        int err;
 
-       xe_device_mem_access_get(tile_to_xe(tile));
-
        err = tile_ttm_mgr_init(tile);
        if (err)
-               goto err_mem_access;
+               return err;
 
        tile->mem.kernel_bb_pool = xe_sa_bo_manager_init(tile, SZ_1M, 16);
-       if (IS_ERR(tile->mem.kernel_bb_pool)) {
-               err = PTR_ERR(tile->mem.kernel_bb_pool);
-               goto err_mem_access;
-       }
+       if (IS_ERR(tile->mem.kernel_bb_pool))
+               return PTR_ERR(tile->mem.kernel_bb_pool);
+
        xe_wa_apply_tile_workarounds(tile);
 
        xe_tile_sysfs_init(tile);
 
-err_mem_access:
-       xe_device_mem_access_put(tile_to_xe(tile));
-       return err;
+       return 0;
 }
 
 void xe_tile_migrate_wait(struct xe_tile *tile)
 
 /* Should be called once at driver load only */
 int xe_uc_init(struct xe_uc *uc)
 {
-       struct xe_device *xe = uc_to_xe(uc);
        int ret;
 
-       xe_device_mem_access_get(xe);
-
        /*
         * We call the GuC/HuC/GSC init functions even if GuC submission is off
         * to correctly move our tracking of the FW state to "disabled".
                goto err;
 
        ret = xe_guc_db_mgr_init(&uc->guc.dbm, ~0);
-       if (ret)
-               goto err;
-
-       xe_device_mem_access_put(xe);
-
-       return 0;
 
 err:
-       xe_device_mem_access_put(xe);
-
        return ret;
 }