Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp3445502pxb; Tue, 20 Apr 2021 08:29:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzO4OIbxHTW7/5gFcjudlQxvSXux1h/Ubr2R++GWn2A8Qghqz9vEYm77INkVUU9IMNun3Pn X-Received: by 2002:a17:90b:400a:: with SMTP id ie10mr5543261pjb.210.1618932555038; Tue, 20 Apr 2021 08:29:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618932555; cv=none; d=google.com; s=arc-20160816; b=xeqOzbCui5EBL+GzBsAiWh/0dnXx+MYe9QX2/kKcIe7s9JpbUuIyRWkfBQsIkRKHXf qLezOZ4lu9BDtwqfiNP066B0v4LWD8KjOn0wdURP69qrcesrp6wKaOLQ1ve5PrS6FBqY gIGGe9TmapF4eQr6f1quDKPz2/XLjiOW6VqgkcNLoTdD4ZpI++dzpYEphyKQztxLZZGj BkO68JCu12nWIyav41VuYmv+lPHyNidTSPsTBr3O7TmAj8SwWRG+o2w76/YLdmehU14s 9XTqZkVp/Slb1UzoirZ04KxZtb0j9SgrZ7NYrWh2UkJq5xTIJNlEOb1ob5npkUldsx6U SZvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=bqJ3OAM1JW8YLoZYArv9PWLIBkHuqJkFBWcruBQfyDE=; b=wZnIFH38NMgr6p1EDjvXRtsKALjYyW8OSuf6h266nyG6VpcSVHf3JXAP6sYVZa9sY1 rH7yEhgf/HYGz8qcatHNKngxMrtUd0n4ZyRW1Tq8h1mB/qMZfBYO1Eyt6ebRMYM7MDYr rSjDriGIm83Gp0wgUzKjazmU+bvpqTsirEmBebUwT2CnkM4FqI9O6buhZ3xO07o9A+Xu Wd6p7jONuEtu8NjFOjy11I2Xp60FMzjAGN868Ppvtm7cGkM7obz34FTWwA2mi65j7IoD RT1p1fJdIwSxE4U5wuutHhvZRKQ7mt7zozquYFxttrlRID9iFAKhljUPSBXO7X/2Q7Gx nyrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=YGMLSPlK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e3si19898494pgd.419.2021.04.20.08.29.01; Tue, 20 Apr 2021 08:29:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=YGMLSPlK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232627AbhDTP1v (ORCPT + 99 others); Tue, 20 Apr 2021 11:27:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:39468 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232174AbhDTP1u (ORCPT ); Tue, 20 Apr 2021 11:27:50 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7C6D7613AB; Tue, 20 Apr 2021 15:27:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1618932439; bh=k1PcTef2uV3umw9k22yDoPu0zzuRh7oj4H4rZUPiAa0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=YGMLSPlKvPl0PErItDUm7+DVCYfpGV7v+uUrrpR7jAKPdbBTn9yp3vdlmrfeiFGhZ FHauSi4VFNZ9NUVVAaC8dy2xAv10D7Dwrd1dIbBFOQtMvU/haiFQdIeSCIuBCacvHM D/gaLL/TGnI0ukXAiOKI/prr4o3rwkWcZ4RIkIjw= Date: Tue, 20 Apr 2021 17:27:16 +0200 From: Greg KH To: Nava kishore Manne Cc: "robh+dt@kernel.org" , Michal Simek , Derek Kiernan , Dragan Cvetic , "arnd@arndb.de" , Rajan Vaja , Jolly Shah , Tejas Patel , Amit Sunil Dhamne , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "chinnikishore369@gmail.com" , git Subject: Re: [PATCH 2/5] misc: zynq: Add afi config driver Message-ID: References: <20210420081153.17020-1-nava.manne@xilinx.com> <20210420081153.17020-3-nava.manne@xilinx.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Apr 20, 2021 at 01:36:51PM +0000, Nava kishore Manne wrote: > Hi Greg, > > Please find my response inline. > > > -----Original Message----- > > From: Greg KH > > Sent: Tuesday, April 20, 2021 2:17 PM > > To: Nava kishore Manne > > Cc: robh+dt@kernel.org; Michal Simek ; Derek Kiernan > > ; Dragan Cvetic ; > > arnd@arndb.de; Rajan Vaja ; Jolly Shah > > ; Tejas Patel ; Amit Sunil > > Dhamne ; devicetree@vger.kernel.org; linux-arm- > > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > > chinnikishore369@gmail.com; git > > Subject: Re: [PATCH 2/5] misc: zynq: Add afi config driver > > > > On Tue, Apr 20, 2021 at 01:41:50PM +0530, Nava kishore Manne wrote: > > > This patch adds zynq afi config driver. This is useful for the > > > configuration of the PS-PL interface on zynq platform. > > > > What is "PS-PL"? Can you describe it better please? > > > PS-PL interface is nothing but the interface between processing system(PS) that contains arm cores and Programmable Logic(PL) i.e FPGA. > Will update the description in v2. > > > > > > > Signed-off-by: Nava kishore Manne > > > --- > > > drivers/misc/Kconfig | 11 ++++++ > > > drivers/misc/Makefile | 1 + > > > drivers/misc/zynq-afi.c | 81 > > > +++++++++++++++++++++++++++++++++++++++++ > > > 3 files changed, 93 insertions(+) > > > create mode 100644 drivers/misc/zynq-afi.c > > > > > > diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index > > > f532c59bb59b..877b43b3377d 100644 > > > --- a/drivers/misc/Kconfig > > > +++ b/drivers/misc/Kconfig > > > @@ -445,6 +445,17 @@ config HISI_HIKEY_USB > > > switching between the dual-role USB-C port and the USB-A host > > ports > > > using only one USB controller. > > > > > > +config ZYNQ_AFI > > > + tristate "Xilinx ZYNQ AFI support" > > > + help > > > + Zynq AFI driver support for writing to the AFI registers > > > + for configuring PS_PL Bus-width. Xilinx Zynq SoC connect > > > + the PS to the programmable logic (PL) through the AXI port. > > > + This AXI port helps to establish the data path between the > > > + PS and PL.In-order to establish the proper communication path > > > + between PS and PL, the AXI port data path should be configured > > > + with the proper Bus-width values > > > + > > > source "drivers/misc/c2port/Kconfig" > > > source "drivers/misc/eeprom/Kconfig" > > > source "drivers/misc/cb710/Kconfig" > > > diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index > > > 99b6f15a3c70..e9b03843100f 100644 > > > --- a/drivers/misc/Makefile > > > +++ b/drivers/misc/Makefile > > > @@ -56,3 +56,4 @@ obj-$(CONFIG_HABANA_AI) += > > habanalabs/ > > > obj-$(CONFIG_UACCE) += uacce/ > > > obj-$(CONFIG_XILINX_SDFEC) += xilinx_sdfec.o > > > obj-$(CONFIG_HISI_HIKEY_USB) += hisi_hikey_usb.o > > > +obj-$(CONFIG_ZYNQ_AFI) += zynq-afi.o > > > diff --git a/drivers/misc/zynq-afi.c b/drivers/misc/zynq-afi.c new > > > file mode 100644 index 000000000000..04317d1bdb98 > > > --- /dev/null > > > +++ b/drivers/misc/zynq-afi.c > > > @@ -0,0 +1,81 @@ > > > +// SPDX-License-Identifier: GPL-2.0 > > > +/* > > > + * Xilinx ZYNQ AFI driver. > > > + * Copyright (c) 2018-2021 Xilinx Inc. > > > + */ > > > + > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > + > > > +/* Registers and special values for doing register-based operations */ > > > +#define AFI_RDCHAN_CTRL_OFFSET 0x00 > > > +#define AFI_WRCHAN_CTRL_OFFSET 0x14 > > > + > > > +#define AFI_BUSWIDTH_MASK 0x01 > > > + > > > +/** > > > + * struct afi_fpga - AFI register description > > > + * @membase: pointer to register struct > > > + * @afi_width: AFI bus width to be written > > > + */ > > > +struct zynq_afi_fpga { > > > + void __iomem *membase; > > > + u32 afi_width; > > > +}; > > > + > > > +static int zynq_afi_fpga_probe(struct platform_device *pdev) { > > > + struct zynq_afi_fpga *afi_fpga; > > > + struct resource *res; > > > + u32 reg_val; > > > + u32 val; > > > + > > > + afi_fpga = devm_kzalloc(&pdev->dev, sizeof(*afi_fpga), > > GFP_KERNEL); > > > + if (!afi_fpga) > > > + return -ENOMEM; > > > + > > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > > + afi_fpga->membase = devm_ioremap_resource(&pdev->dev, res); > > > + if (IS_ERR(afi_fpga->membase)) > > > + return PTR_ERR(afi_fpga->membase); > > > + > > > + val = device_property_read_u32(&pdev->dev, "xlnx,afi-width", > > > + &afi_fpga->afi_width); > > > + if (val) { > > > + dev_err(&pdev->dev, "failed to get the afi bus width\n"); > > > + return -EINVAL; > > > + } > > > + > > > + reg_val = readl(afi_fpga->membase + AFI_RDCHAN_CTRL_OFFSET); > > > + reg_val &= ~AFI_BUSWIDTH_MASK; > > > + writel(reg_val | afi_fpga->afi_width, > > > + afi_fpga->membase + AFI_RDCHAN_CTRL_OFFSET); > > > + reg_val = readl(afi_fpga->membase + AFI_WRCHAN_CTRL_OFFSET); > > > + reg_val &= ~AFI_BUSWIDTH_MASK; > > > + writel(reg_val | afi_fpga->afi_width, > > > + afi_fpga->membase + AFI_WRCHAN_CTRL_OFFSET); > > > + > > > + return 0; > > > +} > > > > I do not understand, why is this driver needed at all? Why can't you do the > > above from userspace? > > > > All this does is write some values to the hardware at probe time, who needs > > this? > > This driver will be used by the overlay framework for configuring the interface after programming the FPGA and before probing the drivers that are present in the PL. What is a "overlay framework"? And why does the kernel have to do this? Why can't you write these hardware values from userspace? confused, greg k-h