+ verify_connection(7);
+
+ val = pci_read_config32(NODE_HT(7), 0x6c);
+ byte = (val>>2) & 0x3; /* get default link on 7 to 4*/
+ print_linkn("(7,4) link=", byte);
+ setup_row_local(7,7);
+ setup_remote_row_direct(7, 4, byte);
+ /* till now 4-7, 7-4 done. */
+#endif
+ setup_remote_node(7); /* Setup the regs on the remote node */
+
+#if CROSS_BAR_47_56
+ /* here init 5, 7 */
+ /* Setup and check temporary connection from Node 0 to Node 5 through 1, 3, 5*/
+ val = get_row(5,5);
+ byte = ((val>>16) & 0xfe) - link_connection(5,3) - link_connection(5,6);
+ byte = get_linkn_first(byte);
+ print_linkn("(5,7) link=", byte);
+ setup_row_direct(5, 7, byte);
+
+ setup_temp_row(0,1); /* temp. link between nodes 0 and 1 */
+ for(byte=0; byte<4; byte+=2) {
+ setup_temp_row(byte+1,byte+3);
+ }
+
+ verify_connection(7);
+
+ val = pci_read_config32(NODE_HT(7), 0x6c);
+ byte = (val>>2) & 0x3; /* get default link on 7 to 5*/
+ print_linkn("(7,5) link=", byte);
+ setup_remote_row_direct(7, 5, byte);
+ /*Till now 57, 75 done */
+
+#endif
+
+ /* We need to init link between 6, and 7 direct link */
+ val = get_row(6,6);
+#if !CROSS_BAR_47_56
+ byte = ((val>>16) & 0xfe) - link_connection(6,4);
+#else
+ byte = ((val>>16) & 0xfe) - link_connection(6,4) - link_connection(6,5);
+#endif
+ byte = get_linkn_first(byte);
+ print_linkn("(6,7) link=", byte);
+ setup_row_direct(6,7, byte);
+
+ val = get_row(7,7);
+#if !CROSS_BAR_47_56
+ byte = ((val>>16) & 0xfe) - link_connection(7,5);
+#else
+ byte = ((val>>16) & 0xfe) - link_connection(7,5) - link_connection(7,4);
+#endif
+ byte = get_linkn_first(byte);
+ print_linkn("(7,6) link=", byte);
+ setup_row_direct(7,6, byte);
+
+ /* Set indirect connection to 0, to 3 for indirect we will use clockwise routing */
+ static const u8 conn8_3[] = {
+#if !CROSS_BAR_47_56
+ 0, 7, /* restore it*/
+ 1, 7,
+ 2, 7,
+ 3, 7,
+ 4, 7,
+
+ 6, 1,
+ 6, 2,
+ 6, 3,
+ 6, 5,
+
+ 7, 0,
+ 7, 1,
+ 7, 2,
+ 7, 3,
+ 7, 4,
+#else
+
+
+ 4, 5, 6, 1,
+ 5, 4, 7, 1,
+
+ 6, 1, 5, 0, // or 4, 1
+ 6, 2, 4, 0,
+ 6, 3, 5, 0, // or 4, 1
+
+ 7, 0, 4, 0, // or 5, 1
+ 7, 1, 5, 0,
+ 7, 2, 4, 0, // or 5, 1
+ 7, 3, 5, 0,
+
+ 0, 7, 2, 0, /* restore it*/
+ 1, 7, 3, 0,
+ 2, 7, 4, 1,
+ 3, 7, 5, 0,
+
+ 2, 5, 4, 1, /* reset it */
+ 3, 4, 5, 1,
+
+ 4, 1, 2, 1, /* reset it */
+ 4, 3, 2, 1,
+
+ 5, 2, 3, 1, /* reset it */
+ 5, 0, 3, 1,
+
+#endif
+ };
+
+ setup_row_indirect_group(conn8_3, ARRAY_SIZE(conn8_3));
+
+#if CROSS_BAR_47_56
+ /* for 47, 56, 57, 75, 46, 64 we need to substract another link to
+ 6, 7, 6, 6, 7, 7 */
+ static const u8 conn8_4[] = {
+//direct
+ 4, 7, 6,
+ 5, 6, 7,
+ 5, 7, 6,
+ 7, 5, 6,
+ 4, 6, 7,
+ 6, 4, 7,
+
+//in direct
+ 0, 6, 1,
+ 0, 7, 1,
+
+ 1, 6, 0,
+ 1, 7, 0,
+
+ 2, 6, 3,
+// 2, 7, 3, +
+
+// 3, 6, 1, +
+ 3, 7, 2,
+
+ 6, 0, 7,
+ 6, 1, 7, // needed for via 5
+ 6, 1, 4, // ???
+ 6, 2, 7,
+ 6, 3, 7, // needed for via 5
+ 6, 3, 4, //???
+ 7, 0, 6, // needed for via 4
+ 7, 0, 5, //???
+ 7, 1, 6,
+ 7, 2, 6, // needed for via 4
+ 7, 2, 5, //???
+ 7, 3, 6,
+ };
+
+ opt_broadcast_rt_group(conn8_4, ARRAY_SIZE(conn8_4));
+
+ static const u8 conn8_5[] = {
+ 2, 7, 0,
+
+ 3, 6, 1,
+ };
+
+ opt_broadcast_rt_plus_group(conn8_5, ARRAY_SIZE(conn8_5));
+#endif
+
+
+
+/* ready to enable RT for Node 7 */
+ enable_routing(7); /* enable routing on node 7 (temp.) */
+
+ return nodes;
+}
+
+#endif /* CONFIG_MAX_PHYSICAL_CPUS > 6 */
+
+
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+
+static unsigned setup_smp(void)