On Wed, Oct 17, 2018 at 09:37:30AM +0300, 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); I suspect that we are now printing only the first 30 bytes of the tag string (against the actual 32). Fix that too (in a separate patch)? > + > + return 0; > +} > + > static void tegra_bpmp_channel_signal(struct tegra_bpmp_channel *channel) > { > unsigned long flags = channel->ob->flags; > -- > 2.7.4 >