1. 23 7月, 2014 2 次提交
  2. 21 7月, 2014 1 次提交
  3. 19 7月, 2014 1 次提交
    • M
      arm64: cpuinfo: print info for all CPUs · d7a49086
      Mark Rutland 提交于
      Currently reading /proc/cpuinfo will result in information being read
      out of the MIDR_EL1 of the current CPU, and the information is not
      associated with any particular logical CPU number.
      
      This is problematic for systems with heterogeneous CPUs (i.e.
      big.LITTLE) where MIDR fields will vary across CPUs, and the output will
      differ depending on the executing CPU.
      
      This patch reorganises the code responsible for /proc/cpuinfo to print
      information per-cpu. In the process, we perform several cleanups:
      
      * Property names are coerced to lower-case (to match "processor" as per
        glibc's expectations).
      * Property names are simplified and made to match the MIDR field names.
      * Revision is changed to hex as with every other field.
      * The meaningless Architecture property is removed.
      * The ripe-for-abuse Machine field is removed.
      
      The features field (a human-readable representation of the hwcaps)
      remains printed once, as this is expected to remain in use as the
      globally support CPU features. To enable the possibility of the addition
      of per-cpu HW feature information later, this is printed before any
      CPU-specific information.
      
      Comments are added to guide userspace developers in the right direction
      (using the hwcaps provided in auxval). Hopefully where userspace
      applications parse /proc/cpuinfo rather than using the readily available
      hwcaps, they limit themselves to reading said first line.
      
      If CPU features differ from each other, the previously installed sanity
      checks will give us some advance notice with warnings and
      TAINT_CPU_OUT_OF_SPEC. If we are lucky, we will never see such systems.
      Rework will be required in many places to support such systems anyway.
      Signed-off-by: NMark Rutland <mark.rutland@arm.com>
      Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Marcus Shawcroft <marcus.shawcroft@arm.com>
      Cc: Peter Maydell <peter.maydell@linaro.org>
      Acked-by: NWill Deacon <will.deacon@arm.com>
      [catalin.marinas@arm.com: remove machine_name as it is no longer reported]
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      d7a49086
  4. 18 7月, 2014 8 次提交
  5. 17 7月, 2014 6 次提交
  6. 10 7月, 2014 10 次提交
    • M
      arm64: Enable TEXT_OFFSET fuzzing · da57a369
      Mark Rutland 提交于
      The arm64 Image header contains a text_offset field which bootloaders
      are supposed to read to determine the offset (from a 2MB aligned "start
      of memory" per booting.txt) at which to load the kernel. The offset is
      not well respected by bootloaders at present, and due to the lack of
      variation there is little incentive to support it. This is unfortunate
      for the sake of future kernels where we may wish to vary the text offset
      (even zeroing it).
      
      This patch adds options to arm64 to enable fuzz-testing of text_offset.
      CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET forces the text offset to a random
      16-byte aligned value value in the range [0..2MB) upon a build of the
      kernel. It is recommended that distribution kernels enable randomization
      to test bootloaders such that any compliance issues can be fixed early.
      Signed-off-by: NMark Rutland <mark.rutland@arm.com>
      Acked-by: NTom Rini <trini@ti.com>
      Acked-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      da57a369
    • M
      arm64: Update the Image header · a2c1d73b
      Mark Rutland 提交于
      Currently the kernel Image is stripped of everything past the initial
      stack, and at runtime the memory is initialised and used by the kernel.
      This makes the effective minimum memory footprint of the kernel larger
      than the size of the loaded binary, though bootloaders have no mechanism
      to identify how large this minimum memory footprint is. This makes it
      difficult to choose safe locations to place both the kernel and other
      binaries required at boot (DTB, initrd, etc), such that the kernel won't
      clobber said binaries or other reserved memory during initialisation.
      
      Additionally when big endian support was added the image load offset was
      overlooked, and is currently of an arbitrary endianness, which makes it
      difficult for bootloaders to make use of it. It seems that bootloaders
      aren't respecting the image load offset at present anyway, and are
      assuming that offset 0x80000 will always be correct.
      
      This patch adds an effective image size to the kernel header which
      describes the amount of memory from the start of the kernel Image binary
      which the kernel expects to use before detecting memory and handling any
      memory reservations. This can be used by bootloaders to choose suitable
      locations to load the kernel and/or other binaries such that the kernel
      will not clobber any memory unexpectedly. As before, memory reservations
      are required to prevent the kernel from clobbering these locations
      later.
      
      Both the image load offset and the effective image size are forced to be
      little-endian regardless of the native endianness of the kernel to
      enable bootloaders to load a kernel of arbitrary endianness. Bootloaders
      which wish to make use of the load offset can inspect the effective
      image size field for a non-zero value to determine if the offset is of a
      known endianness. To enable software to determine the endinanness of the
      kernel as may be required for certain use-cases, a new flags field (also
      little-endian) is added to the kernel header to export this information.
      
      The documentation is updated to clarify these details. To discourage
      future assumptions regarding the value of text_offset, the value at this
      point in time is removed from the main flow of the documentation (though
      kept as a compatibility note). Some minor formatting issues in the
      documentation are also corrected.
      Signed-off-by: NMark Rutland <mark.rutland@arm.com>
      Acked-by: NTom Rini <trini@ti.com>
      Cc: Geoff Levand <geoff@infradead.org>
      Cc: Kevin Hilman <kevin.hilman@linaro.org>
      Acked-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      a2c1d73b
    • M
      arm64: place initial page tables above the kernel · bd00cd5f
      Mark Rutland 提交于
      Currently we place swapper_pg_dir and idmap_pg_dir below the kernel
      image, between PHYS_OFFSET and (PHYS_OFFSET + TEXT_OFFSET). However,
      bootloaders may use portions of this memory below the kernel and we do
      not parse the memory reservation list until after the MMU has been
      enabled. As such we may clobber some memory a bootloader wishes to have
      preserved.
      
      To enable the use of all of this memory by bootloaders (when the
      required memory reservations are communicated to the kernel) it is
      necessary to move our initial page tables elsewhere. As we currently
      have an effectively unbound requirement for memory at the end of the
      kernel image for .bss, we can place the page tables here.
      
      This patch moves the initial page table to the end of the kernel image,
      after the BSS. As they do not consist of any initialised data they will
      be stripped from the kernel Image as with the BSS. The BSS clearing
      routine is updated to stop at __bss_stop rather than _end so as to not
      clobber the page tables, and memory reservations made redundant by the
      new organisation are removed.
      Signed-off-by: NMark Rutland <mark.rutland@arm.com>
      Tested-by: NLaura Abbott <lauraa@codeaurora.org>
      Acked-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      bd00cd5f
    • M
      arm64: head.S: remove unnecessary function alignment · 909a4069
      Mark Rutland 提交于
      Currently __turn_mmu_on is aligned to 64 bytes to ensure that it doesn't
      span any page boundary, which simplifies the idmap and spares us
      requiring an additional page table to map half of the function. In
      keeping with other important requirements in architecture code, this
      fact is undocumented.
      
      Additionally, as the function consists of three instructions totalling
      12 bytes with no literal pool data, a smaller alignment of 16 bytes
      would be sufficient.
      
      This patch reduces the alignment to 16 bytes and documents the
      underlying reason for the alignment. This reduces the required alignment
      of the entire .head.text section from 64 bytes to 16 bytes, though it
      may still be aligned to a larger value depending on TEXT_OFFSET.
      Signed-off-by: NMark Rutland <mark.rutland@arm.com>
      Tested-by: NLaura Abbott <lauraa@codeaurora.org>
      Acked-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      909a4069
    • C
      arm64: Cast KSTK_(EIP|ESP) to unsigned long · ebe6152e
      Catalin Marinas 提交于
      This is for similarity with thread_saved_(pc|sp) and to avoid some
      compiler warnings in the audit code.
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      ebe6152e
    • A
      arm64: Add audit support · 875cbf3e
      AKASHI Takahiro 提交于
      On AArch64, audit is supported through generic lib/audit.c and
      compat_audit.c, and so this patch adds arch specific definitions required.
      
      Acked-by Will Deacon <will.deacon@arm.com>
      Acked-by: NRichard Guy Briggs <rgb@redhat.com>
      Signed-off-by: NAKASHI Takahiro <takahiro.akashi@linaro.org>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      875cbf3e
    • A
      arm64: audit: Add audit hook in syscall_trace_enter/exit() · 5701ede8
      AKASHI Takahiro 提交于
      This patch adds auditing functions on entry to or exit from
      every system call invocation.
      Acked-by: NRichard Guy Briggs <rgb@redhat.com>
      Acked-by Will Deacon <will.deacon@arm.com>
      Signed-off-by: NAKASHI Takahiro <takahiro.akashi@linaro.org>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      5701ede8
    • C
      arm64: Add __NR_* definitions for compat syscalls · f3e5c847
      Catalin Marinas 提交于
      This patch adds __NR_* definitions to asm/unistd32.h, moves the
      __NR_compat_* definitions to asm/unistd.h and removes all the explicit
      unistd32.h includes apart from the one building the compat syscall
      table. The aim is to have the compat __NR_* definitions available but
      without colliding with the native syscall definitions (required by
      lib/compat_audit.c to avoid duplicating the audit header files between
      native and compat).
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      f3e5c847
    • L
      arm64: enable context tracking · 6c81fe79
      Larry Bassel 提交于
      Make calls to ct_user_enter when the kernel is exited
      and ct_user_exit when the kernel is entered (in el0_da,
      el0_ia, el0_svc, el0_irq and all of the "error" paths).
      
      These macros expand to function calls which will only work
      properly if el0_sync and related code has been rearranged
      (in a previous patch of this series).
      
      The calls to ct_user_exit are made after hw debugging has been
      enabled (enable_dbg_and_irq).
      
      The call to ct_user_enter is made at the beginning of the
      kernel_exit macro.
      
      This patch is based on earlier work by Kevin Hilman.
      Save/restore optimizations were also done by Kevin.
      Acked-by: NWill Deacon <will.deacon@arm.com>
      Reviewed-by: NKevin Hilman <khilman@linaro.org>
      Tested-by: NKevin Hilman <khilman@linaro.org>
      Signed-off-by: NLarry Bassel <larry.bassel@linaro.org>
      Signed-off-by: NKevin Hilman <khilman@linaro.org>
      Signed-off-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      6c81fe79
    • L
      arm64: adjust el0_sync so that a function can be called · 6ab6463a
      Larry Bassel 提交于
      To implement the context tracker properly on arm64,
      a function call needs to be made after debugging and
      interrupts are turned on, but before the lr is changed
      to point to ret_to_user(). If the function call
      is made after the lr is changed the function will not
      return to the correct place.
      
      For similar reasons, defer the setting of x0 so that
      it doesn't need to be saved around the function call
      (save far_el1 in x26 temporarily instead).
      Acked-by: NWill Deacon <will.deacon@arm.com>
      Reviewed-by: NKevin Hilman <khilman@linaro.org>
      Tested-by: NKevin Hilman <khilman@linaro.org>
      Signed-off-by: NLarry Bassel <larry.bassel@linaro.org>
      Signed-off-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      6ab6463a
  7. 09 7月, 2014 2 次提交
  8. 05 7月, 2014 1 次提交
  9. 04 7月, 2014 4 次提交
  10. 01 7月, 2014 3 次提交
    • T
      ARM: mvebu: fix cpuidle implementation to work on big-endian systems · 6509dc74
      Thomas Petazzoni 提交于
      On Marvell Armada XP, when a CPU comes back from deep idle state of
      cpuidle, it restarts its execution at armada_370_xp_cpu_resume(),
      which puts back the CPU into the coherency, and then calls the generic
      cpu_resume() function.
      
      While this works on little-endian configurations, it doesn't work on
      big-endian configurations because the CPU restarts in little-endian,
      and therefore must be switched back to big-endian to operate
      properly. To achieve this, a 'setend be' instruction must be executed
      in big-endian configurations. However, the ARM_BE8() macro that is
      used to implement nice compile-time conditional for ARM LE vs. ARM BE8
      is not easily usable in inline assembly.
      
      Therefore, this patch moves the armada_370_xp_cpu_resume() C function,
      which was anyway just a block of inline assembly, into a proper
      pmsu_ll.S file, and adds the appropriate ARM_BE8(setend be)
      instruction.
      
      Without this patch, an Armada XP big endian configuration with cpuidle
      enabled fails to boot, as it hangs as soon as one of the CPU hits the
      deep idle state.
      Signed-off-by: NThomas Petazzoni <thomas.petazzoni@free-electrons.com>
      Link: https://lkml.kernel.org/r/1404130165-3593-1-git-send-email-thomas.petazzoni@free-electrons.comSigned-off-by: NJason Cooper <jason@lakedaemon.net>
      6509dc74
    • T
      ARM: mvebu: update L2/PCIe deadlock workaround after L2CC cleanup · 01178890
      Thomas Petazzoni 提交于
      Commit 497a9230 ("ARM: mvebu:
      implement L2/PCIe deadlock workaround") introduced some logic in
      coherency.c to adjust the PL310 cache controller Device Tree node of
      Armada 375 and Armada 38x platform to include the 'arm,io-coherent'
      property if the system is running with hardware I/O coherency enabled.
      
      However, with the L2CC driver cleanup done by Russell King, the
      initialization of the L2CC driver has been moved earlier, and is now
      part of the init_IRQ() ARM function in
      arch/arm/kernel/irq.c. Therefore, calling coherency_init() in
      ->init_time() is now too late, as the Device Tree property gets added
      too late (after the L2CC driver has been initialized).
      
      In order to fix this, this commit removes the ->init_time() callback
      use in board-v7.c and replaces it with an ->init_irq() callback. We
      therefore no longer use the default ->init_irq() callback, but we now
      use the default ->init_time() callback.
      
      In this newly introduced ->init_irq() callback, we call irqchip_init()
      which is the default behavior when ->init_irq() isn't defined, and
      then do the initialization related to the coherency: SCU, coherency
      fabric, and mvebu-mbus (which is needed to start secondary CPUs).
      Signed-off-by: NThomas Petazzoni <thomas.petazzoni@free-electrons.com>
      Link: https://lkml.kernel.org/r/1402585772-10405-4-git-send-email-thomas.petazzoni@free-electrons.comSigned-off-by: NJason Cooper <jason@lakedaemon.net>
      01178890
    • T
      ARM: mvebu: move Armada 375 external abort logic as a quirk · 752ef800
      Thomas Petazzoni 提交于
      In preparation to a small re-organization of the initialization
      sequence in board-v7.c, this commit moves the registration of the
      custom external abort handler on Armada 375 later in the boot
      sequence, and makes it more similar to the other quirks that we
      already have. There is indeed no need to register this abort handler
      particularly early, it simply needs to be registered before switching
      to userspace.
      
      In addition to this, this commit makes the registration of the custom
      abort handler conditional on Armada 375 Z1, because Armada 375 A0 and
      later iterations are not affected by the issue.
      
      This commit was tested on both Armada 375 Z1 and Armada 375 A0
      platforms.
      Signed-off-by: NThomas Petazzoni <thomas.petazzoni@free-electrons.com>
      Link: https://lkml.kernel.org/r/1402585772-10405-3-git-send-email-thomas.petazzoni@free-electrons.comSigned-off-by: NJason Cooper <jason@lakedaemon.net>
      752ef800
  11. 30 6月, 2014 1 次提交
  12. 29 6月, 2014 1 次提交