1. 24 4月, 2013 7 次提交
    • N
      ARM: mcpm: provide an interface to set the SMP ops at run time · a7eb7c6f
      Nicolas Pitre 提交于
      This is cleaner than exporting the mcpm_smp_ops structure.
      Signed-off-by: NNicolas Pitre <nico@linaro.org>
      Acked-by: NJon Medhurst <tixy@linaro.org>
      a7eb7c6f
    • N
      ARM: mcpm: generic SMP secondary bringup and hotplug support · 9ff221ba
      Nicolas Pitre 提交于
      Now that the cluster power API is in place, we can use it for SMP secondary
      bringup and CPU hotplug in a generic fashion.
      Signed-off-by: NNicolas Pitre <nico@linaro.org>
      Reviewed-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      9ff221ba
    • D
      ARM: mcpm_head.S: vlock-based first man election · 1ae98561
      Dave Martin 提交于
      Instead of requiring the first man to be elected in advance (which
      can be suboptimal in some situations), this patch uses a per-
      cluster mutex to co-ordinate selection of the first man.
      
      This should also make it more feasible to reuse this code path for
      asynchronous cluster resume (as in CPUidle scenarios).
      
      We must ensure that the vlock data doesn't share a cacheline with
      anything else, or dirty cache eviction could corrupt it.
      Signed-off-by: NDave Martin <dave.martin@linaro.org>
      Signed-off-by: NNicolas Pitre <nicolas.pitre@linaro.org>
      Reviewed-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      1ae98561
    • D
      ARM: mcpm: Add baremetal voting mutexes · 9762f12d
      Dave Martin 提交于
      This patch adds a simple low-level voting mutex implementation
      to be used to arbitrate during first man selection when no load/store
      exclusive instructions are usable.
      
      For want of a better name, these are called "vlocks".  (I was
      tempted to call them ballot locks, but "block" is way too confusing
      an abbreviation...)
      
      There is no function to wait for the lock to be released, and no
      vlock_lock() function since we don't need these at the moment.
      These could straightforwardly be added if vlocks get used for other
      purposes.
      
      For architectural correctness even Strongly-Ordered memory accesses
      require barriers in order to guarantee that multiple CPUs have a
      coherent view of the ordering of memory accesses.  Whether or not
      this matters depends on hardware implementation details of the
      memory system.  Since the purpose of this code is to provide a clean,
      generic locking mechanism with no platform-specific dependencies the
      barriers should be present to avoid unpleasant surprises on future
      platforms.
      
      Note:
      
        * When taking the lock, we don't care about implicit background
          memory operations and other signalling which may be pending,
          because those are not part of the critical section anyway.
      
          A DMB is sufficient to ensure correctly observed ordering if
          the explicit memory accesses in vlock_trylock.
      
        * No barrier is required after checking the election result,
          because the result is determined by the store to
          VLOCK_OWNER_OFFSET and is already globally observed due to the
          barriers in voting_end.  This means that global agreement on
          the winner is guaranteed, even before the winner is known
          locally.
      Signed-off-by: NDave Martin <dave.martin@linaro.org>
      Signed-off-by: NNicolas Pitre <nicolas.pitre@linaro.org>
      Reviewed-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      9762f12d
    • D
      ARM: mcpm: introduce helpers for platform coherency exit/setup · 7fe31d28
      Dave Martin 提交于
      This provides helper methods to coordinate between CPUs coming down
      and CPUs going up, as well as documentation on the used algorithms,
      so that cluster teardown and setup
      operations are not done for a cluster simultaneously.
      
      For use in the power_down() implementation:
        * __mcpm_cpu_going_down(unsigned int cluster, unsigned int cpu)
        * __mcpm_outbound_enter_critical(unsigned int cluster)
        * __mcpm_outbound_leave_critical(unsigned int cluster)
        * __mcpm_cpu_down(unsigned int cluster, unsigned int cpu)
      
      The power_up_setup() helper should do platform-specific setup in
      preparation for turning the CPU on, such as invalidating local caches
      or entering coherency.  It must be assembler for now, since it must
      run before the MMU can be switched on.  It is passed the affinity level
      for which initialization should be performed.
      
      Because the mcpm_sync_struct content is looked-up and modified
      with the cache enabled or disabled depending on the code path, it is
      crucial to always ensure proper cache maintenance to update main memory
      right away.  The sync_cache_*() helpers are used to that end.
      
      Also, in order to prevent a cached writer from interfering with an
      adjacent non-cached writer, we ensure each state variable is located to
      a separate cache line.
      
      Thanks to Nicolas Pitre and Achin Gupta for the help with this
      patch.
      Signed-off-by: NDave Martin <dave.martin@linaro.org>
      Signed-off-by: NNicolas Pitre <nico@linaro.org>
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      7fe31d28
    • N
      ARM: mcpm: introduce the CPU/cluster power API · 7c2b8605
      Nicolas Pitre 提交于
      This is the basic API used to handle the powering up/down of individual
      CPUs in a (multi-)cluster system.  The platform specific backend
      implementation has the responsibility to also handle the cluster level
      power as well when the first/last CPU in a cluster is brought up/down.
      Signed-off-by: NNicolas Pitre <nico@linaro.org>
      Reviewed-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      7c2b8605
    • N
      ARM: multi-cluster PM: secondary kernel entry code · e8db288e
      Nicolas Pitre 提交于
      CPUs in cluster based systems, such as big.LITTLE, have special needs
      when entering the kernel due to a hotplug event, or when resuming from
      a deep sleep mode.
      
      This is vectorized so multiple CPUs can enter the kernel in parallel
      without serialization.
      
      The mcpm prefix stands for "multi cluster power management", however
      this is usable on single cluster systems as well.  Only the basic
      structure is introduced here.  This will be extended with later patches.
      
      In order not to complexify things more than they currently have to,
      the planned work to make runtime adjusted MPIDR based indexing and
      dynamic memory allocation for cluster states is postponed to a later
      cycle. The MAX_NR_CLUSTERS and MAX_CPUS_PER_CLUSTER static definitions
      should be sufficient for those systems expected to be available in the
      near future.
      Signed-off-by: NNicolas Pitre <nico@linaro.org>
      Reviewed-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
      Reviewed-by: NWill Deacon <will.deacon@arm.com>
      e8db288e
  2. 08 2月, 2013 1 次提交
    • R
      ARM: GIC: fix GIC cpumask initialization · 2bb31351
      Russell King 提交于
      Punit Agrawal reports:
      > I was trying to boot 3.8-rc5 on Realview EB 11MPCore using
      > realview-smp_defconfig as a starting point but the kernel failed to
      > progress past the log below (config attached).
      >
      > Pawel suggested I try reverting 384a2902 - "ARM: gic: use a private
      > mapping for CPU target interfaces" that you've authored. With this
      > commit reverted the kernel boots.
      >
      > I am not quite sure why the commit breaks 11MPCore but Pawel (cc'd)
      > might be able to shed light on that.
      
      Some early GIC implementations return zero for the first distributor
      CPU routing register.  This means we can't rely on that telling us
      which CPU interface we're connected to.  We know that these platforms
      implement PPIs for IRQs 29-31 - but we shouldn't assume that these
      will always be populated.
      
      So, instead, scan for a non-zero CPU routing register in the first
      32 IRQs and use that as our CPU mask.
      Reported-by: NPunit Agrawal <punit.agrawal@arm.com>
      Reviewed-by: NNicolas Pitre <nico@linaro.org>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      2bb31351
  3. 13 1月, 2013 6 次提交
  4. 11 1月, 2013 2 次提交
  5. 04 1月, 2013 1 次提交
    • G
      ARM: drivers: remove __dev* attributes. · 351a102d
      Greg Kroah-Hartman 提交于
      CONFIG_HOTPLUG is going away as an option.  As a result, the __dev*
      markings need to be removed.
      
      This change removes the use of __devinit, __devexit_p, __devinitdata,
      and __devexit from these drivers.
      
      Based on patches originally written by Bill Pemberton, but redone by me
      in order to handle some of the coding style issues better, by hand.
      
      Cc: Bill Pemberton <wfp5p@virginia.edu>
      Cc: Russell King <linux@arm.linux.org.uk>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      351a102d
  6. 02 1月, 2013 1 次提交
  7. 28 11月, 2012 1 次提交
    • W
      ARM: 7586/1: sp804: set cpumask to cpu_possible_mask for clock event device · ea3aacf5
      Will Deacon 提交于
      The SP804 driver statically initialises the cpumask of the clock event
      device to be cpu_all_mask, which is derived from the compile-time
      constant NR_CPUS. This breaks SMP_ON_UP systems where the interrupt
      controller handling the sp804 doesn't have the irq_set_affinity callback
      on the irq_chip, because the common timer code fails to identify the
      device as cpu-local and ends up treating it as a broadcast device
      instead.
      
      This patch fixes the problem by using cpu_possible_mask at runtime,
      which will correctly represent the possible CPUs when SMP_ON_UP is being
      used.
      Signed-off-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      ea3aacf5
  8. 19 11月, 2012 1 次提交
    • N
      ARM: gic: use a private mapping for CPU target interfaces · 384a2902
      Nicolas Pitre 提交于
      The GIC interface numbering does not necessarily follow the logical
      CPU numbering, especially for complex topologies such as multi-cluster
      systems.
      
      Fortunately we can easily probe the GIC to create a mapping as the
      Interrupt Processor Targets Registers for the first 32 interrupts are
      read-only, and each field returns a value that always corresponds to
      the processor reading the register.
      
      Initially all mappings target all CPUs in case an IPI is required to
      boot secondary CPUs.  It is refined as those CPUs discover what their
      actual mapping is.
      Signed-off-by: NNicolas Pitre <nico@linaro.org>
      Acked-by: NWill Deacon <will.deacon@arm.com>
      384a2902
  9. 08 11月, 2012 1 次提交
  10. 18 10月, 2012 1 次提交
  11. 14 10月, 2012 1 次提交
    • R
      ARM: config: sort select statements alphanumerically · b1b3f49c
      Russell King 提交于
      As suggested by Andrew Morton:
      
        This is a pet peeve of mine.  Any time there's a long list of items
        (header file inclusions, kconfig entries, array initalisers, etc) and
        someone wants to add a new item, they *always* go and stick it at the
        end of the list.
      
        Guys, don't do this.  Either put the new item into a randomly-chosen
        position or, probably better, alphanumerically sort the list.
      
      lets sort all our select statements alphanumerically.  This commit was
      created by the following perl:
      
      while (<>) {
      	while (/\\\s*$/) {
      		$_ .= <>;
      	}
      	undef %selects if /^\s*config\s+/;
      	if (/^\s+select\s+(\w+).*/) {
      		if (defined($selects{$1})) {
      			if ($selects{$1} eq $_) {
      				print STDERR "Warning: removing duplicated $1 entry\n";
      			} else {
      				print STDERR "Error: $1 differently selected\n".
      					"\tOld: $selects{$1}\n".
      					"\tNew: $_\n";
      				exit 1;
      			}
      		}
      		$selects{$1} = $_;
      		next;
      	}
      	if (%selects and (/^\s*$/ or /^\s+help/ or /^\s+---help---/ or
      			  /^endif/ or /^endchoice/)) {
      		foreach $k (sort (keys %selects)) {
      			print "$selects{$k}";
      		}
      		undef %selects;
      	}
      	print;
      }
      if (%selects) {
      	foreach $k (sort (keys %selects)) {
      		print "$selects{$k}";
      	}
      }
      
      It found two duplicates:
      
      Warning: removing duplicated S5P_SETUP_MIPIPHY entry
      Warning: removing duplicated HARDIRQS_SW_RESEND entry
      
      and they are identical duplicates, hence the shrinkage in the diffstat
      of two lines.
      
      We have four testers reporting success of this change (Tony, Stephen,
      Linus and Sekhar.)
      Acked-by: NJason Cooper <jason@lakedaemon.net>
      Acked-by: NTony Lindgren <tony@atomide.com>
      Acked-by: NStephen Warren <swarren@nvidia.com>
      Acked-by: NLinus Walleij <linus.walleij@linaro.org>
      Acked-by: NSekhar Nori <nsekhar@ti.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      b1b3f49c
  12. 10 10月, 2012 1 次提交
    • A
      ARM: pxa: armcore: fix PCI PIO warnings · bfbad32a
      Arnd Bergmann 提交于
      The it8152 PCI host used on the pxa/cm_x2xx machines
      uses the old-style I/O window registration. This should
      eventually get converted to pci_ioremap_io() but for
      now, let's cast the IT8152_IO_BASE constant to an integer
      type to get rid of the warnings.
      
      Without this patch, building cm_x2xx_defconfig results in:
      
      arch/arm/common/it8152.c: In function 'it8152_pci_setup':
      arch/arm/common/it8152.c:287:18: warning: assignment makes integer from pointer without a cast [enabled by default]
      arch/arm/common/it8152.c:288:16: warning: assignment makes integer from pointer without a cast [enabled by default]
      arch/arm/common/it8152.c:291:17: warning: assignment makes integer from pointer without a cast [enabled by default]
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Acked-by: NIgor Grinberg <grinberg@compulab.co.il>
      Cc: Bjorn Helgaas <bhelgaas@google.com>
      Cc: Krzysztof Halasa <khc@pm.waw.pl>
      Cc: Mike Rapoport <mike@compulab.co.il>
      Cc: Haojian Zhuang <haojian.zhuang@gmail.com>
      Cc: Eric Miao <eric.y.miao@gmail.com>
      bfbad32a
  13. 30 7月, 2012 1 次提交
  14. 13 6月, 2012 1 次提交
    • M
      ARM: dma-mapping: fix debug messages in dmabounce code · fdb11173
      Marek Szyprowski 提交于
      This patch fixes the usage of uninitialized variables in dmabounce code
      intoduced by commit a227fb92 ('ARM: dma-mapping: remove offset parameter
      to prepare for generic dma_ops'):
      arch/arm/common/dmabounce.c: In function ‘dmabounce_sync_for_device’:
      arch/arm/common/dmabounce.c:409: warning: ‘off’ may be used uninitialized in this function
      arch/arm/common/dmabounce.c:407: note: ‘off’ was declared here
      arch/arm/common/dmabounce.c: In function ‘dmabounce_sync_for_cpu’:
      arch/arm/common/dmabounce.c:369: warning: ‘off’ may be used uninitialized in this function
      arch/arm/common/dmabounce.c:367: note: ‘off’ was declared here
      Signed-off-by: NMarek Szyprowski <m.szyprowski@samsung.com>
      fdb11173
  15. 21 5月, 2012 4 次提交
  16. 14 5月, 2012 1 次提交
  17. 25 4月, 2012 2 次提交
  18. 10 4月, 2012 1 次提交
  19. 06 4月, 2012 1 次提交
    • R
      ARM: remove ixp23xx and ixp2000 platforms · c65f2abf
      Rob Herring 提交于
      ixp2xxx platforms have had no real changes since ~2006 and the maintainer
      has said on irc that they can be removed:
      
      13:05 < nico> do you still care about ixp2000?
      13:22 < lennert> not really, no
      13:58 < nico> do you think we could remove it from the kernel tree?
      14:01 < lennert> go for it, and remove ixp23xx too while you're at it
      
      Removing will help simplify ARM consolidation in general and PCI re-work
      specifically.
      Signed-off-by: NRob Herring <rob.herring@calxeda.com>
      Cc: Randy Dunlap <rdunlap@xenotime.net>
      Acked-by: NLennert Buytenhek <buytenh@wantstofly.org>
      c65f2abf
  20. 29 3月, 2012 1 次提交
  21. 24 3月, 2012 4 次提交