Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp141230ybz; Tue, 28 Apr 2020 20:15:45 -0700 (PDT) X-Google-Smtp-Source: APiQypLaabUoFreqn3Q5OxbMq3U7DRPe5h3WteH4ZUhyVDVLGJtHIyWX6Hd1NcaeNTJ0ce0XxhQJ X-Received: by 2002:a50:a365:: with SMTP id 92mr750022edn.220.1588130145354; Tue, 28 Apr 2020 20:15:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588130145; cv=none; d=google.com; s=arc-20160816; b=PW4fDnpjO3vb3scDrxQLeoIPPOfauXKhb+otbUY7QS5fkYAeayMSB/QBSoqj6KIP3b cSfZ/t6o63zhP3Dts/qCVdxiMNqqcFTXQqNSkX3/Qsb4J0Xo9fs2Afu26vU0Ryf9G17B zScsRxYaYFT5J/UsyBui6mJsgGijTFwE1IZgqdf3/FX9SUyh//M9C1cFnmwA5wVX+Y5F TFObtWRwZPG3Q7umGHUHTMmG9D9D5+WVa0A6WO2i3qmUrMbHne8r3WHxgYdox8cj++C0 5SUjcxARFNRx4o0kWo4HXCBY/dAd/mmgRjO7vlh5/LsCun8nvkzWqw28tuEQKGJuqPXP 1n7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:date:cc:to:from:subject:message-id; bh=Xg8hV0tEl33CeaiFcRGgmeETo4LPeuXBKJomdlrBp/Q=; b=QeNiH9KkGUcrhyM6m2SMQsOII+dNGmayMBAGTee4j3GYRj9467UGTn0resnV/RqlMT 2CqbQUA3tGojKAvYXThCQ/uMJjeDGs0QzWS9baRM0NC7wD1CUQvYo7lwYGWPdoKlvnOt f2NPVLiBBwNINMwGRITy0ZTYAxG71L5LWyyBCAS+QXhSNNM6cSXWITfXC/NQgLFA8WU5 gucxmpjLlJEt2Yj9u2blE0YcsmuedKi0AFZve/sGRWqf790gjBopGMJMc1udfwWlgHeU ZganT5KhwkykdxJXyiVqv9/l74MBNNhCnXuB/w+3PYkFqRrxgzl5azvoo4Pq16H3O4fT cJ1w== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w2si2623303edx.70.2020.04.28.20.15.21; Tue, 28 Apr 2020 20:15:45 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726625AbgD2DNa (ORCPT + 99 others); Tue, 28 Apr 2020 23:13:30 -0400 Received: from kernel.crashing.org ([76.164.61.194]:49510 "EHLO kernel.crashing.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726560AbgD2DN3 (ORCPT ); Tue, 28 Apr 2020 23:13:29 -0400 Received: from localhost (gate.crashing.org [63.228.1.57]) (authenticated bits=0) by kernel.crashing.org (8.14.7/8.14.7) with ESMTP id 03T3BtAO008504 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 28 Apr 2020 22:11:59 -0500 Message-ID: Subject: Re: [PATCH v5 3/5] drivers/soc/litex: add LiteX SoC Controller driver From: Benjamin Herrenschmidt To: Mateusz Holenko , Rob Herring , Mark Rutland , Greg Kroah-Hartman , Jiri Slaby , devicetree@vger.kernel.org, linux-serial@vger.kernel.org Cc: Stafford Horne , Karol Gugala , Mauro Carvalho Chehab , "David S. Miller" , "Paul E. McKenney" , Filip Kokosinski , Pawel Czarnecki , Joel Stanley , Jonathan Cameron , Maxime Ripard , Shawn Guo , Heiko Stuebner , Sam Ravnborg , Icenowy Zheng , Laurent Pinchart , linux-kernel@vger.kernel.org Date: Wed, 29 Apr 2020 13:11:54 +1000 In-Reply-To: <20200425133939.3508912-3-mholenko@antmicro.com> References: <20200425133939.3508912-0-mholenko@antmicro.com> <20200425133939.3508912-3-mholenko@antmicro.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, 2020-04-25 at 13:42 +0200, Mateusz Holenko wrote: > From: Pawel Czarnecki > > This commit adds driver for the FPGA-based LiteX SoC > Controller from LiteX SoC builder. Sorry for jumping in late, Joel only just pointed me to this :) > + * The purpose of `litex_set_reg`/`litex_get_reg` is to implement > + * the logic of writing to/reading from the LiteX CSR in a single > + * place that can be then reused by all LiteX drivers. > + */ > +void litex_set_reg(void __iomem *reg, unsigned long reg_size, > + unsigned long val) > +{ > + unsigned long shifted_data, shift, i; > + unsigned long flags; > + > + spin_lock_irqsave(&csr_lock, flags); > + > + for (i = 0; i < reg_size; ++i) { > + shift = ((reg_size - i - 1) * LITEX_SUBREG_SIZE_BIT); > + shifted_data = val >> shift; > + > + __raw_writel(shifted_data, reg + (LITEX_REG_SIZE * i)); > + } > + > + spin_unlock_irqrestore(&csr_lock, flags); > +} > + > +unsigned long litex_get_reg(void __iomem *reg, unsigned long reg_size) > +{ > + unsigned long shifted_data, shift, i; > + unsigned long result = 0; > + unsigned long flags; > + > + spin_lock_irqsave(&csr_lock, flags); > + > + for (i = 0; i < reg_size; ++i) { > + shifted_data = __raw_readl(reg + (LITEX_REG_SIZE * i)); > + > + shift = ((reg_size - i - 1) * LITEX_SUBREG_SIZE_BIT); > + result |= (shifted_data << shift); > + } > + > + spin_unlock_irqrestore(&csr_lock, flags); > + > + return result; > +} I really don't like the fact that the register sizes & sub sizes are #defined. As your comment explains, this makes it harder to support other configurations. This geometry should come from the device-tree instead. Also this while thing is rather gross (and the lock will not help performance). Why can't CSRs be normally memory mapped always instead ? Even when transporting them on a HW bus that's smaller, the HW bus conversion should be able to do the break-down into a multi-breat transfer rather than doing that in SW. Or at least have a fast-path if the register size is no larger than the sub size, so you can use a normal ioread32/iowrite32. Also I wonder ... last I played with LiteX, it would re-generate the register layout (including the bit layout inside registers potentially) rather enthousiastically, making it pretty hard to have a fixed register layout for use by a kernel driver. Was this addressed ? Cheers, Ben.