crypto/nx: Enable and setup GZIP compression type
Changes to probe GZIP device-tree nodes, open RX windows and setup GZIP compression type. No plans to provide GZIP usage in kernel right now, but this patch enables GZIP for user space usage. Signed-off-by: Haren Myneni <haren@linux.ibm.com> Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/1587114624.2275.1129.camel@hbabu-laptop
This commit is contained in:
parent
4aebf3ce26
commit
1af11ae225
|
@ -65,6 +65,7 @@ static unsigned int nx842_ct; /* used in icswx function */
|
|||
* Using same values as in skiboot or coprocessor type representing
|
||||
* in NX workbook.
|
||||
*/
|
||||
#define NX_CT_GZIP (2) /* on P9 and later */
|
||||
#define NX_CT_842 (3)
|
||||
|
||||
static int (*nx842_powernv_exec)(const unsigned char *in,
|
||||
|
@ -819,6 +820,9 @@ static int __init vas_cfg_coproc_info(struct device_node *dn, int chip_id,
|
|||
if (type == NX_CT_842)
|
||||
ret = nx_set_ct(coproc, priority, VAS_COP_TYPE_842_HIPRI,
|
||||
VAS_COP_TYPE_842);
|
||||
else if (type == NX_CT_GZIP)
|
||||
ret = nx_set_ct(coproc, priority, VAS_COP_TYPE_GZIP_HIPRI,
|
||||
VAS_COP_TYPE_GZIP);
|
||||
|
||||
if (ret)
|
||||
goto err_out;
|
||||
|
@ -867,12 +871,16 @@ err_out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int __init nx_coproc_init(int chip_id, int ct_842)
|
||||
static int __init nx_coproc_init(int chip_id, int ct_842, int ct_gzip)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (opal_check_token(OPAL_NX_COPROC_INIT)) {
|
||||
ret = opal_nx_coproc_init(chip_id, ct_842);
|
||||
|
||||
if (!ret)
|
||||
ret = opal_nx_coproc_init(chip_id, ct_gzip);
|
||||
|
||||
if (ret) {
|
||||
ret = opal_error_code(ret);
|
||||
pr_err("Failed to initialize NX for chip(%d): %d\n",
|
||||
|
@ -902,8 +910,8 @@ static int __init find_nx_device_tree(struct device_node *dn, int chip_id,
|
|||
static int __init nx_powernv_probe_vas(struct device_node *pn)
|
||||
{
|
||||
int chip_id, vasid, ret = 0;
|
||||
int ct_842 = 0, ct_gzip = 0;
|
||||
struct device_node *dn;
|
||||
int ct_842 = 0;
|
||||
|
||||
chip_id = of_get_ibm_chip_id(pn);
|
||||
if (chip_id < 0) {
|
||||
|
@ -920,19 +928,24 @@ static int __init nx_powernv_probe_vas(struct device_node *pn)
|
|||
for_each_child_of_node(pn, dn) {
|
||||
ret = find_nx_device_tree(dn, chip_id, vasid, NX_CT_842,
|
||||
"ibm,p9-nx-842", &ct_842);
|
||||
|
||||
if (!ret)
|
||||
ret = find_nx_device_tree(dn, chip_id, vasid,
|
||||
NX_CT_GZIP, "ibm,p9-nx-gzip", &ct_gzip);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!ct_842) {
|
||||
pr_err("NX842 FIFO nodes are missing\n");
|
||||
if (!ct_842 || !ct_gzip) {
|
||||
pr_err("NX FIFO nodes are missing\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize NX instance for both high and normal priority FIFOs.
|
||||
*/
|
||||
ret = nx_coproc_init(chip_id, ct_842);
|
||||
ret = nx_coproc_init(chip_id, ct_842, ct_gzip);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1071,11 +1084,23 @@ static __init int nx_compress_powernv_init(void)
|
|||
|
||||
nx842_powernv_exec = nx842_exec_icswx;
|
||||
} else {
|
||||
/*
|
||||
* Register VAS user space API for NX GZIP so
|
||||
* that user space can use GZIP engine.
|
||||
* Using high FIFO priority for kernel requests and
|
||||
* normal FIFO priority is assigned for userspace.
|
||||
* 842 compression is supported only in kernel.
|
||||
*/
|
||||
ret = vas_register_coproc_api(THIS_MODULE, VAS_COP_TYPE_GZIP,
|
||||
"nx-gzip");
|
||||
|
||||
/*
|
||||
* GZIP is not supported in kernel right now.
|
||||
* So open tx windows only for 842.
|
||||
*/
|
||||
ret = nx_open_percpu_txwins();
|
||||
if (!ret)
|
||||
ret = nx_open_percpu_txwins();
|
||||
|
||||
if (ret) {
|
||||
nx_delete_coprocs();
|
||||
return ret;
|
||||
|
@ -1096,6 +1121,15 @@ module_init(nx_compress_powernv_init);
|
|||
|
||||
static void __exit nx_compress_powernv_exit(void)
|
||||
{
|
||||
/*
|
||||
* GZIP engine is supported only in power9 or later and nx842_ct
|
||||
* is used on power8 (icswx).
|
||||
* VAS API for NX GZIP is registered during init for user space
|
||||
* use. So delete this API use for GZIP engine.
|
||||
*/
|
||||
if (!nx842_ct)
|
||||
vas_unregister_coproc_api();
|
||||
|
||||
crypto_unregister_alg(&nx842_powernv_alg);
|
||||
|
||||
nx_delete_coprocs();
|
||||
|
|
Loading…
Reference in New Issue