Hi Laurent,

On 7/10/2014 7:37 PM, Laurent Pinchart wrote:
> 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
>>> <[email protected]>
>>
>> [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.

As my understanding, in board-lager-reference.c,
DU devices are registered with 1 device name "rcar-du-r8a7790".

I also added some logs in ipmmu_add_device() to observe
the mapping between device name and utlb number.
And I saw that only one utlb is mapped with DU.

Do I miss anything here ?

> 
> 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.
> 
Thanks for your confirmation.
I guess the driver will be improved in near future.

-- 
Best regards,
KHIEM Nguyen
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to