From 8e823cb00d9713e51321d820f36922d5d8eefa1d Mon Sep 17 00:00:00 2001 From: Jiankang Chen Date: Mon, 28 Oct 2019 20:29:50 +0800 Subject: [PATCH] svm: driver probe to read l2buff addr ascend inclusion category: feature bugzilla: 16554 CVE: NA -------- svm probe to read l2buff addr and size, this is rts to set l2buff Signed-off-by: chenjiankang (A) Signed-off-by: Lijun Fang Reviewed-by: Li Zefan Reviewed-by: Kefeng Wang Signed-off-by: Yang Yingliang --- drivers/char/svm.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/char/svm.c b/drivers/char/svm.c index 83e575705cf0..fce9f99572ef 100644 --- a/drivers/char/svm.c +++ b/drivers/char/svm.c @@ -1012,6 +1012,30 @@ static const struct file_operations svm_fops = { .open = svm_open, .unlocked_ioctl = svm_ioctl, }; + +#ifndef CONFIG_ACPI +static int svm_setup_l2buff(struct svm_device *sdev, struct device_node *np) +{ + struct device_node *l2buff = of_parse_phandle(np, "memory-region", 0); + + if (l2buff) { + struct resource r; + int err = of_address_to_resource(l2buff, 0, &r); + + if (err) { + of_node_put(l2buff); + return err; + } + + sdev->l2buff = r.start; + sdev->l2size = resource_size(&r); + } + + of_node_put(l2buff); + return 0; +} +#endif + /*svm device probe this is init the svm device*/ static int svm_device_probe(struct platform_device *pdev) { @@ -1066,6 +1090,14 @@ static int svm_device_probe(struct platform_device *pdev) #ifdef CONFIG_ACPI err = svm_init_core(sdev); #else + /* + * Get the l2buff phys address and size, if it do not exist + * just warn and continue, and runtime can not use L2BUFF. + */ + err = svm_setup_l2buff(sdev, np); + if (err) + dev_warn(dev, "Cannot get l2buff\n"); + err = svm_init_core(sdev, np); #endif -- GitLab