index -= node * PEM_MAX_DOM_IN_NODE;
        res_pem->start = PEM_RES_BASE | FIELD_PREP(PEM_NODE_MASK, node) |
                                        FIELD_PREP(PEM_INDX_MASK, index);
-       res_pem->end = res_pem->start + SZ_16M - 1;
        res_pem->flags = IORESOURCE_MEM;
 }
 
         */
        if (ret) {
                thunder_pem_legacy_fw(root, res_pem);
-               /* Reserve PEM-specific resources and PCI configuration space */
+               /*
+                * Reserve 64K size PEM specific resources. The full 16M range
+                * size is required for thunder_pem_init() call.
+                */
+               res_pem->end = res_pem->start + SZ_64K - 1;
                thunder_pem_reserve_range(dev, root->segment, res_pem);
+               res_pem->end = res_pem->start + SZ_16M - 1;
+
+               /* Reserve PCI configuration space as well. */
                thunder_pem_reserve_range(dev, root->segment, &cfg->res);
        }