Commit 118dbccc authored by Shashank Gupta's avatar Shashank Gupta Committed by Herbert Xu

crypto: qat - fix apply custom thread-service mapping for dc service

The thread to arbiter mapping for 4xxx devices does not allow to
achieve optimal performance for the compression service as it makes
all the engines to compete for the same resources.

Update the logic so that a custom optimal mapping is used for the
compression service.
Signed-off-by: default avatarShashank Gupta <shashank.gupta@intel.com>
Reviewed-by: default avatarGiovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent a3e8c919
...@@ -41,12 +41,18 @@ static struct adf_fw_config adf_402xx_fw_dc_config[] = { ...@@ -41,12 +41,18 @@ static struct adf_fw_config adf_402xx_fw_dc_config[] = {
}; };
/* Worker thread to service arbiter mappings */ /* Worker thread to service arbiter mappings */
static const u32 thrd_to_arb_map[ADF_4XXX_MAX_ACCELENGINES] = { static const u32 thrd_to_arb_map_cy[ADF_4XXX_MAX_ACCELENGINES] = {
0x5555555, 0x5555555, 0x5555555, 0x5555555, 0x5555555, 0x5555555, 0x5555555, 0x5555555,
0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA,
0x0 0x0
}; };
static const u32 thrd_to_arb_map_dc[ADF_4XXX_MAX_ACCELENGINES] = {
0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF,
0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF,
0x0
};
static struct adf_hw_device_class adf_4xxx_class = { static struct adf_hw_device_class adf_4xxx_class = {
.name = ADF_4XXX_DEVICE_NAME, .name = ADF_4XXX_DEVICE_NAME,
.type = DEV_4XXX, .type = DEV_4XXX,
...@@ -218,9 +224,16 @@ static enum dev_sku_info get_sku(struct adf_hw_device_data *self) ...@@ -218,9 +224,16 @@ static enum dev_sku_info get_sku(struct adf_hw_device_data *self)
return DEV_SKU_1; return DEV_SKU_1;
} }
static const u32 *adf_get_arbiter_mapping(void) static const u32 *adf_get_arbiter_mapping(struct adf_accel_dev *accel_dev)
{ {
return thrd_to_arb_map; switch (get_service_enabled(accel_dev)) {
case SVC_CY:
return thrd_to_arb_map_cy;
case SVC_DC:
return thrd_to_arb_map_dc;
}
return NULL;
} }
static void get_arb_info(struct arb_info *arb_info) static void get_arb_info(struct arb_info *arb_info)
......
...@@ -75,7 +75,7 @@ static enum dev_sku_info get_sku(struct adf_hw_device_data *self) ...@@ -75,7 +75,7 @@ static enum dev_sku_info get_sku(struct adf_hw_device_data *self)
return DEV_SKU_UNKNOWN; return DEV_SKU_UNKNOWN;
} }
static const u32 *adf_get_arbiter_mapping(void) static const u32 *adf_get_arbiter_mapping(struct adf_accel_dev *accel_dev)
{ {
return thrd_to_arb_map; return thrd_to_arb_map;
} }
......
...@@ -77,7 +77,7 @@ static enum dev_sku_info get_sku(struct adf_hw_device_data *self) ...@@ -77,7 +77,7 @@ static enum dev_sku_info get_sku(struct adf_hw_device_data *self)
return DEV_SKU_UNKNOWN; return DEV_SKU_UNKNOWN;
} }
static const u32 *adf_get_arbiter_mapping(void) static const u32 *adf_get_arbiter_mapping(struct adf_accel_dev *accel_dev)
{ {
return thrd_to_arb_map; return thrd_to_arb_map;
} }
......
...@@ -190,7 +190,7 @@ struct adf_hw_device_data { ...@@ -190,7 +190,7 @@ struct adf_hw_device_data {
int (*send_admin_init)(struct adf_accel_dev *accel_dev); int (*send_admin_init)(struct adf_accel_dev *accel_dev);
int (*init_arb)(struct adf_accel_dev *accel_dev); int (*init_arb)(struct adf_accel_dev *accel_dev);
void (*exit_arb)(struct adf_accel_dev *accel_dev); void (*exit_arb)(struct adf_accel_dev *accel_dev);
const u32 *(*get_arb_mapping)(void); const u32 *(*get_arb_mapping)(struct adf_accel_dev *accel_dev);
int (*init_device)(struct adf_accel_dev *accel_dev); int (*init_device)(struct adf_accel_dev *accel_dev);
int (*enable_pm)(struct adf_accel_dev *accel_dev); int (*enable_pm)(struct adf_accel_dev *accel_dev);
bool (*handle_pm_interrupt)(struct adf_accel_dev *accel_dev); bool (*handle_pm_interrupt)(struct adf_accel_dev *accel_dev);
......
...@@ -36,7 +36,7 @@ int adf_init_arb(struct adf_accel_dev *accel_dev) ...@@ -36,7 +36,7 @@ int adf_init_arb(struct adf_accel_dev *accel_dev)
WRITE_CSR_ARB_SARCONFIG(csr, arb_off, arb, arb_cfg); WRITE_CSR_ARB_SARCONFIG(csr, arb_off, arb, arb_cfg);
/* Map worker threads to service arbiters */ /* Map worker threads to service arbiters */
thd_2_arb_cfg = hw_data->get_arb_mapping(); thd_2_arb_cfg = hw_data->get_arb_mapping(accel_dev);
for_each_set_bit(i, &ae_mask, hw_data->num_engines) for_each_set_bit(i, &ae_mask, hw_data->num_engines)
WRITE_CSR_ARB_WT2SAM(csr, arb_off, wt_off, i, thd_2_arb_cfg[i]); WRITE_CSR_ARB_WT2SAM(csr, arb_off, wt_off, i, thd_2_arb_cfg[i]);
......
...@@ -106,7 +106,7 @@ static enum dev_sku_info get_sku(struct adf_hw_device_data *self) ...@@ -106,7 +106,7 @@ static enum dev_sku_info get_sku(struct adf_hw_device_data *self)
return DEV_SKU_UNKNOWN; return DEV_SKU_UNKNOWN;
} }
static const u32 *adf_get_arbiter_mapping(void) static const u32 *adf_get_arbiter_mapping(struct adf_accel_dev *accel_dev)
{ {
return thrd_to_arb_map; return thrd_to_arb_map;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment