'select' does not work on config options in a 'choice', so currently it is possible to enable QCOMTEE without QCOM_TZMEM_MODE_SHMBRIDGE, even though this is needed at runtime.
There are no users of the generic allocator option, QCOM_TZMEM_MODE_GENERIC, so let's remove it. Then, we can remove the containing choice..endchoice, which allows the 'select' to work as intended.
Suggested-by: Arnd Bergmann arnd@arndb.de Signed-off-by: Julian Braha julianbraha@gmail.com --- Changes since v1: - remove TZMEM_MODE_GENERIC instead of removing the dead select
Link: https://lore.kernel.org/all/20260715092539.18384-1-julianbraha@gmail.com/ --- drivers/firmware/qcom/Kconfig | 26 +++++--------------------- drivers/firmware/qcom/qcom_tzmem.c | 21 --------------------- 2 files changed, 5 insertions(+), 42 deletions(-)
diff --git a/drivers/firmware/qcom/Kconfig b/drivers/firmware/qcom/Kconfig index c7f8413ab996..d99e09c5fa18 100644 --- a/drivers/firmware/qcom/Kconfig +++ b/drivers/firmware/qcom/Kconfig @@ -34,33 +34,17 @@ config QCOM_TZMEM tristate select GENERIC_ALLOCATOR
-choice - prompt "TrustZone interface memory allocator mode" - depends on QCOM_TZMEM - default QCOM_TZMEM_MODE_GENERIC - help - Selects the mode of the memory allocator providing memory buffers of - suitable format for sharing with the TrustZone. If in doubt, select - 'Generic'. - -config QCOM_TZMEM_MODE_GENERIC - bool "Generic" - help - Use the generic allocator mode. The memory is page-aligned, non-cachable - and physically contiguous. - config QCOM_TZMEM_MODE_SHMBRIDGE - bool "SHM Bridge" + bool "TrustZone interface memory allocator: SHM Bridge" + depends on QCOM_TZMEM help - Use Qualcomm Shared Memory Bridge. The memory has the same alignment as - in the 'Generic' allocator but is also explicitly marked as an SHM Bridge - buffer. + Use Qualcomm Shared Memory Bridge as memory allocator. The memory has the + same alignment as in the 'Generic' allocator but is also explicitly marked + as an SHM Bridge buffer.
With this selected, all buffers passed to the TrustZone must be allocated using the TZMem allocator or else the TrustZone will refuse to use them.
-endchoice - config QCOM_QSEECOM bool "Qualcomm QSEECOM interface driver" depends on QCOM_SCM=y diff --git a/drivers/firmware/qcom/qcom_tzmem.c b/drivers/firmware/qcom/qcom_tzmem.c index 0635cbeacfc8..5b3e5a3ad1ae 100644 --- a/drivers/firmware/qcom/qcom_tzmem.c +++ b/drivers/firmware/qcom/qcom_tzmem.c @@ -49,25 +49,6 @@ static struct device *qcom_tzmem_dev; static RADIX_TREE(qcom_tzmem_chunks, GFP_ATOMIC); static DEFINE_SPINLOCK(qcom_tzmem_chunks_lock);
-#if IS_ENABLED(CONFIG_QCOM_TZMEM_MODE_GENERIC) - -static int qcom_tzmem_init(void) -{ - return 0; -} - -static int qcom_tzmem_init_area(struct qcom_tzmem_area *area) -{ - return 0; -} - -static void qcom_tzmem_cleanup_area(struct qcom_tzmem_area *area) -{ - -} - -#elif IS_ENABLED(CONFIG_QCOM_TZMEM_MODE_SHMBRIDGE) - #include <linux/firmware/qcom/qcom_scm.h> #include <linux/of.h>
@@ -189,8 +170,6 @@ static void qcom_tzmem_cleanup_area(struct qcom_tzmem_area *area) kfree(handle); }
-#endif /* CONFIG_QCOM_TZMEM_MODE_SHMBRIDGE */ - static int qcom_tzmem_pool_add_memory(struct qcom_tzmem_pool *pool, size_t size, gfp_t gfp) {
On Wed, Jul 29, 2026, at 22:38, Julian Braha wrote:
'select' does not work on config options in a 'choice', so currently it is possible to enable QCOMTEE without QCOM_TZMEM_MODE_SHMBRIDGE, even though this is needed at runtime.
There are no users of the generic allocator option, QCOM_TZMEM_MODE_GENERIC, so let's remove it. Then, we can remove the containing choice..endchoice, which allows the 'select' to work as intended.
Suggested-by: Arnd Bergmann arnd@arndb.de Signed-off-by: Julian Braha julianbraha@gmail.com
Looks good to me,
Reviewed-by: Arnd Bergmann arnd@arndb.de
Hi Julian,
With this change, is QCOM_TZMEM_MODE_SHMBRIDGE still needed?
I think QCOM_TZMEM_MODE_SHMBRIDGE can therefore be removed entirely, along with the conditional declarations and stubs in qcom_tzmem.h and the corresponding select in the qcomtee Kconfig.
Regards, Amir
On 7/30/2026 6:38 AM, Julian Braha wrote:
'select' does not work on config options in a 'choice', so currently it is possible to enable QCOMTEE without QCOM_TZMEM_MODE_SHMBRIDGE, even though this is needed at runtime.
There are no users of the generic allocator option, QCOM_TZMEM_MODE_GENERIC, so let's remove it. Then, we can remove the containing choice..endchoice, which allows the 'select' to work as intended.
Suggested-by: Arnd Bergmann arnd@arndb.de Signed-off-by: Julian Braha julianbraha@gmail.com
Changes since v1:
- remove TZMEM_MODE_GENERIC instead of removing the dead select
Link: https://lore.kernel.org/all/20260715092539.18384-1-julianbraha@gmail.com/
drivers/firmware/qcom/Kconfig | 26 +++++--------------------- drivers/firmware/qcom/qcom_tzmem.c | 21 --------------------- 2 files changed, 5 insertions(+), 42 deletions(-)
diff --git a/drivers/firmware/qcom/Kconfig b/drivers/firmware/qcom/Kconfig index c7f8413ab996..d99e09c5fa18 100644 --- a/drivers/firmware/qcom/Kconfig +++ b/drivers/firmware/qcom/Kconfig @@ -34,33 +34,17 @@ config QCOM_TZMEM tristate select GENERIC_ALLOCATOR -choice
- prompt "TrustZone interface memory allocator mode"
- depends on QCOM_TZMEM
- default QCOM_TZMEM_MODE_GENERIC
- help
Selects the mode of the memory allocator providing memory buffers ofsuitable format for sharing with the TrustZone. If in doubt, select'Generic'.-config QCOM_TZMEM_MODE_GENERIC
- bool "Generic"
- help
Use the generic allocator mode. The memory is page-aligned, non-cachableand physically contiguous.config QCOM_TZMEM_MODE_SHMBRIDGE
- bool "SHM Bridge"
- bool "TrustZone interface memory allocator: SHM Bridge"
- depends on QCOM_TZMEM help
Use Qualcomm Shared Memory Bridge. The memory has the same alignment asin the 'Generic' allocator but is also explicitly marked as an SHM Bridgebuffer.
Use Qualcomm Shared Memory Bridge as memory allocator. The memory has thesame alignment as in the 'Generic' allocator but is also explicitly markedas an SHM Bridge buffer.With this selected, all buffers passed to the TrustZone must be allocated using the TZMem allocator or else the TrustZone will refuse to use them. -endchoice
config QCOM_QSEECOM bool "Qualcomm QSEECOM interface driver" depends on QCOM_SCM=y diff --git a/drivers/firmware/qcom/qcom_tzmem.c b/drivers/firmware/qcom/qcom_tzmem.c index 0635cbeacfc8..5b3e5a3ad1ae 100644 --- a/drivers/firmware/qcom/qcom_tzmem.c +++ b/drivers/firmware/qcom/qcom_tzmem.c @@ -49,25 +49,6 @@ static struct device *qcom_tzmem_dev; static RADIX_TREE(qcom_tzmem_chunks, GFP_ATOMIC); static DEFINE_SPINLOCK(qcom_tzmem_chunks_lock); -#if IS_ENABLED(CONFIG_QCOM_TZMEM_MODE_GENERIC)
-static int qcom_tzmem_init(void) -{
- return 0;
-}
-static int qcom_tzmem_init_area(struct qcom_tzmem_area *area) -{
- return 0;
-}
-static void qcom_tzmem_cleanup_area(struct qcom_tzmem_area *area) -{
-}
-#elif IS_ENABLED(CONFIG_QCOM_TZMEM_MODE_SHMBRIDGE)
#include <linux/firmware/qcom/qcom_scm.h> #include <linux/of.h> @@ -189,8 +170,6 @@ static void qcom_tzmem_cleanup_area(struct qcom_tzmem_area *area) kfree(handle); } -#endif /* CONFIG_QCOM_TZMEM_MODE_SHMBRIDGE */
static int qcom_tzmem_pool_add_memory(struct qcom_tzmem_pool *pool, size_t size, gfp_t gfp) {
On Tue, Aug 4, 2026, at 06:29, Amirreza Zarrabi wrote:
Hi Julian,
With this change, is QCOM_TZMEM_MODE_SHMBRIDGE still needed?
I think QCOM_TZMEM_MODE_SHMBRIDGE can therefore be removed entirely, along with the conditional declarations and stubs in qcom_tzmem.h and the corresponding select in the qcomtee Kconfig.
Looking at it again, I see that the patch does not actually do what I had expected. As you say the option no longer has any effect at all, when I thought the tzmem driver would just default back to generic mode without shmbridge being enabled.
What we probably want here is to change it to
#ifndef CONFIG_QCOM_TZMEM_MODE_SHMBRIDGE ... #else ... #endif
to keep the behavior unchanged and just fix the Kconfig logic.
Arnd
op-tee@lists.trustedfirmware.org