diff options
author | Andy Gross <andy.gross@ti.com> | 2011-12-05 19:19:21 -0600 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-12-08 15:03:54 -0800 |
commit | 71e8831f6407542afd1d8888d3cca13e677034ef (patch) | |
tree | 15e531b52349d81137b796b3ba8e292f2a195439 /drivers/staging/omapdrm/omap_drv.c | |
parent | e0134715aa136088c649d0d2f833710c7c9e28b0 (diff) | |
download | linux-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.c | 21 |
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 { |