diff options
| author | Koen Kooi <koen@dominion.thruhere.net> | 2012-05-01 21:06:50 +0200 |
|---|---|---|
| committer | Denys Dmytriyenko <denys@ti.com> | 2012-05-03 19:09:17 -0400 |
| commit | 368d7772dcde0a42e9952ca6b2762495d0f49602 (patch) | |
| tree | 1ce2832e4d74efb1f422c9dbc9a819fd1533b87e | |
| parent | aaf625eb50f9a290a7250b8009beae7e050390dd (diff) | |
| download | meta-ti-368d7772dcde0a42e9952ca6b2762495d0f49602.tar.gz | |
linux-mainline 3.2: fix build of external SGX modules
Patch downloaded from https://github.com/RobertCNelson/stable-kernel/tree/master/patches/sgx
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
Signed-off-by: Denys Dmytriyenko <denys@ti.com>
| -rw-r--r-- | recipes-kernel/linux/linux-mainline-3.2/sgx/0001-Revert-OMAP-DSS2-remove-update_mode-from-omapdss-v3.2.patch | 321 | ||||
| -rw-r--r-- | recipes-kernel/linux/linux-mainline_3.2.bb | 1 |
2 files changed, 322 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-mainline-3.2/sgx/0001-Revert-OMAP-DSS2-remove-update_mode-from-omapdss-v3.2.patch b/recipes-kernel/linux/linux-mainline-3.2/sgx/0001-Revert-OMAP-DSS2-remove-update_mode-from-omapdss-v3.2.patch new file mode 100644 index 00000000..9f24df03 --- /dev/null +++ b/recipes-kernel/linux/linux-mainline-3.2/sgx/0001-Revert-OMAP-DSS2-remove-update_mode-from-omapdss-v3.2.patch | |||
| @@ -0,0 +1,321 @@ | |||
| 1 | From 4fbd1a6149222f1a075182e4d41cf1e2f72345d2 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Robert Nelson <robertcnelson@gmail.com> | ||
| 3 | Date: Wed, 3 Aug 2011 11:08:04 -0500 | ||
| 4 | Subject: [PATCH] Revert "OMAP: DSS2: remove update_mode from omapdss" | ||
| 5 | |||
| 6 | This reverts commit 8cff88c5da2197aa601409d4a7ce8f83f8de8190. | ||
| 7 | --- | ||
| 8 | drivers/video/omap2/displays/panel-taal.c | 17 ++++++++ | ||
| 9 | drivers/video/omap2/dss/display.c | 45 ++++++++++++++++++++++ | ||
| 10 | drivers/video/omap2/dss/manager.c | 59 ++++++++++++++++++++++------- | ||
| 11 | drivers/video/omap2/dss/venc.c | 17 ++++++++ | ||
| 12 | include/video/omapdss.h | 11 +++++ | ||
| 13 | 5 files changed, 135 insertions(+), 14 deletions(-) | ||
| 14 | |||
| 15 | diff --git a/drivers/video/omap2/displays/panel-taal.c b/drivers/video/omap2/displays/panel-taal.c | ||
| 16 | index 80c3f6a..a2a7380 100644 | ||
| 17 | --- a/drivers/video/omap2/displays/panel-taal.c | ||
| 18 | +++ b/drivers/video/omap2/displays/panel-taal.c | ||
| 19 | @@ -1874,6 +1874,20 @@ err: | ||
| 20 | mutex_unlock(&td->lock); | ||
| 21 | } | ||
| 22 | |||
| 23 | +static int taal_set_update_mode(struct omap_dss_device *dssdev, | ||
| 24 | + enum omap_dss_update_mode mode) | ||
| 25 | +{ | ||
| 26 | + if (mode != OMAP_DSS_UPDATE_MANUAL) | ||
| 27 | + return -EINVAL; | ||
| 28 | + return 0; | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +static enum omap_dss_update_mode taal_get_update_mode( | ||
| 32 | + struct omap_dss_device *dssdev) | ||
| 33 | +{ | ||
| 34 | + return OMAP_DSS_UPDATE_MANUAL; | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | static struct omap_dss_driver taal_driver = { | ||
| 38 | .probe = taal_probe, | ||
| 39 | .remove = __exit_p(taal_remove), | ||
| 40 | @@ -1883,6 +1897,9 @@ static struct omap_dss_driver taal_driver = { | ||
| 41 | .suspend = taal_suspend, | ||
| 42 | .resume = taal_resume, | ||
| 43 | |||
| 44 | + .set_update_mode = taal_set_update_mode, | ||
| 45 | + .get_update_mode = taal_get_update_mode, | ||
| 46 | + | ||
| 47 | .update = taal_update, | ||
| 48 | .sync = taal_sync, | ||
| 49 | |||
| 50 | diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c | ||
| 51 | index be331dc..6fa445c 100644 | ||
| 52 | --- a/drivers/video/omap2/dss/display.c | ||
| 53 | +++ b/drivers/video/omap2/dss/display.c | ||
| 54 | @@ -65,6 +65,48 @@ static ssize_t display_enabled_store(struct device *dev, | ||
| 55 | return size; | ||
| 56 | } | ||
| 57 | |||
| 58 | +static ssize_t display_upd_mode_show(struct device *dev, | ||
| 59 | + struct device_attribute *attr, char *buf) | ||
| 60 | +{ | ||
| 61 | + struct omap_dss_device *dssdev = to_dss_device(dev); | ||
| 62 | + enum omap_dss_update_mode mode = OMAP_DSS_UPDATE_AUTO; | ||
| 63 | + if (dssdev->driver->get_update_mode) | ||
| 64 | + mode = dssdev->driver->get_update_mode(dssdev); | ||
| 65 | + return snprintf(buf, PAGE_SIZE, "%d\n", mode); | ||
| 66 | +} | ||
| 67 | + | ||
| 68 | +static ssize_t display_upd_mode_store(struct device *dev, | ||
| 69 | + struct device_attribute *attr, | ||
| 70 | + const char *buf, size_t size) | ||
| 71 | +{ | ||
| 72 | + struct omap_dss_device *dssdev = to_dss_device(dev); | ||
| 73 | + int val, r; | ||
| 74 | + enum omap_dss_update_mode mode; | ||
| 75 | + | ||
| 76 | + if (!dssdev->driver->set_update_mode) | ||
| 77 | + return -EINVAL; | ||
| 78 | + | ||
| 79 | + r = kstrtoint(buf, 0, &val); | ||
| 80 | + if (r) | ||
| 81 | + return r; | ||
| 82 | + | ||
| 83 | + switch (val) { | ||
| 84 | + case OMAP_DSS_UPDATE_DISABLED: | ||
| 85 | + case OMAP_DSS_UPDATE_AUTO: | ||
| 86 | + case OMAP_DSS_UPDATE_MANUAL: | ||
| 87 | + mode = (enum omap_dss_update_mode)val; | ||
| 88 | + break; | ||
| 89 | + default: | ||
| 90 | + return -EINVAL; | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + r = dssdev->driver->set_update_mode(dssdev, mode); | ||
| 94 | + if (r) | ||
| 95 | + return r; | ||
| 96 | + | ||
| 97 | + return size; | ||
| 98 | +} | ||
| 99 | + | ||
| 100 | static ssize_t display_tear_show(struct device *dev, | ||
| 101 | struct device_attribute *attr, char *buf) | ||
| 102 | { | ||
| 103 | @@ -250,6 +292,8 @@ static ssize_t display_wss_store(struct device *dev, | ||
| 104 | |||
| 105 | static DEVICE_ATTR(enabled, S_IRUGO|S_IWUSR, | ||
| 106 | display_enabled_show, display_enabled_store); | ||
| 107 | +static DEVICE_ATTR(update_mode, S_IRUGO|S_IWUSR, | ||
| 108 | + display_upd_mode_show, display_upd_mode_store); | ||
| 109 | static DEVICE_ATTR(tear_elim, S_IRUGO|S_IWUSR, | ||
| 110 | display_tear_show, display_tear_store); | ||
| 111 | static DEVICE_ATTR(timings, S_IRUGO|S_IWUSR, | ||
| 112 | @@ -263,6 +307,7 @@ static DEVICE_ATTR(wss, S_IRUGO|S_IWUSR, | ||
| 113 | |||
| 114 | static struct device_attribute *display_sysfs_attrs[] = { | ||
| 115 | &dev_attr_enabled, | ||
| 116 | + &dev_attr_update_mode, | ||
| 117 | &dev_attr_tear_elim, | ||
| 118 | &dev_attr_timings, | ||
| 119 | &dev_attr_rotate, | ||
| 120 | diff --git a/drivers/video/omap2/dss/manager.c b/drivers/video/omap2/dss/manager.c | ||
| 121 | index 6e63845..e5684a9 100644 | ||
| 122 | --- a/drivers/video/omap2/dss/manager.c | ||
| 123 | +++ b/drivers/video/omap2/dss/manager.c | ||
| 124 | @@ -515,6 +515,8 @@ struct overlay_cache_data { | ||
| 125 | |||
| 126 | u32 fifo_low; | ||
| 127 | u32 fifo_high; | ||
| 128 | + | ||
| 129 | + bool manual_update; | ||
| 130 | }; | ||
| 131 | |||
| 132 | struct manager_cache_data { | ||
| 133 | @@ -528,6 +530,7 @@ struct manager_cache_data { | ||
| 134 | |||
| 135 | struct omap_overlay_manager_info info; | ||
| 136 | |||
| 137 | + bool manual_upd_display; | ||
| 138 | bool manual_update; | ||
| 139 | bool do_manual_update; | ||
| 140 | |||
| 141 | @@ -636,15 +639,24 @@ static int dss_mgr_wait_for_go(struct omap_overlay_manager *mgr) | ||
| 142 | if (!dssdev || dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) | ||
| 143 | return 0; | ||
| 144 | |||
| 145 | - if (dssdev->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) | ||
| 146 | - return 0; | ||
| 147 | - | ||
| 148 | if (dssdev->type == OMAP_DISPLAY_TYPE_VENC | ||
| 149 | || dssdev->type == OMAP_DISPLAY_TYPE_HDMI) { | ||
| 150 | irq = DISPC_IRQ_EVSYNC_ODD | DISPC_IRQ_EVSYNC_EVEN; | ||
| 151 | } else { | ||
| 152 | - irq = (dssdev->manager->id == OMAP_DSS_CHANNEL_LCD) ? | ||
| 153 | - DISPC_IRQ_VSYNC : DISPC_IRQ_VSYNC2; | ||
| 154 | + if (dssdev->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) { | ||
| 155 | + enum omap_dss_update_mode mode; | ||
| 156 | + mode = dssdev->driver->get_update_mode(dssdev); | ||
| 157 | + if (mode != OMAP_DSS_UPDATE_AUTO) | ||
| 158 | + return 0; | ||
| 159 | + | ||
| 160 | + irq = (dssdev->manager->id == OMAP_DSS_CHANNEL_LCD) ? | ||
| 161 | + DISPC_IRQ_FRAMEDONE | ||
| 162 | + : DISPC_IRQ_FRAMEDONE2; | ||
| 163 | + } else { | ||
| 164 | + irq = (dssdev->manager->id == OMAP_DSS_CHANNEL_LCD) ? | ||
| 165 | + DISPC_IRQ_VSYNC | ||
| 166 | + : DISPC_IRQ_VSYNC2; | ||
| 167 | + } | ||
| 168 | } | ||
| 169 | |||
| 170 | mc = &dss_cache.manager_cache[mgr->id]; | ||
| 171 | @@ -705,15 +717,24 @@ int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl) | ||
| 172 | if (!dssdev || dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) | ||
| 173 | return 0; | ||
| 174 | |||
| 175 | - if (dssdev->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) | ||
| 176 | - return 0; | ||
| 177 | - | ||
| 178 | if (dssdev->type == OMAP_DISPLAY_TYPE_VENC | ||
| 179 | || dssdev->type == OMAP_DISPLAY_TYPE_HDMI) { | ||
| 180 | irq = DISPC_IRQ_EVSYNC_ODD | DISPC_IRQ_EVSYNC_EVEN; | ||
| 181 | } else { | ||
| 182 | - irq = (dssdev->manager->id == OMAP_DSS_CHANNEL_LCD) ? | ||
| 183 | - DISPC_IRQ_VSYNC : DISPC_IRQ_VSYNC2; | ||
| 184 | + if (dssdev->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) { | ||
| 185 | + enum omap_dss_update_mode mode; | ||
| 186 | + mode = dssdev->driver->get_update_mode(dssdev); | ||
| 187 | + if (mode != OMAP_DSS_UPDATE_AUTO) | ||
| 188 | + return 0; | ||
| 189 | + | ||
| 190 | + irq = (dssdev->manager->id == OMAP_DSS_CHANNEL_LCD) ? | ||
| 191 | + DISPC_IRQ_FRAMEDONE | ||
| 192 | + : DISPC_IRQ_FRAMEDONE2; | ||
| 193 | + } else { | ||
| 194 | + irq = (dssdev->manager->id == OMAP_DSS_CHANNEL_LCD) ? | ||
| 195 | + DISPC_IRQ_VSYNC | ||
| 196 | + : DISPC_IRQ_VSYNC2; | ||
| 197 | + } | ||
| 198 | } | ||
| 199 | |||
| 200 | oc = &dss_cache.overlay_cache[ovl->id]; | ||
| 201 | @@ -848,7 +869,7 @@ static int configure_overlay(enum omap_plane plane) | ||
| 202 | orig_outw = outw; | ||
| 203 | orig_outh = outh; | ||
| 204 | |||
| 205 | - if (mc->manual_update && mc->do_manual_update) { | ||
| 206 | + if (c->manual_update && mc->do_manual_update) { | ||
| 207 | unsigned bpp; | ||
| 208 | unsigned scale_x_m = w, scale_x_d = outw; | ||
| 209 | unsigned scale_y_m = h, scale_y_d = outh; | ||
| 210 | @@ -1010,7 +1031,7 @@ static int configure_dispc(void) | ||
| 211 | if (!oc->dirty) | ||
| 212 | continue; | ||
| 213 | |||
| 214 | - if (mc->manual_update && !mc->do_manual_update) | ||
| 215 | + if (oc->manual_update && !mc->do_manual_update) | ||
| 216 | continue; | ||
| 217 | |||
| 218 | if (mgr_busy[oc->channel]) { | ||
| 219 | @@ -1058,7 +1079,7 @@ static int configure_dispc(void) | ||
| 220 | /* We don't need GO with manual update display. LCD iface will | ||
| 221 | * always be turned off after frame, and new settings will be | ||
| 222 | * taken in to use at next update */ | ||
| 223 | - if (!mc->manual_update) | ||
| 224 | + if (!mc->manual_upd_display) | ||
| 225 | dispc_mgr_go(i); | ||
| 226 | } | ||
| 227 | |||
| 228 | @@ -1376,6 +1397,11 @@ static int omap_dss_mgr_apply(struct omap_overlay_manager *mgr) | ||
| 229 | |||
| 230 | oc->enabled = true; | ||
| 231 | |||
| 232 | + oc->manual_update = | ||
| 233 | + dssdev->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE && | ||
| 234 | + dssdev->driver->get_update_mode(dssdev) != | ||
| 235 | + OMAP_DSS_UPDATE_AUTO; | ||
| 236 | + | ||
| 237 | ++num_planes_enabled; | ||
| 238 | } | ||
| 239 | |||
| 240 | @@ -1402,8 +1428,13 @@ static int omap_dss_mgr_apply(struct omap_overlay_manager *mgr) | ||
| 241 | mc->dirty = true; | ||
| 242 | mc->info = mgr->info; | ||
| 243 | |||
| 244 | - mc->manual_update = | ||
| 245 | + mc->manual_upd_display = | ||
| 246 | dssdev->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE; | ||
| 247 | + | ||
| 248 | + mc->manual_update = | ||
| 249 | + dssdev->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE && | ||
| 250 | + dssdev->driver->get_update_mode(dssdev) != | ||
| 251 | + OMAP_DSS_UPDATE_AUTO; | ||
| 252 | } | ||
| 253 | |||
| 254 | /* XXX TODO: Try to get fifomerge working. The problem is that it | ||
| 255 | diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c | ||
| 256 | index b404095..a8b03c1 100644 | ||
| 257 | --- a/drivers/video/omap2/dss/venc.c | ||
| 258 | +++ b/drivers/video/omap2/dss/venc.c | ||
| 259 | @@ -579,6 +579,20 @@ static int venc_panel_resume(struct omap_dss_device *dssdev) | ||
| 260 | return venc_panel_enable(dssdev); | ||
| 261 | } | ||
| 262 | |||
| 263 | +static enum omap_dss_update_mode venc_get_update_mode( | ||
| 264 | + struct omap_dss_device *dssdev) | ||
| 265 | +{ | ||
| 266 | + return OMAP_DSS_UPDATE_AUTO; | ||
| 267 | +} | ||
| 268 | + | ||
| 269 | +static int venc_set_update_mode(struct omap_dss_device *dssdev, | ||
| 270 | + enum omap_dss_update_mode mode) | ||
| 271 | +{ | ||
| 272 | + if (mode != OMAP_DSS_UPDATE_AUTO) | ||
| 273 | + return -EINVAL; | ||
| 274 | + return 0; | ||
| 275 | +} | ||
| 276 | + | ||
| 277 | static void venc_get_timings(struct omap_dss_device *dssdev, | ||
| 278 | struct omap_video_timings *timings) | ||
| 279 | { | ||
| 280 | @@ -663,6 +677,9 @@ static struct omap_dss_driver venc_driver = { | ||
| 281 | .get_resolution = omapdss_default_get_resolution, | ||
| 282 | .get_recommended_bpp = omapdss_default_get_recommended_bpp, | ||
| 283 | |||
| 284 | + .set_update_mode = venc_set_update_mode, | ||
| 285 | + .get_update_mode = venc_get_update_mode, | ||
| 286 | + | ||
| 287 | .get_timings = venc_get_timings, | ||
| 288 | .set_timings = venc_set_timings, | ||
| 289 | .check_timings = venc_check_timings, | ||
| 290 | diff --git a/include/video/omapdss.h b/include/video/omapdss.h | ||
| 291 | index 378c7ed..540d61e 100644 | ||
| 292 | --- a/include/video/omapdss.h | ||
| 293 | +++ b/include/video/omapdss.h | ||
| 294 | @@ -152,6 +152,12 @@ enum omap_display_caps { | ||
| 295 | OMAP_DSS_DISPLAY_CAP_TEAR_ELIM = 1 << 1, | ||
| 296 | }; | ||
| 297 | |||
| 298 | +enum omap_dss_update_mode { | ||
| 299 | + OMAP_DSS_UPDATE_DISABLED = 0, | ||
| 300 | + OMAP_DSS_UPDATE_AUTO, | ||
| 301 | + OMAP_DSS_UPDATE_MANUAL, | ||
| 302 | +}; | ||
| 303 | + | ||
| 304 | enum omap_dss_display_state { | ||
| 305 | OMAP_DSS_DISPLAY_DISABLED = 0, | ||
| 306 | OMAP_DSS_DISPLAY_ACTIVE, | ||
| 307 | @@ -587,6 +593,11 @@ struct omap_dss_driver { | ||
| 308 | int (*resume)(struct omap_dss_device *display); | ||
| 309 | int (*run_test)(struct omap_dss_device *display, int test); | ||
| 310 | |||
| 311 | + int (*set_update_mode)(struct omap_dss_device *dssdev, | ||
| 312 | + enum omap_dss_update_mode); | ||
| 313 | + enum omap_dss_update_mode (*get_update_mode)( | ||
| 314 | + struct omap_dss_device *dssdev); | ||
| 315 | + | ||
| 316 | int (*update)(struct omap_dss_device *dssdev, | ||
| 317 | u16 x, u16 y, u16 w, u16 h); | ||
| 318 | int (*sync)(struct omap_dss_device *dssdev); | ||
| 319 | -- | ||
| 320 | 1.7.7.3 | ||
| 321 | |||
diff --git a/recipes-kernel/linux/linux-mainline_3.2.bb b/recipes-kernel/linux/linux-mainline_3.2.bb index efad8d01..dd86bbf7 100644 --- a/recipes-kernel/linux/linux-mainline_3.2.bb +++ b/recipes-kernel/linux/linux-mainline_3.2.bb | |||
| @@ -69,6 +69,7 @@ SRC_URI += "git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gi | |||
| 69 | file://omap_fixes/0004-ARM-OMAP4-clock-Add-CPU-local-timer-clock-node.patch \ | 69 | file://omap_fixes/0004-ARM-OMAP4-clock-Add-CPU-local-timer-clock-node.patch \ |
| 70 | file://omap_fixes/0005-ARM-OMAP3-hwmod-data-disable-multiblock-reads-on-MMC.patch \ | 70 | file://omap_fixes/0005-ARM-OMAP3-hwmod-data-disable-multiblock-reads-on-MMC.patch \ |
| 71 | file://omap_fixes/0006-OMAP-HWMOD-add-es3plus-to-am36xx-am35xx.patch \ | 71 | file://omap_fixes/0006-OMAP-HWMOD-add-es3plus-to-am36xx-am35xx.patch \ |
| 72 | file://sgx/0001-Revert-OMAP-DSS2-remove-update_mode-from-omapdss-v3.2.patch \ | ||
| 72 | \ | 73 | \ |
| 73 | file://defconfig" | 74 | file://defconfig" |
| 74 | 75 | ||
