Re: [PATCH 4/4] firmware: tegra: use in-band messages for firmware version query

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 17/10/2018 07:37, Timo Alho wrote:
> Add support for a new MRQ, that uses in-band messaging instead of IOVA
> buffer, to retrieve the firmware version 'tag' during boot. If an
> older firmware is used, that does not support the new MRQ, fall back
> to the earlier implementation.
> 
> Signed-off-by: Timo Alho <talho@xxxxxxxxxx>
> ---
>  drivers/firmware/tegra/bpmp.c | 33 +++++++++++++++++++++++++++++++--
>  1 file changed, 31 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/firmware/tegra/bpmp.c b/drivers/firmware/tegra/bpmp.c
> index 5bb46a5..46f8141 100644
> --- a/drivers/firmware/tegra/bpmp.c
> +++ b/drivers/firmware/tegra/bpmp.c
> @@ -549,8 +549,9 @@ static int tegra_bpmp_ping(struct tegra_bpmp *bpmp)
>  	return err;
>  }
>  
> -static int tegra_bpmp_get_firmware_tag(struct tegra_bpmp *bpmp, char *tag,
> -				       size_t size)
> +/* deprecated version of tag query */
> +static int tegra_bpmp_get_firmware_tag_old(struct tegra_bpmp *bpmp, char *tag,
> +					   size_t size)
>  {
>  	struct mrq_query_tag_request request;
>  	struct tegra_bpmp_message msg;
> @@ -584,6 +585,34 @@ static int tegra_bpmp_get_firmware_tag(struct tegra_bpmp *bpmp, char *tag,
>  	return err;
>  }
>  
> +static int tegra_bpmp_get_firmware_tag(struct tegra_bpmp *bpmp, char *tag,
> +				       size_t size)
> +{
> +	struct mrq_query_fw_tag_response resp;
> +	struct tegra_bpmp_message msg = {
> +		.mrq = MRQ_QUERY_FW_TAG,
> +		.rx = {
> +			.data = &resp,
> +			.size = sizeof(resp),
> +		},
> +	};
> +	int err;
> +
> +	if (!tegra_bpmp_mrq_is_supported(bpmp, MRQ_QUERY_FW_TAG))
> +		return tegra_bpmp_get_firmware_tag_old(bpmp, tag, size);
> +
> +	err = tegra_bpmp_transfer(bpmp, &msg);
> +
> +	if (err)
> +		return err;
> +	if (msg.rx.ret < 0)
> +		return -EINVAL;
> +
> +	strlcpy(tag, &resp.tag[0], size);
> +
> +	return 0;
> +}
> +
>  static void tegra_bpmp_channel_signal(struct tegra_bpmp_channel *channel)
>  {
>  	unsigned long flags = channel->ob->flags;
> 

Acked-by: Jon Hunter <jonathanh@xxxxxxxxxx>

Cheers,
Jon

-- 
nvpublic



[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux