From patchwork Fri Jan 13 20:41:59 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 6202 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id F286023F7F for ; Fri, 13 Jan 2012 20:42:12 +0000 (UTC) Received: from mail-bk0-f52.google.com (mail-bk0-f52.google.com [209.85.214.52]) by fiordland.canonical.com (Postfix) with ESMTP id D732BA18306 for ; Fri, 13 Jan 2012 20:42:12 +0000 (UTC) Received: by bkbzu5 with SMTP id zu5so3270986bkb.11 for ; Fri, 13 Jan 2012 12:42:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=x-forwarded-to:x-forwarded-for:delivered-to:received-spf :dkim-signature:sender:from:to:cc:subject:date:message-id:x-mailer; bh=SdLpt4JDe5IZZCyPEqLk7++XSRG8mgmyKGjwhoTEmzg=; b=qL0EWP7iHaywJVCd1UlERyrbrii8PL9egpvX6wIXrgPTrK+26WvfnygOu4/o5pWiNT Mnv5XhDdsD2qMBY0HBl6VWJCSw1JrQGXb+NsHiqcj6akrpkms10WUNGuQ+ESBwBr8ShN mhCpPL57rJBki4drwfdkB8WfhBGZ1/GBTZu2A= Received: by 10.205.139.66 with SMTP id iv2mr1108114bkc.27.1326487332523; Fri, 13 Jan 2012 12:42:12 -0800 (PST) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.205.82.144 with SMTP id ac16cs38813bkc; Fri, 13 Jan 2012 12:42:12 -0800 (PST) Received: by 10.236.84.114 with SMTP id r78mr4164976yhe.130.1326487330387; Fri, 13 Jan 2012 12:42:10 -0800 (PST) Received: from mail-gx0-f178.google.com (mail-gx0-f178.google.com [209.85.161.178]) by mx.google.com with ESMTPS id v10si11061583yhi.61.2012.01.13.12.42.09 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 13 Jan 2012 12:42:10 -0800 (PST) Received-SPF: pass (google.com: domain of robdclark@gmail.com designates 209.85.161.178 as permitted sender) client-ip=209.85.161.178; Authentication-Results: mx.google.com; spf=pass (google.com: domain of robdclark@gmail.com designates 209.85.161.178 as permitted sender) smtp.mail=robdclark@gmail.com; dkim=pass header.i=@gmail.com Received: by ggnj1 with SMTP id j1so2221133ggn.37 for ; Fri, 13 Jan 2012 12:42:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=sender:from:to:cc:subject:date:message-id:x-mailer; bh=SdLpt4JDe5IZZCyPEqLk7++XSRG8mgmyKGjwhoTEmzg=; b=vBDvaZ+OfgKwjaaAswqiilHtf8tzsdR9nfZKqzabkTeoWrVzg0BlScI0e8uooBv1PO bxt0lyTBw0qSrpKP6f47lwUyosGOSBFuiGmPzYHXAmJ0ycTjuCgLq+OU2SJdNn/AWnoD MD2nX4X2jdG42XHd+cq0JRmT7hNSSKNIDbXSo= Received: by 10.101.142.21 with SMTP id u21mr1269443ann.56.1326487329876; Fri, 13 Jan 2012 12:42:09 -0800 (PST) Received: from localhost (ppp-70-129-131-203.dsl.rcsntx.swbell.net. [70.129.131.203]) by mx.google.com with ESMTPS id a7sm26247199ana.5.2012.01.13.12.42.08 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 13 Jan 2012 12:42:09 -0800 (PST) Sender: Rob Clark From: Rob Clark To: linux-omap@vger.kernel.org, dri-devel@lists.freedesktop.org Cc: patches@linaro.org, Greg KH , Tomi Valkeinen , Andy Gross , Rob Clark Subject: [PATCH 1/2] omap2+: add drm device Date: Fri, 13 Jan 2012 14:41:59 -0600 Message-Id: <1326487320-8781-1-git-send-email-rob.clark@linaro.org> X-Mailer: git-send-email 1.7.5.4 From: Rob Clark Register OMAP DRM/KMS platform device, and reserve a CMA region for the device to use for buffer allocation. v1: initial patch v2: move platform data structs into plat-omap to avoid having to #include headers from drivers/staging and cleanups Signed-off-by: Rob Clark --- Note: after applying this patch there will be duplicate copies of the platform data structs (until the 2nd patch is applied). But I tested to ensure this does not cause build breaks. So the 2nd patch which should go thru staging tree is safe to be held until this patch hits Linus's master branch. arch/arm/plat-omap/Makefile | 2 +- arch/arm/plat-omap/common.c | 3 +- arch/arm/plat-omap/drm.c | 83 +++++++++++++++++++++++++++++++++ arch/arm/plat-omap/include/plat/drm.h | 70 +++++++++++++++++++++++++++ 4 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 arch/arm/plat-omap/drm.c create mode 100644 arch/arm/plat-omap/include/plat/drm.h diff --git a/arch/arm/plat-omap/Makefile b/arch/arm/plat-omap/Makefile index 9a58461..b86e6cb 100644 --- a/arch/arm/plat-omap/Makefile +++ b/arch/arm/plat-omap/Makefile @@ -4,7 +4,7 @@ # Common support obj-y := common.o sram.o clock.o devices.o dma.o mux.o \ - usb.o fb.o counter_32k.o + usb.o fb.o counter_32k.o drm.o obj-m := obj-n := obj- := diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c index 06383b5..0d87dab 100644 --- a/arch/arm/plat-omap/common.c +++ b/arch/arm/plat-omap/common.c @@ -21,10 +21,10 @@ #include #include #include +#include #include - #define NO_LENGTH_CHECK 0xffffffff struct omap_board_config_kernel *omap_board_config __initdata; @@ -65,6 +65,7 @@ const void *__init omap_get_var_config(u16 tag, size_t *len) void __init omap_reserve(void) { + omapdrm_reserve_vram(); omapfb_reserve_sdram_memblock(); omap_vram_reserve_sdram_memblock(); omap_dsp_reserve_sdram_memblock(); diff --git a/arch/arm/plat-omap/drm.c b/arch/arm/plat-omap/drm.c new file mode 100644 index 0000000..aa0ba69 --- /dev/null +++ b/arch/arm/plat-omap/drm.c @@ -0,0 +1,83 @@ +/* + * DRM/KMS device registration for TI OMAP platforms + * + * Copyright (C) 2012 Texas Instruments + * Author: Rob Clark + * + * 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 in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#ifdef CONFIG_CMA +# include +#endif + +#include +#include + +#include + +#if defined(CONFIG_DRM_OMAP) || (CONFIG_DRM_OMAP_MODULE) + +static struct omap_drm_platform_data omapdrm_platdata; +static struct omap_dmm_platform_data dmm_platdata; + +static struct platform_device omap_drm_device = { + .dev = { + .coherent_dma_mask = DMA_BIT_MASK(32), + .platform_data = &omapdrm_platdata, + }, + .name = "omapdrm", + .id = 0, +}; + +static int __init omap_init_gpu(void) +{ + struct omap_hwmod *oh = NULL; + + /* lookup and populate the DMM information, if present - OMAP4+ */ + oh = omap_hwmod_lookup("dmm"); + + if (oh) { + dmm_platdata.base = omap_hwmod_get_mpu_rt_va(oh); + dmm_platdata.irq = oh->mpu_irqs[0].irq; + + if (dmm_platdata.base) + omapdrm_platdata.dmm_pdata = &dmm_platdata; + } + + return platform_device_register(&omap_drm_device); +} + +arch_initcall(omap_init_gpu); + +void omapdrm_reserve_vram(void) +{ +#ifdef CONFIG_CMA + /* + * Create private 32MiB contiguous memory area for omapdrm.0 device + * TODO revisit size.. if uc/wc buffers are allocated from CMA pages + * then the amount of memory we need goes up.. + */ + dma_declare_contiguous(&omap_drm_device.dev, 32 * SZ_1M, 0, 0); +#else +# warning "CMA is not enabled, there may be limitations about scanout buffer allocations on OMAP3 and earlier" +#endif +} + +#endif diff --git a/arch/arm/plat-omap/include/plat/drm.h b/arch/arm/plat-omap/include/plat/drm.h new file mode 100644 index 0000000..e29be29 --- /dev/null +++ b/arch/arm/plat-omap/include/plat/drm.h @@ -0,0 +1,70 @@ +/* + * DRM/KMS device registration for TI OMAP platforms + * + * Copyright (C) 2012 Texas Instruments + * Author: Rob Clark + * + * 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 in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#ifndef __PLAT_OMAP_DRM_H__ +#define __PLAT_OMAP_DRM_H__ + +/* + * Optional platform data to configure the default configuration of which + * pipes/overlays/CRTCs are used.. if this is not provided, then instead the + * first CONFIG_DRM_OMAP_NUM_CRTCS are used, and they are each connected to + * one manager, with priority given to managers that are connected to + * detected devices. Remaining overlays are used as video planes. This + * should be a good default behavior for most cases, but yet there still + * might be times when you wish to do something different. + */ +struct omap_kms_platform_data { + /* overlays to use as CRTCs: */ + int ovl_cnt; + const int *ovl_ids; + + /* overlays to use as video planes: */ + int pln_cnt; + const int *pln_ids; + + int mgr_cnt; + const int *mgr_ids; + + int dev_cnt; + const char **dev_names; +}; + +struct omap_drm_platform_data { + struct omap_kms_platform_data *kms_pdata; + struct omap_dmm_platform_data *dmm_pdata; +}; + +struct omap_dmm_platform_data { + void __iomem *base; + int irq; +}; + +#if defined(CONFIG_DRM_OMAP) || defined(CONFIG_DRM_OMAP_MODULE) + +void omapdrm_reserve_vram(void); + +#else + +static inline void omapdrm_reserve_vram(void) +{ +} + +#endif + +#endif /* __PLAT_OMAP_DRM_H__ */