From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [RFC v2 3/5] drm/dsi: Check for used channels Date: Tue, 6 Oct 2015 14:54:40 +0530 Message-ID: <1444123482-25579-4-git-send-email-architt@codeaurora.org> References: <1435641851-27295-1-git-send-email-architt@codeaurora.org> <1444123482-25579-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: <1444123482-25579-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 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 YWtlbiBieSBhIGRldmljZSBwb3B1bGF0ZWQgaW4gRFQuCgpTaWduZWQtb2ZmLWJ5OiBBcmNoaXQg VGFuZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1f bWlwaV9kc2kuYyB8IDI2ICsrKysrKysrKysrKysrKysrKysrKysrKy0tCiAxIGZpbGUgY2hhbmdl ZCwgMjQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZHJtX21pcGlfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMK aW5kZXggNDZlZTUxNS4uZGI2MTMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9t aXBpX2RzaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWlwaV9kc2kuYwpAQCAtMTIzLDYg KzEyMywyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIG1pcGlfZHNpX2Rldmlj ZV90eXBlID0gewogCS5yZWxlYXNlID0gbWlwaV9kc2lfZGV2X3JlbGVhc2UsCiB9OwogCitzdGF0 aWMgaW50IF9fZHNpX2NoZWNrX2NoYW5fYnVzeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEpCit7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gdG9fbWlwaV9kc2lfZGV2aWNl KGRldik7CisJdTMyIHJlZyA9ICoodTMyICopIGRhdGE7CisKKwlpZiAoZHNpICYmIGRzaS0+Y2hh bm5lbCA9PSByZWcpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBtaXBpX2RzaV9jaGVja19jaGFuX2J1c3koc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Qs IHUzMiByZWcpCit7CisJcmV0dXJuIGRldmljZV9mb3JfZWFjaF9jaGlsZChob3N0LT5kZXYsICZy ZWcsIF9fZHNpX2NoZWNrX2NoYW5fYnVzeSk7Cit9CisKIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug Km1pcGlfZHNpX2RldmljZV9uZXcoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCiAJCQkJCSAg ICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8gKmluZm8pCiB7CkBAIC0xNTAsMTQgKzE2Niwy MCBAQCBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICptaXBpX2RzaV9kZXZpY2VfbmV3KHN0cnVjdCBt aXBpX2RzaV9ob3N0ICpob3N0LAogCiAJZGV2X3NldF9uYW1lKCZkc2ktPmRldiwgIiVzLiVkIiwg ZGV2X25hbWUoaG9zdC0+ZGV2KSwgaW5mby0+cmVnKTsKIAorCXIgPSBtaXBpX2RzaV9jaGVja19j aGFuX2J1c3koaG9zdCwgaW5mby0+cmVnKTsKKwlpZiAocikKKwkJZ290byBlcnI7CisKIAlyID0g ZGV2aWNlX3JlZ2lzdGVyKCZkc2ktPmRldik7CiAJaWYgKHIpIHsKIAkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlOiAlZFxuIiwgcik7Ci0JCWtmcmVlKGRzaSk7Ci0JCXJl dHVybiBFUlJfUFRSKHIpOworCQlnb3RvIGVycjsKIAl9CiAKIAlyZXR1cm4gZHNpOworZXJyOgor CWtmcmVlKGRzaSk7CisJcmV0dXJuIEVSUl9QVFIocik7CiB9CiBFWFBPUlRfU1lNQk9MKG1pcGlf ZHNpX2RldmljZV9uZXcpOwogCi0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIElu Yy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLApob3N0ZWQgYnkgVGhlIExp bnV4IEZvdW5kYXRpb24KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752934AbbJFJ0A (ORCPT ); Tue, 6 Oct 2015 05:26:00 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:49438 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752736AbbJFJZC (ORCPT ); Tue, 6 Oct 2015 05:25:02 -0400 From: Archit Taneja To: dri-devel@lists.freedesktop.org, a.hajda@samsung.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, jani.nikula@linux.intel.com, Archit Taneja Subject: [RFC v2 3/5] drm/dsi: Check for used channels Date: Tue, 6 Oct 2015 14:54:40 +0530 Message-Id: <1444123482-25579-4-git-send-email-architt@codeaurora.org> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1444123482-25579-1-git-send-email-architt@codeaurora.org> References: <1435641851-27295-1-git-send-email-architt@codeaurora.org> <1444123482-25579-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. 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 46ee515..db6130a 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -123,6 +123,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 = *(u32 *) 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) { @@ -150,14 +166,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); + r = mipi_dsi_check_chan_busy(host, info->reg); + if (r) + goto err; + r = device_register(&dsi->dev); if (r) { dev_err(dev, "failed to register device: %d\n", r); - kfree(dsi); - return ERR_PTR(r); + goto err; } return dsi; +err: + kfree(dsi); + return ERR_PTR(r); } EXPORT_SYMBOL(mipi_dsi_device_new); -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation