[meta-ti] [PATCH] linux-ti-staging: update with latest merges, first 4 SGX patches upstreamed
Denys Dmytriyenko
denis at denix.org
Thu Sep 3 13:16:18 PDT 2015
From: Denys Dmytriyenko <denys at ti.com>
Signed-off-by: Denys Dmytriyenko <denys at ti.com>
---
...0001-DT-gpu-add-binding-for-TI-SGX-driver.patch | 52 --
...-dts-DRA7xx-add-device-tree-entry-for-SGX.patch | 37 --
.../0003-arm-dra7xx-Add-gpu-hwmod-data.patch | 85 ---
.../0004-drm-omap-Add-omapdrm-plugin-API.patch | 585 ---------------------
recipes-kernel/linux/linux-ti-staging_4.1.bb | 10 +-
5 files changed, 3 insertions(+), 766 deletions(-)
delete mode 100644 recipes-kernel/linux/linux-ti-staging-4.1/0001-DT-gpu-add-binding-for-TI-SGX-driver.patch
delete mode 100644 recipes-kernel/linux/linux-ti-staging-4.1/0002-ARM-dts-DRA7xx-add-device-tree-entry-for-SGX.patch
delete mode 100644 recipes-kernel/linux/linux-ti-staging-4.1/0003-arm-dra7xx-Add-gpu-hwmod-data.patch
delete mode 100644 recipes-kernel/linux/linux-ti-staging-4.1/0004-drm-omap-Add-omapdrm-plugin-API.patch
diff --git a/recipes-kernel/linux/linux-ti-staging-4.1/0001-DT-gpu-add-binding-for-TI-SGX-driver.patch b/recipes-kernel/linux/linux-ti-staging-4.1/0001-DT-gpu-add-binding-for-TI-SGX-driver.patch
deleted file mode 100644
index 00628a6..0000000
--- a/recipes-kernel/linux/linux-ti-staging-4.1/0001-DT-gpu-add-binding-for-TI-SGX-driver.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 4b375ae644830ea38d8bfc1c78da6d83628527ea Mon Sep 17 00:00:00 2001
-From: Anand Balagopalakrishnan <anandb at ti.com>
-Date: Wed, 26 Aug 2015 09:34:49 +0000
-Subject: [PATCH 1/8] DT: gpu: add binding for TI SGX driver
-
-This patch adds the devicetree binding for TI SGX device driver.
-
-Signed-off-by: Anand Balagopalakrishnan <anandb at ti.com>
----
- Documentation/devicetree/bindings/gpu/ti-sgx.txt | 30 ++++++++++++++++++++++++
- 1 file changed, 30 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/gpu/ti-sgx.txt
-
-diff --git a/Documentation/devicetree/bindings/gpu/ti-sgx.txt b/Documentation/devicetree/bindings/gpu/ti-sgx.txt
-new file mode 100644
-index 0000000..6b7886a
---- /dev/null
-+++ b/Documentation/devicetree/bindings/gpu/ti-sgx.txt
-@@ -0,0 +1,30 @@
-+TI SGX 3D Graphics Accelerator
-+
-+Required properties:
-+ - compatible : value should take the following format:
-+ "ti,<soc>-<gpuversion>", "img,<gpuversion>"
-+
-+ accepted values:
-+ (a) "ti,dra7-sgx544", "img,sgx544" for TI DRA7xx / AM57x
-+ (b) "ti,am4-sgx530", "img,sgx530" for TI AM43x
-+ (c) "ti,am3-sgx530", "img,sgx530" for TI AM33x
-+ - reg: base address and length of the SGX registers
-+ - interrupts : SGX interrupt number
-+
-+Optional properties:
-+ - ti,hwmods: Name of the hwmod associated with the SGX
-+ - clocks : from SoC clock binding
-+ - clock-names : names of clocks listed in clocks property in the same order
-+ - reg-names : names of registers listed in reg property in same order
-+
-+Example:
-+ sgx at 0x56000000 {
-+ compatible = "ti,dra7-sgx544", "img,sgx544";
-+ reg = <0x5600fe00 0x200>;
-+ reg-names = "gpu_wrapper";
-+ interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
-+ ti,hwmods = "gpu";
-+ clocks = <&l3_iclk_div>, <&gpu_core_gclk_mux>,
-+ <&gpu_hyd_gclk_mux>;
-+ clock-names = "gpu_iclk", "gpu_fclk1", "gpu_fclk2";
-+ };
---
-2.2.0
-
diff --git a/recipes-kernel/linux/linux-ti-staging-4.1/0002-ARM-dts-DRA7xx-add-device-tree-entry-for-SGX.patch b/recipes-kernel/linux/linux-ti-staging-4.1/0002-ARM-dts-DRA7xx-add-device-tree-entry-for-SGX.patch
deleted file mode 100644
index ca84e27..0000000
--- a/recipes-kernel/linux/linux-ti-staging-4.1/0002-ARM-dts-DRA7xx-add-device-tree-entry-for-SGX.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From f3a4651fef3c51a0ec30f321352dc26273eb56d4 Mon Sep 17 00:00:00 2001
-From: Anand Balagopalakrishnan <anandb at ti.com>
-Date: Wed, 26 Aug 2015 09:34:50 +0000
-Subject: [PATCH 2/8] ARM: dts: DRA7xx: add device tree entry for SGX
-
-Addition of SGX to DRA7xx DTS to enable graphics support.
-
-Signed-off-by: Anand Balagopalakrishnan <anandb at ti.com>
----
- arch/arm/boot/dts/dra7.dtsi | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi
-index ce10ce3..c117ed0 100644
---- a/arch/arm/boot/dts/dra7.dtsi
-+++ b/arch/arm/boot/dts/dra7.dtsi
-@@ -889,6 +889,17 @@
- status = "disabled";
- };
-
-+ sgx: sgx at 0x56000000 {
-+ compatible = "ti,dra7-sgx544", "img,sgx544";
-+ reg = <0x5600fe00 0x200>;
-+ reg-names = "gpu_wrapper";
-+ interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
-+ ti,hwmods = "gpu";
-+ clocks = <&l3_iclk_div>, <&gpu_core_gclk_mux>,
-+ <&gpu_hyd_gclk_mux>;
-+ clock-names = "gpu_iclk", "gpu_fclk1", "gpu_fclk2";
-+ };
-+
- i2c1: i2c at 48070000 {
- compatible = "ti,omap4-i2c";
- reg = <0x48070000 0x100>;
---
-2.2.0
-
diff --git a/recipes-kernel/linux/linux-ti-staging-4.1/0003-arm-dra7xx-Add-gpu-hwmod-data.patch b/recipes-kernel/linux/linux-ti-staging-4.1/0003-arm-dra7xx-Add-gpu-hwmod-data.patch
deleted file mode 100644
index 7c74b24..0000000
--- a/recipes-kernel/linux/linux-ti-staging-4.1/0003-arm-dra7xx-Add-gpu-hwmod-data.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From 7d96508055ba60029f6fc7a3f8603f2f2630a667 Mon Sep 17 00:00:00 2001
-From: Hemant Hariyani <hemanthariyani at ti.com>
-Date: Wed, 26 Aug 2015 09:34:51 +0000
-Subject: [PATCH 3/8] arm:dra7xx: Add gpu hwmod data
-
-GPU hwmod data for DRA7xx
-
-Signed-off-by: Hemant Hariyani <hemanthariyani at ti.com>
-Signed-off-by: Gowtham Tammana <g-tammana at ti.com>
-Signed-off-by: Anand Balagopalakrishnan <anandb at ti.com>
----
- arch/arm/mach-omap2/omap_hwmod_7xx_data.c | 43 +++++++++++++++++++++++++++++++
- 1 file changed, 43 insertions(+)
-
-diff --git a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c
-index 0641f03..03982b7 100644
---- a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c
-+++ b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c
-@@ -1318,6 +1318,40 @@ static struct omap_hwmod dra7xx_gpmc_hwmod = {
- };
-
- /*
-+ * 'gpu' class
-+ * 3d graphics accelerator
-+ */
-+
-+static struct omap_hwmod_class_sysconfig dra7xx_gpu_sysc = {
-+ .rev_offs = 0x0000,
-+ .sysc_offs = 0x0010,
-+ .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
-+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
-+ SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
-+ MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
-+ .sysc_fields = &omap_hwmod_sysc_type2,
-+};
-+
-+static struct omap_hwmod_class dra7xx_gpu_hwmod_class = {
-+ .name = "gpu",
-+ .sysc = &dra7xx_gpu_sysc,
-+};
-+
-+static struct omap_hwmod dra7xx_gpu_hwmod = {
-+ .name = "gpu",
-+ .class = &dra7xx_gpu_hwmod_class,
-+ .clkdm_name = "gpu_clkdm",
-+ .main_clk = "gpu_core_gclk_mux",
-+ .prcm = {
-+ .omap4 = {
-+ .clkctrl_offs = DRA7XX_CM_GPU_GPU_CLKCTRL_OFFSET,
-+ .context_offs = DRA7XX_RM_GPU_GPU_CONTEXT_OFFSET,
-+ .modulemode = MODULEMODE_SWCTRL,
-+ },
-+ },
-+};
-+
-+/*
- * 'hdq1w' class
- *
- */
-@@ -3686,6 +3720,14 @@ static struct omap_hwmod_ocp_if dra7xx_l3_main_1__gpmc = {
- .user = OCP_USER_MPU | OCP_USER_SDMA,
- };
-
-+/* l3_main_1 -> gpu */
-+static struct omap_hwmod_ocp_if dra7xx_l3_main_1__gpu = {
-+ .master = &dra7xx_l3_main_1_hwmod,
-+ .slave = &dra7xx_gpu_hwmod,
-+ .clk = "l3_iclk_div",
-+ .user = OCP_USER_MPU | OCP_USER_SDMA,
-+};
-+
- static struct omap_hwmod_addr_space dra7xx_hdq1w_addrs[] = {
- {
- .pa_start = 0x480b2000,
-@@ -4461,6 +4503,7 @@ static struct omap_hwmod_ocp_if *dra7xx_hwmod_ocp_ifs[] __initdata = {
- &dra7xx_l4_per1__gpio7,
- &dra7xx_l4_per1__gpio8,
- &dra7xx_l3_main_1__gpmc,
-+ &dra7xx_l3_main_1__gpu,
- &dra7xx_l4_per1__hdq1w,
- &dra7xx_l4_per1__i2c1,
- &dra7xx_l4_per1__i2c2,
---
-2.2.0
-
diff --git a/recipes-kernel/linux/linux-ti-staging-4.1/0004-drm-omap-Add-omapdrm-plugin-API.patch b/recipes-kernel/linux/linux-ti-staging-4.1/0004-drm-omap-Add-omapdrm-plugin-API.patch
deleted file mode 100644
index e09325a..0000000
--- a/recipes-kernel/linux/linux-ti-staging-4.1/0004-drm-omap-Add-omapdrm-plugin-API.patch
+++ /dev/null
@@ -1,585 +0,0 @@
-From 931f19bb07833a342e1d87785e989f4609825927 Mon Sep 17 00:00:00 2001
-From: Rob Clark <rob at ti.com>
-Date: Wed, 26 Aug 2015 09:34:52 +0000
-Subject: [PATCH 4/8] drm/omap: Add omapdrm plugin API
-
-This patch enables SGX driver to be added as a plugin to omapdrm.
-
-Main changes involved:
-
-1. SGX specific GEM VM operations
- SGX requires contiguous memory for both texture memory as well as
- framebuffers. Memory allocation of FB is done through GEM and is
- guaranteed to be contiguous.
-
- Texture memory can be non-contiguous if:
- a. user space allocates memory
- b. memory is allocated by other cores
- c. memory comes from CMA
-
- We want to wrap such memory regions as GEM objects so that the graphics
- pipeline remains consistent.
-
-2. Support for ioctls from plugin driver
- SGX driver registers as a plugin to the omapdrm driver. During
- registration, SGX specific ioctls are added to omapdrm. This allows
- user space to control specific SGX feature sets using the DRM FD.
-
-3. Make GEM operations public
- SGX driver needs to work directly on GEM objects for DSS
- synchronization, getting Tiler address, etc.
-
-Signed-off-by: Rob Clark <rob at ti.com>
-Signed-off-by: Subhajit Paul <subhajit_paul at ti.com>
-Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ti.com>
-Signed-off-by: Anand Balagopalakrishnan <anandb at ti.com>
----
- drivers/gpu/drm/omapdrm/omap_drv.c | 125 +++++++++++++++++++++++++++++++++++--
- drivers/gpu/drm/omapdrm/omap_drv.h | 60 ++++++++++++++++--
- drivers/gpu/drm/omapdrm/omap_gem.c | 90 ++++++++++++++++++++++++++
- include/uapi/drm/omap_drm.h | 10 +--
- 4 files changed, 270 insertions(+), 15 deletions(-)
-
-diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
-index ea537a5..00876c7 100644
---- a/drivers/gpu/drm/omapdrm/omap_drv.c
-+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
-@@ -34,11 +34,20 @@
- #define DRIVER_MINOR 0
- #define DRIVER_PATCHLEVEL 0
-
-+struct drm_device *drm_device;
-+
- static int num_crtc = CONFIG_DRM_OMAP_NUM_CRTCS;
-
- MODULE_PARM_DESC(num_crtc, "Number of overlays to use as CRTCs");
- module_param(num_crtc, int, 0600);
-
-+static struct omap_drm_plugin *sgx_plugin;
-+
-+/* keep track of whether we are already loaded.. we may need to call
-+ * plugin's load() if they register after we are already loaded
-+ */
-+static bool loaded;
-+
- /*
- * mode config funcs
- */
-@@ -615,6 +624,19 @@ static int ioctl_set_param(struct drm_device *dev, void *data,
- return 0;
- }
-
-+static int ioctl_get_base(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ struct drm_omap_get_base *args = data;
-+
-+ if (!sgx_plugin)
-+ return -ENODEV;
-+
-+ args->ioctl_base = sgx_plugin->ioctl_base;
-+
-+ return 0;
-+}
-+
- static int ioctl_gem_new(struct drm_device *dev, void *data,
- struct drm_file *file_priv)
- {
-@@ -693,9 +715,10 @@ static int ioctl_gem_info(struct drm_device *dev, void *data,
- return ret;
- }
-
--static const struct drm_ioctl_desc ioctls[DRM_COMMAND_END - DRM_COMMAND_BASE] = {
-+static struct drm_ioctl_desc ioctls[DRM_COMMAND_END - DRM_COMMAND_BASE] = {
- DRM_IOCTL_DEF_DRV(OMAP_GET_PARAM, ioctl_get_param, DRM_UNLOCKED|DRM_AUTH),
- DRM_IOCTL_DEF_DRV(OMAP_SET_PARAM, ioctl_set_param, DRM_UNLOCKED|DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-+ DRM_IOCTL_DEF_DRV(OMAP_GET_BASE, ioctl_get_base, DRM_UNLOCKED|DRM_AUTH),
- DRM_IOCTL_DEF_DRV(OMAP_GEM_NEW, ioctl_gem_new, DRM_UNLOCKED|DRM_AUTH),
- DRM_IOCTL_DEF_DRV(OMAP_GEM_CPU_PREP, ioctl_gem_cpu_prep, DRM_UNLOCKED|DRM_AUTH),
- DRM_IOCTL_DEF_DRV(OMAP_GEM_CPU_FINI, ioctl_gem_cpu_fini, DRM_UNLOCKED|DRM_AUTH),
-@@ -725,6 +748,8 @@ static int dev_load(struct drm_device *dev, unsigned long flags)
-
- DBG("load: dev=%p", dev);
-
-+ drm_device = dev;
-+
- priv = kzalloc(sizeof(*priv), GFP_KERNEL);
- if (!priv)
- return -ENOMEM;
-@@ -770,6 +795,11 @@ static int dev_load(struct drm_device *dev, unsigned long flags)
-
- drm_kms_helper_poll_init(dev);
-
-+ loaded = true;
-+
-+ if (sgx_plugin)
-+ sgx_plugin->load(dev, flags);
-+
- return 0;
- }
-
-@@ -779,6 +809,9 @@ static int dev_unload(struct drm_device *dev)
-
- DBG("unload: dev=%p", dev);
-
-+ if (sgx_plugin)
-+ sgx_plugin->unload(dev);
-+
- drm_kms_helper_poll_fini(dev);
-
- if (priv->fbdev)
-@@ -797,15 +830,18 @@ static int dev_unload(struct drm_device *dev)
-
- dev_set_drvdata(dev->dev, NULL);
-
-+ loaded = false;
-+
- return 0;
- }
-
- static int dev_open(struct drm_device *dev, struct drm_file *file)
- {
-- file->driver_priv = NULL;
--
- DBG("open: dev=%p, file=%p", dev, file);
-
-+ if (sgx_plugin)
-+ sgx_plugin->open(dev, file);
-+
- return 0;
- }
-
-@@ -862,6 +898,9 @@ static void dev_preclose(struct drm_device *dev, struct drm_file *file)
-
- DBG("preclose: dev=%p", dev);
-
-+ if (sgx_plugin)
-+ sgx_plugin->release(dev, file);
-+
- /*
- * Unlink all pending CRTC events to make sure they won't be queued up
- * by a pending asynchronous commit.
-@@ -874,6 +913,8 @@ static void dev_preclose(struct drm_device *dev, struct drm_file *file)
- }
- }
- spin_unlock_irqrestore(&dev->event_lock, flags);
-+
-+ kfree(file->driver_priv);
- }
-
- static void dev_postclose(struct drm_device *dev, struct drm_file *file)
-@@ -883,8 +924,8 @@ static void dev_postclose(struct drm_device *dev, struct drm_file *file)
-
- static const struct vm_operations_struct omap_gem_vm_ops = {
- .fault = omap_gem_fault,
-- .open = drm_gem_vm_open,
-- .close = drm_gem_vm_close,
-+ .open = omap_gem_vm_open,
-+ .close = omap_gem_vm_close,
- };
-
- static const struct file_operations omapdriver_fops = {
-@@ -934,6 +975,80 @@ static struct drm_driver omap_drm_driver = {
- .patchlevel = DRIVER_PATCHLEVEL,
- };
-
-+int omap_drm_register_plugin(struct omap_drm_plugin *plugin)
-+{
-+ struct drm_device *dev = drm_device;
-+ int i;
-+
-+ DBG("register plugin: %p (%s)", plugin, plugin->name);
-+
-+ if (sgx_plugin)
-+ return -EBUSY;
-+
-+ for (i = 0; i < plugin->num_ioctls; i++) {
-+ int nr = i + DRM_OMAP_NUM_IOCTLS;
-+
-+ /* check for out of bounds ioctl or already registered ioctl */
-+ if (nr > ARRAY_SIZE(ioctls) || ioctls[nr].func) {
-+ dev_err(dev->dev, "invalid ioctl: %d (nr=%d)\n", i, nr);
-+ return -EINVAL;
-+ }
-+ }
-+
-+ plugin->ioctl_base = DRM_OMAP_NUM_IOCTLS;
-+
-+ /* register the plugin's ioctl's */
-+ for (i = 0; i < plugin->num_ioctls; i++) {
-+ int nr = i + DRM_OMAP_NUM_IOCTLS;
-+
-+ DBG("register ioctl: %d %08x", nr, plugin->ioctls[i].cmd);
-+
-+ ioctls[nr] = plugin->ioctls[i];
-+ }
-+
-+ omap_drm_driver.num_ioctls = DRM_OMAP_NUM_IOCTLS + plugin->num_ioctls;
-+
-+ sgx_plugin = plugin;
-+
-+ if (loaded)
-+ plugin->load(dev, 0);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(omap_drm_register_plugin);
-+
-+int omap_drm_unregister_plugin(struct omap_drm_plugin *plugin)
-+{
-+ int i;
-+
-+ for (i = 0; i < plugin->num_ioctls; i++) {
-+ const struct drm_ioctl_desc empty = { 0 };
-+ int nr = i + DRM_OMAP_NUM_IOCTLS;
-+
-+ ioctls[nr] = empty;
-+ }
-+
-+ omap_drm_driver.num_ioctls = DRM_OMAP_NUM_IOCTLS;
-+
-+ sgx_plugin = NULL;
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(omap_drm_unregister_plugin);
-+
-+void *omap_drm_file_priv(struct drm_file *file)
-+{
-+ return file->driver_priv;
-+}
-+EXPORT_SYMBOL(omap_drm_file_priv);
-+
-+void omap_drm_file_set_priv(struct drm_file *file, void *priv)
-+{
-+ file->driver_priv = priv;
-+}
-+EXPORT_SYMBOL(omap_drm_file_set_priv);
-+
-+
- static int pdev_probe(struct platform_device *device)
- {
- int r;
-diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h
-index 1f13c96..502d7b9 100644
---- a/drivers/gpu/drm/omapdrm/omap_drv.h
-+++ b/drivers/gpu/drm/omapdrm/omap_drv.h
-@@ -36,12 +36,6 @@
-
- #define MODULE_NAME "omapdrm"
-
--/* max # of mapper-id's that can be assigned.. todo, come up with a better
-- * (but still inexpensive) way to store/access per-buffer mapper private
-- * data..
-- */
--#define MAX_MAPPERS 2
--
- /* parameters which describe (unrotated) coordinates of scanout within a fb: */
- struct omap_drm_window {
- uint32_t rotation;
-@@ -276,4 +270,58 @@ fail:
- return -ENOENT;
- }
-
-+/****** PLUGIN API specific ******/
-+
-+/* interface that plug-in drivers (for now just PVR) can implement */
-+struct omap_drm_plugin {
-+ const char *name;
-+
-+ /* drm functions */
-+ int (*load)(struct drm_device *dev, unsigned long flags);
-+ int (*unload)(struct drm_device *dev);
-+ int (*open)(struct drm_device *dev, struct drm_file *file);
-+ int (*release)(struct drm_device *dev, struct drm_file *file);
-+
-+ struct drm_ioctl_desc *ioctls;
-+ int num_ioctls;
-+ int ioctl_base;
-+};
-+
-+int omap_drm_register_plugin(struct omap_drm_plugin *plugin);
-+int omap_drm_unregister_plugin(struct omap_drm_plugin *plugin);
-+
-+void *omap_drm_file_priv(struct drm_file *file);
-+void omap_drm_file_set_priv(struct drm_file *file, void *priv);
-+
-+void *omap_gem_priv(struct drm_gem_object *obj);
-+void omap_gem_set_priv(struct drm_gem_object *obj, void *priv);
-+void omap_gem_vm_open(struct vm_area_struct *vma);
-+void omap_gem_vm_close(struct vm_area_struct *vma);
-+
-+/* for external plugin buffers wrapped as GEM object (via. omap_gem_new_ext())
-+ * a vm_ops struct can be provided to get callback notification of various
-+ * events..
-+ */
-+struct omap_gem_vm_ops {
-+ void (*open)(struct vm_area_struct *area);
-+ void (*close)(struct vm_area_struct *area);
-+ /*maybe: int (*fault)(struct vm_area_struct *vma,
-+ struct vm_fault *vmf)*/
-+
-+ /* note: mmap isn't expected to do anything. it is just to allow buffer
-+ * allocate to update it's own internal state
-+ */
-+ void (*mmap)(struct file *, struct vm_area_struct *);
-+};
-+
-+struct drm_gem_object *omap_gem_new_ext(struct drm_device *dev,
-+ union omap_gem_size gsize, uint32_t flags,
-+ dma_addr_t paddr, struct page **pages,
-+ struct omap_gem_vm_ops *ops);
-+
-+void omap_gem_op_update(void);
-+int omap_gem_set_sync_object(struct drm_gem_object *obj, void *syncobj);
-+/*********************************/
-+
-+
- #endif /* __OMAP_DRV_H__ */
-diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c
-index f9ddbf5..8634fc6 100644
---- a/drivers/gpu/drm/omapdrm/omap_gem.c
-+++ b/drivers/gpu/drm/omapdrm/omap_gem.c
-@@ -117,6 +117,14 @@ struct omap_gem_object {
- uint32_t read_pending;
- uint32_t read_complete;
- } *sync;
-+
-+ struct omap_gem_vm_ops *ops;
-+
-+ /**
-+ * per-mapper private data..
-+ */
-+ void *priv;
-+
- };
-
- static int get_pages(struct drm_gem_object *obj, struct page ***pages);
-@@ -300,6 +308,7 @@ uint32_t omap_gem_flags(struct drm_gem_object *obj)
- {
- return to_omap_bo(obj)->flags;
- }
-+EXPORT_SYMBOL(omap_gem_flags);
-
- /** get mmap offset */
- static uint64_t mmap_offset(struct drm_gem_object *obj)
-@@ -329,6 +338,7 @@ uint64_t omap_gem_mmap_offset(struct drm_gem_object *obj)
- mutex_unlock(&obj->dev->struct_mutex);
- return offset;
- }
-+EXPORT_SYMBOL(omap_gem_mmap_offset);
-
- /** get mmap size */
- size_t omap_gem_mmap_size(struct drm_gem_object *obj)
-@@ -361,6 +371,7 @@ int omap_gem_tiled_size(struct drm_gem_object *obj, uint16_t *w, uint16_t *h)
- }
- return -EINVAL;
- }
-+EXPORT_SYMBOL(omap_gem_tiled_size);
-
- /* Normal handling for the case of faulting in non-tiled buffers */
- static int fault_1d(struct drm_gem_object *obj,
-@@ -593,6 +604,9 @@ int omap_gem_mmap_obj(struct drm_gem_object *obj,
- vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
- }
-
-+ if (omap_obj->ops && omap_obj->ops->mmap)
-+ omap_obj->ops->mmap(obj->filp, vma);
-+
- return 0;
- }
-
-@@ -804,6 +818,7 @@ fail:
-
- return ret;
- }
-+EXPORT_SYMBOL(omap_gem_get_paddr);
-
- /* Release physical address, when DMA is no longer being performed.. this
- * could potentially unpin and unmap buffers from TILER
-@@ -834,6 +849,7 @@ void omap_gem_put_paddr(struct drm_gem_object *obj)
-
- mutex_unlock(&obj->dev->struct_mutex);
- }
-+EXPORT_SYMBOL(omap_gem_put_paddr);
-
- /* Get rotated scanout address (only valid if already pinned), at the
- * specified orientation and x,y offset from top-left corner of buffer
-@@ -864,6 +880,7 @@ int omap_gem_tiled_stride(struct drm_gem_object *obj, uint32_t orient)
- ret = tiler_stride(gem2fmt(omap_obj->flags), orient);
- return ret;
- }
-+EXPORT_SYMBOL(omap_gem_tiled_stride);
-
- /* acquire pages when needed (for example, for DMA where physically
- * contiguous buffer is not required
-@@ -913,6 +930,7 @@ int omap_gem_get_pages(struct drm_gem_object *obj, struct page ***pages,
- mutex_unlock(&obj->dev->struct_mutex);
- return ret;
- }
-+EXPORT_SYMBOL(omap_gem_get_pages);
-
- /* release pages when DMA no longer being performed */
- int omap_gem_put_pages(struct drm_gem_object *obj)
-@@ -923,6 +941,7 @@ int omap_gem_put_pages(struct drm_gem_object *obj)
- */
- return 0;
- }
-+EXPORT_SYMBOL(omap_gem_put_pages);
-
- /* Get kernel virtual address for CPU access.. this more or less only
- * exists for omap_fbdev. This should be called with struct_mutex
-@@ -1118,17 +1137,20 @@ void omap_gem_op_update(void)
- sync_op_update();
- spin_unlock(&sync_lock);
- }
-+EXPORT_SYMBOL(omap_gem_op_update);
-
- /* mark the start of read and/or write operation */
- int omap_gem_op_start(struct drm_gem_object *obj, enum omap_gem_op op)
- {
- return sync_op(obj, op, true);
- }
-+EXPORT_SYMBOL(omap_gem_op_start);
-
- int omap_gem_op_finish(struct drm_gem_object *obj, enum omap_gem_op op)
- {
- return sync_op(obj, op, false);
- }
-+EXPORT_SYMBOL(omap_gem_op_finish);
-
- static DECLARE_WAIT_QUEUE_HEAD(sync_event);
-
-@@ -1181,6 +1203,7 @@ int omap_gem_op_sync(struct drm_gem_object *obj, enum omap_gem_op op)
- }
- return ret;
- }
-+EXPORT_SYMBOL(omap_gem_op_sync);
-
- /* call fxn(arg), either synchronously or asynchronously if the op
- * is currently blocked.. fxn() can be called from any context
-@@ -1227,6 +1250,7 @@ int omap_gem_op_async(struct drm_gem_object *obj, enum omap_gem_op op,
-
- return 0;
- }
-+EXPORT_SYMBOL(omap_gem_op_async);
-
- /* special API so PVR can update the buffer to use a sync-object allocated
- * from it's sync-obj heap. Only used for a newly allocated (from PVR's
-@@ -1264,6 +1288,7 @@ unlock:
- spin_unlock(&sync_lock);
- return ret;
- }
-+EXPORT_SYMBOL(omap_gem_set_sync_object);
-
- /* don't call directly.. called from GEM core when it is time to actually
- * free the object..
-@@ -1485,3 +1510,68 @@ void omap_gem_deinit(struct drm_device *dev)
- */
- kfree(usergart);
- }
-+
-+/****** PLUGIN API specific ******/
-+
-+/* This constructor is mainly to give plugins a way to wrap their
-+ * own allocations
-+ */
-+struct drm_gem_object *omap_gem_new_ext(struct drm_device *dev,
-+ union omap_gem_size gsize, uint32_t flags,
-+ dma_addr_t paddr, struct page **pages,
-+ struct omap_gem_vm_ops *ops)
-+{
-+ struct drm_gem_object *obj;
-+
-+ BUG_ON((flags & OMAP_BO_TILED) && !pages);
-+
-+ if (paddr)
-+ flags |= OMAP_BO_DMA;
-+
-+ obj = omap_gem_new(dev, gsize, flags | OMAP_BO_EXT_MEM);
-+ if (obj) {
-+ struct omap_gem_object *omap_obj = to_omap_bo(obj);
-+
-+ omap_obj->paddr = paddr;
-+ omap_obj->pages = pages;
-+ omap_obj->ops = ops;
-+ }
-+ return obj;
-+}
-+EXPORT_SYMBOL(omap_gem_new_ext);
-+
-+void omap_gem_vm_open(struct vm_area_struct *vma)
-+{
-+ struct drm_gem_object *obj = vma->vm_private_data;
-+ struct omap_gem_object *omap_obj = to_omap_bo(obj);
-+
-+ if (omap_obj->ops && omap_obj->ops->open)
-+ omap_obj->ops->open(vma);
-+ else
-+ drm_gem_vm_open(vma);
-+
-+}
-+
-+void omap_gem_vm_close(struct vm_area_struct *vma)
-+{
-+ struct drm_gem_object *obj = vma->vm_private_data;
-+ struct omap_gem_object *omap_obj = to_omap_bo(obj);
-+
-+ if (omap_obj->ops && omap_obj->ops->close)
-+ omap_obj->ops->close(vma);
-+ else
-+ drm_gem_vm_close(vma);
-+
-+}
-+
-+void *omap_gem_priv(struct drm_gem_object *obj)
-+{
-+ return to_omap_bo(obj)->priv;
-+}
-+EXPORT_SYMBOL(omap_gem_priv);
-+
-+void omap_gem_set_priv(struct drm_gem_object *obj, void *priv)
-+{
-+ to_omap_bo(obj)->priv = priv;
-+}
-+EXPORT_SYMBOL(omap_gem_set_priv);
-diff --git a/include/uapi/drm/omap_drm.h b/include/uapi/drm/omap_drm.h
-index 1d0b117..5292b93 100644
---- a/include/uapi/drm/omap_drm.h
-+++ b/include/uapi/drm/omap_drm.h
-@@ -33,6 +33,12 @@ struct drm_omap_param {
- uint64_t value; /* in (set_param), out (get_param) */
- };
-
-+struct drm_omap_get_base {
-+ char plugin_name[64]; /* in */
-+ uint32_t ioctl_base; /* out */
-+ uint32_t __pad;
-+};
-+
- #define OMAP_BO_SCANOUT 0x00000001 /* scanout capable (phys contiguous) */
- #define OMAP_BO_CACHE_MASK 0x00000006 /* cache type mask, see cache modes */
- #define OMAP_BO_TILED_MASK 0x00000f00 /* tiled mapping mask, see tiled modes */
-@@ -101,9 +107,7 @@ struct drm_omap_gem_info {
-
- #define DRM_OMAP_GET_PARAM 0x00
- #define DRM_OMAP_SET_PARAM 0x01
--/* placeholder for plugin-api
- #define DRM_OMAP_GET_BASE 0x02
--*/
- #define DRM_OMAP_GEM_NEW 0x03
- #define DRM_OMAP_GEM_CPU_PREP 0x04
- #define DRM_OMAP_GEM_CPU_FINI 0x05
-@@ -112,9 +116,7 @@ struct drm_omap_gem_info {
-
- #define DRM_IOCTL_OMAP_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_OMAP_GET_PARAM, struct drm_omap_param)
- #define DRM_IOCTL_OMAP_SET_PARAM DRM_IOW (DRM_COMMAND_BASE + DRM_OMAP_SET_PARAM, struct drm_omap_param)
--/* placeholder for plugin-api
- #define DRM_IOCTL_OMAP_GET_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_OMAP_GET_BASE, struct drm_omap_get_base)
--*/
- #define DRM_IOCTL_OMAP_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_OMAP_GEM_NEW, struct drm_omap_gem_new)
- #define DRM_IOCTL_OMAP_GEM_CPU_PREP DRM_IOW (DRM_COMMAND_BASE + DRM_OMAP_GEM_CPU_PREP, struct drm_omap_gem_cpu_prep)
- #define DRM_IOCTL_OMAP_GEM_CPU_FINI DRM_IOW (DRM_COMMAND_BASE + DRM_OMAP_GEM_CPU_FINI, struct drm_omap_gem_cpu_fini)
---
-2.2.0
-
diff --git a/recipes-kernel/linux/linux-ti-staging_4.1.bb b/recipes-kernel/linux/linux-ti-staging_4.1.bb
index 36f0323..3ee123b 100644
--- a/recipes-kernel/linux/linux-ti-staging_4.1.bb
+++ b/recipes-kernel/linux/linux-ti-staging_4.1.bb
@@ -50,11 +50,11 @@ S = "${WORKDIR}/git"
BRANCH = "ti-lsk-linux-4.1.y"
-SRCREV = "babcc95b3b74f099c63cae31abf403edf6154c0b"
+SRCREV = "1d476946dc0c881868ffd78cd2be30740ce0dea1"
PV = "4.1.6+git${SRCPV}"
# Append to the MACHINE_KERNEL_PR so that a new SRCREV will cause a rebuild
-MACHINE_KERNEL_PR_append = "f"
+MACHINE_KERNEL_PR_append = "g"
PR = "${MACHINE_KERNEL_PR}"
KERNEL_CONFIG_DIR = "${S}/ti_config_fragments"
@@ -70,11 +70,7 @@ KERNEL_GIT_PROTOCOL = "git"
SRC_URI += "${KERNEL_GIT_URI};protocol=${KERNEL_GIT_PROTOCOL};branch=${BRANCH} \
file://defconfig"
-GFX_PATCHES = "file://0001-DT-gpu-add-binding-for-TI-SGX-driver.patch \
- file://0002-ARM-dts-DRA7xx-add-device-tree-entry-for-SGX.patch \
- file://0003-arm-dra7xx-Add-gpu-hwmod-data.patch \
- file://0004-drm-omap-Add-omapdrm-plugin-API.patch \
- file://0005-arm-Export-cache-flush-management-symbols-when-MULTI.patch \
+GFX_PATCHES = "file://0005-arm-Export-cache-flush-management-symbols-when-MULTI.patch \
file://0006-ARM-dts-am33xx-add-DT-node-for-gpu.patch \
file://0007-ARM-dts-am437x-add-DT-node-for-gpu.patch \
file://0008-ARM-OMAP2-Use-pdata-quirks-for-sgx-deassert_hardrese.patch"
--
2.2.0
More information about the meta-ti
mailing list