Received: by 2002:a05:6358:111d:b0:dc:6189:e246 with SMTP id f29csp1485877rwi; Mon, 31 Oct 2022 17:40:22 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7qmAPhYZFAEC0EUqCWLP4ladbRG6/sWJyelB8m0/ZBQdn7K7v9SiNoJqoIIonm32r0RzNf X-Received: by 2002:a17:902:dac5:b0:186:a687:e082 with SMTP id q5-20020a170902dac500b00186a687e082mr17143693plx.84.1667263221836; Mon, 31 Oct 2022 17:40:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667263221; cv=none; d=google.com; s=arc-20160816; b=H3gxl/YfHajsxOmlrCjErk2ZaqlB8MuE+V7PRg9WKlHpniWv9K6iT89v4DFcTzsYsc 4vx8OC8HqsnRNVfAdwyq3KPcgQ5XovxQ+wgX8pA9wk3fLgu7VyGW/HTaof96AGOk2DhX BR/dprYJhKHtz34LursW+Gb0m958syCcL3756hDoKK5eZVQkeZ1vp4GW0Nj53o90HmRB bAb/wmpUnf4nNC7vUPc5hygQkAnv5zKep93nn9OdLbgMHS/s7rHDY4Y2uzEzrU0+StAP Q99/1NRajYc/33DH2ryF1F9fzAIoxXJ664hZKV/ZrW5BKdVWcAXioKGbKQZhG7nyRtMj Matw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent:references:message-id :in-reply-to:subject:cc:to:from:date:dkim-signature; bh=yXuBNY1SPmDbJqeRipswkgYNRBdH1wOeephD2f4dMmc=; b=Fr+kOIC6WA1ZGE4wPNl5P/wKzyHUYEOC+qnTC5M/x/kDpCAdFG9CYygTNA+tfIvrCX kOU9oVPMK6+k67qdOppj+F2dpDLDXKla1HELBLubqhWypUoeSr4qW00jW7GvLOpMZmx9 g7m3LMrnlRlwswhBzfRXFNQooXW2ZcuVi4g4XTxsdkB+szBniygkbIGzmXotIaITfW1c FeVp+qn3FRCyUgD4ek1hdOgc7VN72NQO6xW8Yt0Lu6OsXm91ZqgytlLJVNHcq0wvlp/f pboGTgVWROZ2Xis3/RBKS7/mQfKybF/XDJis8Q/oYwKIkKDOZb1xqycn6ZOPfE+m5J/u yyIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="fOqynw/F"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id na11-20020a17090b4c0b00b00213d1d59224si8806112pjb.136.2022.10.31.17.40.07; Mon, 31 Oct 2022 17:40:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="fOqynw/F"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229528AbiKAAea (ORCPT + 97 others); Mon, 31 Oct 2022 20:34:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57106 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229776AbiKAAeZ (ORCPT ); Mon, 31 Oct 2022 20:34:25 -0400 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EFE0F15A27; Mon, 31 Oct 2022 17:34:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1667262864; x=1698798864; h=date:from:to:cc:subject:in-reply-to:message-id: references:mime-version; bh=acc+2gBvRft+JiQI6WLRivHkyIwnDQIoyJyGzxx54G8=; b=fOqynw/FxWsnL7zmy8pcfsD7bEI51JImUeX7hT6i80Sy4wCfPnL48PUh XdGQ/32UJpIqqol8kHCvKjn1PWzQQoz9jAAG3O8PLe8W+cgIjWAceXOVe IDxmU51CFfdef0niBHDZDNSNpN7xdK+C1gL2RF82htkEEbSI6FpTADRc8 Jmy5mIqHFNCHKO7P/9QEY88qflJznY+6ViMcIE0FBt42TGkeVu3qH1LuW RcLqGDS7oMbdXhLANS4iNV+oObheE49McSCjZDd6jEj1VHQtMaaiDPsC1 IvpE6+CSd2H/Vl+kGKyOcA8qvUYDAh7WYGtXiV1LJJgNvBfQEavzcI1n/ A==; X-IronPort-AV: E=McAfee;i="6500,9779,10517"; a="371112434" X-IronPort-AV: E=Sophos;i="5.95,229,1661842800"; d="scan'208";a="371112434" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Oct 2022 17:34:23 -0700 X-IronPort-AV: E=McAfee;i="6500,9779,10517"; a="739152697" X-IronPort-AV: E=Sophos;i="5.95,229,1661842800"; d="scan'208";a="739152697" Received: from rhweight-wrk1.ra.intel.com ([137.102.106.139]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Oct 2022 17:34:22 -0700 Date: Mon, 31 Oct 2022 17:34:39 -0700 (PDT) From: matthew.gerlach@linux.intel.com X-X-Sender: mgerlach@rhweight-WRK1 To: Xu Yilun 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. In-Reply-To: Message-ID: References: <20221020212610.697729-1-matthew.gerlach@linux.intel.com> <20221020212610.697729-5-matthew.gerlach@linux.intel.com> User-Agent: Alpine 2.22 (DEB 394 2020-01-19) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 >> >> Add a Device Feature List (DFL) bus driver for the Altera >> 16550 implementation of UART. >> >> Signed-off-by: Matthew Gerlach >> --- >> 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 >> + * Matthew Gerlach >> + */ >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +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. > > 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 >