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

嵌入式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.  * This is a temporary file that statically initializes the expected 
  12.  * initial klgraph information that is normally provided by prom.
  13.  */
  14. #include <linux/types.h>
  15. #include <linux/slab.h>
  16. #include <linux/vmalloc.h>
  17. #include <asm/sn/sgi.h>
  18. #include <asm/sn/klconfig.h>
  19. void * real_port;
  20. void * real_io_base;
  21. void * real_addr;
  22. char *BW0 = NULL;
  23. kl_config_hdr_t *linux_klcfg;
  24. #ifdef BRINGUP
  25. /* forward declarations */
  26. extern void dump_ii(void), dump_lb(void), dump_crossbow(void);
  27. extern void clear_ii_error(void);
  28. #endif /* BRINGUP */
  29. #define SYNERGY_WIDGET          ((char *)0xc0000e0000000000)
  30. #define SYNERGY_SWIZZLE         ((char *)0xc0000e0000000400)
  31. #define HUBREG                  ((char *)0xc0000a0001e00000)
  32. #define WIDGET0                 ((char *)0xc0000a0000000000)
  33. #define WIDGET4                 ((char *)0xc0000a0000000004)
  34. #define SYNERGY_WIDGET          ((char *)0xc0000e0000000000)
  35. #define SYNERGY_SWIZZLE         ((char *)0xc0000e0000000400)
  36. #define HUBREG                  ((char *)0xc0000a0001e00000)
  37. #define WIDGET0                 ((char *)0xc0000a0000000000)
  38. int test = 0;
  39. /*
  40.  * Hack to loop for test.
  41.  */
  42. void
  43. test_io_regs(void)
  44. {
  45. uint32_t reg_32bits;
  46. uint64_t reg_64bits;
  47. while (test) {
  48. reg_32bits = (uint32_t)(*(volatile uint32_t *) SYNERGY_WIDGET);
  49. reg_64bits = (uint64_t) (*(volatile uint64_t *) SYNERGY_WIDGET);
  50. }
  51.         printk("Synergy Widget Address = 0x%p, Value = 0x%lxn", SYNERGY_WIDGET, (uint64_t)*(SYNERGY_WIDGET));
  52.         printk("Synergy swizzle Address = 0x%p, Value = 0x%lxn", SYNERGY_SWIZZLE, (uint64_t)*(SYNERGY_SWIZZLE));
  53.         printk("HUBREG  Address = 0x%p, Value = 0x%lxn",  HUBREG, (uint64_t)*(HUBREG));
  54.         printk("WIDGET0 Address = 0x%p, Value = 0x%lxn", WIDGET0, (uint64_t)*(WIDGET0));
  55.         printk("WIDGET4 Address = 0x%p, Value = 0x%xn", WIDGET4, (uint32_t)*(WIDGET4));
  56. }
  57. void
  58. klgraph_hack_init(void)
  59. {
  60. kl_config_hdr_t *kl_hdr_ptr;
  61. lboard_t *lb_ptr;
  62. lboard_t *temp_ptr;
  63. klhub_t *klhub_ptr;
  64. klioc3_t *klioc3_ptr;
  65. klbri_t *klbri_ptr;
  66. klxbow_t *klxbow_ptr;
  67. klinfo_t *klinfo_ptr;
  68. klcomp_t *klcomp_ptr;
  69. #if 0
  70. uint64_t *tmp;
  71. volatile u32 *tmp32;
  72. /* Preset some values */
  73. /* Write IOERR clear to clear the CRAZY bit in the status */
  74. tmp = (uint64_t *)0xc0000a0001c001f8; *tmp = (uint64_t)0xffffffff;
  75. /* set widget control register...setting bedrock widget id to b */
  76. /* tmp = (uint64_t *)0xc0000a0001c00020; *tmp = (uint64_t)0x801b; */
  77. /* set io outbound widget access...allow all */
  78. tmp = (uint64_t *)0xc0000a0001c00110; *tmp = (uint64_t)0xff01;
  79. /* set io inbound widget access...allow all */
  80. tmp = (uint64_t *)0xc0000a0001c00118; *tmp = (uint64_t)0xff01;
  81. /* set io crb timeout to max */
  82. tmp = (uint64_t *)0xc0000a0001c003c0; *tmp = (uint64_t)0xffffff;
  83. tmp = (uint64_t *)0xc0000a0001c003c0; *tmp = (uint64_t)0xffffff;
  84. /* set local block io permission...allow all */
  85. tmp = (uint64_t *)0xc0000a0001e04010; *tmp = (uint64_t)0xfffffffffffffff;
  86. /* clear any errors */
  87. clear_ii_error();
  88. /* set default read response buffers in bridge */
  89. tmp32 = (volatile u32 *)0xc0000a000f000280L;
  90. *tmp32 = 0xba98;
  91. tmp32 = (volatile u32 *)0xc0000a000f000288L;
  92. *tmp32 = 0xba98;
  93. printk("Widget ID Address 0x%p Value 0x%lxn", (uint64_t *)0xc0000a0001e00000, *( (volatile uint64_t *)0xc0000a0001e00000) );
  94. printk("Widget ID Address 0x%p Value 0x%lxn", (uint64_t *)0xc0000a0001c00000, *( (volatile uint64_t *)0xc0000a0001c00000) );
  95. printk("Widget ID Address 0x%p Value 0x%lxn", (uint64_t *)0xc000020001e00000, *( (volatile uint64_t *)0xc000020001e00000) );
  96. printk("Widget ID Address 0x%p Value 0x%lxn", (uint64_t *)0xc000020001c00000, *( (volatile uint64_t *)0xc000020001c00000) );
  97. printk("Widget ID Address 0x%p Value 0x%lxn", (uint64_t *)0xc0000a0001e00000, *( (volatile uint64_t *)0xc0000a0001e00000) );
  98. printk("Xbow ID Address 0x%p Value 0x%xn", (uint64_t *)0xc0000a0000000000, *( (volatile uint32_t *)0xc0000a0000000000) );
  99. printk("Xbow ID Address 0x%p Value 0x%xn", (uint64_t *)0xc000020000000004, *( (volatile uint32_t *)0xc000020000000004) );
  100. #endif
  101. if ( test )
  102. test_io_regs();
  103. /*
  104.  * Klconfig header.
  105.  */
  106. kl_hdr_ptr = kmalloc(sizeof(kl_config_hdr_t), GFP_KERNEL);
  107.         kl_hdr_ptr->ch_magic = 0xbeedbabe;
  108.         kl_hdr_ptr->ch_version = 0x0;
  109.         kl_hdr_ptr->ch_malloc_hdr_off = 0x48;
  110.         kl_hdr_ptr->ch_cons_off = 0x18;
  111.         kl_hdr_ptr->ch_board_info = 0x0;
  112.         kl_hdr_ptr->ch_cons_info.uart_base = 0x920000000f820178;
  113.         kl_hdr_ptr->ch_cons_info.config_base = 0x920000000f024000;
  114.         kl_hdr_ptr->ch_cons_info.memory_base = 0x920000000f800000;
  115.         kl_hdr_ptr->ch_cons_info.baud = 0x2580;
  116.         kl_hdr_ptr->ch_cons_info.flag = 0x1;
  117.         kl_hdr_ptr->ch_cons_info.type = 0x300fafa;
  118.         kl_hdr_ptr->ch_cons_info.nasid = 0x0;
  119.         kl_hdr_ptr->ch_cons_info.wid = 0xf;
  120.         kl_hdr_ptr->ch_cons_info.npci = 0x4;
  121.         kl_hdr_ptr->ch_cons_info.baseio_nic = 0x0;
  122. /*
  123.  * We need to know whether we are booting from PROM or 
  124.  * boot from disk.
  125.  */
  126. linux_klcfg = (kl_config_hdr_t *)0xe000000000030000;
  127. if (linux_klcfg->ch_magic == 0xbeedbabe) {
  128. return;
  129. } else {
  130. linux_klcfg = kl_hdr_ptr;
  131. }
  132. /*
  133.  * lboard KLTYPE_IP35
  134.  */
  135. lb_ptr = kmalloc(sizeof(lboard_t), GFP_KERNEL);
  136. kl_hdr_ptr->ch_board_info = (klconf_off_t) lb_ptr;
  137. temp_ptr = lb_ptr;
  138. printk("First Lboard = %pn", temp_ptr);
  139.         lb_ptr->brd_next = 0;
  140.         lb_ptr->struct_type = 0x1;
  141.         lb_ptr->brd_type  = 0x11;
  142.         lb_ptr->brd_sversion = 0x3;
  143.         lb_ptr->brd_brevision = 0x1;
  144.         lb_ptr->brd_promver = 0x1;
  145.         lb_ptr->brd_promver = 0x1;
  146.         lb_ptr->brd_slot = 0x0;
  147.         lb_ptr->brd_debugsw = 0x0;
  148.         lb_ptr->brd_module = 0x145;
  149.         lb_ptr->brd_partition = 0x0;
  150.         lb_ptr->brd_diagval = 0x0;
  151.         lb_ptr->brd_diagparm = 0x0;
  152.         lb_ptr->brd_inventory = 0x0;
  153.         lb_ptr->brd_numcompts = 0x5;
  154.         lb_ptr->brd_nic = 0x2a0aed35;
  155.         lb_ptr->brd_nasid = 0x0;
  156.         lb_ptr->brd_errinfo = 0x0;
  157.         lb_ptr->brd_parent = 0x0;
  158.         lb_ptr->brd_graph_link  = (devfs_handle_t)0x26;
  159.         lb_ptr->brd_owner = 0x0;
  160.         lb_ptr->brd_nic_flags = 0x0;
  161. memcpy(&lb_ptr->brd_name[0], "IP35", 4);
  162. /*
  163.  * Hub Component
  164.  */
  165. klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  166. klhub_ptr = (klhub_t *)klcomp_ptr;
  167. klinfo_ptr = (klinfo_t *)klcomp_ptr;
  168. lb_ptr->brd_compts[0] = (klconf_off_t)klcomp_ptr;
  169. printk("hub info = %p lboard = %pn", klhub_ptr, lb_ptr);
  170. klinfo_ptr = (klinfo_t *)klhub_ptr;
  171.         klinfo_ptr->struct_type = 0x2;
  172.         klinfo_ptr->struct_version = 0x1;
  173.         klinfo_ptr->flags = 0x1;
  174.         klinfo_ptr->revision = 0x1;
  175.         klinfo_ptr->diagval = 0x0;
  176.         klinfo_ptr->diagparm = 0x0;
  177.         klinfo_ptr->inventory = 0x0;
  178.         klinfo_ptr->partid = 0x0;
  179.         klinfo_ptr->nic = 0x2a0aed35;
  180.         klinfo_ptr->physid = 0x0;
  181.         klinfo_ptr->virtid = 0x0;
  182.         klinfo_ptr->widid = 0x0;
  183.         klinfo_ptr->nasid = 0x0;
  184.         klhub_ptr->hub_flags = 0x0;
  185.         klhub_ptr->hub_port.port_nasid = (nasid_t)0x0ffffffff;
  186.         klhub_ptr->hub_port.port_flag = 0x0;
  187.         klhub_ptr->hub_port.port_offset = 0x0;
  188.         klhub_ptr->hub_box_nic = 0x0;
  189.         klhub_ptr->hub_mfg_nic = 0x3f420;
  190.         klhub_ptr->hub_speed = 0xbebc200;
  191. /*
  192.  * Memory Component
  193.  */
  194.         klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  195.         klinfo_ptr = (klinfo_t *)klcomp_ptr;
  196. lb_ptr->brd_compts[1] = (klconf_off_t)klcomp_ptr;
  197.         klinfo_ptr->struct_type = 0x3;
  198.         klinfo_ptr->struct_version = 0x2;
  199.         klinfo_ptr->flags = 0x1;
  200.         klinfo_ptr->revision = 0xff;
  201.         klinfo_ptr->diagval = 0x0;
  202.         klinfo_ptr->diagparm = 0x0;
  203.         klinfo_ptr->inventory = 0x0;
  204.         klinfo_ptr->partid = 0x0;
  205.         klinfo_ptr->nic = 0xffffffffffffffff;
  206.         klinfo_ptr->physid = 0xff;
  207.         klinfo_ptr->virtid = 0xffffffff;
  208.         klinfo_ptr->widid = 0x0;
  209.         klinfo_ptr->nasid = 0x0;
  210. /*
  211.  * KLSTRUCT_HUB_UART Component
  212.  */
  213. klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  214. klinfo_ptr = (klinfo_t *)klcomp_ptr;
  215. lb_ptr->brd_compts[2] = (klconf_off_t)klcomp_ptr;
  216.         klinfo_ptr->struct_type = 0x11;
  217.         klinfo_ptr->struct_version = 0x1;
  218.         klinfo_ptr->flags = 0x31;
  219.         klinfo_ptr->revision = 0xff;
  220.         klinfo_ptr->diagval = 0x0;
  221.         klinfo_ptr->diagparm = 0x0;
  222.         klinfo_ptr->inventory = 0x0;
  223.         klinfo_ptr->partid = 0x0;
  224.         klinfo_ptr->nic = 0xffffffffffffffff;
  225.         klinfo_ptr->physid = 0x0;
  226.         klinfo_ptr->virtid = 0x0;
  227.         klinfo_ptr->widid = 0x0;
  228.         klinfo_ptr->nasid = 0x0;
  229. /*
  230.  * KLSTRUCT_CPU Component
  231.  */
  232. klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  233.         klinfo_ptr = (klinfo_t *)klcomp_ptr;
  234. lb_ptr->brd_compts[3] = (klconf_off_t)klcomp_ptr;
  235.         klinfo_ptr->struct_type = 0x1;
  236.         klinfo_ptr->struct_version = 0x2;
  237.         klinfo_ptr->flags = 0x1;
  238.         klinfo_ptr->revision = 0xff;
  239.         klinfo_ptr->diagval = 0x0;
  240.         klinfo_ptr->diagparm = 0x0;
  241.         klinfo_ptr->inventory = 0x0;
  242.         klinfo_ptr->partid = 0x0;
  243.         klinfo_ptr->nic = 0xffffffffffffffff;
  244.         klinfo_ptr->physid = 0x0;
  245.         klinfo_ptr->virtid = 0x0;
  246.         klinfo_ptr->widid = 0x0;
  247.         klinfo_ptr->nasid = 0x0;
  248. /*
  249.  * KLSTRUCT_CPU Component
  250.  */
  251. klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  252.         klinfo_ptr = (klinfo_t *)klcomp_ptr;
  253. lb_ptr->brd_compts[4] = (klconf_off_t)klcomp_ptr;
  254.         klinfo_ptr->struct_type = 0x1;
  255.         klinfo_ptr->struct_version = 0x2;
  256.         klinfo_ptr->flags = 0x1;
  257.         klinfo_ptr->revision = 0xff;
  258.         klinfo_ptr->diagval = 0x0;
  259.         klinfo_ptr->diagparm = 0x0;
  260.         klinfo_ptr->inventory = 0x0;
  261.         klinfo_ptr->partid = 0x0;
  262.         klinfo_ptr->nic = 0xffffffffffffffff;
  263.         klinfo_ptr->physid = 0x1;
  264.         klinfo_ptr->virtid = 0x1;
  265.         klinfo_ptr->widid = 0x0;
  266.         klinfo_ptr->nasid = 0x0;
  267. lb_ptr->brd_compts[5] = 0; /* Set the next one to 0 .. end */
  268. lb_ptr->brd_numcompts = 5; /* 0 to 4 */
  269. /*
  270.  * lboard(0x42) KLTYPE_PBRICK_XBOW
  271.  */
  272. lb_ptr = kmalloc(sizeof(lboard_t), GFP_KERNEL);
  273. temp_ptr->brd_next = (klconf_off_t)lb_ptr; /* Let the previous point at the new .. */
  274. temp_ptr = lb_ptr;
  275. printk("Second Lboard = %pn", temp_ptr);
  276.         lb_ptr->brd_next = 0;
  277.         lb_ptr->struct_type = 0x1;
  278.         lb_ptr->brd_type  = 0x42;
  279.         lb_ptr->brd_sversion = 0x2;
  280.         lb_ptr->brd_brevision = 0x0;
  281.         lb_ptr->brd_promver = 0x1;
  282.         lb_ptr->brd_promver = 0x1;
  283.         lb_ptr->brd_slot = 0x0;
  284.         lb_ptr->brd_debugsw = 0x0;
  285.         lb_ptr->brd_module = 0x145;
  286.         lb_ptr->brd_partition = 0x1;
  287.         lb_ptr->brd_diagval = 0x0;
  288.         lb_ptr->brd_diagparm = 0x0;
  289.         lb_ptr->brd_inventory = 0x0;
  290.         lb_ptr->brd_numcompts = 0x1;
  291.         lb_ptr->brd_nic = 0xffffffffffffffff;
  292.         lb_ptr->brd_nasid = 0x0;
  293.         lb_ptr->brd_errinfo = 0x0;
  294.         lb_ptr->brd_parent = (struct lboard_s *)0x9600000000030070;
  295.         lb_ptr->brd_graph_link  = (devfs_handle_t)0xffffffff;
  296.         lb_ptr->brd_owner = 0x0;
  297.         lb_ptr->brd_nic_flags = 0x0;
  298.         memcpy(&lb_ptr->brd_name[0], "IOBRICK", 7);
  299. /*
  300.  * KLSTRUCT_XBOW Component
  301.  */
  302.         klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  303. memset(klcomp_ptr, 0, sizeof(klcomp_t));
  304.         klxbow_ptr = (klxbow_t *)klcomp_ptr;
  305.         klinfo_ptr = (klinfo_t *)klcomp_ptr;
  306.         lb_ptr->brd_compts[0] = (klconf_off_t)klcomp_ptr;
  307. printk("xbow_p 0x%pn", klcomp_ptr);
  308.         klinfo_ptr->struct_type = 0x4;
  309.         klinfo_ptr->struct_version = 0x1;
  310.         klinfo_ptr->flags = 0x1;
  311.         klinfo_ptr->revision = 0x2;
  312.         klinfo_ptr->diagval = 0x0;
  313.         klinfo_ptr->diagparm = 0x0;
  314.         klinfo_ptr->inventory = 0x0;
  315.         klinfo_ptr->partid = 0x0;
  316.         klinfo_ptr->nic = 0xffffffffffffffff;
  317.         klinfo_ptr->physid = 0xff;
  318.         klinfo_ptr->virtid = 0x0;
  319.         klinfo_ptr->widid = 0x0;
  320.         klinfo_ptr->nasid = 0x0;
  321.         klxbow_ptr->xbow_master_hub_link = 0xb;
  322.         klxbow_ptr->xbow_port_info[0].port_nasid = 0x0;
  323.         klxbow_ptr->xbow_port_info[0].port_flag = 0x0;
  324.         klxbow_ptr->xbow_port_info[0].port_offset = 0x0;
  325.         klxbow_ptr->xbow_port_info[1].port_nasid = 0x401;
  326.         klxbow_ptr->xbow_port_info[1].port_flag = 0x0;
  327.         klxbow_ptr->xbow_port_info[1].port_offset = 0x0;
  328.         klxbow_ptr->xbow_port_info[2].port_nasid = 0x0;
  329.         klxbow_ptr->xbow_port_info[2].port_flag = 0x0;
  330.         klxbow_ptr->xbow_port_info[2].port_offset = 0x0;
  331.         klxbow_ptr->xbow_port_info[3].port_nasid = 0x0; /* ffffffff */
  332.         klxbow_ptr->xbow_port_info[3].port_flag = 0x6;
  333.         klxbow_ptr->xbow_port_info[3].port_offset = 0x30070;
  334.         klxbow_ptr->xbow_port_info[4].port_nasid = 0x0; /* ffffff00; */
  335.         klxbow_ptr->xbow_port_info[4].port_flag = 0x0;
  336.         klxbow_ptr->xbow_port_info[4].port_offset = 0x0;
  337.         klxbow_ptr->xbow_port_info[5].port_nasid = 0x0;
  338.         klxbow_ptr->xbow_port_info[5].port_flag = 0x0;
  339.         klxbow_ptr->xbow_port_info[5].port_offset = 0x0;
  340.         klxbow_ptr->xbow_port_info[6].port_nasid = 0x0;
  341.         klxbow_ptr->xbow_port_info[6].port_flag = 0x5;
  342.         klxbow_ptr->xbow_port_info[6].port_offset = 0x30210;
  343.         klxbow_ptr->xbow_port_info[7].port_nasid = 0x3;
  344.         klxbow_ptr->xbow_port_info[7].port_flag = 0x5;
  345.         klxbow_ptr->xbow_port_info[7].port_offset = 0x302e0;
  346. lb_ptr->brd_compts[1] = 0;
  347.         lb_ptr->brd_numcompts = 1;
  348. /*
  349.  * lboard KLTYPE_PBRICK
  350.  */
  351. lb_ptr = kmalloc(sizeof(lboard_t), GFP_KERNEL);
  352. temp_ptr->brd_next = (klconf_off_t)lb_ptr; /* Let the previous point at the new .. */
  353. temp_ptr = lb_ptr;
  354. printk("Third Lboard %pn", lb_ptr);
  355.         lb_ptr->brd_next = 0;
  356.         lb_ptr->struct_type = 0x1;
  357.         lb_ptr->brd_type  = 0x72;
  358.         lb_ptr->brd_sversion = 0x2;
  359.         lb_ptr->brd_brevision = 0x0;
  360.         lb_ptr->brd_promver = 0x1;
  361.         lb_ptr->brd_promver = 0x41;
  362.         lb_ptr->brd_slot = 0xe;
  363.         lb_ptr->brd_debugsw = 0x0;
  364.         lb_ptr->brd_module = 0x145;
  365.         lb_ptr->brd_partition = 0x1;
  366.         lb_ptr->brd_diagval = 0x0;
  367.         lb_ptr->brd_diagparm = 0x0;
  368.         lb_ptr->brd_inventory = 0x0;
  369.         lb_ptr->brd_numcompts = 0x1;
  370.         lb_ptr->brd_nic = 0x30e3fd;
  371.         lb_ptr->brd_nasid = 0x0;
  372.         lb_ptr->brd_errinfo = 0x0;
  373.         lb_ptr->brd_parent = (struct lboard_s *)0x9600000000030140;
  374.         lb_ptr->brd_graph_link  = (devfs_handle_t)0xffffffff;
  375.         lb_ptr->brd_owner = 0x0;
  376.         lb_ptr->brd_nic_flags = 0x0;
  377. memcpy(&lb_ptr->brd_name[0], "IP35", 4);
  378. /*
  379.  * KLSTRUCT_BRI Component
  380.  */
  381.         klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  382.         klbri_ptr = (klbri_t *)klcomp_ptr;
  383.         klinfo_ptr = (klinfo_t *)klcomp_ptr;
  384.         lb_ptr->brd_compts[0] = (klconf_off_t)klcomp_ptr;
  385.         klinfo_ptr->struct_type = 0x5;
  386.         klinfo_ptr->struct_version = 0x2;
  387.         klinfo_ptr->flags = 0x1;
  388.         klinfo_ptr->revision = 0x2;
  389.         klinfo_ptr->diagval = 0x0;
  390.         klinfo_ptr->diagparm = 0x0;
  391.         klinfo_ptr->inventory = 0x0;
  392.         klinfo_ptr->partid = 0xd002;
  393.         klinfo_ptr->nic = 0x30e3fd;
  394.         klinfo_ptr->physid = 0xe;
  395.         klinfo_ptr->virtid = 0xe;
  396.         klinfo_ptr->widid = 0xe;
  397.         klinfo_ptr->nasid = 0x0;
  398.         klbri_ptr->bri_eprominfo = 0xff;
  399.         klbri_ptr->bri_bustype = 0x7;
  400.         klbri_ptr->bri_mfg_nic = 0x3f4a8;
  401.         lb_ptr->brd_compts[1] = 0;
  402.         lb_ptr->brd_numcompts = 1;
  403. /*
  404.  * lboard KLTYPE_PBRICK
  405.  */
  406. lb_ptr = kmalloc(sizeof(lboard_t), GFP_KERNEL);
  407. temp_ptr->brd_next = (klconf_off_t)lb_ptr; /* Let the previous point at the new .. */
  408. temp_ptr = lb_ptr;
  409. printk("Fourth Lboard %pn", lb_ptr);
  410.         lb_ptr->brd_next = 0x0;
  411.         lb_ptr->struct_type = 0x1;
  412.         lb_ptr->brd_type  = 0x72;
  413.         lb_ptr->brd_sversion = 0x2;
  414.         lb_ptr->brd_brevision = 0x0;
  415.         lb_ptr->brd_promver = 0x1;
  416.         lb_ptr->brd_promver = 0x31;
  417.         lb_ptr->brd_slot = 0xf;
  418.         lb_ptr->brd_debugsw = 0x0;
  419.         lb_ptr->brd_module = 0x145;
  420.         lb_ptr->brd_partition = 0x1;
  421.         lb_ptr->brd_diagval = 0x0;
  422.         lb_ptr->brd_diagparm = 0x0;
  423.         lb_ptr->brd_inventory = 0x0;
  424.         lb_ptr->brd_numcompts = 0x6;
  425.         lb_ptr->brd_nic = 0x30e3fd;
  426.         lb_ptr->brd_nasid = 0x0;
  427.         lb_ptr->brd_errinfo = 0x0;
  428.         lb_ptr->brd_parent = (struct lboard_s *)0x9600000000030140;
  429.         lb_ptr->brd_graph_link  = (devfs_handle_t)0xffffffff;
  430.         lb_ptr->brd_owner = 0x0;
  431.         lb_ptr->brd_nic_flags = 0x0;
  432. memcpy(&lb_ptr->brd_name[0], "IP35", 4);
  433. /*
  434.  * KLSTRUCT_BRI Component
  435.  */
  436.         klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  437. klbri_ptr = (klbri_t *)klcomp_ptr;
  438.         klinfo_ptr = (klinfo_t *)klcomp_ptr;
  439.         lb_ptr->brd_compts[0] = (klconf_off_t)klcomp_ptr;
  440.         klinfo_ptr->struct_type = 0x5;
  441.         klinfo_ptr->struct_version = 0x2;
  442.         klinfo_ptr->flags = 0x1;
  443.         klinfo_ptr->revision = 0x2;
  444.         klinfo_ptr->diagval = 0x0;
  445.         klinfo_ptr->diagparm = 0x0;
  446.         klinfo_ptr->inventory = 0x0;
  447.         klinfo_ptr->partid = 0xd002;
  448.         klinfo_ptr->nic = 0x30e3fd;
  449.         klinfo_ptr->physid = 0xf;
  450.         klinfo_ptr->virtid = 0xf;
  451.         klinfo_ptr->widid = 0xf;
  452.         klinfo_ptr->nasid = 0x0;
  453.         klbri_ptr->bri_eprominfo = 0xff;
  454.         klbri_ptr->bri_bustype = 0x7;
  455.         klbri_ptr->bri_mfg_nic = 0x3f528;
  456. /*
  457.  * KLSTRUCT_SCSI component
  458.  */
  459.         klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  460.         klinfo_ptr = (klinfo_t *)klcomp_ptr;
  461.         lb_ptr->brd_compts[1] = (klconf_off_t)klcomp_ptr;
  462.         klinfo_ptr->struct_type = 0xb;
  463.         klinfo_ptr->struct_version = 0x1;
  464.         klinfo_ptr->flags = 0x31;
  465.         klinfo_ptr->revision = 0x5;
  466.         klinfo_ptr->diagval = 0x0;
  467.         klinfo_ptr->diagparm = 0x0;
  468.         klinfo_ptr->inventory = 0x0;
  469.         klinfo_ptr->partid = 0x0;
  470.         klinfo_ptr->nic = 0xffffffffffffffff;
  471.         klinfo_ptr->physid = 0x1;
  472.         klinfo_ptr->virtid = 0x0;
  473.         klinfo_ptr->widid = 0xf;
  474.         klinfo_ptr->nasid = 0x0;
  475. /*
  476.  * KLSTRUCT_IOC3 Component
  477.  */
  478.         klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  479.         klioc3_ptr = (klioc3_t *)klcomp_ptr;
  480.         klinfo_ptr = (klinfo_t *)klcomp_ptr;
  481.         lb_ptr->brd_compts[2] = (klconf_off_t)klcomp_ptr;
  482.         klinfo_ptr->struct_type = 0x6;
  483.         klinfo_ptr->struct_version = 0x1;
  484.         klinfo_ptr->flags = 0x31;
  485.         klinfo_ptr->revision = 0x1;
  486.         klinfo_ptr->diagval = 0x0;
  487.         klinfo_ptr->diagparm = 0x0;
  488.         klinfo_ptr->inventory = 0x0;
  489.         klinfo_ptr->partid = 0x0;
  490.         klinfo_ptr->nic = 0xffffffffffffffff;
  491.         klinfo_ptr->physid = 0x4;
  492.         klinfo_ptr->virtid = 0x0;
  493.         klinfo_ptr->widid = 0xf;
  494.         klinfo_ptr->nasid = 0x0;
  495.         klioc3_ptr->ioc3_ssram = 0x0;
  496.         klioc3_ptr->ioc3_nvram = 0x0;
  497. /*
  498.  * KLSTRUCT_UNKNOWN Component
  499.  */
  500.         klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  501.         klinfo_ptr = (klinfo_t *)klcomp_ptr;
  502.         lb_ptr->brd_compts[3] = (klconf_off_t)klcomp_ptr;
  503.         klinfo_ptr->struct_type = 0x0;
  504.         klinfo_ptr->struct_version = 0x1;
  505.         klinfo_ptr->flags = 0x31;
  506.         klinfo_ptr->revision = 0xff;
  507.         klinfo_ptr->diagval = 0x0;
  508.         klinfo_ptr->diagparm = 0x0;
  509.         klinfo_ptr->inventory = 0x0;
  510.         klinfo_ptr->partid = 0x0;
  511.         klinfo_ptr->nic = 0xffffffffffffffff;
  512.         klinfo_ptr->physid = 0x5;
  513.         klinfo_ptr->virtid = 0x0;
  514.         klinfo_ptr->widid = 0xf;
  515.         klinfo_ptr->nasid = 0x0;
  516. /*
  517.  * KLSTRUCT_SCSI Component
  518.  */
  519.         klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  520.         klinfo_ptr = (klinfo_t *)klcomp_ptr;
  521.         lb_ptr->brd_compts[4] = (klconf_off_t)klcomp_ptr;
  522.         klinfo_ptr->struct_type = 0xb;
  523.         klinfo_ptr->struct_version = 0x1;
  524.         klinfo_ptr->flags = 0x31;
  525.         klinfo_ptr->revision = 0x1;
  526.         klinfo_ptr->diagval = 0x0;
  527.         klinfo_ptr->diagparm = 0x0;
  528.         klinfo_ptr->inventory = 0x0;
  529.         klinfo_ptr->partid = 0x0;
  530.         klinfo_ptr->nic = 0xffffffffffffffff;
  531.         klinfo_ptr->physid = 0x6;
  532.         klinfo_ptr->virtid = 0x5;
  533.         klinfo_ptr->widid = 0xf;
  534.         klinfo_ptr->nasid = 0x0;
  535. /*
  536.  * KLSTRUCT_UNKNOWN
  537.  */
  538.         klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);
  539.         klinfo_ptr = (klinfo_t *)klcomp_ptr;
  540.         lb_ptr->brd_compts[5] = (klconf_off_t)klcomp_ptr;
  541.         klinfo_ptr->struct_type = 0x0;
  542.         klinfo_ptr->struct_version = 0x1;
  543.         klinfo_ptr->flags = 0x31;
  544.         klinfo_ptr->revision = 0xff;
  545.         klinfo_ptr->diagval = 0x0;
  546.         klinfo_ptr->diagparm = 0x0;
  547.         klinfo_ptr->inventory = 0x0;
  548.         klinfo_ptr->partid = 0x0;
  549.         klinfo_ptr->nic = 0xffffffffffffffff;
  550.         klinfo_ptr->physid = 0x7;
  551.         klinfo_ptr->virtid = 0x0;
  552.         klinfo_ptr->widid = 0xf;
  553.         klinfo_ptr->nasid = 0x0;
  554. lb_ptr->brd_compts[6] = 0;
  555. lb_ptr->brd_numcompts = 6;
  556. }
  557. #ifdef BRINGUP
  558. /* 
  559.  * these were useful for printing out registers etc
  560.  * during bringup  
  561.  */
  562. void
  563. xdump(long long *addr, int count)
  564. {
  565. int ii;
  566. volatile long long *xx = addr;
  567. for ( ii = 0; ii < count; ii++, xx++ ) {
  568. printk("0x%p : 0x%pn", xx, *xx);
  569. }
  570. }
  571. void
  572. xdump32(unsigned int *addr, int count)
  573. {
  574. int ii;
  575. volatile unsigned int *xx = addr;
  576. for ( ii = 0; ii < count; ii++, xx++ ) {
  577. printk("0x%p : 0x%0xn", xx, *xx);
  578. }
  579. }
  580. void
  581. clear_ii_error(void)
  582. {
  583. volatile long long *tmp;
  584. printk("... WSTAT ");
  585. xdump((long long *)0xc0000a0001c00008, 1);
  586. printk("... WCTRL ");
  587. xdump((long long *)0xc0000a0001c00020, 1);
  588. printk("... WLCSR ");
  589. xdump((long long *)0xc0000a0001c00128, 1);
  590. printk("... IIDSR ");
  591. xdump((long long *)0xc0000a0001c00138, 1);
  592.         printk("... IOPRBs ");
  593. xdump((long long *)0xc0000a0001c00198, 9);
  594. printk("... IXSS ");
  595. xdump((long long *)0xc0000a0001c00210, 1);
  596. printk("... IBLS0 ");
  597. xdump((long long *)0xc0000a0001c10000, 1);
  598. printk("... IBLS1 ");
  599. xdump((long long *)0xc0000a0001c20000, 1);
  600.         /* Write IOERR clear to clear the CRAZY bit in the status */
  601.         tmp = (long long *)0xc0000a0001c001f8; *tmp = (long long)0xffffffff;
  602. /* dump out local block error registers */
  603. printk("... ");
  604. xdump((long long *)0xc0000a0001e04040, 1); /* LB_ERROR_BITS */
  605. printk("... ");
  606. xdump((long long *)0xc0000a0001e04050, 1); /* LB_ERROR_HDR1 */
  607. printk("... ");
  608. xdump((long long *)0xc0000a0001e04058, 1); /* LB_ERROR_HDR2 */
  609. /* and clear the LB_ERROR_BITS */
  610. tmp = (long long *)0xc0000a0001e04040; *tmp = 0x0;
  611. printk("clr: ");
  612. xdump((long long *)0xc0000a0001e04040, 1); /* LB_ERROR_BITS */
  613. tmp = (long long *)0xc0000a0001e04050; *tmp = 0x0;
  614. tmp = (long long *)0xc0000a0001e04058; *tmp = 0x0;
  615. }
  616. void
  617. dump_ii()
  618. {
  619. printk("===== Dump the II regs =====n");
  620. xdump((long long *)0xc0000a0001c00000, 2);
  621. xdump((long long *)0xc0000a0001c00020, 1);
  622. xdump((long long *)0xc0000a0001c00100, 37);
  623. xdump((long long *)0xc0000a0001c00300, 98);
  624. xdump((long long *)0xc0000a0001c10000, 6);
  625. xdump((long long *)0xc0000a0001c20000, 6);
  626. xdump((long long *)0xc0000a0001c30000, 2);
  627. xdump((long long *)0xc0000a0000000000, 1);
  628. xdump((long long *)0xc0000a0001000000, 1);
  629. xdump((long long *)0xc0000a0002000000, 1);
  630. xdump((long long *)0xc0000a0003000000, 1);
  631. xdump((long long *)0xc0000a0004000000, 1);
  632. xdump((long long *)0xc0000a0005000000, 1);
  633. xdump((long long *)0xc0000a0006000000, 1);
  634. xdump((long long *)0xc0000a0007000000, 1);
  635. xdump((long long *)0xc0000a0008000000, 1);
  636. xdump((long long *)0xc0000a0009000000, 1);
  637. xdump((long long *)0xc0000a000a000000, 1);
  638. xdump((long long *)0xc0000a000b000000, 1);
  639. xdump((long long *)0xc0000a000c000000, 1);
  640. xdump((long long *)0xc0000a000d000000, 1);
  641. xdump((long long *)0xc0000a000e000000, 1);
  642. xdump((long long *)0xc0000a000f000000, 1);
  643. }
  644. void
  645. dump_lb()
  646. {
  647. printk("===== Dump the LB regs =====n");
  648. xdump((long long *)0xc0000a0001e00000, 1);
  649. xdump((long long *)0xc0000a0001e04000, 13);
  650. xdump((long long *)0xc0000a0001e04100, 2);
  651. xdump((long long *)0xc0000a0001e04200, 2);
  652. xdump((long long *)0xc0000a0001e08000, 5);
  653. xdump((long long *)0xc0000a0001e08040, 2);
  654. xdump((long long *)0xc0000a0001e08050, 3);
  655. xdump((long long *)0xc0000a0001e0c000, 3);
  656. xdump((long long *)0xc0000a0001e0c020, 4);
  657. }
  658. void
  659. dump_crossbow()
  660. {
  661. printk("===== Dump the Crossbow regs =====n");
  662. clear_ii_error();
  663. xdump32((unsigned int *)0xc0000a0000000004, 1);
  664. clear_ii_error();
  665. xdump32((unsigned int *)0xc0000a0000000000, 1);
  666. printk("and again..n");
  667. xdump32((unsigned int *)0xc0000a0000000000, 1);
  668. xdump32((unsigned int *)0xc0000a0000000000, 1);
  669. clear_ii_error();
  670. xdump32((unsigned int *)0xc000020000000004, 1);
  671. clear_ii_error();
  672. xdump32((unsigned int *)0xc000020000000000, 1);
  673. clear_ii_error();
  674. xdump32((unsigned int *)0xc0000a0000800004, 1);
  675. clear_ii_error();
  676. xdump32((unsigned int *)0xc0000a0000800000, 1);
  677. clear_ii_error();
  678. xdump32((unsigned int *)0xc000020000800004, 1);
  679. clear_ii_error();
  680. xdump32((unsigned int *)0xc000020000800000, 1);
  681. clear_ii_error();
  682. }
  683. #endif /* BRINGUP */