From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C9F47C433EA for ; Tue, 28 Jul 2020 11:26:53 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 95899205CB for ; Tue, 28 Jul 2020 11:26:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="gASntH1e"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=raspberrypi.com header.i=@raspberrypi.com header.b="BFhBYAbl" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 95899205CB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=raspberrypi.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=2FejZ3umXXU9fKe7/Kzatk4F4FvBazMogmqrOcOsTpk=; b=gASntH1e5vPv4YkpBq8Nf+qHX aBG0Bx12blHpEA7xuJP0yjowCQQeKs1NpU6le1aKnPi3wCLvxbzVj/lg3c0YNDNOf+t338fLxXHVv ug6sFLL3m4J+GU20swUwvda1VQILTP1Gx1t/JmPBT/1H3Ex7uuC2ybX2mwq1lRl5xNrdreNsPobPk 5s0+7lIcYT2TlqegE7L4VuMOEMpiYfYWT9HDEpyEFwUPPebohtxzSyVTVGSZxQEtT6hOr0rycADtL TYaF9mYEoS60ZQNnjgVwc3fhiQsoykw2/i4bZa1BqzLWdWvpYI+Xtjqlm/fM+OREqkpcO74fNUyaz 2i06iH2cw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k0Nja-0001ld-NI; Tue, 28 Jul 2020 11:25:26 +0000 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k0NjX-0001kG-LN for linux-arm-kernel@lists.infradead.org; Tue, 28 Jul 2020 11:25:24 +0000 Received: by mail-wr1-x444.google.com with SMTP id b6so17914985wrs.11 for ; Tue, 28 Jul 2020 04:25:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=01W6bDMMr/9SeqGNAca6mqzfZvjZHQBkuzzpt+5sERc=; b=BFhBYAblS2kS48Qsdd8d02m5F9TXV37ymz7H00YDmaAEGVoVo8qIPLYY0UjfGymCAb IGC4u6E+FaDCX2UG1DFEWdezGB4HLfkskioBHmDLE0eNEL9crb2QqmOSuOAkCnQQRqqj rJbPYAe/5RDLRTNq/EyxF8NR5rhQv3f3X1T8We2ulAi3EDXCV6DjRkwdtY/DxscKFgWh QVkAvZa76E2nMsHqw5QtylHxdrFpK8dI2qJn5KpJfiFMpPcnPsHEHPXkqmJplEPLRIGg dU2cZrm6iJW+EATyj4dd9/yfNa+j3YQvJEBtF9dpcbVvSKQiooJqMkk8brUC5PaB7iCK rx1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=01W6bDMMr/9SeqGNAca6mqzfZvjZHQBkuzzpt+5sERc=; b=ayyuBNHddr9BlTlglowjg3rHLRbUkUdbTHdIgasADBsvAL+iI59S1x+ZxEVXhOJYqS dCKTRSh3e7OgGCTmyjEt1QSEaN6a7DYm4v9i0lIE5+AQWCjKHD0xYZ7G6t3qyDI0Ofg2 Ir8shMLg5pw56ghfc/2SGyiQuy0c0pTion0Dj8BFSqveBAKa7dvv3sD9Yppparbjjwf2 Mz6iQwAIX+EwpMROxwA26bX2msVNzh5o2B13R+KqL2YNiBraDSLJ+a+e1hB7JZRHcwRL L5k5zj1uZcg8d3W9GhoMyBjGi2ScabFRsrydyx/Q7icnfrqeZWJK2DDUHJRunVq3qHBY +cOw== X-Gm-Message-State: AOAM533fOWD8fm9uD34TQGSKbrLoHRGQYQfD3TRqWT7iaaJpJuwGieVd +WWSuJ8/bJniiKjeBmqXKqUY87he8Y1Gtn0QHwYGXg== X-Google-Smtp-Source: ABdhPJyW96+nJG/qGUJ5CLd6oUoQmnituQIg/MeTxa60UlVUr5zPOJnzE9jCKFnkSxX5KeQi//ytGNtBOAOj/9zBu2U= X-Received: by 2002:a5d:5383:: with SMTP id d3mr17563956wrv.42.1595935522766; Tue, 28 Jul 2020 04:25:22 -0700 (PDT) MIME-Version: 1.0 References: <5fadf9256d130d447e3c66a0c86ceeba05c47fa4.1594230107.git-series.maxime@cerno.tech> In-Reply-To: <5fadf9256d130d447e3c66a0c86ceeba05c47fa4.1594230107.git-series.maxime@cerno.tech> From: Dave Stevenson Date: Tue, 28 Jul 2020 12:25:07 +0100 Message-ID: Subject: Re: [PATCH v4 28/78] drm/vc4: encoder: Add finer-grained encoder callbacks To: Maxime Ripard X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200728_072523_854180_FDDFD23B X-CRM114-Status: GOOD ( 21.78 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Gover , LKML , DRI Development , Eric Anholt , bcm-kernel-feedback-list@broadcom.com, Nicolas Saenz Julienne , Phil Elwell , linux-arm-kernel@lists.infradead.org, linux-rpi-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Maxime On Wed, 8 Jul 2020 at 18:43, Maxime Ripard wrote: > > In the BCM2711, the setup of the HVS, pixelvalve and HDMI controller > requires very precise ordering and timing that the regular atomic callbacks > don't provide. Let's add new callbacks on top of the regular ones to be > able to split the configuration as needed. > > Signed-off-by: Maxime Ripard Reviewed-by: Dave Stevenson > --- > drivers/gpu/drm/vc4/vc4_crtc.c | 19 +++++++++++++++++++ > drivers/gpu/drm/vc4/vc4_drv.h | 7 +++++++ > 2 files changed, 26 insertions(+) > > diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c > index b7b0e19e2fe1..d0b326e1df0a 100644 > --- a/drivers/gpu/drm/vc4/vc4_crtc.c > +++ b/drivers/gpu/drm/vc4/vc4_crtc.c > @@ -389,6 +389,8 @@ static void vc4_crtc_atomic_disable(struct drm_crtc *crtc, > { > struct drm_device *dev = crtc->dev; > struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); > + struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc); > + struct vc4_encoder *vc4_encoder = to_vc4_encoder(encoder); > int ret; > > require_hvs_enabled(dev); > @@ -401,10 +403,16 @@ static void vc4_crtc_atomic_disable(struct drm_crtc *crtc, > ret = wait_for(!(CRTC_READ(PV_V_CONTROL) & PV_VCONTROL_VIDEN), 1); > WARN_ONCE(ret, "Timeout waiting for !PV_VCONTROL_VIDEN\n"); > > + if (vc4_encoder->post_crtc_disable) > + vc4_encoder->post_crtc_disable(encoder); > + > CRTC_WRITE(PV_CONTROL, CRTC_READ(PV_CONTROL) & ~PV_CONTROL_EN); > > vc4_hvs_atomic_disable(crtc, old_state); > > + if (vc4_encoder->post_crtc_powerdown) > + vc4_encoder->post_crtc_powerdown(encoder); > + > /* > * Make sure we issue a vblank event after disabling the CRTC if > * someone was waiting it. > @@ -424,6 +432,8 @@ static void vc4_crtc_atomic_enable(struct drm_crtc *crtc, > { > struct drm_device *dev = crtc->dev; > struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); > + struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc); > + struct vc4_encoder *vc4_encoder = to_vc4_encoder(encoder); > > require_hvs_enabled(dev); > > @@ -434,15 +444,24 @@ static void vc4_crtc_atomic_enable(struct drm_crtc *crtc, > > vc4_hvs_atomic_enable(crtc, old_state); > > + if (vc4_encoder->pre_crtc_configure) > + vc4_encoder->pre_crtc_configure(encoder); > + > vc4_crtc_config_pv(crtc); > > CRTC_WRITE(PV_CONTROL, CRTC_READ(PV_CONTROL) | PV_CONTROL_EN); > > + if (vc4_encoder->pre_crtc_enable) > + vc4_encoder->pre_crtc_enable(encoder); > + > /* When feeding the transposer block the pixelvalve is unneeded and > * should not be enabled. > */ > CRTC_WRITE(PV_V_CONTROL, > CRTC_READ(PV_V_CONTROL) | PV_VCONTROL_VIDEN); > + > + if (vc4_encoder->post_crtc_enable) > + vc4_encoder->post_crtc_enable(encoder); > } > > static enum drm_mode_status vc4_crtc_mode_valid(struct drm_crtc *crtc, > diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h > index dfcc684f5d28..251fcc35530c 100644 > --- a/drivers/gpu/drm/vc4/vc4_drv.h > +++ b/drivers/gpu/drm/vc4/vc4_drv.h > @@ -439,6 +439,13 @@ struct vc4_encoder { > struct drm_encoder base; > enum vc4_encoder_type type; > u32 clock_select; > + > + void (*pre_crtc_configure)(struct drm_encoder *encoder); > + void (*pre_crtc_enable)(struct drm_encoder *encoder); > + void (*post_crtc_enable)(struct drm_encoder *encoder); > + > + void (*post_crtc_disable)(struct drm_encoder *encoder); > + void (*post_crtc_powerdown)(struct drm_encoder *encoder); > }; > > static inline struct vc4_encoder * > -- > git-series 0.9.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel