On Thursday 10 July 2014 09:03:26 Khiem Nguyen wrote:
> On 5/15/2014 7:40 PM, Laurent Pinchart wrote:
> > Cache the micro-TLB number in archdata allocated in the .add_device
> > handler instead of looking it up when the deviced is attached and
> > detached. This simplifies the .attach_dev and .detach_dev operations and
> > prepares for DT support.
> 
> [snip]
> 
> > Signed-off-by: Laurent Pinchart
> > <laurent.pinchart+rene...@ideasonboard.com>
> 
> [snip]
> 
> > +static int ipmmu_find_utlb(struct ipmmu_vmsa_device *mmu, struct device
> > *dev)
> > +{
> > +   const struct ipmmu_vmsa_master *master = mmu->pdata->masters;
> > +   const char *devname = dev_name(dev);
> > +   unsigned int i;
> > +
> > +   for (i = 0; i < mmu->pdata->num_masters; ++i, ++master) {
> > +           if (strcmp(master->name, devname) == 0)
> > +                   return master->utlb;
> > +   }
> > +
> > +   return -1;
> > +}
> 
> [snip]
> 
> >  static int ipmmu_add_device(struct device *dev)
> 
> [snip]
> 
> >     list_for_each_entry(mmu, &ipmmu_devices, list) {
> > -           master = ipmmu_find_master(mmu, dev);
> > -           if (master) {
> > +           utlb = ipmmu_find_utlb(mmu, dev);
> > +           if (utlb >= 0) {
> >                     /*
> > -                    * TODO Take a reference to the master to protect
> > +                    * TODO Take a reference to the MMU to protect
> >                      * against device removal.
> >                      */
> >                     break;
> 
> [snip]
> 
> > +   archdata->mmu = mmu;
> > +   archdata->utlb = utlb;
> 
> [snip]
> 
> I have one question for ipmmu_add_device().
> 
> In my understanding, your code will find utlb for device
> base on device name.
> For any device, it will /only/ return utlb number of first match.
> 
> How about the case that a device name connected with more than 1 utlb ?
> e.g DU device (rcar-du-r8a7790) in Lager
> 
> Was that case already covered in your code ?

For the DU case, the R8A7790 contains two DU devices, each connected to a 
single utlb. The IPMMU driver will thus work fine in that case.

I agree that this is a problem in general though, other devices (such as the 
DMAC) are connected to more than one utlb. This is currently not supported by 
the driver.

-- 
Regards,

Laurent Pinchart

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to