From: Xu Yilun <yilun.xu@intel.com>
To: matthew.gerlach@linux.intel.com
Cc: hao.wu@intel.com, russell.h.weight@intel.com,
basheer.ahmed.muddebihal@intel.com, trix@redhat.com,
mdf@kernel.org, linux-fpga@vger.kernel.org,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
tianfei.zhang@intel.com, corbet@lwn.net,
linux-serial@vger.kernel.org, jirislaby@kernel.org,
geert+renesas@glider.be, andriy.shevchenko@linux.intel.com,
niklas.soderlund+renesas@ragnatech.se, macro@orcam.me.uk,
johan@kernel.org, lukas@wunner.de, ilpo.jarvinen@linux.intel.com,
marpagan@redhat.com
Subject: Re: [PATCH v4 4/4] tty: serial: 8250: add DFL bus driver for Altera 16550.
Date: Tue, 1 Nov 2022 09:46:56 +0800 [thread overview]
Message-ID: <Y2B6kAnd+m3ftWRf@yilunxu-OptiPlex-7050> (raw)
In-Reply-To: <alpine.DEB.2.22.394.2210311719460.2680729@rhweight-WRK1>
On 2022-10-31 at 17:34:39 -0700, matthew.gerlach@linux.intel.com wrote:
>
>
> On Sat, 29 Oct 2022, Xu Yilun wrote:
>
> > On 2022-10-20 at 14:26:10 -0700, matthew.gerlach@linux.intel.com wrote:
> > > From: Matthew Gerlach <matthew.gerlach@linux.intel.com>
> > >
> > > Add a Device Feature List (DFL) bus driver for the Altera
> > > 16550 implementation of UART.
> > >
> > > Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
> > > ---
> > > v4: use dev_err_probe() everywhere that is appropriate
> > > clean up noise
> > > change error messages to use the word, unsupported
> > > tried again to sort Makefile and KConfig better
> > > reorder probe function for easier error handling
> > > use new dfh_find_param API
> > >
> > > v3: use passed in location of registers
> > > use cleaned up functions for parsing parameters
> > >
> > > v2: clean up error messages
> > > alphabetize header files
> > > fix 'missing prototype' error by making function static
> > > tried to sort Makefile and Kconfig better
> > > ---
> > > drivers/tty/serial/8250/8250_dfl.c | 149 +++++++++++++++++++++++++++++
> > > drivers/tty/serial/8250/Kconfig | 12 +++
> > > drivers/tty/serial/8250/Makefile | 1 +
> > > 3 files changed, 162 insertions(+)
> > > create mode 100644 drivers/tty/serial/8250/8250_dfl.c
> > >
> > > diff --git a/drivers/tty/serial/8250/8250_dfl.c b/drivers/tty/serial/8250/8250_dfl.c
> > > new file mode 100644
> > > index 000000000000..f02f0ba2a565
> > > --- /dev/null
> > > +++ b/drivers/tty/serial/8250/8250_dfl.c
> > > @@ -0,0 +1,149 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Driver for FPGA UART
> > > + *
> > > + * Copyright (C) 2022 Intel Corporation, Inc.
> > > + *
> > > + * Authors:
> > > + * Ananda Ravuri <ananda.ravuri@intel.com>
> > > + * Matthew Gerlach <matthew.gerlach@linux.intel.com>
> > > + */
> > > +
> > > +#include <linux/bitfield.h>
> > > +#include <linux/dfl.h>
> > > +#include <linux/io-64-nonatomic-lo-hi.h>
> > > +#include <linux/kernel.h>
> > > +#include <linux/module.h>
> > > +#include <linux/serial.h>
> > > +#include <linux/serial_8250.h>
> > > +
> > > +struct dfl_uart {
> > > + int line;
> > > +};
> > > +
> > > +static int dfl_uart_get_params(struct dfl_device *dfl_dev, struct uart_8250_port *uart)
> > > +{
> > > + struct device *dev = &dfl_dev->dev;
> > > + u64 v, fifo_len, reg_width;
> > > + u64 *p;
> > > +
> > > + p = dfh_find_param(dfl_dev, DFHv1_PARAM_ID_CLK_FRQ);
> > > + if (!p)
> > > + return dev_err_probe(dev, -EINVAL, "missing CLK_FRQ param\n");
> > > +
> > > + uart->port.uartclk = *p;
> > > + dev_dbg(dev, "UART_CLK_ID %u Hz\n", uart->port.uartclk);
> > > +
> > > + p = dfh_find_param(dfl_dev, DFHv1_PARAM_ID_FIFO_LEN);
> > > + if (!p)
> > > + return dev_err_probe(dev, -EINVAL, "missing FIFO_LEN param\n");
> > > +
> > > + fifo_len = *p;
> > > + dev_dbg(dev, "UART_FIFO_ID fifo_len %llu\n", fifo_len);
> > > +
> > > + switch (fifo_len) {
> > > + case 32:
> > > + uart->port.type = PORT_ALTR_16550_F32;
> > > + break;
> > > +
> > > + case 64:
> > > + uart->port.type = PORT_ALTR_16550_F64;
> > > + break;
> > > +
> > > + case 128:
> > > + uart->port.type = PORT_ALTR_16550_F128;
> > > + break;
> > > +
> > > + default:
> > > + return dev_err_probe(dev, -EINVAL, "unsupported fifo_len %llu\n", fifo_len);
> > > + }
> > > +
> > > + p = dfh_find_param(dfl_dev, DFHv1_PARAM_ID_REG_LAYOUT);
> > > + if (!p)
> > > + return dev_err_probe(dev, -EINVAL, "missing REG_LAYOUT param\n");
> > > +
> > > + v = *p;
> > > + uart->port.regshift = FIELD_GET(DFHv1_PARAM_ID_REG_SHIFT, v);
> > > + reg_width = FIELD_GET(DFHv1_PARAM_ID_REG_WIDTH, v);
> >
> > I have concern that the raw layout inside the parameter block is
> > still exposed to drivers and need to be parsed by each driver.
>
> Raw parameter block will always have to be passed to the driver because HW
> specific properties can be defined that will need to be parsed by the
> specific driver.
So there is a question about the scope of the definitions of these parameter
blocks. MSIX seems globally used across all dfl devices. REG_LAYOUT
seems specific to uart?
If a parameter block is widely used in dfl drivers, duplicate the parsing
from HW layout in each driver may not be a good idea. While for device
specific parameter block, it's OK.
Another concern is the indexing of the parameter IDs. If some parameter
blocks should be device specific, then no need to have globally indexed
parameter IDs. Index them locally in device is OK. So put the definitions
of ID values, HW layout and their parsing operation in each driver.
Thanks,
Yilun
>
> >
> > How about we define HW agnostic IDs for parameter specific fields like:
> >
> > PARAM_ID FIELD_ID
> > ================================
> > MSIX STARTV
> > NUMV
> > --------------------------------
> > CLK FREQ
> > --------------------------------
> > FIFO LEN
> > --------------------------------
> > REG_LAYOUT WIDTH
> > SHIFT
> >
> > And define like u64 dfl_find_param(struct dfl_device *, int param_id, int field_id)
>
> I don't think dfl_find_param as defined above adds much value.
>
> >
> > Think further, if we have to define HW agnostic property - value pairs,
> > why don't we just use "Software nodes for the firmware node", see
> > drivers/base/swnode.c. I think this may be a better choice.
>
> I am looking into "Software nodes for the firmware node", and it can be used
> for HW agnostic properties. Each dfl driver will still have to make a
> function call to fetch each HW agnostice property value as well as a
> function call to find the HW specific parameters and then parse those
> parameters.
>
> >
> > Thanks,
> > Yilun
> >
next prev parent reply other threads:[~2022-11-01 1:57 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-20 21:26 [PATCH v4 0/4] Enhance definition of DFH and use enhancements for uart driver matthew.gerlach
2022-10-20 21:26 ` [PATCH v4 1/4] Documentation: fpga: dfl: Add documentation for DFHv1 matthew.gerlach
2022-10-21 3:55 ` Bagas Sanjaya
2022-10-24 15:01 ` matthew.gerlach
2022-10-21 8:28 ` Ilpo Järvinen
2022-10-21 8:36 ` Ilpo Järvinen
2022-10-20 21:26 ` [PATCH v4 2/4] fpga: dfl: Add DFHv1 Register Definitions matthew.gerlach
2022-10-21 8:06 ` Ilpo Järvinen
2022-10-24 15:03 ` matthew.gerlach
2022-10-20 21:26 ` [PATCH v4 3/4] fpga: dfl: add basic support DFHv1 matthew.gerlach
2022-10-20 22:07 ` Andy Shevchenko
2022-10-24 14:56 ` matthew.gerlach
2022-10-21 8:58 ` Ilpo Järvinen
2022-10-24 15:09 ` matthew.gerlach
2022-10-21 9:07 ` Ilpo Järvinen
2022-10-29 13:08 ` Xu Yilun
2022-10-29 14:47 ` matthew.gerlach
2022-11-01 22:37 ` matthew.gerlach
2022-11-03 1:36 ` Xu Yilun
2022-10-30 22:06 ` Andy Shevchenko
2022-10-31 1:16 ` Xu Yilun
2022-10-31 15:34 ` Andy Shevchenko
2022-10-31 20:15 ` matthew.gerlach
2022-11-01 1:55 ` Xu Yilun
2022-10-20 21:26 ` [PATCH v4 4/4] tty: serial: 8250: add DFL bus driver for Altera 16550 matthew.gerlach
2022-10-20 22:13 ` Andy Shevchenko
2022-10-21 4:33 ` Greg KH
2022-10-21 9:24 ` Ilpo Järvinen
2022-10-29 15:24 ` Xu Yilun
2022-11-01 0:34 ` matthew.gerlach
2022-11-01 1:46 ` Xu Yilun [this message]
2022-11-01 16:04 ` matthew.gerlach
2022-11-01 16:30 ` Ilpo Järvinen
2022-11-01 17:39 ` matthew.gerlach
2022-11-02 9:57 ` Ilpo Järvinen
2022-11-08 12:48 ` Marco Pagani
2022-11-08 12:51 ` Ilpo Järvinen
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=Y2B6kAnd+m3ftWRf@yilunxu-OptiPlex-7050 \
--to=yilun.xu@intel.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=basheer.ahmed.muddebihal@intel.com \
--cc=corbet@lwn.net \
--cc=geert+renesas@glider.be \
--cc=hao.wu@intel.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jirislaby@kernel.org \
--cc=johan@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fpga@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=macro@orcam.me.uk \
--cc=marpagan@redhat.com \
--cc=matthew.gerlach@linux.intel.com \
--cc=mdf@kernel.org \
--cc=niklas.soderlund+renesas@ragnatech.se \
--cc=russell.h.weight@intel.com \
--cc=tianfei.zhang@intel.com \
--cc=trix@redhat.com \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).