kernel-brax3-ubuntu-touch/drivers/misc/mediatek/trusted_mem/ssheap_proc.c
erascape f319b992b1 kernel-5.15: Initial import brax3 UT kernel
* halium configs enabled

Signed-off-by: erascape <erascape@proton.me>
2025-09-23 15:17:10 +00:00

106 lines
2.2 KiB
C

// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2021 MediaTek Inc.
*/
#define pr_fmt(fmt) "[TMEM] ssheap: " fmt
#include <linux/types.h>
#include <linux/of_reserved_mem.h>
#include <linux/printk.h>
#include <linux/cma.h>
#include <linux/debugfs.h>
#include <linux/mutex.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/proc_fs.h>
#include <linux/uaccess.h>
#include <linux/memblock.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <linux/sizes.h>
#include <linux/dma-direct.h>
#include <linux/kallsyms.h>
#include <linux/slab.h>
#include <linux/arm-smccc.h>
#include <public/trusted_mem_api.h>
#include <private/ssheap_priv.h>
#define independent_ssheap 0
static int get_reserved_cma_memory(struct device *dev)
{
struct device_node *np;
struct reserved_mem *rmem;
np = of_parse_phandle(dev->of_node, "memory-region", 0);
if (!np) {
pr_info("%s, no ssheap region\n", __func__);
return -EINVAL;
}
rmem = of_reserved_mem_lookup(np);
of_node_put(np);
if (!rmem) {
pr_info("%s, no ssheap device info\n", __func__);
return -EINVAL;
}
/*
* setup init device with rmem
*/
of_reserved_mem_device_init_by_idx(dev, dev->of_node, 0);
pr_info("cma base=%pa, size=%pa\n", &rmem->base, &rmem->size);
ssheap_set_cma_region(rmem->base, rmem->size);
return 0;
}
int ssheap_init(struct platform_device *pdev)
{
pr_info("%s:%d\n", __func__, __LINE__);
ssheap_set_dev(&pdev->dev);
pdev->dev.coherent_dma_mask = DMA_BIT_MASK(64);
#if IS_ENABLED(CONFIG_TEST_MTK_TRUSTED_MEMORY)
create_ssheap_ut_device();
#endif
get_reserved_cma_memory(&pdev->dev);
return 0;
}
int ssheap_exit(struct platform_device *pdev)
{
pr_info("%s:%d\n", __func__, __LINE__);
return 0;
}
#if independent_ssheap
static const struct of_device_id tm_of_match_table[] = {
{ .compatible = "mediatek,trusted_mem_ssheap" },
{},
};
static struct platform_driver ssheap_driver = {
.probe = ssheap_init,
.remove = ssheap_exit,
.driver = {
.name = "trusted_mem_ssheap",
.of_match_table = tm_of_match_table,
},
};
module_platform_driver(ssheap_driver);
MODULE_DESCRIPTION("Mediatek Trusted Secure Subsystem Heap Driver");
MODULE_LICENSE("GPL");
#endif