From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [PATCH v4 4/6] drm/dsi: Check for used channels Date: Thu, 10 Dec 2015 18:11:38 +0530 Message-ID: <1449751300-2841-5-git-send-email-architt@codeaurora.org> References: <1448884892-7731-1-git-send-email-architt@codeaurora.org> <1449751300-2841-1-git-send-email-architt@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1449751300-2841-1-git-send-email-architt@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, a.hajda@samsung.com, jani.nikula@linux.intel.com Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, treding@nvidia.com List-Id: linux-arm-msm@vger.kernel.org V2UgZG9uJ3QgY2hlY2sgd2hldGhlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBtaXBpX2RzaV9k ZXZpY2UgdW5kZXIgdGhlCnNhbWUgaG9zdCBzaGFyZXMgdGhlIHNhbWUgdmlydHVhbCBjaGFubmVs LgoKQmVmb3JlIHJlZ2lzdGVyaW5nLCBjaGVjayBpZiBhbnkgb2YgdGhlIHJlZ2lzdGVyZWQgZGV2 aWNlcyBkb2Vzbid0CmFscmVhZHkgaGF2ZSB0aGUgc2FtZSB2aXJ0dWFsIGNoYW5uZWwuCgpUaGlz IHdhc24ndCBjcnVjaWFsIHdoZW4gYWxsIHRoZSBkZXZpY2VzIHVuZGVyIGEgaG9zdCB3ZXJlIHBv cHVsYXRlZCB2aWEKRFQuIE5vdyB0aGF0IHdlIGFsc28gc3VwcG9ydCBjcmVhdGluZyBkZXZpY2Vz IG1hbnVhbGx5LCB3ZSBjb3VsZCBlbmQgdXAKaW4gYSBzaXR1YXRpb24gd2hlcmUgYSBkcml2ZXIg dHJpZXMgdG8gY3JlYXRlIGEgZGV2aWNlIHdpdGggYSB2aXJ0dWFsCmNoYW5uZWwgYWxyZWFkeSB0 YWtlbiBieSBhIGRldmljZSBwb3B1bGF0ZWQgaW4gRFQuCgpSZXZpZXdlZC1ieTogQW5kcnplaiBI YWpkYSA8YS5oYWpkYUBzYW1zdW5nLmNvbT4KU2lnbmVkLW9mZi1ieTogQXJjaGl0IFRhbmVqYSA8 YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNp LmMgfCAyNiArKysrKysrKysrKysrKysrKysrKysrKystLQogMSBmaWxlIGNoYW5nZWQsIDI0IGlu c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2RybV9taXBpX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9taXBpX2RzaS5jCmluZGV4IDVh NDY4MDIuLjdhODExNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWlwaV9kc2ku YworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMKQEAgLTExOSw2ICsxMTksMjIg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBtaXBpX2RzaV9kZXZpY2VfdHlwZSA9 IHsKIAkucmVsZWFzZSA9IG1pcGlfZHNpX2Rldl9yZWxlYXNlLAogfTsKIAorc3RhdGljIGludCBf X2RzaV9jaGVja19jaGFuX2J1c3koc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQorewor CXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShkZXYpOwor CXUzMiAqcmVnID0gZGF0YTsKKworCWlmIChkc2kgJiYgZHNpLT5jaGFubmVsID09ICpyZWcpCisJ CXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtaXBpX2RzaV9j aGVja19jaGFuX2J1c3koc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsIHUzMiByZWcpCit7CisJ cmV0dXJuIGRldmljZV9mb3JfZWFjaF9jaGlsZChob3N0LT5kZXYsICZyZWcsIF9fZHNpX2NoZWNr X2NoYW5fYnVzeSk7Cit9CisKIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKm1pcGlfZHNpX2Rldmlj ZV9uZXcoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCiAJCQkJCSAgICBzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlX2luZm8gKmluZm8pCiB7CkBAIC0xNDYsMTQgKzE2MiwyMCBAQCBzdHJ1Y3QgbWlw aV9kc2lfZGV2aWNlICptaXBpX2RzaV9kZXZpY2VfbmV3KHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpo b3N0LAogCiAJZGV2X3NldF9uYW1lKCZkc2ktPmRldiwgIiVzLiVkIiwgZGV2X25hbWUoaG9zdC0+ ZGV2KSwgaW5mby0+cmVnKTsKIAorCXJldCA9IG1pcGlfZHNpX2NoZWNrX2NoYW5fYnVzeShob3N0 LCBpbmZvLT5yZWcpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCiAJcmV0ID0gZGV2aWNlX3Jl Z2lzdGVyKCZkc2ktPmRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byByZWdpc3RlciBkZXZpY2U6ICVkXG4iLCByZXQpOwotCQlrZnJlZShkc2kpOwotCQlyZXR1cm4g RVJSX1BUUihyZXQpOworCQlnb3RvIGVycjsKIAl9CiAKIAlyZXR1cm4gZHNpOworZXJyOgorCWtm cmVlKGRzaSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIEVYUE9SVF9TWU1CT0wobWlwaV9k c2lfZGV2aWNlX25ldyk7CiAKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5j LiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmhvc3RlZCBieSBUaGUgTGlu dXggRm91bmRhdGlvbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754256AbbLJMmP (ORCPT ); Thu, 10 Dec 2015 07:42:15 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:36543 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754029AbbLJMmF (ORCPT ); Thu, 10 Dec 2015 07:42:05 -0500 From: Archit Taneja To: dri-devel@lists.freedesktop.org, a.hajda@samsung.com, jani.nikula@linux.intel.com Cc: linux-kernel@vger.kernel.org, airlied@linux.ie, daniel@ffwll.ch, treding@nvidia.com, l.stach@pengutronix.de, robh@kernel.org, linux-arm-msm@vger.kernel.org, Archit Taneja Subject: [PATCH v4 4/6] drm/dsi: Check for used channels Date: Thu, 10 Dec 2015 18:11:38 +0530 Message-Id: <1449751300-2841-5-git-send-email-architt@codeaurora.org> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1449751300-2841-1-git-send-email-architt@codeaurora.org> References: <1448884892-7731-1-git-send-email-architt@codeaurora.org> <1449751300-2841-1-git-send-email-architt@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We don't check whether a previously registered mipi_dsi_device under the same host shares the same virtual channel. Before registering, check if any of the registered devices doesn't already have the same virtual channel. This wasn't crucial when all the devices under a host were populated via DT. Now that we also support creating devices manually, we could end up in a situation where a driver tries to create a device with a virtual channel already taken by a device populated in DT. Reviewed-by: Andrzej Hajda Signed-off-by: Archit Taneja --- drivers/gpu/drm/drm_mipi_dsi.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index 5a46802..7a81171 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -119,6 +119,22 @@ static const struct device_type mipi_dsi_device_type = { .release = mipi_dsi_dev_release, }; +static int __dsi_check_chan_busy(struct device *dev, void *data) +{ + struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev); + u32 *reg = data; + + if (dsi && dsi->channel == *reg) + return -EBUSY; + + return 0; +} + +static int mipi_dsi_check_chan_busy(struct mipi_dsi_host *host, u32 reg) +{ + return device_for_each_child(host->dev, ®, __dsi_check_chan_busy); +} + struct mipi_dsi_device *mipi_dsi_device_new(struct mipi_dsi_host *host, struct mipi_dsi_device_info *info) { @@ -146,14 +162,20 @@ struct mipi_dsi_device *mipi_dsi_device_new(struct mipi_dsi_host *host, dev_set_name(&dsi->dev, "%s.%d", dev_name(host->dev), info->reg); + ret = mipi_dsi_check_chan_busy(host, info->reg); + if (ret) + goto err; + ret = device_register(&dsi->dev); if (ret) { dev_err(dev, "failed to register device: %d\n", ret); - kfree(dsi); - return ERR_PTR(ret); + goto err; } return dsi; +err: + kfree(dsi); + return ERR_PTR(ret); } EXPORT_SYMBOL(mipi_dsi_device_new); -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation