17 Jan, 2015

1 commit

  • The arm-cci driver completes the probe sequence even if the cci node is
    marked as disabled. Add a check in the driver to honour the cci status
    in the device tree.

    Signed-off-by: Abhilash Kesavan
    Acked-by: Sudeep Holla
    Acked-by: Nicolas Pitre
    Tested-by: Sudeep Holla
    Tested-by: Kevin Hilman
    Signed-off-by: Olof Johansson

    Abhilash Kesavan
     

30 Oct, 2014

1 commit

  • The ARM CPU PMUs and the ARM CCI PMU are using the same framework
    despite being substantially different in programming model, which makes
    it difficult to handle either particularly well.

    This patch migrates the ARM CCI PMU driver away from the arm_pmu
    framework, matching the style of the CCN PMU driver and other 'uncore'
    PMU drivers. This will enable refactoring of the arm_pmu framework to
    better support CPU PMUs. Event context migration on hotplug is not yet
    added due to a race on event->ctx in the core perf code.

    Signed-off-by: Mark Rutland
    Acked-by: Punit Agrawal
    Cc: Pawel Moll
    Cc: Will Deacon
    [will: fix whitespace issues]
    Signed-off-by: Will Deacon

    Mark Rutland
     

31 Jul, 2014

1 commit

  • In commit ae91d60ba88ef0bdb1b5e9b2363bd52fc45d2af7, a bug was fixed that
    involved converting !x & y to !(x & y). The code below shows the same
    pattern, and thus should perhaps be fixed in the same way.

    The Coccinelle semantic patch that makes this change is as follows:

    //
    @@ expression E1,E2; @@
    (
    !E1 & !E2
    |
    - !E1 & E2
    + !(E1 & E2)
    )
    //

    Signed-off-by: Himangi Saraogi
    Acked-by: Julia Lawall
    Acked-by: Punit Agrawal
    Signed-off-by: Olof Johansson

    Himangi Saraogi
     

26 Feb, 2014

2 commits

  • The event numbering changed between revision r0 and r1 of the CCI
    PMU. Expose this to userspace to allow tooling to handle the
    differences in event numbers.

    Suggested-by: Drew Richardson
    Signed-off-by: Punit Agrawal
    Reviewed-by: Will Deacon
    Signed-off-by: Arnd Bergmann

    Punit Agrawal
     
  • The driver queries the CCI IP revision to distinguish between r0 and r1
    scheme for event numbers and currently supports upto version r1p2. To
    minimise code churn every time there's a new version of the IP, assume
    that event numbering doesn't change for revisions > r1p0 (which is
    the case).

    The driver will still need an update for future revisions that change
    the event numbers.

    Signed-off-by: Punit Agrawal
    Reviewed-by: Will Deacon
    Signed-off-by: Arnd Bergmann

    Punit Agrawal
     

01 Feb, 2014

1 commit


14 Nov, 2013

1 commit

  • Pull ARM updates from Russell King:
    "Included in this series are:

    1. BE8 (modern big endian) changes for ARM from Ben Dooks
    2. big.Little support from Nicolas Pitre and Dave Martin
    3. support for LPAE systems with all system memory above 4GB
    4. Perf updates from Will Deacon
    5. Additional prefetching and other performance improvements from Will.
    6. Neon-optimised AES implementation fro Ard.
    7. A number of smaller fixes scattered around the place.

    There is a rather horrid merge conflict in tools/perf - I was never
    notified of the conflict because it originally occurred between Will's
    tree and other stuff. Consequently I have a resolution which Will
    forwarded me, which I'll forward on immediately after sending this
    mail.

    The other notable thing is I'm expecting some build breakage in the
    crypto stuff on ARM only with Ard's AES patches. These were merged
    into a stable git branch which others had already pulled, so there's
    little I can do about this. The problem is caused because these
    patches have a dependency on some code in the crypto git tree - I
    tried requesting a branch I can pull to resolve these, and all I got
    each time from the crypto people was "we'll revert our patches then"
    which would only make things worse since I still don't have the
    dependent patches. I've no idea what's going on there or how to
    resolve that, and since I can't split these patches from the rest of
    this pull request, I'm rather stuck with pushing this as-is or
    reverting Ard's patches.

    Since it should "come out in the wash" I've left them in - the only
    build problems they seem to cause at the moment are with randconfigs,
    and since it's a new feature anyway. However, if by -rc1 the
    dependencies aren't in, I think it'd be best to revert Ard's patches"

    I resolved the perf conflict roughly as per the patch sent by Russell,
    but there may be some differences. Any errors are likely mine. Let's
    see how the crypto issues work out..

    * 'for-linus' of git://git.linaro.org/people/rmk/linux-arm: (110 commits)
    ARM: 7868/1: arm/arm64: remove atomic_clear_mask() in "include/asm/atomic.h"
    ARM: 7867/1: include: asm: use 'int' instead of 'unsigned long' for 'oldval' in atomic_cmpxchg().
    ARM: 7866/1: include: asm: use 'long long' instead of 'u64' within atomic.h
    ARM: 7871/1: amba: Extend number of IRQS
    ARM: 7887/1: Don't smp_cross_call() on UP devices in arch_irq_work_raise()
    ARM: 7872/1: Support arch_irq_work_raise() via self IPIs
    ARM: 7880/1: Clear the IT state independent of the Thumb-2 mode
    ARM: 7878/1: nommu: Implement dummy early_paging_init()
    ARM: 7876/1: clear Thumb-2 IT state on exception handling
    ARM: 7874/2: bL_switcher: Remove cpu_hotplug_driver_{lock,unlock}()
    ARM: footbridge: fix build warnings for netwinder
    ARM: 7873/1: vfp: clear vfp_current_hw_state for dying cpu
    ARM: fix misplaced arch_virt_to_idmap()
    ARM: 7848/1: mcpm: Implement cpu_kill() to synchronise on powerdown
    ARM: 7847/1: mcpm: Factor out logical-to-physical CPU translation
    ARM: 7869/1: remove unused XSCALE_PMU Kconfig param
    ARM: 7864/1: Handle 64-bit memory in case of 32-bit phys_addr_t
    ARM: 7863/1: Let arm_add_memory() always use 64-bit arguments
    ARM: 7862/1: pcpu: replace __get_cpu_var_uses
    ARM: 7861/1: cacheflush: consolidate single-CPU ARMv7 cache disabling code
    ...

    Linus Torvalds
     

20 Oct, 2013

1 commit

  • cci_enable_port_for_self written in asm and it works with h/w
    registers that are in little endian format. When run in big
    endian mode it needs byteswaped constants before/after it
    writes/reads to/from such registers

    Signed-off-by: Victor Kamensky
    Acked-by: Nicolas Pitre
    Signed-off-by: Ben Dooks

    Victor Kamensky
     

24 Sep, 2013

1 commit

  • This patch fix the error handle of function cci_pmu_probe():
    - using IS_ERR() instead of NULL test for the return value of
    devm_ioremap_resource() since it nerver return NULL.
    - remove kfree() for devm_kzalloc allocated memory
    - remove dev_warn() since devm_ioremap_resource() has error message
    already.

    Signed-off-by: Wei Yongjun
    Signed-off-by: Will Deacon

    Wei Yongjun
     

17 Sep, 2013

1 commit

  • Extend the existing CCI driver to support the PMU by registering a perf
    backend for it.

    Cc: Lorenzo Pieralisi
    Cc: Nicolas Pitre
    Cc: Dave Martin
    Reviewed-by: Will Deacon
    Signed-off-by: Punit Agrawal
    [will: removed broken __init annotations]
    Signed-off-by: Will Deacon

    Punit Agrawal
     

21 Aug, 2013

1 commit


03 Jun, 2013

1 commit

  • When we build a kernel with support for both ARMv6 and ARMv7,
    gas is trying to be helpful by pointing out that the arm-cci
    driver would not work on ARMv6:

    /tmp/ccu1LDeU.s: Assembler messages:
    /tmp/ccu1LDeU.s:450: Error: selected processor does not support ARM mode `wfi '
    /tmp/ccu1LDeU.s:451: Error: selected processor does not support ARM mode `wfe '
    make[4]: *** [drivers/bus/arm-cci.o] Error 1

    We know that the driver will only be used on ARMv7, hence we
    can annotate the inline assembly listing to allow those instructions.

    Signed-off-by: Arnd Bergmann
    Acked-by: Nicolas Pitre
    Cc: Dave Martin

    Arnd Bergmann
     

30 May, 2013

2 commits

  • This provides cci_enable_port_for_self(). This is the counterpart to
    cci_disable_port_by_cpu(self).

    This is meant to be called from the MCPM machine specific power_up_setup
    callback code when the appropriate affinity level needs to be initialized.
    The code therefore has to be position independent as the MMU is still off
    and it cannot rely on any stack space.

    Signed-off-by: Nicolas Pitre
    Reviewed-by: Dave Martin

    Nicolas Pitre
     
  • On ARM multi-cluster systems coherency between cores running on
    different clusters is managed by the cache-coherent interconnect (CCI).
    It allows broadcasting of TLB invalidates and memory barriers and it
    guarantees cache coherency at system level through snooping of slave
    interfaces connected to it.

    This patch enables the basic infrastructure required in Linux to handle and
    programme the CCI component.

    Non-local variables used by the CCI management functions called by power
    down function calls after disabling the cache must be flushed out to main
    memory in advance, otherwise incoherency of those values may occur if they
    are sitting in the cache of some other CPU when power down functions
    execute. Driver code ensures that relevant data structures are flushed
    from inner and outer caches after the driver probe is completed.

    CCI slave port resources are linked to set of CPUs through bus masters
    phandle properties that link the interface resources to masters node in
    the device tree.

    Documentation describing the CCI DT bindings is provided with the patch.

    Signed-off-by: Lorenzo Pieralisi
    Signed-off-by: Nicolas Pitre

    Lorenzo Pieralisi