@@ -1396,6 +1396,29 @@ static int upi_nodeid_groupid(struct pci_dev *ubox_dev, int nodeid_loc, int idma
13961396 return ret ;
13971397}
13981398
1399+ static int topology_gidnid_map (int nodeid , u32 gidnid )
1400+ {
1401+ int i , die_id = -1 ;
1402+
1403+ /*
1404+ * every three bits in the Node ID mapping register maps
1405+ * to a particular node.
1406+ */
1407+ for (i = 0 ; i < 8 ; i ++ ) {
1408+ if (nodeid == GIDNIDMAP (gidnid , i )) {
1409+ if (topology_max_die_per_package () > 1 )
1410+ die_id = i ;
1411+ else
1412+ die_id = topology_phys_to_logical_pkg (i );
1413+ if (die_id < 0 )
1414+ die_id = - ENODEV ;
1415+ break ;
1416+ }
1417+ }
1418+
1419+ return die_id ;
1420+ }
1421+
13991422/*
14001423 * build pci bus to socket mapping
14011424 */
@@ -1435,22 +1458,7 @@ static int snbep_pci2phy_map_init(int devid, int nodeid_loc, int idmap_loc, bool
14351458 break ;
14361459 }
14371460
1438- /*
1439- * every three bits in the Node ID mapping register maps
1440- * to a particular node.
1441- */
1442- for (i = 0 ; i < 8 ; i ++ ) {
1443- if (nodeid == GIDNIDMAP (config , i )) {
1444- if (topology_max_die_per_package () > 1 )
1445- die_id = i ;
1446- else
1447- die_id = topology_phys_to_logical_pkg (i );
1448- if (die_id < 0 )
1449- die_id = - ENODEV ;
1450- map -> pbus_to_dieid [bus ] = die_id ;
1451- break ;
1452- }
1453- }
1461+ map -> pbus_to_dieid [bus ] = topology_gidnid_map (nodeid , config );
14541462 raw_spin_unlock (& pci2phy_map_lock );
14551463 } else {
14561464 segment = pci_domain_nr (ubox_dev -> bus );
@@ -5596,7 +5604,7 @@ static int discover_upi_topology(struct intel_uncore_type *type, int ubox_did, i
55965604 struct pci_dev * ubox = NULL ;
55975605 struct pci_dev * dev = NULL ;
55985606 u32 nid , gid ;
5599- int i , idx , lgc_pkg , ret = - EPERM ;
5607+ int idx , lgc_pkg , ret = - EPERM ;
56005608 struct intel_uncore_topology * upi ;
56015609 unsigned int devfn ;
56025610
@@ -5611,27 +5619,22 @@ static int discover_upi_topology(struct intel_uncore_type *type, int ubox_did, i
56115619 break ;
56125620 }
56135621
5614- for (i = 0 ; i < 8 ; i ++ ) {
5615- if (nid != GIDNIDMAP (gid , i ))
5616- continue ;
5617- lgc_pkg = topology_phys_to_logical_pkg (i );
5618- if (lgc_pkg < 0 ) {
5619- ret = - EPERM ;
5620- goto err ;
5621- }
5622- for (idx = 0 ; idx < type -> num_boxes ; idx ++ ) {
5623- upi = & type -> topology [lgc_pkg ][idx ];
5624- devfn = PCI_DEVFN (dev_link0 + idx , ICX_UPI_REGS_ADDR_FUNCTION );
5625- dev = pci_get_domain_bus_and_slot (pci_domain_nr (ubox -> bus ),
5626- ubox -> bus -> number ,
5627- devfn );
5628- if (dev ) {
5629- ret = upi_fill_topology (dev , upi , idx );
5630- if (ret )
5631- goto err ;
5632- }
5622+ lgc_pkg = topology_gidnid_map (nid , gid );
5623+ if (lgc_pkg < 0 ) {
5624+ ret = - EPERM ;
5625+ goto err ;
5626+ }
5627+ for (idx = 0 ; idx < type -> num_boxes ; idx ++ ) {
5628+ upi = & type -> topology [lgc_pkg ][idx ];
5629+ devfn = PCI_DEVFN (dev_link0 + idx , ICX_UPI_REGS_ADDR_FUNCTION );
5630+ dev = pci_get_domain_bus_and_slot (pci_domain_nr (ubox -> bus ),
5631+ ubox -> bus -> number ,
5632+ devfn );
5633+ if (dev ) {
5634+ ret = upi_fill_topology (dev , upi , idx );
5635+ if (ret )
5636+ goto err ;
56335637 }
5634- break ;
56355638 }
56365639 }
56375640err :
0 commit comments