16 Oct, 2016

1 commit

  • Pull MIPS updates from Ralf Baechle:
    "This is the main MIPS pull request for 4.9:

    MIPS core arch code:
    - traps: 64bit kernels should read CP0_EBase 64bit
    - traps: Convert ebase to KSEG0
    - c-r4k: Drop bc_wback_inv() from icache flush
    - c-r4k: Split user/kernel flush_icache_range()
    - cacheflush: Use __flush_icache_user_range()
    - uprobes: Flush icache via kernel address
    - KVM: Use __local_flush_icache_user_range()
    - c-r4k: Fix flush_icache_range() for EVA
    - Fix -mabi=64 build of vdso.lds
    - VDSO: Drop duplicated -I*/-E* aflags
    - tracing: move insn_has_delay_slot to a shared header
    - tracing: disable uprobe/kprobe on compact branch instructions
    - ptrace: Fix regs_return_value for kernel context
    - Squash lines for simple wrapper functions
    - Move identification of VP(E) into proc.c from smp-mt.c
    - Add definitions of SYNC barrierstype values
    - traps: Ensure full EBase is written
    - tlb-r4k: If there are wired entries, don't use TLBINVF
    - Sanitise coherentio semantics
    - dma-default: Don't check hw_coherentio if device is non-coherent
    - Support per-device DMA coherence
    - Adjust MIPS64 CAC_BASE to reflect Config.K0
    - Support generating Flattened Image Trees (.itb)
    - generic: Introduce generic DT-based board support
    - generic: Convert SEAD-3 to a generic board
    - Enable hardened usercopy
    - Don't specify STACKPROTECTOR in defconfigs

    Octeon:
    - Delete dead code and files across the platform.
    - Change to use all memory into use by default.
    - Rename upper case variables in setup code to lowercase.
    - Delete legacy hack for broken bootloaders.
    - Leave maintaining the link state to the actual ethernet/PHY drivers.
    - Add DTS for D-Link DSR-500N.
    - Fix PCI interrupt routing on D-Link DSR-500N.

    Pistachio:
    - Remove ANDROID_TIMED_OUTPUT from defconfig

    TX39xx:
    - Move GPIO setup from .mem_setup() to .arch_init()
    - Convert to Common Clock Framework

    TX49xx:
    - Move GPIO setup from .mem_setup() to .arch_init()
    - Convert to Common Clock Framework

    txx9wdt:
    - Add missing clock (un)prepare calls for CCF

    BMIPS:
    - Add PW, GPIO SDHCI and NAND device node names
    - Support APPENDED_DTB
    - Add missing bcm97435svmb to DT_NONE
    - Rename bcm96358nb4ser to bcm6358-neufbox4-sercom
    - Add DT examples for BCM63268, BCM3368 and BCM6362
    - Add support for BCM3368 and BCM6362

    PCI
    - Reduce stack frame usage
    - Use struct list_head lists
    - Support for CONFIG_PCI_DOMAINS_GENERIC
    - Make pcibios_set_cache_line_size an initcall
    - Inline pcibios_assign_all_busses
    - Split pci.c into pci.c & pci-legacy.c
    - Introduce CONFIG_PCI_DRIVERS_LEGACY
    - Support generic drivers

    CPC
    - Convert bare 'unsigned' to 'unsigned int'
    - Avoid lock when MIPS CM >= 3 is present

    GIC:
    - Delete unused file smp-gic.c

    mt7620:
    - Delete unnecessary assignment for the field "owner" from PCI

    BCM63xx:
    - Let clk_disable() return immediately if clk is NULL

    pm-cps:
    - Change FSB workaround to CPU blacklist
    - Update comments on barrier instructions
    - Use MIPS standard lightweight ordering barrier
    - Use MIPS standard completion barrier
    - Remove selection of sync types
    - Add MIPSr6 CPU support
    - Support CM3 changes to Coherence Enable Register

    SMP:
    - Wrap call to mips_cpc_lock_other in mips_cm_lock_other
    - Introduce mechanism for freeing and allocating IPIs

    cpuidle:
    - cpuidle-cps: Enable use with MIPSr6 CPUs.

    SEAD3:
    - Rewrite to use DT and generic kernel feature.

    USB:
    - host: ehci-sead3: Remove SEAD-3 EHCI code

    FBDEV:
    - cobalt_lcdfb: Drop SEAD3 support

    dt-bindings:
    - Document a binding for simple ASCII LCDs

    auxdisplay:
    - img-ascii-lcd: driver for simple ASCII LCD displays

    irqchip i8259:
    - i8259: Add domain before mapping parent irq
    - i8259: Allow platforms to override poll function
    - i8259: Remove unused i8259A_irq_pending

    Malta:
    - Rewrite to use DT

    of/platform:
    - Probe "isa" busses by default

    CM:
    - Print CM error reports upon bus errors

    Module:
    - Migrate exception table users off module.h and onto extable.h
    - Make various drivers explicitly non-modular:
    - Audit and remove any unnecessary uses of module.h

    mailmap:
    - Canonicalize to Qais' current email address.

    Documentation:
    - MIPS supports HAVE_REGS_AND_STACK_ACCESS_API

    Loongson1C:
    - Add CPU support for Loongson1C
    - Add board support
    - Add defconfig
    - Add RTC support for Loongson1C board

    All this except one Documentation fix has sat in linux-next and has
    survived Imagination's automated build test system"

    * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (127 commits)
    Documentation: MIPS supports HAVE_REGS_AND_STACK_ACCESS_API
    MIPS: ptrace: Fix regs_return_value for kernel context
    MIPS: VDSO: Drop duplicated -I*/-E* aflags
    MIPS: Fix -mabi=64 build of vdso.lds
    MIPS: Enable hardened usercopy
    MIPS: generic: Convert SEAD-3 to a generic board
    MIPS: generic: Introduce generic DT-based board support
    MIPS: Support generating Flattened Image Trees (.itb)
    MIPS: Adjust MIPS64 CAC_BASE to reflect Config.K0
    MIPS: Print CM error reports upon bus errors
    MIPS: Support per-device DMA coherence
    MIPS: dma-default: Don't check hw_coherentio if device is non-coherent
    MIPS: Sanitise coherentio semantics
    MIPS: PCI: Support generic drivers
    MIPS: PCI: Introduce CONFIG_PCI_DRIVERS_LEGACY
    MIPS: PCI: Split pci.c into pci.c & pci-legacy.c
    MIPS: PCI: Inline pcibios_assign_all_busses
    MIPS: PCI: Make pcibios_set_cache_line_size an initcall
    MIPS: PCI: Support for CONFIG_PCI_DOMAINS_GENERIC
    MIPS: PCI: Use struct list_head lists
    ...

    Linus Torvalds
     

15 Oct, 2016

1 commit


12 Oct, 2016

4 commits

  • Currently regs_return_value always negates reg[2] if it determines
    the syscall has failed, but when called in kernel context this check is
    invalid and may result in returning a wrong value.

    This fixes errors reported by CONFIG_KPROBES_SANITY_TEST

    Fixes: d7e7528bcd45 ("Audit: push audit success and retcode into arch ptrace.h")
    Signed-off-by: Marcin Nowakowski
    Cc: linux-mips@linux-mips.org
    Cc: stable@vger.kernel.org # 3.3+
    Patchwork: https://patchwork.linux-mips.org/patch/14381/
    Signed-off-by: Ralf Baechle

    Marcin Nowakowski
     
  • Pull uaccess.h prepwork from Al Viro:
    "Preparations to tree-wide switch to use of linux/uaccess.h (which,
    obviously, will allow to start unifying stuff for real). The last step
    there, ie

    PATT='^[[:blank:]]*#[[:blank:]]*include[[:blank:]]*'
    sed -i -e "s!$PATT!#include !" \
    `git grep -l "$PATT"|grep -v ^include/linux/uaccess.h`

    is not taken here - I would prefer to do it once just before or just
    after -rc1. However, everything should be ready for it"

    * 'work.uaccess2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    remove a stray reference to asm/uaccess.h in docs
    sparc64: separate extable_64.h, switch elf_64.h to it
    score: separate extable.h, switch module.h to it
    mips: separate extable.h, switch module.h to it
    x86: separate extable.h, switch sections.h to it
    remove stray include of asm/uaccess.h from cacheflush.h
    mn10300: remove a bogus processor.h->uaccess.h include
    xtensa: split uaccess.h into C and asm sides
    bonding: quit messing with IOCTL
    kill __kernel_ds_p off
    mn10300: finish verify_area() off
    frv: move HAVE_ARCH_UNMAPPED_AREA to pgtable.h
    exceptions: detritus removal

    Linus Torvalds
     
  • Kernel source files need not include explicitly
    because the top Makefile forces to include it with:

    -include $(srctree)/include/linux/kconfig.h

    This commit removes explicit includes except the following:

    * arch/s390/include/asm/facilities_src.h
    * tools/testing/radix-tree/linux/kernel.h

    These two are used for host programs.

    Link: http://lkml.kernel.org/r/1473656164-11929-1-git-send-email-yamada.masahiro@socionext.com
    Signed-off-by: Masahiro Yamada
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Masahiro Yamada
     
  • Daniel Walker reported problems which happens when
    crash_kexec_post_notifiers kernel option is enabled
    (https://lkml.org/lkml/2015/6/24/44).

    In that case, smp_send_stop() is called before entering kdump routines
    which assume other CPUs are still online. As the result, kdump
    routines fail to save other CPUs' registers. Additionally for MIPS
    OCTEON, it misses to stop the watchdog timer.

    To fix this problem, call a new kdump friendly function,
    crash_smp_send_stop(), instead of the smp_send_stop() when
    crash_kexec_post_notifiers is enabled. crash_smp_send_stop() is a
    weak function, and it just call smp_send_stop(). Architecture
    codes should override it so that kdump can work appropriately.
    This patch provides MIPS version.

    Fixes: f06e5153f4ae (kernel/panic.c: add "crash_kexec_post_notifiers" option)
    Link: http://lkml.kernel.org/r/20160810080950.11028.28000.stgit@sysi4-13.yrl.intra.hitachi.co.jp
    Signed-off-by: Hidehiro Kawai
    Reported-by: Daniel Walker
    Cc: Dave Young
    Cc: Baoquan He
    Cc: Vivek Goyal
    Cc: Eric Biederman
    Cc: Masami Hiramatsu
    Cc: Daniel Walker
    Cc: Xunlei Pang
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: "H. Peter Anvin"
    Cc: Borislav Petkov
    Cc: David Vrabel
    Cc: Toshi Kani
    Cc: Ralf Baechle
    Cc: David Daney
    Cc: Aaro Koskinen
    Cc: "Steven J. Hill"
    Cc: Corey Minyard
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Hidehiro Kawai
     

11 Oct, 2016

3 commits

  • The aflags-vdso is based on ccflags-vdso, which already contains the -I*
    and -EL/-EB flags from KBUILD_CFLAGS, but those flags are needlessly
    added again to aflags-vdso.

    Drop the duplication.

    Signed-off-by: James Hogan
    Reported-by: Maciej W. Rozycki
    Reviewed-by: Maciej W. Rozycki
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14369/
    Signed-off-by: Ralf Baechle

    James Hogan
     
  • The native ABI vDSO linker script vdso.lds is built by preprocessing
    vdso.lds.S, with the native -mabi flag passed in to get the correct ABI
    definitions. Unfortunately however certain toolchains choke on -mabi=64
    without a corresponding compatible -march flag, for example:

    cc1: error: ‘-march=mips32r2’ is not compatible with the selected ABI
    scripts/Makefile.build:338: recipe for target 'arch/mips/vdso/vdso.lds' failed

    Fix this by including ccflags-vdso in the KBUILD_CPPFLAGS for vdso.lds,
    which includes the appropriate -march flag.

    Fixes: ebb5e78cc634 ("MIPS: Initial implementation of a VDSO")
    Signed-off-by: James Hogan
    Reviewed-by: Maciej W. Rozycki
    Cc: linux-mips@linux-mips.org
    Cc: stable@vger.kernel.org # 4.4.x-
    Patchwork: https://patchwork.linux-mips.org/patch/14368/
    Signed-off-by: Ralf Baechle

    James Hogan
     
  • Pull protection keys syscall interface from Thomas Gleixner:
    "This is the final step of Protection Keys support which adds the
    syscalls so user space can actually allocate keys and protect memory
    areas with them. Details and usage examples can be found in the
    documentation.

    The mm side of this has been acked by Mel"

    * 'mm-pkeys-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/pkeys: Update documentation
    x86/mm/pkeys: Do not skip PKRU register if debug registers are not used
    x86/pkeys: Fix pkeys build breakage for some non-x86 arches
    x86/pkeys: Add self-tests
    x86/pkeys: Allow configuration of init_pkru
    x86/pkeys: Default to a restrictive init PKRU
    pkeys: Add details of system call use to Documentation/
    generic syscalls: Wire up memory protection keys syscalls
    x86: Wire up protection keys system calls
    x86/pkeys: Allocation/free syscalls
    x86/pkeys: Make mprotect_key() mask off additional vm_flags
    mm: Implement new pkey_mprotect() system call
    x86/pkeys: Add fault handling for PF_PK page fault bit

    Linus Torvalds
     

10 Oct, 2016

1 commit

  • Enable CONFIG_HARDENED_USERCOPY checks for MIPS, calling check_object
    size in all of copy_{to,from}_user(), __copy_{to,from}_user() &
    __copy_{to,from}_user_inatomic().

    Signed-off-by: Paul Burton
    Cc: Kees Cook
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14371/
    Signed-off-by: Ralf Baechle

    Paul Burton
     

08 Oct, 2016

5 commits

  • The declarations of arch-specific functions have been moved to a common
    header in commit 3820b4d2789f ('uprobes: Move function declarations out
    of arch'), but MIPS and S390 has added them to their own trees later.
    Remove the unnecessary duplicates.

    Link: http://lkml.kernel.org/r/1472804384-17830-1-git-send-email-marcin.nowakowski@imgtec.com
    Signed-off-by: Marcin Nowakowski
    Acked-by: Heiko Carstens
    Cc: Martin Schwidefsky
    Cc: Ralf Baechle
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Marcin Nowakowski
     
  • When doing an nmi backtrace of many cores, most of which are idle, the
    output is a little overwhelming and very uninformative. Suppress
    messages for cpus that are idling when they are interrupted and just
    emit one line, "NMI backtrace for N skipped: idling at pc 0xNNN".

    We do this by grouping all the cpuidle code together into a new
    .cpuidle.text section, and then checking the address of the interrupted
    PC to see if it lies within that section.

    This commit suitably tags x86 and tile idle routines, and only adds in
    the minimal framework for other architectures.

    Link: http://lkml.kernel.org/r/1472487169-14923-5-git-send-email-cmetcalf@mellanox.com
    Signed-off-by: Chris Metcalf
    Acked-by: Peter Zijlstra (Intel)
    Tested-by: Peter Zijlstra (Intel)
    Tested-by: Daniel Thompson [arm]
    Tested-by: Petr Mladek
    Cc: Aaron Tomlin
    Cc: Peter Zijlstra (Intel)
    Cc: "Rafael J. Wysocki"
    Cc: Russell King
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chris Metcalf
     
  • Patch series "improvements to the nmi_backtrace code" v9.

    This patch series modifies the trigger_xxx_backtrace() NMI-based remote
    backtracing code to make it more flexible, and makes a few small
    improvements along the way.

    The motivation comes from the task isolation code, where there are
    scenarios where we want to be able to diagnose a case where some cpu is
    about to interrupt a task-isolated cpu. It can be helpful to see both
    where the interrupting cpu is, and also an approximation of where the
    cpu that is being interrupted is. The nmi_backtrace framework allows us
    to discover the stack of the interrupted cpu.

    I've tested that the change works as desired on tile, and build-tested
    x86, arm, mips, and sparc64. For x86 I confirmed that the generic
    cpuidle stuff as well as the architecture-specific routines are in the
    new cpuidle section. For arm, mips, and sparc I just build-tested it
    and made sure the generic cpuidle routines were in the new cpuidle
    section, but I didn't attempt to figure out which the platform-specific
    idle routines might be. That might be more usefully done by someone
    with platform experience in follow-up patches.

    This patch (of 4):

    Currently you can only request a backtrace of either all cpus, or all
    cpus but yourself. It can also be helpful to request a remote backtrace
    of a single cpu, and since we want that, the logical extension is to
    support a cpumask as the underlying primitive.

    This change modifies the existing lib/nmi_backtrace.c code to take a
    cpumask as its basic primitive, and modifies the linux/nmi.h code to use
    the new "cpumask" method instead.

    The existing clients of nmi_backtrace (arm and x86) are converted to
    using the new cpumask approach in this change.

    The other users of the backtracing API (sparc64 and mips) are converted
    to use the cpumask approach rather than the all/allbutself approach.
    The mips code ignored the "include_self" boolean but with this change it
    will now also dump a local backtrace if requested.

    Link: http://lkml.kernel.org/r/1472487169-14923-2-git-send-email-cmetcalf@mellanox.com
    Signed-off-by: Chris Metcalf
    Tested-by: Daniel Thompson [arm]
    Reviewed-by: Aaron Tomlin
    Reviewed-by: Petr Mladek
    Cc: "Rafael J. Wysocki"
    Cc: Russell King
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: Ralf Baechle
    Cc: David Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chris Metcalf
     
  • This came to light when implementing native 64-bit atomics for ARCv2.

    The atomic64 self-test code uses CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
    to check whether atomic64_dec_if_positive() is available. It seems it
    was needed when not every arch defined it. However as of current code
    the Kconfig option seems needless

    - for CONFIG_GENERIC_ATOMIC64 it is auto-enabled in lib/Kconfig and a
    generic definition of API is present lib/atomic64.c
    - arches with native 64-bit atomics select it in arch/*/Kconfig and
    define the API in their headers

    So I see no point in keeping the Kconfig option

    Compile tested for:
    - blackfin (CONFIG_GENERIC_ATOMIC64)
    - x86 (!CONFIG_GENERIC_ATOMIC64)
    - ia64

    Link: http://lkml.kernel.org/r/1473703083-8625-3-git-send-email-vgupta@synopsys.com
    Signed-off-by: Vineet Gupta
    Cc: Richard Henderson
    Cc: Ivan Kokshaysky
    Cc: Matt Turner
    Cc: Russell King
    Cc: Catalin Marinas
    Cc: Will Deacon
    Cc: Ralf Baechle
    Cc: "James E.J. Bottomley"
    Cc: Helge Deller
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Michael Ellerman
    Cc: Martin Schwidefsky
    Cc: Heiko Carstens
    Cc: "David S. Miller"
    Cc: Chris Metcalf
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: "H. Peter Anvin"
    Cc: Vineet Gupta
    Cc: Zhaoxiu Zeng
    Cc: Linus Walleij
    Cc: Alexander Potapenko
    Cc: Andrey Ryabinin
    Cc: Herbert Xu
    Cc: Ming Lin
    Cc: Arnd Bergmann
    Cc: Geert Uytterhoeven
    Cc: Peter Zijlstra
    Cc: Borislav Petkov
    Cc: Andi Kleen
    Cc: Boqun Feng
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Vineet Gupta
     
  • We get 1 warning when building kernel with W=1:

    drivers/char/mem.c:220:12: warning: no previous prototype for 'phys_mem_access_prot_allowed' [-Wmissing-prototypes]
    int __weak phys_mem_access_prot_allowed(struct file *file,

    In fact, its declaration is spreading to several header files in
    different architecture, but need to be declare in common header file.

    So this patch moves phys_mem_access_prot_allowed() to pgtable.h.

    Link: http://lkml.kernel.org/r/1473751597-12139-1-git-send-email-baoyou.xie@linaro.org
    Signed-off-by: Baoyou Xie
    Acked-by: Thomas Gleixner
    Acked-by: Ralf Baechle
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Baoyou Xie
     

07 Oct, 2016

11 commits

  • Pull KVM updates from Radim Krčmář:
    "All architectures:
    - move `make kvmconfig` stubs from x86
    - use 64 bits for debugfs stats

    ARM:
    - Important fixes for not using an in-kernel irqchip
    - handle SError exceptions and present them to guests if appropriate
    - proxying of GICV access at EL2 if guest mappings are unsafe
    - GICv3 on AArch32 on ARMv8
    - preparations for GICv3 save/restore, including ABI docs
    - cleanups and a bit of optimizations

    MIPS:
    - A couple of fixes in preparation for supporting MIPS EVA host
    kernels
    - MIPS SMP host & TLB invalidation fixes

    PPC:
    - Fix the bug which caused guests to falsely report lockups
    - other minor fixes
    - a small optimization

    s390:
    - Lazy enablement of runtime instrumentation
    - up to 255 CPUs for nested guests
    - rework of machine check deliver
    - cleanups and fixes

    x86:
    - IOMMU part of AMD's AVIC for vmexit-less interrupt delivery
    - Hyper-V TSC page
    - per-vcpu tsc_offset in debugfs
    - accelerated INS/OUTS in nVMX
    - cleanups and fixes"

    * tag 'kvm-4.9-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (140 commits)
    KVM: MIPS: Drop dubious EntryHi optimisation
    KVM: MIPS: Invalidate TLB by regenerating ASIDs
    KVM: MIPS: Split kernel/user ASID regeneration
    KVM: MIPS: Drop other CPU ASIDs on guest MMU changes
    KVM: arm/arm64: vgic: Don't flush/sync without a working vgic
    KVM: arm64: Require in-kernel irqchip for PMU support
    KVM: PPC: Book3s PR: Allow access to unprivileged MMCR2 register
    KVM: PPC: Book3S PR: Support 64kB page size on POWER8E and POWER8NVL
    KVM: PPC: Book3S: Remove duplicate setting of the B field in tlbie
    KVM: PPC: BookE: Fix a sanity check
    KVM: PPC: Book3S HV: Take out virtual core piggybacking code
    KVM: PPC: Book3S: Treat VTB as a per-subcore register, not per-thread
    ARM: gic-v3: Work around definition of gic_write_bpr1
    KVM: nVMX: Fix the NMI IDT-vectoring handling
    KVM: VMX: Enable MSR-BASED TPR shadow even if APICv is inactive
    KVM: nVMX: Fix reload apic access page warning
    kvmconfig: add virtio-gpu to config fragment
    config: move x86 kvm_guest.config to a common location
    arm64: KVM: Remove duplicating init code for setting VMID
    ARM: KVM: Support vgic-v3
    ...

    Linus Torvalds
     
  • Convert the MIPS SEAD-3 board support to be a generic board, supported
    by generic kernels.

    Because the SEAD-3 boot protocol was defined long ago and we don't want
    to force a switch to the UHI protocol, SEAD-3 is added as a legacy board
    which is detected by reading the REVISION register. This may technically
    not be a valid memory read & future work will include attempting to
    handle that gracefully. In practice since SEAD-3 is the only legacy
    board supported by the generic kernel so far the read will only happen
    on SEAD-3 boards, and even once Malta is converted the same REVISION
    register exists there too. Other boards such as Boston, Ci20 & Ci40 will
    use the UHI boot protocol & thus not run any of the legacy board detect
    functions.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14354/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Introduce a "generic" platform, which aims to be board-agnostic by
    making use of device trees passed by the boot protocol defined in the
    MIPS UHI (Universal Hosting Interface) specification. Provision is made
    for supporting boards which use a legacy boot protocol that can't be
    changed, but adding support for such boards or any others is left to
    followon patches.

    Right now the built kernels expect to be loaded to 0x80100000, ie. in
    kseg0. This is fine for the vast majority of MIPS platforms, but
    nevertheless it would be good to remove this limitation in the future by
    mapping the kernel via the TLB such that it can be loaded anywhere & map
    itself appropriately.

    Configuration is handled by dynamically generating configs using
    scripts/kconfig/merge_config.sh, somewhat similar to the way powerpc
    makes use of it. This allows for variations upon the configuration, eg.
    differing architecture revisions or subsets of driver support for
    differing boards, to be handled without having a large number of
    defconfig files.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14353/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Add support for generating kernel images in the Flattened Image Tree
    (.itb) format as supported by U-Boot. This format is essentially a
    Flattened Device Tree binary containing images (kernels, DTBs, ramdisks)
    and configurations which link those images together. The big advantages
    of FIT images over the uImage format are:

    - We can include FDTs in the kernel image in a way that the bootloader
    can extract it & manipulate it before providing it to the kernel.
    Thus we can ship FDTs as part of the kernel giving us the advantages
    of being able to develop & maintain the DT within the kernel tree,
    but also have the benefits of the bootloader being able to
    manipulate the FDT. Example uses for this would be to inject the
    kernel command line into the chosen node, or to fill in the correct
    memory size.

    - We can include multiple configurations in a single kernel image.
    This means that a single FIT image can, given appropriate
    bootloaders, be booted on different boards with the bootloader
    selecting an appropriate configuration & providing the correct FDT
    to the kernel.

    - We can support a multitude of hashes over the data.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14352/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • On MIPS64 we define the default CAC_BASE as one of the xkphys regions of
    the virtual address space. Since the CCA is encoded in bits 61:59 of
    xkphys addresses, fixing CAC_BASE to any particular one prevents us from
    dynamically changing the CCA as we do for MIPS32 where CAC_BASE is
    placed within kseg0. In order to make the kernel more generic, drop the
    current kludge that gives CAC_BASE CCA=3 if CONFIG_DMA_NONCOHERENT is
    selected (disregarding CONFIG_DMA_MAYBE_COHERENT) & CCA=5 (which is not
    standardised by the architecture) otherwise. Instead read Config.K0 and
    generate the appropriate offset into xkphys, presuming that either the
    bootloader or early kernel code will have configured Config.K0
    appropriately. This seems like the best option for a generic
    implementation.

    The ip27 spaces.h is adjusted to set its former value of CAC_BASE, since
    it's the only user of CAC_BASE from assembly (in its smp_slave_setup
    macro). This allows the generic case to focus solely on C code without
    breaking ip27.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14351/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • If a bus error occurs on a system with a MIPS Coherence Manager (CM)
    then the CM may hold useful diagnostic information. Printing this out
    has so far been left up to boards, with the requirement that they
    register a board_be_handler function & call mips_cm_error_decode() from
    there.

    In order to avoid boards other than Malta needing to duplicate this
    code, call mips_cm_error_decode() automatically if the board registers
    no board_be_handler, and remove the Malta implementation of that.

    This patch results in no functional change, but removes a further piece
    of platform-specific code.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14350/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • On some MIPS systems, a subset of devices may have DMA coherent with CPU
    caches. For example in systems including a MIPS I/O Coherence Unit
    (IOCU), some devices may be connected to that IOCU whilst others are
    not.

    Prior to this patch, we have a plat_device_is_coherent() function but no
    implementation which does anything besides return a global true or
    false, optionally chosen at runtime. For devices such as those described
    above this is insufficient.

    Fix this by tracking DMA coherence on a per-device basis with a
    dma_coherent field in struct dev_archdata. Setting this from
    arch_setup_dma_ops() takes care of devices which set the dma-coherent
    property via device tree, and any PCI devices beneath a bridge described
    in DT, automatically.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14349/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • There are no cases where plat_device_is_coherent() will return zero
    whilst hw_coherentio is non-zero, and acting any differently in such a
    case doesn't make much sense - if a device is non-coherent with the CPU
    caches then access to memory "coherent" with DMA must be uncached. Clean
    up the nonsensical case.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14348/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • The coherentio variable has previously been used as a boolean value,
    indicating whether the user specified that coherent I/O should be
    enabled or disabled. It failed to take into account the case where the
    user does not specify any preference, in which case it makes sense that
    we should default to coherent I/O if the hardware supports it
    (hw_coherentio is non-zero).

    Introduce an enum to clarify the 3 different values of coherentio & use
    it throughout the code, modifying plat_device_is_coherent() &
    r4k_cache_init() to take into account the default case.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: Paul Burton
    Patchwork: https://patchwork.linux-mips.org/patch/14347/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Introduce support for PCI drivers using only functionality provided
    generically by the PCI subsystem, by adding the minimum arch-provided
    functions required.

    The driver this has been developed for & tested with the xilinx-pcie on
    a MIPS Boston development board.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14346/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Introduce 2 Kconfig symbols, CONFIG_PCI_DRIVERS_GENERIC &
    CONFIG_PCI_DRIVERS_LEGACY, which indicate whether the system should be
    built to for PCI drivers using the MIPS-specific struct pci_controller
    API (hereafter "legacy" drivers) or more generic drivers using only
    functionality provided by the PCI core (hereafter "generic" drivers).

    The Kconfig entries are created such that platforms have to select
    CONFIG_PCI_DRIVERS_GENERIC if they wish to use it - that is, the default
    is CONFIG_PCI_DRIVERS_LEGACY so that existing platforms need no
    modification.

    The functions declared in pci.h are rearranged with those provided only
    by pci-legacy.c being guarded by an #ifdef CONFIG_PCI_DRIVERS_LEGACY to
    ensure they are only used in configurations where they are implemented.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14345/
    Signed-off-by: Ralf Baechle

    Paul Burton
     

06 Oct, 2016

14 commits

  • Split out the parts of pci.c that are used by existing systems with
    MIPS-style PCI drivers but that will not be used by systems with more
    generic PCI drivers such as pcie-xilinx. This is done in preparation for
    allowing configurations where the code moved to pci-legacy.c is not
    built.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: Paul Burton
    Patchwork: https://patchwork.linux-mips.org/patch/14344/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • The MIPS implementation of pcibios_assign_all_busses trivially returns
    1. Implement it as a static function in asm/pci.h such that the compiler
    can inline it & optimise out never-taken paths.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14343/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • In preparation for allowing configurations in which pcibios_init is not
    included, make pcibios_set_cache_line_size an initcall. arch_initcall is
    used such that it runs before the pcibios_init subsys_initcall for
    platforms that continue to use it.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14342/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Introduce support for CONFIG_PCI_DOMAINS_GENERIC, allowing for platforms
    to make use of generic PCI domains instead of the MIPS-specific
    implementation. The set_pci_need_domain_info function is introduced to
    abstract away the removed need_domain_info field in struct
    pci_controller, and pcibios_scanbus is adjusted to use the pci_domain_nr
    accessor instead of directly accessing the index field.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14341/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Rather than open-coding a linked list implementation, make use of the
    one in linux/list.h.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14340/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Current instruction decoder for uprobe/kprobe handler only handles
    branches with delay slots. For compact branches the behaviour is rather
    unpredictable - and depending on the encoding of a compact branch
    instruction may result in one (or more) of:
    - executing an instruction that follows a branch which wasn't in a delay
    slot and shouldn't have been executed
    - incorrectly emulating a branch leading to a jump to a wrong location
    - unexpected branching out of the single-stepped code and never reaching
    the breakpoint that should terminate the probe handler

    Results of these actions are generally unpredictable, but can end up
    with a probed application or kernel crash, so disable placing probes on
    compact branches until they are handled properly.

    Signed-off-by: Marcin Nowakowski
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14336/
    Signed-off-by: Ralf Baechle

    Marcin Nowakowski
     
  • Currently both kprobes and uprobes code have definitions of the
    insn_has_delay_slot method. Move it to a separate header as an inline
    method that each probe-specific method can later use.
    No functional change intended, although the methods slightly varied in
    the constraints they set for the methods - the uprobes one was chosen as
    it is slightly more specific when filtering opcode fields.

    Signed-off-by: Marcin Nowakowski
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14335/
    Signed-off-by: Ralf Baechle

    Marcin Nowakowski
     
  • Use appended DTB when available.

    Signed-off-by: Jaedon Shin
    Cc: Kevin Cernekee
    Cc: Florian Fainelli
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14337/
    Signed-off-by: Ralf Baechle

    Jaedon Shin
     
  • Changes node names of the interrupt-controller device nodes to
    interrupt-controller instead of label strings.

    Signed-off-by: Jaedon Shin
    Cc: Florian Fainelli
    Cc: Jonas Gorski
    Cc: Kevin Cernekee
    Cc: Rob Herring
    Cc: MIPS Mailing List
    Cc: devicetree@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14004/
    Signed-off-by: Ralf Baechle

    Jaedon Shin
     
  • Adds NAND device nodes to BCM7xxx MIPS based SoCs.

    Signed-off-by: Jaedon Shin
    Cc: Florian Fainelli
    Cc: Jonas Gorski
    Cc: Kevin Cernekee
    Cc: Rob Herring
    Cc: MIPS Mailing List
    Cc: devicetree@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14003/
    Signed-off-by: Ralf Baechle

    Jaedon Shin
     
  • Adds SDHCI device nodes to BCM7xxx MIPS based SoCs.

    Signed-off-by: Jaedon Shin
    Reviewed-by: Florian Fainelli
    Cc: Jonas Gorski
    Cc: Kevin Cernekee
    Cc: Rob Herring
    Cc: MIPS Mailing List
    Cc: devicetree@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14002/
    Signed-off-by: Ralf Baechle

    Jaedon Shin
     
  • Adds GPIO device nodes to BCM7xxx MIPS based SoCs.

    Signed-off-by: Jaedon Shin
    Cc: Florian Fainelli
    Cc: Jonas Gorski
    Cc: Kevin Cernekee
    Cc: Rob Herring
    Cc: MIPS Mailing List
    Cc: devicetree@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14001/
    Signed-off-by: Ralf Baechle

    Jaedon Shin
     
  • Adds PWM device nodes to BCM7xxx MIPS based SoCs.

    Signed-off-by: Jaedon Shin
    Reviewed-by: Florian Fainelli
    Cc: Jonas Gorski
    Cc: Kevin Cernekee
    Cc: Rob Herring
    Cc: MIPS Mailing List
    Cc: devicetree@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14000/
    Signed-off-by: Ralf Baechle

    Jaedon Shin
     
  • The arch code will hang the machine with an infinite loop if the board
    doesn't provide an impelementation of halt - let it, rather than
    duplicating it.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14280/
    Signed-off-by: Ralf Baechle

    Paul Burton