Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp2574836yba; Mon, 22 Apr 2019 09:10:14 -0700 (PDT) X-Google-Smtp-Source: APXvYqyxBqi4mZpaYXdB3Cbu5vvPNfaA4RItQc/aB+e220B0paml+1/DyBsLv/VFdKkYz4asPpAH X-Received: by 2002:a17:902:9884:: with SMTP id s4mr21664880plp.179.1555949414331; Mon, 22 Apr 2019 09:10:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555949414; cv=none; d=google.com; s=arc-20160816; b=XuBPgMzss3q+e9JxsexOMcIPFltF7MhPdc9JRom+dJMIYG/ZJEoxH80+kHhNJpCekU Pbo8+sxs3CShjmujDnm65lCF6hILjfUpKWvlP7Ez0hiLdhvW7RQC0gr8ad/EKsLA3wzB 2zdX/4FCDNf8deZZ95goolqw37eO4lR/5LAxDjwwLIuNsgPRjsi2iu6RGPbn6R47otyT kRQc059dv/WSadVFGZTXXspEcHXqDv/RhEh9tNjROX44Y8skACz+nG0YjSXJymSfa5my 0W9kJBFofgx2R3KtUG7jZuAjsaUeZqlNa3mbe67BzeFAcW3dz7ei5CDAjDQerIkqs57S eQdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :organization:references:in-reply-to:message-id:subject:cc:to:from :date; bh=3bMXZtMqsT0VqX1iUP+O9ehpAFFfAka180RmK2F+ie8=; b=nwAXirB07ehY/CK9j8+38IEJBnkH7YRHwWs+Shl8UAlB964EmSwwOdgNI5kEPt/9cD W0ue8zgbbbu0QdCbc3sAMx3nNIYJSpw4od8DeKANnqYoTeWyy9SSi/t1bPAQ6cakX+ox lV/Fr35HdBeAir72GRnJzwBqFEU1lfyqtijGa04ZK5w1h1jQjnNVGxtHcKAmTHO3dc7n xjYfm3OXoK8xE/kpSyby+Li9hBVaGcaUzL6pKXy4V9+SY5kmDn037e8XtXxeQd3r2xEb HI2e50k8Qe248a/Gf6mnqeMPFSOdlmIQnCfgLt82N18vHWiUjJumjCpNeujdnkXb2Ppb agVw== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h13si12668850pgh.57.2019.04.22.09.09.58; Mon, 22 Apr 2019 09:10:14 -0700 (PDT) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727670AbfDVQHU (ORCPT + 99 others); Mon, 22 Apr 2019 12:07:20 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:47944 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726098AbfDVQHU (ORCPT ); Mon, 22 Apr 2019 12:07:20 -0400 Received: from localhost (unknown [IPv6:2a01:e0a:2c:6930:5cf4:84a1:2763:fe0d]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 6F132280AE6; Mon, 22 Apr 2019 17:07:18 +0100 (BST) Date: Mon, 22 Apr 2019 18:07:15 +0200 From: Boris Brezillon To: Vitor Soares Cc: "linux-i3c@lists.infradead.org" , "joao.pinto@synopsys.com" , Boris Brezillon , "stable@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH 1/3] i3c: fix i2c and i3c scl rate by bus mode Message-ID: <20190422180715.40abe1b9@collabora.com> In-Reply-To: <13D59CF9CEBAF94592A12E8AE55501350A61B3B4@DE02WEMBXB.internal.synopsys.com> References: <05fdeea79db83970e9ecb0d7045b4dd98f206f06.1555350118.git.vitor.soares@synopsys.com> <20190416075041.22f8e849@collabora.com> <13D59CF9CEBAF94592A12E8AE55501350A61596D@DE02WEMBXB.internal.synopsys.com> <20190416165250.0606e5a2@collabora.com> <13D59CF9CEBAF94592A12E8AE55501350A61B3B4@DE02WEMBXB.internal.synopsys.com> Organization: Collabora X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 22 Apr 2019 15:54:33 +0000 Vitor Soares wrote: > > > > > > > > > { > > > > > i3cbus->mode = mode; > > > > > > > > > > - if (!i3cbus->scl_rate.i3c) > > > > > - i3cbus->scl_rate.i3c = I3C_BUS_TYP_I3C_SCL_RATE; > > > > > - > > > > > - if (!i3cbus->scl_rate.i2c) { > > > > > - if (i3cbus->mode == I3C_BUS_MODE_MIXED_SLOW) > > > > > - i3cbus->scl_rate.i2c = I3C_BUS_I2C_FM_SCL_RATE; > > > > > - else > > > > > - i3cbus->scl_rate.i2c = I3C_BUS_I2C_FM_PLUS_SCL_RATE; > > > > > + switch (i3cbus->mode) { > > > > > + case I3C_BUS_MODE_PURE: > > > > > + if (!i3cbus->scl_rate.i3c) > > > > > + i3cbus->scl_rate.i3c = I3C_BUS_TYP_I3C_SCL_RATE; > > > > > + break; > > > > > + case I3C_BUS_MODE_MIXED_FAST: > > > > > + if (!i3cbus->scl_rate.i3c) > > > > > + i3cbus->scl_rate.i3c = I3C_BUS_TYP_I3C_SCL_RATE; > > > > > + if (!i3cbus->scl_rate.i2c) > > > > > + i3cbus->scl_rate.i2c = i2c_scl_rate; > > > > > + break; > > > > > + case I3C_BUS_MODE_MIXED_SLOW: > > > > > + if (!i3cbus->scl_rate.i2c) > > > > > + i3cbus->scl_rate.i2c = i2c_scl_rate; > > > > > + i3cbus->scl_rate.i3c = i3cbus->scl_rate.i2c; > > > > > > > > Maybe we should do > > > > > > > > if (!i3cbus->scl_rate.i3c || > > > > i3cbus->scl_rate.i3c > i3cbus->scl_rate.i2c) > > > > i3cbus->scl_rate.i3c = i3cbus->scl_rate.i2c; > > > > > > > > Just in case the I3C rate forced by the user is lower than the max I2C > > > > rate. > > > > > > That was something that I considered but TBH it isn't a real use case. > > > > Add a WARN_ON() to at least catch such inconsistencies. And maybe we > > should add a dev_warn() when the user-defined rates do not match > > the mode/LVR constraints. It's easy to do a mistake when writing a dts. > > I think the WARN_ON() is too evasive on the screen and won't provide the > information we want. > The dev_warn() should work perfectly here. > > if (i3cbus->scl_rate.i3c < i3cbus->scl_rate.i2c) > dev_warn(&i3cbus->cur_master->dev->dev, > "%s: i3c-scl-hz lower then i2c-scl-hz\n", __func__); Using dev_warn() sounds good, though I don't think you need the __func__ here. Also, please print the i2c/i3c rates in the message, and align the second line on the open parens. > if (i3cbus->scl_rate.i2c != I3C_BUS_I2C_FM_SCL_RATE || > i3cbus->scl_rate.i2c != I3C_BUS_I2C_FM_PLUS_SCL_RATE) > dev_warn(&i3cbus->cur_master->dev->dev, > "%s: i2c-scl-hz not defined according MIPI I3C spec\n", > __func__); Is that really a problem? Having an i2c rate that is less than FM speed sounds like a valid case to me. > > Maybe it make more sense to do this check on of_populate_i3c_bus(), what > do you think? > No, we really want to have this check here, because we might support other HW description formats at some point (board-files, ACPI, ...).