]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Pull define-node-cleanup into release branch
authorTony Luck <tony.luck@intel.com>
Fri, 28 Oct 2005 20:24:06 +0000 (13:24 -0700)
committerTony Luck <tony.luck@intel.com>
Fri, 28 Oct 2005 20:24:06 +0000 (13:24 -0700)
1  2 
arch/ia64/sn/kernel/tiocx.c
include/asm-ia64/sn/io.h
include/asm-ia64/sn/sn_sal.h

index e0819ec53116bfc477edd4e3ce46f4b2629415da,7e9764a69dc8dc41fa6ae539acdaa44f3f5ef4a6..0d8592a745a7bd774b859cc5fa3d6f179ef643a6
@@@ -183,12 -183,11 +183,12 @@@ int cx_driver_unregister(struct cx_drv 
   * @part_num: device's part number
   * @mfg_num: device's manufacturer number
   * @hubdev: hub info associated with this device
 + * @bt: board type of the device
   *
   */
  int
  cx_device_register(nasid_t nasid, int part_num, int mfg_num,
 -                 struct hubdev_info *hubdev)
 +                 struct hubdev_info *hubdev, int bt)
  {
        struct cx_dev *cx_dev;
  
        cx_dev->cx_id.mfg_num = mfg_num;
        cx_dev->cx_id.nasid = nasid;
        cx_dev->hubdev = hubdev;
 +      cx_dev->bt = bt;
  
        cx_dev->dev.parent = NULL;
        cx_dev->dev.bus = &tiocx_bus_type;
@@@ -240,8 -238,7 +240,8 @@@ static int cx_device_reload(struct cx_d
  {
        cx_device_unregister(cx_dev);
        return cx_device_register(cx_dev->cx_id.nasid, cx_dev->cx_id.part_num,
 -                                cx_dev->cx_id.mfg_num, cx_dev->hubdev);
 +                                cx_dev->cx_id.mfg_num, cx_dev->hubdev,
 +                                cx_dev->bt);
  }
  
  static inline uint64_t tiocx_intr_alloc(nasid_t nasid, int widget,
@@@ -368,20 -365,26 +368,20 @@@ static void tio_corelet_reset(nasid_t n
        udelay(2000);
  }
  
 -static int tiocx_btchar_get(int nasid)
 +static int is_fpga_tio(int nasid, int *bt)
  {
 -      moduleid_t module_id;
 -      geoid_t geoid;
 -      int cnodeid;
 -
 -      cnodeid = nasid_to_cnodeid(nasid);
 -      geoid = cnodeid_get_geoid(cnodeid);
 -      module_id = geo_module(geoid);
 -      return MODULE_GET_BTCHAR(module_id);
 -}
 +      int ioboard_type;
  
 -static int is_fpga_brick(int nasid)
 -{
 -      switch (tiocx_btchar_get(nasid)) {
 +      ioboard_type = ia64_sn_sysctl_ioboard_get(nasid);
 +
 +      switch (ioboard_type) {
        case L1_BRICKTYPE_SA:
        case L1_BRICKTYPE_ATHENA:
 -      case L1_BRICKTYPE_DAYTONA:
 +      case L1_BOARDTYPE_DAYTONA:
 +              *bt = ioboard_type;
                return 1;
        }
 +
        return 0;
  }
  
@@@ -404,22 -407,16 +404,22 @@@ static int tiocx_reload(struct cx_dev *
  
        if (bitstream_loaded(nasid)) {
                uint64_t cx_id;
 -
 -              cx_id =
 -                  *(volatile uint64_t *)(TIO_SWIN_BASE(nasid, TIOCX_CORELET) +
 +              int rv;
 +
 +              rv = ia64_sn_sysctl_tio_clock_reset(nasid);
 +              if (rv) {
 +                      printk(KERN_ALERT "CX port JTAG reset failed.\n");
 +              } else {
 +                      cx_id = *(volatile uint64_t *)
 +                              (TIO_SWIN_BASE(nasid, TIOCX_CORELET) +
                                          WIDGET_ID);
 -              part_num = XWIDGET_PART_NUM(cx_id);
 -              mfg_num = XWIDGET_MFG_NUM(cx_id);
 -              DBG("part= 0x%x, mfg= 0x%x\n", part_num, mfg_num);
 -              /* just ignore it if it's a CE */
 -              if (part_num == TIO_CE_ASIC_PARTNUM)
 -                      return 0;
 +                      part_num = XWIDGET_PART_NUM(cx_id);
 +                      mfg_num = XWIDGET_MFG_NUM(cx_id);
 +                      DBG("part= 0x%x, mfg= 0x%x\n", part_num, mfg_num);
 +                      /* just ignore it if it's a CE */
 +                      if (part_num == TIO_CE_ASIC_PARTNUM)
 +                              return 0;
 +              }
        }
  
        cx_dev->cx_id.part_num = part_num;
@@@ -439,10 -436,10 +439,10 @@@ static ssize_t show_cxdev_control(struc
  {
        struct cx_dev *cx_dev = to_cx_dev(dev);
  
 -      return sprintf(buf, "0x%x 0x%x 0x%x %d\n",
 +      return sprintf(buf, "0x%x 0x%x 0x%x 0x%x\n",
                       cx_dev->cx_id.nasid,
                       cx_dev->cx_id.part_num, cx_dev->cx_id.mfg_num,
 -                     tiocx_btchar_get(cx_dev->cx_id.nasid));
 +                     cx_dev->bt);
  }
  
  static ssize_t store_cxdev_control(struct device *dev, struct device_attribute *attr, const char *buf,
@@@ -489,14 -486,12 +489,13 @@@ static int __init tiocx_init(void
  
        bus_register(&tiocx_bus_type);
  
-       for (cnodeid = 0; cnodeid < MAX_COMPACT_NODES; cnodeid++) {
+       for (cnodeid = 0; cnodeid < num_cnodes; cnodeid++) {
                nasid_t nasid;
 +              int bt;
  
-               if ((nasid = cnodeid_to_nasid(cnodeid)) < 0)
-                       break;  /* No more nasids .. bail out of loop */
+               nasid = cnodeid_to_nasid(cnodeid);
  
 -              if ((nasid & 0x1) && is_fpga_brick(nasid)) {
 +              if ((nasid & 0x1) && is_fpga_tio(nasid, &bt)) {
                        struct hubdev_info *hubdev;
                        struct xwidget_info *widgetp;
  
  
                        if (cx_device_register
                            (nasid, widgetp->xwi_hwid.part_num,
 -                           widgetp->xwi_hwid.mfg_num, hubdev) < 0)
 +                           widgetp->xwi_hwid.mfg_num, hubdev, bt) < 0)
                                return -ENXIO;
                        else
                                found_tiocx_device++;
diff --combined include/asm-ia64/sn/io.h
index 7597a52b426c1530f8f0b7d735d1b9bd418eaed4,ac30c747c5ab64116ae3136ffab500a316d4ee16..41c73a73562844f0a4d8e601d6e737cece6b35e0
@@@ -14,7 -14,7 +14,7 @@@
  extern void * sn_io_addr(unsigned long port) __attribute_const__; /* Forward definition */
  extern void __sn_mmiowb(void); /* Forward definition */
  
- extern int numionodes;
+ extern int num_cnodes;
  
  #define __sn_mf_a()   ia64_mfa()
  
@@@ -35,15 -35,6 +35,15 @@@ extern void sn_dma_flush(unsigned long)
  #define __sn_readl_relaxed ___sn_readl_relaxed
  #define __sn_readq_relaxed ___sn_readq_relaxed
  
 +/*
 + * Convenience macros for setting/clearing bits using the above accessors
 + */
 +
 +#define __sn_setq_relaxed(addr, val) \
 +      writeq((__sn_readq_relaxed(addr) | (val)), (addr))
 +#define __sn_clrq_relaxed(addr, val) \
 +      writeq((__sn_readq_relaxed(addr) & ~(val)), (addr))
 +
  /*
   * The following routines are SN Platform specific, called when
   * a reference is made to inX/outX set macros.  SN Platform
index 92df48a0412fbe748267449179f94a370cc1c618,5ad855db8464511733595f866664485378eb6439..81af4e51afa68c7da5e25da90946534016b42f44
@@@ -47,7 -47,6 +47,7 @@@
  #define  SN_SAL_CONSOLE_PUTB                     0x02000028
  #define  SN_SAL_CONSOLE_XMIT_CHARS               0x0200002a
  #define  SN_SAL_CONSOLE_READC                    0x0200002b
 +#define  SN_SAL_SYSCTL_OP                        0x02000030
  #define  SN_SAL_SYSCTL_MODID_GET                 0x02000031
  #define  SN_SAL_SYSCTL_GET                         0x02000032
  #define  SN_SAL_SYSCTL_IOBRICK_MODULE_GET          0x02000033
@@@ -68,7 -67,7 +68,7 @@@
  #define  SN_SAL_IOIF_INTERRUPT                           0x0200004a
  #define  SN_SAL_HWPERF_OP                        0x02000050   // lock
  #define  SN_SAL_IOIF_ERROR_INTERRUPT             0x02000051
 -
 +#define  SN_SAL_IOIF_PCI_SAFE                    0x02000052
  #define  SN_SAL_IOIF_SLOT_ENABLE                 0x02000053
  #define  SN_SAL_IOIF_SLOT_DISABLE                0x02000054
  #define  SN_SAL_IOIF_GET_HUBDEV_INFO             0x02000055
  #define SAL_INTR_ALLOC                1
  #define SAL_INTR_FREE         2
  
 +/*
 + * operations available on the generic SN_SAL_SYSCTL_OP
 + * runtime service
 + */
 +#define SAL_SYSCTL_OP_IOBOARD         0x0001  /*  retrieve board type */
 +#define SAL_SYSCTL_OP_TIO_JLCK_RST      0x0002  /* issue TIO clock reset */
 +
  /*
   * IRouter (i.e. generalized system controller) operations
   */
@@@ -206,26 -198,16 +206,16 @@@ ia64_sn_get_master_baseio_nasid(void
        return ret_stuff.v0;
  }
  
- static inline char *
+ static inline void *
  ia64_sn_get_klconfig_addr(nasid_t nasid)
  {
        struct ia64_sal_retval ret_stuff;
-       int cnodeid;
  
-       cnodeid = nasid_to_cnodeid(nasid);
        ret_stuff.status = 0;
        ret_stuff.v0 = 0;
        ret_stuff.v1 = 0;
        ret_stuff.v2 = 0;
        SAL_CALL(ret_stuff, SN_SAL_GET_KLCONFIG_ADDR, (u64)nasid, 0, 0, 0, 0, 0, 0);
-       /*
-        * We should panic if a valid cnode nasid does not produce
-        * a klconfig address.
-        */
-       if (ret_stuff.status != 0) {
-               panic("ia64_sn_get_klconfig_addr: Returned error %lx\n", ret_stuff.status);
-       }
        return ret_stuff.v0 ? __va(ret_stuff.v0) : NULL;
  }
  
@@@ -881,41 -863,6 +871,41 @@@ ia64_sn_sysctl_event_init(nasid_t nasid
          return (int) rv.v0;
  }
  
 +/*
 + * Ask the system controller on the specified nasid to reset
 + * the CX corelet clock.  Only valid on TIO nodes.
 + */
 +static inline int
 +ia64_sn_sysctl_tio_clock_reset(nasid_t nasid)
 +{
 +      struct ia64_sal_retval rv;
 +      SAL_CALL_REENTRANT(rv, SN_SAL_SYSCTL_OP, SAL_SYSCTL_OP_TIO_JLCK_RST,
 +                      nasid, 0, 0, 0, 0, 0);
 +      if (rv.status != 0)
 +              return (int)rv.status;
 +      if (rv.v0 != 0)
 +              return (int)rv.v0;
 +
 +      return 0;
 +}
 +
 +/*
 + * Get the associated ioboard type for a given nasid.
 + */
 +static inline int
 +ia64_sn_sysctl_ioboard_get(nasid_t nasid)
 +{
 +        struct ia64_sal_retval rv;
 +        SAL_CALL_REENTRANT(rv, SN_SAL_SYSCTL_OP, SAL_SYSCTL_OP_IOBOARD,
 +                        nasid, 0, 0, 0, 0, 0);
 +        if (rv.v0 != 0)
 +                return (int)rv.v0;
 +        if (rv.v1 != 0)
 +                return (int)rv.v1;
 +
 +        return 0;
 +}
 +
  /**
   * ia64_sn_get_fit_compt - read a FIT entry from the PROM header
   * @nasid: NASID of node to read