[PATCH] drm/amdgpu: implement TMZ accessor
Alex Deucher
alexdeucher at gmail.com
Fri Nov 1 18:14:00 UTC 2019
On Thu, Oct 31, 2019 at 8:15 PM Tuikov, Luben <Luben.Tuikov at amd.com> wrote:
>
> On 2019-10-31 3:29 a.m., Christian König wrote:
> > Am 31.10.19 um 00:43 schrieb Tuikov, Luben:
> >> Implement an accessor of adev->tmz.enabled. Let not
> >> code around access it as "if (adev->tmz.enabled)"
> >> as the organization may change. Instead...
> >>
> >> Recruit "bool amdgpu_is_tmz(adev)" to return
> >> exactly this Boolean value. That is, this function
> >> is now an accessor of an already initialized and
> >> set adev and adev->tmz.
> >>
> >> Add "void amdgpu_tmz_set(adev)" to check and set
> >> adev->tmz.* at initialization time. After which
> >> one uses "bool amdgpu_is_tmz(adev)" to query
> >> whether adev supports TMZ.
> >
> > Actually I would rather completely remove the amdgpu_tmz.[hc] files. See
> > TMZ is a feature and not a hardware block.
> >
> > All that stuff should probably moved into the PSP handling, since the
> > control of TMZ is enabled or disabled in the hardware is there.
>
> Hi Christian,
>
> Thanks for reviewing this. Sure, we can do that as well, should
> there be consensus on it.
>
> I just saw myself needing to know if the device is TMZ (as well
> as if a buffer is TMZ for which I used amdgpu_bo_encrypted())
> and so it became natural to write (after this patch):
>
> if (!amdgpu_bo_encrypted(abo) || !amdgpu_is_tmz(adev)) {
> /* normal processing */
> } else {
> /* TMZ processing */
> }
>
> BTW, should we proceed as you suggested, do you see
> those primitives going into psp_v12_0.c?
>
They are not psp version specific. the PSP handles the security, but
it's not really involved much from a driver perspective; they are
really more of a memory management thing. I'd suggest putting them in
struct amdgpu_gmc.
Alex
> Regards,
> Luben
>
> >
> > Regards,
> > Christian.
> >
> >>
> >> Also, remove circular header file include.
> >>
> >> Signed-off-by: Luben Tuikov <luben.tuikov at amd.com>
> >> ---
> >> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 5 +++++
> >> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 +-
> >> drivers/gpu/drm/amd/amdgpu/amdgpu_tmz.c | 23 +++++++++++-----------
> >> drivers/gpu/drm/amd/amdgpu/amdgpu_tmz.h | 7 ++-----
> >> 4 files changed, 19 insertions(+), 18 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> >> index 7d1e528cc783..23bd81a76570 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> >> @@ -1249,5 +1249,10 @@ _name##_show(struct device *dev, \
> >> \
> >> static struct device_attribute pmu_attr_##_name = __ATTR_RO(_name)
> >>
> >> +static inline bool amdgpu_is_tmz(struct amdgpu_device *adev)
> >> +{
> >> + return adev->tmz.enabled;
> >> +}
> >> +
> >> #endif
> >>
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> >> index 4eee40b9d0b0..f12b817480bb 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> >> @@ -1058,7 +1058,7 @@ static int amdgpu_device_check_arguments(struct amdgpu_device *adev)
> >>
> >> adev->firmware.load_type = amdgpu_ucode_get_load_type(adev, amdgpu_fw_load_type);
> >>
> >> - adev->tmz.enabled = amdgpu_is_tmz(adev);
> >> + amdgpu_tmz_set(adev);
> >>
> >> return ret;
> >> }
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_tmz.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_tmz.c
> >> index 823527a0fa47..518b9d335550 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_tmz.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_tmz.c
> >> @@ -27,26 +27,25 @@
> >> #include "amdgpu.h"
> >> #include "amdgpu_tmz.h"
> >>
> >> -
> >> /**
> >> - * amdgpu_is_tmz - validate trust memory zone
> >> - *
> >> + * amdgpu_tmz_set -- check and set if a device supports TMZ
> >> * @adev: amdgpu_device pointer
> >> *
> >> - * Return true if @dev supports trusted memory zones (TMZ), and return false if
> >> - * @dev does not support TMZ.
> >> + * Check and set if an the device @adev supports Trusted Memory
> >> + * Zones (TMZ).
> >> */
> >> -bool amdgpu_is_tmz(struct amdgpu_device *adev)
> >> +void amdgpu_tmz_set(struct amdgpu_device *adev)
> >> {
> >> if (!amdgpu_tmz)
> >> - return false;
> >> + return;
> >>
> >> - if (adev->asic_type < CHIP_RAVEN || adev->asic_type == CHIP_ARCTURUS) {
> >> - dev_warn(adev->dev, "doesn't support trusted memory zones (TMZ)\n");
> >> - return false;
> >> + if (adev->asic_type < CHIP_RAVEN ||
> >> + adev->asic_type == CHIP_ARCTURUS) {
> >> + dev_warn(adev->dev, "Trusted Memory Zone (TMZ) feature not supported\n");
> >> + return;
> >> }
> >>
> >> - dev_info(adev->dev, "TMZ feature is enabled\n");
> >> + adev->tmz.enabled = true;
> >>
> >> - return true;
> >> + dev_info(adev->dev, "Trusted Memory Zone (TMZ) feature supported and enabled\n");
> >> }
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_tmz.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_tmz.h
> >> index 28e05177fb89..ad3ad8c011f9 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_tmz.h
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_tmz.h
> >> @@ -24,16 +24,13 @@
> >> #ifndef __AMDGPU_TMZ_H__
> >> #define __AMDGPU_TMZ_H__
> >>
> >> -#include "amdgpu.h"
> >> -
> >> /*
> >> - * Trust memory zone stuff
> >> + * Trusted Memory Zone particulars
> >> */
> >> struct amdgpu_tmz {
> >> bool enabled;
> >> };
> >>
> >> -
> >> -extern bool amdgpu_is_tmz(struct amdgpu_device *adev);
> >> +extern void amdgpu_tmz_set(struct amdgpu_device *adev);
> >>
> >> #endif
> >
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list