From: Haren Myneni <haren@linux.ibm.com>
To: linuxppc-dev@lists.ozlabs.org, linux-crypto@vger.kernel.org,
mpe@ellerman.id.au, herbert@gondor.apana.org.au,
npiggin@gmail.com
Subject: [V2 PATCH 15/16] crypto/nx: Get NX capabilities for GZIP coprocessor type
Date: Tue, 13 Apr 2021 01:30:07 -0700 [thread overview]
Message-ID: <1bb10e6566b6984448489f93b89686c0bb1fbe7f.camel@linux.ibm.com> (raw)
In-Reply-To: <68aa9f2860f9acffa41469d3858883c938634722.camel@linux.ibm.com>
phyp provides NX capabilities which gives recommended minimum
compression / decompression length and maximum request buffer size
in bytes.
Changes to get NX overall capabilities which points to the specific
features phyp supports. Then retrieve NXGZIP specific capabilities.
Signed-off-by: Haren Myneni <haren@linux.ibm.com>
---
drivers/crypto/nx/nx-common-pseries.c | 83 +++++++++++++++++++++++++++
1 file changed, 83 insertions(+)
diff --git a/drivers/crypto/nx/nx-common-pseries.c b/drivers/crypto/nx/nx-common-pseries.c
index 9a40fca8a9e6..49224870d05e 100644
--- a/drivers/crypto/nx/nx-common-pseries.c
+++ b/drivers/crypto/nx/nx-common-pseries.c
@@ -9,6 +9,7 @@
*/
#include <asm/vio.h>
+#include <asm/hvcall.h>
#include <asm/vas.h>
#include "nx-842.h"
@@ -20,6 +21,24 @@ MODULE_DESCRIPTION("842 H/W Compression driver for IBM Power processors");
MODULE_ALIAS_CRYPTO("842");
MODULE_ALIAS_CRYPTO("842-nx");
+struct nx_ct_capabs_be {
+ __be64 descriptor;
+ __be64 req_max_processed_len; /* Max bytes in one GZIP request */
+ __be64 min_compress_len; /* Min compression size in bytes */
+ __be64 min_decompress_len; /* Min decompression size in bytes */
+} __packed __aligned(0x1000);
+
+struct nx_ct_capabs {
+ char name[VAS_DESCR_LEN + 1];
+ u64 descriptor;
+ u64 req_max_processed_len; /* Max bytes in one GZIP request */
+ u64 min_compress_len; /* Min compression in bytes */
+ u64 min_decompress_len; /* Min decompression in bytes */
+};
+
+u64 capab_feat = 0;
+struct nx_ct_capabs nx_ct_capab;
+
static struct nx842_constraints nx842_pseries_constraints = {
.alignment = DDE_BUFFER_ALIGN,
.multiple = DDE_BUFFER_LAST_MULT,
@@ -1066,6 +1085,66 @@ static void nx842_remove(struct vio_dev *viodev)
kfree(old_devdata);
}
+/*
+ * Get NX capabilities from pHyp.
+ * Only NXGZIP capabilities are available right now and these values
+ * are available through sysfs.
+ */
+static void __init nxct_get_capabilities(void)
+{
+ struct vas_all_capabs_be *capabs_be;
+ struct nx_ct_capabs_be *nxc_be;
+ int rc;
+
+ capabs_be = kmalloc(sizeof(*capabs_be), GFP_KERNEL);
+ if (!capabs_be)
+ return;
+ /*
+ * Get NX overall capabilities with feature type=0
+ */
+ rc = plpar_vas_query_capabilities(H_QUERY_NX_CAPABILITIES, 0,
+ (u64)virt_to_phys(capabs_be));
+ if (rc)
+ goto out;
+
+ capab_feat = be64_to_cpu(capabs_be->feat_type);
+ /*
+ * NX-GZIP feature available
+ */
+ if (capab_feat & VAS_NX_GZIP_FEAT_BIT) {
+ nxc_be = kmalloc(sizeof(*nxc_be), GFP_KERNEL);
+ if (!nxc_be)
+ goto out;
+ /*
+ * Get capabilities for NX-GZIP feature
+ */
+ rc = plpar_vas_query_capabilities(H_QUERY_NX_CAPABILITIES,
+ VAS_NX_GZIP_FEAT,
+ (u64)virt_to_phys(nxc_be));
+ } else {
+ pr_err("NX-GZIP feature is not available\n");
+ rc = -EINVAL;
+ }
+
+ if (!rc) {
+ snprintf(nx_ct_capab.name, VAS_DESCR_LEN + 1, "%.8s",
+ (char *)&nxc_be->descriptor);
+ nx_ct_capab.descriptor = be64_to_cpu(nxc_be->descriptor);
+ nx_ct_capab.req_max_processed_len =
+ be64_to_cpu(nxc_be->req_max_processed_len);
+ nx_ct_capab.min_compress_len =
+ be64_to_cpu(nxc_be->min_compress_len);
+ nx_ct_capab.min_decompress_len =
+ be64_to_cpu(nxc_be->min_decompress_len);
+ } else {
+ capab_feat = 0;
+ }
+
+ kfree(nxc_be);
+out:
+ kfree(capabs_be);
+}
+
static const struct vio_device_id nx842_vio_driver_ids[] = {
{"ibm,compression-v1", "ibm,compression"},
{"", ""},
@@ -1093,6 +1172,10 @@ static int __init nx842_pseries_init(void)
return -ENOMEM;
RCU_INIT_POINTER(devdata, new_devdata);
+ /*
+ * Get NX capabilities from pHyp which is used for NX-GZIP.
+ */
+ nxct_get_capabilities();
ret = vio_register_driver(&nx842_vio_driver);
if (ret) {
--
2.18.2
next prev parent reply other threads:[~2021-04-13 8:30 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-13 8:16 [V2 PATCH 00/16] Enable VAS and NX-GZIP support on powerVM Haren Myneni
2021-04-13 8:19 ` [V2 PATCH 01/16] powerpc/powernv/vas: Rename register/unregister functions Haren Myneni
2021-04-13 8:19 ` [V2 PATCH 02/16] powerpc/vas: Make VAS API powerpc platform independent Haren Myneni
2021-04-13 8:20 ` [V2 PATCH 03/16] powerpc/vas: Create take/drop task reference functions Haren Myneni
2021-04-13 8:22 ` [V2 PATCH 04/16] powerpc/vas: Move update_csb and dump_crb to platform independent Haren Myneni
2021-04-13 8:23 ` [V2 PATCH 05/16] powerpc/vas: Define and use common vas_window struct Haren Myneni
2021-04-13 8:23 ` [V2 PATCH 06/16] powerpc/pseries/vas: Define VAS/NXGZIP HCALLs and structs Haren Myneni
2021-04-13 8:24 ` [V2 PATCH 07/16] powerpc/vas: Define QoS credit flag to allocate window Haren Myneni
2021-04-13 8:24 ` [V2 PATCH 08/16] powerpc/pseries/VAS: Implement allocate/modify/deallocate HCALLS Haren Myneni
2021-04-13 8:25 ` [V2 PATCH 09/16] powerpc/pseries/vas: Implement to get all capabilities Haren Myneni
2021-04-13 8:26 ` [V2 PATCH 10/16] powerpc/pseries/vas: Integrate API with open/close windows Haren Myneni
2021-04-13 8:26 ` [V2 PATCH 11/16] powerpc/pseries/vas: Setup IRQ and fault handling Haren Myneni
2021-04-13 8:28 ` [V2 PATCH 12/16] powerpc/pseries/vas: sysfs interface to export capabilities Haren Myneni
2021-04-13 8:28 ` [V2 PATCH 13/16] crypto/nx: Rename nx-842-pseries file name to nx-common-pseries Haren Myneni
2021-04-13 8:29 ` [V2 PATCH 14/16] crypto/nx: Register and unregister VAS interface Haren Myneni
2021-04-13 8:30 ` Haren Myneni [this message]
2021-04-13 8:30 ` [V2 PATCH 16/16] crypto/nx: Add sysfs interface to export NX capabilities Haren Myneni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1bb10e6566b6984448489f93b89686c0bb1fbe7f.camel@linux.ibm.com \
--to=haren@linux.ibm.com \
--cc=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=npiggin@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).