{0x100, ADF_FW_ADMIN_OBJ},
 };
 
+static const struct adf_fw_config adf_fw_sym_config[] = {
+       {0xF0, ADF_FW_SYM_OBJ},
+       {0xF, ADF_FW_SYM_OBJ},
+       {0x100, ADF_FW_ADMIN_OBJ},
+};
+
+static const struct adf_fw_config adf_fw_asym_config[] = {
+       {0xF0, ADF_FW_ASYM_OBJ},
+       {0xF, ADF_FW_ASYM_OBJ},
+       {0x100, ADF_FW_ADMIN_OBJ},
+};
+
+static const struct adf_fw_config adf_fw_asym_dc_config[] = {
+       {0xF0, ADF_FW_ASYM_OBJ},
+       {0xF, ADF_FW_DC_OBJ},
+       {0x100, ADF_FW_ADMIN_OBJ},
+};
+
+static const struct adf_fw_config adf_fw_sym_dc_config[] = {
+       {0xF0, ADF_FW_SYM_OBJ},
+       {0xF, ADF_FW_DC_OBJ},
+       {0x100, ADF_FW_ADMIN_OBJ},
+};
+
 static_assert(ARRAY_SIZE(adf_fw_cy_config) == ARRAY_SIZE(adf_fw_dc_config));
+static_assert(ARRAY_SIZE(adf_fw_cy_config) == ARRAY_SIZE(adf_fw_sym_config));
+static_assert(ARRAY_SIZE(adf_fw_cy_config) == ARRAY_SIZE(adf_fw_asym_config));
+static_assert(ARRAY_SIZE(adf_fw_cy_config) == ARRAY_SIZE(adf_fw_asym_dc_config));
+static_assert(ARRAY_SIZE(adf_fw_cy_config) == ARRAY_SIZE(adf_fw_sym_dc_config));
 
 /* Worker thread to service arbiter mappings */
-static const u32 thrd_to_arb_map_cy[ADF_4XXX_MAX_ACCELENGINES] = {
+static const u32 default_thrd_to_arb_map[ADF_4XXX_MAX_ACCELENGINES] = {
        0x5555555, 0x5555555, 0x5555555, 0x5555555,
        0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA,
        0x0
 
 enum dev_services {
        SVC_CY = 0,
+       SVC_CY2,
        SVC_DC,
+       SVC_SYM,
+       SVC_ASYM,
+       SVC_DC_ASYM,
+       SVC_ASYM_DC,
+       SVC_DC_SYM,
+       SVC_SYM_DC,
 };
 
 static const char *const dev_cfg_services[] = {
        [SVC_CY] = ADF_CFG_CY,
+       [SVC_CY2] = ADF_CFG_ASYM_SYM,
        [SVC_DC] = ADF_CFG_DC,
+       [SVC_SYM] = ADF_CFG_SYM,
+       [SVC_ASYM] = ADF_CFG_ASYM,
+       [SVC_DC_ASYM] = ADF_CFG_DC_ASYM,
+       [SVC_ASYM_DC] = ADF_CFG_ASYM_DC,
+       [SVC_DC_SYM] = ADF_CFG_DC_SYM,
+       [SVC_SYM_DC] = ADF_CFG_SYM_DC,
 };
 
 static int get_service_enabled(struct adf_accel_dev *accel_dev)
 static u32 get_accel_cap(struct adf_accel_dev *accel_dev)
 {
        struct pci_dev *pdev = accel_dev->accel_pci_dev.pci_dev;
-       u32 capabilities_cy, capabilities_dc;
+       u32 capabilities_sym, capabilities_asym, capabilities_dc;
        u32 fusectl1;
 
        /* Read accelerator capabilities mask */
        pci_read_config_dword(pdev, ADF_4XXX_FUSECTL1_OFFSET, &fusectl1);
 
-       capabilities_cy = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC |
-                         ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC |
+       capabilities_sym = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC |
                          ICP_ACCEL_CAPABILITIES_CIPHER |
                          ICP_ACCEL_CAPABILITIES_AUTHENTICATION |
                          ICP_ACCEL_CAPABILITIES_SHA3 |
                          ICP_ACCEL_CAPABILITIES_SHA3_EXT |
                          ICP_ACCEL_CAPABILITIES_HKDF |
-                         ICP_ACCEL_CAPABILITIES_ECEDMONT |
                          ICP_ACCEL_CAPABILITIES_CHACHA_POLY |
                          ICP_ACCEL_CAPABILITIES_AESGCM_SPC |
                          ICP_ACCEL_CAPABILITIES_AES_V2;
 
        /* A set bit in fusectl1 means the feature is OFF in this SKU */
        if (fusectl1 & ICP_ACCEL_4XXX_MASK_CIPHER_SLICE) {
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC;
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_HKDF;
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
+               capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC;
+               capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_HKDF;
+               capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
        }
+
        if (fusectl1 & ICP_ACCEL_4XXX_MASK_UCS_SLICE) {
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CHACHA_POLY;
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AESGCM_SPC;
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AES_V2;
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
+               capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CHACHA_POLY;
+               capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_AESGCM_SPC;
+               capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_AES_V2;
+               capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
        }
+
        if (fusectl1 & ICP_ACCEL_4XXX_MASK_AUTH_SLICE) {
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AUTHENTICATION;
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_SHA3;
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_SHA3_EXT;
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
+               capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_AUTHENTICATION;
+               capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_SHA3;
+               capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_SHA3_EXT;
+               capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
        }
+
+       capabilities_asym = ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC |
+                         ICP_ACCEL_CAPABILITIES_CIPHER |
+                         ICP_ACCEL_CAPABILITIES_ECEDMONT;
+
        if (fusectl1 & ICP_ACCEL_4XXX_MASK_PKE_SLICE) {
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC;
-               capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_ECEDMONT;
+               capabilities_asym &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC;
+               capabilities_asym &= ~ICP_ACCEL_CAPABILITIES_ECEDMONT;
        }
 
        capabilities_dc = ICP_ACCEL_CAPABILITIES_COMPRESSION |
 
        switch (get_service_enabled(accel_dev)) {
        case SVC_CY:
-               return capabilities_cy;
+       case SVC_CY2:
+               return capabilities_sym | capabilities_asym;
        case SVC_DC:
                return capabilities_dc;
+       case SVC_SYM:
+               return capabilities_sym;
+       case SVC_ASYM:
+               return capabilities_asym;
+       case SVC_ASYM_DC:
+       case SVC_DC_ASYM:
+               return capabilities_asym | capabilities_dc;
+       case SVC_SYM_DC:
+       case SVC_DC_SYM:
+               return capabilities_sym | capabilities_dc;
        default:
                return 0;
        }
 static const u32 *adf_get_arbiter_mapping(struct adf_accel_dev *accel_dev)
 {
        switch (get_service_enabled(accel_dev)) {
-       case SVC_CY:
-               return thrd_to_arb_map_cy;
        case SVC_DC:
                return thrd_to_arb_map_dc;
        default:
-               return NULL;
+               return default_thrd_to_arb_map;
        }
 }
 
 
        switch (get_service_enabled(accel_dev)) {
        case SVC_CY:
+       case SVC_CY2:
                id = adf_fw_cy_config[obj_num].obj;
                break;
        case SVC_DC:
                id = adf_fw_dc_config[obj_num].obj;
                break;
+       case SVC_SYM:
+               id = adf_fw_sym_config[obj_num].obj;
+               break;
+       case SVC_ASYM:
+               id =  adf_fw_asym_config[obj_num].obj;
+               break;
+       case SVC_ASYM_DC:
+       case SVC_DC_ASYM:
+               id = adf_fw_asym_dc_config[obj_num].obj;
+               break;
+       case SVC_SYM_DC:
+       case SVC_DC_SYM:
+               id = adf_fw_sym_dc_config[obj_num].obj;
+               break;
        default:
                id = -EINVAL;
                break;
                return adf_fw_cy_config[obj_num].ae_mask;
        case SVC_DC:
                return adf_fw_dc_config[obj_num].ae_mask;
+       case SVC_CY2:
+               return adf_fw_cy_config[obj_num].ae_mask;
+       case SVC_SYM:
+               return adf_fw_sym_config[obj_num].ae_mask;
+       case SVC_ASYM:
+               return adf_fw_asym_config[obj_num].ae_mask;
+       case SVC_ASYM_DC:
+       case SVC_DC_ASYM:
+               return adf_fw_asym_dc_config[obj_num].ae_mask;
+       case SVC_SYM_DC:
+       case SVC_DC_SYM:
+               return adf_fw_sym_dc_config[obj_num].ae_mask;
        default:
                return 0;
        }