13 Aug, 2016

1 commit

  • Pull powerpc fixes from Michael Ellerman:
    "Some powerpc fixes for 4.8:

    Misc:
    - powerpc/vdso: Fix build rules to rebuild vdsos correctly from Nicholas Piggin
    - powerpc/ptrace: Fix coredump since ptrace TM changes from Cyril Bur
    - powerpc/32: Fix csum_partial_copy_generic() from Christophe Leroy
    - cxl: Set psl_fir_cntl to production environment value from Frederic Barrat
    - powerpc/eeh: Switch to conventional PCI address output in EEH log from Guilherme G. Piccoli
    - cxl: Use fixed width predefined types in data structure. from Philippe Bergheaud
    - powerpc/vdso: Add missing include file from Guenter Roeck
    - powerpc: Fix unused function warning 'lmb_to_memblock' from Alastair D'Silva
    - powerpc/powernv/ioda: Fix TCE invalidate to work in real mode again from Alexey Kardashevskiy
    - powerpc/cell: Add missing error code in spufs_mkgang() from Dan Carpenter
    - crypto: crc32c-vpmsum - Convert to CPU feature based module autoloading from Anton Blanchard
    - powerpc/pasemi: Fix coherent_dma_mask for dma engine from Darren Stevens

    Benjamin Herrenschmidt:
    - powerpc/32: Fix crash during static key init
    - powerpc: Update obsolete comment in setup_32.c about early_init()
    - powerpc: Print the kernel load address at the end of prom_init()
    - powerpc/pnv/pci: Fix incorrect PE reservation attempt on some 64-bit BARs
    - powerpc/xics: Properly set Edge/Level type and enable resend

    Mahesh Salgaonkar:
    - powerpc/book3s: Fix MCE console messages for unrecoverable MCE.
    - powerpc/powernv: Fix MCE handler to avoid trashing CR0/CR1 registers.
    - powerpc/powernv: Move IDLE_STATE_ENTER_SEQ macro to cpuidle.h
    - powerpc/powernv: Load correct TOC pointer while waking up from winkle.

    Andrew Donnellan:
    - cxl: Fix sparse warnings
    - cxl: Fix NULL dereference in cxl_context_init() on PowerVM guests

    Michael Ellerman:
    - selftests/powerpc: Specify we expect to build with std=gnu99
    - powerpc/Makefile: Use cflags-y/aflags-y for setting endian options
    - powerpc/pci: Fix endian bug in fixed PHB numbering"

    * tag 'powerpc-4.8-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (26 commits)
    selftests/powerpc: Specify we expect to build with std=gnu99
    powerpc/vdso: Fix build rules to rebuild vdsos correctly
    powerpc/Makefile: Use cflags-y/aflags-y for setting endian options
    powerpc/32: Fix crash during static key init
    powerpc: Update obsolete comment in setup_32.c about early_init()
    powerpc: Print the kernel load address at the end of prom_init()
    powerpc/ptrace: Fix coredump since ptrace TM changes
    powerpc/32: Fix csum_partial_copy_generic()
    cxl: Set psl_fir_cntl to production environment value
    powerpc/pnv/pci: Fix incorrect PE reservation attempt on some 64-bit BARs
    powerpc/book3s: Fix MCE console messages for unrecoverable MCE.
    powerpc/pci: Fix endian bug in fixed PHB numbering
    powerpc/eeh: Switch to conventional PCI address output in EEH log
    cxl: Fix sparse warnings
    cxl: Fix NULL dereference in cxl_context_init() on PowerVM guests
    cxl: Use fixed width predefined types in data structure.
    powerpc/vdso: Add missing include file
    powerpc: Fix unused function warning 'lmb_to_memblock'
    powerpc/powernv: Fix MCE handler to avoid trashing CR0/CR1 registers.
    powerpc/powernv: Move IDLE_STATE_ENTER_SEQ macro to cpuidle.h
    ...

    Linus Torvalds
     

10 Aug, 2016

1 commit


09 Aug, 2016

3 commits

  • Make native_irq_wait() static and use NULL rather than 0 to initialise
    phb->cfg_data in cxl_pci_vphb_add() to remove sparse warnings.

    Signed-off-by: Andrew Donnellan
    Reviewed-by: Matthew R. Ochs
    Acked-by: Ian Munsie
    Signed-off-by: Michael Ellerman

    Andrew Donnellan
     
  • Commit f67a6722d650 ("cxl: Workaround PE=0 hardware limitation in
    Mellanox CX4") added a "min_pe" field to struct cxl_service_layer_ops,
    to allow us to work around a Mellanox CX-4 hardware limitation.

    When allocating the PE number in cxl_context_init(), we read from
    ctx->afu->adapter->native->sl_ops->min_pe to get the minimum PE number.
    Unsurprisingly, in a PowerVM guest ctx->afu->adapter->native is NULL,
    and guests don't have a cxl_service_layer_ops struct anywhere.

    Move min_pe from struct cxl_service_layer_ops to struct cxl so it's
    accessible in both native and PowerVM environments. For the Mellanox
    CX-4, set the min_pe value in set_sl_ops().

    Fixes: f67a6722d650 ("cxl: Workaround PE=0 hardware limitation in Mellanox CX4")
    Reported-by: Frederic Barrat
    Signed-off-by: Andrew Donnellan
    Acked-by: Ian Munsie
    Reviewed-by: Frederic Barrat
    Signed-off-by: Michael Ellerman

    Andrew Donnellan
     
  • Pull lkdtm update from Kees Cook:
    "Fix rebuild problem with LKDTM's rodata test"

    [ This, and the usercopy branch, both came in before the merge window
    closed, but ended up in my 'need to look more' queue and thus got
    merged only after rc1 was out ]

    * tag 'lkdtm-v4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
    lkdtm: Fix targets for objcopy usage
    lkdtm: fix false positive warning from -Wmaybe-uninitialized

    Linus Torvalds
     

06 Aug, 2016

1 commit

  • Pull virtio/vhost updates from Michael Tsirkin:

    - new vsock device support in host and guest

    - platform IOMMU support in host and guest, including compatibility
    quirks for legacy systems.

    - misc fixes and cleanups.

    * tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost:
    VSOCK: Use kvfree()
    vhost: split out vringh Kconfig
    vhost: detect 32 bit integer wrap around
    vhost: new device IOTLB API
    vhost: drop vringh dependency
    vhost: convert pre sorted vhost memory array to interval tree
    vhost: introduce vhost memory accessors
    VSOCK: Add Makefile and Kconfig
    VSOCK: Introduce vhost_vsock.ko
    VSOCK: Introduce virtio_transport.ko
    VSOCK: Introduce virtio_vsock_common.ko
    VSOCK: defer sock removal to transports
    VSOCK: transport-specific vsock_transport functions
    vhost: drop vringh dependency
    vop: pull in vhost Kconfig
    virtio: new feature to detect IOMMU device quirk
    balloon: check the number of available pages in leak balloon
    vhost: lockless enqueuing
    vhost: simplify work flushing

    Linus Torvalds
     

04 Aug, 2016

1 commit

  • The dma-mapping core and the implementations do not change the DMA
    attributes passed by pointer. Thus the pointer can point to const data.
    However the attributes do not have to be a bitfield. Instead unsigned
    long will do fine:

    1. This is just simpler. Both in terms of reading the code and setting
    attributes. Instead of initializing local attributes on the stack
    and passing pointer to it to dma_set_attr(), just set the bits.

    2. It brings safeness and checking for const correctness because the
    attributes are passed by value.

    Semantic patches for this change (at least most of them):

    virtual patch
    virtual context

    @r@
    identifier f, attrs;

    @@
    f(...,
    - struct dma_attrs *attrs
    + unsigned long attrs
    , ...)
    {
    ...
    }

    @@
    identifier r.f;
    @@
    f(...,
    - NULL
    + 0
    )

    and

    // Options: --all-includes
    virtual patch
    virtual context

    @r@
    identifier f, attrs;
    type t;

    @@
    t f(..., struct dma_attrs *attrs);

    @@
    identifier r.f;
    @@
    f(...,
    - NULL
    + 0
    )

    Link: http://lkml.kernel.org/r/1468399300-5399-2-git-send-email-k.kozlowski@samsung.com
    Signed-off-by: Krzysztof Kozlowski
    Acked-by: Vineet Gupta
    Acked-by: Robin Murphy
    Acked-by: Hans-Christian Noren Egtvedt
    Acked-by: Mark Salter [c6x]
    Acked-by: Jesper Nilsson [cris]
    Acked-by: Daniel Vetter [drm]
    Reviewed-by: Bart Van Assche
    Acked-by: Joerg Roedel [iommu]
    Acked-by: Fabien Dessenne [bdisp]
    Reviewed-by: Marek Szyprowski [vb2-core]
    Acked-by: David Vrabel [xen]
    Acked-by: Konrad Rzeszutek Wilk [xen swiotlb]
    Acked-by: Joerg Roedel [iommu]
    Acked-by: Richard Kuo [hexagon]
    Acked-by: Geert Uytterhoeven [m68k]
    Acked-by: Gerald Schaefer [s390]
    Acked-by: Bjorn Andersson
    Acked-by: Hans-Christian Noren Egtvedt [avr32]
    Acked-by: Vineet Gupta [arc]
    Acked-by: Robin Murphy [arm64 and dma-iommu]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Krzysztof Kozlowski
     

03 Aug, 2016

1 commit

  • Pull PCI updates from Bjorn Helgaas:
    "Highlights:

    - ARM64 support for ACPI host bridges

    - new drivers for Axis ARTPEC-6 and Marvell Aardvark

    - new pci_alloc_irq_vectors() interface for MSI-X, MSI, legacy INTx

    - pci_resource_to_user() cleanup (more to come)

    Detailed summary:

    Enumeration:
    - Move ecam.h to linux/include/pci-ecam.h (Jayachandran C)
    - Add parent device field to ECAM struct pci_config_window (Jayachandran C)
    - Add generic MCFG table handling (Tomasz Nowicki)
    - Refactor pci_bus_assign_domain_nr() for CONFIG_PCI_DOMAINS_GENERIC (Tomasz Nowicki)
    - Factor DT-specific pci_bus_find_domain_nr() code out (Tomasz Nowicki)

    Resource management:
    - Add devm_request_pci_bus_resources() (Bjorn Helgaas)
    - Unify pci_resource_to_user() declarations (Bjorn Helgaas)
    - Implement pci_resource_to_user() with pcibios_resource_to_bus() (microblaze, powerpc, sparc) (Bjorn Helgaas)
    - Request host bridge window resources (designware, iproc, rcar, xgene, xilinx, xilinx-nwl) (Bjorn Helgaas)
    - Make PCI I/O space optional on ARM32 (Bjorn Helgaas)
    - Ignore write combining when mapping I/O port space (Bjorn Helgaas)
    - Claim bus resources on MIPS PCI_PROBE_ONLY set-ups (Bjorn Helgaas)
    - Remove unicore32 pci=firmware command line parameter handling (Bjorn Helgaas)
    - Support I/O resources when parsing host bridge resources (Jayachandran C)
    - Add helpers to request/release memory and I/O regions (Johannes Thumshirn)
    - Use pci_(request|release)_mem_regions (NVMe, lpfc, GenWQE, ethernet/intel, alx) (Johannes Thumshirn)
    - Extend pci=resource_alignment to specify device/vendor IDs (Koehrer Mathias (ETAS/ESW5))
    - Add generic pci_bus_claim_resources() (Lorenzo Pieralisi)
    - Claim bus resources on ARM32 PCI_PROBE_ONLY set-ups (Lorenzo Pieralisi)
    - Remove ARM32 and ARM64 arch-specific pcibios_enable_device() (Lorenzo Pieralisi)
    - Add pci_unmap_iospace() to unmap I/O resources (Sinan Kaya)
    - Remove powerpc __pci_mmap_set_pgprot() (Yinghai Lu)

    PCI device hotplug:
    - Allow additional bus numbers for hotplug bridges (Keith Busch)
    - Ignore interrupts during D3cold (Lukas Wunner)

    Power management:
    - Enforce type casting for pci_power_t (Andy Shevchenko)
    - Don't clear d3cold_allowed for PCIe ports (Mika Westerberg)
    - Put PCIe ports into D3 during suspend (Mika Westerberg)
    - Power on bridges before scanning new devices (Mika Westerberg)
    - Runtime resume bridge before rescan (Mika Westerberg)
    - Add runtime PM support for PCIe ports (Mika Westerberg)
    - Remove redundant check of pcie_set_clkpm (Shawn Lin)

    Virtualization:
    - Add function 1 DMA alias quirk for Marvell 88SE9182 (Aaron Sierra)
    - Add DMA alias quirk for Adaptec 3805 (Alex Williamson)
    - Mark Atheros AR9485 and QCA9882 to avoid bus reset (Chris Blake)
    - Add ACS quirk for Solarflare SFC9220 (Edward Cree)

    MSI:
    - Fix PCI_MSI dependencies (Arnd Bergmann)
    - Add pci_msix_desc_addr() helper (Christoph Hellwig)
    - Switch msix_program_entries() to use pci_msix_desc_addr() (Christoph Hellwig)
    - Make the "entries" argument to pci_enable_msix() optional (Christoph Hellwig)
    - Provide sensible IRQ vector alloc/free routines (Christoph Hellwig)
    - Spread interrupt vectors in pci_alloc_irq_vectors() (Christoph Hellwig)

    Error Handling:
    - Bind DPC to Root Ports as well as Downstream Ports (Keith Busch)
    - Remove DPC tristate module option (Keith Busch)
    - Convert Downstream Port Containment driver to use devm_* functions (Mika Westerberg)

    Generic host bridge driver:
    - Select IRQ_DOMAIN (Arnd Bergmann)
    - Claim bus resources on PCI_PROBE_ONLY set-ups (Lorenzo Pieralisi)

    ACPI host bridge driver:
    - Add ARM64 acpi_pci_bus_find_domain_nr() (Tomasz Nowicki)
    - Add ARM64 ACPI support for legacy IRQs parsing and consolidation with DT code (Tomasz Nowicki)
    - Implement ARM64 AML accessors for PCI_Config region (Tomasz Nowicki)
    - Support ARM64 ACPI-based PCI host controller (Tomasz Nowicki)

    Altera host bridge driver:
    - Check link status before retrain link (Ley Foon Tan)
    - Poll for link up status after retraining the link (Ley Foon Tan)

    Axis ARTPEC-6 host bridge driver:
    - Add PCI_MSI_IRQ_DOMAIN dependency (Arnd Bergmann)
    - Add DT binding for Axis ARTPEC-6 PCIe controller (Niklas Cassel)
    - Add Axis ARTPEC-6 PCIe controller driver (Niklas Cassel)

    Intel VMD host bridge driver:
    - Use lock save/restore in interrupt enable path (Jon Derrick)
    - Select device dma ops to override (Keith Busch)
    - Initialize list item in IRQ disable (Keith Busch)
    - Use x86_vector_domain as parent domain (Keith Busch)
    - Separate MSI and MSI-X vector sharing (Keith Busch)

    Marvell Aardvark host bridge driver:
    - Add DT binding for the Aardvark PCIe controller (Thomas Petazzoni)
    - Add Aardvark PCI host controller driver (Thomas Petazzoni)
    - Add Aardvark PCIe support for Armada 3700 (Thomas Petazzoni)

    Microsoft Hyper-V host bridge driver:
    - Fix interrupt cleanup path (Cathy Avery)
    - Don't leak buffer in hv_pci_onchannelcallback() (Vitaly Kuznetsov)
    - Handle all pending messages in hv_pci_onchannelcallback() (Vitaly Kuznetsov)

    NVIDIA Tegra host bridge driver:
    - Program PADS_REFCLK_CFG* always, not just on legacy SoCs (Stephen Warren)
    - Program PADS_REFCLK_CFG* registers with per-SoC values (Stephen Warren)
    - Use lower-case hex consistently for register definitions (Thierry Reding)
    - Use generic pci_remap_iospace() rather than ARM32-specific one (Thierry Reding)
    - Stop setting pcibios_min_mem (Thierry Reding)

    Renesas R-Car host bridge driver:
    - Drop gen2 dummy I/O port region (Bjorn Helgaas)

    TI DRA7xx host bridge driver:
    - Fix return value in case of error (Christophe JAILLET)

    Xilinx AXI host bridge driver:
    - Fix return value in case of error (Christophe JAILLET)

    Miscellaneous:
    - Make bus_attr_resource_alignment static (Ben Dooks)
    - Include for isa_dma_bridge_buggy (Ben Dooks)
    - MAINTAINERS: Add file patterns for PCI device tree bindings (Geert Uytterhoeven)
    - Make host bridge drivers explicitly non-modular (Paul Gortmaker)"

    * tag 'pci-v4.8-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (125 commits)
    PCI: xgene: Make explicitly non-modular
    PCI: thunder-pem: Make explicitly non-modular
    PCI: thunder-ecam: Make explicitly non-modular
    PCI: tegra: Make explicitly non-modular
    PCI: rcar-gen2: Make explicitly non-modular
    PCI: rcar: Make explicitly non-modular
    PCI: mvebu: Make explicitly non-modular
    PCI: layerscape: Make explicitly non-modular
    PCI: keystone: Make explicitly non-modular
    PCI: hisi: Make explicitly non-modular
    PCI: generic: Make explicitly non-modular
    PCI: designware-plat: Make it explicitly non-modular
    PCI: artpec6: Make explicitly non-modular
    PCI: armada8k: Make explicitly non-modular
    PCI: artpec: Add PCI_MSI_IRQ_DOMAIN dependency
    PCI: Add ACS quirk for Solarflare SFC9220
    arm64: dts: marvell: Add Aardvark PCIe support for Armada 3700
    PCI: aardvark: Add Aardvark PCI host controller driver
    dt-bindings: add DT binding for the Aardvark PCIe controller
    PCI: tegra: Program PADS_REFCLK_CFG* registers with per-SoC values
    ...

    Linus Torvalds
     

02 Aug, 2016

5 commits


31 Jul, 2016

1 commit

  • Pull powerpc updates from Michael Ellerman:
    "Highlights:
    - PowerNV PCI hotplug support.
    - Lots more Power9 support.
    - eBPF JIT support on ppc64le.
    - Lots of cxl updates.
    - Boot code consolidation.

    Bug fixes:
    - Fix spin_unlock_wait() from Boqun Feng
    - Fix stack pointer corruption in __tm_recheckpoint() from Michael
    Neuling
    - Fix multiple bugs in memory_hotplug_max() from Bharata B Rao
    - mm: Ensure "special" zones are empty from Oliver O'Halloran
    - ftrace: Separate the heuristics for checking call sites from
    Michael Ellerman
    - modules: Never restore r2 for a mprofile-kernel style mcount() call
    from Michael Ellerman
    - Fix endianness when reading TCEs from Alexey Kardashevskiy
    - start rtasd before PCI probing from Greg Kurz
    - PCI: rpaphp: Fix slot registration for multiple slots under a PHB
    from Tyrel Datwyler
    - powerpc/mm: Add memory barrier in __hugepte_alloc() from Sukadev
    Bhattiprolu

    Cleanups & fixes:
    - Drop support for MPIC in pseries from Rashmica Gupta
    - Define and use PPC64_ELF_ABI_v2/v1 from Michael Ellerman
    - Remove unused symbols in asm-offsets.c from Rashmica Gupta
    - Fix SRIOV not building without EEH enabled from Russell Currey
    - Remove kretprobe_trampoline_holder from Thiago Jung Bauermann
    - Reduce log level of PCI I/O space warning from Benjamin
    Herrenschmidt
    - Add array bounds checking to crash_shutdown_handlers from Suraj
    Jitindar Singh
    - Avoid -maltivec when using clang integrated assembler from Anton
    Blanchard
    - Fix array overrun in ppc_rtas() syscall from Andrew Donnellan
    - Fix error return value in cmm_mem_going_offline() from Rasmus
    Villemoes
    - export cpu_to_core_id() from Mauricio Faria de Oliveira
    - Remove old symbols from defconfigs from Andrew Donnellan
    - Update obsolete comments in setup_32.c about entry conditions from
    Benjamin Herrenschmidt
    - Add comment explaining the purpose of setup_kdump_trampoline() from
    Benjamin Herrenschmidt
    - Merge the RELOCATABLE config entries for ppc32 and ppc64 from Kevin
    Hao
    - Remove RELOCATABLE_PPC32 from Kevin Hao
    - Fix .long's in tlb-radix.c to more meaningful from Balbir Singh

    Minor cleanups & fixes:
    - Andrew Donnellan, Anna-Maria Gleixner, Anton Blanchard, Benjamin
    Herrenschmidt, Bharata B Rao, Christophe Leroy, Colin Ian King,
    Geliang Tang, Greg Kurz, Madhavan Srinivasan, Michael Ellerman,
    Michael Ellerman, Stephen Rothwell, Stewart Smith.

    Freescale updates from Scott:
    - "Highlights include more 8xx optimizations, device tree updates,
    and MVME7100 support."

    PowerNV PCI hotplug from Gavin Shan:
    - PCI: Add pcibios_setup_bridge()
    - Override pcibios_setup_bridge()
    - Remove PCI_RESET_DELAY_US
    - Move pnv_pci_ioda_setup_opal_tce_kill() around
    - Increase PE# capacity
    - Allocate PE# in reverse order
    - Create PEs in pcibios_setup_bridge()
    - Setup PE for root bus
    - Extend PCI bridge resources
    - Make pnv_ioda_deconfigure_pe() visible
    - Dynamically release PE
    - Update bridge windows on PCI plug
    - Delay populating pdn
    - Support PCI slot ID
    - Use PCI slot reset infrastructure
    - Introduce pnv_pci_get_slot_id()
    - Functions to get/set PCI slot state
    - PCI/hotplug: PowerPC PowerNV PCI hotplug driver
    - Print correct PHB type names

    Power9 idle support from Shreyas B. Prabhu:
    - set power_save func after the idle states are initialized
    - Use PNV_THREAD_WINKLE macro while requesting for winkle
    - make hypervisor state restore a function
    - Rename idle_power7.S to idle_book3s.S
    - Rename reusable idle functions to hardware agnostic names
    - Make pnv_powersave_common more generic
    - abstraction for saving SPRs before entering deep idle states
    - Add platform support for stop instruction
    - cpuidle/powernv: Use CPUIDLE_STATE_MAX instead of MAX_POWERNV_IDLE_STATES
    - cpuidle/powernv: cleanup cpuidle-powernv.c
    - cpuidle/powernv: Add support for POWER ISA v3 idle states
    - Use deepest stop state when cpu is offlined

    Power9 PMU from Madhavan Srinivasan:
    - factor out power8 pmu macros and defines
    - factor out power8 pmu functions
    - factor out power8 __init_pmu code
    - Add power9 event list macros for generic and cache events
    - Power9 PMU support
    - Export Power9 generic and cache events to sysfs

    Power9 preliminary interrupt & PCI support from Benjamin Herrenschmidt:
    - Add XICS emulation APIs
    - Move a few exception common handlers to make room
    - Add support for HV virtualization interrupts
    - Add mechanism to force a replay of interrupts
    - Add ICP OPAL backend
    - Discover IODA3 PHBs
    - pci: Remove obsolete SW invalidate
    - opal: Add real mode call wrappers
    - Rename TCE invalidation calls
    - Remove SWINV constants and obsolete TCE code
    - Rework accessing the TCE invalidate register
    - Fallback to OPAL for TCE invalidations
    - Use the device-tree to get available range of M64's
    - Check status of a PHB before using it
    - pci: Don't try to allocate resources that will be reassigned

    Other Power9:
    - Send SIGBUS on unaligned copy and paste from Chris Smart
    - Large Decrementer support from Oliver O'Halloran
    - Load Monitor Register Support from Jack Miller

    Performance improvements from Anton Blanchard:
    - Avoid load hit store in __giveup_fpu() and __giveup_altivec()
    - Avoid load hit store in setup_sigcontext()
    - Remove assembly versions of strcpy, strcat, strlen and strcmp
    - Align hot loops of some string functions

    eBPF JIT from Naveen N. Rao:
    - Fix/enhance 32-bit Load Immediate implementation
    - Optimize 64-bit Immediate loads
    - Introduce rotate immediate instructions
    - A few cleanups
    - Isolate classic BPF JIT specifics into a separate header
    - Implement JIT compiler for extended BPF

    Operator Panel driver from Suraj Jitindar Singh:
    - devicetree/bindings: Add binding for operator panel on FSP machines
    - Add inline function to get rc from an ASYNC_COMP opal_msg
    - Add driver for operator panel on FSP machines

    Sparse fixes from Daniel Axtens:
    - make some things static
    - Introduce asm-prototypes.h
    - Include headers containing prototypes
    - Use #ifdef __BIG_ENDIAN__ #else for REG_BYTE
    - kvm: Clarify __user annotations
    - Pass endianness to sparse
    - Make ppc_md.{halt, restart} __noreturn

    MM fixes & cleanups from Aneesh Kumar K.V:
    - radix: Update LPCR HR bit as per ISA
    - use _raw variant of page table accessors
    - Compile out radix related functions if RADIX_MMU is disabled
    - Clear top 16 bits of va only on older cpus
    - Print formation regarding the the MMU mode
    - hash: Update SDR1 size encoding as documented in ISA 3.0
    - radix: Update PID switch sequence
    - radix: Update machine call back to support new HCALL.
    - radix: Add LPID based tlb flush helpers
    - radix: Add a kernel command line to disable radix
    - Cleanup LPCR defines

    Boot code consolidation from Benjamin Herrenschmidt:
    - Move epapr_paravirt_early_init() to early_init_devtree()
    - cell: Don't use flat device-tree after boot
    - ge_imp3a: Don't use the flat device-tree after boot
    - mpc85xx_ds: Don't use the flat device-tree after boot
    - mpc85xx_rdb: Don't use the flat device-tree after boot
    - Don't test for machine type in rtas_initialize()
    - Don't test for machine type in smp_setup_cpu_maps()
    - dt: Add of_device_compatible_match()
    - Factor do_feature_fixup calls
    - Move 64-bit feature fixup earlier
    - Move 64-bit memory reserves to setup_arch()
    - Use a cachable DART
    - Move FW feature probing out of pseries probe()
    - Put exception configuration in a common place
    - Remove early allocation of the SMU command buffer
    - Move MMU backend selection out of platform code
    - pasemi: Remove IOBMAP allocation from platform probe()
    - mm/hash: Don't use machine_is() early during boot
    - Don't test for machine type to detect HEA special case
    - pmac: Remove spurrious machine type test
    - Move hash table ops to a separate structure
    - Ensure that ppc_md is empty before probing for machine type
    - Move 64-bit probe_machine() to later in the boot process
    - Move 32-bit probe() machine to later in the boot process
    - Get rid of ppc_md.init_early()
    - Move the boot time info banner to a separate function
    - Move setting of {i,d}cache_bsize to initialize_cache_info()
    - Move the content of setup_system() to setup_arch()
    - Move cache info inits to a separate function
    - Re-order the call to smp_setup_cpu_maps()
    - Re-order setup_panic()
    - Make a few boot functions __init
    - Merge 32-bit and 64-bit setup_arch()

    Other new features:
    - tty/hvc: Use IRQF_SHARED for OPAL hvc consoles from Sam Mendoza-Jonas
    - tty/hvc: Use opal irqchip interface if available from Sam Mendoza-Jonas
    - powerpc: Add module autoloading based on CPU features from Alastair D'Silva
    - crypto: vmx - Convert to CPU feature based module autoloading from Alastair D'Silva
    - Wake up kopald polling thread before waiting for events from Benjamin Herrenschmidt
    - xmon: Dump ISA 2.06 SPRs from Michael Ellerman
    - xmon: Dump ISA 2.07 SPRs from Michael Ellerman
    - Add a parameter to disable 1TB segs from Oliver O'Halloran
    - powerpc/boot: Add OPAL console to epapr wrappers from Oliver O'Halloran
    - Assign fixed PHB number based on device-tree properties from Guilherme G. Piccoli
    - pseries: Add pseries hotplug workqueue from John Allen
    - pseries: Add support for hotplug interrupt source from John Allen
    - pseries: Use kernel hotplug queue for PowerVM hotplug events from John Allen
    - pseries: Move property cloning into its own routine from Nathan Fontenot
    - pseries: Dynamic add entires to associativity lookup array from Nathan Fontenot
    - pseries: Auto-online hotplugged memory from Nathan Fontenot
    - pseries: Remove call to memblock_add() from Nathan Fontenot

    cxl:
    - Add set and get private data to context struct from Michael Neuling
    - make base more explicitly non-modular from Paul Gortmaker
    - Use for_each_compatible_node() macro from Wei Yongjun
    - Frederic Barrat
    - Abstract the differences between the PSL and XSL
    - Make vPHB device node match adapter's
    - Philippe Bergheaud
    - Add mechanism for delivering AFU driver specific events
    - Ignore CAPI adapters misplaced in switched slots
    - Refine slice error debug messages
    - Andrew Donnellan
    - static-ify variables to fix sparse warnings
    - PCI/hotplug: pnv_php: export symbols and move struct types needed by cxl
    - PCI/hotplug: pnv_php: handle OPAL_PCI_SLOT_OFFLINE power state
    - Add cxl_check_and_switch_mode() API to switch bi-modal cards
    - remove dead Kconfig options
    - fix potential NULL dereference in free_adapter()
    - Ian Munsie
    - Update process element after allocating interrupts
    - Add support for CAPP DMA mode
    - Fix allowing bogus AFU descriptors with 0 maximum processes
    - Fix allocating a minimum of 2 pages for the SPA
    - Fix bug where AFU disable operation had no effect
    - Workaround XSL bug that does not clear the RA bit after a reset
    - Fix NULL pointer dereference on kernel contexts with no AFU interrupts
    - powerpc/powernv: Split cxl code out into a separate file
    - Add cxl_slot_is_supported API
    - Enable bus mastering for devices using CAPP DMA mode
    - Move cxl_afu_get / cxl_afu_put to base
    - Allow a default context to be associated with an external pci_dev
    - Do not create vPHB if there are no AFU configuration records
    - powerpc/powernv: Add support for the cxl kernel api on the real phb
    - Add support for using the kernel API with a real PHB
    - Add kernel APIs to get & set the max irqs per context
    - Add preliminary workaround for CX4 interrupt limitation
    - Add support for interrupts on the Mellanox CX4
    - Workaround PE=0 hardware limitation in Mellanox CX4
    - powerpc/powernv: Fix pci-cxl.c build when CONFIG_MODULES=n

    selftests:
    - Test unaligned copy and paste from Chris Smart
    - Load Monitor Register Tests from Jack Miller
    - Cyril Bur
    - exec() with suspended transaction
    - Use signed long to read perf_event_paranoid
    - Fix usage message in context_switch
    - Fix generation of vector instructions/types in context_switch
    - Michael Ellerman
    - Use "Delta" rather than "Error" in normal output
    - Import Anton's mmap & futex micro benchmarks
    - Add a test for PROT_SAO"

    * tag 'powerpc-4.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (263 commits)
    powerpc/mm: Parenthesise IS_ENABLED() in if condition
    tty/hvc: Use opal irqchip interface if available
    tty/hvc: Use IRQF_SHARED for OPAL hvc consoles
    selftests/powerpc: exec() with suspended transaction
    powerpc: Improve comment explaining why we modify VRSAVE
    powerpc/mm: Drop unused externs for hpte_init_beat[_v3]()
    powerpc/mm: Rename hpte_init_lpar() and move the fallback to a header
    powerpc/mm: Fix build break when PPC_NATIVE=n
    crypto: vmx - Convert to CPU feature based module autoloading
    powerpc: Add module autoloading based on CPU features
    powerpc/powernv/ioda: Fix endianness when reading TCEs
    powerpc/mm: Add memory barrier in __hugepte_alloc()
    powerpc/modules: Never restore r2 for a mprofile-kernel style mcount() call
    powerpc/ftrace: Separate the heuristics for checking call sites
    powerpc: Merge 32-bit and 64-bit setup_arch()
    powerpc/64: Make a few boot functions __init
    powerpc: Re-order setup_panic()
    powerpc: Re-order the call to smp_setup_cpu_maps()
    powerpc/32: Move cache info inits to a separate function
    powerpc/64: Move the content of setup_system() to setup_arch()
    ...

    Linus Torvalds
     

28 Jul, 2016

2 commits

  • Pull i2c updates from Wolfram Sang:
    "Here is the I2C pull request for 4.8:

    - the core and i801 driver gained support for SMBus Host Notify

    - core support for more than one address in DT

    - i2c_add_adapter() has now better error messages. We can remove all
    error messages from drivers calling it as a next step.

    - bigger updates to rk3x driver to support rk3399 SoC

    - the at24 eeprom driver got refactored and can now read special
    variants with unique serials or fixed MAC addresses.

    The rest is regular driver updates and bugfixes"

    * 'i2c/for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (66 commits)
    i2c: i801: use IS_ENABLED() instead of checking for built-in or module
    Documentation: i2c: slave: give proper example for pm usage
    Documentation: i2c: slave: describe buffer problems a bit better
    i2c: bcm2835: Don't complain on -EPROBE_DEFER from getting our clock
    i2c: i2c-smbus: drop useless stubs
    i2c: efm32: fix a failure path in efm32_i2c_probe()
    Revert "i2c: core: Cleanup I2C ACPI namespace"
    Revert "i2c: core: Add function for finding the bus speed from ACPI"
    i2c: Update the description of I2C_SMBUS
    i2c: i2c-smbus: fix i2c_handle_smbus_host_notify documentation
    eeprom: at24: tweak the loop_until_timeout() macro
    eeprom: at24: add support for at24mac series
    eeprom: at24: support reading the serial number for 24csxx
    eeprom: at24: platform_data: use BIT() macro
    eeprom: at24: split at24_eeprom_write() into specialized functions
    eeprom: at24: split at24_eeprom_read() into specialized functions
    eeprom: at24: hide the read/write loop behind a macro
    eeprom: at24: call read/write functions via function pointers
    eeprom: at24: coding style fixes
    eeprom: at24: move at24_read() below at24_eeprom_write()
    ...

    Linus Torvalds
     
  • Pull networking updates from David Miller:

    1) Unified UDP encapsulation offload methods for drivers, from
    Alexander Duyck.

    2) Make DSA binding more sane, from Andrew Lunn.

    3) Support QCA9888 chips in ath10k, from Anilkumar Kolli.

    4) Several workqueue usage cleanups, from Bhaktipriya Shridhar.

    5) Add XDP (eXpress Data Path), essentially running BPF programs on RX
    packets as soon as the device sees them, with the option to mirror
    the packet on TX via the same interface. From Brenden Blanco and
    others.

    6) Allow qdisc/class stats dumps to run lockless, from Eric Dumazet.

    7) Add VLAN support to b53 and bcm_sf2, from Florian Fainelli.

    8) Simplify netlink conntrack entry layout, from Florian Westphal.

    9) Add ipv4 forwarding support to mlxsw spectrum driver, from Ido
    Schimmel, Yotam Gigi, and Jiri Pirko.

    10) Add SKB array infrastructure and convert tun and macvtap over to it.
    From Michael S Tsirkin and Jason Wang.

    11) Support qdisc packet injection in pktgen, from John Fastabend.

    12) Add neighbour monitoring framework to TIPC, from Jon Paul Maloy.

    13) Add NV congestion control support to TCP, from Lawrence Brakmo.

    14) Add GSO support to SCTP, from Marcelo Ricardo Leitner.

    15) Allow GRO and RPS to function on macsec devices, from Paolo Abeni.

    16) Support MPLS over IPV4, from Simon Horman.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1622 commits)
    xgene: Fix build warning with ACPI disabled.
    be2net: perform temperature query in adapter regardless of its interface state
    l2tp: Correctly return -EBADF from pppol2tp_getname.
    net/mlx5_core/health: Remove deprecated create_singlethread_workqueue
    net: ipmr/ip6mr: update lastuse on entry change
    macsec: ensure rx_sa is set when validation is disabled
    tipc: dump monitor attributes
    tipc: add a function to get the bearer name
    tipc: get monitor threshold for the cluster
    tipc: make cluster size threshold for monitoring configurable
    tipc: introduce constants for tipc address validation
    net: neigh: disallow transition to NUD_STALE if lladdr is unchanged in neigh_update()
    MAINTAINERS: xgene: Add driver and documentation path
    Documentation: dtb: xgene: Add MDIO node
    dtb: xgene: Add MDIO node
    drivers: net: xgene: ethtool: Use phy_ethtool_gset and sset
    drivers: net: xgene: Use exported functions
    drivers: net: xgene: Enable MDIO driver
    drivers: net: xgene: Add backward compatibility
    drivers: net: phy: xgene: Add MDIO driver
    ...

    Linus Torvalds
     

19 Jul, 2016

3 commits

  • If kzalloc() fails when allocating adapter->guest in
    cxl_guest_init_adapter(), we call free_adapter() before erroring out.
    free_adapter() in turn attempts to dereference adapter->guest, which in
    this case is NULL.

    In free_adapter(), skip the adapter->guest cleanup if adapter->guest is
    NULL.

    Fixes: 14baf4d9c739 ("cxl: Add guest-specific code")
    Reported-by: Dan Carpenter
    Signed-off-by: Andrew Donnellan
    Signed-off-by: Michael Ellerman

    Andrew Donnellan
     
  • Remove the CXL_KERNEL_API and CXL_EEH Kconfig options, as they were only
    needed to coordinate the merging of the cxlflash driver. Also remove the
    stub implementation of cxl_perst_reloads_same_image() in cxlflash which is
    only used if CXL_EEH isn't defined (i.e. never).

    Suggested-by: Ian Munsie
    Signed-off-by: Andrew Donnellan
    Acked-by: Ian Munsie
    Acked-by: Matthew R. Ochs
    Signed-off-by: Michael Ellerman

    Andrew Donnellan
     
  • loop_until_timeout() replaced a do {} while loop in the at24 driver
    with a for loop which, under certain circumstances (such as heavy load
    or low value of the write_timeout argument), can lead to the code in
    the loop never being executed.

    Make sure that at least one iteration of the code enclosed within
    loop_until_timeout() is always executed.

    Suggested-by: Wolfram Sang
    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Wolfram Sang

    Bartosz Golaszewski
     

18 Jul, 2016

10 commits

  • On mips and parisc:

    drivers/bluetooth/btwilink.c: In function 'ti_st_open':
    drivers/bluetooth/btwilink.c:174:21: warning: overflow in implicit constant conversion [-Woverflow]
    hst->reg_status = -EINPROGRESS;

    drivers/nfc/nfcwilink.c: In function 'nfcwilink_open':
    drivers/nfc/nfcwilink.c:396:31: warning: overflow in implicit constant conversion [-Woverflow]
    drv->st_register_cb_status = -EINPROGRESS;

    There are actually two issues:
    1. Whether "char" is signed or unsigned depends on the architecture.
    As the completion callback data is used to pass a (negative) error
    code, it should always be signed.
    2. EINPROGRESS is 150 on mips, 245 on parisc.
    Hence -EINPROGRESS doesn't fit in a signed 8-bit number.

    Change the callback status from "char" to "int" to fix these.

    Signed-off-by: Geert Uytterhoeven
    Acked-by: Mauro Carvalho Chehab
    Acked-by: Samuel Ortiz
    Signed-off-by: Marcel Holtmann

    Geert Uytterhoeven
     
  • Add a new read function to the at24 driver allowing to retrieve the
    factory-programmed mac address embedded in chips from the at24mac
    family.

    These chips can be instantiated similarily to the at24cs family,
    except that there's no way of having access to both the serial number
    and the mac address at the same time - the user must instantiate
    either an at24cs or at24mac device as both special memory areas are
    accessible on the same slave address.

    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Wolfram Sang

    Bartosz Golaszewski
     
  • The chips from the at24cs family have two memory areas - a regular
    read-write block and a read-only area containing the serial number.

    The latter is visible on a different slave address (the address of the
    rw memory block + 0x08). In order to access both blocks the user needs
    to instantiate a regular at24c device for the rw block address and a
    corresponding at24cs device on the serial number block address.

    Add a function that allows to access the serial number and assign it
    to at24->read_func if the chip allows serial number read operations
    and the driver was passed the relevant flag for this device.

    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Wolfram Sang

    Bartosz Golaszewski
     
  • Split at24_eeprom_write() into three smaller functions - one for the
    i2c operations and two for the smbus extensions (separate routines for
    block and byte transfers). Assign them in at24_probe() depending on
    the bus capabilities.

    Also: in order to avoid duplications move code adjusting the count
    argument into a separate function and use it for i2c and smbus block
    writes (no need for a roll-over for byte writes as we're always
    writing one byte).

    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Wolfram Sang

    Bartosz Golaszewski
     
  • Split at24_eeprom_read() into two smaller functions - one for the
    i2c operations and one for the smbus extensions. Assign them in
    at24_probe() depending on the bus capabilities.

    Also: in order to avoid duplications move the comments related to
    offset calculations above the at24_translate_offset() routine.

    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Wolfram Sang

    Bartosz Golaszewski
     
  • Before splitting the read/write routines into smaller, more
    specialized functions, unduplicate some code in advance.

    Use a 'for' loop instead of 'do while' when waiting for the previous
    write to complete and hide it behind a macro.

    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Wolfram Sang

    Bartosz Golaszewski
     
  • The first step in simplifying the read and write functions is to call
    them via function pointers stored in at24_data. When we eventually
    split the routines into smaller ones (depending on whether they use
    smbus or i2c operations) we'll simply assign them to said pointers
    instead of checking the flags at runtime every time we read/write.

    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Wolfram Sang

    Bartosz Golaszewski
     
  • Align the arguments in broken lines with the arguments list's opening
    brackets and make checkpatch.pl happy by converting 'unsigned' into
    'unsigned int'.

    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Wolfram Sang

    Bartosz Golaszewski
     
  • In preparation for splitting at24_eeprom_write() & at24_eeprom_read()
    into smaller, specialized routines move at24_read() below, so that it
    won't be intertwined with the low-level EEPROM accessors.

    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Wolfram Sang

    Bartosz Golaszewski
     
  • As part of the preparation for introducing support for more chips,
    improve the readability of the device table by separating columns
    with tabs.

    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Wolfram Sang

    Bartosz Golaszewski
     

16 Jul, 2016

2 commits

  • When building under W=1, the lack of lkdtm.h in lkdtm_usercopy.c and
    lkdtm_rodata.c was discovered. This fixes the issue and consolidates
    the common header and the pr_fmt macro for simplicity and regularity
    across each test source file.

    Signed-off-by: Kees Cook

    Kees Cook
     
  • A conversion of the lkdtm core module added an "#ifdef CONFIG_KPROBES" check,
    but a number of functions then become unused:

    drivers/misc/lkdtm_core.c:340:16: error: 'lkdtm_debugfs_entry' defined but not used [-Werror=unused-function]
    drivers/misc/lkdtm_core.c:122:12: error: 'jp_generic_ide_ioctl' defined but not used [-Werror=unused-function]
    drivers/misc/lkdtm_core.c:114:12: error: 'jp_scsi_dispatch_cmd' defined but not used [-Werror=unused-function]
    drivers/misc/lkdtm_core.c:106:12: error: 'jp_hrtimer_start' defined but not used [-Werror=unused-function]
    drivers/misc/lkdtm_core.c:97:22: error: 'jp_shrink_inactive_list' defined but not used [-Werror=unused-function]
    drivers/misc/lkdtm_core.c:89:13: error: 'jp_ll_rw_block' defined but not used [-Werror=unused-function]
    drivers/misc/lkdtm_core.c:83:13: error: 'jp_tasklet_action' defined but not used [-Werror=unused-function]
    drivers/misc/lkdtm_core.c:75:20: error: 'jp_handle_irq_event' defined but not used [-Werror=unused-function]
    drivers/misc/lkdtm_core.c:68:21: error: 'jp_do_irq' defined but not used [-Werror=unused-function]

    This adds the same #ifdef everywhere. There is probably a better way to do the
    same thing, but for now this avoids the new warnings.

    Signed-off-by: Arnd Bergmann
    Fixes: c479e3fd8870 ("lkdtm: use struct arrays instead of enums")
    [kees: moved some code around to better consolidate the #ifdefs]
    Signed-off-by: Kees Cook

    Arnd Bergmann
     

14 Jul, 2016

9 commits

  • Add a new API, cxl_check_and_switch_mode() to allow for switching of
    bi-modal CAPI cards, such as the Mellanox CX-4 network card.

    When a driver requests to switch a card to CAPI mode, use PCI hotplug
    infrastructure to remove all PCI devices underneath the slot. We then write
    an updated mode control register to the CAPI VSEC, hot reset the card, and
    reprobe the card.

    As the card may present a different set of PCI devices after the mode
    switch, use the infrastructure provided by the pnv_php driver and the OPAL
    PCI slot management facilities to ensure that:

    * the old devices are removed from both the OPAL and Linux device trees
    * the new devices are probed by OPAL and added to the OPAL device tree
    * the new devices are added to the Linux device tree and probed through
    the regular PCI device probe path

    As such, introduce a new option, CONFIG_CXL_BIMODAL, with a dependency on
    the pnv_php driver.

    Refactor existing code that touches the mode control register in the
    regular single mode case into a new function, setup_cxl_protocol_area().

    Co-authored-by: Ian Munsie
    Cc: Gavin Shan
    Signed-off-by: Andrew Donnellan
    Signed-off-by: Ian Munsie
    Reviewed-by: Gavin Shan
    Signed-off-by: Michael Ellerman

    Andrew Donnellan
     
  • The CX4 card cannot cope with a context with PE=0 due to a hardware
    limitation, resulting in:

    [ 34.166577] command failed, status limits exceeded(0x8), syndrome 0x5a7939
    [ 34.166580] mlx5_core 0000:01:00.1: Failed allocating uar, aborting

    Since the kernel API allocates a default context very early during
    device init that will almost certainly get Process Element ID 0 there is
    no easy way for us to extend the API to allow the Mellanox to inform us
    of this limitation ahead of time.

    Instead, work around the issue by extending the XSL structure to include
    a minimum PE to allocate. Although the bug is not in the XSL, it is the
    easiest place to work around this limitation given that the CX4 is
    currently the only card that uses an XSL.

    Signed-off-by: Ian Munsie
    Reviewed-by: Andrew Donnellan
    Reviewed-by: Frederic Barrat
    Signed-off-by: Michael Ellerman

    Ian Munsie
     
  • The Mellanox CX4 in cxl mode uses a hybrid interrupt model, where
    interrupts are routed from the networking hardware to the XSL using the
    MSIX table, and from there will be transformed back into an MSIX
    interrupt using the cxl style interrupts (i.e. using IVTE entries and
    ranges to map a PE and AFU interrupt number to an MSIX address).

    We want to hide the implementation details of cxl interrupts as much as
    possible. To this end, we use a special version of the MSI setup &
    teardown routines in the PHB while in cxl mode to allocate the cxl
    interrupts and configure the IVTE entries in the process element.

    This function does not configure the MSIX table - the CX4 card uses a
    custom format in that table and it would not be appropriate to fill that
    out in generic code. The rest of the functionality is similar to the
    "Full MSI-X mode" described in the CAIA, and this could be easily
    extended to support other adapters that use that mode in the future.

    The interrupts will be associated with the default context. If the
    maximum number of interrupts per context has been limited (e.g. by the
    mlx5 driver), it will automatically allocate additional kernel contexts
    to associate extra interrupts as required. These contexts will be
    started using the same WED that was used to start the default context.

    Signed-off-by: Ian Munsie
    Reviewed-by: Andrew Donnellan
    Signed-off-by: Michael Ellerman

    Ian Munsie
     
  • The Mellanox CX4 has a hardware limitation where only 4 bits of the
    AFU interrupt number can be passed to the XSL when sending an interrupt,
    limiting it to only 15 interrupts per context (AFU interrupt number 0 is
    invalid).

    In order to overcome this, we will allocate additional contexts linked
    to the default context as extra address space for the extra interrupts -
    this will be implemented in the next patch.

    This patch adds the preliminary support to allow this, by way of adding
    a linked list in the context structure that we use to keep track of the
    contexts dedicated to interrupts, and an API to simultaneously iterate
    over the related context structures, AFU interrupt numbers and hardware
    interrupt numbers. The point of using a single API to iterate these is
    to hide some of the details of the iteration from external code, and to
    reduce the number of APIs that need to be exported via base.c to allow
    built in code to call.

    Signed-off-by: Ian Munsie
    Reviewed-by: Frederic Barrat
    Reviewed-by: Andrew Donnellan
    Signed-off-by: Michael Ellerman

    Ian Munsie
     
  • These APIs will be used by the Mellanox CX4 support. While they function
    standalone to configure existing behaviour, their primary purpose is to
    allow the Mellanox driver to inform the cxl driver of a hardware
    limitation, which will be used in a future patch.

    Signed-off-by: Ian Munsie
    Reviewed-by: Frederic Barrat
    Reviewed-by: Andrew Donnellan
    Signed-off-by: Michael Ellerman

    Ian Munsie
     
  • This hooks up support for using the kernel API with a real PHB. After
    the AFU initialisation has completed it calls into the PHB code to pass
    it the AFU that will be used by other peer physical functions on the
    adapter.

    The cxl_pci_to_afu API is extended to work with peer PCI devices,
    retrieving the peer AFU from the PHB. This API may also now return an
    error if it is called on a PCI device that is not associated with either
    a cxl vPHB or a peer PCI device to an AFU, and this error is propagated
    down.

    Signed-off-by: Ian Munsie
    Reviewed-by: Andrew Donnellan
    Signed-off-by: Michael Ellerman

    Ian Munsie
     
  • The vPHB model of the cxl kernel API is a hierarchy where the AFU is
    represented by the vPHB, and it's AFU configuration records are exposed
    as functions under that vPHB. If there are no AFU configuration records
    we will create a vPHB with nothing under it, which is a waste of
    resources and will opt us into EEH handling despite not having anything
    special to handle.

    This also does not make sense for cards using the peer model of the cxl
    kernel API, where the other functions of the device are exposed via
    additional peer physical functions rather than AFU configuration
    records. This model will also not work with the existing EEH handling in
    the cxl driver, as that is designed around the vPHB model.

    Skip creating the vPHB for AFUs without any AFU configuration records,
    and opt out of EEH handling for them.

    Signed-off-by: Ian Munsie
    Reviewed-by: Andrew Donnellan
    Signed-off-by: Michael Ellerman

    Ian Munsie
     
  • The cxl kernel API has a concept of a default context associated with
    each PCI device under the virtual PHB. The Mellanox CX4 will also use
    the cxl kernel API, but it does not use a virtual PHB - rather, the AFU
    appears as a physical function as a peer to the networking functions.

    In order to allow the kernel API to work with those networking
    functions, we will need to associate a default context with them as
    well. To this end, refactor the corresponding code to do this in vphb.c
    and export it so that it can be called from the PHB code.

    Signed-off-by: Ian Munsie
    Reviewed-by: Frederic Barrat
    Reviewed-by: Andrew Donnellan
    Signed-off-by: Michael Ellerman

    Ian Munsie
     
  • The Mellanox CX4 uses a model where the AFU is one physical function of
    the device, and is used by other peer physical functions of the same
    device. This will require those other devices to grab a reference on the
    AFU when they are initialised to make sure that it does not go away
    during their lifetime.

    Move the AFU refcount functions to base.c so they can be called from
    the PHB code.

    Signed-off-by: Ian Munsie
    Reviewed-by: Andrew Donnellan
    Reviewed-by: Frederic Barrat
    Signed-off-by: Michael Ellerman

    Ian Munsie