}
 }
 
-static void topo_set_ids(struct topo_scan *tscan)
+static void topo_set_ids(struct topo_scan *tscan, bool early)
 {
        struct cpuinfo_x86 *c = tscan->c;
        u32 apicid = c->topo.apicid;
        c->topo.pkg_id = topo_shift_apicid(apicid, TOPO_PKG_DOMAIN);
        c->topo.die_id = topo_shift_apicid(apicid, TOPO_DIE_DOMAIN);
 
-       c->topo.logical_pkg_id = topology_get_logical_id(apicid, TOPO_PKG_DOMAIN);
-       c->topo.logical_die_id = topology_get_logical_id(apicid, TOPO_DIE_DOMAIN);
+       if (!early) {
+               c->topo.logical_pkg_id = topology_get_logical_id(apicid, TOPO_PKG_DOMAIN);
+               c->topo.logical_die_id = topology_get_logical_id(apicid, TOPO_DIE_DOMAIN);
+       }
 
        /* Package relative core ID */
        c->topo.core_id = (apicid & topo_domain_mask(TOPO_PKG_DOMAIN)) >>
                       tscan.dom_shifts[dom], x86_topo_system.dom_shifts[dom]);
        }
 
-       topo_set_ids(&tscan);
+       topo_set_ids(&tscan, false);
 }
 
 void __init cpu_init_topology(struct cpuinfo_x86 *c)
                x86_topo_system.dom_size[dom] = 1U << sft;
        }
 
-       topo_set_ids(&tscan);
+       topo_set_ids(&tscan, true);
 
        /*
         * AMD systems have Nodes per package which cannot be mapped to