mbox series

[v5,00/34] MT8195 IOMMU SUPPORT

Message ID 20220217113453.13658-1-yong.wu@mediatek.com (mailing list archive)
Headers show
Series MT8195 IOMMU SUPPORT | expand

Message

Yong Wu (吴勇) Feb. 17, 2022, 11:34 a.m. UTC
This patchset adds MT8195 iommu support.

MT8195 have 3 IOMMU HWs. 2 IOMMU HW is for multimedia, and 1 IOMMU HW is
for infra-master, like PCIe/USB.

About the 2 MM IOMMU HW, something like this:

        IOMMU(VDO)          IOMMU(VPP)
           |                   |
      SMI_COMMON(VDO)      SMI_COMMON(VPP)
      ---------------     ----------------
      |      |   ...      |      |     ...
    larb0 larb2  ...    larb1 larb3    ...

these two MM IOMMU HW share a pgtable.

About the INFRA IOMMU, it don't have larbs, the master connects the iommu
directly. It use a independent pgtable.

Also, mt8195 IOMMU bank supports. Normally the IOMMU register size only
is 0x1000. In this IOMMU HW, the register size is 5 * 0x1000. each 0x1000
is a bank. the banks' register look like this:
     ----------------------------------------
     |bank0  | bank1 | bank2 | bank3 | bank4|
     ----------------------------------------
     |global |
     |control|         null
     |regs   |
     -----------------------------------------
     |bank   |bank   |bank   |bank   |bank   |
     |regs   |regs   |regs   |regs   |regs   |
     |       |       |       |       |       |
     -----------------------------------------
All the banks share some global control registers, and each bank have its
special bank registers, like pgtable base register, tlb operation registers,
the fault status registers.
 
In mt8195, we enable this bank feature for infra iommu, We put PCIe in bank0
and USB in bank4. they have independent pgtable.

This patchset bases on next-20220216 which has already contained the smi
clean-up v10[1] patchset and the tlb logic patchset[2] for MediaTek iommu.

[1] https://lore.kernel.org/linux-iommu/20220117070510.17642-1-yong.wu@mediatek.com/
[2] https://lore.kernel.org/linux-mediatek/20211208120744.2415-1-dafna.hirschfeld@collabora.com/

Change note:
v5:1) Base on next-20220216
   2) Remove a patch for kmalloc for protect buffer. keep the kzalloc for it.
   3) minor fix from AngeloGioacchino, like rename the error label name
   (data_unlock to err_unlock).
   Note, keep the TODO for component compare_of[26/34].

v4: https://lore.kernel.org/linux-iommu/20220125085634.17972-1-yong.wu@mediatek.com/
   1) Base on v5.16-rc1
   2) Base on tlb logic 2 patchset, some patches in v3 has already gone
   through that patchset.
   3) Due to the unreadable union for v1/v2(comment in 26/33 of v3), I
   separate mtk_iommu_data for v1 and v2 totally, then remove mtk_iommu.h.
   please see patch[26/35][27/35].
   4) add two mutex for the internal data. patch[6/35][7/35].
   5) add a new flag PM_CLK_AO.

v3: https://lore.kernel.org/linux-mediatek/20210923115840.17813-1-yong.wu@mediatek.com/
    1) base on v5.15-rc1
    2) Adjust devlink with smi-common, not use the property(sub-sommon).
    3) Adjust tlb_flush_all flow,
       a) Fix tlb_flush_all only is supported in bank0.
       b) add tlb-flush-all in the resume callback.
       c) remove the pm status checking in tlb-flush-all.
       The reason are showed in the commit message.
    4) Allow IOMMU_DOMAIN_UNMANAGED since PCIe VFIO use that.
    5) Fix a clk warning and a null abort when unbind the iommu driver.

v2: https://lore.kernel.org/linux-mediatek/20210813065324.29220-1-yong.wu@mediatek.com/
    1) Base on v5.14-rc1.
    2) Fix build fail for arm32.
    3) Fix dt-binding issue from Rob.
    4) Fix the bank issue when tlb flush. v1 always use bank->base.
    5) adjust devlink with smi-common since the node may be smi-sub-common.
    6) other changes: like reword some commit message(removing many
       "This patch..."); seperate serveral patches.

v1: https://lore.kernel.org/linux-mediatek/20210630023504.18177-1-yong.wu@mediatek.com/
    Base on v5.13-rc1

Yong Wu (34):
  dt-bindings: mediatek: mt8195: Add binding for MM IOMMU
  dt-bindings: mediatek: mt8195: Add binding for infra IOMMU
  iommu/mediatek: Fix 2 HW sharing pgtable issue
  iommu/mediatek: Add list_del in mtk_iommu_remove
  iommu/mediatek: Remove clk_disable in mtk_iommu_remove
  iommu/mediatek: Add mutex for m4u_group and m4u_dom in data
  iommu/mediatek: Add mutex for data in the mtk_iommu_domain
  iommu/mediatek: Adapt sharing and non-sharing pgtable case
  iommu/mediatek: Add 12G~16G support for multi domains
  iommu/mediatek: Add a flag DCM_DISABLE
  iommu/mediatek: Add a flag NON_STD_AXI
  iommu/mediatek: Remove the granule in the tlb flush
  iommu/mediatek: Always enable output PA over 32bits in isr
  iommu/mediatek: Add SUB_COMMON_3BITS flag
  iommu/mediatek: Add IOMMU_TYPE flag
  iommu/mediatek: Contain MM IOMMU flow with the MM TYPE
  iommu/mediatek: Adjust device link when it is sub-common
  iommu/mediatek: Allow IOMMU_DOMAIN_UNMANAGED for PCIe VFIO
  iommu/mediatek: Add a PM_CLK_AO flag for infra iommu
  iommu/mediatek: Add infra iommu support
  iommu/mediatek: Add PCIe support
  iommu/mediatek: Add mt8195 support
  iommu/mediatek: Only adjust code about register base
  iommu/mediatek: Just move code position in hw_init
  iommu/mediatek: Separate mtk_iommu_data for v1 and v2
  iommu/mediatek: Remove mtk_iommu.h
  iommu/mediatek-v1: Just rename mtk_iommu to mtk_iommu_v1
  iommu/mediatek: Add mtk_iommu_bank_data structure
  iommu/mediatek: Initialise bank HW for each a bank
  iommu/mediatek: Change the domid to iova_region_id
  iommu/mediatek: Get the proper bankid for multi banks
  iommu/mediatek: Initialise/Remove for multi bank dev
  iommu/mediatek: Backup/restore regsiters for multi banks
  iommu/mediatek: mt8195: Enable multi banks for infra iommu

 .../bindings/iommu/mediatek,iommu.yaml        |  20 +-
 drivers/iommu/mtk_iommu.c                     | 966 +++++++++++++-----
 drivers/iommu/mtk_iommu.h                     | 111 --
 drivers/iommu/mtk_iommu_v1.c                  | 243 +++--
 .../dt-bindings/memory/mt8195-memory-port.h   | 408 ++++++++
 include/dt-bindings/memory/mtk-memory-port.h  |   2 +
 6 files changed, 1264 insertions(+), 486 deletions(-)
 delete mode 100644 drivers/iommu/mtk_iommu.h
 create mode 100644 include/dt-bindings/memory/mt8195-memory-port.h

Comments

Joerg Roedel Feb. 28, 2022, 12:34 p.m. UTC | #1
Hi Yong Wu,

On Thu, Feb 17, 2022 at 07:34:19PM +0800, Yong Wu wrote:
> Yong Wu (34):
>   dt-bindings: mediatek: mt8195: Add binding for MM IOMMU
>   dt-bindings: mediatek: mt8195: Add binding for infra IOMMU
>   iommu/mediatek: Fix 2 HW sharing pgtable issue
>   iommu/mediatek: Add list_del in mtk_iommu_remove
>   iommu/mediatek: Remove clk_disable in mtk_iommu_remove
>   iommu/mediatek: Add mutex for m4u_group and m4u_dom in data
>   iommu/mediatek: Add mutex for data in the mtk_iommu_domain
>   iommu/mediatek: Adapt sharing and non-sharing pgtable case
>   iommu/mediatek: Add 12G~16G support for multi domains
>   iommu/mediatek: Add a flag DCM_DISABLE
>   iommu/mediatek: Add a flag NON_STD_AXI
>   iommu/mediatek: Remove the granule in the tlb flush
>   iommu/mediatek: Always enable output PA over 32bits in isr
>   iommu/mediatek: Add SUB_COMMON_3BITS flag
>   iommu/mediatek: Add IOMMU_TYPE flag
>   iommu/mediatek: Contain MM IOMMU flow with the MM TYPE
>   iommu/mediatek: Adjust device link when it is sub-common
>   iommu/mediatek: Allow IOMMU_DOMAIN_UNMANAGED for PCIe VFIO
>   iommu/mediatek: Add a PM_CLK_AO flag for infra iommu
>   iommu/mediatek: Add infra iommu support
>   iommu/mediatek: Add PCIe support
>   iommu/mediatek: Add mt8195 support
>   iommu/mediatek: Only adjust code about register base
>   iommu/mediatek: Just move code position in hw_init
>   iommu/mediatek: Separate mtk_iommu_data for v1 and v2
>   iommu/mediatek: Remove mtk_iommu.h
>   iommu/mediatek-v1: Just rename mtk_iommu to mtk_iommu_v1
>   iommu/mediatek: Add mtk_iommu_bank_data structure
>   iommu/mediatek: Initialise bank HW for each a bank
>   iommu/mediatek: Change the domid to iova_region_id
>   iommu/mediatek: Get the proper bankid for multi banks
>   iommu/mediatek: Initialise/Remove for multi bank dev
>   iommu/mediatek: Backup/restore regsiters for multi banks
>   iommu/mediatek: mt8195: Enable multi banks for infra iommu

This doesn't apply cleanly, can you please send a version rebased to
v5.17-rc4?

Thanks,

	Joerg
AngeloGioacchino Del Regno Feb. 28, 2022, 1:50 p.m. UTC | #2
Il 28/02/22 13:34, Joerg Roedel ha scritto:
> Hi Yong Wu,
> 
> On Thu, Feb 17, 2022 at 07:34:19PM +0800, Yong Wu wrote:
>> Yong Wu (34):
>>    dt-bindings: mediatek: mt8195: Add binding for MM IOMMU
>>    dt-bindings: mediatek: mt8195: Add binding for infra IOMMU
>>    iommu/mediatek: Fix 2 HW sharing pgtable issue
>>    iommu/mediatek: Add list_del in mtk_iommu_remove
>>    iommu/mediatek: Remove clk_disable in mtk_iommu_remove
>>    iommu/mediatek: Add mutex for m4u_group and m4u_dom in data
>>    iommu/mediatek: Add mutex for data in the mtk_iommu_domain
>>    iommu/mediatek: Adapt sharing and non-sharing pgtable case
>>    iommu/mediatek: Add 12G~16G support for multi domains
>>    iommu/mediatek: Add a flag DCM_DISABLE
>>    iommu/mediatek: Add a flag NON_STD_AXI
>>    iommu/mediatek: Remove the granule in the tlb flush
>>    iommu/mediatek: Always enable output PA over 32bits in isr
>>    iommu/mediatek: Add SUB_COMMON_3BITS flag
>>    iommu/mediatek: Add IOMMU_TYPE flag
>>    iommu/mediatek: Contain MM IOMMU flow with the MM TYPE
>>    iommu/mediatek: Adjust device link when it is sub-common
>>    iommu/mediatek: Allow IOMMU_DOMAIN_UNMANAGED for PCIe VFIO
>>    iommu/mediatek: Add a PM_CLK_AO flag for infra iommu
>>    iommu/mediatek: Add infra iommu support
>>    iommu/mediatek: Add PCIe support
>>    iommu/mediatek: Add mt8195 support
>>    iommu/mediatek: Only adjust code about register base
>>    iommu/mediatek: Just move code position in hw_init
>>    iommu/mediatek: Separate mtk_iommu_data for v1 and v2
>>    iommu/mediatek: Remove mtk_iommu.h
>>    iommu/mediatek-v1: Just rename mtk_iommu to mtk_iommu_v1
>>    iommu/mediatek: Add mtk_iommu_bank_data structure
>>    iommu/mediatek: Initialise bank HW for each a bank
>>    iommu/mediatek: Change the domid to iova_region_id
>>    iommu/mediatek: Get the proper bankid for multi banks
>>    iommu/mediatek: Initialise/Remove for multi bank dev
>>    iommu/mediatek: Backup/restore regsiters for multi banks
>>    iommu/mediatek: mt8195: Enable multi banks for infra iommu
> 
> This doesn't apply cleanly, can you please send a version rebased to
> v5.17-rc4?
> 
> Thanks,
> 
> 	Joerg

Hello Joerg,

this series depends on the following series:
https://patchwork.kernel.org/project/linux-mediatek/list/?series=592275

...which is also well tested and ready to be merged in.

Applying Yong's series without the mentioned series from Dafna would not work.


Thanks,
Angelo
Yong Wu (吴勇) March 1, 2022, 7:49 a.m. UTC | #3
On Mon, 2022-02-28 at 14:50 +0100, AngeloGioacchino Del Regno wrote:
> Il 28/02/22 13:34, Joerg Roedel ha scritto:
> > Hi Yong Wu,
> > 
> > On Thu, Feb 17, 2022 at 07:34:19PM +0800, Yong Wu wrote:
> > > Yong Wu (34):
> > >    dt-bindings: mediatek: mt8195: Add binding for MM IOMMU
> > >    dt-bindings: mediatek: mt8195: Add binding for infra IOMMU
> > >    iommu/mediatek: Fix 2 HW sharing pgtable issue
> > >    iommu/mediatek: Add list_del in mtk_iommu_remove
> > >    iommu/mediatek: Remove clk_disable in mtk_iommu_remove
> > >    iommu/mediatek: Add mutex for m4u_group and m4u_dom in data
> > >    iommu/mediatek: Add mutex for data in the mtk_iommu_domain
> > >    iommu/mediatek: Adapt sharing and non-sharing pgtable case
> > >    iommu/mediatek: Add 12G~16G support for multi domains
> > >    iommu/mediatek: Add a flag DCM_DISABLE
> > >    iommu/mediatek: Add a flag NON_STD_AXI
> > >    iommu/mediatek: Remove the granule in the tlb flush
> > >    iommu/mediatek: Always enable output PA over 32bits in isr
> > >    iommu/mediatek: Add SUB_COMMON_3BITS flag
> > >    iommu/mediatek: Add IOMMU_TYPE flag
> > >    iommu/mediatek: Contain MM IOMMU flow with the MM TYPE
> > >    iommu/mediatek: Adjust device link when it is sub-common
> > >    iommu/mediatek: Allow IOMMU_DOMAIN_UNMANAGED for PCIe VFIO
> > >    iommu/mediatek: Add a PM_CLK_AO flag for infra iommu
> > >    iommu/mediatek: Add infra iommu support
> > >    iommu/mediatek: Add PCIe support
> > >    iommu/mediatek: Add mt8195 support
> > >    iommu/mediatek: Only adjust code about register base
> > >    iommu/mediatek: Just move code position in hw_init
> > >    iommu/mediatek: Separate mtk_iommu_data for v1 and v2
> > >    iommu/mediatek: Remove mtk_iommu.h
> > >    iommu/mediatek-v1: Just rename mtk_iommu to mtk_iommu_v1
> > >    iommu/mediatek: Add mtk_iommu_bank_data structure
> > >    iommu/mediatek: Initialise bank HW for each a bank
> > >    iommu/mediatek: Change the domid to iova_region_id
> > >    iommu/mediatek: Get the proper bankid for multi banks
> > >    iommu/mediatek: Initialise/Remove for multi bank dev
> > >    iommu/mediatek: Backup/restore regsiters for multi banks
> > >    iommu/mediatek: mt8195: Enable multi banks for infra iommu
> > 
> > This doesn't apply cleanly, can you please send a version rebased
> > to
> > v5.17-rc4?

As in the cover letter, this patchset doesn't base on v5.17-rc4, it
bases on next-20220216 which has contained [1] and Dafna's patchset
below.

By the way, It still conflicts with the latest next-20220228 which has
just contained[2].

In this case, How should I do? Send a version base on the latest next?

[1] 
https://lore.kernel.org/linux-iommu/20220117070510.17642-1-yong.wu@mediatek.com/

[2] 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/log/?h=next-20220228&qt=grep&q=component_compare

Thanks.

> > 
> > Thanks,
> > 
> > 	Joerg
> 
> Hello Joerg,
> 
> this series depends on the following series:
> 
https://patchwork.kernel.org/project/linux-mediatek/list/?series=592275
> 
> ...which is also well tested and ready to be merged in.
> 
> Applying Yong's series without the mentioned series from Dafna would
> not work.

Yes. Thanks.

> 
> 
> Thanks,
> Angelo
Joerg Roedel March 4, 2022, 9:20 a.m. UTC | #4
On Tue, Mar 01, 2022 at 03:49:18PM +0800, Yong Wu wrote:
> https://patchwork.kernel.org/project/linux-mediatek/list/?series=592275

Okay, thanks for the clarification. So I can't include linux-next in my
tree, so I think the best option is to wait until v5.18-rc1 (or rather
-rc3, which is where I start merging new stuff) is out and merge it
then.
Another option would be if there is a branch which only contains the
dependencies of this patch-set, which I could pull into my tree, but it
is already pretty late in the cycle.
So please re-send when the next -rc1 is out and I will pick it up then.

Regards,

	Joerg
Yong Wu (吴勇) March 4, 2022, 9:57 a.m. UTC | #5
On Fri, 2022-03-04 at 10:20 +0100, Joerg Roedel wrote:
> On Tue, Mar 01, 2022 at 03:49:18PM +0800, Yong Wu wrote:
> > 
https://patchwork.kernel.org/project/linux-mediatek/list/?series=592275
> 
> Okay, thanks for the clarification. So I can't include linux-next in
> my
> tree, so I think the best option is to wait until v5.18-rc1 (or
> rather
> -rc3, which is where I start merging new stuff) is out and merge it
> then.
> Another option would be if there is a branch which only contains the
> dependencies of this patch-set, which I could pull into my tree, but
> it
> is already pretty late in the cycle.
> So please re-send when the next -rc1 is out and I will pick it up
> then.

Thanks for this info. I will re-send this patchset after the next -rc1.

Could you help apply Dafna's patchset at this time? This patchset
depends on it and it won't conflict with the others.

Thanks.

> 
> Regards,
> 
> 	Joerg
Joerg Roedel March 4, 2022, 10:05 a.m. UTC | #6
On Fri, Mar 04, 2022 at 05:57:19PM +0800, Yong Wu wrote:
> Thanks for this info. I will re-send this patchset after the next -rc1.
> 
> Could you help apply Dafna's patchset at this time? This patchset
> depends on it and it won't conflict with the others.

Alright, picked up Dafna's patch-set.

Regards,

	Joerg
AngeloGioacchino Del Regno March 4, 2022, 10:07 a.m. UTC | #7
Il 04/03/22 11:05, Joerg Roedel ha scritto:
> On Fri, Mar 04, 2022 at 05:57:19PM +0800, Yong Wu wrote:
>> Thanks for this info. I will re-send this patchset after the next -rc1.
>>
>> Could you help apply Dafna's patchset at this time? This patchset
>> depends on it and it won't conflict with the others.
> 
> Alright, picked up Dafna's patch-set.
> 
> Regards,
> 
> 	Joerg

Thanks for picking Dafna's series right now, this was very appreciated.

Regards,
Angelo