From: Sakari Ailus <sakari.ailus@iki.fi> To: Nicolas Pitre <nico@fluxnic.net> Cc: Laura Nixon <laura.nixon@team.mipi.org>, linux-i3c@lists.infradead.org, Boris Brezillon <boris.brezillon@collabora.com>, Matthew Schnoor <matthew.schnoor@intel.com>, Robert Gough <robert.gough@intel.com> Subject: Re: [PATCH v2 2/2] i3c/master: add the mipi-i3c-hci driver Date: Wed, 7 Oct 2020 13:17:18 +0300 [thread overview] Message-ID: <20201007101718.GA6413@valkosipuli.retiisi.org.uk> (raw) In-Reply-To: <nycvar.YSQ.7.78.906.2010051528570.2184@knanqh.ubzr> Hi Nicolas, On Mon, Oct 05, 2020 at 06:15:59PM -0400, Nicolas Pitre wrote: > On Thu, 1 Oct 2020, Sakari Ailus wrote: > > > Hi Nicolas, > > Hello Sakari, > > Thanks for your review. > > > Thanks for the patchset. It's a big patch... it might be easier to get > > reviews by splitting it. Feel free to do that if it's not too hard. > > This is hard. The only thing that I could split out without too much > pain that still can be tested is the DMA support. And there is no > bisectability advantage in doing so either. Note that it does not need to be functional nor even compiled. Up to you entirely. > > > Please see my comments below. > > > > On Tue, Aug 18, 2020 at 11:17:23PM -0400, Nicolas Pitre wrote: > > > From: Nicolas Pitre <npitre@baylibre.com> > > > +/* Data Transfer Speed and Mode */ > > > +enum hci_cmd_mode { > > > + MODE_I3C_SDR0 = 0x0, > > > + MODE_I3C_SDR1 = 0x1, > > > + MODE_I3C_SDR2 = 0x2, > > > + MODE_I3C_SDR3 = 0x3, > > > + MODE_I3C_SDR4 = 0x4, > > > + MODE_I3C_HDR_TSx = 0x5, > > > + MODE_I3C_HDR_DDR = 0x6, > > > + MODE_I3C_HDR_BT = 0x7, > > > + MODE_I3C_Fm_FmP = 0x8, > > > + MODE_I2C_Fm = 0x0, > > > + MODE_I2C_FmP = 0x1, > > > + MODE_I2C_UD1 = 0x2, > > > + MODE_I2C_UD2 = 0x3, > > > + MODE_I2C_UD3 = 0x4, > > > > I wonder if there's something else that separates I3C and I²C modes. Should > > the two be in a different enum? > > There is only that I2C bit in the Device Address Table. Still, those > mode values are stored in the same register field so there is no real > advantage from splitting them. Ok, fair enough. > > > > +/* TID generation */ > > > +#define hci_get_tid(bits) \ > > > + (atomic_inc_return_relaxed(&hci->next_cmd_tid) % (1 << (bits))) > > > > 1U. And you don't need a modulo here, simple bitwise and is more efficient. > > Good point about 1U. However the compiler is smart enough to convert the > modulus into a bitwise "and" in the generated assembly. I guess it depends on the compiler. Still the result of shifting 1 to the signed bit is not defined. It might not happen in this driver but using unsigned value there is a good practice. > > > > +/* Our various instances */ > > > +extern const struct hci_cmd_ops i3c_hci_cmd_v1; > > > +extern const struct hci_cmd_ops i3c_hci_cmd_v2; > > > > As these are global symbols, I'd add a prefix such as "mipi_" to these. > > Won't make a difference in the modular case... but fair enough. The driver may be linked directly to the kernel, too. > > > > +// SPDX-License-Identifier: BSD-3-Clause > > > > Please read Documentation/process/license-rules.rst . IOW, BSD 3-clause > > license alone is not one of the acceptable licenses. I also don't see a > > need for dual licensing. > > Really? > > I did read Documentation/process/license-rules.rst obviously. > > Let's have a look again. From that document: > > |The licenses currently used, as well as the licenses for code added to the > |kernel, can be broken down into: > | > |1. _`Preferred licenses`: > | > | Whenever possible these licenses should be used as they are known to be > | fully compatible and widely used. These licenses are available from the > | directory:: > | > | LICENSES/preferred/ > | > | in the kernel source tree. > > Incidentally, the file LICENSES/preferred/BSD-3-Clause can be found > there. And it contains: > > | To use the BSD 3-clause "New" or "Revised" License put the following SPDX > | tag/value pair into a comment according to the placement guidelines in > | the licensing rules documentation: > | SPDX-License-Identifier: BSD-3-Clause > > There is indeed a mention in license-rules.rst that suggests: > "individual files can be provided under a dual license, e.g. one of the > compatible GPL variants and alternatively under a permissive license > like BSD, MIT etc." It says *can* not *must*. In fact, there is a > section explicitly for licenses that may only be used in a dual-license > setup: > > |3. Dual Licensing Only > | > | These licenses should only be used to dual license code with another > | license in addition to a preferred license. These licenses are available > | from the directory:: > | > | LICENSES/dual/ > | > | in the kernel source tree. > > And no BSD license is to be found there. > > If still in doubt, let's see what exists in practice: > > $ git grep "SPDX-License-Identifier: BSD-3-Clause\($\| \*/\)" drivers/ > drivers/crypto/talitos.h:/* SPDX-License-Identifier: BSD-3-Clause */ > drivers/firmware/ti_sci.h:/* SPDX-License-Identifier: BSD-3-Clause */ > drivers/net/dsa/sja1105/sja1105_clocking.c:// SPDX-License-Identifier: BSD-3-Clause > drivers/net/dsa/sja1105/sja1105_sgmii.h:/* SPDX-License-Identifier: BSD-3-Clause */ > drivers/net/dsa/sja1105/sja1105_spi.c:// SPDX-License-Identifier: BSD-3-Clause > drivers/net/dsa/sja1105/sja1105_static_config.c:// SPDX-License-Identifier: BSD-3-Clause > drivers/net/dsa/sja1105/sja1105_static_config.h:/* SPDX-License-Identifier: BSD-3-Clause */ > drivers/remoteproc/omap_remoteproc.h:/* SPDX-License-Identifier: BSD-3-Clause */ > drivers/staging/greybus/audio_apbridgea.h:/* SPDX-License-Identifier: BSD-3-Clause */ > drivers/staging/greybus/tools/lbtest:# SPDX-License-Identifier: BSD-3-Clause > drivers/staging/greybus/tools/loopback_test.c:// SPDX-License-Identifier: BSD-3-Clause > drivers/usb/serial/keyspan_usa26msg.h:/* SPDX-License-Identifier: BSD-3-Clause */ > drivers/usb/serial/keyspan_usa28msg.h:/* SPDX-License-Identifier: BSD-3-Clause */ > drivers/usb/serial/keyspan_usa49msg.h:/* SPDX-License-Identifier: BSD-3-Clause */ > drivers/usb/serial/keyspan_usa67msg.h:/* SPDX-License-Identifier: BSD-3-Clause */ > drivers/usb/serial/keyspan_usa90msg.h:/* SPDX-License-Identifier: BSD-3-Clause */ > > So there are couple precedents already. These look more like accidents rather than informed decisions to merge BSD-only licensed code. I'd still say no. > > > +#define CMD_I1_DATA_BYTE_4(v) FIELD_PREP(W1_MASK(63, 56), v) > > > > I'm not sure W*_MASK() macros are helpful here. I'd just use plain > > FIELD_PREP() and BIT(). The digit after I in the macro name already signals > > the position. > > Those macros are very helpful. The spec is written in terms of bit > numbers from 0 through 127. Manually converting those into the 32-bit > word that the hardware interface uses is error prone. Ah, if it's in the spec, then it indeed helps to keep them the same. Feel free to keep as-is. > > > +static int hci_cmd_v1_prep_ccc(struct i3c_hci *hci, > > > + struct hci_xfer *xfer, > > > + u8 ccc_addr, u8 ccc_cmd, bool raw) > > > +{ > > > + u_int dat_idx = 0; > > > > Please use unsigned int instead. Same elsewhere. > > Why? Because nobody else uses it and it expands to a standard type anyway. The comment in types.h suggests it comes from BSDs. So there's no reason to use it in new kernel code. > > > + xfer->cmd_tid = hci_get_tid(4); > > > > Why 4 and e.g. not 7? A macro with a descriptive name would be nice. > > The macro is: > > #define hci_get_tid(bits) > > but yeah... it could be in the macro name as well. > > In fact, there is no longer 3-bits TID fields. They're all 4-bits wide > now. So I simply removed the macro argument instead. Ok. > > > + DBG("next_addr = 0x%02x, DAA using DAT %d", next_addr, dat_idx); > > > > dev_dbg() perhaps? Same elsewhere. > > Nah... Given all the needed arguments and the function name prefix I > want, the dev_dbg() ended up spanning 3 lines whereas the DBG() wrapper > takes only one in most cases. Possibly so, but creating your own debug infrastructure where it already exists does not look like a great idea. For instance, the DBG macro does not use the device whereas the rest assume that hci is your host controller struct pointer. If nothing else, it's simply ugly. > > > > + } > > > + > > > + if (dat_idx >= 0) > > > + i3c_hci_dat_free_entry(hci, dat_idx); > > > + hci_free_xfer(xfer, 1); > > > > A newline before a lone return would be nice. > > > > > + return ret; > > What do you mean? It is part of the cleanup and exit block which doesn't > make it lone anyway. It just looks better that way. But feel free to keep it as-is. > > > +#if 0 > > > + if (ccc->rnw) { > > > + HEXDUMP("got: ", ccc->dests[0].payload.data, > > > + ccc->dests[0].payload.len); > > > + } > > > > This should probably be removed. > > Well, after Boris's suggestion, I turned it into this: > > if (ccc->rnw) > DBG("got: %*ph", > ccc->dests[0].payload.len, ccc->dests[0].payload.data); > > But yes, this should go eventually. Not yet though. That looks better. > > > + return -EPROTONOSUPPORT; > > > > I'd just use -EINVAL. > > -EINVAL is widely used already. Let's try to report more precise errors > when we can. Ok. -- Kind regards, Sakari Ailus -- linux-i3c mailing list linux-i3c@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-i3c
next prev parent reply other threads:[~2020-10-07 10:18 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-08-19 3:17 [PATCH v2 1/2] MIPI I3c HCI (Host Controller Interface) driver Nicolas Pitre 2020-08-19 3:17 ` [PATCH v2 1/2] dt-bindings: i3c: MIPI I3C Host Controller Interface Nicolas Pitre 2020-08-25 21:29 ` Rob Herring 2020-08-25 22:02 ` Nicolas Pitre 2020-08-25 23:06 ` Rob Herring 2020-08-26 0:40 ` Nicolas Pitre 2020-08-19 3:17 ` [PATCH v2 2/2] i3c/master: add the mipi-i3c-hci driver Nicolas Pitre 2020-10-01 12:31 ` Sakari Ailus 2020-10-05 22:15 ` Nicolas Pitre 2020-10-07 10:17 ` Sakari Ailus [this message] 2020-10-07 16:30 ` Nicolas Pitre 2020-10-09 12:01 ` Sakari Ailus 2020-08-19 3:21 ` [PATCH v2 1/2] MIPI I3c HCI (Host Controller Interface) driver Nicolas Pitre
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20201007101718.GA6413@valkosipuli.retiisi.org.uk \ --to=sakari.ailus@iki.fi \ --cc=boris.brezillon@collabora.com \ --cc=laura.nixon@team.mipi.org \ --cc=linux-i3c@lists.infradead.org \ --cc=matthew.schnoor@intel.com \ --cc=nico@fluxnic.net \ --cc=robert.gough@intel.com \ --subject='Re: [PATCH v2 2/2] i3c/master: add the mipi-i3c-hci driver' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).