summaryrefslogtreecommitdiffstats
path: root/drivers/staging/omapdrm/omap_drv.c
diff options
context:
space:
mode:
authorAndy Gross <andy.gross@ti.com>2011-12-05 19:19:21 -0600
committerGreg Kroah-Hartman <gregkh@suse.de>2011-12-08 15:03:54 -0800
commit71e8831f6407542afd1d8888d3cca13e677034ef (patch)
tree15e531b52349d81137b796b3ba8e292f2a195439 /drivers/staging/omapdrm/omap_drv.c
parente0134715aa136088c649d0d2f833710c7c9e28b0 (diff)
downloadlinux-stable-71e8831f6407542afd1d8888d3cca13e677034ef.tar.gz
linux-stable-71e8831f6407542afd1d8888d3cca13e677034ef.tar.bz2
linux-stable-71e8831f6407542afd1d8888d3cca13e677034ef.zip
drm/omap: DMM/TILER support for OMAP4+ platform
Dynamic Memory Manager (DMM) is a hardware block in the OMAP4+ processor that contains at least one TILER instance. TILER, or Tiling and Isometric Lightweight Engine for Rotation, provides IOMMU capabilities through the use of a physical address translation table. The TILER also provides zero cost rotation and mirroring. The TILER provides both 1D and 2D access by providing different views or address ranges that can be used to access the physical memory that has been mapped in through the PAT. Access to the 1D view results in linear access to the underlying memory. Access to the 2D views result in tiled access to the underlying memory resulted in increased efficiency. The TILER address space is managed by a tiler container manager (TCM) and allocates the address space through the use of the Simple Tiler Allocation algorithm (SiTA). The purpose of the algorithm is to keep fragmentation of the address space as low as possible. Signed-off-by: Andy Gross <andy.gross@ti.com> Signed-off-by: Rob Clark <rob@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/omapdrm/omap_drv.c')
-rw-r--r--drivers/staging/omapdrm/omap_drv.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/staging/omapdrm/omap_drv.c b/drivers/staging/omapdrm/omap_drv.c
index cee005043dbd..71de7cf34d89 100644
--- a/drivers/staging/omapdrm/omap_drv.c
+++ b/drivers/staging/omapdrm/omap_drv.c
@@ -290,6 +290,7 @@ static unsigned int detect_connectors(struct drm_device *dev)
static int omap_modeset_init(struct drm_device *dev)
{
const struct omap_drm_platform_data *pdata = dev->dev->platform_data;
+ struct omap_kms_platform_data *kms_pdata = NULL;
struct omap_drm_private *priv = dev->dev_private;
struct omap_dss_device *dssdev = NULL;
int i, j;
@@ -297,23 +298,27 @@ static int omap_modeset_init(struct drm_device *dev)
drm_mode_config_init(dev);
- if (pdata) {
+ if (pdata && pdata->kms_pdata) {
+ kms_pdata = pdata->kms_pdata;
+
/* if platform data is provided by the board file, use it to
* control which overlays, managers, and devices we own.
*/
- for (i = 0; i < pdata->mgr_cnt; i++) {
+ for (i = 0; i < kms_pdata->mgr_cnt; i++) {
struct omap_overlay_manager *mgr =
- omap_dss_get_overlay_manager(pdata->mgr_ids[i]);
+ omap_dss_get_overlay_manager(
+ kms_pdata->mgr_ids[i]);
create_encoder(dev, mgr);
}
- for (i = 0; i < pdata->dev_cnt; i++) {
+ for (i = 0; i < kms_pdata->dev_cnt; i++) {
struct omap_dss_device *dssdev =
omap_dss_find_device(
- (void *)pdata->dev_names[i], match_dev_name);
+ (void *)kms_pdata->dev_names[i],
+ match_dev_name);
if (!dssdev) {
dev_warn(dev->dev, "no such dssdev: %s\n",
- pdata->dev_names[i]);
+ kms_pdata->dev_names[i]);
continue;
}
create_connector(dev, dssdev);
@@ -322,9 +327,9 @@ static int omap_modeset_init(struct drm_device *dev)
connected_connectors = detect_connectors(dev);
j = 0;
- for (i = 0; i < pdata->ovl_cnt; i++) {
+ for (i = 0; i < kms_pdata->ovl_cnt; i++) {
struct omap_overlay *ovl =
- omap_dss_get_overlay(pdata->ovl_ids[i]);
+ omap_dss_get_overlay(kms_pdata->ovl_ids[i]);
create_crtc(dev, ovl, &j, connected_connectors);
}
} else {