From patchwork Wed Jun 15 12:17:57 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chris Wilson X-Patchwork-Id: 9178377 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 82D686021C for ; Wed, 15 Jun 2016 12:19:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 741F427C26 for ; Wed, 15 Jun 2016 12:19:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 693B727D4A; Wed, 15 Jun 2016 12:19:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 270CC27C26 for ; Wed, 15 Jun 2016 12:19:11 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 022CC6E929; Wed, 15 Jun 2016 12:19:00 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 95A346E916; Wed, 15 Jun 2016 12:18:54 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id r5so5569111wmr.0; Wed, 15 Jun 2016 05:18:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MBrebZ3xAf5S87NojPHNUPmfM2nk42Zd1ZuGINGGXOw=; b=IEIoC6EhP/NUa8/YH8BxZv3zBorVLSa8oWemcwvgUYqVLpbmmo955VcWYVIjw/De8g k8RBRz+MjLchhVtC7J/kNSpXIghcPdXffVIyB+fnGhCQGglAlGkkTO7zHVM+Bie0Z8tr GubgUa+X5r21GFjQd73oPlHxeU/ZXfhnPoWZFGpNWD/Sz+vukRgqi/WO5HEjk6qZHuzI Wtr/WOd3+yAN2gabnhfBljdabZGZzR9y7qtdTR10lC6Rp/eGiSMQADfXxiYwVdXKdm/2 fCXLeXKsSmM3Go/RQsvZfO6r49L3NNySzB126Ilenl0HYfPobzL37srBLCVcKnGppzgH rdoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=MBrebZ3xAf5S87NojPHNUPmfM2nk42Zd1ZuGINGGXOw=; b=KpCIYr3RqdY5gliWF37pYjO3tDnBN9rpZuNwVh7+l+zO9u103yWWYFQe4NnmWt/aer CCZth8cWSQQNUWWs3jXDxvkMr4FzGddihm7x2BXHNMJiu89IY+OQd81WMOPqGm7U534S 4dSL6i9U8hC+XFi2+ZtNWxJl2UM2B1DNFLHz/ZxZTmbUNB/bqarx9UzAZy7PtfzjzweC EoA9qtH8CNSezQ/8Q4d17Hrk8kuQ1tgPmthgLUQY68MG65vVJY8G80RmtbSnrzzL91nj bdyU8UkwfWHPLsqezWNZ2UOaEqGNb6Ee9zaoIIepqm88X3gA+c5BTYQaAfoPRLCkK3wQ jkSw== X-Gm-Message-State: ALyK8tL0xBF32AtvSG6CZ6O/nvnVrYU0aaLJPlLHlqjFH0xDSbYQ5G1/rhAj0LRGIGlqFg== X-Received: by 10.194.145.244 with SMTP id sx20mr12597342wjb.169.1465993132721; Wed, 15 Jun 2016 05:18:52 -0700 (PDT) Received: from haswell.alporthouse.com ([78.156.65.138]) by smtp.gmail.com with ESMTPSA id jf3sm7450242wjb.41.2016.06.15.05.18.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 15 Jun 2016 05:18:51 -0700 (PDT) From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Wed, 15 Jun 2016 13:17:57 +0100 Message-Id: <1465993109-19523-13-git-send-email-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1465993109-19523-1-git-send-email-chris@chris-wilson.co.uk> References: <1465993109-19523-1-git-send-email-chris@chris-wilson.co.uk> MIME-Version: 1.0 Cc: Daniel Vetter , dri-devel@lists.freedesktop.org, Dave Airlie Subject: [Intel-gfx] [PATCH 12/44] drm: Pass the drm_dp_aux->hw_mutex to i2c for its locking X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP Rather than have both drm_dp_aux lock within its transfer, and i2c to lock around the transfer, use the same lock by filling in the locking callbacks that i2c wants to use. We require our own hw_mutex as we bypass i2c_transfer for drm_dp_dpcd_access(). Signed-off-by: Chris Wilson Cc: Dave Airlie Cc: Rafael Antognolli Cc: Ville Syrjälä Cc: dri-devel@lists.freedesktop.org --- drivers/gpu/drm/drm_dp_helper.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index eeaf5a7c3aa7..4b088afa21b2 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -708,8 +708,6 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, memset(&msg, 0, sizeof(msg)); - mutex_lock(&aux->hw_mutex); - for (i = 0; i < num; i++) { msg.address = msgs[i].addr; drm_dp_i2c_msg_set_request(&msg, &msgs[i]); @@ -764,8 +762,6 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, msg.size = 0; (void)drm_dp_i2c_do_msg(aux, &msg); - mutex_unlock(&aux->hw_mutex); - return err; } @@ -774,6 +770,26 @@ static const struct i2c_algorithm drm_dp_i2c_algo = { .master_xfer = drm_dp_i2c_xfer, }; +static struct drm_dp_aux *i2c_to_aux(struct i2c_adapter *i2c) +{ + return container_of(i2c, struct drm_dp_aux, ddc); +} + +static void lock_bus(struct i2c_adapter *i2c, unsigned int flags) +{ + mutex_lock(&i2c_to_aux(i2c)->hw_mutex); +} + +static int trylock_bus(struct i2c_adapter *i2c, unsigned int flags) +{ + return mutex_trylock(&i2c_to_aux(i2c)->hw_mutex); +} + +static void unlock_bus(struct i2c_adapter *i2c, unsigned int flags) +{ + mutex_unlock(&i2c_to_aux(i2c)->hw_mutex); +} + /** * drm_dp_aux_register() - initialise and register aux channel * @aux: DisplayPort AUX channel @@ -790,6 +806,10 @@ int drm_dp_aux_register(struct drm_dp_aux *aux) aux->ddc.algo_data = aux; aux->ddc.retries = 3; + aux->ddc.lock_bus = lock_bus; + aux->ddc.trylock_bus = trylock_bus; + aux->ddc.unlock_bus = unlock_bus; + aux->ddc.class = I2C_CLASS_DDC; aux->ddc.owner = THIS_MODULE; aux->ddc.dev.parent = aux->dev;