Merge tag 'drm-misc-next-2021-10-14' of git://anongit.freedesktop.org/drm/drm-misc...
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / pxp / intel_pxp_pm.c
1 // SPDX-License-Identifier: MIT
2 /*
3  * Copyright(c) 2020 Intel Corporation.
4  */
5
6 #include "intel_pxp.h"
7 #include "intel_pxp_irq.h"
8 #include "intel_pxp_pm.h"
9 #include "intel_pxp_session.h"
10
11 void intel_pxp_suspend(struct intel_pxp *pxp, bool runtime)
12 {
13         if (!intel_pxp_is_enabled(pxp))
14                 return;
15
16         pxp->arb_is_valid = false;
17
18         /*
19          * Contexts using protected objects keep a runtime PM reference, so we
20          * can only runtime suspend when all of them have been either closed
21          * or banned. Therefore, there is no need to invalidate in that
22          * scenario.
23          */
24         if (!runtime)
25                 intel_pxp_invalidate(pxp);
26
27         intel_pxp_fini_hw(pxp);
28
29         pxp->hw_state_invalidated = false;
30 }
31
32 void intel_pxp_resume(struct intel_pxp *pxp)
33 {
34         if (!intel_pxp_is_enabled(pxp))
35                 return;
36
37         /*
38          * The PXP component gets automatically unbound when we go into S3 and
39          * re-bound after we come out, so in that scenario we can defer the
40          * hw init to the bind call.
41          */
42         if (!pxp->pxp_component)
43                 return;
44
45         intel_pxp_init_hw(pxp);
46 }