[meta-ti] [PATCH 1/2] linux-ti-staging: add Darren's SGX patches to make graphics work with 3.14

Denys Dmytriyenko denys at ti.com
Wed Jul 30 11:29:31 PDT 2014


On Wed, Jul 30, 2014 at 06:00:47PM +0000, Cooper Jr., Franklin wrote:
> Acked-by: Franklin Cooper Jr. <fcooper at ti.com>
> 
> Although we really need to move away from having these kernel config 
> fragments within OE and not pushed back to the kernel. I understand the sgx 
> stuff is currently a work in progress but just something for the future 
> before we have an official "release".

All the other config fragments are in the kernel, BTW. This is an external 
patching, hence the external config fragments. Unless all the changes are 
accepted to the kernel, we can't have the config in there.


> > -----Original Message-----
> > From: meta-ti-bounces at yoctoproject.org [mailto:meta-ti-
> > bounces at yoctoproject.org] On Behalf Of Denys Dmytriyenko
> > Sent: Tuesday, July 29, 2014 8:35 PM
> > To: meta-ti at yoctoproject.org
> > Subject: [meta-ti] [PATCH 1/2] linux-ti-staging: add Darren's SGX patches to
> > make graphics work with 3.14
> > 
> > From: Denys Dmytriyenko <denys at ti.com>
> > 
> > Signed-off-by: Denys Dmytriyenko <denys at ti.com>
> > ---
> >  recipes-kernel/linux/linux-ti-staging-3.14/sgx.cfg | 24 ++++++  ...HACK-drm-
> > fb_helper-enable-panning-support.patch | 51 ++++++++++++  ...lcdc-add-
> > vsync-callback-for-use-in-omaplf.patch | 96 +++++++++++++++++++++  ...fix-
> > the-ping-pong-dma-tearing-issue-seen-.patch | 97 ++++++++++++++++++++++
> > ...se-pdata-quirks-for-sgx-deassert_hardrese.patch | 86 +++++++++++++++++++
> >  .../sgx/0005-ARM-dts-am437x-add-SGX-node.patch     | 41 +++++++++
> >  .../0006-ARM-dts-am33xx-add-DT-node-for-gpu.patch  | 42 ++++++++++
> >  recipes-kernel/linux/linux-ti-staging_3.14.bb      | 20 +++--
> >  8 files changed, 452 insertions(+), 5 deletions(-)  create mode 100644 recipes-
> > kernel/linux/linux-ti-staging-3.14/sgx.cfg
> >  create mode 100644 recipes-kernel/linux/linux-ti-staging-3.14/sgx/0001-
> > HACK-drm-fb_helper-enable-panning-support.patch
> >  create mode 100644 recipes-kernel/linux/linux-ti-staging-3.14/sgx/0002-
> > HACK-drm-tilcdc-add-vsync-callback-for-use-in-omaplf.patch
> >  create mode 100644 recipes-kernel/linux/linux-ti-staging-3.14/sgx/0003-drm-
> > tilcdc-fix-the-ping-pong-dma-tearing-issue-seen-.patch
> >  create mode 100644 recipes-kernel/linux/linux-ti-staging-3.14/sgx/0004-ARM-
> > OMAP2-Use-pdata-quirks-for-sgx-deassert_hardrese.patch
> >  create mode 100644 recipes-kernel/linux/linux-ti-staging-3.14/sgx/0005-ARM-
> > dts-am437x-add-SGX-node.patch
> >  create mode 100644 recipes-kernel/linux/linux-ti-staging-3.14/sgx/0006-ARM-
> > dts-am33xx-add-DT-node-for-gpu.patch
> > 
> > diff --git a/recipes-kernel/linux/linux-ti-staging-3.14/sgx.cfg b/recipes-
> > kernel/linux/linux-ti-staging-3.14/sgx.cfg
> > new file mode 100644
> > index 0000000..0291779
> > --- /dev/null
> > +++ b/recipes-kernel/linux/linux-ti-staging-3.14/sgx.cfg
> > @@ -0,0 +1,24 @@
> > +##################################################
> > +# SGX Graphics config options
> > +##################################################
> > +CONFIG_DMA_SHARED_BUFFER=y
> > +CONFIG_TI_ST=n
> > +CONFIG_INPUT_TOUCHSCREEN=y
> > +CONFIG_TOUCHSCREEN_ADS7846=y
> > +CONFIG_I2C_ALGOBIT=y
> > +CONFIG_MFD_TPS65218=n
> > +CONFIG_DRM=y
> > +CONFIG_DRM_KMS_HELPER=y
> > +CONFIG_DRM_KMS_FB_HELPER=y
> > +CONFIG_DRM_GEM_CMA_HELPER=y
> > +CONFIG_DRM_KMS_CMA_HELPER=y
> > +CONFIG_DRM_I2C_NXP_TDA998X=y
> > +CONFIG_DRM_TILCDC=y
> > +CONFIG_FB_SYS_FILLRECT=y
> > +CONFIG_FB_SYS_COPYAREA=y
> > +CONFIG_FB_SYS_IMAGEBLIT=y
> > +CONFIG_BACKLIGHT_CLASS_DEVICE=y
> > +CONFIG_HDMI=y
> > +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
> > +CONFIG_SND_DAVINCI_SOC=m
> > +CONFIG_SND_SIMPLE_CARD=n
> > diff --git a/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0001-HACK-drm-
> > fb_helper-enable-panning-support.patch b/recipes-kernel/linux/linux-ti-
> > staging-3.14/sgx/0001-HACK-drm-fb_helper-enable-panning-support.patch
> > new file mode 100644
> > index 0000000..e760248
> > --- /dev/null
> > +++ b/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0001-HACK-drm-fb_he
> > +++ lper-enable-panning-support.patch
> > @@ -0,0 +1,51 @@
> > +From d9d8fea4c60b3a44e8660408eb9337413b108b15 Mon Sep 17 00:00:00
> > 2001
> > +From: Darren Etheridge <detheridge at ti.com>
> > +Date: Thu, 24 Jul 2014 11:49:28 -0500
> > +Subject: [PATCH 1/6] HACK: drm/fb_helper: enable panning support
> > +
> > +Increase the size of the buffer that is created in the fbdev emulation
> > +helpers.  And fill in the var structure with the amount that was allocated.
> > +
> > +Signed-off-by: Darren Etheridge <detheridge at ti.com>
> > +---
> > + drivers/gpu/drm/drm_fb_cma_helper.c | 10 ++++++++--
> > + 1 file changed, 8 insertions(+), 2 deletions(-)
> > +
> > +diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c
> > +b/drivers/gpu/drm/drm_fb_cma_helper.c
> > +index 61b5a47..2e2c489 100644
> > +--- a/drivers/gpu/drm/drm_fb_cma_helper.c
> > ++++ b/drivers/gpu/drm/drm_fb_cma_helper.c
> > +@@ -25,6 +25,12 @@
> > + #include <drm/drm_fb_cma_helper.h>
> > + #include <linux/module.h>
> > +
> > ++/*
> > ++ * number of buffers to allocate from CMA pool, often increased for
> > ++ * double/triple buffering
> > ++ */
> > ++#define DRM_NUM_FBDEV_BUFFERS 3
> > ++
> > + struct drm_fb_cma {
> > + 	struct drm_framebuffer		fb;
> > + 	struct drm_gem_cma_object	*obj[4];
> > +@@ -265,7 +271,7 @@ static int drm_fbdev_cma_create(struct
> > drm_fb_helper *helper,
> > + 	bytes_per_pixel = DIV_ROUND_UP(sizes->surface_bpp, 8);
> > +
> > + 	mode_cmd.width = sizes->surface_width;
> > +-	mode_cmd.height = sizes->surface_height;
> > ++	mode_cmd.height = sizes->surface_height *
> > DRM_NUM_FBDEV_BUFFERS;
> > + 	mode_cmd.pitches[0] = sizes->surface_width * bytes_per_pixel;
> > + 	mode_cmd.pixel_format = drm_mode_legacy_fb_format(sizes-
> > >surface_bpp,
> > + 		sizes->surface_depth);
> > +@@ -304,7 +310,7 @@ static int drm_fbdev_cma_create(struct
> > drm_fb_helper *helper,
> > + 	}
> > +
> > + 	drm_fb_helper_fill_fix(fbi, fb->pitches[0], fb->depth);
> > +-	drm_fb_helper_fill_var(fbi, helper, fb->width, fb->height);
> > ++	drm_fb_helper_fill_var(fbi, helper, fb->width,
> > ++sizes->surface_height);
> > +
> > + 	offset = fbi->var.xoffset * bytes_per_pixel;
> > + 	offset += fbi->var.yoffset * fb->pitches[0];
> > +--
> > +1.9.1
> > +
> > diff --git a/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0002-HACK-drm-
> > tilcdc-add-vsync-callback-for-use-in-omaplf.patch b/recipes-kernel/linux/linux-
> > ti-staging-3.14/sgx/0002-HACK-drm-tilcdc-add-vsync-callback-for-use-in-
> > omaplf.patch
> > new file mode 100644
> > index 0000000..d154508
> > --- /dev/null
> > +++ b/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0002-HACK-drm-tilcd
> > +++ c-add-vsync-callback-for-use-in-omaplf.patch
> > @@ -0,0 +1,96 @@
> > +From eaf6ac95a81612250d6bd5e2ed9da41e52aac444 Mon Sep 17 00:00:00
> > 2001
> > +From: Darren Etheridge <detheridge at ti.com>
> > +Date: Fri, 11 Jul 2014 09:15:25 -0500
> > +Subject: [PATCH 2/6] HACK: drm/tilcdc: add vsync callback for use in
> > +omaplfb  for gpu
> > +
> > +Add a vsync callback registration API that is identical to what was
> > +done for da8xx-fb.c.
> > +
> > +Need to find if there is a better way using the DRM infrastructure from
> > +kernel space.  Either that or change the userspace window manager stuff
> > +in the gpu libraries to make use of the DRM provided syncronization
> > +mechanisms.
> > +
> > +Signed-off-by: Darren Etheridge <detheridge at ti.com>
> > +---
> > + drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 34
> > +++++++++++++++++++++++++++++++++++
> > + drivers/gpu/drm/tilcdc/tilcdc_drv.h  |  5 +++++
> > + 2 files changed, 39 insertions(+)
> > +
> > +diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> > +b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> > +index 4b6b139..bf94a0f 100644
> > +--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> > ++++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> > +@@ -37,6 +37,10 @@ struct tilcdc_crtc {
> > + 	/* for deferred fb unref's: */
> > + 	struct drm_flip_work unref_work;
> > + };
> > ++
> > ++static vsync_callback_t vsync_cb_handler; static void *vsync_cb_arg;
> > ++
> > + #define to_tilcdc_crtc(x) container_of(x, struct tilcdc_crtc, base)
> > +
> > + static void unref_worker(struct drm_flip_work *work, void *val) @@
> > +-576,6 +580,32 @@ out:
> > + 	pm_runtime_put_sync(dev->dev);
> > + }
> > +
> > ++int register_vsync_cb(vsync_callback_t handler, void *arg, int idx) {
> > ++	if ((vsync_cb_handler == NULL) && (vsync_cb_arg == NULL)) {
> > ++		vsync_cb_arg = arg;
> > ++		vsync_cb_handler = handler;
> > ++	} else {
> > ++		return -EEXIST;
> > ++	}
> > ++
> > ++	return 0;
> > ++}
> > ++EXPORT_SYMBOL(register_vsync_cb);
> > ++
> > ++int unregister_vsync_cb(vsync_callback_t handler, void *arg, int idx)
> > ++{
> > ++	if ((vsync_cb_handler == handler) && (vsync_cb_arg == arg)) {
> > ++		vsync_cb_handler = NULL;
> > ++		vsync_cb_arg = NULL;
> > ++	} else {
> > ++		return -ENXIO;
> > ++	}
> > ++
> > ++	return 0;
> > ++}
> > ++EXPORT_SYMBOL(unregister_vsync_cb);
> > ++
> > + irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc)  {
> > + 	struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); @@ -610,6
> > ++640,10 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc)
> > + 		tilcdc_crtc->event = NULL;
> > + 		if (event)
> > + 			drm_send_vblank_event(dev, 0, event);
> > ++
> > ++		if (vsync_cb_handler)
> > ++			vsync_cb_handler(vsync_cb_arg);
> > ++
> > + 		spin_unlock_irqrestore(&dev->event_lock, flags);
> > +
> > + 		if (dirty && !tilcdc_crtc->dirty)
> > +diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
> > +b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
> > +index 0938036..05269be 100644
> > +--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
> > ++++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
> > +@@ -170,4 +170,9 @@ void tilcdc_crtc_set_panel_info(struct drm_crtc
> > +*crtc,  int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct
> > +drm_display_mode *mode);  int tilcdc_crtc_max_width(struct drm_crtc
> > +*crtc);
> > +
> > ++/* used by SGX OMAPLFB drvier */
> > ++typedef void (*vsync_callback_t)(void *arg); int
> > ++register_vsync_cb(vsync_callback_t handler, void *arg, int idx); int
> > ++unregister_vsync_cb(vsync_callback_t handler, void *arg, int idx);
> > ++
> > + #endif /* __TILCDC_DRV_H__ */
> > +--
> > +1.9.1
> > +
> > diff --git a/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0003-drm-tilcdc-fix-
> > the-ping-pong-dma-tearing-issue-seen-.patch b/recipes-kernel/linux/linux-ti-
> > staging-3.14/sgx/0003-drm-tilcdc-fix-the-ping-pong-dma-tearing-issue-seen-
> > .patch
> > new file mode 100644
> > index 0000000..b3d0466
> > --- /dev/null
> > +++ b/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0003-drm-tilcdc-fix
> > +++ -the-ping-pong-dma-tearing-issue-seen-.patch
> > @@ -0,0 +1,97 @@
> > +From 7b4400287144101f8c7bdf2a9fa45c82859177e2 Mon Sep 17 00:00:00
> > 2001
> > +From: Darren Etheridge <detheridge at ti.com>
> > +Date: Fri, 18 Jul 2014 16:21:46 -0500
> > +Subject: [PATCH 3/6] drm/tilcdc: fix the ping-pong dma tearing issue
> > +seen on  buffer flipping
> > +
> > +Update the DMA pointers during the pan display ioctl.  Borrowed from
> > +da8xx_fb.c update the scanout buffers immediately so the DMA ping/pong
> > +doesn't end up out of sync with what we really want it to DMA.
> > +
> > +Signed-off-by: Darren Etheridge <detheridge at ti.com>
> > +---
> > + drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 36
> > ++++++++++++++++++++++++++++++++-----
> > + 1 file changed, 31 insertions(+), 5 deletions(-)
> > +
> > +diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> > +b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> > +index bf94a0f..cdea159 100644
> > +--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> > ++++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> > +@@ -30,6 +30,8 @@ struct tilcdc_crtc {
> > + 	int dpms;
> > + 	wait_queue_head_t frame_done_wq;
> > + 	bool frame_done;
> > ++	spinlock_t irq_lock;
> > ++	int dma_completed_channel;
> > +
> > + 	/* fb currently set to scanout 0/1: */
> > + 	struct drm_framebuffer *scanout[2];
> > +@@ -102,10 +104,23 @@ static void update_scanout(struct drm_crtc *crtc)
> > + 			(crtc->mode.vdisplay * fb->pitches[0]);
> > +
> > + 	if (tilcdc_crtc->dpms == DRM_MODE_DPMS_ON) {
> > +-		/* already enabled, so just mark the frames that need
> > +-		 * updating and they will be updated on vblank:
> > ++		/*
> > ++		 * already enabled, so just mark the frames that need
> > ++		 * updating and they will be updated on vblank
> > ++		 * and update the inactive DMA channel immediately
> > ++		 * to avoid any tearing due to the DMA already starting
> > ++		 * on the pending dma buffer when we hit the vblank IRQ
> > + 		 */
> > +-		tilcdc_crtc->dirty |= LCDC_END_OF_FRAME0 |
> > LCDC_END_OF_FRAME1;
> > ++		if (tilcdc_crtc->dma_completed_channel == 0) {
> > ++			tilcdc_crtc->dirty |= LCDC_END_OF_FRAME1;
> > ++			set_scanout(crtc, 0);
> > ++		}
> > ++
> > ++		if (tilcdc_crtc->dma_completed_channel == 1) {
> > ++			tilcdc_crtc->dirty |= LCDC_END_OF_FRAME0;
> > ++			set_scanout(crtc, 1);
> > ++		}
> > ++
> > + 		drm_vblank_get(dev, 0);
> > + 	} else {
> > + 		/* not enabled yet, so update registers immediately: */ @@ -
> > 612,6
> > ++627,7 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc)
> > + 	struct drm_device *dev = crtc->dev;
> > + 	struct tilcdc_drm_private *priv = dev->dev_private;
> > + 	uint32_t stat = tilcdc_read_irqstatus(dev);
> > ++	unsigned long irq_flags;
> > +
> > + 	if ((stat & LCDC_SYNC_LOST) && (stat & LCDC_FIFO_UNDERFLOW)) {
> > + 		stop(crtc);
> > +@@ -627,11 +643,19 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc
> > +*crtc)
> > +
> > + 		tilcdc_clear_irqstatus(dev, stat);
> > +
> > +-		if (dirty & LCDC_END_OF_FRAME0)
> > ++		spin_lock_irqsave(&tilcdc_crtc->irq_lock, irq_flags);
> > ++
> > ++		if (dirty & LCDC_END_OF_FRAME0) {
> > + 			set_scanout(crtc, 0);
> > ++			tilcdc_crtc->dma_completed_channel = 0;
> > ++		}
> > +
> > +-		if (dirty & LCDC_END_OF_FRAME1)
> > ++		if (dirty & LCDC_END_OF_FRAME1) {
> > + 			set_scanout(crtc, 1);
> > ++			tilcdc_crtc->dma_completed_channel = 1;
> > ++		}
> > ++
> > ++		spin_unlock_irqrestore(&tilcdc_crtc->irq_lock, irq_flags);
> > +
> > + 		drm_handle_vblank(dev, 0);
> > +
> > +@@ -707,6 +731,8 @@ struct drm_crtc *tilcdc_crtc_create(struct drm_device
> > *dev)
> > + 		goto fail;
> > + 	}
> > +
> > ++	spin_lock_init(&tilcdc_crtc->irq_lock);
> > ++
> > + 	ret = drm_crtc_init(dev, crtc, &tilcdc_crtc_funcs);
> > + 	if (ret < 0)
> > + 		goto fail;
> > +--
> > +1.9.1
> > +
> > diff --git a/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0004-ARM-OMAP2-
> > Use-pdata-quirks-for-sgx-deassert_hardrese.patch b/recipes-
> > kernel/linux/linux-ti-staging-3.14/sgx/0004-ARM-OMAP2-Use-pdata-quirks-for-
> > sgx-deassert_hardrese.patch
> > new file mode 100644
> > index 0000000..b0d5d40
> > --- /dev/null
> > +++ b/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0004-ARM-OMAP2-Use-
> > +++ pdata-quirks-for-sgx-deassert_hardrese.patch
> > @@ -0,0 +1,86 @@
> > +From 761dbda366d46ff007e04c09dd2deeee5073d090 Mon Sep 17 00:00:00
> > 2001
> > +From: Darren Etheridge <detheridge at ti.com>
> > +Date: Fri, 25 Jul 2014 16:09:53 -0500
> > +Subject: [PATCH 4/6] ARM: OMAP2+: Use pdata-quirks for sgx
> > +deassert_hardreset
> > +
> > +Use pdata_quirks to provide platform data to the sgx driver.
> > +The data that is provided includes:
> > +
> > +1) Function pointers for the driver to use to reset the h/w block.
> > +2) The reset name that matches with what is used in hwmod.
> > +
> > +Signed-off-by: Darren Etheridge <detheridge at ti.com>
> > +---
> > + arch/arm/mach-omap2/pdata-quirks.c    | 12 ++++++++++++
> > + include/linux/platform_data/gfx-sgx.h | 22 ++++++++++++++++++++++
> > + 2 files changed, 34 insertions(+)
> > + create mode 100644 include/linux/platform_data/gfx-sgx.h
> > +
> > +diff --git a/arch/arm/mach-omap2/pdata-quirks.c
> > +b/arch/arm/mach-omap2/pdata-quirks.c
> > +index a1fb5aa..945dd61 100644
> > +--- a/arch/arm/mach-omap2/pdata-quirks.c
> > ++++ b/arch/arm/mach-omap2/pdata-quirks.c
> > +@@ -17,6 +17,7 @@
> > +
> > + #include <linux/platform_data/pinctrl-single.h>
> > + #include <linux/platform_data/iommu-omap.h>
> > ++#include <linux/platform_data/gfx-sgx.h>
> > +
> > + #include "am35xx.h"
> > + #include "common.h"
> > +@@ -63,6 +64,13 @@ static inline void legacy_init_wl12xx(unsigned
> > +ref_clock,  }  #endif
> > +
> > ++#if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX) static
> > ++struct gfx_sgx_platform_data gfx_pdata = {
> > ++	.reset_name = "gfx",
> > ++	.deassert_reset = omap_device_deassert_hardreset, }; #endif
> > ++
> > + #ifdef CONFIG_MACH_NOKIA_N8X0
> > + static void __init omap2420_n8x0_legacy_init(void)  { @@ -270,6
> > ++278,10 @@ struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
> > + 	OF_DEV_AUXDATA("ti,am3517-emac", 0x5c000000, "davinci_emac.0",
> > + 		       &am35xx_emac_pdata),
> > + #endif
> > ++#if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX)
> > ++	OF_DEV_AUXDATA("ti,sgx", 0x56000000, "56000000.sgx",
> > ++			&gfx_pdata),
> > ++#endif
> > + #ifdef CONFIG_ARCH_OMAP4
> > + 	OF_DEV_AUXDATA("ti,omap4-padconf", 0x4a100040,
> > "4a100040.pinmux", &pcs_pdata),
> > + 	OF_DEV_AUXDATA("ti,omap4-padconf", 0x4a31e040,
> > "4a31e040.pinmux",
> > +&pcs_pdata), diff --git a/include/linux/platform_data/gfx-sgx.h
> > +b/include/linux/platform_data/gfx-sgx.h
> > +new file mode 100644
> > +index 0000000..aa59b2c
> > +--- /dev/null
> > ++++ b/include/linux/platform_data/gfx-sgx.h
> > +@@ -0,0 +1,22 @@
> > ++/*
> > ++ * SGX Graphics Driver Platform Data
> > ++ *
> > ++ * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
> > ++ *	Darren Etheridge <detheridge at ti.com>
> > ++ *
> > ++ * This program is free software; you can redistribute it and/or
> > ++modify
> > ++ * it under the terms of the GNU General Public License version 2 as
> > ++ * published by the Free Software Foundation.
> > ++ *
> > ++ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> > ++ * kind, whether express or implied; without even the implied warranty
> > ++ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > ++ * GNU General Public License for more details.
> > ++ */
> > ++#include <linux/platform_device.h>
> > ++
> > ++struct gfx_sgx_platform_data {
> > ++	const char *reset_name;
> > ++
> > ++	int (*deassert_reset)(struct platform_device *pdev, const char
> > ++*name); };
> > +--
> > +1.9.1
> > +
> > diff --git a/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0005-ARM-dts-
> > am437x-add-SGX-node.patch b/recipes-kernel/linux/linux-ti-staging-
> > 3.14/sgx/0005-ARM-dts-am437x-add-SGX-node.patch
> > new file mode 100644
> > index 0000000..e18581a
> > --- /dev/null
> > +++ b/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0005-ARM-dts-am437x
> > +++ -add-SGX-node.patch
> > @@ -0,0 +1,41 @@
> > +From c921fe043facef3bd6649170fb6130f18e9367b7 Mon Sep 17 00:00:00
> > 2001
> > +From: Darren Etheridge <detheridge at ti.com>
> > +Date: Tue, 29 Jul 2014 16:27:59 -0500
> > +Subject: [PATCH 5/6] ARM: dts: am437x: add SGX node
> > +
> > +Add dt node to enable SGX PowerVR driver.
> > +
> > +Signed-off-by: Darren Etheridge <detheridge at ti.com>
> > +---
> > + arch/arm/boot/dts/am4372.dtsi | 8 ++++++++
> > + 1 file changed, 8 insertions(+)
> > +
> > +diff --git a/arch/arm/boot/dts/am4372.dtsi
> > +b/arch/arm/boot/dts/am4372.dtsi index d36af42..d963a60 100644
> > +--- a/arch/arm/boot/dts/am4372.dtsi
> > ++++ b/arch/arm/boot/dts/am4372.dtsi
> > +@@ -707,6 +707,13 @@
> > + 			dma-names = "tx", "rx";
> > + 		};
> > +
> > ++		sgx at 0x56000000 {
> > ++			compatible = "ti,sgx";
> > ++			ti,hwmods = "gfx";
> > ++			reg = <0x56000000 0x1000000>;
> > ++			interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
> > ++		};
> > ++
> > + 		mcasp1: mcasp at 4803C000 {
> > + 			compatible = "ti,am33xx-mcasp-audio";
> > + 			ti,hwmods = "mcasp1";
> > +@@ -891,6 +898,7 @@
> > + 				clocks = <&disp_clk>;
> > + 				clock-names = "fck";
> > + 			};
> > ++
> > + 		};
> > + 	};
> > + };
> > +--
> > +1.9.1
> > +
> > diff --git a/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0006-ARM-dts-
> > am33xx-add-DT-node-for-gpu.patch b/recipes-kernel/linux/linux-ti-staging-
> > 3.14/sgx/0006-ARM-dts-am33xx-add-DT-node-for-gpu.patch
> > new file mode 100644
> > index 0000000..d4d0f13
> > --- /dev/null
> > +++ b/recipes-kernel/linux/linux-ti-staging-3.14/sgx/0006-ARM-dts-am33xx
> > +++ -add-DT-node-for-gpu.patch
> > @@ -0,0 +1,42 @@
> > +From 0ef34332c3400b211a047eaca751d00c97f5104c Mon Sep 17 00:00:00
> > 2001
> > +From: Darren Etheridge <detheridge at ti.com>
> > +Date: Fri, 18 Jul 2014 16:19:54 -0500
> > +Subject: [PATCH 6/6] ARM: dts: am33xx: add DT node for gpu
> > +
> > +Add the node into the am33xx.dtsi file for the SGX GPU that is found in
> > +some variants of the SoC.
> > +
> > +Signed-off-by: Darren Etheridge <detheridge at ti.com>
> > +---
> > + arch/arm/boot/dts/am33xx.dtsi | 8 +++++++-
> > + 1 file changed, 7 insertions(+), 1 deletion(-)
> > +
> > +diff --git a/arch/arm/boot/dts/am33xx.dtsi
> > +b/arch/arm/boot/dts/am33xx.dtsi index 2cfd694..df6ae9c 100644
> > +--- a/arch/arm/boot/dts/am33xx.dtsi
> > ++++ b/arch/arm/boot/dts/am33xx.dtsi
> > +@@ -109,7 +109,6 @@
> > + 		prcm: prcm at 44e00000 {
> > + 			compatible = "ti,am3-prcm";
> > + 			reg = <0x44e00000 0x4000>;
> > +-
> > + 			prcm_clocks: clocks {
> > + 				#address-cells = <1>;
> > + 				#size-cells = <0>;
> > +@@ -822,6 +821,13 @@
> > + 			reg = <0x48310000 0x2000>;
> > + 			interrupts = <111>;
> > + 		};
> > ++
> > ++		sgx at 0x56000000 {
> > ++			compatible = "ti,sgx";
> > ++			ti,hwmods = "gfx";
> > ++			reg = <0x56000000 0x1000000>;
> > ++			interrupts = <37>;
> > ++		};
> > + 	};
> > + };
> > +
> > +--
> > +1.9.1
> > +
> > diff --git a/recipes-kernel/linux/linux-ti-staging_3.14.bb b/recipes-
> > kernel/linux/linux-ti-staging_3.14.bb
> > index b505640..c223c88 100644
> > --- a/recipes-kernel/linux/linux-ti-staging_3.14.bb
> > +++ b/recipes-kernel/linux/linux-ti-staging_3.14.bb
> > @@ -3,8 +3,6 @@ DESCRIPTION = "Linux kernel for TI devices"
> >  LICENSE = "GPLv2"
> >  LIC_FILES_CHKSUM =
> > "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
> > 
> > -DEFAULT_PREFERENCE = "-1"
> > -
> >  inherit kernel
> > 
> >  require recipes-kernel/linux/linux-dtb.inc
> > @@ -49,7 +47,7 @@ SRCREV =
> > "b0fa4f08d72c8723219b5174b5749151b5acaee0"
> >  PV = "3.14.14"
> > 
> >  # Append to the MACHINE_KERNEL_PR so that a new SRCREV will cause a
> > rebuild -MACHINE_KERNEL_PR_append = "a+gitr${SRCPV}"
> > +MACHINE_KERNEL_PR_append = "b+gitr${SRCPV}"
> >  PR = "${MACHINE_KERNEL_PR}"
> > 
> >  KERNEL_CONFIG_DIR = "${S}/ti_config_fragments"
> > @@ -57,10 +55,22 @@ KERNEL_CONFIG_FRAGMENTS =
> > "${KERNEL_CONFIG_DIR}/audio_display.cfg ${KERNEL_CONFI
> >                             ${KERNEL_CONFIG_DIR}/connectivity.cfg
> > ${KERNEL_CONFIG_DIR}/ipc.cfg \
> >                             ${KERNEL_CONFIG_DIR}/power.cfg"
> > 
> > -KERNEL_CONFIG_FRAGMENTS_append_ti33x = " ${WORKDIR}/non-smp.cfg"
> > -KERNEL_CONFIG_FRAGMENTS_append_ti43x = " ${WORKDIR}/non-smp.cfg"
> > +KERNEL_CONFIG_FRAGMENTS_append_ti33x = " ${WORKDIR}/non-smp.cfg
> > ${WORKDIR}/sgx.cfg"
> > +KERNEL_CONFIG_FRAGMENTS_append_ti43x = " ${WORKDIR}/non-smp.cfg
> > ${WORKDIR}/sgx.cfg"
> > +
> > +# Patches necessary to make SGX graphics work with this kernel version
> > +SGX_PATCHES = "file://sgx/0001-HACK-drm-fb_helper-enable-panning-
> > support.patch \
> > +               file://sgx/0002-HACK-drm-tilcdc-add-vsync-callback-for-use-in-
> > omaplf.patch \
> > +               file://sgx/0003-drm-tilcdc-fix-the-ping-pong-dma-tearing-issue-seen-
> > .patch \
> > +               file://sgx/0004-ARM-OMAP2-Use-pdata-quirks-for-sgx-
> > deassert_hardrese.patch \
> > +               file://sgx/0005-ARM-dts-am437x-add-SGX-node.patch \
> > +               file://sgx/0006-ARM-dts-am33xx-add-DT-node-for-gpu.patch"
> > 
> >  SRC_URI = "git://git.ti.com/ti-linux-kernel/ti-linux-
> > kernel.git;protocol=git;branch=${BRANCH} \
> >             file://defconfig \
> >             file://non-smp.cfg \
> > +           file://sgx.cfg \
> >            "
> > +
> > +SRC_URI_append_ti33x = " ${SGX_PATCHES}"
> > +SRC_URI_append_ti43x = " ${SGX_PATCHES}"
> > --
> > 2.0.2
> > 
> > --
> > _______________________________________________
> > meta-ti mailing list
> > meta-ti at yoctoproject.org
> > https://lists.yoctoproject.org/listinfo/meta-ti
> -- 
> _______________________________________________
> meta-ti mailing list
> meta-ti at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/meta-ti


More information about the meta-ti mailing list