mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Gupta, Nipun" <nipun.gupta@amd.com>
To: Greg KH <gregkh@linuxfoundation.org>
Cc: linux-kernel@vger.kernel.org, robh@kernel.org,
	krzk+dt@kernel.org, conor+dt@kernel.org, derek.kiernan@amd.com,
	dragan.cvetic@amd.com, arnd@arndb.de, praveen.jain@amd.com,
	harpreet.anand@amd.com, nikhil.agarwal@amd.com,
	srivatsa@csail.mit.edu, code@tyhicks.com,
	ptsm@linux.microsoft.com
Subject: Re: [RFC PATCH 1/2] drivers/misc: add silex multipk driver
Date: Thu, 13 Mar 2025 14:46:11 +0530	[thread overview]
Message-ID: <b43b6051-238b-207f-f0c5-3071950c1a0f@amd.com> (raw)
In-Reply-To: <2025031256-accurate-tactics-1ff7@gregkh>



On 12-03-2025 15:48, Greg KH wrote:
> On Wed, Mar 12, 2025 at 03:24:20PM +0530, Nipun Gupta wrote:
>> Silex MultiPK device provides a char device interface to interact
>> with Silex device for offloading asymmetric crypto operations.
>>
>> Signed-off-by: Nipun Gupta <nipun.gupta@amd.com>
>> ---
>>
>> Silex MultiPK device is a PKI offload device, which has multiple PK engines to
>> perform asymmetric crypto operations like ECDSA, RSA, Point Multiplication etc.
>>
>> Following provides the brief overview of the device interface with the software:
>>
>>   +------------------+
>>   |    Software      |
>>   +------------------+
>>       |          |
>>       |          v
>>       |     +-----------------------------------------------------------+
>>       |     |                     RAM                                   |
>>       |     |  +----------------------------+   +---------------------+ |
>>       |     |  |           RQ pages         |   |       CQ pages      | |
>>       |     |  | +------------------------+ |   | +-----------------+ | |
>>       |     |  | |   START (cmd)          | |   | | req_id | status | | |
>>       |     |  | |   TFRI (addr, sz)---+  | |   | | req_id | status | | |
>>       |     |  | | +-TFRO (addr, sz)   |  | |   | | ...             | | |
>>       |     |  | | | NTFY (req_id)     |  | |   | +-----------------+ | |
>>       |     |  | +-|-------------------|--+ |   |                     | |
>>       |     |  |   |                   v    |   +---------------------+ |
>>       |     |  |   |         +-----------+  |                           |
>>       |     |  |   |         | input     |  |                           |
>>       |     |  |   |         | data      |  |                           |
>>       |     |  |   v         +-----------+  |                           |
>>       |     |  |  +----------------+        |                           |
>>       |     |  |  |  output data   |        |                           |
>>       |     |  |  +----------------+        |                           |
>>       |     |  +----------------------------+                           |
>>       |     |                                                           |
>>       |     +-----------------------------------------------------------+
>>       |
>>       |
>>   +---|----------------------------------------------------+
>>   |   v                Silex MultiPK device                |
>>   |  +-------------------+     +------------------------+  |
>>   |  | New request FIFO  | --> |       PK engines       |  |
>>   |  +-------------------+     +------------------------+  |
>>   +--------------------------------------------------------+
>>
>> To perform a crypto operation, the software writes a sequence of descriptors,
>> into the RQ memory. This includes input data and designated location for the
>> output data. After preparing the request, request offset (from the RQ memory
>> region) is written into the NEW_REQUEST register. Request is then stored in a
>> common hardware FIFO shared among all RQs. When a PK engine becomes available,
>> device pops the request from the FIFO and fetches the descriptors. It DMAs the
>> input data from RQ memory and executes the necessary computations. After
>> computation is complete, the device writes output data back to RAM via DMA.
>> Device then writes a new entry in CQ ring buffer in RAM, indicating completion
>> of the request. Device also generates an interrupt for notifying completion to
>> the software.
>>
>> As Crypto AF_ALG does not support offloading asymmetric operations from
>> user-space (which was attempted to be added earlier in Linux at:
>> https://lore.kernel.org/all/146672253157.23101.15291203749122389409.stgit@tstruk-mobl1.ra.intel.com/),
>> RQ memory is provided to the user-space via mmap, so that application can
>> directly write to the descriptors.
>>
>> P.S. Most of the above text is also added as part of silex driver file.
> 
> All of that should be in the changelog text, don't put it down here
> where it will never be seen again.

Sure will add it in the change log.

> 
>> +static ssize_t hardware_show(struct device *dev, struct device_attribute *attr,
>> +			     char *buf)
>> +{
> 
> Where is the Documentation/ABI/ entries for your new sysfs files?

Yes, will add documentation for ABI entry/ies

> 
>> +	int v, hwv, cnt, maxtotalreqs, rqmaxpending, mults;
>> +	struct multipk_dev *mpkdev = dev_get_drvdata(dev);
>> +
>> +	v = (int)sx_rdreg(mpkdev->regs, REG_SEMVER);
>> +	hwv = (int)sx_rdreg(mpkdev->regs, REG_HW_VERSION);
>> +	cnt = (int)sx_rdreg(mpkdev->regs, REQ_CFG_REQ_QUEUES_CNT);
>> +	maxtotalreqs = (int)sx_rdreg(mpkdev->regs, REQ_CFG_MAX_PENDING_REQ);
>> +	rqmaxpending = (int)sx_rdreg(mpkdev->regs, REQ_CFG_MAX_REQ_QUEUE_ENTRIES);
>> +	mults = (int)sx_rdreg(mpkdev->regs, REQ_CFG_PK_INST);
>> +
>> +	return sprintf(buf,
>> +		"Hardware interface version: %d.%d.%d\n"
>> +		"Hardware implementation version: %d.%d.%d\n"
>> +		"Count request queues: %d\n"
>> +		"Total max pending requests: %d\n"
>> +		"Max pending requests per request queue: %d\n"
>> +		"Pkcores 64 multipliers: %d\n"
>> +		"Pkcores 256 multipliers: %d\n",
>> +		MPK_SEMVER_MAJOR(v), MPK_SEMVER_MINOR(v), MPK_SEMVER_PATCH(v),
>> +		MPK_HWVER_MAJOR(hwv), MPK_HWVER_MINOR(hwv), MPK_HWVER_SVN(hwv),
>> +		cnt, maxtotalreqs, rqmaxpending,
>> +		mults >> 16, mults & 0xFFFF);
> 
> No!
> 
> sysfs is "one value per file", which this is not at all.

Will create separate entries for each.

> 
> Also, did you run checkpatch.pl?  It should have told you that you
> should not be calling sprintf() here either.

I did run checkpatch on patches (as well as separate files), but it did
not report it. Will use seq_printf instead.

> 
>> +static int __init multipk_init(void)
>> +{
>> +	dev_t devt;
>> +	int ret;
>> +
>> +	multipk_class = class_create("multipk");
> 
> Why do you need a whole new class?  Why not just use a misc device?

We will update to use misc device instead of creating new class.

> 
>> +	if (IS_ERR(multipk_class)) {
>> +		ret = PTR_ERR(multipk_class);
>> +		pr_err("can't register class\n");
>> +		goto err;
>> +	}
>> +	ret = alloc_chrdev_region(&devt, 0, MULTIPK_MAX_DEVICES, "multipk");
> 
> Again, why not a dynamic misc device per device in the system?
> 
> No need to make this harder than it is.
> 
> But again, this really should use the in-kernel apis we already have for
> this type of hardware, don't make a custom user/kernel api at all.
> That's not going to scale or be easy to maintain for any amount of time.

Agree to some extent, but as Crypto AF_ALG does not support offloading 
asymmetric operations, we added this driver as misc driver. This device 
is supported in AMD Versal series devices: 
https://www.amd.com/en/products/adaptive-socs-and-fpgas/versal/premium-series.html. 
We would maintain the driver with minimal possible user interface changes.

Thanks,
Nipun

> 
> thanks,
> 
> greg k-h

  reply	other threads:[~2025-03-13  9:16 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-12  9:54 Nipun Gupta
2025-03-12  9:54 ` [RFC PATCH 2/2] dt-bindings: add device tree binding for silex multipk Nipun Gupta
2025-03-12 10:51   ` Krzysztof Kozlowski
2025-03-13  9:25     ` Gupta, Nipun
2025-03-13  9:38       ` Krzysztof Kozlowski
2025-03-13  9:43       ` Greg KH
2025-03-12 10:15 ` [RFC PATCH 1/2] drivers/misc: add silex multipk driver Greg KH
2025-03-12 10:18 ` Greg KH
2025-03-13  9:16   ` Gupta, Nipun [this message]
2025-03-13  9:41     ` Greg KH
2025-03-12 10:54 ` Krzysztof Kozlowski
2025-03-13  9:37   ` Gupta, Nipun

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=b43b6051-238b-207f-f0c5-3071950c1a0f@amd.com \
    --to=nipun.gupta@amd.com \
    --cc=arnd@arndb.de \
    --cc=code@tyhicks.com \
    --cc=conor+dt@kernel.org \
    --cc=derek.kiernan@amd.com \
    --cc=dragan.cvetic@amd.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=harpreet.anand@amd.com \
    --cc=krzk+dt@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nikhil.agarwal@amd.com \
    --cc=praveen.jain@amd.com \
    --cc=ptsm@linux.microsoft.com \
    --cc=robh@kernel.org \
    --cc=srivatsa@csail.mit.edu \
    /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

all inboxes | Powered by JetHome®