* [PATCH v2 0/3] misc: open-dice: add ACPI device discovery support
@ 2026-07-15 12:21 Song Guo
2026-07-15 12:21 ` [PATCH v2 1/3] misc: open-dice: do not assume dev->of_node is valid Song Guo
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Song Guo @ 2026-07-15 12:21 UTC (permalink / raw)
To: Arnd Bergmann, Greg Kroah-Hartman, linux-kernel; +Cc: Song Guo
OpenDICE can also used on x86 platforms for attestation, one of the
usecase is Android's protected VM.
The OpenDICE device driver only supports device tree, adding ACPI
support so it can also be used on x86 environments easily.
The first two commits are refactor to the current code, to make the
third commit as simple as possible.
The full patch set is verified using crosvm, with --acpi-table and
--file-backed-mapping arguments set. See commit 3 for details.
---
Changes in v2:
- split the patch into three commits (check of_node, use separate
variables, and add ACPI support)
v1: https://lore.kernel.org/lkml/20260715081821.3932123-1-songguo@google.com/T/#u
Song Guo (3):
misc: open-dice: do not assume dev->of_node is valid
misc: open-dice: save mem_base and mem_size in drvdata
misc: open-dice: add ACPI device discovery support
drivers/misc/open-dice.c | 51 +++++++++++++++++++++++++++++-----------
1 file changed, 37 insertions(+), 14 deletions(-)
--
2.55.0.141.g00534a21ce-goog
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 1/3] misc: open-dice: do not assume dev->of_node is valid
2026-07-15 12:21 [PATCH v2 0/3] misc: open-dice: add ACPI device discovery support Song Guo
@ 2026-07-15 12:21 ` Song Guo
2026-07-15 12:21 ` [PATCH v2 2/3] misc: open-dice: save mem_base and mem_size in drvdata Song Guo
2026-07-15 12:21 ` [PATCH v2 3/3] misc: open-dice: add ACPI device discovery support Song Guo
2 siblings, 0 replies; 4+ messages in thread
From: Song Guo @ 2026-07-15 12:21 UTC (permalink / raw)
To: Arnd Bergmann, Greg Kroah-Hartman, linux-kernel; +Cc: Song Guo
dev->of_node is not null only when the device is configured via device
tree. When the matching device is configured by other means (like ACPI),
the current code will cause null pointer dereference.
Signed-off-by: Song Guo <songguo@google.com>
---
drivers/misc/open-dice.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/misc/open-dice.c b/drivers/misc/open-dice.c
index 45060fb4ea27..094b24dfc6ea 100644
--- a/drivers/misc/open-dice.c
+++ b/drivers/misc/open-dice.c
@@ -118,13 +118,18 @@ static int __init open_dice_probe(struct platform_device *pdev)
{
static unsigned int dev_idx;
struct device *dev = &pdev->dev;
- struct reserved_mem *rmem;
+ struct reserved_mem *rmem = NULL;
struct open_dice_drvdata *drvdata;
int ret;
- rmem = of_reserved_mem_lookup(dev->of_node);
- if (!rmem) {
- dev_err(dev, "failed to lookup reserved memory\n");
+ if (dev->of_node) {
+ rmem = of_reserved_mem_lookup(dev->of_node);
+ if (!rmem) {
+ dev_err(dev, "failed to lookup reserved memory\n");
+ return -EINVAL;
+ }
+ } else {
+ dev_err(dev, "device not supported (no DT node)\n");
return -EINVAL;
}
--
2.55.0.141.g00534a21ce-goog
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 2/3] misc: open-dice: save mem_base and mem_size in drvdata
2026-07-15 12:21 [PATCH v2 0/3] misc: open-dice: add ACPI device discovery support Song Guo
2026-07-15 12:21 ` [PATCH v2 1/3] misc: open-dice: do not assume dev->of_node is valid Song Guo
@ 2026-07-15 12:21 ` Song Guo
2026-07-15 12:21 ` [PATCH v2 3/3] misc: open-dice: add ACPI device discovery support Song Guo
2 siblings, 0 replies; 4+ messages in thread
From: Song Guo @ 2026-07-15 12:21 UTC (permalink / raw)
To: Arnd Bergmann, Greg Kroah-Hartman, linux-kernel; +Cc: Song Guo
The reserved_mem only works on device tree systems.
This commit replaced it by phys_addr_t and resource_size_t to make it
possible to use open dice on non-DT platforms.
Signed-off-by: Song Guo <songguo@google.com>
---
drivers/misc/open-dice.c | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/drivers/misc/open-dice.c b/drivers/misc/open-dice.c
index 094b24dfc6ea..aabece6ed3d1 100644
--- a/drivers/misc/open-dice.c
+++ b/drivers/misc/open-dice.c
@@ -31,7 +31,8 @@
struct open_dice_drvdata {
struct mutex lock;
char name[16];
- struct reserved_mem *rmem;
+ phys_addr_t mem_base;
+ resource_size_t mem_size;
struct miscdevice misc;
};
@@ -45,14 +46,14 @@ static int open_dice_wipe(struct open_dice_drvdata *drvdata)
void *kaddr;
mutex_lock(&drvdata->lock);
- kaddr = devm_memremap(drvdata->misc.this_device, drvdata->rmem->base,
- drvdata->rmem->size, MEMREMAP_WC);
+ kaddr = devm_memremap(drvdata->misc.this_device, drvdata->mem_base,
+ drvdata->mem_size, MEMREMAP_WC);
if (IS_ERR(kaddr)) {
mutex_unlock(&drvdata->lock);
return PTR_ERR(kaddr);
}
- memset(kaddr, 0, drvdata->rmem->size);
+ memset(kaddr, 0, drvdata->mem_size);
devm_memunmap(drvdata->misc.this_device, kaddr);
mutex_unlock(&drvdata->lock);
return 0;
@@ -64,7 +65,7 @@ static int open_dice_wipe(struct open_dice_drvdata *drvdata)
static ssize_t open_dice_read(struct file *filp, char __user *ptr, size_t len,
loff_t *off)
{
- unsigned long val = to_open_dice_drvdata(filp)->rmem->size;
+ unsigned long val = to_open_dice_drvdata(filp)->mem_size;
return simple_read_from_buffer(ptr, len, off, &val, sizeof(val));
}
@@ -102,8 +103,8 @@ static int open_dice_mmap_prepare(struct vm_area_desc *desc)
/* Create write-combine mapping so all clients observe a wipe. */
desc->page_prot = pgprot_writecombine(desc->page_prot);
vma_desc_set_flags(desc, VMA_DONTCOPY_BIT, VMA_DONTDUMP_BIT);
- mmap_action_simple_ioremap(desc, drvdata->rmem->base,
- drvdata->rmem->size);
+ mmap_action_simple_ioremap(desc, drvdata->mem_base,
+ drvdata->mem_size);
return 0;
}
@@ -118,27 +119,31 @@ static int __init open_dice_probe(struct platform_device *pdev)
{
static unsigned int dev_idx;
struct device *dev = &pdev->dev;
- struct reserved_mem *rmem = NULL;
struct open_dice_drvdata *drvdata;
+ phys_addr_t mem_base;
+ resource_size_t mem_size;
int ret;
if (dev->of_node) {
- rmem = of_reserved_mem_lookup(dev->of_node);
+ struct reserved_mem *rmem = of_reserved_mem_lookup(dev->of_node);
+
if (!rmem) {
dev_err(dev, "failed to lookup reserved memory\n");
return -EINVAL;
}
+ mem_base = rmem->base;
+ mem_size = rmem->size;
} else {
dev_err(dev, "device not supported (no DT node)\n");
return -EINVAL;
}
- if (!rmem->size || (rmem->size > ULONG_MAX)) {
+ if (!mem_size || (mem_size > ULONG_MAX)) {
dev_err(dev, "invalid memory region size\n");
return -EINVAL;
}
- if (!PAGE_ALIGNED(rmem->base) || !PAGE_ALIGNED(rmem->size)) {
+ if (!PAGE_ALIGNED(mem_base) || !PAGE_ALIGNED(mem_size)) {
dev_err(dev, "memory region must be page-aligned\n");
return -EINVAL;
}
@@ -148,7 +153,8 @@ static int __init open_dice_probe(struct platform_device *pdev)
return -ENOMEM;
*drvdata = (struct open_dice_drvdata){
- .rmem = rmem,
+ .mem_base = mem_base,
+ .mem_size = mem_size,
.misc = (struct miscdevice){
.parent = dev,
.name = drvdata->name,
--
2.55.0.141.g00534a21ce-goog
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 3/3] misc: open-dice: add ACPI device discovery support
2026-07-15 12:21 [PATCH v2 0/3] misc: open-dice: add ACPI device discovery support Song Guo
2026-07-15 12:21 ` [PATCH v2 1/3] misc: open-dice: do not assume dev->of_node is valid Song Guo
2026-07-15 12:21 ` [PATCH v2 2/3] misc: open-dice: save mem_base and mem_size in drvdata Song Guo
@ 2026-07-15 12:21 ` Song Guo
2 siblings, 0 replies; 4+ messages in thread
From: Song Guo @ 2026-07-15 12:21 UTC (permalink / raw)
To: Arnd Bergmann, Greg Kroah-Hartman, linux-kernel; +Cc: Song Guo
OpenDICE can also used on x86 platforms for attestation, one of the
usecase is Android's protected VM.
The OpenDICE device driver only supports device tree, adding ACPI
support so it can also be used on x86 environments easily.
The patch is verified using crosvm, with the following ACPI table passed
using --acpi-table, with --file-backed-mapping for the corresponding
memory region.
DefinitionBlock (
"opendice.aml", "SSDT", 2, "GOOGLE", "OpenDICE", 0x00000001
)
{
Scope (\_SB)
{
Device (DICE)
{
Name (_HID, "PRP0001")
Name (_DSD, Package () {
ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package () {
"compatible",
Package () { "google,open-dice" }
}
}
})
Name (_CRS, ResourceTemplate () {
Memory32Fixed (ReadOnly, 0x9D1C3000, 0x00001000)
})
}
}
}
Signed-off-by: Song Guo <songguo@google.com>
---
drivers/misc/open-dice.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/misc/open-dice.c b/drivers/misc/open-dice.c
index aabece6ed3d1..303b35b03cb4 100644
--- a/drivers/misc/open-dice.c
+++ b/drivers/misc/open-dice.c
@@ -2,6 +2,7 @@
/*
* Copyright (C) 2021 - Google LLC
* Author: David Brazdil <dbrazdil@google.com>
+ * Author: Song Guo <songguo@google.com>
*
* Driver for Open Profile for DICE.
*
@@ -19,6 +20,7 @@
* close(fd);
*/
+#include <linux/acpi.h>
#include <linux/io.h>
#include <linux/miscdevice.h>
#include <linux/mm.h>
@@ -133,8 +135,17 @@ static int __init open_dice_probe(struct platform_device *pdev)
}
mem_base = rmem->base;
mem_size = rmem->size;
+ } else if (is_acpi_node(dev->fwnode)) {
+ struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+
+ if (!res) {
+ dev_err(dev, "failed to get MMIO resource\n");
+ return -EINVAL;
+ }
+ mem_base = res->start;
+ mem_size = resource_size(res);
} else {
- dev_err(dev, "device not supported (no DT node)\n");
+ dev_err(dev, "device not supported (no DT or ACPI node)\n");
return -EINVAL;
}
@@ -218,3 +229,4 @@ module_exit(open_dice_exit);
MODULE_DESCRIPTION("Driver for Open Profile for DICE.");
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("David Brazdil <dbrazdil@google.com>");
+MODULE_AUTHOR("Song Guo <songguo@google.com>");
--
2.55.0.141.g00534a21ce-goog
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-07-15 12:21 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-15 12:21 [PATCH v2 0/3] misc: open-dice: add ACPI device discovery support Song Guo
2026-07-15 12:21 ` [PATCH v2 1/3] misc: open-dice: do not assume dev->of_node is valid Song Guo
2026-07-15 12:21 ` [PATCH v2 2/3] misc: open-dice: save mem_base and mem_size in drvdata Song Guo
2026-07-15 12:21 ` [PATCH v2 3/3] misc: open-dice: add ACPI device discovery support Song Guo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox