14 Jul, 2020

1 commit

  • Quite some non OF/ACPI users of irqdomains allocate firmware nodes of type
    IRQCHIP_FWNODE_NAMED or IRQCHIP_FWNODE_NAMED_ID and free them right after
    creating the irqdomain. The only purpose of these FW nodes is to convey
    name information. When this was introduced the core code did not store the
    pointer to the node in the irqdomain. A recent change stored the firmware
    node pointer in irqdomain for other reasons and missed to notice that the
    usage sites which do the alloc_fwnode/create_domain/free_fwnode sequence
    are broken by this. Storing a dangling pointer is dangerous itself, but in
    case that the domain is destroyed later on this leads to a double free.

    Remove the freeing of the firmware node after creating the irqdomain from
    all affected call sites to cure this.

    Fixes: 711419e504eb ("irqdomain: Add the missing assignment of domain->fwnode for named fwnode")
    Reported-by: Andy Shevchenko
    Signed-off-by: Thomas Gleixner
    Acked-by: Bjorn Helgaas
    Acked-by: Marc Zyngier
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/873661qakd.fsf@nanos.tec.linutronix.de

    Thomas Gleixner
     

16 Jun, 2020

1 commit

  • The driver name was accidentally removed when .probe() by was replaced
    by .probe_new() during an early patch review.

    [ 121.243012] EAX: c2a8bc64 EBX: 00000000 ECX: 00000000 EDX: 00000000
    [ 121.243012] ESI: c2a8bc79 EDI: 00000000 EBP: e54bdea8 ESP: e54bdea0
    [ 121.243012] DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068 EFLAGS: 00010286
    [ 121.243012] CR0: 80050033 CR2: 00000000 CR3: 02ec3000 CR4: 000006b0
    [ 121.243012] Call Trace:
    [ 121.243012] kset_find_obj+0x3d/0xc0
    [ 121.243012] driver_find+0x16/0x40
    [ 121.243012] driver_register+0x49/0x100
    [ 121.243012] ? i2c_for_each_dev+0x39/0x50
    [ 121.243012] ? __process_new_adapter+0x20/0x20
    [ 121.243012] ? cht_wc_driver_init+0x11/0x11
    [ 121.243012] i2c_register_driver+0x30/0x80
    [ 121.243012] ? intel_lpss_pci_driver_init+0x16/0x16
    [ 121.243012] mt6360_pmu_driver_init+0xf/0x11
    [ 121.243012] do_one_initcall+0x33/0x1a0
    [ 121.243012] ? parse_args+0x1eb/0x3d0
    [ 121.243012] ? __might_sleep+0x31/0x90
    [ 121.243012] ? kernel_init_freeable+0x10a/0x17f
    [ 121.243012] kernel_init_freeable+0x12c/0x17f
    [ 121.243012] ? rest_init+0x110/0x110
    [ 121.243012] kernel_init+0xb/0x100
    [ 121.243012] ? schedule_tail_wrapper+0x9/0xc
    [ 121.243012] ret_from_fork+0x19/0x24
    [ 121.243012] Modules linked in:
    [ 121.243012] CR2: 0000000000000000
    [ 121.243012] random: get_random_bytes called from init_oops_id+0x3a/0x40 with crng_init=0
    [ 121.243012] ---[ end trace 38a803400f1a2bee ]---
    [ 121.243012] EIP: strcmp+0x11/0x30

    Fixes: 7edd363421dab ("mfd: Add support for PMIC MT6360")
    Signed-off-by: Gene Chen
    Reviewed-by: Matthias Brugger
    [Lee: Taking the opportunity to fix the compatible string too 's/_/-/']
    Signed-off-by: Lee Jones

    Gene Chen
     

14 Jun, 2020

1 commit

  • Since commit 84af7a6194e4 ("checkpatch: kconfig: prefer 'help' over
    '---help---'"), the number of '---help---' has been gradually
    decreasing, but there are still more than 2400 instances.

    This commit finishes the conversion. While I touched the lines,
    I also fixed the indentation.

    There are a variety of indentation styles found.

    a) 4 spaces + '---help---'
    b) 7 spaces + '---help---'
    c) 8 spaces + '---help---'
    d) 1 space + 1 tab + '---help---'
    e) 1 tab + '---help---' (correct indentation)
    f) 1 tab + 1 space + '---help---'
    g) 1 tab + 2 spaces + '---help---'

    In order to convert all of them to 1 tab + 'help', I ran the
    following commend:

    $ find . -name 'Kconfig*' | xargs sed -i 's/^[[:space:]]*---help---/\thelp/'

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

06 Jun, 2020

1 commit

  • Pull GPIO updates from Linus Walleij:
    "This is the bulk of GPIO changes for the v5.8 kernel cycle.

    Core changes:

    - A new GPIO aggregator driver has been merged: this can join a few
    select GPIO lines into a new aggregated GPIO chip. This can be used
    for security: a process can be granted access to only these lines,
    for example for industrial control. Another way to use this is to
    reexpose certain select lines to a virtual machine or container.

    - Warn if the gpio-line-names is too long in he DT parser core.

    - GPIO lines can now be looked up by line name in addition to being
    looked up by offset.

    New drivers:

    - A new generic regmap GPIO driver has been merged. Too many regmap
    drivers are starting to look like each other so we need to create
    some common ground and try to move drivers over to using that.

    - The F7188X driver now supports F81865.

    Driver improvements:

    - Large improvements to the PCA953x expander, get multiple lines and
    several cleanups.

    - Large improvements to the DesignWare DWAPB driver, and Sergey Semin
    has volunteered to maintain it.

    - PL061 can now be built as a module, this is part of a bigger effort
    to make the ARM platforms more modular"

    * tag 'gpio-v5.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: (77 commits)
    gpio: pca953x: Drop unneeded ACPI_PTR()
    MAINTAINERS: Add gpio regmap section
    gpio: add a reusable generic gpio_chip using regmap
    gpiolib: Introduce gpiochip_irqchip_add_domain()
    gpio: gpiolib: Allow GPIO IRQs to lazy disable
    gpiolib: Separate GPIO_GET_LINEINFO_WATCH_IOCTL conditional
    gpio: rcar: Fix runtime PM imbalance on error
    gpio: pca935x: Allow IRQ support for driver built as a module
    gpio: pxa: Add COMPILE_TEST support
    dt-bindings: gpio: Add renesas,em-gio bindings
    MAINTAINERS: Fix file name for DesignWare GPIO DT schema
    gpio: dwapb: Remove unneeded has_irq member in struct dwapb_port_property
    gpio: dwapb: Don't use IRQ 0 as valid Linux interrupt
    gpio: dwapb: avoid error message for optional IRQ
    gpio: dwapb: Call acpi_gpiochip_free_interrupts() on GPIO chip de-registration
    gpio: max730x: bring gpiochip_add_data after port config
    MAINTAINERS: Add GPIO Aggregator section
    docs: gpio: Add GPIO Aggregator documentation
    gpio: Add GPIO Aggregator
    gpiolib: Add support for GPIO lookup by line name
    ...

    Linus Torvalds
     

05 Jun, 2020

1 commit

  • Pull ARM SoC updates from Arnd Bergmann:
    "One new platform gets added, the Realtek RTD1195, which is an older
    Cortex-a7 based relative of the RTD12xx chips that are already
    supported in arch/arm64. The platform may also be extended to support
    running 32-bit kernels on those 64-bit chips for memory-constrained
    machines.

    In the Renesas shmobile platform, we gain support for "RZ/G1H" or
    R8A7742, an eight-core chip based on Cortex-A15 and Cortex-A7 cores,
    originally released in 2016 as one of the last high-end 32-bit
    designs.

    There is ongoing cleanup for the integrator, tegra, imx, and omap2
    platforms, with integrator getting very close to the goal of having
    zero code in arch/arm/, and omap2 moving more of the chip specifics
    from old board code into device tree files.

    The Versatile Express platform is made more modular, with built-in
    drivers now becoming loadable modules. This is part of a greater
    effort for the Android OS to have a common kernel binary for all
    platforms and any platform specific code in loadable modules.

    The PXA platform drops support for Compulab's pxa2xx boards that had
    rather unusual flash and PCI drivers but no known users remaining. All
    device drivers specific to those boards can now get removed as well.

    Across platforms, there is ongoing cleanup, with Geert and Rob
    revisiting some a lot of Kconfig options"

    * tag 'arm-soc-5.8' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (94 commits)
    ARM: omap2: fix omap5_realtime_timer_init definition
    ARM: zynq: Don't select CONFIG_ICST
    ARM: OMAP2+: Fix regression for using local timer on non-SMP SoCs
    clk: versatile: Fix kconfig dependency on COMMON_CLK_VERSATILE
    ARM: davinci: fix build failure without I2C
    power: reset: vexpress: fix build issue
    power: vexpress: cleanup: use builtin_platform_driver
    power: vexpress: add suppress_bind_attrs to true
    Revert "ARM: vexpress: Don't select VEXPRESS_CONFIG"
    MAINTAINERS: pxa: remove Compulab arm/pxa support
    ARM: pxa: remove Compulab pxa2xx boards
    bus: arm-integrator-lm: Fix return value check in integrator_ap_lm_probe()
    soc: imx: move cpu code to drivers/soc/imx
    ARM: imx: move cpu definitions into a header
    ARM: imx: use device_initcall for imx_soc_device_init
    ARM: imx: pcm037: make pcm970_sja1000_platform_data static
    bus: ti-sysc: Timers no longer need legacy quirk handling
    ARM: OMAP2+: Drop old timer code for dmtimer and 32k counter
    ARM: dts: Configure system timers for omap2
    ARM: dts: Configure system timers for ti81xx
    ...

    Linus Torvalds
     

01 Jun, 2020

1 commit

  • Fixes the following build warning:

    >> drivers/mfd/mt6360-core.c:148:2: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]
    REGMAP_IRQ_REG_LINE(MT6360_CHG_TREG_EVT, 8),
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/regmap.h:1191:10: note: expanded from macro 'REGMAP_IRQ_REG_LINE'
    [_id] = { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/mfd/mt6360-core.c:124:2: note: previous initialization is here
    REGMAP_IRQ_REG_LINE(MT6360_CHG_TREG_EVT, 8),
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/regmap.h:1191:10: note: expanded from macro 'REGMAP_IRQ_REG_LINE'
    [_id] = { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 warning generated.

    Reported-by: kbuild test robot
    Signed-off-by: Lee Jones

    Lee Jones
     

27 May, 2020

1 commit


26 May, 2020

16 commits


25 May, 2020

1 commit

  • has_irq member of struct dwapb_port_property is used only in one place,
    so, make it local test instead and remove from the structure.
    This local test is using memchr_inv() which is quite efficient in comparison
    to the original loop and possible little overhead can be neglected.

    Signed-off-by: Andy Shevchenko
    Tested-by: Serge Semin
    Acked-by: Lee Jones
    Acked-by: Serge Semin
    Link: https://lore.kernel.org/r/20200519131233.59032-4-andriy.shevchenko@linux.intel.com
    Signed-off-by: Linus Walleij

    Andy Shevchenko
     

21 May, 2020

3 commits


20 May, 2020

1 commit

  • The Gateworks System Controller (GSC) is an I2C slave controller
    implemented with an MSP430 micro-controller whose firmware embeds the
    following features:
    - I/O expander (16 GPIO's) using PCA955x protocol
    - Real Time Clock using DS1672 protocol
    - User EEPROM using AT24 protocol
    - HWMON using custom protocol
    - Interrupt controller with tamper detect, user pushbotton
    - Watchdog controller capable of full board power-cycle
    - Power Control capable of full board power-cycle

    see http://trac.gateworks.com/wiki/gsc for more details

    Signed-off-by: Tim Harvey
    Signed-off-by: Lee Jones

    Tim Harvey
     

18 May, 2020

1 commit

  • i801_add_mux() fills in the GPIO lookup table by manually populating an
    array of gpiod_lookup structures. Use the existing GPIO_LOOKUP_IDX()
    helper macro instead, to relax a dependency on the gpiod_lookup
    structure's member names.

    Signed-off-by: Geert Uytterhoeven
    Acked-by: Lee Jones
    Link: https://lore.kernel.org/r/20200511145257.22970-3-geert+renesas@glider.be
    Signed-off-by: Linus Walleij

    Geert Uytterhoeven
     

14 May, 2020

5 commits

  • There's only a single caller of vexpress_config_set_master() from
    vexpress-sysreg.c. Let's just make the registers needed available to
    vexpress-config and move all the code there. The registers needed aren't
    used anywhere else either. With this, we can get rid of the private API
    between these 2 drivers.

    Cc: Lorenzo Pieralisi
    Cc: Linus Walleij
    Cc: Greg Kroah-Hartman
    Acked-by: Liviu Dudau
    Acked-by: Sudeep Holla
    Acked-by: Lee Jones
    Signed-off-by: Rob Herring

    Rob Herring
     
  • Enable building the vexpress-sysreg driver as a module.

    As deferred probe between the vexpress components works now, we don't
    need to create struct devices early with of_platform_device_create().

    Cc: Liviu Dudau
    Cc: Lorenzo Pieralisi
    Cc: Linus Walleij
    Reviewed-by: Sudeep Holla
    Acked-by: Lee Jones
    Signed-off-by: Rob Herring

    Rob Herring
     
  • Use the managed devm_gpiochip_add_data() and devm_mfd_add_devices()
    instead of their unmanaged counterparts. With this, no .remove() hook is
    needed for driver unbind.

    Cc: Lorenzo Pieralisi
    Cc: Linus Walleij
    Reviewed-by: Sudeep Holla
    Acked-by: Arnd Bergmann
    Acked-by: Liviu Dudau
    Acked-by: Lee Jones
    Signed-off-by: Rob Herring

    Rob Herring
     
  • The "sys_id", "sys_misc" and "sys_procid" devices don't have a user
    anywhere in the tree and do nothing more than create a syscon regmap for
    a single register or 2. That's an overkill for creating child devices.
    Let's just remove them.

    Cc: Liviu Dudau
    Cc: Lorenzo Pieralisi
    Cc: Linus Walleij
    Reviewed-by: Sudeep Holla
    Acked-by: Lee Jones
    Signed-off-by: Rob Herring

    Rob Herring
     
  • Nothing in the VExpress sysregs nor the MFD child drivers use
    CONFIG_CLKSRC_MMIO. There's the 24MHz counter, but that's handled by
    drivers/clocksource/timer-versatile.c which doesn't use
    CONFIG_CLKSRC_MMIO either. So let's just drop CONFIG_CLKSRC_MMIO.

    As the !ARCH_USES_GETTIMEOFFSET dependency was added for
    CONFIG_CLKSRC_MMIO, that can be dropped, too.

    Cc: Lorenzo Pieralisi
    Cc: Linus Walleij
    Reviewed-by: Sudeep Holla
    Acked-by: Arnd Bergmann
    Acked-by: Liviu Dudau
    Acked-by: Lee Jones
    Signed-off-by: Rob Herring

    Rob Herring
     

06 May, 2020

1 commit

  • vexpress_flags_set() is only used by the platform SMP related code and
    has nothing to do with the vexpress-sysreg MFD driver other than both
    access the same h/w block. It's also only needed for 32-bit systems and
    must be built-in for them. Let's move vexpress_flags_set() closer to
    where it is being used. This will allow for vexpress-sysreg to be built
    as a module.

    Cc: Lorenzo Pieralisi
    Cc: Linus Walleij
    Reviewed-by: Sudeep Holla
    Acked-by: Arnd Bergmann
    Acked-by: Liviu Dudau
    Acked-by: Lee Jones
    Signed-off-by: Rob Herring

    Rob Herring
     

24 Apr, 2020

4 commits

  • This driver only creates a bunch of platform devices sharing resources
    belonging to the PMC device. This is pretty much what MFD subsystem is
    for so move the driver there, renaming it to intel_pmc_bxt.c which
    should be more clear what it is.

    MFD subsystem provides nice helper APIs for subdevice creation so
    convert the driver to use those. Unfortunately the ACPI device includes
    separate resources for most of the subdevices so we cannot simply call
    mfd_add_devices() to create all of them but instead we need to call it
    separately for each device.

    The new MFD driver continues to expose two sysfs attributes that allow
    userspace to send IPC commands to the PMC/SCU to avoid breaking any
    existing applications that may use these. Generally this is bad idea so
    document this in the ABI documentation.

    Signed-off-by: Mika Westerberg
    Reviewed-by: Andy Shevchenko
    Signed-off-by: Lee Jones

    Mika Westerberg
     
  • This converts the Intel Merrifield PMIC driver over the new SCU IPC API
    where the SCU IPC instance is passed to the functions.

    Signed-off-by: Mika Westerberg
    Reviewed-by: Andy Shevchenko
    Signed-off-by: Lee Jones

    Mika Westerberg
     
  • Convert the Intel Broxton Whiskey Cover PMIC driver to use the new SCU
    IPC API. This allows us to get rid of the PMC IPC implementation which
    is now covered in SCU IPC driver. We drop the error log if the IPC
    command fails because intel_scu_ipc_dev_command() does that already.

    Also move PMIC specific IPC message constants to the PMIC driver from
    the intel_pmc_ipc.h header.

    Signed-off-by: Mika Westerberg
    Reviewed-by: Andy Shevchenko
    Signed-off-by: Lee Jones

    Mika Westerberg
     
  • The SCU IPC functionality is usable outside of Intel MID devices. For
    example modern Intel CPUs include the same thing but now it is called
    PMC (Power Management Controller) instead of SCU. To make the IPC
    available for those split the driver into core part (intel_scu_ipc.c)
    and the SCU PCI driver part (intel_scu_pcidrv.c) which then calls the
    former before it goes and creates rest of the SCU devices. The SCU IPC
    will also register a new class that gets assigned to the device that is
    created under the parent PCI device.

    We also split the Kconfig symbols so that INTEL_SCU_IPC enables the SCU
    IPC library and INTEL_SCU_PCI the SCU driver and convert the users
    accordingly. While there remove default y from the INTEL_SCU_PCI symbol
    as it is already selected by X86_INTEL_MID.

    Signed-off-by: Mika Westerberg
    Reviewed-by: Andy Shevchenko
    Signed-off-by: Lee Jones

    Mika Westerberg
     

30 Mar, 2020

1 commit

  • Intel Elkhart Lake LPSS I2C has 100 MHz input clock instead of 133 MHz
    that was our preliminary information. This will result slower I2C bus
    clock when driver calculates its timing parameters in case ACPI tables
    don't provide them.

    Slower I2C bus clock is allowed but let's fix this to match with
    reality.

    While at it, keep the same default I2C device properties as Intel
    Broxton since it is not known do they need any update.

    Signed-off-by: Jarkko Nikula
    Reviewed-by: Andy Shevchenko
    Signed-off-by: Lee Jones

    Jarkko Nikula