Received: by 10.192.165.148 with SMTP id m20csp2377620imm; Thu, 26 Apr 2018 09:59:17 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+cW4AJCKJNwYUq8Wexzn3I0eBHskthWFCp2SM9qOZIBi8ngfs4ChKNLnxL8w2QMATrB4DM X-Received: by 10.98.12.202 with SMTP id 71mr33082855pfm.61.1524761957522; Thu, 26 Apr 2018 09:59:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524761957; cv=none; d=google.com; s=arc-20160816; b=LSmp6xWJQHFuq6+XXau/15JQgTeR3Uznyw719MPNdClKrQUQ9lfhMd6YyP4pCviVkd 7YX3dXtj1SRoXweqz0q8J14R70ceGxKfanI7vgNk2sza4kpYDfwOMRrNOB7MF3PtsjG3 0GaVzZjRZ+Yfm2RbiUBEnyPEkwRyLWxU4W7o7HQBkksOWchNbVfpZaMItQFag0ih/YKG SoLDZIVu42ZynR9gKbFqAL8ckZ3VY1Fx2vxtM82EEBNHQ9gMFjJaKyOzG/gDk76jIPYU xotM96m3Ai4lZqWkF5g8kXV66XgOs3KxMdTWCp1Ht+gyRxjoNyLlYtlFZ4wXpyxFsMR0 sJeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=h9+XtPFVvWiO/OdFFfoIfCPhOpOWZRvq3R2wwgawooc=; b=VLln5Hjnj3vPTYX9Kt39CNF68USiQZwtgjgC/aRgF5W7UqlP+WZ/6LO6AqGCO1J5Vk i5An9k6TSuCuUP0+ntpgTtn7vLCex5NI93AqFzqbUuJW4Nh2IPH3nv1NTseEeTM41bH6 vSfS6sXSTfIRyDx2VhPF453XxD0rU34WXDU4XR7yJvmkcbqhawByerFnTs/fLXsJ2/h5 YIFvLg1u0GJACHtGyT8KQPTf4popgOrG4+ZzPmYbSgzws9mOYKXjDPuPd8s2NiOTE7BD x0vZfTNmHGgj0Zarr69CTTF5408pJ5wGHuwU95v3fj5orm59VEkwSUu+fp1PYtmDfaII B4ZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=j9JiluAC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r129si19060988pfc.202.2018.04.26.09.59.03; Thu, 26 Apr 2018 09:59:17 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=j9JiluAC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756919AbeDZQyN (ORCPT + 99 others); Thu, 26 Apr 2018 12:54:13 -0400 Received: from perceval.ideasonboard.com ([213.167.242.64]:58064 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756863AbeDZQx5 (ORCPT ); Thu, 26 Apr 2018 12:53:57 -0400 Received: from localhost.localdomain (cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A71083FC3; Thu, 26 Apr 2018 18:53:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1524761634; bh=QQcc12RZhl+wy2PAw336J41ft44xUaMA0M4CrtYmEmg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j9JiluACsBeE//OBLorWyCRiztil+G1nfvHa6bI+o7wKFPLPJz5PtPJd4It1PF+BU M0gBaSTabQLXhHCl6cYLifLKRAtn1fJtvOuedYMYd6eatjgX3ap7Ju+TlIiDlbvs/v ueI/5dtJe1Za25NoM6RviwSfJC0Mz0TSei1DiDe0= From: Kieran Bingham To: linux-renesas-soc@vger.kernel.org Cc: Kieran Bingham , Laurent Pinchart , David Airlie , dri-devel@lists.freedesktop.org (open list:DRM DRIVERS FOR RENESAS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 06/17] drm: rcar-du: Allow DU groups to work with hardware indexing Date: Thu, 26 Apr 2018 17:53:35 +0100 Message-Id: <20180426165346.494-7-kieran.bingham+renesas@ideasonboard.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180426165346.494-1-kieran.bingham+renesas@ideasonboard.com> References: <20180426165346.494-1-kieran.bingham+renesas@ideasonboard.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The group objects assume linear indexing, and more so always assume that channel 0 of any active group is used. Now that the CRTC objects support non-linear indexing, adapt the groups to remove assumptions that channel 0 is utilised in each group by using the channel mask provided in the device structures. Finally ensure that the RGB routing is determined from the index of the CRTC object (which represents the hardware DU channel index). Signed-off-by: Kieran Bingham --- drivers/gpu/drm/rcar-du/rcar_du_group.c | 14 +++++++++----- drivers/gpu/drm/rcar-du/rcar_du_group.h | 2 ++ drivers/gpu/drm/rcar-du/rcar_du_kms.c | 5 ++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/rcar-du/rcar_du_group.c b/drivers/gpu/drm/rcar-du/rcar_du_group.c index eead202c95c7..c52091fe02ba 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_group.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_group.c @@ -46,9 +46,12 @@ void rcar_du_group_write(struct rcar_du_group *rgrp, u32 reg, u32 data) static void rcar_du_group_setup_pins(struct rcar_du_group *rgrp) { - u32 defr6 = DEFR6_CODE | DEFR6_ODPM02_DISP; + u32 defr6 = DEFR6_CODE; - if (rgrp->num_crtcs > 1) + if (rgrp->channel_mask & BIT(0)) + defr6 |= DEFR6_ODPM02_DISP; + + if (rgrp->channel_mask & BIT(1)) defr6 |= DEFR6_ODPM12_DISP; rcar_du_group_write(rgrp, DEFR6, defr6); @@ -80,10 +83,11 @@ static void rcar_du_group_setup_defr8(struct rcar_du_group *rgrp) * On Gen3 VSPD routing can't be configured, but DPAD routing * needs to be set despite having a single option available. */ - u32 crtc = ffs(possible_crtcs) - 1; + unsigned int rgb_crtc = ffs(possible_crtcs) - 1; + struct rcar_du_crtc *crtc = &rcdu->crtcs[rgb_crtc]; - if (crtc / 2 == rgrp->index) - defr8 |= DEFR8_DRGBS_DU(crtc); + if (crtc->index / 2 == rgrp->index) + defr8 |= DEFR8_DRGBS_DU(crtc->index); } rcar_du_group_write(rgrp, DEFR8, defr8); diff --git a/drivers/gpu/drm/rcar-du/rcar_du_group.h b/drivers/gpu/drm/rcar-du/rcar_du_group.h index 5e3adc6b31b5..d29a68e006a7 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_group.h +++ b/drivers/gpu/drm/rcar-du/rcar_du_group.h @@ -25,6 +25,7 @@ struct rcar_du_device; * @dev: the DU device * @mmio_offset: registers offset in the device memory map * @index: group index + * @channel_mask: bitmask of populated DU channels in this group * @num_crtcs: number of CRTCs in this group (1 or 2) * @use_count: number of users of the group (rcar_du_group_(get|put)) * @used_crtcs: number of CRTCs currently in use @@ -39,6 +40,7 @@ struct rcar_du_group { unsigned int mmio_offset; unsigned int index; + unsigned int channel_mask; unsigned int num_crtcs; unsigned int use_count; unsigned int used_crtcs; diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c index 19a445fbc879..45fb554fd3c7 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c @@ -597,7 +597,10 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu) rgrp->dev = rcdu; rgrp->mmio_offset = mmio_offsets[i]; rgrp->index = i; - rgrp->num_crtcs = min(rcdu->num_crtcs - 2 * i, 2U); + /* Extract the channel mask for this group only */ + rgrp->channel_mask = (rcdu->info->channel_mask >> (2 * i)) + & GENMASK(1, 0); + rgrp->num_crtcs = hweight8(rgrp->channel_mask); /* * If we have more than one CRTCs in this group pre-associate -- 2.17.0