Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp1117025pxk; Fri, 25 Sep 2020 06:44:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyrluD55VCLKr1/wlvAGQMzQLz1rkLt+F4qUi96th/7Cb7FqQW0dF8pGDeD+Ef6Vb0tRo3A X-Received: by 2002:aa7:c9c7:: with SMTP id i7mr1409662edt.336.1601041469537; Fri, 25 Sep 2020 06:44:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1601041469; cv=none; d=google.com; s=arc-20160816; b=CNL7cLaV3A6fVZzyCgbOdBlUDhuhyTmiwBhSfsFHPapdQnpt4tTEyqiwsZrA/9hNvH e7w3EwsHsQDDvUuZDS/nHn5VKCrF0mWZ5lgwCtCZZfvf1/bW5EMSOoi7SxdqD31KLHzO OPetXFvDHFcw459LFSbVaH0mNf58JjNeUFT/GE0NHP2Ri9FZgZRZGXz/Ilnrw3XP9FCf DAgbF9bxSgRx7pg9GY9MhdWFaLJVTOH4UpwxderavP5X5L5bLeC4B3j0nHBzZg0lTuFm KFqsgGUHHf6VGa2OQZWaK/frAoeZy+h+58bZnWJGeZMKORLjCbXiz7JlgOi64jloi4I7 6NxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version; bh=ttB+wOXeGsBfIwTDAKr7IKOf7HwOyFNG/wkL5Jiz3tU=; b=it137cPnlDMjOBszHmtCgXNfUJb83tOCs+iqq7YGUyl6ebguNAWvMlrA+P3O3/hFyz q07DgkKWX7E44dtBj6pZtkcxy+GB/xLgObrw2LhdtIvQOl4ZlHzpQnSs5MVYPsmJJ+46 1plZp9hckuBrtbTOHs2z42Avj1v4ze1pWdyk0JfBG5vbWJWmzWLYJkpqjlJey69c7OWS heW5HgZrRst7JI6NWUX1oVjgvBfE4FXFvdGjjhYdZurcxwV/hceWNRhMRuv+WWM9a2lA SR6A1LeyMxApygVmrHr6TqbJdEWZ1fx6Cxe9h+Ri1nHoPFva3k1xmD/t2DFK9Be1wq3I b9dg== 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 v3si1801175ejx.520.2020.09.25.06.44.05; Fri, 25 Sep 2020 06:44:29 -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 S1728880AbgIYNlM (ORCPT + 99 others); Fri, 25 Sep 2020 09:41:12 -0400 Received: from mail-oo1-f66.google.com ([209.85.161.66]:37735 "EHLO mail-oo1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727982AbgIYNlL (ORCPT ); Fri, 25 Sep 2020 09:41:11 -0400 Received: by mail-oo1-f66.google.com with SMTP id y25so755231oog.4; Fri, 25 Sep 2020 06:41:11 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ttB+wOXeGsBfIwTDAKr7IKOf7HwOyFNG/wkL5Jiz3tU=; b=lVggYfvMaIhvODSzA3e7xcNfrnm9bU5/BcXrgReOXh60QEDHadWdefujCUCPmuw+79 HVXxOKUU6lurRjhYxAFb2SjdRufdwr3DNoNPOyWs0wgBV/fq+8y9z9lNGpqYL3PFLhXh pjUcne/kFBu/aZXvmav/dyGsMalw4fBuZFdcJx7Cbw8Q7lutJMGpfvFLMDGG+u7EsVeX b2T3c1vFY0yVYP6cSuXA7U0fWA4hxQGfYZ+hTZUk0GaAOKmOozCkB4myVMiCqtgOXJ2E 54LAKvDH9Q+OBOGGgoVwrz5rCIW9AKUUm3HzWC5BJtTFqFa6T0rimk7Xpzi5Y960yL0K tDNA== X-Gm-Message-State: AOAM530JeecDHsaEljnJ8B/mCY1EvNI5KRmzr74jjVNkz1zl3lM32w1L z20zJC/E0CilG55uI2+mD363DCKVOVXncspPY0E= X-Received: by 2002:a4a:5d84:: with SMTP id w126mr884054ooa.1.1601041270660; Fri, 25 Sep 2020 06:41:10 -0700 (PDT) MIME-Version: 1.0 References: <20200923120817.1667149-0-mholenko@antmicro.com> <20200923120817.1667149-5-mholenko@antmicro.com> In-Reply-To: <20200923120817.1667149-5-mholenko@antmicro.com> From: Geert Uytterhoeven Date: Fri, 25 Sep 2020 15:40:59 +0200 Message-ID: Subject: Re: [PATCH v11 5/5] drivers/tty/serial: add LiteUART driver To: Mateusz Holenko Cc: Rob Herring , Mark Rutland , Greg Kroah-Hartman , Jiri Slaby , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , "open list:SERIAL DRIVERS" , 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 Mailing List , "Gabriel L. Somlo" Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Mateusz, On Wed, Sep 23, 2020 at 12:12 PM Mateusz Holenko wrote: > From: Filip Kokosinski > > This commit adds driver for the FPGA-based LiteUART serial controller > from LiteX SoC builder. > > The current implementation supports LiteUART configured > for 32 bit data width and 8 bit CSR bus width. > > It does not support IRQ. > > Signed-off-by: Filip Kokosinski > Signed-off-by: Mateusz Holenko Thanks for your patch! > --- /dev/null > +++ b/drivers/tty/serial/liteuart.c > +static int liteuart_probe(struct platform_device *pdev) > +{ > + struct device_node *np = pdev->dev.of_node; > + struct liteuart_port *uart; > + struct uart_port *port; > + struct xa_limit limit; > + int dev_id, ret; > + > + /* no device tree */ > + if (!np) > + return -ENODEV; > + > + /* look for aliases; auto-enumerate for free index if not found */ > + dev_id = of_alias_get_id(np, "serial"); > + if (dev_id < 0) > + limit = XA_LIMIT(0, CONFIG_SERIAL_LITEUART_MAX_PORTS); > + else > + limit = XA_LIMIT(dev_id, dev_id); > + > + uart = kzalloc(sizeof(struct liteuart_port), GFP_KERNEL); Who frees this memory? Use devm_kzalloc()? > + if (!uart) > + return -ENOMEM; > + > + ret = xa_alloc(&liteuart_array, &dev_id, uart, limit, GFP_KERNEL); Who frees this entry? > + if (ret) > + return ret; > + > + port = &uart->port; > + > + /* get membase */ > + port->membase = devm_platform_get_and_ioremap_resource(pdev, 0, NULL); > + if (!port->membase) > + return -ENXIO; > + > + /* values not from device tree */ > + port->dev = &pdev->dev; > + port->iotype = UPIO_MEM; > + port->flags = UPF_BOOT_AUTOCONF; > + port->ops = &liteuart_ops; > + port->regshift = 2; > + port->fifosize = 16; > + port->iobase = 1; > + port->type = PORT_UNKNOWN; > + port->line = dev_id; > + spin_lock_init(&port->lock); > + > + return uart_add_one_port(&liteuart_driver, &uart->port); > +} > +static int __init liteuart_init(void) > +{ > + int res; > + > + res = uart_register_driver(&liteuart_driver); > + if (res) > + return res; > + > + res = platform_driver_register(&liteuart_platform_driver); > + if (res) { > + uart_unregister_driver(&liteuart_driver); > + return res; > + } > + > + return 0; > +} > + > +static void __exit liteuart_exit(void) > +{ > + platform_driver_unregister(&liteuart_platform_driver); > + uart_unregister_driver(&liteuart_driver); > +} > + > +module_init(liteuart_init); > +module_exit(liteuart_exit); Several drivers call uart_{,un}register_driver() from their .probe() resp. .remove() callbacks, so they can use module_platform_driver() instead of the above boilerplate. Greg, what's your stance on that? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds