Received: by 10.192.165.148 with SMTP id m20csp2585589imm; Thu, 26 Apr 2018 13:38:14 -0700 (PDT) X-Google-Smtp-Source: AIpwx49FZt0G4vRBLGMd8Z7q6HxoCGf2Jp84otfcU9HavWbtjiEfUCmissBbuHW5H9YtUd6vYrpj X-Received: by 2002:a17:902:2702:: with SMTP id c2-v6mr30918877plb.297.1524775094747; Thu, 26 Apr 2018 13:38:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524775094; cv=none; d=google.com; s=arc-20160816; b=FmWRJlRo17gb5s6KP+k8HMl+XD2kLpulU2sekZ3UUMuoIO9mFoO181sVWMxjTLGl+N 41k5xfX78Dkseu+tQOjTu1+sRBhzFqRLOjjLbQsK26UEaYHjfFmwxso0QE9kmb91zIX2 LVg3mIuR3W7iOw3lCseMkjiNvcvoAeTcLEn/rPVfqD/EhfQHdDHjdRhYDOGKoYLLGcHx AIwUMOSYLJhUtddl3Wj9yEtceawsVMLnyR5TqADdWOZQiWHR4Hh5AMOwvRHOo3if401J dzCLWqOqURE+oSnCZgsk6vakrKGK+xpa/QgGDDJNjjJKkm3Udwti5Jgfmfq8cTjiswxv fNqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:organization:message-id:date:subject:cc:to :from:dkim-signature:arc-authentication-results; bh=MYU8xbUQDargmeUbd8fBXxi5rF3AOYpkwp9G1EojPdw=; b=puGZecXYhLFWbo4PFL0O/TJzZa9mogviy33L4qH7dtiprO0tU+Hb2FHffuBrbvTp6w cbEleawCmlfssTMNy0JrVmwaf38d7oBKntF+vhmilc68JyoCyIT7dWN3oxVThGzD5q7C blL2cDSyoKN+Jdx/WcsU+sFSPepZK+phZlwpWNpSairyr7ys8o5IuEQ8xDdvdziXqqqr X3mVeOTjaXI0wCFsgZCTfr4VOEPUeEOCP0lc+/ZPAt7dKwi/db8EeEWOFRzYRxuVLujm JCGzXe4R7kf0966gAJ8qiJFney9Zb1AKtZpGAnJzRh+7G3DAiOjLmHTidnS6c/BVIe9T KTjQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=vjaUTXac; 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 g3-v6si19918059pld.309.2018.04.26.13.37.59; Thu, 26 Apr 2018 13:38:14 -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=vjaUTXac; 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 S1755294AbeDZUgg (ORCPT + 99 others); Thu, 26 Apr 2018 16:36:36 -0400 Received: from perceval.ideasonboard.com ([213.167.242.64]:59594 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754119AbeDZUgf (ORCPT ); Thu, 26 Apr 2018 16:36:35 -0400 Received: from avalon.localnet (dfj612ybrt5fhg77mgycy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:2e86:4862:ef6a:2804]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 9EE723E45; Thu, 26 Apr 2018 22:36:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1524774993; bh=uFN6GV2UTAe5iaMhVolYN+BrU1cEQzNDUjhQDn5Xquc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vjaUTXacfOWEjX3LO0wwEZutQEnWoOu9vlztiZVTIRLHcsihyJGbCEvh+5AHt41+1 9AcqZI29kXo+cZr5OffRQkCqZhnsTMGFAB1zG08dtwP0BRF2WWl2iXhwrYaaJOHzR4 U603XbmqHYQskPZm5/28f67EbgaS5kSi9N2YrHdw= From: Laurent Pinchart To: Kieran Bingham Cc: linux-renesas-soc@vger.kernel.org, David Airlie , "open list:DRM DRIVERS FOR RENESAS" , open list Subject: Re: [PATCH 06/17] drm: rcar-du: Allow DU groups to work with hardware indexing Date: Thu, 26 Apr 2018 23:36:48 +0300 Message-ID: <10312647.9oa0HbEkDa@avalon> Organization: Ideas on Board Oy In-Reply-To: <20180426165346.494-7-kieran.bingham+renesas@ideasonboard.com> References: <20180426165346.494-1-kieran.bingham+renesas@ideasonboard.com> <20180426165346.494-7-kieran.bingham+renesas@ideasonboard.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Kieran, Thank you for the patch. On Thursday, 26 April 2018 19:53:35 EEST Kieran Bingham wrote: > 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; So much cleaner with the channels mask, I like this. > 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; Depending on how you like my suggestion in patch 05/17, this might be better called channels_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 */ s/only/only./ > + rgrp->channel_mask = (rcdu->info->channel_mask >> (2 * i)) > + & GENMASK(1, 0); > + rgrp->num_crtcs = hweight8(rgrp->channel_mask); You could optimize this by computing it as rgrp->num_crtcs = (rgrp->channel_mask >> 1) | (rgrp->channel_mask & 1); as you know that only two bits at most can be set. Up to you. > /* > * If we have more than one CRTCs in this group pre-associate With those small issues fixed, Reviewed-by: Laurent Pinchart -- Regards, Laurent Pinchart