All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Gong <richard.gong@linux.intel.com>
To: Moritz Fischer <mdf@kernel.org>
Cc: trix@redhat.com, gregkh@linuxfoundation.org,
	linux-fpga@vger.kernel.org, linux-kernel@vger.kernel.org,
	dinguyen@kernel.org, sridhar.rajagopal@intel.com,
	Richard Gong <richard.gong@intel.com>
Subject: Re: [PATCHv3 6/6] fpga: stratix10-soc: extend driver for bitstream authentication
Date: Tue, 26 Jan 2021 08:00:46 -0600	[thread overview]
Message-ID: <eb20a836-a6df-fb5f-f73d-74f1a7fb77dd@linux.intel.com> (raw)
In-Reply-To: <YA+kDJ4gd1VIxQqE@epycbox.lan>

Hi Moritz,

On 1/25/21 11:09 PM, Moritz Fischer wrote:
> On Mon, Jan 25, 2021 at 02:56:28PM -0600, richard.gong@linux.intel.com wrote:
>> From: Richard Gong <richard.gong@intel.com>
>>
>> Extend FPGA manager driver to support FPGA bitstream authentication on
>> Intel SocFPGA platforms.
>>
>> Signed-off-by: Richard Gong <richard.gong@intel.com>
>> ---
>> v3: add handle to retriev the firmware version to keep driver
>>      back compatible
>> v2: use flag defined in stratix10-svc driver
>> ---
>>   drivers/fpga/stratix10-soc.c | 62 +++++++++++++++++++++++++++++++++++++++-----
>>   1 file changed, 56 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/fpga/stratix10-soc.c b/drivers/fpga/stratix10-soc.c
>> index 657a70c..59d738c 100644
>> --- a/drivers/fpga/stratix10-soc.c
>> +++ b/drivers/fpga/stratix10-soc.c
>> @@ -24,6 +24,10 @@
>>   #define S10_BUFFER_TIMEOUT (msecs_to_jiffies(SVC_RECONFIG_BUFFER_TIMEOUT_MS))
>>   #define S10_RECONFIG_TIMEOUT (msecs_to_jiffies(SVC_RECONFIG_REQUEST_TIMEOUT_MS))
>>   
>> +#define INVALID_FIRMWARE_VERSION	0xFFFF
>> +typedef void (*s10_callback)(struct stratix10_svc_client *client,
>> +			     struct stratix10_svc_cb_data *data);
>> +
>>   /*
>>    * struct s10_svc_buf
>>    * buf:  virtual address of buf provided by service layer
>> @@ -40,11 +44,13 @@ struct s10_priv {
>>   	struct completion status_return_completion;
>>   	struct s10_svc_buf svc_bufs[NUM_SVC_BUFS];
>>   	unsigned long status;
>> +	unsigned int fw_version;
>>   };
>>   
>>   static int s10_svc_send_msg(struct s10_priv *priv,
>>   			    enum stratix10_svc_command_code command,
>> -			    void *payload, u32 payload_length)
>> +			    void *payload, u32 payload_length,
>> +			    s10_callback callback)
>>   {
>>   	struct stratix10_svc_chan *chan = priv->chan;
>>   	struct device *dev = priv->client.dev;
>> @@ -57,6 +63,7 @@ static int s10_svc_send_msg(struct s10_priv *priv,
>>   	msg.command = command;
>>   	msg.payload = payload;
>>   	msg.payload_length = payload_length;
>> +	priv->client.receive_cb = callback;
>>   
>>   	ret = stratix10_svc_send(chan, &msg);
>>   	dev_dbg(dev, "stratix10_svc_send returned status %d\n", ret);
>> @@ -134,6 +141,29 @@ static void s10_unlock_bufs(struct s10_priv *priv, void *kaddr)
>>   }
>>   
>>   /*
>> + * s10_fw_version_callback - callback for the version of running firmware
>> + * @client: service layer client struct
>> + * @data: message from service layer
>> + */
>> +static void s10_fw_version_callback(struct stratix10_svc_client *client,
>> +				    struct stratix10_svc_cb_data *data)
>> +{
>> +	struct s10_priv *priv = client->priv;
>> +	unsigned int *version = (unsigned int *)data->kaddr1;
>> +
>> +	if (data->status == BIT(SVC_STATUS_OK))
>> +		priv->fw_version = *version;
>> +	else if (data->status == BIT(SVC_STATUS_NO_SUPPORT))
>> +		dev_warn(client->dev,
>> +			 "FW doesn't support bitstream authentication\n");
>> +	else
>> +		dev_err(client->dev, "Failed to get FW version %lu\n",
>> +			BIT(data->status));
>> +
>> +	complete(&priv->status_return_completion);
>> +}
>> +
>> +/*
>>    * s10_receive_callback - callback for service layer to use to provide client
>>    * (this driver) messages received through the mailbox.
>>    * client: service layer client struct
>> @@ -186,13 +216,22 @@ static int s10_ops_write_init(struct fpga_manager *mgr,
>>   	if (info->flags & FPGA_MGR_PARTIAL_RECONFIG) {
>>   		dev_dbg(dev, "Requesting partial reconfiguration.\n");
>>   		ctype.flags |= BIT(COMMAND_RECONFIG_FLAG_PARTIAL);
>> +	} else if (info->flags & FPGA_MGR_BITSTREM_AUTHENTICATION) {
> BITSTREAM ;-)
> 
> Nit: Maybe the flag could be FPGA_MGR_BITSTREAM_AUTHENTICATE and/or
> FPGA_MGR_BITSTREAM_AUTH_AND_PERSIST.

Thanks, I will correct both in next submission.

>> +		if (priv->fw_version == INVALID_FIRMWARE_VERSION) {
>> +			dev_err(dev, "FW doesn't support\n");
>> +			return -EINVAL;
>> +		}
>> +
>> +		dev_dbg(dev, "Requesting bitstream authentication.\n");
>> +		ctype.flags |= BIT(COMMAND_AUTHENTICATE_BITSTREAM);
>>   	} else {
>>   		dev_dbg(dev, "Requesting full reconfiguration.\n");
>>   	}
>>   
>>   	reinit_completion(&priv->status_return_completion);
>>   	ret = s10_svc_send_msg(priv, COMMAND_RECONFIG,
>> -			       &ctype, sizeof(ctype));
>> +			       &ctype, sizeof(ctype),
>> +			       s10_receive_callback);
>>   	if (ret < 0)
>>   		goto init_done;
>>   
>> @@ -259,7 +298,7 @@ static int s10_send_buf(struct fpga_manager *mgr, const char *buf, size_t count)
>>   	svc_buf = priv->svc_bufs[i].buf;
>>   	memcpy(svc_buf, buf, xfer_sz);
>>   	ret = s10_svc_send_msg(priv, COMMAND_RECONFIG_DATA_SUBMIT,
>> -			       svc_buf, xfer_sz);
>> +			       svc_buf, xfer_sz, s10_receive_callback);
>>   	if (ret < 0) {
>>   		dev_err(dev,
>>   			"Error while sending data to service layer (%d)", ret);
>> @@ -303,7 +342,7 @@ static int s10_ops_write(struct fpga_manager *mgr, const char *buf,
>>   
>>   			ret = s10_svc_send_msg(
>>   				priv, COMMAND_RECONFIG_DATA_CLAIM,
>> -				NULL, 0);
>> +				NULL, 0, s10_receive_callback);
>>   			if (ret < 0)
>>   				break;
>>   		}
>> @@ -357,7 +396,8 @@ static int s10_ops_write_complete(struct fpga_manager *mgr,
>>   	do {
>>   		reinit_completion(&priv->status_return_completion);
>>   
>> -		ret = s10_svc_send_msg(priv, COMMAND_RECONFIG_STATUS, NULL, 0);
>> +		ret = s10_svc_send_msg(priv, COMMAND_RECONFIG_STATUS,
>> +				       NULL, 0, s10_receive_callback);
>>   		if (ret < 0)
>>   			break;
>>   
>> @@ -411,8 +451,9 @@ static int s10_probe(struct platform_device *pdev)
>>   	if (!priv)
>>   		return -ENOMEM;
>>   
>> +	priv->fw_version = INVALID_FIRMWARE_VERSION;
>>   	priv->client.dev = dev;
>> -	priv->client.receive_cb = s10_receive_callback;
>> +	priv->client.receive_cb = NULL;
>>   	priv->client.priv = priv;
>>   
>>   	priv->chan = stratix10_svc_request_channel_byname(&priv->client,
>> @@ -440,6 +481,15 @@ static int s10_probe(struct platform_device *pdev)
>>   		goto probe_err;
>>   	}
>>   
>> +	/* get the running firmware version */
>> +	ret = s10_svc_send_msg(priv, COMMAND_FIRMWARE_VERSION,
>> +			       NULL, 0, s10_fw_version_callback);
>> +	if (ret) {
>> +		dev_err(dev, "couldn't get firmware version\n");
>> +		fpga_mgr_free(mgr);
>> +		goto probe_err;
>> +	}
>> +
>>   	platform_set_drvdata(pdev, mgr);
>>   	return ret;
>>   
>> -- 
>> 2.7.4
>>
> Thanks,
> Moritz
> 
Regards,
Richard

      reply	other threads:[~2021-01-26 14:17 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-25 20:56 [PATCHv3 0/6] [PATCHv3 0/6] Extend Intel service layer, FPGA manager and region richard.gong
2021-01-25 20:56 ` [PATCHv3 1/6] firmware: stratix10-svc: add COMMAND_AUTHENTICATE_BITSTREAM flag richard.gong
2021-01-25 22:56   ` Tom Rix
2021-01-26  2:16     ` Richard Gong
2021-01-27 12:04   ` Greg KH
2021-01-27 13:05     ` Richard Gong
2021-01-27 21:41       ` Moritz Fischer
2021-01-27 23:02         ` Richard Gong
2021-01-25 20:56 ` [PATCHv3 2/6] firmware: stratix10-svc: extend SVC driver to get the firmware version richard.gong
2021-01-26  5:01   ` Moritz Fischer
2021-01-26 13:37     ` Richard Gong
2021-01-25 20:56 ` [PATCHv3 3/6] fpga: fpga-mgr: add FPGA_MGR_BITSTREM_AUTHENTICATION flag richard.gong
2021-01-26  5:04   ` Moritz Fischer
2021-01-26 13:38     ` Richard Gong
2021-01-25 20:56 ` [PATCHv3 4/6] fpga: of-fpga-region: add authenticate-fpga-config property richard.gong
2021-01-26  5:10   ` Moritz Fischer
2021-01-26 14:03     ` Richard Gong
2021-01-25 20:56 ` [PATCHv3 5/6] dt-bindings: fpga: " richard.gong
2021-01-26  5:05   ` Moritz Fischer
2021-01-26 13:58     ` Richard Gong
2021-01-25 20:56 ` [PATCHv3 6/6] fpga: stratix10-soc: extend driver for bitstream authentication richard.gong
2021-01-26  5:09   ` Moritz Fischer
2021-01-26 14:00     ` Richard Gong [this message]

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=eb20a836-a6df-fb5f-f73d-74f1a7fb77dd@linux.intel.com \
    --to=richard.gong@linux.intel.com \
    --cc=dinguyen@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-fpga@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mdf@kernel.org \
    --cc=richard.gong@intel.com \
    --cc=sridhar.rajagopal@intel.com \
    --cc=trix@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.