public inbox for linux-mediatek@lists.infradead.org
 help / color / mirror / Atom feed
From: "Jason-JH Lin (林睿祥)" <Jason-JH.Lin@mediatek.com>
To: "chunkuang.hu@kernel.org" <chunkuang.hu@kernel.org>,
	"AngeloGioacchino Del Regno"
	<angelogioacchino.delregno@collabora.com>,
	"robh@kernel.org" <robh@kernel.org>,
	"krzk+dt@kernel.org" <krzk+dt@kernel.org>,
	"jassisinghbrar@gmail.com" <jassisinghbrar@gmail.com>,
	"mchehab@kernel.org" <mchehab@kernel.org>,
	"conor+dt@kernel.org" <conor+dt@kernel.org>,
	"CK Hu (胡俊光)" <ck.hu@mediatek.com>
Cc: "devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"Moudy Ho (何宗原)" <Moudy.Ho@mediatek.com>,
	"Xiandong Wang (王先冬)" <Xiandong.Wang@mediatek.com>,
	"Singo Chang (張興國)" <Singo.Chang@mediatek.com>,
	"wenst@chromium.org" <wenst@chromium.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>,
	Project_Global_Chrome_Upstream_Group
	<Project_Global_Chrome_Upstream_Group@mediatek.com>,
	"Paul-pl Chen (陳柏霖)" <Paul-pl.Chen@mediatek.com>,
	"Xavier Chang (張獻文)" <Xavier.Chang@mediatek.com>,
	"Nancy Lin (林欣螢)" <Nancy.Lin@mediatek.com>,
	"linux-mediatek@lists.infradead.org"
	<linux-mediatek@lists.infradead.org>,
	"Sirius Wang (王皓昱)" <Sirius.Wang@mediatek.com>,
	"matthias.bgg@gmail.com" <matthias.bgg@gmail.com>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"linux-media@vger.kernel.org" <linux-media@vger.kernel.org>
Subject: Re: [PATCH v6 07/20] mailbox: mtk-cmdq: Add mminfra_offset configuration for DRAM transaction
Date: Tue, 1 Jul 2025 06:15:37 +0000	[thread overview]
Message-ID: <1e6b6ecc978d96d06fe6bbe0b8a5bac5a56e0e61.camel@mediatek.com> (raw)
In-Reply-To: <84f2670464757a7e58cca7e9715a8e9ea6bf274d.camel@mediatek.com>

On Fri, 2025-06-27 at 09:49 +0000, CK Hu (胡俊光) wrote:
> On Mon, 2025-06-02 at 01:31 +0800, Jason-JH Lin wrote:
> > The GCE in MT8196 is placed in MMINFRA and requires all addresses
> > in GCE instructions for DRAM transactions to be IOVA.
> > 
> > Due to MMIO, if the GCE needs to access a hardware register at
> > 0x1000_0000, but the SMMU is also mapping a DRAM block at
> > 0x1000_0000,
> > the MMINFRA will not know whether to write to the hardware register
> > or
> > the DRAM.
> 
> I don't know why you mention SMMU because GCE access DRAM without any
> iommu function.

Yes, actually it does,'t have much to do with SMMU. It's because GCE of
MT8196 is placed in MMINFRA. MMINFRA has a rule to determine that if
the address going out from GCE < 2G, it should go to the config path
(HW register), and if the address >= 2G, it should go ti the data path
(DRAM).

Since the GCE of MT8196 uses IOMMU, the SMMU might map the IOVA to a
position between 0 and 2G. To prevent MMINFRA from sending the IOVA
intended for 0-2G to the config path, the GCE needs to add this 2G
`mminfra_offset` to the DRAM address. MMINFRA will then uniformly
subtract 2G from the address going to DRAM to access the actual IOVA.
This subtraction of 2G is a hardware-bound rule of MMINFRA and cannot
be modified by software.

> It seems previous SoC may .have the same problem, how is it solved in
> other SoC?
> 

Previous SoCs used GCE without IOMMU and accessed PA, and the PA of
DRAM was usually placed after 2G, so there was no need for this rule to
determine whether to go to DRAM, thus avoiding this issue.

> > To solve this, MMINFRA treats addresses greater than 2G as data
> > paths
> > and those less than 2G as config paths because the DRAM start
> > address
> > is currently at 2G (0x8000_0000). On the data path, MMINFRA remaps
> > DRAM addresses by subtracting 2G, allowing SMMU to map DRAM
> > addresses
> > less than 2G.
> > For example, if the DRAM start address 0x8000_0000 is mapped to
> > IOVA=0x0, when GCE accesses IOVA=0x0, it must add a 2G offset to
> > the address in the GCE instruction. MMINFRA will then see it as a
> > data path (IOVA >= 2G) and subtract 2G, allowing GCE to access
> > IOVA=0x0.
> > 
> > Since the MMINFRA remap subtracting 2G is done in hardware and
> > cannot
> > be configured by software, the address of DRAM in GCE instruction
> > must
> > always add 2G to ensure proper access.
> > This 2G adjustment is referred to as mminfra_offset in the CMDQ
> > driver.
> > CMDQ helper can get the mminfra_offset from the cmdq_mbox_priv of
> > cmdq_pkt and add the mminfra_offset to the DRAM address in GCE
> > instructions.
> > 
> > Signed-off-by: Jason-JH Lin <jason-jh.lin@mediatek.com>
> > ---
> >  drivers/mailbox/mtk-cmdq-mailbox.c       | 6 ++++--
> >  include/linux/mailbox/mtk-cmdq-mailbox.h | 1 +
> >  2 files changed, 5 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c
> > b/drivers/mailbox/mtk-cmdq-mailbox.c
> > index e2ea12e9aecb..6f4b9879069e 100644
> > --- a/drivers/mailbox/mtk-cmdq-mailbox.c
> > +++ b/drivers/mailbox/mtk-cmdq-mailbox.c
> > @@ -94,6 +94,7 @@ struct cmdq {
> >  struct gce_plat {
> >  	u32 thread_nr;
> >  	u8 shift;
> > +	dma_addr_t mminfra_offset;
> >  	bool control_by_sw;
> >  	bool sw_ddr_en;
> >  	bool gce_vm;
> > @@ -102,12 +103,12 @@ struct gce_plat {
> >  
> >  static inline u32 cmdq_reg_shift_addr(dma_addr_t addr, const
> > struct gce_plat *pdata)
> 
> This function does not just shift address.
> So I would like this function name to be 'cmdq_iova_to_gce_addr'.
> 

Sure, but this not only for the iova, so I'll rename it as
`cmdq_convert_gce_addr`.

> >  {
> > -	return (addr >> pdata->shift);
> > +	return ((addr + pdata->mminfra_offset) >> pdata->shift);
> >  }
> >  
> >  static inline dma_addr_t cmdq_reg_revert_addr(u32 addr, const
> > struct gce_plat *pdata)
> 
> I would like this function name to be 'cmdq_gce_addr_to_iova'.

And rename this as `cmdq_revert_gce_addr`.

Regards,
Jason-JH Lin

> 
> Regards,
> CK

  reply	other threads:[~2025-07-01  6:41 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-01 17:31 [PATCH v6 00/20] Add GCE support for MT8196 Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 01/20] arm64: dts: mediatek: Add GCE header " Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 02/20] mailbox: mtk-cmdq: Refine DMA address handling for the command buffer Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 03/20] mailbox: mtk-cmdq: Add cmdq private data to cmdq_pkt for generating instruction Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 04/20] soc: mediatek: mtk-cmdq: Add cmdq_get_mbox_priv() in cmdq_pkt_create() Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 05/20] soc: mediatek: mtk-cmdq: Add cmdq_pkt_jump_rel_temp() for removing shift_pa Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 06/20] mailbox: mtk-cmdq: Add GCE hardware virtualization configuration Jason-JH Lin
2025-06-27  8:41   ` CK Hu (胡俊光)
2025-07-01  5:50     ` Jason-JH Lin (林睿祥)
2025-06-01 17:31 ` [PATCH v6 07/20] mailbox: mtk-cmdq: Add mminfra_offset configuration for DRAM transaction Jason-JH Lin
2025-06-27  9:49   ` CK Hu (胡俊光)
2025-07-01  6:15     ` Jason-JH Lin (林睿祥) [this message]
2025-06-01 17:31 ` [PATCH v6 08/20] mailbox: mtk-cmdq: Add driver data to support for MT8196 Jason-JH Lin
2025-06-27 10:07   ` CK Hu (胡俊光)
2025-06-01 17:31 ` [PATCH v6 09/20] soc: mediatek: mtk-cmdq: Add pa_base parsing for hardware without subsys ID support Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 10/20] soc: mediatek: mtk-cmdq: Add new APIs to replace cmdq_pkt_write() and cmdq_pkt_write_mask() Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 11/20] soc: mediatek: mtk-cmdq: Add mminfra_offset adjustment for DRAM addresses Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 12/20] soc: mediatek: Add programming flow for unsupported subsys ID hardware Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 13/20] drm/mediatek: " Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 14/20] media: platform: mtk-mdp3: " Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 15/20] media: platform: mtk-mdp3: Change cmdq_pkt_jump_rel() to cmdq_pkt_jump_rel_temp() Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 16/20] soc: mediatek: mtk-cmdq: Remove shift_pa parameter from cmdq_pkt_jump() Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 17/20] media: platform: mtk-mdp3: Use cmdq_pkt_jump_rel() without shift_pa Jason-JH Lin
2025-06-02 15:37   ` Nicolas Dufresne
2025-06-03 15:18     ` Jason-JH Lin (林睿祥)
2025-06-01 17:31 ` [PATCH v6 18/20] soc: mediatek: mtk-cmdq: Remove cmdq_pkt_jump() and cmdq_pkt_jump_rel_temp() Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 19/20] soc: mediatek: mtk-cmdq: Remove cmdq_pkt_write() and cmdq_pkt_write_mask() Jason-JH Lin
2025-06-01 17:31 ` [PATCH v6 20/20] mailbox: mtk-cmdq: Remove unsued cmdq_get_shift_pa() Jason-JH Lin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1e6b6ecc978d96d06fe6bbe0b8a5bac5a56e0e61.camel@mediatek.com \
    --to=jason-jh.lin@mediatek.com \
    --cc=Moudy.Ho@mediatek.com \
    --cc=Nancy.Lin@mediatek.com \
    --cc=Paul-pl.Chen@mediatek.com \
    --cc=Project_Global_Chrome_Upstream_Group@mediatek.com \
    --cc=Singo.Chang@mediatek.com \
    --cc=Sirius.Wang@mediatek.com \
    --cc=Xavier.Chang@mediatek.com \
    --cc=Xiandong.Wang@mediatek.com \
    --cc=angelogioacchino.delregno@collabora.com \
    --cc=chunkuang.hu@kernel.org \
    --cc=ck.hu@mediatek.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jassisinghbrar@gmail.com \
    --cc=krzk+dt@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=matthias.bgg@gmail.com \
    --cc=mchehab@kernel.org \
    --cc=robh@kernel.org \
    --cc=wenst@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox