diff options
author | Jason M. Bills <jason.m.bills@linux.intel.com> | 2020-12-08 00:45:20 +0300 |
---|---|---|
committer | Jason M. Bills <jason.m.bills@linux.intel.com> | 2020-12-10 01:15:05 +0300 |
commit | 82dbc15a05125a812c140a3c8cff81c366482229 (patch) | |
tree | 9c8f1ad262a2e281f20340cf8646aca6f8596044 /meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0035-Implement-a-memory-driver-share-memory.patch | |
parent | 8d6ae7f2a817751fad151168fa10ce28ee0869d8 (diff) | |
download | openbmc-82dbc15a05125a812c140a3c8cff81c366482229.tar.xz |
Update to internal 0.26
Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0035-Implement-a-memory-driver-share-memory.patch')
-rw-r--r-- | meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0035-Implement-a-memory-driver-share-memory.patch | 245 |
1 files changed, 0 insertions, 245 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0035-Implement-a-memory-driver-share-memory.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0035-Implement-a-memory-driver-share-memory.patch deleted file mode 100644 index 741b44462..000000000 --- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0035-Implement-a-memory-driver-share-memory.patch +++ /dev/null @@ -1,245 +0,0 @@ -From 9be0e8ccde0e096cc494aad6f15e7d7d3de3e46f Mon Sep 17 00:00:00 2001 -From: Cheng C Yang <cheng.c.yang@intel.com> -Date: Fri, 9 Nov 2018 10:24:37 +0800 -Subject: [PATCH] Implement a memory driver share memory - -Implement a memory driver for BMC to access VGA share memory. -The driver is used by MDRV2. In MDRV2 BIOS will send whole -SMBIOS table to VGA memory and BMC can get the table from VGA -memory through this driver. - -Signed-off-by: Cheng C Yang <cheng.c.yang@intel.com> ---- - .../bindings/soc/aspeed/aspeed-vga-sharedmem.txt | 20 +++ - drivers/soc/aspeed/Kconfig | 9 ++ - drivers/soc/aspeed/Makefile | 1 + - drivers/soc/aspeed/aspeed-vga-sharedmem.c | 163 +++++++++++++++++++++ - 4 files changed, 193 insertions(+) - create mode 100644 Documentation/devicetree/bindings/soc/aspeed/aspeed-vga-sharedmem.txt - create mode 100644 drivers/soc/aspeed/aspeed-vga-sharedmem.c - -diff --git a/Documentation/devicetree/bindings/soc/aspeed/aspeed-vga-sharedmem.txt b/Documentation/devicetree/bindings/soc/aspeed/aspeed-vga-sharedmem.txt -new file mode 100644 -index 000000000000..03f57c53e844 ---- /dev/null -+++ b/Documentation/devicetree/bindings/soc/aspeed/aspeed-vga-sharedmem.txt -@@ -0,0 +1,20 @@ -+* Aspeed VGA shared memory driver -+ -+Aspeed VGA shared memory driver allow user to read data from AST2500 -+VGA memory. This driver is required by ManagedDataRegionlV2 -+specification. In the spec, BIOS will transfer whole SMBIOS table to -+VGA memroy and BMC get the table from VGA memory. 0penBMC project do -+not allow to use /dev/mem for security concerns. To get the data in -+VGA shared memory in user space, implement this driver only allowed -+user to mmap limited memory area. -+ -+Required properties: -+- compatible: "aspeed,ast2500-vga-sharedmem" -+ - aspeed,ast2500-vga-sharedmem: Aspeed AST2500 family -+- reg: Should contain VGA shared memory start address and length -+ -+Example: -+vga-shared-memory { -+ compatible = "aspeed,ast2500-vga-sharedmem"; -+ reg = <0x9ff00000 0x100000>; -+}; -diff --git a/drivers/soc/aspeed/Kconfig b/drivers/soc/aspeed/Kconfig -index cb85917b8c6f..13cd9fbabbf1 100644 ---- a/drivers/soc/aspeed/Kconfig -+++ b/drivers/soc/aspeed/Kconfig -@@ -59,4 +59,13 @@ config ASPEED_XDMA - SOCs. The XDMA engine can perform automatic PCI DMA operations - between the AST2XXX (acting as a BMC) and a host processor. - -+config ASPEED_VGA_SHAREDMEM -+ tristate "Aspeed VGA Shared memory" -+ depends on SOC_ASPEED -+ help -+ To access VGA shared memory on Aspeed BMC, enable this option. -+ This driver used by ManagedDataRegionlV2 specification. In the -+ specification, BIOS will transfer whole SMBIOS table to VGA memory, -+ and BMC can get the table from VGA memory through this driver. -+ - endmenu -diff --git a/drivers/soc/aspeed/Makefile b/drivers/soc/aspeed/Makefile -index 56c5de5eeabe..875f0d9e7866 100644 ---- a/drivers/soc/aspeed/Makefile -+++ b/drivers/soc/aspeed/Makefile -@@ -6,3 +6,4 @@ obj-$(CONFIG_ASPEED_LPC_SIO) += aspeed-lpc-sio.o - obj-$(CONFIG_ASPEED_LPC_SNOOP) += aspeed-lpc-snoop.o - obj-$(CONFIG_ASPEED_P2A_CTRL) += aspeed-p2a-ctrl.o - obj-$(CONFIG_ASPEED_XDMA) += aspeed-xdma.o -+obj-$(CONFIG_ASPEED_VGA_SHAREDMEM) += aspeed-vga-sharedmem.o -diff --git a/drivers/soc/aspeed/aspeed-vga-sharedmem.c b/drivers/soc/aspeed/aspeed-vga-sharedmem.c -new file mode 100644 -index 000000000000..cd1f5431378c ---- /dev/null -+++ b/drivers/soc/aspeed/aspeed-vga-sharedmem.c -@@ -0,0 +1,163 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (c) 2018 Intel Corporation -+ * VGA Shared Memory driver for Aspeed AST2500 -+ */ -+ -+#include <linux/kernel.h> -+#include <linux/miscdevice.h> -+#include <linux/mm.h> -+#include <linux/module.h> -+#include <linux/of_platform.h> -+ -+#define SHAREDMEM_NAME "vgasharedmem" -+ -+struct aspeed_vga_sharedmem { -+ struct miscdevice miscdev; -+ unsigned int addr; -+ unsigned int size; -+ bool mmap_enable; -+}; -+ -+static struct aspeed_vga_sharedmem *file_sharemem(struct file *file) -+{ -+ return container_of(file->private_data, -+ struct aspeed_vga_sharedmem, miscdev); -+} -+ -+static int vga_open(struct inode *inode, struct file *file) -+{ -+ struct aspeed_vga_sharedmem *vga_sharedmem = file_sharemem(file); -+ -+ if (!capable(CAP_SYS_ADMIN)) -+ return -EPERM; -+ -+ if (!vga_sharedmem->mmap_enable) -+ return -EPERM; -+ -+ return 0; -+} -+ -+static int vga_mmap(struct file *file, struct vm_area_struct *vma) -+{ -+ struct aspeed_vga_sharedmem *vga_sharedmem = file_sharemem(file); -+ -+ if (!capable(CAP_SYS_ADMIN)) -+ return -EPERM; -+ -+ vma->vm_flags = (vma->vm_flags & (~VM_WRITE)); -+ remap_pfn_range(vma, vma->vm_start, vga_sharedmem->addr >> PAGE_SHIFT, -+ vga_sharedmem->size, vma->vm_page_prot); -+ return 0; -+} -+ -+static ssize_t enable_mmap_show(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct aspeed_vga_sharedmem *vga_sharedmem = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%u\n", vga_sharedmem->mmap_enable); -+} -+ -+static ssize_t enable_mmap_store(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, size_t count) -+{ -+ struct aspeed_vga_sharedmem *vga_sharedmem = -+ dev_get_drvdata(dev); -+ bool val; -+ -+ if (kstrtobool(buf, &val)) -+ return -EINVAL; -+ -+ vga_sharedmem->mmap_enable = val; -+ -+ return count; -+} -+static DEVICE_ATTR_RW(enable_mmap); -+ -+static struct attribute *sharedmem_attrs[] = { -+ &dev_attr_enable_mmap.attr, -+ NULL -+}; -+ -+static const struct attribute_group sharedmem_attr_group = { -+ .attrs = sharedmem_attrs, -+}; -+ -+static const struct attribute_group *sharedmem_attr_groups[] = { -+ &sharedmem_attr_group, -+ NULL -+}; -+ -+static const struct file_operations vga_sharedmem_fops = { -+ .owner = THIS_MODULE, -+ .open = vga_open, -+ .mmap = vga_mmap, -+}; -+ -+static struct miscdevice vga_sharedmem_miscdev = { -+ .minor = MISC_DYNAMIC_MINOR, -+ .name = SHAREDMEM_NAME, -+ .fops = &vga_sharedmem_fops, -+ .groups = sharedmem_attr_groups, -+}; -+ -+static int vga_sharedmem_probe(struct platform_device *pdev) -+{ -+ struct aspeed_vga_sharedmem *vga_sharedmem; -+ struct device *dev = &pdev->dev; -+ struct resource *rc; -+ -+ vga_sharedmem = devm_kzalloc(dev, sizeof(*vga_sharedmem), GFP_KERNEL); -+ if (!vga_sharedmem) -+ return -ENOMEM; -+ -+ dev_set_drvdata(&pdev->dev, vga_sharedmem); -+ -+ rc = platform_get_resource(pdev, IORESOURCE_MEM, 0); -+ if (!rc) { -+ dev_err(dev, "Couldn't read size device-tree property\n"); -+ return -ENXIO; -+ } -+ -+ vga_sharedmem->addr = rc->start; -+ vga_sharedmem->size = resource_size(rc); -+ vga_sharedmem->mmap_enable = true; -+ -+ vga_sharedmem->miscdev = vga_sharedmem_miscdev; -+ -+ return misc_register(&vga_sharedmem->miscdev); -+} -+ -+static int vga_sharedmem_remove(struct platform_device *pdev) -+{ -+ struct aspeed_vga_sharedmem *vga_sharedmem = -+ dev_get_drvdata(&pdev->dev); -+ -+ misc_deregister(&vga_sharedmem->miscdev); -+ -+ return 0; -+} -+ -+static const struct of_device_id vga_sharedmem_match[] = { -+ { .compatible = "aspeed,ast2500-vga-sharedmem", }, -+ { } -+}; -+MODULE_DEVICE_TABLE(of, vga_sharedmem_match); -+ -+static struct platform_driver vga_sharedmem_driver = { -+ .driver = { -+ .name = "VGA-SHAREDMEM", -+ .of_match_table = vga_sharedmem_match, -+ }, -+ .probe = vga_sharedmem_probe, -+ .remove = vga_sharedmem_remove, -+}; -+ -+module_platform_driver(vga_sharedmem_driver); -+ -+MODULE_AUTHOR("Yang Cheng <cheng.c.yang@intel.com>"); -+MODULE_DESCRIPTION("Shared VGA memory"); -+MODULE_LICENSE("GPL v2"); --- -2.7.4 - |