Re: [pinmux scripts PATCH 1/3] Update kernel driver template

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 20, 2019 at 07:00:53PM +0200, Thierry Reding wrote:
> From: Thierry Reding <treding@xxxxxxxxxx>
> 
> Some changes in recent years have modified the upstream kernel driver in
> some ways that make it incompatible with the current template. Update
> the template to take into account changes introduced by the following
> commits:
> 
> 	commit e3d2160f12d6aa7a87d9db09d8458b4a3492cd45
> 	Author: Paul Gortmaker <paul.gortmaker@xxxxxxxxxxxxx>
> 	Date:   Mon May 22 16:56:47 2017 -0400
> 
> 	    pinctrl: tegra: clean up modular vs. non-modular distinctions
> 
> 	    None of the Kconfigs for any of these drivers are tristate,
> 	    meaning that they currently are not being built as a module by anyone.
> 
> 	    Lets remove the modular code that is essentially orphaned, so that
> 	    when reading the drivers there is no doubt they are builtin-only.  All
> 	    drivers get similar changes, so they are handled in batch.
> 
> 	    We remove module.h from code that isn't doing anything modular at
> 	    all;  if they have __init sections, then replace it with init.h.
> 
> 	    A couple drivers have module_exit() code that is essentially orphaned,
> 	    and so we remove that.
> 
> 	    Quite a few bool drivers (hence non-modular) are converted over to
> 	    to builtin_platform_driver().
> 
> 	    Since module_platform_driver() uses the same init level priority as
> 	    builtin_platform_driver() the init ordering remains unchanged with
> 	    this commit.
> 
> 	    Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.
> 
> 	    We also delete the MODULE_LICENSE tag etc. since all that information
> 	    was (or is now) contained at the top of the file in the comments.
> 
> 	    Cc: Linus Walleij <linus.walleij@xxxxxxxxxx>
> 	    Cc: Stephen Warren <swarren@xxxxxxxxxxxxx>
> 	    Cc: Thierry Reding <thierry.reding@xxxxxxxxx>
> 	    Cc: Alexandre Courbot <gnurou@xxxxxxxxx>
> 	    Cc: Pritesh Raithatha <praithatha@xxxxxxxxxx>
> 	    Cc: Ashwini Ghuge <aghuge@xxxxxxxxxx>
> 	    Cc: linux-gpio@xxxxxxxxxxxxxxx
> 	    Cc: linux-tegra@xxxxxxxxxxxxxxx
> 	    Signed-off-by: Paul Gortmaker <paul.gortmaker@xxxxxxxxxxxxx>
> 	    Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx>
> 
> 	commit 3c94d2d08a032d911bbe34f2edb24cb63a63644a
> 	Author: Stefan Agner <stefan@xxxxxxxx>
> 	Date:   Thu Jul 26 17:40:24 2018 +0200
> 
> 	    pinctrl: tegra: define GPIO compatible node per SoC
> 
> 	    Tegra 2 uses a different GPIO controller which uses "tegra20-gpio" as
> 	    compatible string.
> 
> 	    Make the compatible string the GPIO node is using a SoC specific
> 	    property. This prevents the kernel from registering the GPIO range
> 	    twice in case the GPIO range is specified in the device tree.
> 
> 	    Fixes: 9462510ce31e ("pinctrl: tegra: Only set the gpio range if needed")
> 	    Signed-off-by: Stefan Agner <stefan@xxxxxxxx>
> 	    Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx>
> 
> 	commit 1e0813ee5599932c856bda64a568895ed7a33d3a
> 	Author: Dmitry Osipenko <digetx@xxxxxxxxx>
> 	Date:   Thu Aug 2 14:11:43 2018 +0300
> 
> 	    pinctrl: tegra: Move drivers registration to arch_init level
> 
> 	    There is a bug in regards to deferred probing within the drivers core
> 	    that causes GPIO-driver to suspend after its users. The bug appears if
> 	    GPIO-driver probe is getting deferred, which happens after introducing
> 	    dependency on PINCTRL-driver for the GPIO-driver by defining "gpio-ranges"
> 	    property in device-tree. The bug in the drivers core is old (more than 4
> 	    years now) and is well known, unfortunately there is no easy fix for it.
> 	    The good news is that we can workaround the deferred probe issue by
> 	    changing GPIO / PINCTRL drivers registration order and hence by moving
> 	    PINCTRL driver registration to the arch_init level and GPIO to the
> 	    subsys_init.
> 
> 	    Signed-off-by: Dmitry Osipenko <digetx@xxxxxxxxx>
> 	    Acked-by: Stefan Agner <stefan@xxxxxxxx>
> 	    Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx>
> 
> Note that the last one is something that we probably should fix
> correctly by using device links rather than working around it by playing
> init level tricks.
> 
> Signed-off-by: Thierry Reding <treding@xxxxxxxxxx>
> ---
>  soc-to-kernel-pinctrl-driver.py | 27 +++++++++++----------------
>  1 file changed, 11 insertions(+), 16 deletions(-)

There was supposed to be a cover letter for this... Anyway, patches 1
and 2 basically get the kernel driver template up to date with the
latest kernel driver. Patch 3 is Sowjanya's patch from yesterday but
with one suggestion worked in to make the parked_bitmask field take 0
as the special value meaning "unsupported".

I've also sent out two patches that are the result of regenerating the
various SoC drivers from the updated script and tables.

Thierry

> 
> diff --git a/soc-to-kernel-pinctrl-driver.py b/soc-to-kernel-pinctrl-driver.py
> index 65e4c604f1c9..37f34b15db2b 100755
> --- a/soc-to-kernel-pinctrl-driver.py
> +++ b/soc-to-kernel-pinctrl-driver.py
> @@ -41,22 +41,16 @@ if dbg: print(args)
>  soc = tegra_pmx_soc_parser.load_soc(args.soc)
>  
>  print('''\
> +// SPDX-License-Identifier: GPL-2.0-only
>  /*
>   * Pinctrl data for the NVIDIA %s pinmux
>   *
> - * Copyright (c) %s, NVIDIA CORPORATION.  All rights reserved.
> - *
> - * This program is free software; you can redistribute it and/or modify it
> - * under the terms and conditions of the GNU General Public License,
> - * version 2, as published by the Free Software Foundation.
> + * Author: %s
>   *
> - * This program is distributed in the hope it will be useful, but WITHOUT
> - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
> - * more details.
> + * Copyright (c) %s, NVIDIA CORPORATION.  All rights reserved.
>   */
>  
> -#include <linux/module.h>
> +#include <linux/init.h>
>  #include <linux/of.h>
>  #include <linux/platform_device.h>
>  #include <linux/pinctrl/pinctrl.h>
> @@ -68,7 +62,7 @@ print('''\
>   * Most pins affected by the pinmux can also be GPIOs. Define these first.
>   * These must match how the GPIO driver names/numbers its pins.
>   */
> -''' % (soc.titlename, soc.kernel_copyright_years), end='')
> +''' % (soc.titlename, soc.kernel_author, soc.kernel_copyright_years), end='')
>  
>  # Do not add any more exceptions here; new SoCs should be formatted correctly
>  if soc.name == 'tegra30':
> @@ -615,6 +609,7 @@ print('''\
>  
>  static const struct tegra_pinctrl_soc_data %(soc)s_pinctrl = {
>  	.ngpios = NUM_GPIOS,
> +	.gpio_compatible = "nvidia,%(soc)s-gpio",
>  	.pins = %(soc)s_pins,
>  	.npins = ARRAY_SIZE(%(soc)s_pins),
>  	.functions = %(soc)s_functions,
> @@ -635,7 +630,6 @@ static const struct of_device_id %(soc)s_pinctrl_of_match[] = {
>  	{ .compatible = "nvidia,%(soc)s-pinmux", },
>  	{ },
>  };
> -MODULE_DEVICE_TABLE(of, %(soc)s_pinctrl_of_match);
>  
>  static struct platform_driver %(soc)s_pinctrl_driver = {
>  	.driver = {
> @@ -644,9 +638,10 @@ static struct platform_driver %(soc)s_pinctrl_driver = {
>  	},
>  	.probe = %(soc)s_pinctrl_probe,
>  };
> -module_platform_driver(%(soc)s_pinctrl_driver);
>  
> -MODULE_AUTHOR("%(author)s");
> -MODULE_DESCRIPTION("NVIDIA %(usoc)s pinctrl driver");
> -MODULE_LICENSE("GPL v2");
> +static int __init %(soc)s_pinctrl_init(void)
> +{
> +	return platform_driver_register(&%(soc)s_pinctrl_driver);
> +}
> +arch_initcall(%(soc)s_pinctrl_init);
>  ''' % socvars, end='')
> -- 
> 2.21.0
> 

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux