From patchwork Wed Aug 30 18:07:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 111334 Delivered-To: patch@linaro.org Received: by 10.140.95.112 with SMTP id h103csp1324564qge; Wed, 30 Aug 2017 11:07:32 -0700 (PDT) X-Google-Smtp-Source: ADKCNb6UMkc/Gd8FZ6iq+vuaOJBoqT8TxZKwBcJ0cRMsr9G8PUY9u+/jYH8uBnH89LAsf2bodsY+ X-Received: by 10.84.131.69 with SMTP id 63mr3044212pld.130.1504116452578; Wed, 30 Aug 2017 11:07:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504116452; cv=none; d=google.com; s=arc-20160816; b=WvqoBCl3rgKkpnZopubuOLe2Xldvae7pICjfHUSzUM6c/WHXn65Rb2Z0HLA60FrFuA cgo71/OiNltqa+CkeDZobsgFoeJ+MBuZbxO/wN83qf0Cmfhg2FNgOx7tLggzIlTKVKr4 IA4xc2wXj6m+lp2JAPf+IDlK7lMwFRQQjjDrxK+qwIrx/TQpNnXmCbq7YdxbaZyHvQU7 ZFvdyru1rTceQOqhB+077QyjLaY7y3iuRubWe9v9n4j256uMIFwLTpKIMwWzeAuRLF23 Q91FHUgh2zo30UDOnUaZf+Yg59/laLvf4pjwj9/O/LsGsSLHdCDljDcZiMMCn14khxau LMjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:cc:references:in-reply-to:message-id:date :subject:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=O7qeMqwRTpuGkp01bI6sx3MJyudTHrzOVvb33CQ4G90=; b=fhiF18wMbuy55yi/S4gBfuVwgpbYbNPOUNkOd/Q8+Kb3o4UzsRZZyRvHhZsCi3TvrG NsKbbv6F3Z3nSUVA1cgFe7C5ifCiuQ7YB18gUmsTDJ7Ue2Ec0yCGd68tlAKxkW+zNWpl ixXHqpaYgOzHsiMJYByv8LThKP6I2IOhnve+/80jYv/zuSCJsy08SO9CM1dgETHQ7h2g VKmBsJEkR0Cd0/nj2zWuuJ3bUfxSUwDKF9GdMZA4ZiyPg3+O2WhV+GtFIp54wDpyMWD7 J7YZvG+/mEm/ub8ThrulWbNedeFZLoE+Gd7DRZOIOATHFXS6OfAPFFTEyXfH5FocrVRo yrtg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=Uuqu6d+d; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from gabe.freedesktop.org (gabe.freedesktop.org. [131.252.210.177]) by mx.google.com with ESMTPS id 1si4925610plj.244.2017.08.30.11.07.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 Aug 2017 11:07:32 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) client-ip=131.252.210.177; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=Uuqu6d+d; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DEC7F6E3BC; Wed, 30 Aug 2017 18:07:29 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf0-x22f.google.com (mail-lf0-x22f.google.com [IPv6:2a00:1450:4010:c07::22f]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4F08C6E3BC for ; Wed, 30 Aug 2017 18:07:27 +0000 (UTC) Received: by mail-lf0-x22f.google.com with SMTP id y128so21817263lfd.4 for ; Wed, 30 Aug 2017 11:07:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8/akyO8gvhUsp9tdHucDbUYyssRG3AdTV0lEWJpl6ZE=; b=Uuqu6d+dijhkMQpf7H6RD4mPieZmNtU/tY8arFVu7sIYdtB19oraxSZtsaugS8jh2O vFQaCj72hHJ9C0Zn/GNq3xBgGGunCw2zOEcum2AzG9EeF3tsLwZywk92KmHAd1OvWTRf LW8vX9yEKRNrw3R3ucZq7hcalgk09iquRGG1Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8/akyO8gvhUsp9tdHucDbUYyssRG3AdTV0lEWJpl6ZE=; b=CrKsBG8PgDHKVaSkH7iPZ41CgS4j+3wI2TFEtCzu95teAJNjSoZZ+B6mSBHldGoQoo XRqHqpBNqmgWojzY/B16uPJ+4aa7en+KwBhy/dFwDgrnXhy/JQlS5BILeMbtG7sSL5fb +L/wmmCRlM9+uupM8brZGHKxLwjHvZmwRe6/SxbdfxgoP8TSHhEMHNIkKnm2h0ZKiL5r mTprwoq6RP80OKRJUaBWZ9ySJ4iAYGKXeeh3ZpnONtiFHYMpFAddUTfAeSERHKv5TPiQ 9H5uBdkYVYYG4OJhM1GhCmIVpznUq33vgHPXWAENE3sH/ToBnaYQN3JnLniN3eV/zxF1 /H7Q== X-Gm-Message-State: AHPjjUjU4DjkqHF62PTBC8WSfGmcHaLbXhkUjZMBW3UQE1JZYFE8vhhr Lns3RExqyZamtEqp X-Received: by 10.25.150.204 with SMTP id y195mr1021000lfd.233.1504116445675; Wed, 30 Aug 2017 11:07:25 -0700 (PDT) Received: from genomnajs.bredbandsbolaget.se (c-287571d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.117.40]) by smtp.gmail.com with ESMTPSA id 123sm1177067ljf.80.2017.08.30.11.07.24 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 Aug 2017 11:07:24 -0700 (PDT) From: Linus Walleij To: Daniel Vetter , Jani Nikula , Sean Paul , Eric Anholt Subject: [PATCH 1/7] drm/pl111: Cleanup local header file Date: Wed, 30 Aug 2017 20:07:05 +0200 Message-Id: <20170830180711.2791-2-linus.walleij@linaro.org> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170830180711.2791-1-linus.walleij@linaro.org> References: <20170830180711.2791-1-linus.walleij@linaro.org> Cc: linux-arm-kernel@lists.infradead.org, dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The header file contains prototypes for two nonexisting functions. Get rid of them. Signed-off-by: Linus Walleij --- drivers/gpu/drm/pl111/pl111_drm.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/gpu/drm/pl111/pl111_drm.h b/drivers/gpu/drm/pl111/pl111_drm.h index 5c685bfc8fdc..a97f303f6833 100644 --- a/drivers/gpu/drm/pl111/pl111_drm.h +++ b/drivers/gpu/drm/pl111/pl111_drm.h @@ -58,10 +58,6 @@ int pl111_enable_vblank(struct drm_device *drm, unsigned int crtc); void pl111_disable_vblank(struct drm_device *drm, unsigned int crtc); irqreturn_t pl111_irq(int irq, void *data); int pl111_connector_init(struct drm_device *dev); -int pl111_encoder_init(struct drm_device *dev); -int pl111_dumb_create(struct drm_file *file_priv, - struct drm_device *dev, - struct drm_mode_create_dumb *args); int pl111_debugfs_init(struct drm_minor *minor); #endif /* _PL111_DRM_H_ */ From patchwork Wed Aug 30 18:07:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 111339 Delivered-To: patch@linaro.org Received: by 10.140.95.112 with SMTP id h103csp1325305qge; Wed, 30 Aug 2017 11:08:04 -0700 (PDT) X-Google-Smtp-Source: ADKCNb4dXkc7qkKiTc6iyi/NmBLRs58W3Di1cyHosY8WK318CT2uxIm64SzmBTIe6JM5CfRgK1GX X-Received: by 10.84.238.135 with SMTP id v7mr2982167plk.416.1504116484113; Wed, 30 Aug 2017 11:08:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504116484; cv=none; d=google.com; s=arc-20160816; b=tjF1izwokKJthL4FQGpNmpaanJIwyWNNPITW2l1MBMTLY+jVuEzzIDZraBR8ObrnGD OhbEQUWxkFJbw6TcWRYdAtsk8W+FU3vffPRKJZlc78xzSNHt1NBqIIZZMUvXqAa0Ud9U wlZmlseRytnq203LoPXHRSxlrvaH6DFWEhvFh93OQhKTzdyuxBIpLTA4VKTeHB13rjZG xY0OFoqkS/NScZRUMAsy6njeAnmUMtHfZi9B4A3u6xpQ9I/tb9xqaHCCmMddkg+W5O+W 4VC7zO+KQPNanXYh/TmmpNrMh29XtO9bFeh0F5aDnTVHyB1zkmCA8cZw37Q5nWHXmShH DkCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:cc:references:in-reply-to:message-id:date :subject:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=0HCbro0wqDl3Qlfe5By+A6GzqjSk2NKn95KRHFvcF+o=; b=vN0LgLzvBG37T9pKQ3Xr5D4ms0fGfSYJJSPl3yTkrZhw9vkmL7batbN24Meb7AYh3/ 3Jma0Zw6DCNLM21dlEQDLYs84OEwHHGaekM48UDhUt+8rGblbxWQqKd5uUPQJox4snst rpA8fpEub68o/NiKdTo4eBiuSMtOHXwG3wyi3gZRZRd4Qk9mjjZ3h3brYn/lxcVaaD1M 5ip4vrNstmsqGB38HM07hpeuSoiw5S50PmPM4L49n/N7hKSWeNZdBczInWFU7NrE7PZf wFrOCNZ4ddU5h4kRCWjCtKxuz0nRsA/oHqSPzQsavnCPRhr+r4tGxc+J//Cf/cZNtFPL MCVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=LShMffkM; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from gabe.freedesktop.org (gabe.freedesktop.org. [131.252.210.177]) by mx.google.com with ESMTPS id s74si4758275pfi.348.2017.08.30.11.08.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 Aug 2017 11:08:04 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) client-ip=131.252.210.177; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=LShMffkM; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 078E76E45D; Wed, 30 Aug 2017 18:07:32 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf0-x22a.google.com (mail-lf0-x22a.google.com [IPv6:2a00:1450:4010:c07::22a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6A56D6E49C for ; Wed, 30 Aug 2017 18:07:30 +0000 (UTC) Received: by mail-lf0-x22a.google.com with SMTP id g18so8164435lfl.2 for ; Wed, 30 Aug 2017 11:07:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=r5/jl/PwgACvpH3fpcVp89Wwlxe4e99JmGPaQ6PdlkY=; b=LShMffkMtZ6rl3OlHkS66T4+J4ebScj6uhAJir5izD8+N0ojgLhfinNPnpOCrd9+Y6 2+SnLDG5hUSJD/K7Lo6XDcXcqRW9EgX5RORZeLb7ue86Ks+iJAA49uRXbBU8yijL3Ib7 +IspYdZ/aVOT/u1SQRxfnlMfcor5lhxw24YRI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=r5/jl/PwgACvpH3fpcVp89Wwlxe4e99JmGPaQ6PdlkY=; b=YZW6zq4iq6QVBIOVL6GI37B2Hy4kBeue74DREKXUwRtDTiRuQBeZ3EM6IvaMas2mPg 4ncvHWT5hH8G3gUTAuaD1CBzakgI1LVOqLCaorYzWsjzGhGQBGMaaC8IQ9U1Ph/61bja 2fsBzGwME6tjggT1/biK0Y9Jou6gxx6PAKp6sx4Jsp66wpKUM4NG8uMTuWaOaeNzXxZ6 Zn4L5FdInly3bPp3XWSLLuZLwrz4lDwYfa1ibUskOiIEQgnfDNZAKZNE4Kyu0nCMuojB zW+0YbxalDodgAemdoMSkCrovXDrLr3cfN9Ys1rZLw8IsxGw9mbU8GjOP6vfPlY+SPa5 i3Ew== X-Gm-Message-State: AHPjjUiaqk7aIai8iKBhFw39bEweh9v7wzZmpyJtZ8s112a9gQhS/QBS ggmOAxTDK7pAucOQ X-Received: by 10.25.158.2 with SMTP id h2mr1029248lfe.163.1504116448737; Wed, 30 Aug 2017 11:07:28 -0700 (PDT) Received: from genomnajs.bredbandsbolaget.se (c-287571d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.117.40]) by smtp.gmail.com with ESMTPSA id 123sm1177067ljf.80.2017.08.30.11.07.27 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 Aug 2017 11:07:27 -0700 (PDT) From: Linus Walleij To: Daniel Vetter , Jani Nikula , Sean Paul , Eric Anholt Subject: [PATCH 2/7] drm/pl111: Add all registers to debugfs Date: Wed, 30 Aug 2017 20:07:06 +0200 Message-Id: <20170830180711.2791-3-linus.walleij@linaro.org> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170830180711.2791-1-linus.walleij@linaro.org> References: <20170830180711.2791-1-linus.walleij@linaro.org> Cc: linux-arm-kernel@lists.infradead.org, dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" This adds all the main control registers to the debugfs register file. This was helpful for my debugging so it will likely help others as well. Signed-off-by: Linus Walleij Reviewed-by: Eric Anholt --- drivers/gpu/drm/pl111/pl111_debugfs.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/gpu/drm/pl111/pl111_debugfs.c b/drivers/gpu/drm/pl111/pl111_debugfs.c index 0d9dee199b2c..7ddc7e3b9e7d 100644 --- a/drivers/gpu/drm/pl111/pl111_debugfs.c +++ b/drivers/gpu/drm/pl111/pl111_debugfs.c @@ -22,8 +22,14 @@ static const struct { REGDEF(CLCD_TIM2), REGDEF(CLCD_TIM3), REGDEF(CLCD_UBAS), + REGDEF(CLCD_LBAS), REGDEF(CLCD_PL111_CNTL), REGDEF(CLCD_PL111_IENB), + REGDEF(CLCD_PL111_RIS), + REGDEF(CLCD_PL111_MIS), + REGDEF(CLCD_PL111_ICR), + REGDEF(CLCD_PL111_UCUR), + REGDEF(CLCD_PL111_LCUR), }; int pl111_debugfs_regs(struct seq_file *m, void *unused) From patchwork Wed Aug 30 18:07:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 111335 Delivered-To: patch@linaro.org Received: by 10.140.95.112 with SMTP id h103csp1324684qge; Wed, 30 Aug 2017 11:07:37 -0700 (PDT) X-Google-Smtp-Source: ADKCNb7Aaply2SbYh8jOaGEsN1TB6bDc8cyPgFerYD2IUUwmRKcmBmXUSQ4Rs88iCq3XrxehtLZT X-Received: by 10.101.70.130 with SMTP id h2mr2388736pgr.54.1504116457086; Wed, 30 Aug 2017 11:07:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504116457; cv=none; d=google.com; s=arc-20160816; b=lcOv2nbv4rly5dA+EBHCJFcb7YXaZJQSx8/ebi7hOao8yAWJAeBFttwQlr/f1FEogv kYh1IEmACQf1GuRKO53ak5fAynSl8fEWAmiYTGk6+Dfg/QL0FCk0oYgCsrc66cALEb/Z QOX5OT0SzLYYwoi28WzTVJZvGR2bHP/MMTT/6BBF8B47SmTZ5tYCUa1p7y4RDeNGfcvR +rmbJmvNIpqhbrVU46iwHc2S1jIsB153Vp259hqjAUY64e3r47DKu7pZ9M/+gY+1IemU 4SC+UzYIQqugmXV221zGMpfvTmdHH7MhUIkMVtZoFUrG0AU5TS1Op/r7gPan2vmqHLf3 umsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:cc:references:in-reply-to:message-id:date :subject:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=Ce0nyMhVu8XaSS2b+F9Kau19WJIm8xal7zisiK4TpbM=; b=i8NpXT7ClhxG6hh21hdKmiI/jINDf1m7+ifd1DH6L95slHVhl9W5/bJKygwgLrlWXt VGk5vzkOi0J37sT5fNBEknYlRb5Bccghx+YcgkUvXPBcJzxaAh+BaYfzChTnQK8e2/03 Wl/OA951N4pScBL3eYF39ZwRc2kbPZIY9rkYXNDi6g94hddo+nH3XNi5foJbv4vlLKuy S6CimQ5Dyd6Fy/i2ljEEaDb3I8aKQZbcy9O3/ZIDMWTmwxqTfkb2emu/78CTwQbBOn6q 3njOnHtDcI4Rfh05l2FRcu3pQnxR5kx0a933KRFzlj3roGu+tPnoRruC9znbOePHnDig Vf4Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=jkEgj3wX; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from gabe.freedesktop.org (gabe.freedesktop.org. [131.252.210.177]) by mx.google.com with ESMTPS id y7si4906059plh.832.2017.08.30.11.07.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 Aug 2017 11:07:37 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) client-ip=131.252.210.177; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=jkEgj3wX; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 332A96E4B5; Wed, 30 Aug 2017 18:07:36 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf0-x22a.google.com (mail-lf0-x22a.google.com [IPv6:2a00:1450:4010:c07::22a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5070A6E4B5 for ; Wed, 30 Aug 2017 18:07:33 +0000 (UTC) Received: by mail-lf0-x22a.google.com with SMTP id g18so8164925lfl.2 for ; Wed, 30 Aug 2017 11:07:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=SkqliTl+JhOZ2DG7KmVXXmCMcRNt13OLWdoTwZ4F8C0=; b=jkEgj3wX6QAbXCZBBNIbY6QDT3gePtZQcezyMsoOBKkvDPFJI016/Cjzicq/zACAo+ U1OqWYDr/pG52Xqqxs742tUtV1tm73fhgKo5q2DqP+rVQxDAYuu5N5fb2OSB7JXVXPkT qSurxpHpMLc0XclluU95LxGHUh7hel64Y05iE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=SkqliTl+JhOZ2DG7KmVXXmCMcRNt13OLWdoTwZ4F8C0=; b=mBYQvmzXBt+OVG0UGuefepW5SwmRBwr0p4hwYFz31nDY4hX1dhBjjHC+J+iilmGoQf SfwznOyKJ35KuoC292+oyZMVz4HkAvIJ4zh6436IBhS2IZ9oO/YBHPGASfvvlBBqzUlD awsMCbxxoeEtsJT4a2635FXHdphyVg1bak1M2vR/6lf2RPVubpjkXHssk7g9cKuG9UdW jouoNEwYer2iSqXgPXc5Zno5rZ6qoHhLYyx5DnFqUorukpkHWot35Z7i/1hGfwxBo1My 3MfP8+CacVLi2eOW28MngHFZEawPqKnR3lSFx9QwxE957njNfp83wSwDWLswtfSpfFDX IjGw== X-Gm-Message-State: AHPjjUhJvSKYUCxp7jl/BVqfSwY0qKZY1F+jXS2smrF8BzE4IcDq3r0A bli6lbKwuNd7yRDg X-Received: by 10.25.142.151 with SMTP id a23mr911085lfl.66.1504116451589; Wed, 30 Aug 2017 11:07:31 -0700 (PDT) Received: from genomnajs.bredbandsbolaget.se (c-287571d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.117.40]) by smtp.gmail.com with ESMTPSA id 123sm1177067ljf.80.2017.08.30.11.07.30 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 Aug 2017 11:07:30 -0700 (PDT) From: Linus Walleij To: Daniel Vetter , Jani Nikula , Sean Paul , Eric Anholt Subject: [PATCH 3/7] drm/pl111: Replace custom connector with panel bridge Date: Wed, 30 Aug 2017 20:07:07 +0200 Message-Id: <20170830180711.2791-4-linus.walleij@linaro.org> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170830180711.2791-1-linus.walleij@linaro.org> References: <20170830180711.2791-1-linus.walleij@linaro.org> Cc: linux-arm-kernel@lists.infradead.org, dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" This replaces the custom connector in the PL111 with the panel bridge helper. This works nicely for all standard panels, but since there are several PL11x-based systems that will need to use the dumb VGA connector bridge we use drm_of_find_panel_or_bridge() and make some headroom for dealing with bridges that are not panels as well, and drop a TODO in the code. Signed-off-by: Linus Walleij --- drivers/gpu/drm/pl111/Kconfig | 3 +- drivers/gpu/drm/pl111/Makefile | 3 +- drivers/gpu/drm/pl111/pl111_connector.c | 127 -------------------------------- drivers/gpu/drm/pl111/pl111_display.c | 15 ++-- drivers/gpu/drm/pl111/pl111_drm.h | 18 ++--- drivers/gpu/drm/pl111/pl111_drv.c | 62 +++++++++++----- 6 files changed, 64 insertions(+), 164 deletions(-) delete mode 100644 drivers/gpu/drm/pl111/pl111_connector.c diff --git a/drivers/gpu/drm/pl111/Kconfig b/drivers/gpu/drm/pl111/Kconfig index bbfba87cd1a8..e5e2abd66491 100644 --- a/drivers/gpu/drm/pl111/Kconfig +++ b/drivers/gpu/drm/pl111/Kconfig @@ -6,7 +6,8 @@ config DRM_PL111 select DRM_KMS_HELPER select DRM_KMS_CMA_HELPER select DRM_GEM_CMA_HELPER - select DRM_PANEL + select DRM_BRIDGE + select DRM_PANEL_BRIDGE select VT_HW_CONSOLE_BINDING if FRAMEBUFFER_CONSOLE help Choose this option for DRM support for the PL111 CLCD controller. diff --git a/drivers/gpu/drm/pl111/Makefile b/drivers/gpu/drm/pl111/Makefile index 59483d610ef5..c5f8f9684848 100644 --- a/drivers/gpu/drm/pl111/Makefile +++ b/drivers/gpu/drm/pl111/Makefile @@ -1,5 +1,4 @@ -pl111_drm-y += pl111_connector.o \ - pl111_display.o \ +pl111_drm-y += pl111_display.o \ pl111_drv.o pl111_drm-$(CONFIG_DEBUG_FS) += pl111_debugfs.o diff --git a/drivers/gpu/drm/pl111/pl111_connector.c b/drivers/gpu/drm/pl111/pl111_connector.c deleted file mode 100644 index 3f213d7e7692..000000000000 --- a/drivers/gpu/drm/pl111/pl111_connector.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - * (C) COPYRIGHT 2012-2013 ARM Limited. All rights reserved. - * - * Parts of this file were based on sources as follows: - * - * Copyright (c) 2006-2008 Intel Corporation - * Copyright (c) 2007 Dave Airlie - * Copyright (C) 2011 Texas Instruments - * - * This program is free software and is provided to you under the terms of the - * GNU General Public License version 2 as published by the Free Software - * Foundation, and any use by you of this program is subject to the terms of - * such GNU licence. - * - */ - -/** - * pl111_drm_connector.c - * Implementation of the connector functions for PL111 DRM - */ -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "pl111_drm.h" - -static void pl111_connector_destroy(struct drm_connector *connector) -{ - struct pl111_drm_connector *pl111_connector = - to_pl111_connector(connector); - - if (pl111_connector->panel) - drm_panel_detach(pl111_connector->panel); - - drm_connector_unregister(connector); - drm_connector_cleanup(connector); -} - -static enum drm_connector_status pl111_connector_detect(struct drm_connector - *connector, bool force) -{ - struct pl111_drm_connector *pl111_connector = - to_pl111_connector(connector); - - return (pl111_connector->panel ? - connector_status_connected : - connector_status_disconnected); -} - -static int pl111_connector_helper_get_modes(struct drm_connector *connector) -{ - struct pl111_drm_connector *pl111_connector = - to_pl111_connector(connector); - - if (!pl111_connector->panel) - return 0; - - return drm_panel_get_modes(pl111_connector->panel); -} - -const struct drm_connector_funcs connector_funcs = { - .fill_modes = drm_helper_probe_single_connector_modes, - .destroy = pl111_connector_destroy, - .detect = pl111_connector_detect, - .dpms = drm_atomic_helper_connector_dpms, - .reset = drm_atomic_helper_connector_reset, - .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, - .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, -}; - -const struct drm_connector_helper_funcs connector_helper_funcs = { - .get_modes = pl111_connector_helper_get_modes, -}; - -/* Walks the OF graph to find the panel node and then asks DRM to look - * up the panel. - */ -static struct drm_panel *pl111_get_panel(struct device *dev) -{ - struct device_node *endpoint, *panel_node; - struct device_node *np = dev->of_node; - struct drm_panel *panel; - - endpoint = of_graph_get_next_endpoint(np, NULL); - if (!endpoint) { - dev_err(dev, "no endpoint to fetch panel\n"); - return NULL; - } - - /* don't proceed if we have an endpoint but no panel_node tied to it */ - panel_node = of_graph_get_remote_port_parent(endpoint); - of_node_put(endpoint); - if (!panel_node) { - dev_err(dev, "no valid panel node\n"); - return NULL; - } - - panel = of_drm_find_panel(panel_node); - of_node_put(panel_node); - - return panel; -} - -int pl111_connector_init(struct drm_device *dev) -{ - struct pl111_drm_dev_private *priv = dev->dev_private; - struct pl111_drm_connector *pl111_connector = &priv->connector; - struct drm_connector *connector = &pl111_connector->connector; - - drm_connector_init(dev, connector, &connector_funcs, - DRM_MODE_CONNECTOR_DPI); - drm_connector_helper_add(connector, &connector_helper_funcs); - - pl111_connector->panel = pl111_get_panel(dev->dev); - if (pl111_connector->panel) - drm_panel_attach(pl111_connector->panel, connector); - - return 0; -} - diff --git a/drivers/gpu/drm/pl111/pl111_display.c b/drivers/gpu/drm/pl111/pl111_display.c index c6ca4f1bbd49..ef86ef60aed1 100644 --- a/drivers/gpu/drm/pl111/pl111_display.c +++ b/drivers/gpu/drm/pl111/pl111_display.c @@ -93,7 +93,7 @@ static void pl111_display_enable(struct drm_simple_display_pipe *pipe, struct pl111_drm_dev_private *priv = drm->dev_private; const struct drm_display_mode *mode = &cstate->mode; struct drm_framebuffer *fb = plane->state->fb; - struct drm_connector *connector = &priv->connector.connector; + struct drm_connector *connector = priv->connector; u32 cntl; u32 ppl, hsw, hfp, hbp; u32 lpp, vsw, vfp, vbp; @@ -155,7 +155,7 @@ static void pl111_display_enable(struct drm_simple_display_pipe *pipe, writel(0, priv->regs + CLCD_TIM3); - drm_panel_prepare(priv->connector.panel); + drm_panel_prepare(priv->panel); /* Enable and Power Up */ cntl = CNTL_LCDEN | CNTL_LCDTFT | CNTL_LCDPWR | CNTL_LCDVCOMP(1); @@ -203,7 +203,7 @@ static void pl111_display_enable(struct drm_simple_display_pipe *pipe, writel(cntl, priv->regs + CLCD_PL111_CNTL); - drm_panel_enable(priv->connector.panel); + drm_panel_enable(priv->panel); drm_crtc_vblank_on(crtc); } @@ -216,12 +216,12 @@ void pl111_display_disable(struct drm_simple_display_pipe *pipe) drm_crtc_vblank_off(crtc); - drm_panel_disable(priv->connector.panel); + drm_panel_disable(priv->panel); /* Disable and Power Down */ writel(0, priv->regs + CLCD_PL111_CNTL); - drm_panel_unprepare(priv->connector.panel); + drm_panel_unprepare(priv->panel); clk_disable_unprepare(priv->clk); } @@ -457,9 +457,12 @@ int pl111_display_init(struct drm_device *drm) ret = drm_simple_display_pipe_init(drm, &priv->pipe, &pl111_display_funcs, formats, ARRAY_SIZE(formats), - &priv->connector.connector); + priv->connector); if (ret) return ret; + /* We need the encoder to attach the bridge */ + priv->encoder = &priv->pipe.encoder; + return 0; } diff --git a/drivers/gpu/drm/pl111/pl111_drm.h b/drivers/gpu/drm/pl111/pl111_drm.h index a97f303f6833..8804af0f8997 100644 --- a/drivers/gpu/drm/pl111/pl111_drm.h +++ b/drivers/gpu/drm/pl111/pl111_drm.h @@ -21,21 +21,23 @@ #include #include +#include +#include +#include +#include #include #define CLCD_IRQ_NEXTBASE_UPDATE BIT(2) struct drm_minor; -struct pl111_drm_connector { - struct drm_connector connector; - struct drm_panel *panel; -}; - struct pl111_drm_dev_private { struct drm_device *drm; - struct pl111_drm_connector connector; + struct drm_connector *connector; + struct drm_encoder *encoder; + struct drm_panel *panel; + struct drm_bridge *bridge; struct drm_simple_display_pipe pipe; struct drm_fbdev_cma *fbdev; @@ -50,14 +52,10 @@ struct pl111_drm_dev_private { spinlock_t tim2_lock; }; -#define to_pl111_connector(x) \ - container_of(x, struct pl111_drm_connector, connector) - int pl111_display_init(struct drm_device *dev); int pl111_enable_vblank(struct drm_device *drm, unsigned int crtc); void pl111_disable_vblank(struct drm_device *drm, unsigned int crtc); irqreturn_t pl111_irq(int irq, void *data); -int pl111_connector_init(struct drm_device *dev); int pl111_debugfs_init(struct drm_minor *minor); #endif /* _PL111_DRM_H_ */ diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c index ac8771be70b0..e66cbf202e17 100644 --- a/drivers/gpu/drm/pl111/pl111_drv.c +++ b/drivers/gpu/drm/pl111/pl111_drv.c @@ -67,6 +67,9 @@ #include #include #include +#include +#include +#include #include "pl111_drm.h" @@ -82,6 +85,8 @@ static int pl111_modeset_init(struct drm_device *dev) { struct drm_mode_config *mode_config; struct pl111_drm_dev_private *priv = dev->dev_private; + struct drm_panel *panel; + struct drm_bridge *bridge; int ret = 0; drm_mode_config_init(dev); @@ -92,34 +97,46 @@ static int pl111_modeset_init(struct drm_device *dev) mode_config->min_height = 1; mode_config->max_height = 768; - ret = pl111_connector_init(dev); - if (ret) { - dev_err(dev->dev, "Failed to create pl111_drm_connector\n"); - goto out_config; - } - - /* Don't actually attach if we didn't find a drm_panel - * attached to us. This will allow a kernel to include both - * the fbdev pl111 driver and this one, and choose between - * them based on which subsystem has support for the panel. - */ - if (!priv->connector.panel) { - dev_info(dev->dev, - "Disabling due to lack of DRM panel device.\n"); - ret = -ENODEV; - goto out_config; + ret = drm_of_find_panel_or_bridge(dev->dev->of_node, + 0, 0, &panel, &bridge); + if (ret && ret != -ENODEV) + return ret; + if (panel) { + bridge = drm_panel_bridge_add(panel, + DRM_MODE_CONNECTOR_Unknown); + if (IS_ERR(bridge)) { + ret = PTR_ERR(bridge); + goto out_config; + } } ret = pl111_display_init(dev); if (ret != 0) { dev_err(dev->dev, "Failed to init display\n"); - goto out_config; + goto out_bridge; + } + + if (bridge) { + ret = drm_bridge_attach(priv->encoder, bridge, NULL); + if (ret) + goto out_bridge; + } + + /* + * TODO: when we are using a different bridge than a panel + * (such as a dumb VGA connector) we need to devise a different + * method to get the connector out of the bridge. + */ + if (panel) { + priv->panel = panel; + priv->connector = panel->connector; } + priv->bridge = bridge; ret = drm_vblank_init(dev, 1); if (ret != 0) { dev_err(dev->dev, "Failed to init vblank\n"); - goto out_config; + goto out_bridge; } drm_mode_config_reset(dev); @@ -131,6 +148,11 @@ static int pl111_modeset_init(struct drm_device *dev) goto finish; +out_bridge: + if (panel) + drm_panel_bridge_remove(bridge); + else + drm_bridge_remove(bridge); out_config: drm_mode_config_cleanup(dev); finish: @@ -237,6 +259,10 @@ static int pl111_amba_remove(struct amba_device *amba_dev) drm_dev_unregister(drm); if (priv->fbdev) drm_fbdev_cma_fini(priv->fbdev); + if (priv->panel) + drm_panel_bridge_remove(priv->bridge); + else + drm_bridge_remove(priv->bridge); drm_mode_config_cleanup(drm); drm_dev_unref(drm); From patchwork Wed Aug 30 18:07:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 111336 Delivered-To: patch@linaro.org Received: by 10.140.95.112 with SMTP id h103csp1324792qge; Wed, 30 Aug 2017 11:07:41 -0700 (PDT) X-Google-Smtp-Source: ADKCNb48pjXBT7SMn5JwZBM6zt5ldyp7YGXE4p9q0EG/4XzVY1UtHMuGsOSRwk/dg8q/DriVoQxQ X-Received: by 10.99.110.77 with SMTP id j74mr2322843pgc.407.1504116461372; Wed, 30 Aug 2017 11:07:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504116461; cv=none; d=google.com; s=arc-20160816; b=iF1vELPEuPhMjRn7KP1rqFISOkWFLH4iyMUalUMfikDdlSMtZxKgx5PQ5w3doiaA2/ qkI21uvb38N/9DHYShurJJPtBKnqYNFXoxt6ZxwsGcZlk3DTaD2UlHuJbSfQ0FvkzD4i xV5MqTHKY/2VU+9arBwVDHoOR2QIXLipAoKRL6uEOZ890SMpz9CIwMOI05bBGegUNO+n j7ApJao9uy2jGQx8lrSrJRjfHbZfqIZ7uMgmABa0KUG2Rl94mX0yNM2MWLcEtPX0y8ts kr/XUUTHXJcQJVlwFx4Cte+doSLMRVjnb3oo+eh/y03XMvlWijy4mXNssu2hoqDTPPd/ f4FA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:cc:references:in-reply-to:message-id:date :subject:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=1k0PCyjRndFqmUyiago1Rg6RZqjVtMmACm7ckmBYtXw=; b=PsNq+R4ZK9Fx5xY6/ndgT8e8wGcQrnIq5xp+sY7nKjci3TD6M9dxsVys5CRpDS7DRb UQwi0tKo0XAQyt5CNmrPnq/3224zwdbrgxRsXZJLzW6LugUU6+YRDw0mcEyUqzzNzdWs qbWxJy+BGnu2j1ukLABVBUgmZUnh/8VHMlQcAUMkpAuCu384l8AG6oGDXrYi225j2P7I SwJXnm7HnWn7CjSUwwmrUa1IQZfOJ53ozji864RtPP73Me2/tEv0/ZeXgP8OnwpCb4ks i4imKMBx2yjYA8CSttz81zIXlotxRTZMRZ/u8KHu/uKT6hx4suemlpFCq2KCvdCZ18po 3OjQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=Zj7Ggtnc; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from gabe.freedesktop.org (gabe.freedesktop.org. [131.252.210.177]) by mx.google.com with ESMTPS id 137si5162944pgd.22.2017.08.30.11.07.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 Aug 2017 11:07:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) client-ip=131.252.210.177; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=Zj7Ggtnc; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 80D9A6E4BA; Wed, 30 Aug 2017 18:07:38 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf0-x22e.google.com (mail-lf0-x22e.google.com [IPv6:2a00:1450:4010:c07::22e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 25DEA6E486 for ; Wed, 30 Aug 2017 18:07:36 +0000 (UTC) Received: by mail-lf0-x22e.google.com with SMTP id d17so27445318lfe.1 for ; Wed, 30 Aug 2017 11:07:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=uf3ODv69XbaHRi/GDLO6DYP1qRiA6YWtWn131ILWerw=; b=Zj7Ggtnc6j+VsZhAgbdfG2vsCZqq3myNlgAVAeq2Kod9BMCLR+zW00kZjpZzfsvjBX bQdCdvYQzv7nX2t8CtBSik1EvuFcnK6o8IeBhvqEhoV2hSUffAVqMcGXR/SMWty9bk/f flM+uA2QXmy3zK6nlTy2v9ciJD9iYCk8V1fn8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=uf3ODv69XbaHRi/GDLO6DYP1qRiA6YWtWn131ILWerw=; b=LzQqeLcUbQfLn6y5J4X4vTkVkESeJOxUDe9SrGCsWJlIqGYB/UM8zkmFdnl5BBLHdo xcKgN8QyN+5QDOgQBy/wz2WqXSGvPGvK19mvLVXYPDKE48D6TXWKK14EGphJfdCDxIpG qkcpdOOtYyUdtXiMrM34XZSAYplFiRTdNd6DqMkJmSOJWsAStRT/WWVObGfKRqtHXNLC HGwchJlwABPblpppxbTPZZBCBEH0waisWSwwmjEdKSkws8ElqY6Bb0fiXDkZ657ggydr FpBnX/CfaqziEhtjqSZSmls2qeC/wi5klI43zrsDR2HpRpfBMALimYAh9yeWogd++4zT Haug== X-Gm-Message-State: AHPjjUgXY3qUG23UGrFEd8ADpl9p5r51xk5Ktm4JpcqvBGZre04MLMu0 NNNDM2mwsitTAuOI X-Received: by 10.25.165.130 with SMTP id o124mr1047586lfe.29.1504116454337; Wed, 30 Aug 2017 11:07:34 -0700 (PDT) Received: from genomnajs.bredbandsbolaget.se (c-287571d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.117.40]) by smtp.gmail.com with ESMTPSA id 123sm1177067ljf.80.2017.08.30.11.07.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 Aug 2017 11:07:33 -0700 (PDT) From: Linus Walleij To: Daniel Vetter , Jani Nikula , Sean Paul , Eric Anholt Subject: [PATCH 4/7] drm/pl111: Enable PL110 variant Date: Wed, 30 Aug 2017 20:07:08 +0200 Message-Id: <20170830180711.2791-5-linus.walleij@linaro.org> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170830180711.2791-1-linus.walleij@linaro.org> References: <20170830180711.2791-1-linus.walleij@linaro.org> Cc: linux-arm-kernel@lists.infradead.org, dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" We detect and enable the use of the PL110 variant, an earlier incarnation of PL111. The only real difference is that the control and interrupt enable registers have swapped place. The Versatile AB and Versatile PB have a variant inbetween PL110 and PL111, it is PL110 but they have already swapped the two registers so those two need a bit of special handling. Signed-off-by: Linus Walleij Reviewed-by: Eric Anholt --- drivers/gpu/drm/pl111/pl111_display.c | 27 +++-------- drivers/gpu/drm/pl111/pl111_drm.h | 17 +++++++ drivers/gpu/drm/pl111/pl111_drv.c | 84 ++++++++++++++++++++++++++++++++++- 3 files changed, 105 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/pl111/pl111_display.c b/drivers/gpu/drm/pl111/pl111_display.c index ef86ef60aed1..6447f36c243a 100644 --- a/drivers/gpu/drm/pl111/pl111_display.c +++ b/drivers/gpu/drm/pl111/pl111_display.c @@ -201,7 +201,7 @@ static void pl111_display_enable(struct drm_simple_display_pipe *pipe, break; } - writel(cntl, priv->regs + CLCD_PL111_CNTL); + writel(cntl, priv->regs + priv->ctrl); drm_panel_enable(priv->panel); @@ -219,7 +219,7 @@ void pl111_display_disable(struct drm_simple_display_pipe *pipe) drm_panel_disable(priv->panel); /* Disable and Power Down */ - writel(0, priv->regs + CLCD_PL111_CNTL); + writel(0, priv->regs + priv->ctrl); drm_panel_unprepare(priv->panel); @@ -259,7 +259,7 @@ int pl111_enable_vblank(struct drm_device *drm, unsigned int crtc) { struct pl111_drm_dev_private *priv = drm->dev_private; - writel(CLCD_IRQ_NEXTBASE_UPDATE, priv->regs + CLCD_PL111_IENB); + writel(CLCD_IRQ_NEXTBASE_UPDATE, priv->regs + priv->ienb); return 0; } @@ -268,7 +268,7 @@ void pl111_disable_vblank(struct drm_device *drm, unsigned int crtc) { struct pl111_drm_dev_private *priv = drm->dev_private; - writel(0, priv->regs + CLCD_PL111_IENB); + writel(0, priv->regs + priv->ienb); } static int pl111_display_prepare_fb(struct drm_simple_display_pipe *pipe, @@ -412,22 +412,6 @@ int pl111_display_init(struct drm_device *drm) struct device_node *endpoint; u32 tft_r0b0g0[3]; int ret; - static const u32 formats[] = { - DRM_FORMAT_ABGR8888, - DRM_FORMAT_XBGR8888, - DRM_FORMAT_ARGB8888, - DRM_FORMAT_XRGB8888, - DRM_FORMAT_BGR565, - DRM_FORMAT_RGB565, - DRM_FORMAT_ABGR1555, - DRM_FORMAT_XBGR1555, - DRM_FORMAT_ARGB1555, - DRM_FORMAT_XRGB1555, - DRM_FORMAT_ABGR4444, - DRM_FORMAT_XBGR4444, - DRM_FORMAT_ARGB4444, - DRM_FORMAT_XRGB4444, - }; endpoint = of_graph_get_next_endpoint(dev->of_node, NULL); if (!endpoint) @@ -456,7 +440,8 @@ int pl111_display_init(struct drm_device *drm) ret = drm_simple_display_pipe_init(drm, &priv->pipe, &pl111_display_funcs, - formats, ARRAY_SIZE(formats), + priv->variant->formats, + priv->variant->nformats, priv->connector); if (ret) return ret; diff --git a/drivers/gpu/drm/pl111/pl111_drm.h b/drivers/gpu/drm/pl111/pl111_drm.h index 8804af0f8997..b316a8a0fbc0 100644 --- a/drivers/gpu/drm/pl111/pl111_drm.h +++ b/drivers/gpu/drm/pl111/pl111_drm.h @@ -31,6 +31,20 @@ struct drm_minor; +/** + * struct pl111_variant_data - encodes IP differences + * @name: the name of this variant + * @is_pl110: this is the early PL110 variant + * @formats: array of supported pixel formats on this variant + * @nformats: the length of the array of supported pixel formats + */ +struct pl111_variant_data { + const char *name; + bool is_pl110; + const u32 *formats; + unsigned int nformats; +}; + struct pl111_drm_dev_private { struct drm_device *drm; @@ -42,6 +56,8 @@ struct pl111_drm_dev_private { struct drm_fbdev_cma *fbdev; void *regs; + u32 ienb; + u32 ctrl; /* The pixel clock (a reference to our clock divider off of CLCDCLK). */ struct clk *clk; /* pl111's internal clock divider. */ @@ -50,6 +66,7 @@ struct pl111_drm_dev_private { * subsystem and pl111_display_enable(). */ spinlock_t tim2_lock; + struct pl111_variant_data *variant; }; int pl111_display_init(struct drm_device *dev); diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c index e66cbf202e17..f6863c0fb809 100644 --- a/drivers/gpu/drm/pl111/pl111_drv.c +++ b/drivers/gpu/drm/pl111/pl111_drv.c @@ -206,6 +206,7 @@ static int pl111_amba_probe(struct amba_device *amba_dev, { struct device *dev = &amba_dev->dev; struct pl111_drm_dev_private *priv; + struct pl111_variant_data *variant = id->data; struct drm_device *drm; int ret; @@ -219,6 +220,33 @@ static int pl111_amba_probe(struct amba_device *amba_dev, amba_set_drvdata(amba_dev, drm); priv->drm = drm; drm->dev_private = priv; + priv->variant = variant; + + /* + * The PL110 and PL111 variants have two registers + * swapped: interrupt enable and control. For this reason + * we use offsets that we can change per variant. + */ + if (variant->is_pl110) { + /* + * The ARM Versatile boards are even more special: + * their PrimeCell ID say they are PL110 but the + * control and interrupt enable registers are anyway + * swapped to the PL111 order so they are not following + * the PL110 datasheet. + */ + if (of_machine_is_compatible("arm,versatile-ab") || + of_machine_is_compatible("arm,versatile-pb")) { + priv->ienb = CLCD_PL111_IENB; + priv->ctrl = CLCD_PL111_CNTL; + } else { + priv->ienb = CLCD_PL110_IENB; + priv->ctrl = CLCD_PL110_CNTL; + } + } else { + priv->ienb = CLCD_PL111_IENB; + priv->ctrl = CLCD_PL111_CNTL; + } priv->regs = devm_ioremap_resource(dev, &amba_dev->res); if (IS_ERR(priv->regs)) { @@ -227,10 +255,10 @@ static int pl111_amba_probe(struct amba_device *amba_dev, } /* turn off interrupts before requesting the irq */ - writel(0, priv->regs + CLCD_PL111_IENB); + writel(0, priv->regs + priv->ienb); ret = devm_request_irq(dev, amba_dev->irq[0], pl111_irq, 0, - "pl111", priv); + variant->name, priv); if (ret != 0) { dev_err(dev, "%s failed irq %d\n", __func__, ret); return ret; @@ -269,10 +297,62 @@ static int pl111_amba_remove(struct amba_device *amba_dev) return 0; } +/* + * This variant exist in early versions like the ARM Integrator + * and this version lacks the 565 and 444 pixel formats. + */ +static const u32 pl110_pixel_formats[] = { + DRM_FORMAT_ABGR8888, + DRM_FORMAT_XBGR8888, + DRM_FORMAT_ARGB8888, + DRM_FORMAT_XRGB8888, + DRM_FORMAT_ABGR1555, + DRM_FORMAT_XBGR1555, + DRM_FORMAT_ARGB1555, + DRM_FORMAT_XRGB1555, +}; + +struct pl111_variant_data pl110_variant = { + .name = "PL110", + .is_pl110 = true, + .formats = pl110_pixel_formats, + .nformats = ARRAY_SIZE(pl110_pixel_formats), +}; + +/* RealView, Versatile Express etc use this modern variant */ +static const u32 pl111_pixel_formats[] = { + DRM_FORMAT_ABGR8888, + DRM_FORMAT_XBGR8888, + DRM_FORMAT_ARGB8888, + DRM_FORMAT_XRGB8888, + DRM_FORMAT_BGR565, + DRM_FORMAT_RGB565, + DRM_FORMAT_ABGR1555, + DRM_FORMAT_XBGR1555, + DRM_FORMAT_ARGB1555, + DRM_FORMAT_XRGB1555, + DRM_FORMAT_ABGR4444, + DRM_FORMAT_XBGR4444, + DRM_FORMAT_ARGB4444, + DRM_FORMAT_XRGB4444, +}; + +struct pl111_variant_data pl111_variant = { + .name = "PL111", + .formats = pl111_pixel_formats, + .nformats = ARRAY_SIZE(pl111_pixel_formats), +}; + static struct amba_id pl111_id_table[] = { { + .id = 0x00041110, + .mask = 0x000fffff, + .data = &pl110_variant, + }, + { .id = 0x00041111, .mask = 0x000fffff, + .data = &pl111_variant, }, {0, 0}, }; From patchwork Wed Aug 30 18:07:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 111337 Delivered-To: patch@linaro.org Received: by 10.140.95.112 with SMTP id h103csp1324958qge; Wed, 30 Aug 2017 11:07:49 -0700 (PDT) X-Google-Smtp-Source: ADKCNb4KK4EJiV0aR72/RgbdpTFI4V+RObR/PTv1pP+yuT3Dmd8VRiaMzPe3FoVQ8hrWITmqqzMk X-Received: by 10.98.130.134 with SMTP id w128mr2419661pfd.112.1504116469040; Wed, 30 Aug 2017 11:07:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504116469; cv=none; d=google.com; s=arc-20160816; b=q89G2AogGfgJxWplmyFZ1F5pypqvNqCQsvdYqUN74hEMLKD/X8ndHYCbM9ydEvkoLm 6kqNxXS7XcTzdChhd/wi18yc7ri1CJo0Rypoe3xbtEz5vhbts0+2m+RRHlBWCxTuwr0e 8aFk3GiJzBEd7royVug1APSK8SyIWPtOkuX+gD1QQb6x9onSpvUeHtRhJGeP3DShAJT4 cNXnKRa9pVren4Vaq1nEtMbElZZ50VUvO2SuExVW+1Rr98yBvFgFN0MXeO5qTFMWGmNa xaNlpEasw1OcsQb1m9rdWCuhhDeRExrXl6iw9py7kr1zXnP1liwf8qkw9UdKnYqWWd6e QUyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:cc:references:in-reply-to:message-id:date :subject:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=NGLflw/jNSys2DfaDKAeR6tRu687Ridu+bIcPAqg7AM=; b=pMP3PCPTtd3zq21sLC1dlPgbLloT67lBHdVzgXOItTMHdGjSu2/qbVrvuzdQfOcdB6 +va1YnoQtVTIMobTpcN6Slu6C7mAB+nkgb/zDCi9y1iJwonu4E+eSn3l4T6pvpW+WOTK Irw68ugO5RT/6ClHm3khLiCcL50cEt6JwyiC09DERjnn4/OaNk0IA9rxxLJRU9p8gbs+ Dx0SJb6Zos85p82971pg9QwPIE52Rf+eMTjrY+D54MiPEOmec3y1IQEGHMcjkwMEzLL7 H/vdD+m37KE5gNi/X0tc7jLngHr8fnZ4d77g6+k/qzXeMluheSd1pkNFs+BaSYnmznQs eHrg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=jkNLKjqj; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from gabe.freedesktop.org (gabe.freedesktop.org. [131.252.210.177]) by mx.google.com with ESMTPS id k17si4702585pfe.473.2017.08.30.11.07.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 Aug 2017 11:07:49 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) client-ip=131.252.210.177; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=jkNLKjqj; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 550246E4D5; Wed, 30 Aug 2017 18:07:42 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf0-x22f.google.com (mail-lf0-x22f.google.com [IPv6:2a00:1450:4010:c07::22f]) by gabe.freedesktop.org (Postfix) with ESMTPS id 278EE6E486 for ; Wed, 30 Aug 2017 18:07:38 +0000 (UTC) Received: by mail-lf0-x22f.google.com with SMTP id d202so27395993lfd.5 for ; Wed, 30 Aug 2017 11:07:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=V4iiFpLcwGn3TYJ3/a29nUpHSvcCwXzP2Z+QIu0psMs=; b=jkNLKjqjKa76WGaT5C9iI2Ecs0qH3udn7nJWx7IK4FVqwjxsu0705tfozSH9I2cAsH RvZgi4SpipIC46dhJPu1wNbngTPZNQiHjGaj5XBr365qaCXiXbyxyv8n7ax9/G7QocQE ejpaFWKmDejMUjblBQYUxBS0l9M38OXuAJea0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=V4iiFpLcwGn3TYJ3/a29nUpHSvcCwXzP2Z+QIu0psMs=; b=fZWwpPQOXwxvHlsoBbcS6JdqH7Ij3Euw2NcQb7eRGFF6/9r7tArt900OOupXDtfjP1 AKtugzTbee2urnKEV7lQ3L+PEnuwB9+YMcy9vASpnSVdLIjUHZH1/RVwXue7LLyOHwIH +GFVsyHKFAhuD95PS3bVUFYjBtGmgw56UMcPuOeuOImrHWOMeUwQtZQ2x0zCzamG5rSC j2/65hOjMMS/HNrmySVZ1U7Vk3fE5tlTlatty5uThZlP3kak/X/tB3uLVwwBW5+VEPrI D0oA+qLQqfMhhJsgM2Q2s9/740OopYQO9aoXmSTF2Ost5SxVXv5ZRD4UOI0u8N2R7g52 3h8w== X-Gm-Message-State: AHPjjUhLj9K13/iG9QItj/lplDnWQ8hD9CH/4tA4U2KrFKuB5zYc0qxf YKCcT2nid3zLJOO6 X-Received: by 10.25.99.23 with SMTP id x23mr895643lfb.180.1504116456558; Wed, 30 Aug 2017 11:07:36 -0700 (PDT) Received: from genomnajs.bredbandsbolaget.se (c-287571d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.117.40]) by smtp.gmail.com with ESMTPSA id 123sm1177067ljf.80.2017.08.30.11.07.35 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 Aug 2017 11:07:35 -0700 (PDT) From: Linus Walleij To: Daniel Vetter , Jani Nikula , Sean Paul , Eric Anholt Subject: [PATCH 5/7] drm/pl111: Insert delay before powering up PL11x Date: Wed, 30 Aug 2017 20:07:09 +0200 Message-Id: <20170830180711.2791-6-linus.walleij@linaro.org> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170830180711.2791-1-linus.walleij@linaro.org> References: <20170830180711.2791-1-linus.walleij@linaro.org> Cc: linux-arm-kernel@lists.infradead.org, dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The old codebase has a delay between enabling and powering up the PL11x. According to the manual for PL110, ARM DDI 0161E page 1-5 and the PL111 manual ARM DDI 0293C page 1-6, the power sequence should be such that once Vdd is stable (which we assume it is at boot) LCDEN is enabled first and then CLPOWER should be enabled "after the signals have stabilized" and this is said to be display-dependent. The old codebase uses 20ms. The delay construction in the old code is not to be trusted: it was likely assuming a certain hard-coded display (such as the Versatile PROSPECTOR display) and the PL11x blocks are used in several designs with different displays. Instead rely on the display driver to provide the proper delay in response to the drm_panel_prepare() and drm_panel_enable() as well as the drm_panel_disable() and drm_panel_unprepare() calls, but make sure to set the LCDEN before these calls and then CLPOWER after calling them (and the reverse for disabling). Signed-off-by: Linus Walleij --- drivers/gpu/drm/pl111/pl111_display.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/pl111/pl111_display.c b/drivers/gpu/drm/pl111/pl111_display.c index 6447f36c243a..39106068b158 100644 --- a/drivers/gpu/drm/pl111/pl111_display.c +++ b/drivers/gpu/drm/pl111/pl111_display.c @@ -157,8 +157,8 @@ static void pl111_display_enable(struct drm_simple_display_pipe *pipe, drm_panel_prepare(priv->panel); - /* Enable and Power Up */ - cntl = CNTL_LCDEN | CNTL_LCDTFT | CNTL_LCDPWR | CNTL_LCDVCOMP(1); + /* Hard-code TFT panel */ + cntl = CNTL_LCDEN | CNTL_LCDTFT | CNTL_LCDVCOMP(1); /* Note that the the hardware's format reader takes 'r' from * the low bit, while DRM formats list channels from high bit @@ -201,10 +201,19 @@ static void pl111_display_enable(struct drm_simple_display_pipe *pipe, break; } + /* Power sequence: first enable and chill */ writel(cntl, priv->regs + priv->ctrl); + /* + * We expect these calls to enable and stabilize the contrast + * voltage Vee as stipulated by the manual + */ drm_panel_enable(priv->panel); + /* Power Up */ + cntl |= CNTL_LCDPWR; + writel(cntl, priv->regs + priv->ctrl); + drm_crtc_vblank_on(crtc); } @@ -213,16 +222,27 @@ void pl111_display_disable(struct drm_simple_display_pipe *pipe) struct drm_crtc *crtc = &pipe->crtc; struct drm_device *drm = crtc->dev; struct pl111_drm_dev_private *priv = drm->dev_private; + u32 cntl; drm_crtc_vblank_off(crtc); + /* Power Down */ + cntl = readl(priv->regs + priv->ctrl); + if (cntl & CNTL_LCDPWR) { + cntl &= ~CNTL_LCDPWR; + writel(cntl, priv->regs + priv->ctrl); + } + + /* + * We expect these calls to disable the contrast voltage Vee as + * stipulated by the manual + */ drm_panel_disable(priv->panel); + drm_panel_unprepare(priv->panel); - /* Disable and Power Down */ + /* Disable */ writel(0, priv->regs + priv->ctrl); - drm_panel_unprepare(priv->panel); - clk_disable_unprepare(priv->clk); } From patchwork Wed Aug 30 18:07:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 111338 Delivered-To: patch@linaro.org Received: by 10.140.95.112 with SMTP id h103csp1325182qge; Wed, 30 Aug 2017 11:07:58 -0700 (PDT) X-Google-Smtp-Source: ADKCNb7ajp6iHz8VgiK9pz+vKitWPAcyZ1PnlStEuW+qF0k2UtedHtxLqSpjdIYhyN0CzLh5HzfK X-Received: by 10.84.217.11 with SMTP id o11mr3040994pli.245.1504116478890; Wed, 30 Aug 2017 11:07:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504116478; cv=none; d=google.com; s=arc-20160816; b=GfpAJfKkoh2m5CqqB491d9ir4HkRp/WFrfpbHdF8NrorVKoWPiARxTo5UPnbrgw/TR 6trj5OrolMF4PiB551zfPsjLL4ToCziLE60NpFwOgIdsKv2vLS5G1ghe/nylnW89RIID A6eU+QQTqoNeqsQY7AQ8ILV5gdUC/jUBsRhz1YET8WnnDKRblkv5yKb2b91pk+uqN8g8 MRnVg/j5SQXzRarzw2NKnZbjCo5VNhkkIoJwv0gp8iJfnDV2aMjp9m9DiwDj+oO4rjH3 f0+RMINR7xiJoRUtQ7pcnkbZfVR1JesLaljR0maDlr4bAEbngXqatV46NeUgN8uZUjVG n+qA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:cc:references:in-reply-to:message-id:date :subject:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=/7/aQ+3D3J2zu/cqB4sMIyvmbSG5obf1QVC16M8rHW4=; b=PpZ6fsrdKrOmUXY3gymMyyzb4iHz48uak4pdIIfbYS64P8mAJPHUd6M6aDtZ68tXWL rJ1nuH/ApK0h0cGRuYcbDv9JL1CBdfMx6hkZ2i1f6XM2wmF2oV7qgJ/diDBHZG3FqTgf FawclqM8AK3zhzXzsxysYuCCdYaA+VEfjb92Wca171t4517TtFJXD8gapf7Z350L0Mtf j4ZiSgdnGkHgFyUBVGYWolEJczsZO9G2F+BoymGAzdDEtxLN5f4X2Ws/hTw3IbucJZso i7z+RPu+I27meAlOSLegJ79GLKV3mkv8tehYbeGaxeOe3FXveGFpYoTqTaf9L0LU1Jm4 RAGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=iw9lMzvx; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from gabe.freedesktop.org (gabe.freedesktop.org. [131.252.210.177]) by mx.google.com with ESMTPS id b28si4850157pfl.331.2017.08.30.11.07.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 Aug 2017 11:07:58 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) client-ip=131.252.210.177; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=iw9lMzvx; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 572866E4EA; Wed, 30 Aug 2017 18:07:50 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf0-x22d.google.com (mail-lf0-x22d.google.com [IPv6:2a00:1450:4010:c07::22d]) by gabe.freedesktop.org (Postfix) with ESMTPS id 266F86E4EA for ; Wed, 30 Aug 2017 18:07:49 +0000 (UTC) Received: by mail-lf0-x22d.google.com with SMTP id a126so27578872lfa.0 for ; Wed, 30 Aug 2017 11:07:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=9I3TrHDocg6MUoBbHcPbr2FFOYKqsCYkz86RwlG+6Pw=; b=iw9lMzvxEFIgPTqtXgxydf3+sfqKx3vVV17O8PgMt/DWKRTCuJGMBW+JD7D/WlNInB l68t2aCV0IRot2j6KQ7yhuYE/qt5zXtNxCxXwJgZI28U1/Yh1lDQjfqgzqeDNQzgbyCy yRoeyubq9LuNedswBsU+/sXxOq18ha+Gsyyeg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=9I3TrHDocg6MUoBbHcPbr2FFOYKqsCYkz86RwlG+6Pw=; b=fvTeZkWpgIpF6jPVWucaxK5ND3yIqIQDxbwo/Fye3DXQuASUTE/V3YFbi+Ikvf0QJT hgLNkMw0m/dPBtNS7q5fG8nGbCrm3snX/s+NYvPAwVpAq3fKKkIvECc49I1KkKfw2d5U MFo6NSnKQNFcV3k/fy2gLJyuPqnBvybTq5Ze0aJwnzWZtEFIBuE+TcsdpsusjFP+IRZh /0gFp1GalDxDV8mWFBZkHpNZMk/PA3WG6B2XAwWH1Qy6Uf6Ow0wZnxJAOF7eD7wFmw+r w28ewmlZbbFQi1sTh8YDSDM7qaIhjZmB0reHPEkAop3kfnBf7MZ47hin6XeXpbWFfjSY 6GyQ== X-Gm-Message-State: AHPjjUgxPxIyz4k2vri0KyJcjA7aWnFby2bV9eTiVvxPlekq6s58eX+t cUPDgXXL8nTn+inB X-Received: by 10.25.115.73 with SMTP id o70mr1019893lfc.209.1504116467581; Wed, 30 Aug 2017 11:07:47 -0700 (PDT) Received: from genomnajs.bredbandsbolaget.se (c-287571d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.117.40]) by smtp.gmail.com with ESMTPSA id 123sm1177067ljf.80.2017.08.30.11.07.37 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 Aug 2017 11:07:37 -0700 (PDT) From: Linus Walleij To: Daniel Vetter , Jani Nikula , Sean Paul , Eric Anholt Subject: [PATCH 6/7] drm/pl111: Add optional variant display en/disable callbacks Date: Wed, 30 Aug 2017 20:07:10 +0200 Message-Id: <20170830180711.2791-7-linus.walleij@linaro.org> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170830180711.2791-1-linus.walleij@linaro.org> References: <20170830180711.2791-1-linus.walleij@linaro.org> Cc: linux-arm-kernel@lists.infradead.org, dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The silcon and components around the PL111 may require some variants to perform special set-up of the display. Add two callbacks to manage this. Signed-off-by: Linus Walleij --- drivers/gpu/drm/pl111/pl111_display.c | 7 +++++++ drivers/gpu/drm/pl111/pl111_drm.h | 3 +++ 2 files changed, 10 insertions(+) diff --git a/drivers/gpu/drm/pl111/pl111_display.c b/drivers/gpu/drm/pl111/pl111_display.c index 39106068b158..37f409867934 100644 --- a/drivers/gpu/drm/pl111/pl111_display.c +++ b/drivers/gpu/drm/pl111/pl111_display.c @@ -208,6 +208,9 @@ static void pl111_display_enable(struct drm_simple_display_pipe *pipe, * We expect these calls to enable and stabilize the contrast * voltage Vee as stipulated by the manual */ + if (priv->variant_display_enable) + priv->variant_display_enable(drm, fb->format->format); + drm_panel_enable(priv->panel); /* Power Up */ @@ -238,6 +241,10 @@ void pl111_display_disable(struct drm_simple_display_pipe *pipe) * stipulated by the manual */ drm_panel_disable(priv->panel); + + if (priv->variant_display_disable) + priv->variant_display_disable(drm); + drm_panel_unprepare(priv->panel); /* Disable */ diff --git a/drivers/gpu/drm/pl111/pl111_drm.h b/drivers/gpu/drm/pl111/pl111_drm.h index b316a8a0fbc0..a5368d36e9f5 100644 --- a/drivers/gpu/drm/pl111/pl111_drm.h +++ b/drivers/gpu/drm/pl111/pl111_drm.h @@ -26,6 +26,7 @@ #include #include #include +#include #define CLCD_IRQ_NEXTBASE_UPDATE BIT(2) @@ -67,6 +68,8 @@ struct pl111_drm_dev_private { */ spinlock_t tim2_lock; struct pl111_variant_data *variant; + void (*variant_display_enable) (struct drm_device *drm, u32 format); + void (*variant_display_disable) (struct drm_device *drm); }; int pl111_display_init(struct drm_device *dev); From patchwork Wed Aug 30 18:07:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 111340 Delivered-To: patch@linaro.org Received: by 10.140.95.112 with SMTP id h103csp1325298qge; Wed, 30 Aug 2017 11:08:03 -0700 (PDT) X-Google-Smtp-Source: ADKCNb4BNnG7TClc0Bs0TE3SX+tTn0KIxRaynZPIgvPU+9aN7H7iu5RBRYUvHVB45QBId2vkri2g X-Received: by 10.84.217.6 with SMTP id o6mr2997860pli.147.1504116483853; Wed, 30 Aug 2017 11:08:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504116483; cv=none; d=google.com; s=arc-20160816; b=vkyW3VOwLQhD5WiiPiHZ23UprFln0RO18LhOvtgo8UKoy3PlzHhIXUejxKGz3ZLo3y e+tfjrLpAhaOi6Hs+DjwV3RlEZcERPavuyiOeA1iwPpJUwC6rLUAIPttOi+BGGV6FXcb +/phAhL1+NlEq3byHP0WKQLuWXxEmpW+6bocxMfWg6GwfdVwhlKZ/H9kud9x8auj3g7v rVkXZRZ9OgGqkpSwiv8YmT/c8LQKRv3MNN5KO8bohfzpMxnVOR8CYgBjMjXPz+md1te3 nvfmxMYM97e7HJX5b25UI5BVs6FCkzgcqA4wSNFoJYc50B3JIMpVl0Zs0DPhWzPhJvak HgWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:cc:references:in-reply-to:message-id:date :subject:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=x5EvepyB6YDBJeeeWDnUl9GB521N1CLDosm/pN0sfcs=; b=FLrQedaQ0D691G/3HGf8Glqq4fG/lGcHPoiv/9AA+XiyDeclF4qIe8yZYAU4vCAZPz kvdG9/RN13YAboEv+WQg2q6iJFboqG69vgfgpWCVR6ZzQN3S8FJNW3WvVcM3oLiHoNO1 5FsOM5VMxUOuWtd7oaBunjotylXUXjSRG63nG1LFFFCB+7I8SPPxI97rohs/iMiWFnDM JplTrWd7DyqbZaLPCZsb3E1jP75jwvT3XLxCw8kY5tFnua38n/QmbdNnRNBw/X0XvJri UPcKOYeOTzwGiCkx2OsP3S51bJFkyY5mCAerA9d9DyjNs+cPjm8kJk+x6/Z9h9sqDqhs 0TWQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=H2kK+s+Q; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from gabe.freedesktop.org (gabe.freedesktop.org. [131.252.210.177]) by mx.google.com with ESMTPS id 76si2264042pfm.45.2017.08.30.11.08.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 Aug 2017 11:08:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) client-ip=131.252.210.177; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=H2kK+s+Q; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 23DC86E5D3; Wed, 30 Aug 2017 18:07:53 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf0-x22a.google.com (mail-lf0-x22a.google.com [IPv6:2a00:1450:4010:c07::22a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 567E06E5D3 for ; Wed, 30 Aug 2017 18:07:51 +0000 (UTC) Received: by mail-lf0-x22a.google.com with SMTP id y128so21821077lfd.4 for ; Wed, 30 Aug 2017 11:07:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=F3USv2O8g4Ai/P2UnbiZ8Jnc1bEzlj5z1YE6Ggy/GJE=; b=H2kK+s+Qwc6krNIk5KeYfN5pABbHfQ7vhvvPA875EF/aJ74pQbWJj8zs+I2RhWKT6g him3QizwlW3oGmiNiF5etkNbiSSHtKvnlwPax6uQ4n7BUo5KneUB4smYTNxMZKt9CRDf whUOyx6UM91aVdhc4LAvTlCY769jSugbl6ntU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=F3USv2O8g4Ai/P2UnbiZ8Jnc1bEzlj5z1YE6Ggy/GJE=; b=A4ozUAs2g63TEfpypNiC2gMqgSETrh0Xj4/UBMj8d3J9tsqILHwhGRhhV2DzDAf+OD WeGtkrTT1Zm+6t+uY++o5GVPywHceTi+D74Yml9cVWuP2aAL2U6yGyoCdRDX3aA+Nlh8 NhHaZ27J9e+g3j3GPQW0tnP+2U+lzmxEh0xLHkduD4/kGXXNRXhJc89GYDBlthGFClhj ZxXuoOehmmCkJ6yHvz2bbkT0RrPVgBh8XCUKXUe4NDj8h3S0j2hgqHLRM6D+gX6L2nD3 hB2G7FE+kStZvYFHiSH9eZclh7aIj5FLn9c6joFTN8AxC2vbD8pI5RcAg+MJM8znwafg A/Sw== X-Gm-Message-State: AHPjjUiLKqRkr2S0RNjzNhxYopC+87I0X7Ybmv6DLLvv/yufO/IN7xIi mNGz9DPsJ0ctsOxV X-Received: by 10.25.213.143 with SMTP id m137mr1049309lfg.116.1504116469673; Wed, 30 Aug 2017 11:07:49 -0700 (PDT) Received: from genomnajs.bredbandsbolaget.se (c-287571d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.117.40]) by smtp.gmail.com with ESMTPSA id 123sm1177067ljf.80.2017.08.30.11.07.48 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 Aug 2017 11:07:49 -0700 (PDT) From: Linus Walleij To: Daniel Vetter , Jani Nikula , Sean Paul , Eric Anholt Subject: [PATCH 7/7] drm/pl111: Add handling of Versatile platforms Date: Wed, 30 Aug 2017 20:07:11 +0200 Message-Id: <20170830180711.2791-8-linus.walleij@linaro.org> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170830180711.2791-1-linus.walleij@linaro.org> References: <20170830180711.2791-1-linus.walleij@linaro.org> Cc: linux-arm-kernel@lists.infradead.org, dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The ARM reference designs in the Versatile family: Integrator, Versatile and RealView can make use of the new DRM driver as well. We just need to create a bit of platform-specific code for them that we isolate to its own file. Signed-off-by: Linus Walleij --- drivers/gpu/drm/pl111/Makefile | 1 + drivers/gpu/drm/pl111/pl111_display.c | 7 - drivers/gpu/drm/pl111/pl111_drv.c | 5 + drivers/gpu/drm/pl111/pl111_versatile.c | 270 ++++++++++++++++++++++++++++++++ drivers/gpu/drm/pl111/pl111_versatile.h | 9 ++ 5 files changed, 285 insertions(+), 7 deletions(-) create mode 100644 drivers/gpu/drm/pl111/pl111_versatile.c create mode 100644 drivers/gpu/drm/pl111/pl111_versatile.h diff --git a/drivers/gpu/drm/pl111/Makefile b/drivers/gpu/drm/pl111/Makefile index c5f8f9684848..fce1453a93e1 100644 --- a/drivers/gpu/drm/pl111/Makefile +++ b/drivers/gpu/drm/pl111/Makefile @@ -1,4 +1,5 @@ pl111_drm-y += pl111_display.o \ + pl111_versatile.o \ pl111_drv.o pl111_drm-$(CONFIG_DEBUG_FS) += pl111_debugfs.o diff --git a/drivers/gpu/drm/pl111/pl111_display.c b/drivers/gpu/drm/pl111/pl111_display.c index 37f409867934..f7b043f4fed6 100644 --- a/drivers/gpu/drm/pl111/pl111_display.c +++ b/drivers/gpu/drm/pl111/pl111_display.c @@ -454,13 +454,6 @@ int pl111_display_init(struct drm_device *drm) } of_node_put(endpoint); - if (tft_r0b0g0[0] != 0 || - tft_r0b0g0[1] != 8 || - tft_r0b0g0[2] != 16) { - dev_err(dev, "arm,pl11x,tft-r0g0b0-pads != [0,8,16] not yet supported\n"); - return -EINVAL; - } - ret = pl111_init_clock_divider(drm); if (ret) return ret; diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c index f6863c0fb809..b1759004269c 100644 --- a/drivers/gpu/drm/pl111/pl111_drv.c +++ b/drivers/gpu/drm/pl111/pl111_drv.c @@ -72,6 +72,7 @@ #include #include "pl111_drm.h" +#include "pl111_versatile.h" #define DRIVER_DESC "DRM module for PL111" @@ -264,6 +265,10 @@ static int pl111_amba_probe(struct amba_device *amba_dev, return ret; } + ret = pl111_versatile_init(dev, priv); + if (ret) + goto dev_unref; + ret = pl111_modeset_init(drm); if (ret != 0) goto dev_unref; diff --git a/drivers/gpu/drm/pl111/pl111_versatile.c b/drivers/gpu/drm/pl111/pl111_versatile.c new file mode 100644 index 000000000000..97d4af6925a3 --- /dev/null +++ b/drivers/gpu/drm/pl111/pl111_versatile.c @@ -0,0 +1,270 @@ +#include +#include +#include +#include +#include +#include +#include +#include "pl111_versatile.h" +#include "pl111_drm.h" + +static struct regmap *versatile_syscon_map; + +/* + * We detect the different syscon types from the compatible strings. + */ +enum versatile_clcd { + INTEGRATOR_CLCD_CM, + VERSATILE_CLCD, + REALVIEW_CLCD_EB, + REALVIEW_CLCD_PB1176, + REALVIEW_CLCD_PB11MP, + REALVIEW_CLCD_PBA8, + REALVIEW_CLCD_PBX, +}; + +static const struct of_device_id versatile_clcd_of_match[] = { + { + .compatible = "arm,core-module-integrator", + .data = (void *)INTEGRATOR_CLCD_CM, + }, + { + .compatible = "arm,versatile-sysreg", + .data = (void *)VERSATILE_CLCD, + }, + { + .compatible = "arm,realview-eb-syscon", + .data = (void *)REALVIEW_CLCD_EB, + }, + { + .compatible = "arm,realview-pb1176-syscon", + .data = (void *)REALVIEW_CLCD_PB1176, + }, + { + .compatible = "arm,realview-pb11mp-syscon", + .data = (void *)REALVIEW_CLCD_PB11MP, + }, + { + .compatible = "arm,realview-pba8-syscon", + .data = (void *)REALVIEW_CLCD_PBA8, + }, + { + .compatible = "arm,realview-pbx-syscon", + .data = (void *)REALVIEW_CLCD_PBX, + }, + {}, +}; + +/* + * Core module CLCD control on the Integrator/CP, bits + * 8 thru 19 of the CM_CONTROL register controls a bunch + * of CLCD settings. + */ +#define INTEGRATOR_HDR_CTRL_OFFSET 0x0C +#define INTEGRATOR_CLCD_LCDBIASEN BIT(8) +#define INTEGRATOR_CLCD_LCDBIASUP BIT(9) +#define INTEGRATOR_CLCD_LCDBIASDN BIT(10) +/* Bits 11,12,13 controls the LCD type */ +#define INTEGRATOR_CLCD_LCDMUX_MASK (BIT(11)|BIT(12)|BIT(13)) +#define INTEGRATOR_CLCD_LCDMUX_LCD24 BIT(11) +#define INTEGRATOR_CLCD_LCDMUX_VGA565 BIT(12) +#define INTEGRATOR_CLCD_LCDMUX_SHARP (BIT(11)|BIT(12)) +#define INTEGRATOR_CLCD_LCDMUX_VGA555 BIT(13) +#define INTEGRATOR_CLCD_LCDMUX_VGA24 (BIT(11)|BIT(12)|BIT(13)) +#define INTEGRATOR_CLCD_LCD0_EN BIT(14) +#define INTEGRATOR_CLCD_LCD1_EN BIT(15) +/* R/L flip on Sharp */ +#define INTEGRATOR_CLCD_LCD_STATIC1 BIT(16) +/* U/D flip on Sharp */ +#define INTEGRATOR_CLCD_LCD_STATIC2 BIT(17) +/* No connection on Sharp */ +#define INTEGRATOR_CLCD_LCD_STATIC BIT(18) +/* 0 = 24bit VGA, 1 = 18bit VGA */ +#define INTEGRATOR_CLCD_LCD_N24BITEN BIT(19) + +#define INTEGRATOR_CLCD_MASK (INTEGRATOR_CLCD_LCDBIASEN | \ + INTEGRATOR_CLCD_LCDBIASUP | \ + INTEGRATOR_CLCD_LCDBIASDN | \ + INTEGRATOR_CLCD_LCDMUX_MASK | \ + INTEGRATOR_CLCD_LCD0_EN | \ + INTEGRATOR_CLCD_LCD1_EN | \ + INTEGRATOR_CLCD_LCD_STATIC1 | \ + INTEGRATOR_CLCD_LCD_STATIC2 | \ + INTEGRATOR_CLCD_LCD_STATIC | \ + INTEGRATOR_CLCD_LCD_N24BITEN) + +static void pl111_integrator_enable(struct drm_device *drm, u32 format) +{ + u32 val; + + dev_info(drm->dev, "enable Integrator CLCD connectors\n"); + + /* FIXME: really needed? */ + val = INTEGRATOR_CLCD_LCD_STATIC1 | INTEGRATOR_CLCD_LCD_STATIC2 | + INTEGRATOR_CLCD_LCD0_EN | INTEGRATOR_CLCD_LCD1_EN; + + switch (format) { + case DRM_FORMAT_XBGR8888: + case DRM_FORMAT_XRGB8888: + break; + case DRM_FORMAT_BGR565: + case DRM_FORMAT_RGB565: + /* truecolor RGB565 */ + val |= INTEGRATOR_CLCD_LCDMUX_VGA565; + break; + case DRM_FORMAT_XBGR1555: + case DRM_FORMAT_XRGB1555: + /* Pseudocolor, RGB555, BGR555 */ + val |= INTEGRATOR_CLCD_LCDMUX_VGA555; + break; + default: + dev_err(drm->dev, "unhandled format on Integrator 0x%08x\n", + format); + break; + } + + regmap_update_bits(versatile_syscon_map, + INTEGRATOR_HDR_CTRL_OFFSET, + INTEGRATOR_CLCD_MASK, + val); +} + +/* + * This configuration register in the Versatile and RealView + * family is uniformly present but appears more and more + * unutilized starting with the RealView series. + */ +#define SYS_CLCD 0x50 +#define SYS_CLCD_MODE_MASK (BIT(0)|BIT(1)) +#define SYS_CLCD_MODE_888 0 +#define SYS_CLCD_MODE_5551 BIT(0) +#define SYS_CLCD_MODE_565_R_LSB BIT(1) +#define SYS_CLCD_MODE_565_B_LSB (BIT(0)|BIT(1)) +#define SYS_CLCD_CONNECTOR_MASK (BIT(2)|BIT(3)|BIT(4)|BIT(5)) +#define SYS_CLCD_NLCDIOON BIT(2) +#define SYS_CLCD_VDDPOSSWITCH BIT(3) +#define SYS_CLCD_PWR3V5SWITCH BIT(4) +#define SYS_CLCD_VDDNEGSWITCH BIT(5) + +static void pl111_versatile_disable(struct drm_device *drm) +{ + dev_info(drm->dev, "disable Versatile CLCD connectors\n"); + regmap_update_bits(versatile_syscon_map, + SYS_CLCD, + SYS_CLCD_CONNECTOR_MASK, + 0); +} + +static void pl111_versatile_enable(struct drm_device *drm, u32 format) +{ + u32 val = 0; + + dev_info(drm->dev, "enable Versatile CLCD connectors\n"); + + switch (format) { + case DRM_FORMAT_ABGR8888: + case DRM_FORMAT_XBGR8888: + case DRM_FORMAT_ARGB8888: + case DRM_FORMAT_XRGB8888: + val |= SYS_CLCD_MODE_888; + break; + case DRM_FORMAT_BGR565: + val |= SYS_CLCD_MODE_565_R_LSB; + break; + case DRM_FORMAT_RGB565: + val |= SYS_CLCD_MODE_565_B_LSB; + break; + case DRM_FORMAT_ABGR1555: + case DRM_FORMAT_XBGR1555: + case DRM_FORMAT_ARGB1555: + case DRM_FORMAT_XRGB1555: + val |= SYS_CLCD_MODE_5551; + break; + default: + dev_err(drm->dev, "unhandled format on Versatile 0x%08x\n", + format); + break; + } + + /* Set up the MUX */ + regmap_update_bits(versatile_syscon_map, + SYS_CLCD, + SYS_CLCD_MODE_MASK, + val); + + /* Then enable the display */ + regmap_update_bits(versatile_syscon_map, + SYS_CLCD, + SYS_CLCD_CONNECTOR_MASK, + SYS_CLCD_NLCDIOON | SYS_CLCD_PWR3V5SWITCH); +} + +static void pl111_realview_clcd_disable(struct drm_device *drm) +{ + dev_info(drm->dev, "disable RealView CLCD connectors\n"); + regmap_update_bits(versatile_syscon_map, + SYS_CLCD, + SYS_CLCD_CONNECTOR_MASK, + 0); +} + +static void pl111_realview_clcd_enable(struct drm_device *drm, u32 format) +{ + dev_info(drm->dev, "enable RealView CLCD connectors\n"); + regmap_update_bits(versatile_syscon_map, + SYS_CLCD, + SYS_CLCD_CONNECTOR_MASK, + SYS_CLCD_NLCDIOON | SYS_CLCD_PWR3V5SWITCH); +} + +int pl111_versatile_init(struct device *dev, struct pl111_drm_dev_private *priv) +{ + const struct of_device_id *clcd_id; + enum versatile_clcd versatile_clcd_type; + struct device_node *np; + struct regmap *map; + + np = of_find_matching_node_and_match(NULL, versatile_clcd_of_match, + &clcd_id); + if (!np) { + /* Non-ARM reference designs, just bail out */ + return 0; + } + versatile_clcd_type = (enum versatile_clcd)clcd_id->data; + + map = syscon_node_to_regmap(np); + if (IS_ERR(map)) { + dev_err(dev, "no Versatile syscon regmap\n"); + return PTR_ERR(map); + } + + switch (versatile_clcd_type) { + case INTEGRATOR_CLCD_CM: + versatile_syscon_map = map; + priv->variant_display_enable = pl111_integrator_enable; + dev_info(dev, "set up callbacks for Integrator PL110\n"); + break; + case VERSATILE_CLCD: + versatile_syscon_map = map; + priv->variant_display_enable = pl111_versatile_enable; + priv->variant_display_disable = pl111_versatile_disable; + dev_info(dev, "set up callbacks for Versatile PL110+\n"); + break; + case REALVIEW_CLCD_EB: + case REALVIEW_CLCD_PB1176: + case REALVIEW_CLCD_PB11MP: + case REALVIEW_CLCD_PBA8: + case REALVIEW_CLCD_PBX: + versatile_syscon_map = map; + priv->variant_display_enable = pl111_realview_clcd_enable; + priv->variant_display_disable = pl111_realview_clcd_disable; + dev_info(dev, "set up callbacks for RealView PL111\n"); + break; + default: + dev_info(dev, "unknown Versatile system controller\n"); + break; + } + + return 0; +} +EXPORT_SYMBOL_GPL(pl111_versatile_init); diff --git a/drivers/gpu/drm/pl111/pl111_versatile.h b/drivers/gpu/drm/pl111/pl111_versatile.h new file mode 100644 index 000000000000..41aa6d969dc6 --- /dev/null +++ b/drivers/gpu/drm/pl111/pl111_versatile.h @@ -0,0 +1,9 @@ +#include +#include "pl111_drm.h" + +#ifndef PL111_VERSATILE_H +#define PL111_VERSATILE_H + +int pl111_versatile_init(struct device *dev, struct pl111_drm_dev_private *priv); + +#endif