Hi Robin, Will,

On Wed, Nov 04, 2015 at 03:31:55PM +0000, Robin Murphy wrote:
>On 04/11/15 14:43, Will Deacon wrote:
>>On Wed, Nov 04, 2015 at 09:44:40PM +0800, Peng Fan wrote:
>>>Hi Will,
>>
>>Hello,
>>
>>>I am trying to enable SMMU(mmu500) on an platform.
>>>My platform support only 32 SIDs, but it have more than 100 masters.
>
>Do you mean the MMU-500 configuration really only has 5 bits of
>stream ID wired up (which seems a bit unlikely, especially given that
>in such a configuration you should gain extra bits from the prepended
>TBU number), or that you have a sufficient number of stream ID bits
>but only have 32 stream matching groups?

There are 32 Stream matching registers, 32 Contexts. The stream id width
seems to be 10 bits.

>
>>>So I need to let different masters share one SID. I read current
>>>arm-smmu.c, but it needs each master has unique SID. Do you have
>>>some suggestions about how to let different masters sharing one
>>>SID?
>>
>>We can achieve that using iommu_groups, but then we need a way to
>>describe those groups in the device-tree, as opposed to putting
>>each device into its own group like we do at present. Robin (CC'd) had
>>some work-in-progress for this, iirc.
>
>I spent enough time on it that I reached the point of thinking
>there's no feasible DT binding that is sufficiently
>hardware-agnostic, and isn't just trying to paint a Linux
>implementation detail as hardware description - the master IDs are
>already there, so it might as well be up to the thing parsing them to
>work out what, if anything, it wants to do with duplicates.
>
>What I have now is a simple little lookup table solution inside the
>SMMUv2 driver to automatically track groups by stream ID for platform
>devices. I've not yet tried pulling in Joerg's generic group series,
>but I think it's going to slot together really neatly with that, so I
>might try breaking it out of the big stream ID probing rework I'm
>currently half-way through.

Would you mind share me you code? I'd like to try on my platform.

>
>>>On my platform, SID can be dynamically programmed. So I can program
>>>DMA0 and DMA1 using one SID, saying 0x5. But I do not have a good
>>>idea how to support this use case in arm-smmu.c driver.
>>
>>I think we've have the firmware allocating the SIDs, then describing
>>the grouping to Linux in the device-tree.
>
>Yeah, regardless of how we handle groups we need the SIDs to be in
>the DT and not change at runtime, so the programming is going to have
>to be done before the kernel even runs.

Yeah. I programmed the SID in bootloader. When kernel runs, the SID will
not change.


Thanks,
Peng.
>
>Robin.
>
>>
>>Will
>>
>
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to