05 Apr, 2018

1 commit

  • Pull irq updates from Thomas Gleixner:
    "The usual pile of boring changes:

    - Consolidate tasklet functions to share code instead of duplicating
    it

    - The first step for making the low level entry handler management on
    multi-platform kernels generic

    - A new sysfs file which allows to retrieve the wakeup state of
    interrupts.

    - Ensure that the interrupt thread follows the effective affinity and
    not the programmed affinity to avoid cross core wakeups.

    - Two new interrupt controller drivers (Microsemi Ocelot and Qualcomm
    PDC)

    - Fix the wakeup path clock handling for Reneasas interrupt chips.

    - Rework the boot time register reset for ARM GIC-V2/3

    - Better suspend/resume support for ARM GIV-V3/ITS

    - Add missing locking to the ARM GIC set_type() callback

    - Small fixes for the irq simulator code

    - SPDX identifiers for the irq core code and removal of boiler plate

    - Small cleanups all over the place"

    * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (37 commits)
    openrisc: Set CONFIG_MULTI_IRQ_HANDLER
    arm64: Set CONFIG_MULTI_IRQ_HANDLER
    genirq: Make GENERIC_IRQ_MULTI_HANDLER depend on !MULTI_IRQ_HANDLER
    irqchip/gic: Take lock when updating irq type
    irqchip/gic: Update supports_deactivate static key to modern api
    irqchip/gic-v3: Ensure GICR_CTLR.EnableLPI=0 is observed before enabling
    irqchip: Add a driver for the Microsemi Ocelot controller
    dt-bindings: interrupt-controller: Add binding for the Microsemi Ocelot interrupt controller
    irqchip/gic-v3: Probe for SCR_EL3 being clear before resetting AP0Rn
    irqchip/gic-v3: Don't try to reset AP0Rn
    irqchip/gic-v3: Do not check trigger configuration of partitionned LPIs
    genirq: Remove license boilerplate/references
    genirq: Add missing SPDX identifiers
    genirq/matrix: Cleanup SPDX identifier
    genirq: Cleanup top of file comments
    genirq: Pass desc to __irq_free instead of irq number
    irqchip/gic-v3: Loudly complain about the use of IRQ_TYPE_NONE
    irqchip/gic: Loudly complain about the use of IRQ_TYPE_NONE
    RISC-V: Move to the new GENERIC_IRQ_MULTI_HANDLER handler
    genirq: Add CONFIG_GENERIC_IRQ_MULTI_HANDLER
    ...

    Linus Torvalds
     

03 Apr, 2018

1 commit

  • Pul removal of obsolete architecture ports from Arnd Bergmann:
    "This removes the entire architecture code for blackfin, cris, frv,
    m32r, metag, mn10300, score, and tile, including the associated device
    drivers.

    I have been working with the (former) maintainers for each one to
    ensure that my interpretation was right and the code is definitely
    unused in mainline kernels. Many had fond memories of working on the
    respective ports to start with and getting them included in upstream,
    but also saw no point in keeping the port alive without any users.

    In the end, it seems that while the eight architectures are extremely
    different, they all suffered the same fate: There was one company in
    charge of an SoC line, a CPU microarchitecture and a software
    ecosystem, which was more costly than licensing newer off-the-shelf
    CPU cores from a third party (typically ARM, MIPS, or RISC-V). It
    seems that all the SoC product lines are still around, but have not
    used the custom CPU architectures for several years at this point. In
    contrast, CPU instruction sets that remain popular and have actively
    maintained kernel ports tend to all be used across multiple licensees.

    [ See the new nds32 port merged in the previous commit for the next
    generation of "one company in charge of an SoC line, a CPU
    microarchitecture and a software ecosystem" - Linus ]

    The removal came out of a discussion that is now documented at
    https://lwn.net/Articles/748074/. Unlike the original plans, I'm not
    marking any ports as deprecated but remove them all at once after I
    made sure that they are all unused. Some architectures (notably tile,
    mn10300, and blackfin) are still being shipped in products with old
    kernels, but those products will never be updated to newer kernel
    releases.

    After this series, we still have a few architectures without mainline
    gcc support:

    - unicore32 and hexagon both have very outdated gcc releases, but the
    maintainers promised to work on providing something newer. At least
    in case of hexagon, this will only be llvm, not gcc.

    - openrisc, risc-v and nds32 are still in the process of finishing
    their support or getting it added to mainline gcc in the first
    place. They all have patched gcc-7.3 ports that work to some
    degree, but complete upstream support won't happen before gcc-8.1.
    Csky posted their first kernel patch set last week, their situation
    will be similar

    [ Palmer Dabbelt points out that RISC-V support is in mainline gcc
    since gcc-7, although gcc-7.3.0 is the recommended minimum - Linus ]"

    This really says it all:

    2498 files changed, 95 insertions(+), 467668 deletions(-)

    * tag 'arch-removal' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic: (74 commits)
    MAINTAINERS: UNICORE32: Change email account
    staging: iio: remove iio-trig-bfin-timer driver
    tty: hvc: remove tile driver
    tty: remove bfin_jtag_comm and hvc_bfin_jtag drivers
    serial: remove tile uart driver
    serial: remove m32r_sio driver
    serial: remove blackfin drivers
    serial: remove cris/etrax uart drivers
    usb: Remove Blackfin references in USB support
    usb: isp1362: remove blackfin arch glue
    usb: musb: remove blackfin port
    usb: host: remove tilegx platform glue
    pwm: remove pwm-bfin driver
    i2c: remove bfin-twi driver
    spi: remove blackfin related host drivers
    watchdog: remove bfin_wdt driver
    can: remove bfin_can driver
    mmc: remove bfin_sdh driver
    input: misc: remove blackfin rotary driver
    input: keyboard: remove bf54x driver
    ...

    Linus Torvalds
     

23 Mar, 2018

1 commit

  • Booting with GICR_CTLR.EnableLPI=1 is usually a bad idea, and may
    result in subtle memory corruption. Detecting this is thus pretty
    important.

    On detecting that LPIs are still enabled, we taint the kernel (because
    we're not sure of anything anymore), and try to disable LPIs. This can
    fail, as implementations are allowed to implement GICR_CTLR.EnableLPI
    as a one-way enable, meaning the redistributors cannot be reprogrammed
    with new tables.

    Should this happen, we fail probing the redistributor and warn the user
    that things are pretty dire.

    Signed-off-by: Shanker Donthineni
    [maz: reworded changelog, minor comment and message changes]
    Signed-off-by: Marc Zyngier

    Shanker Donthineni
     

15 Mar, 2018

1 commit

  • The vgic code is trying to be clever when injecting GICv2 SGIs,
    and will happily populate LRs with the same interrupt number if
    they come from multiple vcpus (after all, they are distinct
    interrupt sources).

    Unfortunately, this is against the letter of the architecture,
    and the GICv2 architecture spec says "Each valid interrupt stored
    in the List registers must have a unique VirtualID for that
    virtual CPU interface.". GICv3 has similar (although slightly
    ambiguous) restrictions.

    This results in guests locking up when using GICv2-on-GICv3, for
    example. The obvious fix is to stop trying so hard, and inject
    a single vcpu per SGI per guest entry. After all, pending SGIs
    with multiple source vcpus are pretty rare, and are mostly seen
    in scenario where the physical CPUs are severely overcomitted.

    But as we now only inject a single instance of a multi-source SGI per
    vcpu entry, we may delay those interrupts for longer than strictly
    necessary, and run the risk of injecting lower priority interrupts
    in the meantime.

    In order to address this, we adopt a three stage strategy:
    - If we encounter a multi-source SGI in the AP list while computing
    its depth, we force the list to be sorted
    - When populating the LRs, we prevent the injection of any interrupt
    of lower priority than that of the first multi-source SGI we've
    injected.
    - Finally, the injection of a multi-source SGI triggers the request
    of a maintenance interrupt when there will be no pending interrupt
    in the LRs (HCR_NPIE).

    At the point where the last pending interrupt in the LRs switches
    from Pending to Active, the maintenance interrupt will be delivered,
    allowing us to add the remaining SGIs using the same process.

    Cc: stable@vger.kernel.org
    Fixes: 0919e84c0fc1 ("KVM: arm/arm64: vgic-new: Add IRQ sync/flush framework")
    Acked-by: Christoffer Dall
    Signed-off-by: Marc Zyngier

    Marc Zyngier
     

14 Mar, 2018

1 commit

  • Some platforms power off GIC logic in suspend, so we need to
    save/restore state. The distributor and redistributor registers need
    to be handled in firmware code due to access permissions on those
    registers, but the ITS registers can be restored in the kernel.

    We limit this to systems where the ITS collections are implemented
    in HW (as opposed to being backed by memory tables), as they are
    the only ones that cannot be dealt with by the firmware.

    Signed-off-by: Derek Basehore
    [maz: fixed changelog, dropped DT property, limited to HCC being >0]
    Signed-off-by: Marc Zyngier

    Derek Basehore
     

23 Feb, 2018

1 commit

  • Now that arch/metag/ has been removed, remove the two metag irqchip
    drivers. They are of no value without the architecture code.
    - irq-metag: Meta internal (HWSTATMETA) interrupt code.
    - irq-metag-ext: Meta External interrupt code.

    Signed-off-by: James Hogan
    Cc: Thomas Gleixner
    Cc: Jason Cooper
    Cc: Marc Zyngier
    Cc: linux-metag@vger.kernel.org

    James Hogan
     

27 Nov, 2017

1 commit

  • Pull irq fixes from Thomas Glexiner:

    - unbreak the irq trigger type check for legacy platforms

    - a handful fixes for ARM GIC v3/4 interrupt controllers

    - a few trivial fixes all over the place

    * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    genirq/matrix: Make - vs ?: Precedence explicit
    irqchip/imgpdc: Use resource_size function on resource object
    irqchip/qcom: Fix u32 comparison with value less than zero
    irqchip/exiu: Fix return value check in exiu_init()
    irqchip/gic-v3-its: Remove artificial dependency on PCI
    irqchip/gic-v4: Add forward definition of struct irq_domain_ops
    irqchip/gic-v3: pr_err() strings should end with newlines
    irqchip/s3c24xx: pr_err() strings should end with newlines
    irqchip/gic-v3: Fix ppi-partitions lookup
    irqchip/gic-v4: Clear IRQ_DISABLE_UNLAZY again if mapping fails
    genirq: Track whether the trigger type has been set

    Linus Torvalds
     

17 Nov, 2017

1 commit

  • Pull ARM SoC platform updates from Arnd Bergmann:
    "Most of the commits are for defconfig changes, to enable newly added
    drivers or features that people have started using. For the changed
    lines lines, we have mostly cleanups, the affected platforms are OMAP,
    Versatile, EP93xx, Samsung, Broadcom, i.MX, and Actions.

    The largest single change is the introduction of the TI "sysc" bus
    driver, with the intention of cleaning up more legacy code.

    Two new SoC platforms get added this time:

    - Allwinner R40 is a modernized version of the A20 chip, now with a
    Quad-Core ARM Cortex-A7. According to the manufacturer, it is
    intended for "Smart Hardware"

    - Broadcom Hurricane 2 (Aka Strataconnect BCM5334X) is a family of
    chips meant for managed gigabit ethernet switches, based around a
    Cortex-A9 CPU.

    Finally, we gain SMP support for two platforms: Renesas R-Car E2 and
    Amlogic Meson8/8b, which were previously added but only supported
    uniprocessor operation"

    * tag 'armsoc-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (118 commits)
    ARM: multi_v7_defconfig: Select RPMSG_VIRTIO as module
    ARM: multi_v7_defconfig: enable CONFIG_GPIO_UNIPHIER
    arm64: defconfig: enable CONFIG_GPIO_UNIPHIER
    ARM: meson: enable MESON_IRQ_GPIO in Kconfig for meson8b
    ARM: meson: Add SMP bringup code for Meson8 and Meson8b
    ARM: smp_scu: allow the platform code to read the SCU CPU status
    ARM: smp_scu: add a helper for powering on a specific CPU
    dt-bindings: Amlogic: Add Meson8 and Meson8b SMP related documentation
    ARM: OMAP3: Delete an unnecessary variable initialisation in omap3xxx_hwmod_init()
    ARM: OMAP3: Use common error handling code in omap3xxx_hwmod_init()
    ARM: defconfig: select the right SX150X driver
    arm64: defconfig: Enable QCOM_IOMMU
    arm64: Add ThunderX drivers to defconfig
    arm64: defconfig: Enable Tegra PCI controller
    cpufreq: imx6q: Move speed grading check to cpufreq driver
    arm64: defconfig: re-enable Qualcomm DB410c USB
    ARM: configs: stm32: Add MDMA support in STM32 defconfig
    ARM: imx: Enable cpuidle for i.MX6DL starting at 1.1
    bus: ti-sysc: Fix unbalanced pm_runtime_enable by adding remove
    bus: ti-sysc: mark PM functions as __maybe_unused
    ...

    Linus Torvalds
     

14 Nov, 2017

3 commits

  • …arm-platforms into irq/urgent

    Pull irqchip updates for 4.15, take #4 from Marc Zyngier

    - A core irq fix for legacy cases where the irq trigger is not reported
    by firmware

    - A couple of GICv3/4 fixes (Kconfig, of-node refcount, error handling)

    - Trivial pr_err fixes

    Thomas Gleixner
     
  • Pull irq core updates from Thomas Gleixner:
    "A rather large update for the interrupt core code and the irq chip drivers:

    - Add a new bitmap matrix allocator and supporting changes, which is
    used to replace the x86 vector allocator which comes with separate
    pull request. This allows to replace the convoluted nested loop
    allocation function in x86 with a facility which supports the
    recently added property of managed interrupts proper and allows to
    switch to a best effort vector reservation scheme, which addresses
    problems with vector exhaustion.

    - A large update to the ARM GIC-V3-ITS driver adding support for
    range selectors.

    - New interrupt controllers:
    - Meson and Meson8 GPIO
    - BCM7271 L2
    - Socionext EXIU

    If you expected that this will stop at some point, I have to
    disappoint you. There are new ones posted already. Sigh!

    - STM32 interrupt controller support for new platforms.

    - A pile of fixes, cleanups and updates to the MIPS GIC driver

    - The usual small fixes, cleanups and updates all over the place.
    Most visible one is to move the irq chip drivers Kconfig switches
    into a separate Kconfig menu"

    * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (70 commits)
    genirq: Fix type of shifting literal 1 in __setup_irq()
    irqdomain: Drop pointless NULL check in virq_debug_show_one
    genirq/proc: Return proper error code when irq_set_affinity() fails
    irq/work: Use llist_for_each_entry_safe
    irqchip: mips-gic: Print warning if inherited GIC base is used
    irqchip/mips-gic: Add pr_fmt and reword pr_* messages
    irqchip/stm32: Move the wakeup on interrupt mask
    irqchip/stm32: Fix initial values
    irqchip/stm32: Add stm32h7 support
    dt-bindings/interrupt-controllers: Add compatible string for stm32h7
    irqchip/stm32: Add multi-bank management
    irqchip/stm32: Select GENERIC_IRQ_CHIP
    irqchip/exiu: Add support for Socionext Synquacer EXIU controller
    dt-bindings: Add description of Socionext EXIU interrupt controller
    irqchip/gic-v3-its: Fix VPE activate callback return value
    irqchip: mips-gic: Make IPI bitmaps static
    irqchip: mips-gic: Share register writes in gic_set_type()
    irqchip: mips-gic: Remove gic_vpes variable
    irqchip: mips-gic: Use num_possible_cpus() to reserve IPIs
    irqchip: mips-gic: Configure EIC when CPUs come online
    ...

    Linus Torvalds
     
  • In some randconfig scenarios, including arm-gic-v4.h results
    in a spurious wawrning about the $SUBJECT structure not being
    defined. Adding a forward definition keeps it quiet.

    Reported-by: Arnd Bergmann
    Signed-off-by: Marc Zyngier

    Marc Zyngier
     

02 Nov, 2017

2 commits

  • So far, we require the hypervisor to update the VLPI properties
    once the the VLPI mapping has been established. While this
    makes it easy for the ITS driver, it creates a window where
    an incoming interrupt can be delivered with an unknown set
    of properties. Not very nice.

    Instead, let's add a "properties" field to the mapping structure,
    and use that to configure the VLPI before it actually gets mapped.

    Reviewed-by: Christoffer Dall
    Signed-off-by: Marc Zyngier

    Marc Zyngier
     
  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

19 Oct, 2017

3 commits

  • So far, we map all VPEs on all ITSs. While this is not wrong,
    this is quite a big hammer, as moving a VPE around requires
    all ITSs to be synchronized. Needles to say, this is an
    expensive proposition.

    Instead, let's switch to a mode where we issue VMAPP commands
    only on ITSs that are actually involved in reporting interrupts
    to the given VM.

    For that purpose, we refcount the number of interrupts are are
    mapped for this VM on each ITS, performing the map/unmap
    operations as required. It then allows us to use this refcount
    to only issue VMOVP to the ITSs that need to know about this
    VM.

    Signed-off-by: Marc Zyngier

    Marc Zyngier
     
  • As we're about to make use of the maximum number of ITSs in
    a GICv4 system, let's make this value global (and rename it to
    GICv4_ITS_LIST_MAX).

    Signed-off-by: Marc Zyngier

    Marc Zyngier
     
  • A new feature Range Selector (RS) has been added to GIC specification
    in order to support more than 16 CPUs at affinity level 0. New fields
    are introduced in SGI system registers (ICC_SGI0R_EL1, ICC_SGI1R_EL1
    and ICC_ASGI1R_EL1) to relax an artificial limit of 16 at level 0.

    - A new RSS field in ICC_CTLR_EL3, ICC_CTLR_EL1 and ICV_CTLR_EL1:
    [18] - Range Selector Support (RSS)
    0b0 = Targeted SGIs with affinity level 0 values of 0-15 are supported.
    0b1 = Targeted SGIs with affinity level 0 values of 0-255 are supported.

    - A new RS field in ICC_SGI0R_EL1, ICC_SGI1R_EL1 and ICC_ASGI1R_EL1:
    [47:44] - RangeSelector (RS) which group of 16 TargetList[n] field
    TargetList[n] represents aff0 value ((RS*16)+n)
    When ICC_CTLR_EL3.RSS==0 or ICC_CTLR_EL1.RSS==0, RS is RES0.

    - A new RSS field in GICD_TYPER:
    [26] - Range Selector Support (RSS)
    0b0 = Targeted SGIs with affinity level 0 values of 0-15 are supported.
    0b1 = Targeted SGIs with affinity level 0 values of 0-255 are supported.

    Signed-off-by: Shanker Donthineni
    Signed-off-by: Marc Zyngier

    Shanker Donthineni
     

17 Oct, 2017

1 commit

  • All mach-omap2 variants are device tree only now, so this function is dead
    code. Remove it.

    Signed-off-by: Ladislav Michl
    Signed-off-by: Thomas Gleixner
    Acked-by: Tony Lindgren
    Cc: Marc Zyngier
    Cc: linux-omap@vger.kernel.org
    Cc: Jason Cooper
    Link: https://lkml.kernel.org/r/20171016160422.uu2i7vvrgy7cc4aw@lenoch

    Ladislav Michl
     

13 Oct, 2017

1 commit


26 Sep, 2017

1 commit

  • In order to easily provide SMP for BCM2837 on 32-bit and 64-bit
    the SMP startup code was placed in irq-bcm2836. That's not the
    right approach. So move this code where it belongs.

    Signed-off-by: Stefan Wahren
    Fixes: 41f4988cc287 ("irqchip/bcm2836: Add SMP support for the 2836")
    Tested-by: Eric Anholt
    Acked-by: Marc Zyngier

    Stefan Wahren
     

16 Sep, 2017

1 commit

  • Pull MIPS updates from Ralf Baechle:
    "This is the main pull request for 4.14 for MIPS; below a summary of
    the non-merge commits:

    CM:
    - Rename mips_cm_base to mips_gcr_base
    - Specify register size when generating accessors
    - Use BIT/GENMASK for register fields, order & drop shifts
    - Add cluster & block args to mips_cm_lock_other()

    CPC:
    - Use common CPS accessor generation macros
    - Use BIT/GENMASK for register fields, order & drop shifts
    - Introduce register modify (set/clear/change) accessors
    - Use change_*, set_* & clear_* where appropriate
    - Add CM/CPC 3.5 register definitions
    - Use GlobalNumber macros rather than magic numbers
    - Have asm/mips-cps.h include CM & CPC headers
    - Cluster support for topology functions
    - Detect CPUs in secondary clusters

    CPS:
    - Read GIC_VL_IDENT directly, not via irqchip driver

    DMA:
    - Consolidate coherent and non-coherent dma_alloc code
    - Don't use dma_cache_sync to implement fd_cacheflush

    FPU emulation / FP assist code:
    - Another series of 14 commits fixing corner cases such as NaN
    propgagation and other special input values.
    - Zero bits 32-63 of the result for a CLASS.D instruction.
    - Enhanced statics via debugfs
    - Do not use bools for arithmetic. GCC 7.1 moans about this.
    - Correct user fault_addr type

    Generic MIPS:
    - Enhancement of stack backtraces
    - Cleanup from non-existing options
    - Handle non word sized instructions when examining frame
    - Fix detection and decoding of ADDIUSP instruction
    - Fix decoding of SWSP16 instruction
    - Refactor handling of stack pointer in get_frame_info
    - Remove unreachable code from force_fcr31_sig()
    - Convert to using %pOF instead of full_name
    - Remove the R6000 support.
    - Move FP code from *_switch.S to *_fpu.S
    - Remove unused ST_OFF from r2300_switch.S
    - Allow platform to specify multiple its.S files
    - Add #includes to various files to ensure code builds reliable and
    without warning..
    - Remove __invalidate_kernel_vmap_range
    - Remove plat_timer_setup
    - Declare various variables & functions static
    - Abstract CPU core & VP(E) ID access through accessor functions
    - Store core & VP IDs in GlobalNumber-style variable
    - Unify checks for sibling CPUs
    - Add CPU cluster number accessors
    - Prevent direct use of generic_defconfig
    - Make CONFIG_MIPS_MT_SMP default y
    - Add __ioread64_copy
    - Remove unnecessary inclusions of linux/irqchip/mips-gic.h

    GIC:
    - Introduce asm/mips-gic.h with accessor functions
    - Use new GIC accessor functions in mips-gic-timer
    - Remove counter access functions from irq-mips-gic.c
    - Remove gic_read_local_vp_id() from irq-mips-gic.c
    - Simplify shared interrupt pending/mask reads in irq-mips-gic.c
    - Simplify gic_local_irq_domain_map() in irq-mips-gic.c
    - Drop gic_(re)set_mask() functions in irq-mips-gic.c
    - Remove gic_set_polarity(), gic_set_trigger(), gic_set_dual_edge(),
    gic_map_to_pin() and gic_map_to_vpe() from irq-mips-gic.c.
    - Convert remaining shared reg access, local int mask access and
    remaining local reg access to new accessors
    - Move GIC_LOCAL_INT_* to asm/mips-gic.h
    - Remove GIC_CPU_INT* macros from irq-mips-gic.c
    - Move various definitions to the driver
    - Remove gic_get_usm_range()
    - Remove __gic_irq_dispatch() forward declaration
    - Remove gic_init()
    - Use mips_gic_present() in place of gic_present and remove
    gic_present
    - Move gic_get_c0_*_int() to asm/mips-gic.h
    - Remove linux/irqchip/mips-gic.h
    - Inline __gic_init()
    - Inline gic_basic_init()
    - Make pcpu_masks a per-cpu variable
    - Use pcpu_masks to avoid reading GIC_SH_MASK*
    - Clean up mti, reserved-cpu-vectors handling
    - Use cpumask_first_and() in gic_set_affinity()
    - Let the core set struct irq_common_data affinity

    microMIPS:
    - Fix microMIPS stack unwinding on big endian systems

    MIPS-GIC:
    - SYNC after enabling GIC region

    NUMA:
    - Remove the unused parent_node() macro

    R6:
    - Constify r2_decoder_tables
    - Add accessor & bit definitions for GlobalNumber

    SMP:
    - Constify smp ops
    - Allow boot_secondary SMP op to return errors

    VDSO:
    - Drop gic_get_usm_range() usage
    - Avoid use of linux/irqchip/mips-gic.h

    Platform changes:

    Alchemy:
    - Add devboard machine type to cpuinfo
    - update cpu feature overrides
    - Threaded carddetect irqs for devboards

    AR7:
    - allow NULL clock for clk_get_rate

    BCM63xx:
    - Fix ENETDMA_6345_MAXBURST_REG offset
    - Allow NULL clock for clk_get_rate

    CI20:
    - Enable GPIO and RTC drivers in defconfig
    - Add ethernet and fixed-regulator nodes to DTS

    Generic platform:
    - Move Boston and NI 169445 FIT image source to their own files
    - Include asm/bootinfo.h for plat_fdt_relocated()
    - Include asm/time.h for get_c0_*_int()
    - Include asm/bootinfo.h for plat_fdt_relocated()
    - Include asm/time.h for get_c0_*_int()
    - Allow filtering enabled boards by requirements
    - Don't explicitly disable CONFIG_USB_SUPPORT
    - Bump default NR_CPUS to 16

    JZ4700:
    - Probe the jz4740-rtc driver from devicetree

    Lantiq:
    - Drop check of boot select from the spi-falcon driver.
    - Drop check of boot select from the lantiq-flash MTD driver.
    - Access boot cause register in the watchdog driver through regmap
    - Add device tree binding documentation for the watchdog driver
    - Add docs for the RCU DT bindings.
    - Convert the fpi bus driver to a platform_driver
    - Remove ltq_reset_cause() and ltq_boot_select(
    - Switch to a proper reset driver
    - Switch to a new drivers/soc GPHY driver
    - Add an USB PHY driver for the Lantiq SoCs using the RCU module
    - Use of_platform_default_populate instead of __dt_register_buses
    - Enable MFD_SYSCON to be able to use it for the RCU MFD
    - Replace ltq_boot_select() with dummy implementation.

    Loongson 2F:
    - Allow NULL clock for clk_get_rate

    Malta:
    - Use new GIC accessor functions

    NI 169445:
    - Add support for NI 169445 board.
    - Only include in 32r2el kernels

    Octeon:
    - Add support for watchdog of 78XX SOCs.
    - Add support for watchdog of CN68XX SOCs.
    - Expose support for mips32r1, mips32r2 and mips64r1
    - Enable more drivers in config file
    - Add support for accessing the boot vector.
    - Remove old boot vector code from watchdog driver
    - Define watchdog registers for 70xx, 73xx, 78xx, F75xx.
    - Make CSR functions node aware.
    - Allow access to CIU3 IRQ domains.
    - Misc cleanups in the watchdog driver

    Omega2+:
    - New board, add support and defconfig

    Pistachio:
    - Enable Root FS on NFS in defconfig

    Ralink:
    - Add Mediatek MT7628A SoC
    - Allow NULL clock for clk_get_rate
    - Explicitly request exclusive reset control in the pci-mt7620 PCI driver.

    SEAD3:
    - Only include in 32 bit kernels by default

    VoCore:
    - Add VoCore as a vendor t0 dt-bindings
    - Add defconfig file"

    * '4.14-features' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (167 commits)
    MIPS: Refactor handling of stack pointer in get_frame_info
    MIPS: Stacktrace: Fix microMIPS stack unwinding on big endian systems
    MIPS: microMIPS: Fix decoding of swsp16 instruction
    MIPS: microMIPS: Fix decoding of addiusp instruction
    MIPS: microMIPS: Fix detection of addiusp instruction
    MIPS: Handle non word sized instructions when examining frame
    MIPS: ralink: allow NULL clock for clk_get_rate
    MIPS: Loongson 2F: allow NULL clock for clk_get_rate
    MIPS: BCM63XX: allow NULL clock for clk_get_rate
    MIPS: AR7: allow NULL clock for clk_get_rate
    MIPS: BCM63XX: fix ENETDMA_6345_MAXBURST_REG offset
    mips: Save all registers when saving the frame
    MIPS: Add DWARF unwinding to assembly
    MIPS: Make SAVE_SOME more standard
    MIPS: Fix issues in backtraces
    MIPS: jz4780: DTS: Probe the jz4740-rtc driver from devicetree
    MIPS: Ci20: Enable RTC driver
    watchdog: octeon-wdt: Add support for 78XX SOCs.
    watchdog: octeon-wdt: Add support for cn68XX SOCs.
    watchdog: octeon-wdt: File cleaning.
    ...

    Linus Torvalds
     

04 Sep, 2017

20 commits

  • The linux/irqchip/mips-gic.h header is no longer used. Remove it.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17049/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Our VDSO code makes use of macros from linux/irqchip/mips-gic.h to
    provide offsets to register values, but these are trivial offsets to the
    two 32 bit halves of a 64 bit value. Replace use of the macros with zero
    (ie. omit adding an offset) and the size of the low 32 bit of the value.
    This removes our need for linux/irqchip/mips-gic.h & prepares us for it
    to be removed.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17047/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • The linux/irqchip/mips-gic.h header is now almost empty. Move the
    declarations of gic_get_c0_compare_int(), gic_get_c0_perfcount_int() &
    gic_get_c0_fdc_int() to asm/mips-gic.h in order to close in on being
    able to delete the former header.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17046/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Nothing uses the global gic_present variable anymore; mips_gic_present()
    should be used instead. Remove the dead code.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17045/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • All in-tree platforms now probe the GIC driver using device tree, and as
    such nothing calls gic_init() any longer. Remove the dead code.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17043/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • The MIPS VDSO code is no longer reliant upon the irqchip driver to
    provide the address of the GIC's user-visible section via
    gic_get_usm_range(). Remove the now-dead code.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17041/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Move the definitions of macros used to convert between hardware IRQ
    numbers & shared or local interrupt numbers into the irqchip driver,
    which is all that should ever need to care about them.

    Remove GIC_CPU_TO_VEC_OFFSET() in the process since it's never used.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17039/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • The GIC_CPU_INT* macros are never used. Remove the dead code.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17038/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Move the definition of VP-local interrupts provided by the MIPS Global
    Interrupt Controller to the new asm/mips-gic.h header to be alongside
    the new accessor functions. Whilst at it, convert to an enum which lends
    itself more easily to expansion & documentation.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17037/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Convert the remaining accesses to registers in the GIC VP-local &
    VP-other register blocks to use the new accessor functions provided by
    asm/mips-gic.h, resulting in code which is often shorter & easier to
    read.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17036/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Use the new accessor functions provided by asm/mips-gic.h to access
    masks controlling local interrupts, resulting in code which is often
    shorter & easier to read.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17035/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Convert the remaining accesses to registers in the GIC shared register
    block to use the new accessor functions provided by asm/mips-gic.h,
    resulting in code which is often shorter & easier to read.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17034/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Remove the gic_map_to_vpe() function in favour of using the new
    write_gic_map_vp() accessor function which isn't any more complex to
    use & allows us to drop a level of abstraction.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17033/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Remove the gic_map_to_pin() function in favour of using the new
    write_gic_map_pin() accessor function which isn't any more complex to
    use & allows us to drop a level of abstraction.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17032/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Remove the gic_set_dual_edge() function in favour of using the new
    change_gic_dual() accessor function which provides equivalent
    functionality. This also allows us to remove the gic_update_bits()
    function which gic_set_dual_edge() was the last user of, along with the
    GIC_INTR_OFS() & GIC_INTR_BIT() macros.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17031/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Remove the gic_set_trigger() function in favour of using the new
    change_gic_trig() accessor function which provides equivalent
    functionality.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17030/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Remove the gic_set_polarity() function in favour of using the new
    change_gic_pol() accessor function which provides equivalent
    functionality.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17029/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • The gic_set_mask() & gic_reset_mask() functions are now no more
    convenient to call than the write_gic_smask() or write_gic_rmask()
    accessor functions. Remove the layer of abstraction.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17028/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Simplify gic_local_irq_domain_map() by:

    - Moving the check for invalid IRQs outside of the loop.

    - Moving the decision about whether to use gic_cpu_pin or timer_cpu_pin
    outside of the loop.

    - Using the new write_gic_vo_map() accessor function to avoid the need
    to handle each map register separately.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17027/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Simplify the reads of the bitmaps indicating pending & masked interrupts
    in gic_handle_shared_int() using the __ioread32_copy() &
    __ioread64_copy() helper functions.

    Signed-off-by: Paul Burton
    Acked-by: Marc Zyngier
    Cc: Jason Cooper
    Cc: Thomas Gleixner
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17026/
    Signed-off-by: Ralf Baechle

    Paul Burton