Received: by 10.223.185.116 with SMTP id b49csp6745979wrg; Wed, 28 Feb 2018 14:57:06 -0800 (PST) X-Google-Smtp-Source: AG47ELuAHbIwzbBK06BP343XwKO0wXHDumPQ4iSb6OrYZCGD+UmYJW8xee6Ly+ioBHABDjsOewwH X-Received: by 2002:a17:902:28c3:: with SMTP id f61-v6mr8859754plb.346.1519858625962; Wed, 28 Feb 2018 14:57:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519858625; cv=none; d=google.com; s=arc-20160816; b=MnHVtJC1IUcYBvkgyHnSex7yRSzZFDM90WpEGxCweczkm1GWdtgupS6dQ3SSmUr9zT /rJna+ePf537RjZx9JBqSBoUadJYmhhGxiROpOjYhhU4mg6a0VzH+v3zpzVrguvWR4Hy EOQrBgDDYhNYx88kkNY8EfPa7AqZNb/t8pQS/iuVCJLyqDn8JnsLmgZhB37bBIhY+n9s h/gYBkdibP0JhkYiwi3JDp+F4e9V3XmKohX3hQCYCUIDGqcA/yPP9FsT6BYp1tx0Wns5 eVow97Hf8W1GTAhfqfNcu2JXvFhGc6ujw8p1gMnQOByuJf4SBGp1b/M031Bdo8JdzzBj 4YMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dmarc-filter :arc-authentication-results; bh=xxm/LXhwAwj/XbU1roB4T5rNO3AVaFwyczbYW5SP+yw=; b=yhfs6FbwoN7AoH+75iElVYZvwNWFy0dbXrbtCy8R6OOr7cwADe3XFdqYvJA8aKQrtu dLqnWt+UsW/RkwsYU88b1RaoGLG0jjeFbPjBdMqephSeGXagHapZB6QBa9TuXs/QEf0m Eri1XZtps3ORLJaJYilZQpWF00d+IZQreSRaDhNn0SuttZnJJiQnSKIfb5fhRM6fZb4d T+Cuh8gXdpN2ONWJxdK8iCmyKgt0B7miTxU+HtPCBoJJn9uFyYdWZf9+PJdaJhBPU2dO f7XiDHIfvHMcxfvsQg2Scn0O/N4qBfUd1A0crJViZjvBpt/P++xIWo0F3baHjxdCutIU kvbA== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 75si1897459pfp.353.2018.02.28.14.56.50; Wed, 28 Feb 2018 14:57:05 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964797AbeB1Wz7 (ORCPT + 99 others); Wed, 28 Feb 2018 17:55:59 -0500 Received: from mail.kernel.org ([198.145.29.99]:57984 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935256AbeB1Wz5 (ORCPT ); Wed, 28 Feb 2018 17:55:57 -0500 Received: from mail-ua0-f169.google.com (mail-ua0-f169.google.com [209.85.217.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id EB82C21782; Wed, 28 Feb 2018 22:55:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EB82C21782 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=atull@kernel.org Received: by mail-ua0-f169.google.com with SMTP id q8so2683867uae.4; Wed, 28 Feb 2018 14:55:56 -0800 (PST) X-Gm-Message-State: APf1xPBal/DX+SJgVIXUozIXFnJRFG9Z3XT7PoYy7ZYG/xtY3ycKb5SR keJKN+oD6JqeQ21S4nFs0CLfy/b553J8vkCO3QQ= X-Received: by 10.176.89.232 with SMTP id k37mr14190034uad.160.1519858556037; Wed, 28 Feb 2018 14:55:56 -0800 (PST) MIME-Version: 1.0 Received: by 10.159.60.71 with HTTP; Wed, 28 Feb 2018 14:55:15 -0800 (PST) In-Reply-To: <1518513893-4719-14-git-send-email-hao.wu@intel.com> References: <1518513893-4719-1-git-send-email-hao.wu@intel.com> <1518513893-4719-14-git-send-email-hao.wu@intel.com> From: Alan Tull Date: Wed, 28 Feb 2018 16:55:15 -0600 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v4 13/24] fpga: region: add compat_id support To: Wu Hao Cc: Moritz Fischer , linux-fpga@vger.kernel.org, linux-kernel , linux-api@vger.kernel.org, "Kang, Luwei" , "Zhang, Yi Z" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Feb 13, 2018 at 3:24 AM, Wu Hao wrote: Hi Hao, > This patch introduces a compat_id member and sysfs interface for each > fpga-region, e.g userspace applications could read the compat_id > from the sysfs interface for compatibility checking before PR. > > Signed-off-by: Wu Hao > --- > Documentation/ABI/testing/sysfs-class-fpga-region | 5 +++++ > drivers/fpga/fpga-region.c | 19 +++++++++++++++++++ > include/linux/fpga/fpga-region.h | 13 +++++++++++++ > 3 files changed, 37 insertions(+) > create mode 100644 Documentation/ABI/testing/sysfs-class-fpga-region > > diff --git a/Documentation/ABI/testing/sysfs-class-fpga-region b/Documentation/ABI/testing/sysfs-class-fpga-region > new file mode 100644 > index 0000000..419d930 > --- /dev/null > +++ b/Documentation/ABI/testing/sysfs-class-fpga-region > @@ -0,0 +1,5 @@ > +What: /sys/class/fpga_region//compat_id > +Date: February 2018 > +KernelVersion: 4.16 > +Contact: Wu Hao > +Description: FPGA region id for compatibility check. > diff --git a/drivers/fpga/fpga-region.c b/drivers/fpga/fpga-region.c > index 660a91b..babec96 100644 > --- a/drivers/fpga/fpga-region.c > +++ b/drivers/fpga/fpga-region.c > @@ -162,6 +162,24 @@ int fpga_region_program_fpga(struct fpga_region *region) > } > EXPORT_SYMBOL_GPL(fpga_region_program_fpga); > > +static ssize_t compat_id_show(struct device *dev, > + struct device_attribute *attr, char *buf) > +{ > + struct fpga_region *region = to_fpga_region(dev); This looks good, but not all users of FPGA are going to use compat_id. How would you feel about making it a pointer in struct fpga_region? With compat_id as a pointer, could check for non-null compat_id pointer and return an error if it wasn't initialized. > + > + return sprintf(buf, "%016llx%016llx\n", > + (unsigned long long)region->compat_id.id_h, > + (unsigned long long)region->compat_id.id_l); > +} > + > +static DEVICE_ATTR_RO(compat_id); > + > +static struct attribute *fpga_region_attrs[] = { > + &dev_attr_compat_id.attr, > + NULL, > +}; > +ATTRIBUTE_GROUPS(fpga_region); > + > int fpga_region_register(struct fpga_region *region) > { > struct device *dev = region->parent; > @@ -226,6 +244,7 @@ static int __init fpga_region_init(void) > if (IS_ERR(fpga_region_class)) > return PTR_ERR(fpga_region_class); > > + fpga_region_class->dev_groups = fpga_region_groups; > fpga_region_class->dev_release = fpga_region_dev_release; > > return 0; > diff --git a/include/linux/fpga/fpga-region.h b/include/linux/fpga/fpga-region.h > index 423c87e..bf97dcc 100644 > --- a/include/linux/fpga/fpga-region.h > +++ b/include/linux/fpga/fpga-region.h > @@ -6,6 +6,17 @@ > #include > > /** > + * struct fpga_region_compat_id - FPGA Region id for compatibility check > + * > + * @id_h: high 64bit of the compat_id > + * @id_l: low 64bit of the compat_id > + */ > +struct fpga_region_compat_id { > + u64 id_h; > + u64 id_l; I guess each user will choose how to define these bits. > +}; > + > +/** > * struct fpga_region - FPGA Region structure > * @dev: FPGA Region device > * @parent: parent device > @@ -13,6 +24,7 @@ > * @bridge_list: list of FPGA bridges specified in region > * @mgr: FPGA manager > * @info: FPGA image info > + * @compat_id: FPGA region id for compatibility check. > * @priv: private data > * @get_bridges: optional function to get bridges to a list > * @groups: optional attribute groups. > @@ -24,6 +36,7 @@ struct fpga_region { > struct list_head bridge_list; > struct fpga_manager *mgr; > struct fpga_image_info *info; > + struct fpga_region_compat_id compat_id; Here it would be a pointer instead. Alan > void *priv; > int (*get_bridges)(struct fpga_region *region); > const struct attribute_group **groups; > -- > 2.7.4 >