RE: [PATCH v1 6/6] rpmsg: virtio_rpmsg: set buffer configuration to virtio

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

 




> -----Original Message-----
> From: Suman Anna [mailto:s-anna@xxxxxx]
> Sent: Saturday, January 14, 2017 3:41 AM
> To: Loic PALLARDY <loic.pallardy@xxxxxx>; bjorn.andersson@xxxxxxxxxx;
> ohad@xxxxxxxxxx; lee.jones@xxxxxxxxxx; Patrice CHOTARD
> <patrice.chotard@xxxxxx>
> Cc: linux-remoteproc@xxxxxxxxxxxxxxx; kernel@xxxxxxxxxxx
> Subject: Re: [PATCH v1 6/6] rpmsg: virtio_rpmsg: set buffer configuration to
> virtio
> 
> On 12/07/2016 02:35 PM, Loic Pallardy wrote:
> > Rpmsg is allocating buffer one dedicated communication link with some
> > specificity like number of buffers, size of one buffer...
> > These characteristics should be shared with remote coprocessor to
> > guarantee communication link coherency.
> >
> > Proposal is to update rpmsg configuration fields in coprocessor
> > firmware resource table if it exists.
> >
> > This is possible thanks to virtio set interface which allows to update
> > cfg fields of struct fw_rsc_vdev.
> >
> > Signed-off-by: Loic Pallardy <loic.pallardy@xxxxxx>
> > ---
> >  drivers/rpmsg/virtio_rpmsg_bus.c | 25 +++++++++++++++++++++++++
> >  1 file changed, 25 insertions(+)
> >
> > diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c
> > b/drivers/rpmsg/virtio_rpmsg_bus.c
> > index b12fe2a..5527b65 100644
> > --- a/drivers/rpmsg/virtio_rpmsg_bus.c
> > +++ b/drivers/rpmsg/virtio_rpmsg_bus.c
> > @@ -924,6 +924,23 @@ static int virtio_rpmsg_get_config(struct
> > virtio_device *vdev)
> >
> >  }
> >
> > +static void virtio_rpmsg_set_config(struct virtio_device *vdev) {
> > +	struct virtio_rpmsg_cfg virtio_cfg;
> > +	struct virtproc_info *vrp = vdev->priv;
> > +
> > +	/* fill virtio_cfg struct */
> > +	memset(&virtio_cfg, 0, sizeof(virtio_cfg));
> > +	virtio_cfg.id = VIRTIO_ID_RPMSG;
> > +	virtio_cfg.da = vrp->bufs_dma;
> 
> Hmm, I would expect this to fail if the device was behind an IOMMU.
I think so. I think I did the same vring. I need to check.
Perhaps better to set virtio_cfg.da to ANY_ADDRESS (-1) and add a comment about adding IOMMU support.
What do you think?

Regards,
Loic
> 
> regards
> Suman
> 
> > +	virtio_cfg.pa =	vrp->bufs_dma;
> > +	virtio_cfg.len = vrp->num_bufs * vrp->buf_size;
> > +	virtio_cfg.buf_size = vrp->buf_size;
> > +
> > +	vdev->config->set(vdev, RPMSG_CONFIG_OFFSET, &virtio_cfg,
> > +			  sizeof(virtio_cfg));
> > +}
> > +
> >  static int rpmsg_probe(struct virtio_device *vdev)  {
> >  	vq_callback_t *vq_cbs[] = { rpmsg_recv_done, rpmsg_xmit_done };
> @@
> > -934,6 +951,7 @@ static int rpmsg_probe(struct virtio_device *vdev)
> >  	int err = 0, i;
> >  	size_t total_buf_space;
> >  	bool notify;
> > +	bool has_cfg = false;
> >
> >  	vrp = kzalloc(sizeof(*vrp), GFP_KERNEL);
> >  	if (!vrp)
> > @@ -973,6 +991,9 @@ static int rpmsg_probe(struct virtio_device *vdev)
> >  	if (err < 0)
> >  		goto free_vrp;
> >
> > +	if (err)
> > +		has_cfg = true;
> > +
> >  	/* Allocate buffer if none provided by low level platform driver */
> >  	if (!vrp->ext_buffer) {
> >  		total_buf_space = vrp->num_bufs * vrp->buf_size; @@ -
> 993,6 +1014,10
> > @@ static int rpmsg_probe(struct virtio_device *vdev)
> >
> >  		/* and half is dedicated for TX */
> >  		vrp->sbufs = bufs_va + total_buf_space / 2;
> > +
> > +		/* Notify configuration to coprocessor */
> > +		if (has_cfg)
> > +			virtio_rpmsg_set_config(vdev);
> >  	}
> >
> >  	/* set up the receive buffers */
> >

--
To unsubscribe from this list: send the line "unsubscribe linux-remoteproc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Photo Sharing]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux