ip37.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id$
  2.  *
  3.  * This file is subject to the terms and conditions of the GNU General Public
  4.  * License.  See the file "COPYING" in the main directory of this archive
  5.  * for more details.
  6.  *
  7.  * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc.
  8.  * Copyright (C) 2000 by Colin Ngam
  9.  */
  10. /*
  11.  * ip37.c
  12.  * Support for IP35/IP37 machines
  13.  */
  14. #include <linux/types.h>
  15. #include <linux/config.h>
  16. #if defined(CONFIG_SGI_IP35) || defined(CONFIG_IA64_SGI_SN1) || defined(CONFIG_IA64_GENERIC)
  17. #include <asm/sn/sgi.h>
  18. #include <asm/sn/klconfig.h>
  19. #include <asm/sn/sn1/hubdev.h>
  20. #include <asm/sn/pci/bridge.h>     /* for bridge_t */
  21. xwidgetnum_t
  22. hub_widget_id(nasid_t nasid)
  23. {
  24. hubii_wcr_t ii_wcr; /* the control status register */
  25. ii_wcr.wcr_reg_value = REMOTE_HUB_L(nasid,IIO_WCR);
  26. return ii_wcr.wcr_fields_s.wcr_widget_id;
  27. }
  28. /*
  29.  * get_nasid() returns the physical node id number of the caller.
  30.  */
  31. nasid_t
  32. get_nasid(void)
  33. {
  34. return (nasid_t)((LOCAL_HUB_L(LB_REV_ID) & LRI_NODEID_MASK) >> LRI_NODEID_SHFT);
  35. }
  36. int
  37. get_slice(void)
  38. {
  39. return LOCAL_HUB_L(PI_CPU_NUM);
  40. }
  41. int
  42. is_fine_dirmode(void)
  43. {
  44. return (((LOCAL_HUB_L(LB_REV_ID) & LRI_SYSTEM_SIZE_MASK)
  45. >> LRI_SYSTEM_SIZE_SHFT) == SYSTEM_SIZE_SMALL);
  46. }
  47. hubreg_t
  48. get_hub_chiprev(nasid_t nasid)
  49. {
  50. return ((REMOTE_HUB_L(nasid, LB_REV_ID) & LRI_REV_MASK)
  51.                                          >> LRI_REV_SHFT);
  52. }
  53. int
  54. verify_snchip_rev(void)
  55. {
  56. int hub_chip_rev;
  57. int i;
  58. static int min_hub_rev = 0;
  59. nasid_t nasid;
  60. static int first_time = 1;
  61. extern int maxnodes;
  62.         
  63. if (first_time) {
  64.     for (i = 0; i < maxnodes; i++) {
  65. nasid = COMPACT_TO_NASID_NODEID(i);
  66. hub_chip_rev = get_hub_chiprev(nasid);
  67. if ((hub_chip_rev < min_hub_rev) || (i == 0))
  68.     min_hub_rev = hub_chip_rev;
  69.     }
  70.     first_time = 0;
  71. }
  72. return min_hub_rev;
  73. }
  74. #ifdef SN1_USE_POISON_BITS
  75. int
  76. hub_bte_poison_ok(void)
  77. {
  78. /*
  79.  * For now, assume poisoning is ok. If it turns out there are chip
  80.  * bugs that prevent its use in early revs, there is some neat code
  81.  * to steal from the IP27 equivalent of this code.
  82.  */
  83. #ifdef BRINGUP /* temp disable BTE poisoning - might be sw bugs in this area */
  84. return 0;
  85. #else
  86. return 1;
  87. #endif
  88. }
  89. #endif /* SN1_USE_POISON_BITS */
  90.                 
  91. void
  92. ni_reset_port(void)
  93. {
  94. LOCAL_HUB_S(NI_RESET_ENABLE, NRE_RESETOK);
  95. LOCAL_HUB_S(NI_PORT_RESET, NPR_PORTRESET | NPR_LOCALRESET);
  96. }
  97. #endif /* CONFIG_SGI_IP35 || CONFIG_IA64_SGI_SN1 */