Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp1010623ybf; Thu, 27 Feb 2020 03:32:53 -0800 (PST) X-Google-Smtp-Source: APXvYqxQ9IDFq8REQtOOPSpoWtRttK9IgmfcjcC3VlVla1qROi10en/bbbgCpmijpTacQsJCJO9s X-Received: by 2002:a9d:4541:: with SMTP id p1mr2916517oti.199.1582803173185; Thu, 27 Feb 2020 03:32:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582803173; cv=none; d=google.com; s=arc-20160816; b=0U7ryioasWr6EnYXj8yrc+46BfF+2Zwc3SwJTz4uVcTIvS6Kwa2gXeGMlx74ujacom Emi4n3nc1OfDK9rNsPlsADC7g3mWGWsPwdZr48Tqg85MFlgxMjoh5ZjoOYBop9lhJogG NyAd5Bw8pRNuP/VZQx4CYXRxlSdQwEaVoa+TWoqgfPaxj4w+JpSOa86syFzcndEiPVJD 7mm0SlAUgCrNAxzlCvkPYf9W3f4q2Sst4JsW9OsdJfFMHz8/mLG31Z8ytTnZBm15bAHO C5uFsnv83+fglBDDe35+nWkalXSmYp2OdSq3KniHJLS/fZjEIOke8PCQDVbA+1UI/oMY KcdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=F7HtuU8ekS6aFFOfKnc/aRkzKNqNvsvuUTeOdukUnPw=; b=Sj/F9I3H0ews/kY7U5Pmy0Z10z0honZDGV+02sIQx/77nZ8IrwiYzGfhZfhmBH+LeN NxYMtjx8xd/hiG/7XSf0bnrDVa1RGWICpemdTdotxn5ouacbPq6lmthqgIC6rV85HSBq AmH3eSaW65IiNCRxU7kxIPjGSsdvU5ecQV1HMXzBkJ//blcqzq3E0ABNIwMzpm+E02xK Pv6N1+rCX0Ym5BI2F5WnlzOzBAyFYo4VEp6APheLtFuZFGMw9JyitXWXA0bAIZOJXmz4 q+VmZ5QQpE7pd50DSQ09N1QrVdx9TEDb70uu18ruspXaSp6z466cnJKy2CaBpv94rM8m Qv7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@synopsys.com header.s=mail header.b=lAnsoNzv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=synopsys.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 4si582052oiy.72.2020.02.27.03.32.41; Thu, 27 Feb 2020 03:32:53 -0800 (PST) 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 header.i=@synopsys.com header.s=mail header.b=lAnsoNzv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=synopsys.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728878AbgB0Lb3 (ORCPT + 99 others); Thu, 27 Feb 2020 06:31:29 -0500 Received: from smtprelay-out1.synopsys.com ([149.117.73.133]:55890 "EHLO smtprelay-out1.synopsys.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728850AbgB0Lb3 (ORCPT ); Thu, 27 Feb 2020 06:31:29 -0500 Received: from mailhost.synopsys.com (mdc-mailhost2.synopsys.com [10.225.0.210]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by smtprelay-out1.synopsys.com (Postfix) with ESMTPS id 58A8C43B5E; Thu, 27 Feb 2020 11:31:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=synopsys.com; s=mail; t=1582803088; bh=0syuIutiUjjVU8By23MObQ0rqTkTVnHNZjjdVWTlCqQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:In-Reply-To: References:From; b=lAnsoNzvlDmMDq0uoorCMIboX8tc9QBfiOgezLXHISO68H7eBIyVjG9X7p58hnkHp A8wz6YpeeGHrKO2Z2KlDK1dHG07dlWBcMtWfQihxne9AmTcVc/SYVPQ0WFAULDjiCB PtZQVoHyc0GUxso8Q2Xh7WJ7QcHcAPmugXRC6EsbhpLgLnAIFEZcXkRWi/ImLBkc0s VeUj6mjHqz9Gy8p8KFJW7fRuz78AsLYRduTR74sR7Wmf7u1xumv8Ni4GNun1i2tPDf cdz2oEoKFmj9Z18y2xZZV1OzPQlaOKqiZQzE1czLOh/nrL7plvmEoNvRqPyIGE8d3N EoJPEglN+nIGQ== Received: from de02.synopsys.com (germany.internal.synopsys.com [10.225.17.21]) by mailhost.synopsys.com (Postfix) with ESMTP id 94C1BA005F; Thu, 27 Feb 2020 11:31:26 +0000 (UTC) Received: from de02dwia024.internal.synopsys.com (de02dwia024.internal.synopsys.com [10.225.19.81]) by de02.synopsys.com (Postfix) with ESMTP id 7EF5D3E9EB; Thu, 27 Feb 2020 12:31:26 +0100 (CET) From: Vitor Soares To: pgaj@cadence.com, bbrezillon@kernel.org, linux-i3c@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Boris Brezillon , Vitor Soares Subject: [PATCH v2 4/4] i3c: Simplify i3c_device_match_id() Date: Thu, 27 Feb 2020 12:31:09 +0100 Message-Id: <8c5d6523e1c161783db834a3447954f7fd6267e6.1582796652.git.vitor.soares@synopsys.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Boris Brezillon Simply match against ->match_flags instead of trying to be smart and fix drivers inconsistent ID tables. Signed-off-by: Boris Brezillon Signed-off-by: Vitor Soares --- drivers/i3c/device.c | 50 ++++++++++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/drivers/i3c/device.c b/drivers/i3c/device.c index 9e2e140..bb8e60d 100644 --- a/drivers/i3c/device.c +++ b/drivers/i3c/device.c @@ -213,40 +213,34 @@ i3c_device_match_id(struct i3c_device *i3cdev, { struct i3c_device_info devinfo; const struct i3c_device_id *id; + u16 manuf, part, ext_info; + bool rndpid; i3c_device_get_info(i3cdev, &devinfo); - /* - * The lower 32bits of the provisional ID is just filled with a random - * value, try to match using DCR info. - */ - if (!I3C_PID_RND_LOWER_32BITS(devinfo.pid)) { - u16 manuf = I3C_PID_MANUF_ID(devinfo.pid); - u16 part = I3C_PID_PART_ID(devinfo.pid); - u16 ext_info = I3C_PID_EXTRA_INFO(devinfo.pid); - - /* First try to match by manufacturer/part ID. */ - for (id = id_table; id->match_flags != 0; id++) { - if ((id->match_flags & I3C_MATCH_MANUF_AND_PART) != - I3C_MATCH_MANUF_AND_PART) - continue; - - if (manuf != id->manuf_id || part != id->part_id) - continue; - - if ((id->match_flags & I3C_MATCH_EXTRA_INFO) && - ext_info != id->extra_info) - continue; - - return id; - } - } + manuf = I3C_PID_MANUF_ID(devinfo.pid); + part = I3C_PID_PART_ID(devinfo.pid); + ext_info = I3C_PID_EXTRA_INFO(devinfo.pid); + rndpid = I3C_PID_RND_LOWER_32BITS(devinfo.pid); - /* Fallback to DCR match. */ for (id = id_table; id->match_flags != 0; id++) { if ((id->match_flags & I3C_MATCH_DCR) && - id->dcr == devinfo.dcr) - return id; + id->dcr != devinfo.dcr) + continue; + + if ((id->match_flags & I3C_MATCH_MANUF) && + id->manuf_id != manuf) + continue; + + if ((id->match_flags & I3C_MATCH_PART) && + (rndpid || id->part_id != part)) + continue; + + if ((id->match_flags & I3C_MATCH_EXTRA_INFO) && + (rndpid || id->extra_info != ext_info)) + continue; + + return id; } return NULL; -- 2.7.4