diff options
| author | Denys Dmytriyenko <denys@ti.com> | 2015-09-04 10:53:54 +0000 |
|---|---|---|
| committer | Denys Dmytriyenko <denys@ti.com> | 2015-09-04 00:58:43 -0400 |
| commit | 9a673a7ee219bd103e48df05e35bc55d6b2bfbd0 (patch) | |
| tree | dd4d2335537fdd78a7b16c3cdd3f0fc59148ca72 | |
| parent | 6b02dab85cb0eceabab6baf7ebcc218f69d3c7c0 (diff) | |
| download | meta-ti-9a673a7ee219bd103e48df05e35bc55d6b2bfbd0.tar.gz | |
linux-ti-staging: update with latest merges, first 4 SGX patches upstreamed
Signed-off-by: Denys Dmytriyenko <denys@ti.com>
6 files changed, 14 insertions, 771 deletions
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 00628a6c..00000000 --- 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 @@ | |||
| 1 | From 4b375ae644830ea38d8bfc1c78da6d83628527ea Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Anand Balagopalakrishnan <anandb@ti.com> | ||
| 3 | Date: Wed, 26 Aug 2015 09:34:49 +0000 | ||
| 4 | Subject: [PATCH 1/8] DT: gpu: add binding for TI SGX driver | ||
| 5 | |||
| 6 | This patch adds the devicetree binding for TI SGX device driver. | ||
| 7 | |||
| 8 | Signed-off-by: Anand Balagopalakrishnan <anandb@ti.com> | ||
| 9 | --- | ||
| 10 | Documentation/devicetree/bindings/gpu/ti-sgx.txt | 30 ++++++++++++++++++++++++ | ||
| 11 | 1 file changed, 30 insertions(+) | ||
| 12 | create mode 100644 Documentation/devicetree/bindings/gpu/ti-sgx.txt | ||
| 13 | |||
| 14 | diff --git a/Documentation/devicetree/bindings/gpu/ti-sgx.txt b/Documentation/devicetree/bindings/gpu/ti-sgx.txt | ||
| 15 | new file mode 100644 | ||
| 16 | index 0000000..6b7886a | ||
| 17 | --- /dev/null | ||
| 18 | +++ b/Documentation/devicetree/bindings/gpu/ti-sgx.txt | ||
| 19 | @@ -0,0 +1,30 @@ | ||
| 20 | +TI SGX 3D Graphics Accelerator | ||
| 21 | + | ||
| 22 | +Required properties: | ||
| 23 | + - compatible : value should take the following format: | ||
| 24 | + "ti,<soc>-<gpuversion>", "img,<gpuversion>" | ||
| 25 | + | ||
| 26 | + accepted values: | ||
| 27 | + (a) "ti,dra7-sgx544", "img,sgx544" for TI DRA7xx / AM57x | ||
| 28 | + (b) "ti,am4-sgx530", "img,sgx530" for TI AM43x | ||
| 29 | + (c) "ti,am3-sgx530", "img,sgx530" for TI AM33x | ||
| 30 | + - reg: base address and length of the SGX registers | ||
| 31 | + - interrupts : SGX interrupt number | ||
| 32 | + | ||
| 33 | +Optional properties: | ||
| 34 | + - ti,hwmods: Name of the hwmod associated with the SGX | ||
| 35 | + - clocks : from SoC clock binding | ||
| 36 | + - clock-names : names of clocks listed in clocks property in the same order | ||
| 37 | + - reg-names : names of registers listed in reg property in same order | ||
| 38 | + | ||
| 39 | +Example: | ||
| 40 | + sgx@0x56000000 { | ||
| 41 | + compatible = "ti,dra7-sgx544", "img,sgx544"; | ||
| 42 | + reg = <0x5600fe00 0x200>; | ||
| 43 | + reg-names = "gpu_wrapper"; | ||
| 44 | + interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>; | ||
| 45 | + ti,hwmods = "gpu"; | ||
| 46 | + clocks = <&l3_iclk_div>, <&gpu_core_gclk_mux>, | ||
| 47 | + <&gpu_hyd_gclk_mux>; | ||
| 48 | + clock-names = "gpu_iclk", "gpu_fclk1", "gpu_fclk2"; | ||
| 49 | + }; | ||
| 50 | -- | ||
| 51 | 2.2.0 | ||
| 52 | |||
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 ca84e279..00000000 --- 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 @@ | |||
| 1 | From f3a4651fef3c51a0ec30f321352dc26273eb56d4 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Anand Balagopalakrishnan <anandb@ti.com> | ||
| 3 | Date: Wed, 26 Aug 2015 09:34:50 +0000 | ||
| 4 | Subject: [PATCH 2/8] ARM: dts: DRA7xx: add device tree entry for SGX | ||
| 5 | |||
| 6 | Addition of SGX to DRA7xx DTS to enable graphics support. | ||
| 7 | |||
| 8 | Signed-off-by: Anand Balagopalakrishnan <anandb@ti.com> | ||
| 9 | --- | ||
| 10 | arch/arm/boot/dts/dra7.dtsi | 11 +++++++++++ | ||
| 11 | 1 file changed, 11 insertions(+) | ||
| 12 | |||
| 13 | diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi | ||
| 14 | index ce10ce3..c117ed0 100644 | ||
| 15 | --- a/arch/arm/boot/dts/dra7.dtsi | ||
| 16 | +++ b/arch/arm/boot/dts/dra7.dtsi | ||
| 17 | @@ -889,6 +889,17 @@ | ||
| 18 | status = "disabled"; | ||
| 19 | }; | ||
| 20 | |||
| 21 | + sgx: sgx@0x56000000 { | ||
| 22 | + compatible = "ti,dra7-sgx544", "img,sgx544"; | ||
| 23 | + reg = <0x5600fe00 0x200>; | ||
| 24 | + reg-names = "gpu_wrapper"; | ||
| 25 | + interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>; | ||
| 26 | + ti,hwmods = "gpu"; | ||
| 27 | + clocks = <&l3_iclk_div>, <&gpu_core_gclk_mux>, | ||
| 28 | + <&gpu_hyd_gclk_mux>; | ||
| 29 | + clock-names = "gpu_iclk", "gpu_fclk1", "gpu_fclk2"; | ||
| 30 | + }; | ||
| 31 | + | ||
| 32 | i2c1: i2c@48070000 { | ||
| 33 | compatible = "ti,omap4-i2c"; | ||
| 34 | reg = <0x48070000 0x100>; | ||
| 35 | -- | ||
| 36 | 2.2.0 | ||
| 37 | |||
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 7c74b243..00000000 --- a/recipes-kernel/linux/linux-ti-staging-4.1/0003-arm-dra7xx-Add-gpu-hwmod-data.patch +++ /dev/null | |||
| @@ -1,85 +0,0 @@ | |||
| 1 | From 7d96508055ba60029f6fc7a3f8603f2f2630a667 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Hemant Hariyani <hemanthariyani@ti.com> | ||
| 3 | Date: Wed, 26 Aug 2015 09:34:51 +0000 | ||
| 4 | Subject: [PATCH 3/8] arm:dra7xx: Add gpu hwmod data | ||
| 5 | |||
| 6 | GPU hwmod data for DRA7xx | ||
| 7 | |||
| 8 | Signed-off-by: Hemant Hariyani <hemanthariyani@ti.com> | ||
| 9 | Signed-off-by: Gowtham Tammana <g-tammana@ti.com> | ||
| 10 | Signed-off-by: Anand Balagopalakrishnan <anandb@ti.com> | ||
| 11 | --- | ||
| 12 | arch/arm/mach-omap2/omap_hwmod_7xx_data.c | 43 +++++++++++++++++++++++++++++++ | ||
| 13 | 1 file changed, 43 insertions(+) | ||
| 14 | |||
| 15 | diff --git a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c | ||
| 16 | index 0641f03..03982b7 100644 | ||
| 17 | --- a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c | ||
| 18 | +++ b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c | ||
| 19 | @@ -1318,6 +1318,40 @@ static struct omap_hwmod dra7xx_gpmc_hwmod = { | ||
| 20 | }; | ||
| 21 | |||
| 22 | /* | ||
| 23 | + * 'gpu' class | ||
| 24 | + * 3d graphics accelerator | ||
| 25 | + */ | ||
| 26 | + | ||
| 27 | +static struct omap_hwmod_class_sysconfig dra7xx_gpu_sysc = { | ||
| 28 | + .rev_offs = 0x0000, | ||
| 29 | + .sysc_offs = 0x0010, | ||
| 30 | + .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE), | ||
| 31 | + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | | ||
| 32 | + SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO | | ||
| 33 | + MSTANDBY_SMART | MSTANDBY_SMART_WKUP), | ||
| 34 | + .sysc_fields = &omap_hwmod_sysc_type2, | ||
| 35 | +}; | ||
| 36 | + | ||
| 37 | +static struct omap_hwmod_class dra7xx_gpu_hwmod_class = { | ||
| 38 | + .name = "gpu", | ||
| 39 | + .sysc = &dra7xx_gpu_sysc, | ||
| 40 | +}; | ||
| 41 | + | ||
| 42 | +static struct omap_hwmod dra7xx_gpu_hwmod = { | ||
| 43 | + .name = "gpu", | ||
| 44 | + .class = &dra7xx_gpu_hwmod_class, | ||
| 45 | + .clkdm_name = "gpu_clkdm", | ||
| 46 | + .main_clk = "gpu_core_gclk_mux", | ||
| 47 | + .prcm = { | ||
| 48 | + .omap4 = { | ||
| 49 | + .clkctrl_offs = DRA7XX_CM_GPU_GPU_CLKCTRL_OFFSET, | ||
| 50 | + .context_offs = DRA7XX_RM_GPU_GPU_CONTEXT_OFFSET, | ||
| 51 | + .modulemode = MODULEMODE_SWCTRL, | ||
| 52 | + }, | ||
| 53 | + }, | ||
| 54 | +}; | ||
| 55 | + | ||
| 56 | +/* | ||
| 57 | * 'hdq1w' class | ||
| 58 | * | ||
| 59 | */ | ||
| 60 | @@ -3686,6 +3720,14 @@ static struct omap_hwmod_ocp_if dra7xx_l3_main_1__gpmc = { | ||
| 61 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
| 62 | }; | ||
| 63 | |||
| 64 | +/* l3_main_1 -> gpu */ | ||
| 65 | +static struct omap_hwmod_ocp_if dra7xx_l3_main_1__gpu = { | ||
| 66 | + .master = &dra7xx_l3_main_1_hwmod, | ||
| 67 | + .slave = &dra7xx_gpu_hwmod, | ||
| 68 | + .clk = "l3_iclk_div", | ||
| 69 | + .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
| 70 | +}; | ||
| 71 | + | ||
| 72 | static struct omap_hwmod_addr_space dra7xx_hdq1w_addrs[] = { | ||
| 73 | { | ||
| 74 | .pa_start = 0x480b2000, | ||
| 75 | @@ -4461,6 +4503,7 @@ static struct omap_hwmod_ocp_if *dra7xx_hwmod_ocp_ifs[] __initdata = { | ||
| 76 | &dra7xx_l4_per1__gpio7, | ||
| 77 | &dra7xx_l4_per1__gpio8, | ||
| 78 | &dra7xx_l3_main_1__gpmc, | ||
| 79 | + &dra7xx_l3_main_1__gpu, | ||
| 80 | &dra7xx_l4_per1__hdq1w, | ||
| 81 | &dra7xx_l4_per1__i2c1, | ||
| 82 | &dra7xx_l4_per1__i2c2, | ||
| 83 | -- | ||
| 84 | 2.2.0 | ||
| 85 | |||
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 e09325ab..00000000 --- a/recipes-kernel/linux/linux-ti-staging-4.1/0004-drm-omap-Add-omapdrm-plugin-API.patch +++ /dev/null | |||
| @@ -1,585 +0,0 @@ | |||
| 1 | From 931f19bb07833a342e1d87785e989f4609825927 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Rob Clark <rob@ti.com> | ||
| 3 | Date: Wed, 26 Aug 2015 09:34:52 +0000 | ||
| 4 | Subject: [PATCH 4/8] drm/omap: Add omapdrm plugin API | ||
| 5 | |||
| 6 | This patch enables SGX driver to be added as a plugin to omapdrm. | ||
| 7 | |||
| 8 | Main changes involved: | ||
| 9 | |||
| 10 | 1. SGX specific GEM VM operations | ||
| 11 | SGX requires contiguous memory for both texture memory as well as | ||
| 12 | framebuffers. Memory allocation of FB is done through GEM and is | ||
| 13 | guaranteed to be contiguous. | ||
| 14 | |||
| 15 | Texture memory can be non-contiguous if: | ||
| 16 | a. user space allocates memory | ||
| 17 | b. memory is allocated by other cores | ||
| 18 | c. memory comes from CMA | ||
| 19 | |||
| 20 | We want to wrap such memory regions as GEM objects so that the graphics | ||
| 21 | pipeline remains consistent. | ||
| 22 | |||
| 23 | 2. Support for ioctls from plugin driver | ||
| 24 | SGX driver registers as a plugin to the omapdrm driver. During | ||
| 25 | registration, SGX specific ioctls are added to omapdrm. This allows | ||
| 26 | user space to control specific SGX feature sets using the DRM FD. | ||
| 27 | |||
| 28 | 3. Make GEM operations public | ||
| 29 | SGX driver needs to work directly on GEM objects for DSS | ||
| 30 | synchronization, getting Tiler address, etc. | ||
| 31 | |||
| 32 | Signed-off-by: Rob Clark <rob@ti.com> | ||
| 33 | Signed-off-by: Subhajit Paul <subhajit_paul@ti.com> | ||
| 34 | Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> | ||
| 35 | Signed-off-by: Anand Balagopalakrishnan <anandb@ti.com> | ||
| 36 | --- | ||
| 37 | drivers/gpu/drm/omapdrm/omap_drv.c | 125 +++++++++++++++++++++++++++++++++++-- | ||
| 38 | drivers/gpu/drm/omapdrm/omap_drv.h | 60 ++++++++++++++++-- | ||
| 39 | drivers/gpu/drm/omapdrm/omap_gem.c | 90 ++++++++++++++++++++++++++ | ||
| 40 | include/uapi/drm/omap_drm.h | 10 +-- | ||
| 41 | 4 files changed, 270 insertions(+), 15 deletions(-) | ||
| 42 | |||
| 43 | diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c | ||
| 44 | index ea537a5..00876c7 100644 | ||
| 45 | --- a/drivers/gpu/drm/omapdrm/omap_drv.c | ||
| 46 | +++ b/drivers/gpu/drm/omapdrm/omap_drv.c | ||
| 47 | @@ -34,11 +34,20 @@ | ||
| 48 | #define DRIVER_MINOR 0 | ||
| 49 | #define DRIVER_PATCHLEVEL 0 | ||
| 50 | |||
| 51 | +struct drm_device *drm_device; | ||
| 52 | + | ||
| 53 | static int num_crtc = CONFIG_DRM_OMAP_NUM_CRTCS; | ||
| 54 | |||
| 55 | MODULE_PARM_DESC(num_crtc, "Number of overlays to use as CRTCs"); | ||
| 56 | module_param(num_crtc, int, 0600); | ||
| 57 | |||
| 58 | +static struct omap_drm_plugin *sgx_plugin; | ||
| 59 | + | ||
| 60 | +/* keep track of whether we are already loaded.. we may need to call | ||
| 61 | + * plugin's load() if they register after we are already loaded | ||
| 62 | + */ | ||
| 63 | +static bool loaded; | ||
| 64 | + | ||
| 65 | /* | ||
| 66 | * mode config funcs | ||
| 67 | */ | ||
| 68 | @@ -615,6 +624,19 @@ static int ioctl_set_param(struct drm_device *dev, void *data, | ||
| 69 | return 0; | ||
| 70 | } | ||
| 71 | |||
| 72 | +static int ioctl_get_base(struct drm_device *dev, void *data, | ||
| 73 | + struct drm_file *file_priv) | ||
| 74 | +{ | ||
| 75 | + struct drm_omap_get_base *args = data; | ||
| 76 | + | ||
| 77 | + if (!sgx_plugin) | ||
| 78 | + return -ENODEV; | ||
| 79 | + | ||
| 80 | + args->ioctl_base = sgx_plugin->ioctl_base; | ||
| 81 | + | ||
| 82 | + return 0; | ||
| 83 | +} | ||
| 84 | + | ||
| 85 | static int ioctl_gem_new(struct drm_device *dev, void *data, | ||
| 86 | struct drm_file *file_priv) | ||
| 87 | { | ||
| 88 | @@ -693,9 +715,10 @@ static int ioctl_gem_info(struct drm_device *dev, void *data, | ||
| 89 | return ret; | ||
| 90 | } | ||
| 91 | |||
| 92 | -static const struct drm_ioctl_desc ioctls[DRM_COMMAND_END - DRM_COMMAND_BASE] = { | ||
| 93 | +static struct drm_ioctl_desc ioctls[DRM_COMMAND_END - DRM_COMMAND_BASE] = { | ||
| 94 | DRM_IOCTL_DEF_DRV(OMAP_GET_PARAM, ioctl_get_param, DRM_UNLOCKED|DRM_AUTH), | ||
| 95 | DRM_IOCTL_DEF_DRV(OMAP_SET_PARAM, ioctl_set_param, DRM_UNLOCKED|DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | ||
| 96 | + DRM_IOCTL_DEF_DRV(OMAP_GET_BASE, ioctl_get_base, DRM_UNLOCKED|DRM_AUTH), | ||
| 97 | DRM_IOCTL_DEF_DRV(OMAP_GEM_NEW, ioctl_gem_new, DRM_UNLOCKED|DRM_AUTH), | ||
| 98 | DRM_IOCTL_DEF_DRV(OMAP_GEM_CPU_PREP, ioctl_gem_cpu_prep, DRM_UNLOCKED|DRM_AUTH), | ||
| 99 | DRM_IOCTL_DEF_DRV(OMAP_GEM_CPU_FINI, ioctl_gem_cpu_fini, DRM_UNLOCKED|DRM_AUTH), | ||
| 100 | @@ -725,6 +748,8 @@ static int dev_load(struct drm_device *dev, unsigned long flags) | ||
| 101 | |||
| 102 | DBG("load: dev=%p", dev); | ||
| 103 | |||
| 104 | + drm_device = dev; | ||
| 105 | + | ||
| 106 | priv = kzalloc(sizeof(*priv), GFP_KERNEL); | ||
| 107 | if (!priv) | ||
| 108 | return -ENOMEM; | ||
| 109 | @@ -770,6 +795,11 @@ static int dev_load(struct drm_device *dev, unsigned long flags) | ||
| 110 | |||
| 111 | drm_kms_helper_poll_init(dev); | ||
| 112 | |||
| 113 | + loaded = true; | ||
| 114 | + | ||
| 115 | + if (sgx_plugin) | ||
| 116 | + sgx_plugin->load(dev, flags); | ||
| 117 | + | ||
| 118 | return 0; | ||
| 119 | } | ||
| 120 | |||
| 121 | @@ -779,6 +809,9 @@ static int dev_unload(struct drm_device *dev) | ||
| 122 | |||
| 123 | DBG("unload: dev=%p", dev); | ||
| 124 | |||
| 125 | + if (sgx_plugin) | ||
| 126 | + sgx_plugin->unload(dev); | ||
| 127 | + | ||
| 128 | drm_kms_helper_poll_fini(dev); | ||
| 129 | |||
| 130 | if (priv->fbdev) | ||
| 131 | @@ -797,15 +830,18 @@ static int dev_unload(struct drm_device *dev) | ||
| 132 | |||
| 133 | dev_set_drvdata(dev->dev, NULL); | ||
| 134 | |||
| 135 | + loaded = false; | ||
| 136 | + | ||
| 137 | return 0; | ||
| 138 | } | ||
| 139 | |||
| 140 | static int dev_open(struct drm_device *dev, struct drm_file *file) | ||
| 141 | { | ||
| 142 | - file->driver_priv = NULL; | ||
| 143 | - | ||
| 144 | DBG("open: dev=%p, file=%p", dev, file); | ||
| 145 | |||
| 146 | + if (sgx_plugin) | ||
| 147 | + sgx_plugin->open(dev, file); | ||
| 148 | + | ||
| 149 | return 0; | ||
| 150 | } | ||
| 151 | |||
| 152 | @@ -862,6 +898,9 @@ static void dev_preclose(struct drm_device *dev, struct drm_file *file) | ||
| 153 | |||
| 154 | DBG("preclose: dev=%p", dev); | ||
| 155 | |||
| 156 | + if (sgx_plugin) | ||
| 157 | + sgx_plugin->release(dev, file); | ||
| 158 | + | ||
| 159 | /* | ||
| 160 | * Unlink all pending CRTC events to make sure they won't be queued up | ||
| 161 | * by a pending asynchronous commit. | ||
| 162 | @@ -874,6 +913,8 @@ static void dev_preclose(struct drm_device *dev, struct drm_file *file) | ||
| 163 | } | ||
| 164 | } | ||
| 165 | spin_unlock_irqrestore(&dev->event_lock, flags); | ||
| 166 | + | ||
| 167 | + kfree(file->driver_priv); | ||
| 168 | } | ||
| 169 | |||
| 170 | static void dev_postclose(struct drm_device *dev, struct drm_file *file) | ||
| 171 | @@ -883,8 +924,8 @@ static void dev_postclose(struct drm_device *dev, struct drm_file *file) | ||
| 172 | |||
| 173 | static const struct vm_operations_struct omap_gem_vm_ops = { | ||
| 174 | .fault = omap_gem_fault, | ||
| 175 | - .open = drm_gem_vm_open, | ||
| 176 | - .close = drm_gem_vm_close, | ||
| 177 | + .open = omap_gem_vm_open, | ||
| 178 | + .close = omap_gem_vm_close, | ||
| 179 | }; | ||
| 180 | |||
| 181 | static const struct file_operations omapdriver_fops = { | ||
| 182 | @@ -934,6 +975,80 @@ static struct drm_driver omap_drm_driver = { | ||
| 183 | .patchlevel = DRIVER_PATCHLEVEL, | ||
| 184 | }; | ||
| 185 | |||
| 186 | +int omap_drm_register_plugin(struct omap_drm_plugin *plugin) | ||
| 187 | +{ | ||
| 188 | + struct drm_device *dev = drm_device; | ||
| 189 | + int i; | ||
| 190 | + | ||
| 191 | + DBG("register plugin: %p (%s)", plugin, plugin->name); | ||
| 192 | + | ||
| 193 | + if (sgx_plugin) | ||
| 194 | + return -EBUSY; | ||
| 195 | + | ||
| 196 | + for (i = 0; i < plugin->num_ioctls; i++) { | ||
| 197 | + int nr = i + DRM_OMAP_NUM_IOCTLS; | ||
| 198 | + | ||
| 199 | + /* check for out of bounds ioctl or already registered ioctl */ | ||
| 200 | + if (nr > ARRAY_SIZE(ioctls) || ioctls[nr].func) { | ||
| 201 | + dev_err(dev->dev, "invalid ioctl: %d (nr=%d)\n", i, nr); | ||
| 202 | + return -EINVAL; | ||
| 203 | + } | ||
| 204 | + } | ||
| 205 | + | ||
| 206 | + plugin->ioctl_base = DRM_OMAP_NUM_IOCTLS; | ||
| 207 | + | ||
| 208 | + /* register the plugin's ioctl's */ | ||
| 209 | + for (i = 0; i < plugin->num_ioctls; i++) { | ||
| 210 | + int nr = i + DRM_OMAP_NUM_IOCTLS; | ||
| 211 | + | ||
| 212 | + DBG("register ioctl: %d %08x", nr, plugin->ioctls[i].cmd); | ||
| 213 | + | ||
| 214 | + ioctls[nr] = plugin->ioctls[i]; | ||
| 215 | + } | ||
| 216 | + | ||
| 217 | + omap_drm_driver.num_ioctls = DRM_OMAP_NUM_IOCTLS + plugin->num_ioctls; | ||
| 218 | + | ||
| 219 | + sgx_plugin = plugin; | ||
| 220 | + | ||
| 221 | + if (loaded) | ||
| 222 | + plugin->load(dev, 0); | ||
| 223 | + | ||
| 224 | + return 0; | ||
| 225 | +} | ||
| 226 | +EXPORT_SYMBOL(omap_drm_register_plugin); | ||
| 227 | + | ||
| 228 | +int omap_drm_unregister_plugin(struct omap_drm_plugin *plugin) | ||
| 229 | +{ | ||
| 230 | + int i; | ||
| 231 | + | ||
| 232 | + for (i = 0; i < plugin->num_ioctls; i++) { | ||
| 233 | + const struct drm_ioctl_desc empty = { 0 }; | ||
| 234 | + int nr = i + DRM_OMAP_NUM_IOCTLS; | ||
| 235 | + | ||
| 236 | + ioctls[nr] = empty; | ||
| 237 | + } | ||
| 238 | + | ||
| 239 | + omap_drm_driver.num_ioctls = DRM_OMAP_NUM_IOCTLS; | ||
| 240 | + | ||
| 241 | + sgx_plugin = NULL; | ||
| 242 | + | ||
| 243 | + return 0; | ||
| 244 | +} | ||
| 245 | +EXPORT_SYMBOL(omap_drm_unregister_plugin); | ||
| 246 | + | ||
| 247 | +void *omap_drm_file_priv(struct drm_file *file) | ||
| 248 | +{ | ||
| 249 | + return file->driver_priv; | ||
| 250 | +} | ||
| 251 | +EXPORT_SYMBOL(omap_drm_file_priv); | ||
| 252 | + | ||
| 253 | +void omap_drm_file_set_priv(struct drm_file *file, void *priv) | ||
| 254 | +{ | ||
| 255 | + file->driver_priv = priv; | ||
| 256 | +} | ||
| 257 | +EXPORT_SYMBOL(omap_drm_file_set_priv); | ||
| 258 | + | ||
| 259 | + | ||
| 260 | static int pdev_probe(struct platform_device *device) | ||
| 261 | { | ||
| 262 | int r; | ||
| 263 | diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h | ||
| 264 | index 1f13c96..502d7b9 100644 | ||
| 265 | --- a/drivers/gpu/drm/omapdrm/omap_drv.h | ||
| 266 | +++ b/drivers/gpu/drm/omapdrm/omap_drv.h | ||
| 267 | @@ -36,12 +36,6 @@ | ||
| 268 | |||
| 269 | #define MODULE_NAME "omapdrm" | ||
| 270 | |||
| 271 | -/* max # of mapper-id's that can be assigned.. todo, come up with a better | ||
| 272 | - * (but still inexpensive) way to store/access per-buffer mapper private | ||
| 273 | - * data.. | ||
| 274 | - */ | ||
| 275 | -#define MAX_MAPPERS 2 | ||
| 276 | - | ||
| 277 | /* parameters which describe (unrotated) coordinates of scanout within a fb: */ | ||
| 278 | struct omap_drm_window { | ||
| 279 | uint32_t rotation; | ||
| 280 | @@ -276,4 +270,58 @@ fail: | ||
| 281 | return -ENOENT; | ||
| 282 | } | ||
| 283 | |||
| 284 | +/****** PLUGIN API specific ******/ | ||
| 285 | + | ||
| 286 | +/* interface that plug-in drivers (for now just PVR) can implement */ | ||
| 287 | +struct omap_drm_plugin { | ||
| 288 | + const char *name; | ||
| 289 | + | ||
| 290 | + /* drm functions */ | ||
| 291 | + int (*load)(struct drm_device *dev, unsigned long flags); | ||
| 292 | + int (*unload)(struct drm_device *dev); | ||
| 293 | + int (*open)(struct drm_device *dev, struct drm_file *file); | ||
| 294 | + int (*release)(struct drm_device *dev, struct drm_file *file); | ||
| 295 | + | ||
| 296 | + struct drm_ioctl_desc *ioctls; | ||
| 297 | + int num_ioctls; | ||
| 298 | + int ioctl_base; | ||
| 299 | +}; | ||
| 300 | + | ||
| 301 | +int omap_drm_register_plugin(struct omap_drm_plugin *plugin); | ||
| 302 | +int omap_drm_unregister_plugin(struct omap_drm_plugin *plugin); | ||
| 303 | + | ||
| 304 | +void *omap_drm_file_priv(struct drm_file *file); | ||
| 305 | +void omap_drm_file_set_priv(struct drm_file *file, void *priv); | ||
| 306 | + | ||
| 307 | +void *omap_gem_priv(struct drm_gem_object *obj); | ||
| 308 | +void omap_gem_set_priv(struct drm_gem_object *obj, void *priv); | ||
| 309 | +void omap_gem_vm_open(struct vm_area_struct *vma); | ||
| 310 | +void omap_gem_vm_close(struct vm_area_struct *vma); | ||
| 311 | + | ||
| 312 | +/* for external plugin buffers wrapped as GEM object (via. omap_gem_new_ext()) | ||
| 313 | + * a vm_ops struct can be provided to get callback notification of various | ||
| 314 | + * events.. | ||
| 315 | + */ | ||
| 316 | +struct omap_gem_vm_ops { | ||
| 317 | + void (*open)(struct vm_area_struct *area); | ||
| 318 | + void (*close)(struct vm_area_struct *area); | ||
| 319 | + /*maybe: int (*fault)(struct vm_area_struct *vma, | ||
| 320 | + struct vm_fault *vmf)*/ | ||
| 321 | + | ||
| 322 | + /* note: mmap isn't expected to do anything. it is just to allow buffer | ||
| 323 | + * allocate to update it's own internal state | ||
| 324 | + */ | ||
| 325 | + void (*mmap)(struct file *, struct vm_area_struct *); | ||
| 326 | +}; | ||
| 327 | + | ||
| 328 | +struct drm_gem_object *omap_gem_new_ext(struct drm_device *dev, | ||
| 329 | + union omap_gem_size gsize, uint32_t flags, | ||
| 330 | + dma_addr_t paddr, struct page **pages, | ||
| 331 | + struct omap_gem_vm_ops *ops); | ||
| 332 | + | ||
| 333 | +void omap_gem_op_update(void); | ||
| 334 | +int omap_gem_set_sync_object(struct drm_gem_object *obj, void *syncobj); | ||
| 335 | +/*********************************/ | ||
| 336 | + | ||
| 337 | + | ||
| 338 | #endif /* __OMAP_DRV_H__ */ | ||
| 339 | diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c | ||
| 340 | index f9ddbf5..8634fc6 100644 | ||
| 341 | --- a/drivers/gpu/drm/omapdrm/omap_gem.c | ||
| 342 | +++ b/drivers/gpu/drm/omapdrm/omap_gem.c | ||
| 343 | @@ -117,6 +117,14 @@ struct omap_gem_object { | ||
| 344 | uint32_t read_pending; | ||
| 345 | uint32_t read_complete; | ||
| 346 | } *sync; | ||
| 347 | + | ||
| 348 | + struct omap_gem_vm_ops *ops; | ||
| 349 | + | ||
| 350 | + /** | ||
| 351 | + * per-mapper private data.. | ||
| 352 | + */ | ||
| 353 | + void *priv; | ||
| 354 | + | ||
| 355 | }; | ||
| 356 | |||
| 357 | static int get_pages(struct drm_gem_object *obj, struct page ***pages); | ||
| 358 | @@ -300,6 +308,7 @@ uint32_t omap_gem_flags(struct drm_gem_object *obj) | ||
| 359 | { | ||
| 360 | return to_omap_bo(obj)->flags; | ||
| 361 | } | ||
| 362 | +EXPORT_SYMBOL(omap_gem_flags); | ||
| 363 | |||
| 364 | /** get mmap offset */ | ||
| 365 | static uint64_t mmap_offset(struct drm_gem_object *obj) | ||
| 366 | @@ -329,6 +338,7 @@ uint64_t omap_gem_mmap_offset(struct drm_gem_object *obj) | ||
| 367 | mutex_unlock(&obj->dev->struct_mutex); | ||
| 368 | return offset; | ||
| 369 | } | ||
| 370 | +EXPORT_SYMBOL(omap_gem_mmap_offset); | ||
| 371 | |||
| 372 | /** get mmap size */ | ||
| 373 | size_t omap_gem_mmap_size(struct drm_gem_object *obj) | ||
| 374 | @@ -361,6 +371,7 @@ int omap_gem_tiled_size(struct drm_gem_object *obj, uint16_t *w, uint16_t *h) | ||
| 375 | } | ||
| 376 | return -EINVAL; | ||
| 377 | } | ||
| 378 | +EXPORT_SYMBOL(omap_gem_tiled_size); | ||
| 379 | |||
| 380 | /* Normal handling for the case of faulting in non-tiled buffers */ | ||
| 381 | static int fault_1d(struct drm_gem_object *obj, | ||
| 382 | @@ -593,6 +604,9 @@ int omap_gem_mmap_obj(struct drm_gem_object *obj, | ||
| 383 | vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); | ||
| 384 | } | ||
| 385 | |||
| 386 | + if (omap_obj->ops && omap_obj->ops->mmap) | ||
| 387 | + omap_obj->ops->mmap(obj->filp, vma); | ||
| 388 | + | ||
| 389 | return 0; | ||
| 390 | } | ||
| 391 | |||
| 392 | @@ -804,6 +818,7 @@ fail: | ||
| 393 | |||
| 394 | return ret; | ||
| 395 | } | ||
| 396 | +EXPORT_SYMBOL(omap_gem_get_paddr); | ||
| 397 | |||
| 398 | /* Release physical address, when DMA is no longer being performed.. this | ||
| 399 | * could potentially unpin and unmap buffers from TILER | ||
| 400 | @@ -834,6 +849,7 @@ void omap_gem_put_paddr(struct drm_gem_object *obj) | ||
| 401 | |||
| 402 | mutex_unlock(&obj->dev->struct_mutex); | ||
| 403 | } | ||
| 404 | +EXPORT_SYMBOL(omap_gem_put_paddr); | ||
| 405 | |||
| 406 | /* Get rotated scanout address (only valid if already pinned), at the | ||
| 407 | * specified orientation and x,y offset from top-left corner of buffer | ||
| 408 | @@ -864,6 +880,7 @@ int omap_gem_tiled_stride(struct drm_gem_object *obj, uint32_t orient) | ||
| 409 | ret = tiler_stride(gem2fmt(omap_obj->flags), orient); | ||
| 410 | return ret; | ||
| 411 | } | ||
| 412 | +EXPORT_SYMBOL(omap_gem_tiled_stride); | ||
| 413 | |||
| 414 | /* acquire pages when needed (for example, for DMA where physically | ||
| 415 | * contiguous buffer is not required | ||
| 416 | @@ -913,6 +930,7 @@ int omap_gem_get_pages(struct drm_gem_object *obj, struct page ***pages, | ||
| 417 | mutex_unlock(&obj->dev->struct_mutex); | ||
| 418 | return ret; | ||
| 419 | } | ||
| 420 | +EXPORT_SYMBOL(omap_gem_get_pages); | ||
| 421 | |||
| 422 | /* release pages when DMA no longer being performed */ | ||
| 423 | int omap_gem_put_pages(struct drm_gem_object *obj) | ||
| 424 | @@ -923,6 +941,7 @@ int omap_gem_put_pages(struct drm_gem_object *obj) | ||
| 425 | */ | ||
| 426 | return 0; | ||
| 427 | } | ||
| 428 | +EXPORT_SYMBOL(omap_gem_put_pages); | ||
| 429 | |||
| 430 | /* Get kernel virtual address for CPU access.. this more or less only | ||
| 431 | * exists for omap_fbdev. This should be called with struct_mutex | ||
| 432 | @@ -1118,17 +1137,20 @@ void omap_gem_op_update(void) | ||
| 433 | sync_op_update(); | ||
| 434 | spin_unlock(&sync_lock); | ||
| 435 | } | ||
| 436 | +EXPORT_SYMBOL(omap_gem_op_update); | ||
| 437 | |||
| 438 | /* mark the start of read and/or write operation */ | ||
| 439 | int omap_gem_op_start(struct drm_gem_object *obj, enum omap_gem_op op) | ||
| 440 | { | ||
| 441 | return sync_op(obj, op, true); | ||
| 442 | } | ||
| 443 | +EXPORT_SYMBOL(omap_gem_op_start); | ||
| 444 | |||
| 445 | int omap_gem_op_finish(struct drm_gem_object *obj, enum omap_gem_op op) | ||
| 446 | { | ||
| 447 | return sync_op(obj, op, false); | ||
| 448 | } | ||
| 449 | +EXPORT_SYMBOL(omap_gem_op_finish); | ||
| 450 | |||
| 451 | static DECLARE_WAIT_QUEUE_HEAD(sync_event); | ||
| 452 | |||
| 453 | @@ -1181,6 +1203,7 @@ int omap_gem_op_sync(struct drm_gem_object *obj, enum omap_gem_op op) | ||
| 454 | } | ||
| 455 | return ret; | ||
| 456 | } | ||
| 457 | +EXPORT_SYMBOL(omap_gem_op_sync); | ||
| 458 | |||
| 459 | /* call fxn(arg), either synchronously or asynchronously if the op | ||
| 460 | * is currently blocked.. fxn() can be called from any context | ||
| 461 | @@ -1227,6 +1250,7 @@ int omap_gem_op_async(struct drm_gem_object *obj, enum omap_gem_op op, | ||
| 462 | |||
| 463 | return 0; | ||
| 464 | } | ||
| 465 | +EXPORT_SYMBOL(omap_gem_op_async); | ||
| 466 | |||
| 467 | /* special API so PVR can update the buffer to use a sync-object allocated | ||
| 468 | * from it's sync-obj heap. Only used for a newly allocated (from PVR's | ||
| 469 | @@ -1264,6 +1288,7 @@ unlock: | ||
| 470 | spin_unlock(&sync_lock); | ||
| 471 | return ret; | ||
| 472 | } | ||
| 473 | +EXPORT_SYMBOL(omap_gem_set_sync_object); | ||
| 474 | |||
| 475 | /* don't call directly.. called from GEM core when it is time to actually | ||
| 476 | * free the object.. | ||
| 477 | @@ -1485,3 +1510,68 @@ void omap_gem_deinit(struct drm_device *dev) | ||
| 478 | */ | ||
| 479 | kfree(usergart); | ||
| 480 | } | ||
| 481 | + | ||
| 482 | +/****** PLUGIN API specific ******/ | ||
| 483 | + | ||
| 484 | +/* This constructor is mainly to give plugins a way to wrap their | ||
| 485 | + * own allocations | ||
| 486 | + */ | ||
| 487 | +struct drm_gem_object *omap_gem_new_ext(struct drm_device *dev, | ||
| 488 | + union omap_gem_size gsize, uint32_t flags, | ||
| 489 | + dma_addr_t paddr, struct page **pages, | ||
| 490 | + struct omap_gem_vm_ops *ops) | ||
| 491 | +{ | ||
| 492 | + struct drm_gem_object *obj; | ||
| 493 | + | ||
| 494 | + BUG_ON((flags & OMAP_BO_TILED) && !pages); | ||
| 495 | + | ||
| 496 | + if (paddr) | ||
| 497 | + flags |= OMAP_BO_DMA; | ||
| 498 | + | ||
| 499 | + obj = omap_gem_new(dev, gsize, flags | OMAP_BO_EXT_MEM); | ||
| 500 | + if (obj) { | ||
| 501 | + struct omap_gem_object *omap_obj = to_omap_bo(obj); | ||
| 502 | + | ||
| 503 | + omap_obj->paddr = paddr; | ||
| 504 | + omap_obj->pages = pages; | ||
| 505 | + omap_obj->ops = ops; | ||
| 506 | + } | ||
| 507 | + return obj; | ||
| 508 | +} | ||
| 509 | +EXPORT_SYMBOL(omap_gem_new_ext); | ||
| 510 | + | ||
| 511 | +void omap_gem_vm_open(struct vm_area_struct *vma) | ||
| 512 | +{ | ||
| 513 | + struct drm_gem_object *obj = vma->vm_private_data; | ||
| 514 | + struct omap_gem_object *omap_obj = to_omap_bo(obj); | ||
| 515 | + | ||
| 516 | + if (omap_obj->ops && omap_obj->ops->open) | ||
| 517 | + omap_obj->ops->open(vma); | ||
| 518 | + else | ||
| 519 | + drm_gem_vm_open(vma); | ||
| 520 | + | ||
| 521 | +} | ||
| 522 | + | ||
| 523 | +void omap_gem_vm_close(struct vm_area_struct *vma) | ||
| 524 | +{ | ||
| 525 | + struct drm_gem_object *obj = vma->vm_private_data; | ||
| 526 | + struct omap_gem_object *omap_obj = to_omap_bo(obj); | ||
| 527 | + | ||
| 528 | + if (omap_obj->ops && omap_obj->ops->close) | ||
| 529 | + omap_obj->ops->close(vma); | ||
| 530 | + else | ||
| 531 | + drm_gem_vm_close(vma); | ||
| 532 | + | ||
| 533 | +} | ||
| 534 | + | ||
| 535 | +void *omap_gem_priv(struct drm_gem_object *obj) | ||
| 536 | +{ | ||
| 537 | + return to_omap_bo(obj)->priv; | ||
| 538 | +} | ||
| 539 | +EXPORT_SYMBOL(omap_gem_priv); | ||
| 540 | + | ||
| 541 | +void omap_gem_set_priv(struct drm_gem_object *obj, void *priv) | ||
| 542 | +{ | ||
| 543 | + to_omap_bo(obj)->priv = priv; | ||
| 544 | +} | ||
| 545 | +EXPORT_SYMBOL(omap_gem_set_priv); | ||
| 546 | diff --git a/include/uapi/drm/omap_drm.h b/include/uapi/drm/omap_drm.h | ||
| 547 | index 1d0b117..5292b93 100644 | ||
| 548 | --- a/include/uapi/drm/omap_drm.h | ||
| 549 | +++ b/include/uapi/drm/omap_drm.h | ||
| 550 | @@ -33,6 +33,12 @@ struct drm_omap_param { | ||
| 551 | uint64_t value; /* in (set_param), out (get_param) */ | ||
| 552 | }; | ||
| 553 | |||
| 554 | +struct drm_omap_get_base { | ||
| 555 | + char plugin_name[64]; /* in */ | ||
| 556 | + uint32_t ioctl_base; /* out */ | ||
| 557 | + uint32_t __pad; | ||
| 558 | +}; | ||
| 559 | + | ||
| 560 | #define OMAP_BO_SCANOUT 0x00000001 /* scanout capable (phys contiguous) */ | ||
| 561 | #define OMAP_BO_CACHE_MASK 0x00000006 /* cache type mask, see cache modes */ | ||
| 562 | #define OMAP_BO_TILED_MASK 0x00000f00 /* tiled mapping mask, see tiled modes */ | ||
| 563 | @@ -101,9 +107,7 @@ struct drm_omap_gem_info { | ||
| 564 | |||
| 565 | #define DRM_OMAP_GET_PARAM 0x00 | ||
| 566 | #define DRM_OMAP_SET_PARAM 0x01 | ||
| 567 | -/* placeholder for plugin-api | ||
| 568 | #define DRM_OMAP_GET_BASE 0x02 | ||
| 569 | -*/ | ||
| 570 | #define DRM_OMAP_GEM_NEW 0x03 | ||
| 571 | #define DRM_OMAP_GEM_CPU_PREP 0x04 | ||
| 572 | #define DRM_OMAP_GEM_CPU_FINI 0x05 | ||
| 573 | @@ -112,9 +116,7 @@ struct drm_omap_gem_info { | ||
| 574 | |||
| 575 | #define DRM_IOCTL_OMAP_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_OMAP_GET_PARAM, struct drm_omap_param) | ||
| 576 | #define DRM_IOCTL_OMAP_SET_PARAM DRM_IOW (DRM_COMMAND_BASE + DRM_OMAP_SET_PARAM, struct drm_omap_param) | ||
| 577 | -/* placeholder for plugin-api | ||
| 578 | #define DRM_IOCTL_OMAP_GET_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_OMAP_GET_BASE, struct drm_omap_get_base) | ||
| 579 | -*/ | ||
| 580 | #define DRM_IOCTL_OMAP_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_OMAP_GEM_NEW, struct drm_omap_gem_new) | ||
| 581 | #define DRM_IOCTL_OMAP_GEM_CPU_PREP DRM_IOW (DRM_COMMAND_BASE + DRM_OMAP_GEM_CPU_PREP, struct drm_omap_gem_cpu_prep) | ||
| 582 | #define DRM_IOCTL_OMAP_GEM_CPU_FINI DRM_IOW (DRM_COMMAND_BASE + DRM_OMAP_GEM_CPU_FINI, struct drm_omap_gem_cpu_fini) | ||
| 583 | -- | ||
| 584 | 2.2.0 | ||
| 585 | |||
diff --git a/recipes-kernel/linux/linux-ti-staging-4.1/sgx.cfg b/recipes-kernel/linux/linux-ti-staging-4.1/sgx.cfg new file mode 100644 index 00000000..37e19a3d --- /dev/null +++ b/recipes-kernel/linux/linux-ti-staging-4.1/sgx.cfg | |||
| @@ -0,0 +1 @@ | |||
| CONFIG_DRM_OMAP_SGX_PLUGIN=y | |||
diff --git a/recipes-kernel/linux/linux-ti-staging_4.1.bb b/recipes-kernel/linux/linux-ti-staging_4.1.bb index 36f0323c..4ecab8ef 100644 --- a/recipes-kernel/linux/linux-ti-staging_4.1.bb +++ b/recipes-kernel/linux/linux-ti-staging_4.1.bb | |||
| @@ -50,18 +50,19 @@ S = "${WORKDIR}/git" | |||
| 50 | 50 | ||
| 51 | BRANCH = "ti-lsk-linux-4.1.y" | 51 | BRANCH = "ti-lsk-linux-4.1.y" |
| 52 | 52 | ||
| 53 | SRCREV = "babcc95b3b74f099c63cae31abf403edf6154c0b" | 53 | SRCREV = "1d476946dc0c881868ffd78cd2be30740ce0dea1" |
| 54 | PV = "4.1.6+git${SRCPV}" | 54 | PV = "4.1.6+git${SRCPV}" |
| 55 | 55 | ||
| 56 | # Append to the MACHINE_KERNEL_PR so that a new SRCREV will cause a rebuild | 56 | # Append to the MACHINE_KERNEL_PR so that a new SRCREV will cause a rebuild |
| 57 | MACHINE_KERNEL_PR_append = "f" | 57 | MACHINE_KERNEL_PR_append = "g" |
| 58 | PR = "${MACHINE_KERNEL_PR}" | 58 | PR = "${MACHINE_KERNEL_PR}" |
| 59 | 59 | ||
| 60 | KERNEL_CONFIG_DIR = "${S}/ti_config_fragments" | 60 | KERNEL_CONFIG_DIR = "${S}/ti_config_fragments" |
| 61 | 61 | ||
| 62 | # SoC specific config fragments are not enabled yet | 62 | # SoC specific config fragments are not enabled yet |
| 63 | #KERNEL_CONFIG_FRAGMENTS_append_ti33x = " ${KERNEL_CONFIG_DIR}/am33xx_only.cfg" | 63 | KERNEL_CONFIG_FRAGMENTS_append_ti33x = " ${KERNEL_CONFIG_DIR}/am33xx_only.cfg" |
| 64 | #KERNEL_CONFIG_FRAGMENTS_append_ti43x = " ${KERNEL_CONFIG_DIR}/am43xx_only.cfg" | 64 | KERNEL_CONFIG_FRAGMENTS_append_ti43x = " ${KERNEL_CONFIG_DIR}/am43xx_only.cfg" |
| 65 | KERNEL_CONFIG_FRAGMENTS_append_dra7xx = " ${KERNEL_CONFIG_DIR}/dra7_only.cfg" | ||
| 65 | 66 | ||
| 66 | MULTI_CONFIG_BASE_SUFFIX = "" | 67 | MULTI_CONFIG_BASE_SUFFIX = "" |
| 67 | 68 | ||
| @@ -70,15 +71,15 @@ KERNEL_GIT_PROTOCOL = "git" | |||
| 70 | SRC_URI += "${KERNEL_GIT_URI};protocol=${KERNEL_GIT_PROTOCOL};branch=${BRANCH} \ | 71 | SRC_URI += "${KERNEL_GIT_URI};protocol=${KERNEL_GIT_PROTOCOL};branch=${BRANCH} \ |
| 71 | file://defconfig" | 72 | file://defconfig" |
| 72 | 73 | ||
| 73 | GFX_PATCHES = "file://0001-DT-gpu-add-binding-for-TI-SGX-driver.patch \ | 74 | GFX_PATCHES = "file://0005-arm-Export-cache-flush-management-symbols-when-MULTI.patch \ |
| 74 | file://0002-ARM-dts-DRA7xx-add-device-tree-entry-for-SGX.patch \ | ||
| 75 | file://0003-arm-dra7xx-Add-gpu-hwmod-data.patch \ | ||
| 76 | file://0004-drm-omap-Add-omapdrm-plugin-API.patch \ | ||
| 77 | file://0005-arm-Export-cache-flush-management-symbols-when-MULTI.patch \ | ||
| 78 | file://0006-ARM-dts-am33xx-add-DT-node-for-gpu.patch \ | 75 | file://0006-ARM-dts-am33xx-add-DT-node-for-gpu.patch \ |
| 79 | file://0007-ARM-dts-am437x-add-DT-node-for-gpu.patch \ | 76 | file://0007-ARM-dts-am437x-add-DT-node-for-gpu.patch \ |
| 80 | file://0008-ARM-OMAP2-Use-pdata-quirks-for-sgx-deassert_hardrese.patch" | 77 | file://0008-ARM-OMAP2-Use-pdata-quirks-for-sgx-deassert_hardrese.patch" |
| 81 | 78 | ||
| 82 | SRC_URI_append_omap-a15 = " ${GFX_PATCHES}" | 79 | SRC_URI_append_omap-a15 = " ${GFX_PATCHES} file://sgx.cfg" |
| 83 | SRC_URI_append_ti33x = " ${GFX_PATCHES}" | 80 | SRC_URI_append_ti33x = " ${GFX_PATCHES} file://sgx.cfg" |
| 84 | SRC_URI_append_ti43x = " ${GFX_PATCHES}" | 81 | SRC_URI_append_ti43x = " ${GFX_PATCHES} file://sgx.cfg" |
| 82 | |||
| 83 | KERNEL_CONFIG_FRAGMENTS_append_omap-a15 = " ${WORKDIR}/sgx.cfg" | ||
| 84 | KERNEL_CONFIG_FRAGMENTS_append_ti33x = " ${WORKDIR}/sgx.cfg" | ||
| 85 | KERNEL_CONFIG_FRAGMENTS_append_ti43x = " ${WORKDIR}/sgx.cfg" | ||
