From: Jason Gunthorpe <jgg@nvidia.com>
To: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
Cc: Alexandre Ghiti <alex@ghiti.fr>,
Albert Ou <aou@eecs.berkeley.edu>,
Ard Biesheuvel <ardb@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Catalin Marinas <catalin.marinas@arm.com>,
Jonathan Corbet <corbet@lwn.net>, David Sterba <dsterba@suse.com>,
Ilias Apalodimas <ilias.apalodimas@linaro.org>,
linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-doc@vger.kernel.org, linux-efi@vger.kernel.org,
linux-riscv@lists.infradead.org,
Mark Rutland <mark.rutland@arm.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Paul Walmsley <pjw@kernel.org>,
Randy Dunlap <rdunlap@infradead.org>,
Simon Glass <sjg@chromium.org>,
Shuah Khan <skhan@linuxfoundation.org>,
Nick Terrell <terrelln@fb.com>, Will Deacon <will@kernel.org>,
Alexandre Ghiti <alexghiti@rivosinc.com>,
Conor Dooley <conor.dooley@microchip.com>,
linux-integrity@vger.kernel.org,
Palmer Dabbelt <palmer@rivosinc.com>,
patches@lists.linux.dev,
Ross Philipson <ross.philipson@gmail.com>,
Sami Tolvanen <samitolvanen@google.com>,
Song Shuai <songshuaishuai@tinylab.org>,
Suzuki K Poulose <suzuki.poulose@arm.com>
Subject: Re: [PATCH 12/16] arm64: drtm: Add macro definitions for DEN0113
Date: Sat, 26 Sep 2026 15:27:36 -0300 [thread overview]
Message-ID: <20260926182736.GA473004@nvidia.com> (raw)
In-Reply-To: <20260924172952.0000527e@oss.qualcomm.com>
On Thu, Sep 24, 2026 at 05:29:52PM -0700, Jonathan Cameron wrote:
> This one at least does it via base and sum. But that then separates it from
> the spec? That is sort of the case anyway because the spec has the full
> number. 0xC400_0110 so I guess not too bad.
I wasn't sure what to do with this since the spec had the full hex and
we have these helper macros.. I made it look more like something else
with the offset style instead of the function call style:
> > +#define ARM_DRTM_SMC_VERSION (ARM_DRTM_SMC_FN_BASE + 0x00)
IDK, maybe ARM_DRTM_SMC_FN_BASE(0x110) is more connected to the spec,
but I'm used to doing it like this from ioctl land which is very
similar.
> > +#define ARM_DRTM_FEATURE_SELECTOR BIT_U64(63)
> > +#define ARM_DRTM_FEATURE_TPM 0x01
> > +#define ARM_DRTM_FEATURE_MIN_MEMORY 0x02
> > +#define ARM_DRTM_FEATURE_DMA_PROTECTION 0x03
> > +#define ARM_DRTM_FEATURE_BOOT_PE 0x04
> > +#define ARM_DRTM_FEATURE_TCB_HASH 0x05
> > +#define ARM_DRTM_FEATURE_IMAGE_AUTH 0x06
>
> Nice to have a mask for the 8 bits of the feature field.
OK
> Also nice to keep order the same as the SMC defines which would put this after
> version. That also puts it next to the values returned for each feature.
I reorganized everything
> > +#define ARM_DRTM_TPM_ALG_MASK GENMASK_U64(15, 0)
> > +#define ARM_DRTM_TPM_HASHING BIT_U64(32)
> > +#define ARM_DRTM_PCR_SCHEMA_MASK GENMASK_U64(36, 33)
> > +#define ARM_DRTM_PCR_SCHEMA_DEFAULT BIT_U64(33)
> > +#define ARM_DRTM_PCR_SCHEMA_AUTHORITIES BIT_U64(34)
>
> Ah. Always love a field made up of a bunch of bits. Hard to define
> cleanly. Do you actually need the PCR_SCHEMA_MASK?
I did it with a field content which gets reused in the launch struct:
/*
* PCR schema numbers. ARM_DRTM_PCR_SCHEMA_MASK is a bitmap indexed by these,
* and the Launch Features ARM_DRTM_LAUNCH_PCR_SCHEMA_MASK field holds one.
*/
#define ARM_DRTM_PCR_SCHEMA_DEFAULT 0
#define ARM_DRTM_PCR_SCHEMA_AUTHORITIES 1
/*
* DMA protection types. ARM_DRTM_DMA_PROTECTION_MASK is a bitmap indexed by
* these, and the Launch Features ARM_DRTM_LAUNCH_DMA_PROTECTION_MASK field
* holds one.
*/
#define ARM_DRTM_DMA_PROTECTION_COMPLETE 0
#define ARM_DRTM_DMA_PROTECTION_REGION 1
Have to use BIT() to get the bitmap encoding.
> Same here. I vaguely wonder if it is worth adding something
> reflecting the relevant feature ID to each of these defines
> so we know what the are referring to?
I added comments and spec references for everything
> > +#define ARM_DRTM_LAUNCH_HASH_FIRMWARE 0
> > +#define ARM_DRTM_LAUNCH_HASH_TPM BIT_U32(0)
>
> I'd rather see them as fields and field value pairs but
> can see that is going to get a bit verbose.
I think that would be too verbose in this case, and the usage is very
limited.
> > +static inline s64 arm_drtm_features(u64 function_or_feature, u64 *value)
> > +{
> > + struct arm_smccc_res res;
> > + s64 status;
> > +
> > + arm_smccc_1_1_smc(ARM_DRTM_SMC_FEATURES, function_or_feature,
> > + 0, 0, 0, 0, 0, 0, &res);
> > + status = res.a0;
> > + if (status >= 0 && value)
> > + *value = res.a1;
> If status == 0, is res.a1 useful?
> You have a helpful comment at the call site in the final patch but none
> the less I have read the spec section a couple of times and have no idea.
I read the spec as 0 is not allowed.
I changed this around to have two wrapper functions, which works a bit
better.
static inline s64 arm_drtm_query_function(u64 function_id)
{
struct arm_smccc_res res;
arm_smccc_1_1_smc(ARM_DRTM_SMC_FEATURES, function_id, 0, 0, 0, 0, 0, 0,
&res);
return res.a0;
}
/*
* v1.4b Section 3.3.1 says:
* A return value of greater than 0 means the feature ID is
* implemented, and there are other feature-specific
* feature or capability bits available in other return value
* registers.
* And for FEATURE_SELECTOR all defined features return data in other
* registers, so 0 is not an allowed return.
*/
static inline s64 arm_drtm_query_feature(u64 feature, u64 *value)
{
struct arm_smccc_res res;
arm_smccc_1_1_smc(ARM_DRTM_SMC_FEATURES,
ARM_DRTM_FEATURE_SELECTOR |
FIELD_PREP(ARM_DRTM_FEATURE_ID_MASK, feature),
0, 0, 0, 0, 0, 0, &res);
*value = res.a1;
return res.a0;
}
Thanks,
Jason
WARNING: multiple messages have this Message-ID (diff)
From: Jason Gunthorpe <jgg@nvidia.com>
To: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
Cc: Alexandre Ghiti <alex@ghiti.fr>,
Albert Ou <aou@eecs.berkeley.edu>,
Ard Biesheuvel <ardb@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Catalin Marinas <catalin.marinas@arm.com>,
Jonathan Corbet <corbet@lwn.net>, David Sterba <dsterba@suse.com>,
Ilias Apalodimas <ilias.apalodimas@linaro.org>,
linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-doc@vger.kernel.org, linux-efi@vger.kernel.org,
linux-riscv@lists.infradead.org,
Mark Rutland <mark.rutland@arm.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Paul Walmsley <pjw@kernel.org>,
Randy Dunlap <rdunlap@infradead.org>,
Simon Glass <sjg@chromium.org>,
Shuah Khan <skhan@linuxfoundation.org>,
Nick Terrell <terrelln@fb.com>, Will Deacon <will@kernel.org>,
Alexandre Ghiti <alexghiti@rivosinc.com>,
Conor Dooley <conor.dooley@microchip.com>,
linux-integrity@vger.kernel.org,
Palmer Dabbelt <palmer@rivosinc.com>,
patches@lists.linux.dev,
Ross Philipson <ross.philipson@gmail.com>,
Sami Tolvanen <samitolvanen@google.com>,
Song Shuai <songshuaishuai@tinylab.org>,
Suzuki K Poulose <suzuki.poulose@arm.com>
Subject: Re: [PATCH 12/16] arm64: drtm: Add macro definitions for DEN0113
Date: Sat, 26 Sep 2026 15:27:36 -0300 [thread overview]
Message-ID: <20260926182736.GA473004@nvidia.com> (raw)
In-Reply-To: <20260924172952.0000527e@oss.qualcomm.com>
On Thu, Sep 24, 2026 at 05:29:52PM -0700, Jonathan Cameron wrote:
> This one at least does it via base and sum. But that then separates it from
> the spec? That is sort of the case anyway because the spec has the full
> number. 0xC400_0110 so I guess not too bad.
I wasn't sure what to do with this since the spec had the full hex and
we have these helper macros.. I made it look more like something else
with the offset style instead of the function call style:
> > +#define ARM_DRTM_SMC_VERSION (ARM_DRTM_SMC_FN_BASE + 0x00)
IDK, maybe ARM_DRTM_SMC_FN_BASE(0x110) is more connected to the spec,
but I'm used to doing it like this from ioctl land which is very
similar.
> > +#define ARM_DRTM_FEATURE_SELECTOR BIT_U64(63)
> > +#define ARM_DRTM_FEATURE_TPM 0x01
> > +#define ARM_DRTM_FEATURE_MIN_MEMORY 0x02
> > +#define ARM_DRTM_FEATURE_DMA_PROTECTION 0x03
> > +#define ARM_DRTM_FEATURE_BOOT_PE 0x04
> > +#define ARM_DRTM_FEATURE_TCB_HASH 0x05
> > +#define ARM_DRTM_FEATURE_IMAGE_AUTH 0x06
>
> Nice to have a mask for the 8 bits of the feature field.
OK
> Also nice to keep order the same as the SMC defines which would put this after
> version. That also puts it next to the values returned for each feature.
I reorganized everything
> > +#define ARM_DRTM_TPM_ALG_MASK GENMASK_U64(15, 0)
> > +#define ARM_DRTM_TPM_HASHING BIT_U64(32)
> > +#define ARM_DRTM_PCR_SCHEMA_MASK GENMASK_U64(36, 33)
> > +#define ARM_DRTM_PCR_SCHEMA_DEFAULT BIT_U64(33)
> > +#define ARM_DRTM_PCR_SCHEMA_AUTHORITIES BIT_U64(34)
>
> Ah. Always love a field made up of a bunch of bits. Hard to define
> cleanly. Do you actually need the PCR_SCHEMA_MASK?
I did it with a field content which gets reused in the launch struct:
/*
* PCR schema numbers. ARM_DRTM_PCR_SCHEMA_MASK is a bitmap indexed by these,
* and the Launch Features ARM_DRTM_LAUNCH_PCR_SCHEMA_MASK field holds one.
*/
#define ARM_DRTM_PCR_SCHEMA_DEFAULT 0
#define ARM_DRTM_PCR_SCHEMA_AUTHORITIES 1
/*
* DMA protection types. ARM_DRTM_DMA_PROTECTION_MASK is a bitmap indexed by
* these, and the Launch Features ARM_DRTM_LAUNCH_DMA_PROTECTION_MASK field
* holds one.
*/
#define ARM_DRTM_DMA_PROTECTION_COMPLETE 0
#define ARM_DRTM_DMA_PROTECTION_REGION 1
Have to use BIT() to get the bitmap encoding.
> Same here. I vaguely wonder if it is worth adding something
> reflecting the relevant feature ID to each of these defines
> so we know what the are referring to?
I added comments and spec references for everything
> > +#define ARM_DRTM_LAUNCH_HASH_FIRMWARE 0
> > +#define ARM_DRTM_LAUNCH_HASH_TPM BIT_U32(0)
>
> I'd rather see them as fields and field value pairs but
> can see that is going to get a bit verbose.
I think that would be too verbose in this case, and the usage is very
limited.
> > +static inline s64 arm_drtm_features(u64 function_or_feature, u64 *value)
> > +{
> > + struct arm_smccc_res res;
> > + s64 status;
> > +
> > + arm_smccc_1_1_smc(ARM_DRTM_SMC_FEATURES, function_or_feature,
> > + 0, 0, 0, 0, 0, 0, &res);
> > + status = res.a0;
> > + if (status >= 0 && value)
> > + *value = res.a1;
> If status == 0, is res.a1 useful?
> You have a helpful comment at the call site in the final patch but none
> the less I have read the spec section a couple of times and have no idea.
I read the spec as 0 is not allowed.
I changed this around to have two wrapper functions, which works a bit
better.
static inline s64 arm_drtm_query_function(u64 function_id)
{
struct arm_smccc_res res;
arm_smccc_1_1_smc(ARM_DRTM_SMC_FEATURES, function_id, 0, 0, 0, 0, 0, 0,
&res);
return res.a0;
}
/*
* v1.4b Section 3.3.1 says:
* A return value of greater than 0 means the feature ID is
* implemented, and there are other feature-specific
* feature or capability bits available in other return value
* registers.
* And for FEATURE_SELECTOR all defined features return data in other
* registers, so 0 is not an allowed return.
*/
static inline s64 arm_drtm_query_feature(u64 feature, u64 *value)
{
struct arm_smccc_res res;
arm_smccc_1_1_smc(ARM_DRTM_SMC_FEATURES,
ARM_DRTM_FEATURE_SELECTOR |
FIELD_PREP(ARM_DRTM_FEATURE_ID_MASK, feature),
0, 0, 0, 0, 0, 0, &res);
*value = res.a1;
return res.a0;
}
Thanks,
Jason
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2026-09-26 18:27 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-24 13:53 [PATCH 00/16] arm64: DRTM, boot portion Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 01/16] efi/libstub: Fix error unwind freeing fdt in allocate_new_fdt_and_exit_boot() Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 22:42 ` Jonathan Cameron
2026-09-24 22:42 ` Jonathan Cameron
2026-09-24 23:44 ` Jason Gunthorpe
2026-09-24 23:44 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 02/16] efi/riscv: libstub: Don't set image_size in handle_kernel_image() Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 03/16] efi/libstub: Free cmdline_ptr in efi_pe_entry Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 22:49 ` Jonathan Cameron
2026-09-24 22:49 ` Jonathan Cameron
2026-09-25 12:59 ` Jason Gunthorpe
2026-09-25 12:59 ` Jason Gunthorpe
2026-09-25 13:20 ` Ard Biesheuvel
2026-09-25 13:20 ` Ard Biesheuvel
2026-09-24 13:53 ` [PATCH 04/16] vmlinux.lds: Move DATA_LE32() from arm64 to the common linker script Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 22:53 ` Jonathan Cameron
2026-09-24 22:53 ` Jonathan Cameron
2026-09-24 23:50 ` Jason Gunthorpe
2026-09-24 23:50 ` Jason Gunthorpe
2026-09-25 13:30 ` Ard Biesheuvel
2026-09-25 13:30 ` Ard Biesheuvel
2026-09-24 13:53 ` [PATCH 05/16] efi/libstub: Add a general way to get symbols from the vmlinux into zboot Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 06/16] arm64/efi: Use CONFIG_EFI_STUB_IMAGE_INFO for code_size Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 07/16] efi/zboot: Lift efi_cache_sync_image() from efi_zboot_decompress() Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 22:57 ` Jonathan Cameron
2026-09-24 22:57 ` Jonathan Cameron
2026-09-24 23:53 ` Jason Gunthorpe
2026-09-24 23:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 08/16] efi/libstub: Add generic arch callbacks for DRTM Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 09/16] efi/libstub: Have efi_kaslr_relocate_kernel() handle extra_size Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 10/16] efi: Add a __efi_data_handoff section annotation Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 11/16] efi/libstub: Put the stub's writable data in unique sections for DRTM Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 12/16] arm64: drtm: Add macro definitions for DEN0113 Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-25 0:29 ` Jonathan Cameron
2026-09-25 0:29 ` Jonathan Cameron
2026-09-26 18:27 ` Jason Gunthorpe [this message]
2026-09-26 18:27 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 13/16] arm64: drtm: Update the linker script for EFI_STUB_DRTM Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 14/16] arm64: drtm: Add drtm_entry point to head.S Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 15/16] arm64: drtm: Call UNPROTECT_MEMORY Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-24 13:53 ` [PATCH 16/16] efi/arm64: Implement ARM64 DRTM in the stub Jason Gunthorpe
2026-09-24 13:53 ` Jason Gunthorpe
2026-09-25 18:37 ` Jonathan Cameron
2026-09-25 18:37 ` Jonathan Cameron
2026-09-26 18:45 ` Jason Gunthorpe
2026-09-26 18:45 ` Jason Gunthorpe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260926182736.GA473004@nvidia.com \
--to=jgg@nvidia.com \
--cc=alex@ghiti.fr \
--cc=alexghiti@rivosinc.com \
--cc=aou@eecs.berkeley.edu \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=catalin.marinas@arm.com \
--cc=conor.dooley@microchip.com \
--cc=corbet@lwn.net \
--cc=dsterba@suse.com \
--cc=ilias.apalodimas@linaro.org \
--cc=jonathan.cameron@oss.qualcomm.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=mark.rutland@arm.com \
--cc=palmer@dabbelt.com \
--cc=palmer@rivosinc.com \
--cc=patches@lists.linux.dev \
--cc=pjw@kernel.org \
--cc=rdunlap@infradead.org \
--cc=ross.philipson@gmail.com \
--cc=samitolvanen@google.com \
--cc=sjg@chromium.org \
--cc=skhan@linuxfoundation.org \
--cc=songshuaishuai@tinylab.org \
--cc=suzuki.poulose@arm.com \
--cc=terrelln@fb.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.