Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
Linus Torvalds [Thu, 22 Mar 2012 01:55:10 +0000 (18:55 -0700)]
Pull powerpc merge from Benjamin Herrenschmidt:
 "Here's the powerpc batch for this merge window.  It is going to be a
  bit more nasty than usual as in touching things outside of
  arch/powerpc mostly due to the big iSeriesectomy :-) We finally got
  rid of the bugger (legacy iSeries support) which was a PITA to
  maintain and that nobody really used anymore.

  Here are some of the highlights:

   - Legacy iSeries is gone.  Thanks Stephen ! There's still some bits
     and pieces remaining if you do a grep -ir series arch/powerpc but
     they are harmless and will be removed in the next few weeks
     hopefully.

   - The 'fadump' functionality (Firmware Assisted Dump) replaces the
     previous (equivalent) "pHyp assisted dump"...  it's a rewrite of a
     mechanism to get the hypervisor to do crash dumps on pSeries, the
     new implementation hopefully being much more reliable.  Thanks
     Mahesh Salgaonkar.

   - The "EEH" code (pSeries PCI error handling & recovery) got a big
     spring cleaning, motivated by the need to be able to implement a
     new backend for it on top of some new different type of firwmare.

     The work isn't complete yet, but a good chunk of the cleanups is
     there.  Note that this adds a field to struct device_node which is
     not very nice and which Grant objects to.  I will have a patch soon
     that moves that to a powerpc private data structure (hopefully
     before rc1) and we'll improve things further later on (hopefully
     getting rid of the need for that pointer completely).  Thanks Gavin
     Shan.

   - I dug into our exception & interrupt handling code to improve the
     way we do lazy interrupt handling (and make it work properly with
     "edge" triggered interrupt sources), and while at it found & fixed
     a wagon of issues in those areas, including adding support for page
     fault retry & fatal signals on page faults.

   - Your usual random batch of small fixes & updates, including a bunch
     of new embedded boards, both Freescale and APM based ones, etc..."

I fixed up some conflicts with the generalized irq-domain changes from
Grant Likely, hopefully correctly.

* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (141 commits)
  powerpc/ps3: Do not adjust the wrapper load address
  powerpc: Remove the rest of the legacy iSeries include files
  powerpc: Remove the remaining CONFIG_PPC_ISERIES pieces
  init: Remove CONFIG_PPC_ISERIES
  powerpc: Remove FW_FEATURE ISERIES from arch code
  tty/hvc_vio: FW_FEATURE_ISERIES is no longer selectable
  powerpc/spufs: Fix double unlocks
  powerpc/5200: convert mpc5200 to use of_platform_populate()
  powerpc/mpc5200: add options to mpc5200_defconfig
  powerpc/mpc52xx: add a4m072 board support
  powerpc/mpc5200: update mpc5200_defconfig to fit for charon board
  Documentation/powerpc/mpc52xx.txt: Checkpatch cleanup
  powerpc/44x: Add additional device support for APM821xx SoC and Bluestone board
  powerpc/44x: Add support PCI-E for APM821xx SoC and Bluestone board
  MAINTAINERS: Update PowerPC 4xx tree
  powerpc/44x: The bug fixed support for APM821xx SoC and Bluestone board
  powerpc: document the FSL MPIC message register binding
  powerpc: add support for MPIC message register API
  powerpc/fsl: Added aliased MSIIR register address to MSI node in dts
  powerpc/85xx: mpc8548cds - add 36-bit dts
  ...

23 files changed:
1  2 
MAINTAINERS
arch/powerpc/Kconfig
arch/powerpc/boot/dts/bluestone.dts
arch/powerpc/include/asm/mpic.h
arch/powerpc/kernel/idle.c
arch/powerpc/kernel/irq.c
arch/powerpc/perf/core-book3s.c
arch/powerpc/platforms/cell/spufs/inode.c
arch/powerpc/platforms/powermac/pic.c
arch/powerpc/platforms/pseries/Kconfig
arch/powerpc/sysdev/fsl_msi.c
arch/powerpc/sysdev/ge/ge_pic.c
arch/powerpc/sysdev/mpic.c
arch/powerpc/sysdev/mpic_msi.c
drivers/base/driver.c
drivers/misc/carma/carma-fpga.c
drivers/scsi/Kconfig
drivers/tty/hvc/hvc_udbg.c
drivers/tty/serial/Kconfig
drivers/watchdog/Kconfig
include/linux/device.h
include/linux/of.h
include/linux/pci.h

diff --cc MAINTAINERS
Simple merge
@@@ -134,8 -134,8 +134,9 @@@ config PP
        select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64
        select HAVE_GENERIC_HARDIRQS
        select HAVE_SPARSE_IRQ
+       select SPARSE_IRQ
        select IRQ_PER_CPU
 +      select IRQ_DOMAIN
        select GENERIC_IRQ_SHOW
        select GENERIC_IRQ_SHOW_LEVEL
        select IRQ_FORCED_THREADING
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -1345,9 -1355,9 +1355,9 @@@ struct mpic * __init mpic_alloc(struct 
        mpic->isu_shift = 1 + __ilog2(mpic->isu_size - 1);
        mpic->isu_mask = (1 << mpic->isu_shift) - 1;
  
 -      mpic->irqhost = irq_alloc_host(mpic->node, IRQ_HOST_MAP_LINEAR,
 -                                     last_irq + 1, &mpic_host_ops,
 -                                     intvec_top + 1);
 +      mpic->irqhost = irq_domain_add_linear(mpic->node,
-                                      isu_size ? isu_size : mpic->num_sources,
++                                     last_irq + 1,
 +                                     &mpic_host_ops, mpic);
  
        /*
         * FIXME: The code leaks the MPIC object and mappings here; this
Simple merge
@@@ -123,36 -123,34 +123,6 @@@ void driver_remove_file(struct device_d
  }
  EXPORT_SYMBOL_GPL(driver_remove_file);
  
--/**
-  * driver_add_kobj - add a kobject below the specified driver
-  * @drv: requesting device driver
-  * @kobj: kobject to add below this driver
-  * @fmt: format string that names the kobject
-  *
-  * You really don't want to do this, this is only here due to one looney
-  * iseries driver, go poke those developers if you are annoyed about
-  * this...
-  */
- int driver_add_kobj(struct device_driver *drv, struct kobject *kobj,
-                   const char *fmt, ...)
- {
-       va_list args;
-       char *name;
-       int ret;
-       va_start(args, fmt);
-       name = kvasprintf(GFP_KERNEL, fmt, args);
-       va_end(args);
-       if (!name)
-               return -ENOMEM;
-       ret = kobject_add(kobj, &drv->p->kobj, "%s", name);
-       kfree(name);
-       return ret;
- }
- EXPORT_SYMBOL_GPL(driver_add_kobj);
 - * get_driver - increment driver reference count.
 - * @drv: driver.
 - */
 -struct device_driver *get_driver(struct device_driver *drv)
 -{
 -      if (drv) {
 -              struct driver_private *priv;
 -              struct kobject *kobj;
 -
 -              kobj = kobject_get(&drv->p->kobj);
 -              priv = to_driver(kobj);
 -              return priv->driver;
 -      }
 -      return NULL;
 -}
 -EXPORT_SYMBOL_GPL(get_driver);
 -
 -/**
 - * put_driver - decrement driver's refcount.
 - * @drv: driver.
 - */
 -void put_driver(struct device_driver *drv)
 -{
 -      kobject_put(&drv->p->kobj);
 -}
 -EXPORT_SYMBOL_GPL(put_driver);
 -
  static int driver_add_groups(struct device_driver *drv,
                             const struct attribute_group **groups)
  {
Simple merge
Simple merge
@@@ -67,9 -67,12 +67,12 @@@ static int __init hvc_udbg_init(void
  {
        struct hvc_struct *hp;
  
+       if (!udbg_putc)
+               return -ENODEV;
        BUG_ON(hvc_udbg_dev);
  
 -      hp = hvc_alloc(0, NO_IRQ, &hvc_udbg_ops, 16);
 +      hp = hvc_alloc(0, 0, &hvc_udbg_ops, 16);
        if (IS_ERR(hp))
                return PTR_ERR(hp);
  
Simple merge
Simple merge
Simple merge
@@@ -72,10 -75,14 +75,17 @@@ struct of_phandle_args 
        uint32_t args[MAX_PHANDLE_ARGS];
  };
  
+ #if defined(CONFIG_EEH)
+ static inline struct eeh_dev *of_node_to_eeh_dev(struct device_node *dn)
+ {
+       return dn->edev;
+ }
+ #endif
 -#if defined(CONFIG_SPARC) || !defined(CONFIG_OF)
 +#ifdef CONFIG_OF_DYNAMIC
 +extern struct device_node *of_node_get(struct device_node *node);
 +extern void of_node_put(struct device_node *node);
 +#else /* CONFIG_OF_DYNAMIC */
  /* Dummy ref counting routines - to be implemented later */
  static inline struct device_node *of_node_get(struct device_node *node)
  {
Simple merge