Lines Matching +full:open +full:- +full:dice
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2021 - Google LLC
6 * Driver for Open Profile for DICE.
9 * generated by the Open Profile for DICE measured boot protocol. The memory
15 * fd = open("/dev/open-dice0", O_RDWR);
29 #define DRIVER_NAME "open-dice"
40 return container_of(filp->private_data, struct open_dice_drvdata, misc); in to_open_dice_drvdata()
47 mutex_lock(&drvdata->lock); in open_dice_wipe()
48 kaddr = devm_memremap(drvdata->misc.this_device, drvdata->rmem->base, in open_dice_wipe()
49 drvdata->rmem->size, MEMREMAP_WC); in open_dice_wipe()
51 mutex_unlock(&drvdata->lock); in open_dice_wipe()
55 memset(kaddr, 0, drvdata->rmem->size); in open_dice_wipe()
56 devm_memunmap(drvdata->misc.this_device, kaddr); in open_dice_wipe()
57 mutex_unlock(&drvdata->lock); in open_dice_wipe()
62 * Copies the size of the reserved memory region to the user-provided buffer.
67 unsigned long val = to_open_dice_drvdata(filp)->rmem->size; in open_dice_read()
73 * Triggers a wipe of the reserved memory region. The user-provided pointer
80 return -EIO; in open_dice_write()
93 if (vma->vm_flags & VM_MAYSHARE) { in open_dice_mmap()
95 if (vma->vm_flags & VM_WRITE) in open_dice_mmap()
96 return -EPERM; in open_dice_mmap()
101 /* Create write-combine mapping so all clients observe a wipe. */ in open_dice_mmap()
102 vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); in open_dice_mmap()
104 return vm_iomap_memory(vma, drvdata->rmem->base, drvdata->rmem->size); in open_dice_mmap()
117 struct device *dev = &pdev->dev; in open_dice_probe()
122 rmem = of_reserved_mem_lookup(dev->of_node); in open_dice_probe()
125 return -EINVAL; in open_dice_probe()
128 if (!rmem->size || (rmem->size > ULONG_MAX)) { in open_dice_probe()
130 return -EINVAL; in open_dice_probe()
133 if (!PAGE_ALIGNED(rmem->base) || !PAGE_ALIGNED(rmem->size)) { in open_dice_probe()
134 dev_err(dev, "memory region must be page-aligned\n"); in open_dice_probe()
135 return -EINVAL; in open_dice_probe()
140 return -ENOMEM; in open_dice_probe()
146 .name = drvdata->name, in open_dice_probe()
152 mutex_init(&drvdata->lock); in open_dice_probe()
155 snprintf(drvdata->name, sizeof(drvdata->name), DRIVER_NAME"%u", dev_idx++); in open_dice_probe()
157 ret = misc_register(&drvdata->misc); in open_dice_probe()
160 drvdata->name, ret); in open_dice_probe()
172 misc_deregister(&drvdata->misc); in open_dice_remove()
177 { .compatible = "google,open-dice" },
193 /* DICE regions are optional. Succeed even with zero instances. */ in open_dice_init()
194 return (ret == -ENODEV) ? 0 : ret; in open_dice_init()