* [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195
@ 2022-08-19 6:10 Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 01/10] dt-bindings: reset: mt8195: add vdosys1 reset control bit Nancy.Lin
` (9 more replies)
0 siblings, 10 replies; 17+ messages in thread
From: Nancy.Lin @ 2022-08-19 6:10 UTC (permalink / raw)
To: Rob Herring, Matthias Brugger, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
Nancy . Lin, jason-jh . lin, Yongqiang Niu, devicetree,
linux-kernel, linux-arm-kernel, linux-mediatek, dri-devel, llvm,
singo.chang, Project_Global_Chrome_Upstream_Group
The hardware path of vdosys1 with DPTx output need to go through by several modules, such as, OVL_ADAPTOR and MERGE.
Add mmsys and mutex modules support by the patches below:
Changes in v26:
- fix reviewer comment
- set mmsys num_resets to 32 for 8192
- rebase to next-20220819
Changes in v25:
- fix reviewer comment
- refine mtk_mmsys_reset_update func
- rebase to next-20220708
Changes in v24:
- fix reviewer comment
- refine mtk_mmsys_reset_update func
- rebase to next-20220622
Changes in v23:
- separate[7] mmsys/mutex and drm patches into two series
Changes in v22:
- rebase to next-20220525
- rebase to vdosys0 series v22
- separate dts to a new patch
Changes in v21:
- fix reviewer comment
- fix rdma and ethdr binding doc and dts
Changes in v20:
- fix reviewer comment
- update mmsys update bit api name
- add mtk_mmsys_update_bits error message if lose gce property
- list all mt8195 vdosys1 reset bits
Changes in v19:
- fix reviewer comment
- separate mt8195 mmsys component to a new patch
- separate mt8195 vdo0 and vdo1 routing table
- separate mmsys_write_reg api to a new patch and simplify write reg code
- separate mmsys 64 bit reset to a new patch
- separate mtk-mutex dp_intf1 component to a new patch
Changes in v18:
- fix reviewer comment
- fix rdma binding doc
- fix ethdr binding doc
- refine mmsys config cmdq support
- refine merge reset control flow, get reset control in probe function
- add ethdr reset control error handling and remove dbg log
- rebase to vdosys0 series v20 (ref [5])
Changes in v17:
- fix reviewer comment in v16
- separate ovl adaptor comp in mtk-mmsys and mtk-mutex
- separate mmsys config API
- move mdp_rdma binding yaml
- fix ovl adaptor pm runtime get sync timing issue
- rebase to vdosys0 series v19 (ref [5])
- rebase to [7] for modify vblank register change
Changes in v16:
- fix reviewer comment in v 15
- fix mtk_drm_ddp_comp.c alignment
- fix vdosys0 mmsys num before adding vdosys1 patch
Changes in v15:
- fix ethdr uppercase hex number in dts
Changes in v14:
- remove MTK_MMSYS 64 bit dependency
- add ethdr.yaml back and fix dt_schema check fail
Resend v13
- add related maintainer in maillist
Changes in v13:
- fix reviewer comment in v12
- fix rdma dt-binding format
- fix dts node naming
- fix 32 bit build error
- modify 64bit dependency for mtk-mmsys
- rebase to vdosys0 series v16. (ref [5])
Changes in v12:
- fix reviewer comment in v11
- modify mbox index
- refine dma dev for ovl_adaptor sub driver
Changes in v11:
- remove ethdr vblank spin lock
- refine ovl_adaptor print message
Changes in v10:
- refine ethdr reset control using devm_reset_control_array_get_optional_exclusive
- fix ovl_adaptor mtk_ovl_adaptor_clk_enable error handle issue
Changes in v9:
- rebase on kernel-5.16-rc1
- rebase on vdosys0 series v13. (ref [5])
- fix ovl_adaptor sub driver is brought up unintentionally
- fix clang build test fail- duplicate ethdr/mdp_rdma init_module/cleanup_module symbol issue
Changes in v8:
- separate merge async reset to new patch.
- separate drm ovl_adaptor sub driver to new patch.
- fix reviewer comment in v7.
Changes in v7:
- rebase on vdosys0 series v12 (ref[5])
- add dma description in ethdr binding document.
- refine vdosys1 bit definition of mmsys routing table.
- separate merge modification into 3 pathces.
- separate mutex modification into 2 patches.
- add plane color coding for mdp_rdma csc.
- move mdp_rdma pm control to ovl_adaptor.
- fix reviewer comment in v6.
Changes in v6:
- rebase on kernel-5.15-rc1.
- change mbox label to gce0 for dts node of vdosys1.
- modify mmsys reset num for mt8195.
- rebase on vdosys0 series v10. (ref [5])
- use drm to bring up ovl_adaptor driver.
- move drm iommu/mutex check from kms init to drm bind.
- modify rdma binding doc location. (Documentation/devicetree/bindings/arm/)
- modify for reviewer's comment in v5.
Changes in v5:
- add mmsys reset controller reference.
Changes in v4:
- use merge common driver for merge1~4.
- refine ovl_adaptor rdma driver.
- use ovl_adaptor ddp_comp function instead of ethdr.
- modify for reviewer's comment in v3.
Changes in v3:
- modify for reviewer's comment in v2.
- add vdosys1 2 pixels align limit.
- add mixer odd offset support.
Changes in v2:
- Merge PSEUDO_OVL and ETHDR into one DRM component.
- Add mmsys config API for vdosys1 hardware setting.
- Add mmsys reset control using linux reset framework.
Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
This series are based on the following patch:
[1] arm64: dts: Add mediatek SoC mt8195 and evaluation board
20220112114724.1953-4-tinghan.shen@mediatek.com
[2] arm64: dts: mt8195: add IOMMU and smi nodes
20210615173233.26682-15-tinghan.shen@mediatek.com
[3] arm64: dts: mt8195: add gce node
20220126090109.32143-1-jason-jh.lin@mediatek.com
[4] [v2] arm64: dts: mt8195: add display node for vdosys0
20220225021535.2655-1-jason-jh.lin@mediatek.com
[5] Add MediaTek SoC DRM (vdosys0) support for mt8195 - v22 series
20220526102126.19756-1-jason-jh.lin@mediatek.com
[6] dt-bindings: mediatek: mt8195: Add binding for MM IOMMU
20220407075726.17771-2-yong.wu@mediatek.com
[7] Add MediaTek SoC DRM (vdosys1) support for mt8195
20220526110233.20080-1-nancy.lin@mediatek.com
Nancy.Lin (10):
dt-bindings: reset: mt8195: add vdosys1 reset control bit
soc: mediatek: add mtk-mmsys ethdr and mdp_rdma components
soc: mediatek: add mtk-mmsys support for mt8195 vdosys1
soc: mediatek: add mtk_mmsys_update_bits API
soc: mediatek: add mtk-mmsys config API for mt8195 vdosys1
soc: mediatek: add cmdq support of mtk-mmsys config API for mt8195
vdosys1
soc: mediatek: mmsys: add mmsys for support 64 reset bits
soc: mediatek: mmsys: add reset control for MT8195 vdosys1
soc: mediatek: add mtk-mutex component - dp_intf1
soc: mediatek: add mtk-mutex support for mt8195 vdosys1
drivers/soc/mediatek/mt8195-mmsys.h | 146 ++++++++++++++++++++++
drivers/soc/mediatek/mtk-mmsys.c | 133 +++++++++++++++-----
drivers/soc/mediatek/mtk-mmsys.h | 1 +
drivers/soc/mediatek/mtk-mutex.c | 37 ++++++
include/dt-bindings/reset/mt8195-resets.h | 45 +++++++
include/linux/soc/mediatek/mtk-mmsys.h | 25 ++++
6 files changed, 356 insertions(+), 31 deletions(-)
--
2.18.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v26 01/10] dt-bindings: reset: mt8195: add vdosys1 reset control bit
2022-08-19 6:10 [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
@ 2022-08-19 6:10 ` Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 02/10] soc: mediatek: add mtk-mmsys ethdr and mdp_rdma components Nancy.Lin
` (8 subsequent siblings)
9 siblings, 0 replies; 17+ messages in thread
From: Nancy.Lin @ 2022-08-19 6:10 UTC (permalink / raw)
To: Rob Herring, Matthias Brugger, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
Nancy . Lin, jason-jh . lin, Yongqiang Niu, devicetree,
linux-kernel, linux-arm-kernel, linux-mediatek, dri-devel, llvm,
singo.chang, Project_Global_Chrome_Upstream_Group
Add vdosys1 reset control bit for MT8195 platform.
Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Rex-BC Chen <rex-bc.chen@mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
include/dt-bindings/reset/mt8195-resets.h | 45 +++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/include/dt-bindings/reset/mt8195-resets.h b/include/dt-bindings/reset/mt8195-resets.h
index 0b1937f14b36..c87ba621e72e 100644
--- a/include/dt-bindings/reset/mt8195-resets.h
+++ b/include/dt-bindings/reset/mt8195-resets.h
@@ -32,4 +32,49 @@
#define MT8195_INFRA_RST3_THERM_CTRL_PTP_SWRST 1
#define MT8195_INFRA_RST4_THERM_CTRL_MCU_SWRST 2
+/* VDOSYS1 */
+#define MT8195_VDOSYS1_SW0_RST_B_SMI_LARB2 0
+#define MT8195_VDOSYS1_SW0_RST_B_SMI_LARB3 1
+#define MT8195_VDOSYS1_SW0_RST_B_GALS 2
+#define MT8195_VDOSYS1_SW0_RST_B_FAKE_ENG0 3
+#define MT8195_VDOSYS1_SW0_RST_B_FAKE_ENG1 4
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA0 5
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA1 6
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA2 7
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA3 8
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE0 9
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE1 10
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE2 11
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE3 12
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE4 13
+#define MT8195_VDOSYS1_SW0_RST_B_VPP2_TO_VDO1_DL_ASYNC 14
+#define MT8195_VDOSYS1_SW0_RST_B_VPP3_TO_VDO1_DL_ASYNC 15
+#define MT8195_VDOSYS1_SW0_RST_B_DISP_MUTEX 16
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA4 17
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA5 18
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA6 19
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA7 20
+#define MT8195_VDOSYS1_SW0_RST_B_DP_INTF0 21
+#define MT8195_VDOSYS1_SW0_RST_B_DPI0 22
+#define MT8195_VDOSYS1_SW0_RST_B_DPI1 23
+#define MT8195_VDOSYS1_SW0_RST_B_DISP_MONITOR 24
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE0_DL_ASYNC 25
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE1_DL_ASYNC 26
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE2_DL_ASYNC 27
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE3_DL_ASYNC 28
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE4_DL_ASYNC 29
+#define MT8195_VDOSYS1_SW0_RST_B_VDO0_DSC_TO_VDO1_DL_ASYNC 30
+#define MT8195_VDOSYS1_SW0_RST_B_VDO0_MERGE_TO_VDO1_DL_ASYNC 31
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE0 32
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE0 33
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_BE 34
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE1 48
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE1 49
+#define MT8195_VDOSYS1_SW1_RST_B_DISP_MIXER 50
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE0_DL_ASYNC 51
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE1_DL_ASYNC 52
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE0_DL_ASYNC 53
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE1_DL_ASYNC 54
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_BE_DL_ASYNC 55
+
#endif /* _DT_BINDINGS_RESET_CONTROLLER_MT8195 */
--
2.18.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v26 02/10] soc: mediatek: add mtk-mmsys ethdr and mdp_rdma components
2022-08-19 6:10 [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 01/10] dt-bindings: reset: mt8195: add vdosys1 reset control bit Nancy.Lin
@ 2022-08-19 6:10 ` Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 03/10] soc: mediatek: add mtk-mmsys support for mt8195 vdosys1 Nancy.Lin
` (7 subsequent siblings)
9 siblings, 0 replies; 17+ messages in thread
From: Nancy.Lin @ 2022-08-19 6:10 UTC (permalink / raw)
To: Rob Herring, Matthias Brugger, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
Nancy . Lin, jason-jh . lin, Yongqiang Niu, devicetree,
linux-kernel, linux-arm-kernel, linux-mediatek, dri-devel, llvm,
singo.chang, Project_Global_Chrome_Upstream_Group
Add new mmsys component: ethdr_mixer and mdp_rdma. These components will
use in mt8195 vdosys1.
Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
---
include/linux/soc/mediatek/mtk-mmsys.h | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/include/linux/soc/mediatek/mtk-mmsys.h b/include/linux/soc/mediatek/mtk-mmsys.h
index 59117d970daf..321ac8e33a69 100644
--- a/include/linux/soc/mediatek/mtk-mmsys.h
+++ b/include/linux/soc/mediatek/mtk-mmsys.h
@@ -29,7 +29,16 @@ enum mtk_ddp_comp_id {
DDP_COMPONENT_DSI1,
DDP_COMPONENT_DSI2,
DDP_COMPONENT_DSI3,
+ DDP_COMPONENT_ETHDR_MIXER,
DDP_COMPONENT_GAMMA,
+ DDP_COMPONENT_MDP_RDMA0,
+ DDP_COMPONENT_MDP_RDMA1,
+ DDP_COMPONENT_MDP_RDMA2,
+ DDP_COMPONENT_MDP_RDMA3,
+ DDP_COMPONENT_MDP_RDMA4,
+ DDP_COMPONENT_MDP_RDMA5,
+ DDP_COMPONENT_MDP_RDMA6,
+ DDP_COMPONENT_MDP_RDMA7,
DDP_COMPONENT_MERGE0,
DDP_COMPONENT_MERGE1,
DDP_COMPONENT_MERGE2,
--
2.18.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v26 03/10] soc: mediatek: add mtk-mmsys support for mt8195 vdosys1
2022-08-19 6:10 [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 01/10] dt-bindings: reset: mt8195: add vdosys1 reset control bit Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 02/10] soc: mediatek: add mtk-mmsys ethdr and mdp_rdma components Nancy.Lin
@ 2022-08-19 6:10 ` Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 04/10] soc: mediatek: add mtk_mmsys_update_bits API Nancy.Lin
` (6 subsequent siblings)
9 siblings, 0 replies; 17+ messages in thread
From: Nancy.Lin @ 2022-08-19 6:10 UTC (permalink / raw)
To: Rob Herring, Matthias Brugger, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
Nancy . Lin, jason-jh . lin, Yongqiang Niu, devicetree,
linux-kernel, linux-arm-kernel, linux-mediatek, dri-devel, llvm,
singo.chang, Project_Global_Chrome_Upstream_Group
Add mt8195 vdosys1 routing table to the driver data of mtk-mmsys.
Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Rex-BC Chen <rex-bc.chen@mediatek.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
---
drivers/soc/mediatek/mt8195-mmsys.h | 139 ++++++++++++++++++++++++++++
drivers/soc/mediatek/mtk-mmsys.c | 2 +
2 files changed, 141 insertions(+)
diff --git a/drivers/soc/mediatek/mt8195-mmsys.h b/drivers/soc/mediatek/mt8195-mmsys.h
index abfe94a30248..fd7b455bd675 100644
--- a/drivers/soc/mediatek/mt8195-mmsys.h
+++ b/drivers/soc/mediatek/mt8195-mmsys.h
@@ -75,6 +75,70 @@
#define MT8195_SOUT_DSC_WRAP1_OUT_TO_SINA_VIRTUAL0 (2 << 16)
#define MT8195_SOUT_DSC_WRAP1_OUT_TO_VPP_MERGE (3 << 16)
+#define MT8195_VDO1_VPP_MERGE0_P0_SEL_IN 0xf04
+#define MT8195_VPP_MERGE0_P0_SEL_IN_FROM_MDP_RDMA0 1
+
+#define MT8195_VDO1_VPP_MERGE0_P1_SEL_IN 0xf08
+#define MT8195_VPP_MERGE0_P1_SEL_IN_FROM_MDP_RDMA1 1
+
+#define MT8195_VDO1_DISP_DPI1_SEL_IN 0xf10
+#define MT8195_DISP_DPI1_SEL_IN_FROM_VPP_MERGE4_MOUT 0
+
+#define MT8195_VDO1_DISP_DP_INTF0_SEL_IN 0xf14
+#define MT8195_DISP_DP_INTF0_SEL_IN_FROM_VPP_MERGE4_MOUT 0
+
+#define MT8195_VDO1_MERGE4_SOUT_SEL 0xf18
+#define MT8195_MERGE4_SOUT_TO_DPI1_SEL 2
+#define MT8195_MERGE4_SOUT_TO_DP_INTF0_SEL 3
+
+#define MT8195_VDO1_MIXER_IN1_SEL_IN 0xf24
+#define MT8195_MIXER_IN1_SEL_IN_FROM_MERGE0_ASYNC_SOUT 1
+
+#define MT8195_VDO1_MIXER_IN2_SEL_IN 0xf28
+#define MT8195_MIXER_IN2_SEL_IN_FROM_MERGE1_ASYNC_SOUT 1
+
+#define MT8195_VDO1_MIXER_IN3_SEL_IN 0xf2c
+#define MT8195_MIXER_IN3_SEL_IN_FROM_MERGE2_ASYNC_SOUT 1
+
+#define MT8195_VDO1_MIXER_IN4_SEL_IN 0xf30
+#define MT8195_MIXER_IN4_SEL_IN_FROM_MERGE3_ASYNC_SOUT 1
+
+#define MT8195_VDO1_MIXER_OUT_SOUT_SEL 0xf34
+#define MT8195_MIXER_SOUT_TO_MERGE4_ASYNC_SEL 1
+
+#define MT8195_VDO1_VPP_MERGE1_P0_SEL_IN 0xf3c
+#define MT8195_VPP_MERGE1_P0_SEL_IN_FROM_MDP_RDMA2 1
+
+#define MT8195_VDO1_MERGE0_ASYNC_SOUT_SEL 0xf40
+#define MT8195_SOUT_TO_MIXER_IN1_SEL 1
+
+#define MT8195_VDO1_MERGE1_ASYNC_SOUT_SEL 0xf44
+#define MT8195_SOUT_TO_MIXER_IN2_SEL 1
+
+#define MT8195_VDO1_MERGE2_ASYNC_SOUT_SEL 0xf48
+#define MT8195_SOUT_TO_MIXER_IN3_SEL 1
+
+#define MT8195_VDO1_MERGE3_ASYNC_SOUT_SEL 0xf4c
+#define MT8195_SOUT_TO_MIXER_IN4_SEL 1
+
+#define MT8195_VDO1_MERGE4_ASYNC_SEL_IN 0xf50
+#define MT8195_MERGE4_ASYNC_SEL_IN_FROM_MIXER_OUT_SOUT 1
+
+#define MT8195_VDO1_MIXER_IN1_SOUT_SEL 0xf58
+#define MT8195_MIXER_IN1_SOUT_TO_DISP_MIXER 0
+
+#define MT8195_VDO1_MIXER_IN2_SOUT_SEL 0xf5c
+#define MT8195_MIXER_IN2_SOUT_TO_DISP_MIXER 0
+
+#define MT8195_VDO1_MIXER_IN3_SOUT_SEL 0xf60
+#define MT8195_MIXER_IN3_SOUT_TO_DISP_MIXER 0
+
+#define MT8195_VDO1_MIXER_IN4_SOUT_SEL 0xf64
+#define MT8195_MIXER_IN4_SOUT_TO_DISP_MIXER 0
+
+#define MT8195_VDO1_MIXER_SOUT_SEL_IN 0xf68
+#define MT8195_MIXER_SOUT_SEL_IN_FROM_DISP_MIXER 0
+
static const struct mtk_mmsys_routes mmsys_mt8195_routing_table[] = {
{
DDP_COMPONENT_OVL0, DDP_COMPONENT_RDMA0,
@@ -367,4 +431,79 @@ static const struct mtk_mmsys_routes mmsys_mt8195_routing_table[] = {
}
};
+static const struct mtk_mmsys_routes mmsys_mt8195_vdo1_routing_table[] = {
+ {
+ DDP_COMPONENT_MDP_RDMA0, DDP_COMPONENT_MERGE1,
+ MT8195_VDO1_VPP_MERGE0_P0_SEL_IN, GENMASK(0, 0),
+ MT8195_VPP_MERGE0_P0_SEL_IN_FROM_MDP_RDMA0
+ }, {
+ DDP_COMPONENT_MDP_RDMA1, DDP_COMPONENT_MERGE1,
+ MT8195_VDO1_VPP_MERGE0_P1_SEL_IN, GENMASK(0, 0),
+ MT8195_VPP_MERGE0_P1_SEL_IN_FROM_MDP_RDMA1
+ }, {
+ DDP_COMPONENT_MDP_RDMA2, DDP_COMPONENT_MERGE2,
+ MT8195_VDO1_VPP_MERGE1_P0_SEL_IN, GENMASK(0, 0),
+ MT8195_VPP_MERGE1_P0_SEL_IN_FROM_MDP_RDMA2
+ }, {
+ DDP_COMPONENT_MERGE1, DDP_COMPONENT_ETHDR_MIXER,
+ MT8195_VDO1_MERGE0_ASYNC_SOUT_SEL, GENMASK(1, 0),
+ MT8195_SOUT_TO_MIXER_IN1_SEL
+ }, {
+ DDP_COMPONENT_MERGE2, DDP_COMPONENT_ETHDR_MIXER,
+ MT8195_VDO1_MERGE1_ASYNC_SOUT_SEL, GENMASK(1, 0),
+ MT8195_SOUT_TO_MIXER_IN2_SEL
+ }, {
+ DDP_COMPONENT_MERGE3, DDP_COMPONENT_ETHDR_MIXER,
+ MT8195_VDO1_MERGE2_ASYNC_SOUT_SEL, GENMASK(1, 0),
+ MT8195_SOUT_TO_MIXER_IN3_SEL
+ }, {
+ DDP_COMPONENT_MERGE4, DDP_COMPONENT_ETHDR_MIXER,
+ MT8195_VDO1_MERGE3_ASYNC_SOUT_SEL, GENMASK(1, 0),
+ MT8195_SOUT_TO_MIXER_IN4_SEL
+ }, {
+ DDP_COMPONENT_ETHDR_MIXER, DDP_COMPONENT_MERGE5,
+ MT8195_VDO1_MIXER_OUT_SOUT_SEL, GENMASK(0, 0),
+ MT8195_MIXER_SOUT_TO_MERGE4_ASYNC_SEL
+ }, {
+ DDP_COMPONENT_MERGE1, DDP_COMPONENT_ETHDR_MIXER,
+ MT8195_VDO1_MIXER_IN1_SEL_IN, GENMASK(0, 0),
+ MT8195_MIXER_IN1_SEL_IN_FROM_MERGE0_ASYNC_SOUT
+ }, {
+ DDP_COMPONENT_MERGE2, DDP_COMPONENT_ETHDR_MIXER,
+ MT8195_VDO1_MIXER_IN2_SEL_IN, GENMASK(0, 0),
+ MT8195_MIXER_IN2_SEL_IN_FROM_MERGE1_ASYNC_SOUT
+ }, {
+ DDP_COMPONENT_MERGE3, DDP_COMPONENT_ETHDR_MIXER,
+ MT8195_VDO1_MIXER_IN3_SEL_IN, GENMASK(0, 0),
+ MT8195_MIXER_IN3_SEL_IN_FROM_MERGE2_ASYNC_SOUT
+ }, {
+ DDP_COMPONENT_MERGE4, DDP_COMPONENT_ETHDR_MIXER,
+ MT8195_VDO1_MIXER_IN4_SEL_IN, GENMASK(0, 0),
+ MT8195_MIXER_IN4_SEL_IN_FROM_MERGE3_ASYNC_SOUT
+ }, {
+ DDP_COMPONENT_ETHDR_MIXER, DDP_COMPONENT_MERGE5,
+ MT8195_VDO1_MIXER_SOUT_SEL_IN, GENMASK(2, 0),
+ MT8195_MIXER_SOUT_SEL_IN_FROM_DISP_MIXER
+ }, {
+ DDP_COMPONENT_ETHDR_MIXER, DDP_COMPONENT_MERGE5,
+ MT8195_VDO1_MERGE4_ASYNC_SEL_IN, GENMASK(2, 0),
+ MT8195_MERGE4_ASYNC_SEL_IN_FROM_MIXER_OUT_SOUT
+ }, {
+ DDP_COMPONENT_MERGE5, DDP_COMPONENT_DPI1,
+ MT8195_VDO1_DISP_DPI1_SEL_IN, GENMASK(1, 0),
+ MT8195_DISP_DPI1_SEL_IN_FROM_VPP_MERGE4_MOUT
+ }, {
+ DDP_COMPONENT_MERGE5, DDP_COMPONENT_DPI1,
+ MT8195_VDO1_MERGE4_SOUT_SEL, GENMASK(1, 0),
+ MT8195_MERGE4_SOUT_TO_DPI1_SEL
+ }, {
+ DDP_COMPONENT_MERGE5, DDP_COMPONENT_DP_INTF1,
+ MT8195_VDO1_DISP_DP_INTF0_SEL_IN, GENMASK(1, 0),
+ MT8195_DISP_DP_INTF0_SEL_IN_FROM_VPP_MERGE4_MOUT
+ }, {
+ DDP_COMPONENT_MERGE5, DDP_COMPONENT_DP_INTF1,
+ MT8195_VDO1_MERGE4_SOUT_SEL, GENMASK(1, 0),
+ MT8195_MERGE4_SOUT_TO_DP_INTF0_SEL
+ }
+};
#endif /* __SOC_MEDIATEK_MT8195_MMSYS_H */
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index 06d8e83a2cb5..a74c86197d6a 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -147,6 +147,8 @@ static const struct mtk_mmsys_driver_data mt8195_vdosys0_driver_data = {
static const struct mtk_mmsys_driver_data mt8195_vdosys1_driver_data = {
.io_start = 0x1c100000,
.clk_driver = "clk-mt8195-vdo1",
+ .routes = mmsys_mt8195_vdo1_routing_table,
+ .num_routes = ARRAY_SIZE(mmsys_mt8195_vdo1_routing_table),
};
static const struct mtk_mmsys_match_data mt8195_mmsys_match_data = {
--
2.18.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v26 04/10] soc: mediatek: add mtk_mmsys_update_bits API
2022-08-19 6:10 [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
` (2 preceding siblings ...)
2022-08-19 6:10 ` [PATCH v26 03/10] soc: mediatek: add mtk-mmsys support for mt8195 vdosys1 Nancy.Lin
@ 2022-08-19 6:10 ` Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 05/10] soc: mediatek: add mtk-mmsys config API for mt8195 vdosys1 Nancy.Lin
` (5 subsequent siblings)
9 siblings, 0 replies; 17+ messages in thread
From: Nancy.Lin @ 2022-08-19 6:10 UTC (permalink / raw)
To: Rob Herring, Matthias Brugger, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
Nancy . Lin, jason-jh . lin, Yongqiang Niu, devicetree,
linux-kernel, linux-arm-kernel, linux-mediatek, dri-devel, llvm,
singo.chang, Project_Global_Chrome_Upstream_Group
Add mtk_mmsys_update_bits API. Simplify code for update mmsys reg.
It is a preparation for adding support for mmsys config API.
Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
---
drivers/soc/mediatek/mtk-mmsys.c | 36 ++++++++++++++------------------
1 file changed, 16 insertions(+), 20 deletions(-)
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index a74c86197d6a..b7c7cd469343 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -192,22 +192,27 @@ static int mtk_mmsys_find_match_drvdata(struct mtk_mmsys *mmsys,
return -EINVAL;
}
+static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
+{
+ u32 tmp;
+
+ tmp = readl_relaxed(mmsys->regs + offset);
+ tmp = (tmp & ~mask) | val;
+ writel_relaxed(tmp, mmsys->regs + offset);
+}
+
void mtk_mmsys_ddp_connect(struct device *dev,
enum mtk_ddp_comp_id cur,
enum mtk_ddp_comp_id next)
{
struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
const struct mtk_mmsys_routes *routes = mmsys->data->routes;
- u32 reg;
int i;
for (i = 0; i < mmsys->data->num_routes; i++)
- if (cur == routes[i].from_comp && next == routes[i].to_comp) {
- reg = readl_relaxed(mmsys->regs + routes[i].addr);
- reg &= ~routes[i].mask;
- reg |= routes[i].val;
- writel_relaxed(reg, mmsys->regs + routes[i].addr);
- }
+ if (cur == routes[i].from_comp && next == routes[i].to_comp)
+ mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask,
+ routes[i].val);
}
EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_connect);
@@ -217,15 +222,11 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
{
struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
const struct mtk_mmsys_routes *routes = mmsys->data->routes;
- u32 reg;
int i;
for (i = 0; i < mmsys->data->num_routes; i++)
- if (cur == routes[i].from_comp && next == routes[i].to_comp) {
- reg = readl_relaxed(mmsys->regs + routes[i].addr);
- reg &= ~routes[i].mask;
- writel_relaxed(reg, mmsys->regs + routes[i].addr);
- }
+ if (cur == routes[i].from_comp && next == routes[i].to_comp)
+ mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask, 0);
}
EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_disconnect);
@@ -234,18 +235,13 @@ static int mtk_mmsys_reset_update(struct reset_controller_dev *rcdev, unsigned l
{
struct mtk_mmsys *mmsys = container_of(rcdev, struct mtk_mmsys, rcdev);
unsigned long flags;
- u32 reg;
spin_lock_irqsave(&mmsys->lock, flags);
- reg = readl_relaxed(mmsys->regs + mmsys->data->sw0_rst_offset);
-
if (assert)
- reg &= ~BIT(id);
+ mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), 0);
else
- reg |= BIT(id);
-
- writel_relaxed(reg, mmsys->regs + mmsys->data->sw0_rst_offset);
+ mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), BIT(id));
spin_unlock_irqrestore(&mmsys->lock, flags);
--
2.18.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v26 05/10] soc: mediatek: add mtk-mmsys config API for mt8195 vdosys1
2022-08-19 6:10 [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
` (3 preceding siblings ...)
2022-08-19 6:10 ` [PATCH v26 04/10] soc: mediatek: add mtk_mmsys_update_bits API Nancy.Lin
@ 2022-08-19 6:10 ` Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 06/10] soc: mediatek: add cmdq support of " Nancy.Lin
` (4 subsequent siblings)
9 siblings, 0 replies; 17+ messages in thread
From: Nancy.Lin @ 2022-08-19 6:10 UTC (permalink / raw)
To: Rob Herring, Matthias Brugger, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
Nancy . Lin, jason-jh . lin, Yongqiang Niu, devicetree,
linux-kernel, linux-arm-kernel, linux-mediatek, dri-devel, llvm,
singo.chang, Project_Global_Chrome_Upstream_Group
Add four mmsys config APIs. The config APIs are used for config
mmsys reg. Some mmsys regs need to be set according to the
HW engine binding to the mmsys simultaneously.
1. mtk_mmsys_merge_async_config: config merge async width/height.
async is used for cross-clock domain synchronization.
2. mtk_mmsys_hdr_confing: config hdr backend async width/height.
3. mtk_mmsys_mixer_in_config and mtk_mmsys_mixer_in_config:
config mixer related settings.
Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
---
drivers/soc/mediatek/mt8195-mmsys.h | 6 +++++
drivers/soc/mediatek/mtk-mmsys.c | 35 ++++++++++++++++++++++++++
include/linux/soc/mediatek/mtk-mmsys.h | 9 +++++++
3 files changed, 50 insertions(+)
diff --git a/drivers/soc/mediatek/mt8195-mmsys.h b/drivers/soc/mediatek/mt8195-mmsys.h
index fd7b455bd675..454944a9409c 100644
--- a/drivers/soc/mediatek/mt8195-mmsys.h
+++ b/drivers/soc/mediatek/mt8195-mmsys.h
@@ -75,6 +75,12 @@
#define MT8195_SOUT_DSC_WRAP1_OUT_TO_SINA_VIRTUAL0 (2 << 16)
#define MT8195_SOUT_DSC_WRAP1_OUT_TO_VPP_MERGE (3 << 16)
+#define MT8195_VDO1_MERGE0_ASYNC_CFG_WD 0xe30
+#define MT8195_VDO1_HDRBE_ASYNC_CFG_WD 0xe70
+#define MT8195_VDO1_HDR_TOP_CFG 0xd00
+#define MT8195_VDO1_MIXER_IN1_ALPHA 0xd30
+#define MT8195_VDO1_MIXER_IN1_PAD 0xd40
+
#define MT8195_VDO1_VPP_MERGE0_P0_SEL_IN 0xf04
#define MT8195_VPP_MERGE0_P0_SEL_IN_FROM_MDP_RDMA0 1
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index b7c7cd469343..48d5e5d1d0a1 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -230,6 +230,41 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
}
EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_disconnect);
+void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width, int height)
+{
+ mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_MERGE0_ASYNC_CFG_WD + 0x10 * idx,
+ ~0, height << 16 | width);
+}
+EXPORT_SYMBOL_GPL(mtk_mmsys_merge_async_config);
+
+void mtk_mmsys_hdr_confing(struct device *dev, int be_width, int be_height)
+{
+ mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_HDRBE_ASYNC_CFG_WD, ~0,
+ be_height << 16 | be_width);
+}
+EXPORT_SYMBOL_GPL(mtk_mmsys_hdr_confing);
+
+void mtk_mmsys_mixer_in_config(struct device *dev, int idx, bool alpha_sel, u16 alpha,
+ u8 mode, u32 biwidth)
+{
+ struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
+
+ mtk_mmsys_update_bits(mmsys, MT8195_VDO1_MIXER_IN1_ALPHA + (idx - 1) * 4, ~0,
+ alpha << 16 | alpha);
+ mtk_mmsys_update_bits(mmsys, MT8195_VDO1_HDR_TOP_CFG, BIT(19 + idx),
+ alpha_sel << (19 + idx));
+ mtk_mmsys_update_bits(mmsys, MT8195_VDO1_MIXER_IN1_PAD + (idx - 1) * 4,
+ GENMASK(31, 16) | GENMASK(1, 0), biwidth << 16 | mode);
+}
+EXPORT_SYMBOL_GPL(mtk_mmsys_mixer_in_config);
+
+void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap)
+{
+ mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_MIXER_IN1_PAD + (idx - 1) * 4,
+ BIT(4), channel_swap << 4);
+}
+EXPORT_SYMBOL_GPL(mtk_mmsys_mixer_in_channel_swap);
+
static int mtk_mmsys_reset_update(struct reset_controller_dev *rcdev, unsigned long id,
bool assert)
{
diff --git a/include/linux/soc/mediatek/mtk-mmsys.h b/include/linux/soc/mediatek/mtk-mmsys.h
index 321ac8e33a69..74aab1fc570d 100644
--- a/include/linux/soc/mediatek/mtk-mmsys.h
+++ b/include/linux/soc/mediatek/mtk-mmsys.h
@@ -74,4 +74,13 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
enum mtk_ddp_comp_id cur,
enum mtk_ddp_comp_id next);
+void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width, int height);
+
+void mtk_mmsys_hdr_confing(struct device *dev, int be_width, int be_height);
+
+void mtk_mmsys_mixer_in_config(struct device *dev, int idx, bool alpha_sel, u16 alpha,
+ u8 mode, u32 biwidth);
+
+void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap);
+
#endif /* __MTK_MMSYS_H */
--
2.18.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v26 06/10] soc: mediatek: add cmdq support of mtk-mmsys config API for mt8195 vdosys1
2022-08-19 6:10 [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
` (4 preceding siblings ...)
2022-08-19 6:10 ` [PATCH v26 05/10] soc: mediatek: add mtk-mmsys config API for mt8195 vdosys1 Nancy.Lin
@ 2022-08-19 6:10 ` Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 07/10] soc: mediatek: mmsys: add mmsys for support 64 reset bits Nancy.Lin
` (3 subsequent siblings)
9 siblings, 0 replies; 17+ messages in thread
From: Nancy.Lin @ 2022-08-19 6:10 UTC (permalink / raw)
To: Rob Herring, Matthias Brugger, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
Nancy . Lin, jason-jh . lin, Yongqiang Niu, devicetree,
linux-kernel, linux-arm-kernel, linux-mediatek, dri-devel, llvm,
singo.chang, Project_Global_Chrome_Upstream_Group
Add cmdq support for mtk-mmsys config API.
The mmsys config register settings need to take effect with the other
HW settings(like OVL_ADAPTOR...) at the same vblanking time.
If we use CPU to write the mmsys reg, we can't guarantee all the
settings can be written in the same vblanking time.
Cmdq is used for this purpose. We prepare all the related HW settings
in one cmdq packet. The first command in the packet is "wait stream done",
and then following with all the HW settings. After the cmdq packet is
flush to GCE HW. The GCE waits for the "stream done event" to coming
and then starts flushing all the HW settings. This can guarantee all
the settings flush in the same vblanking.
Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
---
drivers/soc/mediatek/mtk-mmsys.c | 54 +++++++++++++++++++-------
include/linux/soc/mediatek/mtk-mmsys.h | 15 +++++--
2 files changed, 50 insertions(+), 19 deletions(-)
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index 48d5e5d1d0a1..999be064103b 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -178,6 +178,7 @@ struct mtk_mmsys {
spinlock_t lock; /* protects mmsys_sw_rst_b reg */
struct reset_controller_dev rcdev;
phys_addr_t io_start;
+ struct cmdq_client_reg cmdq_base;
};
static int mtk_mmsys_find_match_drvdata(struct mtk_mmsys *mmsys,
@@ -192,10 +193,24 @@ static int mtk_mmsys_find_match_drvdata(struct mtk_mmsys *mmsys,
return -EINVAL;
}
-static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
+static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val,
+ struct cmdq_pkt *cmdq_pkt)
{
u32 tmp;
+#if IS_REACHABLE(CONFIG_MTK_CMDQ)
+ if (cmdq_pkt) {
+ if (mmsys->cmdq_base.size == 0) {
+ pr_err("mmsys lose gce property, failed to update mmsys bits with cmdq");
+ return;
+ }
+ cmdq_pkt_write_mask(cmdq_pkt, mmsys->cmdq_base.subsys,
+ mmsys->cmdq_base.offset + offset, val,
+ mask);
+ return;
+ }
+#endif
+
tmp = readl_relaxed(mmsys->regs + offset);
tmp = (tmp & ~mask) | val;
writel_relaxed(tmp, mmsys->regs + offset);
@@ -212,7 +227,7 @@ void mtk_mmsys_ddp_connect(struct device *dev,
for (i = 0; i < mmsys->data->num_routes; i++)
if (cur == routes[i].from_comp && next == routes[i].to_comp)
mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask,
- routes[i].val);
+ routes[i].val, NULL);
}
EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_connect);
@@ -226,42 +241,45 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
for (i = 0; i < mmsys->data->num_routes; i++)
if (cur == routes[i].from_comp && next == routes[i].to_comp)
- mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask, 0);
+ mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask, 0, NULL);
}
EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_disconnect);
-void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width, int height)
+void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width, int height,
+ struct cmdq_pkt *cmdq_pkt)
{
mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_MERGE0_ASYNC_CFG_WD + 0x10 * idx,
- ~0, height << 16 | width);
+ ~0, height << 16 | width, cmdq_pkt);
}
EXPORT_SYMBOL_GPL(mtk_mmsys_merge_async_config);
-void mtk_mmsys_hdr_confing(struct device *dev, int be_width, int be_height)
+void mtk_mmsys_hdr_confing(struct device *dev, int be_width, int be_height,
+ struct cmdq_pkt *cmdq_pkt)
{
mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_HDRBE_ASYNC_CFG_WD, ~0,
- be_height << 16 | be_width);
+ be_height << 16 | be_width, cmdq_pkt);
}
EXPORT_SYMBOL_GPL(mtk_mmsys_hdr_confing);
void mtk_mmsys_mixer_in_config(struct device *dev, int idx, bool alpha_sel, u16 alpha,
- u8 mode, u32 biwidth)
+ u8 mode, u32 biwidth, struct cmdq_pkt *cmdq_pkt)
{
struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
mtk_mmsys_update_bits(mmsys, MT8195_VDO1_MIXER_IN1_ALPHA + (idx - 1) * 4, ~0,
- alpha << 16 | alpha);
+ alpha << 16 | alpha, cmdq_pkt);
mtk_mmsys_update_bits(mmsys, MT8195_VDO1_HDR_TOP_CFG, BIT(19 + idx),
- alpha_sel << (19 + idx));
+ alpha_sel << (19 + idx), cmdq_pkt);
mtk_mmsys_update_bits(mmsys, MT8195_VDO1_MIXER_IN1_PAD + (idx - 1) * 4,
- GENMASK(31, 16) | GENMASK(1, 0), biwidth << 16 | mode);
+ GENMASK(31, 16) | GENMASK(1, 0), biwidth << 16 | mode, cmdq_pkt);
}
EXPORT_SYMBOL_GPL(mtk_mmsys_mixer_in_config);
-void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap)
+void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap,
+ struct cmdq_pkt *cmdq_pkt)
{
mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_MIXER_IN1_PAD + (idx - 1) * 4,
- BIT(4), channel_swap << 4);
+ BIT(4), channel_swap << 4, cmdq_pkt);
}
EXPORT_SYMBOL_GPL(mtk_mmsys_mixer_in_channel_swap);
@@ -274,9 +292,9 @@ static int mtk_mmsys_reset_update(struct reset_controller_dev *rcdev, unsigned l
spin_lock_irqsave(&mmsys->lock, flags);
if (assert)
- mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), 0);
+ mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), 0, NULL);
else
- mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), BIT(id));
+ mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), BIT(id), NULL);
spin_unlock_irqrestore(&mmsys->lock, flags);
@@ -366,6 +384,12 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
mmsys->data = match_data->drv_data[0];
}
+#if IS_REACHABLE(CONFIG_MTK_CMDQ)
+ ret = cmdq_dev_get_client_reg(dev, &mmsys->cmdq_base, 0);
+ if (ret)
+ dev_dbg(dev, "No mediatek,gce-client-reg!\n");
+#endif
+
platform_set_drvdata(pdev, mmsys);
clks = platform_device_register_data(&pdev->dev, mmsys->data->clk_driver,
diff --git a/include/linux/soc/mediatek/mtk-mmsys.h b/include/linux/soc/mediatek/mtk-mmsys.h
index 74aab1fc570d..343e093f0fc3 100644
--- a/include/linux/soc/mediatek/mtk-mmsys.h
+++ b/include/linux/soc/mediatek/mtk-mmsys.h
@@ -6,6 +6,10 @@
#ifndef __MTK_MMSYS_H
#define __MTK_MMSYS_H
+#include <linux/mailbox_controller.h>
+#include <linux/mailbox/mtk-cmdq-mailbox.h>
+#include <linux/soc/mediatek/mtk-cmdq.h>
+
enum mtk_ddp_comp_id;
struct device;
@@ -74,13 +78,16 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
enum mtk_ddp_comp_id cur,
enum mtk_ddp_comp_id next);
-void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width, int height);
+void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width,
+ int height, struct cmdq_pkt *cmdq_pkt);
-void mtk_mmsys_hdr_confing(struct device *dev, int be_width, int be_height);
+void mtk_mmsys_hdr_confing(struct device *dev, int be_width, int be_height,
+ struct cmdq_pkt *cmdq_pkt);
void mtk_mmsys_mixer_in_config(struct device *dev, int idx, bool alpha_sel, u16 alpha,
- u8 mode, u32 biwidth);
+ u8 mode, u32 biwidth, struct cmdq_pkt *cmdq_pkt);
-void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap);
+void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap,
+ struct cmdq_pkt *cmdq_pkt);
#endif /* __MTK_MMSYS_H */
--
2.18.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v26 07/10] soc: mediatek: mmsys: add mmsys for support 64 reset bits
2022-08-19 6:10 [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
` (5 preceding siblings ...)
2022-08-19 6:10 ` [PATCH v26 06/10] soc: mediatek: add cmdq support of " Nancy.Lin
@ 2022-08-19 6:10 ` Nancy.Lin
2022-08-23 10:20 ` Matthias Brugger
2022-08-19 6:10 ` [PATCH v26 08/10] soc: mediatek: mmsys: add reset control for MT8195 vdosys1 Nancy.Lin
` (2 subsequent siblings)
9 siblings, 1 reply; 17+ messages in thread
From: Nancy.Lin @ 2022-08-19 6:10 UTC (permalink / raw)
To: Rob Herring, Matthias Brugger, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
Nancy . Lin, jason-jh . lin, Yongqiang Niu, devicetree,
linux-kernel, linux-arm-kernel, linux-mediatek, dri-devel, llvm,
singo.chang, Project_Global_Chrome_Upstream_Group
Add mmsys for support 64 reset bits. It is a preparation for MT8195
vdosys1 HW reset. MT8195 vdosys1 has more than 32 reset bits.
1. Add the number of reset bits in mmsys private data
2. move the whole "reset register code section" behind the
"get mmsys->data" code section for getting the num_resets in mmsys->data.
Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
---
drivers/soc/mediatek/mtk-mmsys.c | 40 +++++++++++++++++++++-----------
drivers/soc/mediatek/mtk-mmsys.h | 1 +
2 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index 999be064103b..20ae751ad8a7 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -20,6 +20,8 @@
#include "mt8195-mmsys.h"
#include "mt8365-mmsys.h"
+#define MMSYS_SW_RESET_PER_REG 32
+
static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = {
.clk_driver = "clk-mt2701-mm",
.routes = mmsys_default_routing_table,
@@ -86,6 +88,7 @@ static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = {
.routes = mmsys_default_routing_table,
.num_routes = ARRAY_SIZE(mmsys_default_routing_table),
.sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
+ .num_resets = 32,
};
static const struct mtk_mmsys_match_data mt8173_mmsys_match_data = {
@@ -100,6 +103,7 @@ static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
.routes = mmsys_mt8183_routing_table,
.num_routes = ARRAY_SIZE(mmsys_mt8183_routing_table),
.sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
+ .num_resets = 32,
};
static const struct mtk_mmsys_match_data mt8183_mmsys_match_data = {
@@ -114,6 +118,7 @@ static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
.routes = mmsys_mt8186_routing_table,
.num_routes = ARRAY_SIZE(mmsys_mt8186_routing_table),
.sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
+ .num_resets = 32,
};
static const struct mtk_mmsys_match_data mt8186_mmsys_match_data = {
@@ -128,6 +133,7 @@ static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
.routes = mmsys_mt8192_routing_table,
.num_routes = ARRAY_SIZE(mmsys_mt8192_routing_table),
.sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
+ .num_resets = 32,
};
static const struct mtk_mmsys_match_data mt8192_mmsys_match_data = {
@@ -288,13 +294,19 @@ static int mtk_mmsys_reset_update(struct reset_controller_dev *rcdev, unsigned l
{
struct mtk_mmsys *mmsys = container_of(rcdev, struct mtk_mmsys, rcdev);
unsigned long flags;
+ u32 offset;
+ u32 reg;
+
+ offset = (id / MMSYS_SW_RESET_PER_REG) * sizeof(u32);
+ id = id % MMSYS_SW_RESET_PER_REG;
+ reg = mmsys->data->sw0_rst_offset + offset;
spin_lock_irqsave(&mmsys->lock, flags);
if (assert)
- mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), 0, NULL);
+ mtk_mmsys_update_bits(mmsys, reg, BIT(id), 0, NULL);
else
- mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), BIT(id), NULL);
+ mtk_mmsys_update_bits(mmsys, reg, BIT(id), BIT(id), NULL);
spin_unlock_irqrestore(&mmsys->lock, flags);
@@ -351,18 +363,6 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
return ret;
}
- spin_lock_init(&mmsys->lock);
-
- mmsys->rcdev.owner = THIS_MODULE;
- mmsys->rcdev.nr_resets = 32;
- mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
- mmsys->rcdev.of_node = pdev->dev.of_node;
- ret = devm_reset_controller_register(&pdev->dev, &mmsys->rcdev);
- if (ret) {
- dev_err(&pdev->dev, "Couldn't register mmsys reset controller: %d\n", ret);
- return ret;
- }
-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_err(dev, "Couldn't get mmsys resource\n");
@@ -384,6 +384,18 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
mmsys->data = match_data->drv_data[0];
}
+ spin_lock_init(&mmsys->lock);
+
+ mmsys->rcdev.owner = THIS_MODULE;
+ mmsys->rcdev.nr_resets = mmsys->data->num_resets;
+ mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
+ mmsys->rcdev.of_node = pdev->dev.of_node;
+ ret = devm_reset_controller_register(&pdev->dev, &mmsys->rcdev);
+ if (ret) {
+ dev_err(&pdev->dev, "Couldn't register mmsys reset controller: %d\n", ret);
+ return ret;
+ }
+
#if IS_REACHABLE(CONFIG_MTK_CMDQ)
ret = cmdq_dev_get_client_reg(dev, &mmsys->cmdq_base, 0);
if (ret)
diff --git a/drivers/soc/mediatek/mtk-mmsys.h b/drivers/soc/mediatek/mtk-mmsys.h
index f01ba206481d..20a271b80b3b 100644
--- a/drivers/soc/mediatek/mtk-mmsys.h
+++ b/drivers/soc/mediatek/mtk-mmsys.h
@@ -92,6 +92,7 @@ struct mtk_mmsys_driver_data {
const struct mtk_mmsys_routes *routes;
const unsigned int num_routes;
const u16 sw0_rst_offset;
+ const u32 num_resets;
};
struct mtk_mmsys_match_data {
--
2.18.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v26 08/10] soc: mediatek: mmsys: add reset control for MT8195 vdosys1
2022-08-19 6:10 [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
` (6 preceding siblings ...)
2022-08-19 6:10 ` [PATCH v26 07/10] soc: mediatek: mmsys: add mmsys for support 64 reset bits Nancy.Lin
@ 2022-08-19 6:10 ` Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 09/10] soc: mediatek: add mtk-mutex component - dp_intf1 Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 10/10] soc: mediatek: add mtk-mutex support for mt8195 vdosys1 Nancy.Lin
9 siblings, 0 replies; 17+ messages in thread
From: Nancy.Lin @ 2022-08-19 6:10 UTC (permalink / raw)
To: Rob Herring, Matthias Brugger, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
Nancy . Lin, jason-jh . lin, Yongqiang Niu, devicetree,
linux-kernel, linux-arm-kernel, linux-mediatek, dri-devel, llvm,
singo.chang, Project_Global_Chrome_Upstream_Group
MT8195 vdosys1 has more than 32 reset bits and a different reset base
than other chips. Add the number of reset bits and reset base in mmsys
private data.
Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
---
drivers/soc/mediatek/mt8195-mmsys.h | 1 +
drivers/soc/mediatek/mtk-mmsys.c | 2 ++
2 files changed, 3 insertions(+)
diff --git a/drivers/soc/mediatek/mt8195-mmsys.h b/drivers/soc/mediatek/mt8195-mmsys.h
index 454944a9409c..a6652ae63431 100644
--- a/drivers/soc/mediatek/mt8195-mmsys.h
+++ b/drivers/soc/mediatek/mt8195-mmsys.h
@@ -75,6 +75,7 @@
#define MT8195_SOUT_DSC_WRAP1_OUT_TO_SINA_VIRTUAL0 (2 << 16)
#define MT8195_SOUT_DSC_WRAP1_OUT_TO_VPP_MERGE (3 << 16)
+#define MT8195_VDO1_SW0_RST_B 0x1d0
#define MT8195_VDO1_MERGE0_ASYNC_CFG_WD 0xe30
#define MT8195_VDO1_HDRBE_ASYNC_CFG_WD 0xe70
#define MT8195_VDO1_HDR_TOP_CFG 0xd00
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index 20ae751ad8a7..87f63406d6b8 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -155,6 +155,8 @@ static const struct mtk_mmsys_driver_data mt8195_vdosys1_driver_data = {
.clk_driver = "clk-mt8195-vdo1",
.routes = mmsys_mt8195_vdo1_routing_table,
.num_routes = ARRAY_SIZE(mmsys_mt8195_vdo1_routing_table),
+ .sw0_rst_offset = MT8195_VDO1_SW0_RST_B,
+ .num_resets = 64,
};
static const struct mtk_mmsys_match_data mt8195_mmsys_match_data = {
--
2.18.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v26 09/10] soc: mediatek: add mtk-mutex component - dp_intf1
2022-08-19 6:10 [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
` (7 preceding siblings ...)
2022-08-19 6:10 ` [PATCH v26 08/10] soc: mediatek: mmsys: add reset control for MT8195 vdosys1 Nancy.Lin
@ 2022-08-19 6:10 ` Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 10/10] soc: mediatek: add mtk-mutex support for mt8195 vdosys1 Nancy.Lin
9 siblings, 0 replies; 17+ messages in thread
From: Nancy.Lin @ 2022-08-19 6:10 UTC (permalink / raw)
To: Rob Herring, Matthias Brugger, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
Nancy . Lin, jason-jh . lin, Yongqiang Niu, devicetree,
linux-kernel, linux-arm-kernel, linux-mediatek, dri-devel, llvm,
singo.chang, Project_Global_Chrome_Upstream_Group
Add mtk-mutex DDP_COMPONENT_DP_INTF1 component. The MT8195 vdosys1 path
component contains ovl_adaptor, merge5, and dp_intf1. It is a preparation
for adding support for MT8195 vdosys1 path component.
Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
---
drivers/soc/mediatek/mtk-mutex.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index 5ea43de4e410..c1f0532a50e5 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -562,6 +562,9 @@ void mtk_mutex_add_comp(struct mtk_mutex *mutex,
case DDP_COMPONENT_DP_INTF0:
sof_id = MUTEX_SOF_DP_INTF0;
break;
+ case DDP_COMPONENT_DP_INTF1:
+ sof_id = MUTEX_SOF_DP_INTF1;
+ break;
default:
if (mtx->data->mutex_mod[id] < 32) {
offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg,
@@ -602,6 +605,7 @@ void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
case DDP_COMPONENT_DPI0:
case DDP_COMPONENT_DPI1:
case DDP_COMPONENT_DP_INTF0:
+ case DDP_COMPONENT_DP_INTF1:
writel_relaxed(MUTEX_SOF_SINGLE_MODE,
mtx->regs +
DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg,
--
2.18.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v26 10/10] soc: mediatek: add mtk-mutex support for mt8195 vdosys1
2022-08-19 6:10 [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
` (8 preceding siblings ...)
2022-08-19 6:10 ` [PATCH v26 09/10] soc: mediatek: add mtk-mutex component - dp_intf1 Nancy.Lin
@ 2022-08-19 6:10 ` Nancy.Lin
9 siblings, 0 replies; 17+ messages in thread
From: Nancy.Lin @ 2022-08-19 6:10 UTC (permalink / raw)
To: Rob Herring, Matthias Brugger, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
Nancy . Lin, jason-jh . lin, Yongqiang Niu, devicetree,
linux-kernel, linux-arm-kernel, linux-mediatek, dri-devel, llvm,
singo.chang, Project_Global_Chrome_Upstream_Group
Add mtk-mutex support for mt8195 vdosys1.
The vdosys1 path component contains ovl_adaptor, merge5,
and dp_intf1. Ovl_adaptor is composed of several sub-elements
which include MDP_RDMA0~7, MERGE0~3, and ETHDR.
Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
---
drivers/soc/mediatek/mtk-mutex.c | 33 ++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index c1f0532a50e5..4fb746f6010e 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -121,6 +121,24 @@
#define MT8195_MUTEX_MOD_DISP_DP_INTF0 21
#define MT8195_MUTEX_MOD_DISP_PWM0 27
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA0 0
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA1 1
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA2 2
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA3 3
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA4 4
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA5 5
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA6 6
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA7 7
+#define MT8195_MUTEX_MOD_DISP1_VPP_MERGE0 8
+#define MT8195_MUTEX_MOD_DISP1_VPP_MERGE1 9
+#define MT8195_MUTEX_MOD_DISP1_VPP_MERGE2 10
+#define MT8195_MUTEX_MOD_DISP1_VPP_MERGE3 11
+#define MT8195_MUTEX_MOD_DISP1_VPP_MERGE4 12
+#define MT8195_MUTEX_MOD_DISP1_DISP_MIXER 18
+#define MT8195_MUTEX_MOD_DISP1_DPI0 25
+#define MT8195_MUTEX_MOD_DISP1_DPI1 26
+#define MT8195_MUTEX_MOD_DISP1_DP_INTF0 27
+
#define MT8365_MUTEX_MOD_DISP_OVL0 7
#define MT8365_MUTEX_MOD_DISP_OVL0_2L 8
#define MT8365_MUTEX_MOD_DISP_RDMA0 9
@@ -352,6 +370,21 @@ static const unsigned int mt8195_mutex_mod[DDP_COMPONENT_ID_MAX] = {
[DDP_COMPONENT_DSI0] = MT8195_MUTEX_MOD_DISP_DSI0,
[DDP_COMPONENT_PWM0] = MT8195_MUTEX_MOD_DISP_PWM0,
[DDP_COMPONENT_DP_INTF0] = MT8195_MUTEX_MOD_DISP_DP_INTF0,
+ [DDP_COMPONENT_MDP_RDMA0] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA0,
+ [DDP_COMPONENT_MDP_RDMA1] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA1,
+ [DDP_COMPONENT_MDP_RDMA2] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA2,
+ [DDP_COMPONENT_MDP_RDMA3] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA3,
+ [DDP_COMPONENT_MDP_RDMA4] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA4,
+ [DDP_COMPONENT_MDP_RDMA5] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA5,
+ [DDP_COMPONENT_MDP_RDMA6] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA6,
+ [DDP_COMPONENT_MDP_RDMA7] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA7,
+ [DDP_COMPONENT_MERGE1] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE0,
+ [DDP_COMPONENT_MERGE2] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE1,
+ [DDP_COMPONENT_MERGE3] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE2,
+ [DDP_COMPONENT_MERGE4] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE3,
+ [DDP_COMPONENT_ETHDR_MIXER] = MT8195_MUTEX_MOD_DISP1_DISP_MIXER,
+ [DDP_COMPONENT_MERGE5] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE4,
+ [DDP_COMPONENT_DP_INTF1] = MT8195_MUTEX_MOD_DISP1_DP_INTF0,
};
static const unsigned int mt8365_mutex_mod[DDP_COMPONENT_ID_MAX] = {
--
2.18.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v26 07/10] soc: mediatek: mmsys: add mmsys for support 64 reset bits
2022-08-19 6:10 ` [PATCH v26 07/10] soc: mediatek: mmsys: add mmsys for support 64 reset bits Nancy.Lin
@ 2022-08-23 10:20 ` Matthias Brugger
2022-08-23 11:30 ` Nancy.Lin
0 siblings, 1 reply; 17+ messages in thread
From: Matthias Brugger @ 2022-08-23 10:20 UTC (permalink / raw)
To: Nancy.Lin, Rob Herring, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
jason-jh . lin, Yongqiang Niu, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek, dri-devel, llvm, singo.chang,
Project_Global_Chrome_Upstream_Group
On 19/08/2022 08:10, Nancy.Lin wrote:
> Add mmsys for support 64 reset bits. It is a preparation for MT8195
> vdosys1 HW reset. MT8195 vdosys1 has more than 32 reset bits.
>
> 1. Add the number of reset bits in mmsys private data
> 2. move the whole "reset register code section" behind the
> "get mmsys->data" code section for getting the num_resets in mmsys->data.
>
> Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
> ---
> drivers/soc/mediatek/mtk-mmsys.c | 40 +++++++++++++++++++++-----------
> drivers/soc/mediatek/mtk-mmsys.h | 1 +
> 2 files changed, 27 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
> index 999be064103b..20ae751ad8a7 100644
> --- a/drivers/soc/mediatek/mtk-mmsys.c
> +++ b/drivers/soc/mediatek/mtk-mmsys.c
> @@ -20,6 +20,8 @@
> #include "mt8195-mmsys.h"
> #include "mt8365-mmsys.h"
>
> +#define MMSYS_SW_RESET_PER_REG 32
> +
> static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = {
> .clk_driver = "clk-mt2701-mm",
> .routes = mmsys_default_routing_table,
> @@ -86,6 +88,7 @@ static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = {
> .routes = mmsys_default_routing_table,
> .num_routes = ARRAY_SIZE(mmsys_default_routing_table),
> .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
> + .num_resets = 32,
> };
>
> static const struct mtk_mmsys_match_data mt8173_mmsys_match_data = {
> @@ -100,6 +103,7 @@ static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
> .routes = mmsys_mt8183_routing_table,
> .num_routes = ARRAY_SIZE(mmsys_mt8183_routing_table),
> .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
> + .num_resets = 32,
> };
>
> static const struct mtk_mmsys_match_data mt8183_mmsys_match_data = {
> @@ -114,6 +118,7 @@ static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
> .routes = mmsys_mt8186_routing_table,
> .num_routes = ARRAY_SIZE(mmsys_mt8186_routing_table),
> .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
> + .num_resets = 32,
> };
>
> static const struct mtk_mmsys_match_data mt8186_mmsys_match_data = {
> @@ -128,6 +133,7 @@ static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
> .routes = mmsys_mt8192_routing_table,
> .num_routes = ARRAY_SIZE(mmsys_mt8192_routing_table),
> .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
> + .num_resets = 32,
You didn't reply to Nicolas regarding the reset numbers. I actually agree with
him that we will need the num_resets declared for all devices. Why do you think
this is not the case?
Regards,
Matthias
> };
>
> static const struct mtk_mmsys_match_data mt8192_mmsys_match_data = {
> @@ -288,13 +294,19 @@ static int mtk_mmsys_reset_update(struct reset_controller_dev *rcdev, unsigned l
> {
> struct mtk_mmsys *mmsys = container_of(rcdev, struct mtk_mmsys, rcdev);
> unsigned long flags;
> + u32 offset;
> + u32 reg;
> +
> + offset = (id / MMSYS_SW_RESET_PER_REG) * sizeof(u32);
> + id = id % MMSYS_SW_RESET_PER_REG;
> + reg = mmsys->data->sw0_rst_offset + offset;
>
> spin_lock_irqsave(&mmsys->lock, flags);
>
> if (assert)
> - mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), 0, NULL);
> + mtk_mmsys_update_bits(mmsys, reg, BIT(id), 0, NULL);
> else
> - mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), BIT(id), NULL);
> + mtk_mmsys_update_bits(mmsys, reg, BIT(id), BIT(id), NULL);
>
> spin_unlock_irqrestore(&mmsys->lock, flags);
>
> @@ -351,18 +363,6 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
> return ret;
> }
>
> - spin_lock_init(&mmsys->lock);
> -
> - mmsys->rcdev.owner = THIS_MODULE;
> - mmsys->rcdev.nr_resets = 32;
> - mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
> - mmsys->rcdev.of_node = pdev->dev.of_node;
> - ret = devm_reset_controller_register(&pdev->dev, &mmsys->rcdev);
> - if (ret) {
> - dev_err(&pdev->dev, "Couldn't register mmsys reset controller: %d\n", ret);
> - return ret;
> - }
> -
> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> if (!res) {
> dev_err(dev, "Couldn't get mmsys resource\n");
> @@ -384,6 +384,18 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
> mmsys->data = match_data->drv_data[0];
> }
>
> + spin_lock_init(&mmsys->lock);
> +
> + mmsys->rcdev.owner = THIS_MODULE;
> + mmsys->rcdev.nr_resets = mmsys->data->num_resets;
> + mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
> + mmsys->rcdev.of_node = pdev->dev.of_node;
> + ret = devm_reset_controller_register(&pdev->dev, &mmsys->rcdev);
> + if (ret) {
> + dev_err(&pdev->dev, "Couldn't register mmsys reset controller: %d\n", ret);
> + return ret;
> + }
> +
> #if IS_REACHABLE(CONFIG_MTK_CMDQ)
> ret = cmdq_dev_get_client_reg(dev, &mmsys->cmdq_base, 0);
> if (ret)
> diff --git a/drivers/soc/mediatek/mtk-mmsys.h b/drivers/soc/mediatek/mtk-mmsys.h
> index f01ba206481d..20a271b80b3b 100644
> --- a/drivers/soc/mediatek/mtk-mmsys.h
> +++ b/drivers/soc/mediatek/mtk-mmsys.h
> @@ -92,6 +92,7 @@ struct mtk_mmsys_driver_data {
> const struct mtk_mmsys_routes *routes;
> const unsigned int num_routes;
> const u16 sw0_rst_offset;
> + const u32 num_resets;
> };
>
> struct mtk_mmsys_match_data {
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v26 07/10] soc: mediatek: mmsys: add mmsys for support 64 reset bits
2022-08-23 10:20 ` Matthias Brugger
@ 2022-08-23 11:30 ` Nancy.Lin
2022-08-23 12:08 ` Matthias Brugger
0 siblings, 1 reply; 17+ messages in thread
From: Nancy.Lin @ 2022-08-23 11:30 UTC (permalink / raw)
To: Matthias Brugger, Rob Herring, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
jason-jh . lin, Yongqiang Niu, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek, dri-devel, llvm, singo.chang,
Project_Global_Chrome_Upstream_Group
Hi Matthias,
Thanks for the review.
On Tue, 2022-08-23 at 12:20 +0200, Matthias Brugger wrote:
>
> On 19/08/2022 08:10, Nancy.Lin wrote:
> > Add mmsys for support 64 reset bits. It is a preparation for MT8195
> > vdosys1 HW reset. MT8195 vdosys1 has more than 32 reset bits.
> >
> > 1. Add the number of reset bits in mmsys private data
> > 2. move the whole "reset register code section" behind the
> > "get mmsys->data" code section for getting the num_resets in mmsys-
> > >data.
> >
> > Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
> > Reviewed-by: AngeloGioacchino Del Regno <
> > angelogioacchino.delregno@collabora.com>
> > Reviewed-by: CK Hu <ck.hu@mediatek.com>
> > Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
> > ---
> > drivers/soc/mediatek/mtk-mmsys.c | 40 +++++++++++++++++++++----
> > -------
> > drivers/soc/mediatek/mtk-mmsys.h | 1 +
> > 2 files changed, 27 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/soc/mediatek/mtk-mmsys.c
> > b/drivers/soc/mediatek/mtk-mmsys.c
> > index 999be064103b..20ae751ad8a7 100644
> > --- a/drivers/soc/mediatek/mtk-mmsys.c
> > +++ b/drivers/soc/mediatek/mtk-mmsys.c
> > @@ -20,6 +20,8 @@
> > #include "mt8195-mmsys.h"
> > #include "mt8365-mmsys.h"
> >
> > +#define MMSYS_SW_RESET_PER_REG 32
> > +
> > static const struct mtk_mmsys_driver_data
> > mt2701_mmsys_driver_data = {
> > .clk_driver = "clk-mt2701-mm",
> > .routes = mmsys_default_routing_table,
> > @@ -86,6 +88,7 @@ static const struct mtk_mmsys_driver_data
> > mt8173_mmsys_driver_data = {
> > .routes = mmsys_default_routing_table,
> > .num_routes = ARRAY_SIZE(mmsys_default_routing_table),
> > .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
> > + .num_resets = 32,
> > };
> >
> > static const struct mtk_mmsys_match_data mt8173_mmsys_match_data
> > = {
> > @@ -100,6 +103,7 @@ static const struct mtk_mmsys_driver_data
> > mt8183_mmsys_driver_data = {
> > .routes = mmsys_mt8183_routing_table,
> > .num_routes = ARRAY_SIZE(mmsys_mt8183_routing_table),
> > .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
> > + .num_resets = 32,
> > };
> >
> > static const struct mtk_mmsys_match_data mt8183_mmsys_match_data
> > = {
> > @@ -114,6 +118,7 @@ static const struct mtk_mmsys_driver_data
> > mt8186_mmsys_driver_data = {
> > .routes = mmsys_mt8186_routing_table,
> > .num_routes = ARRAY_SIZE(mmsys_mt8186_routing_table),
> > .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
> > + .num_resets = 32,
> > };
> >
> > static const struct mtk_mmsys_match_data mt8186_mmsys_match_data
> > = {
> > @@ -128,6 +133,7 @@ static const struct mtk_mmsys_driver_data
> > mt8192_mmsys_driver_data = {
> > .routes = mmsys_mt8192_routing_table,
> > .num_routes = ARRAY_SIZE(mmsys_mt8192_routing_table),
> > .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
> > + .num_resets = 32,
>
> You didn't reply to Nicolas regarding the reset numbers. I actually
> agree with
> him that we will need the num_resets declared for all devices. Why do
> you think
> this is not the case?
>
> Regards,
> Matthias
>
Sorry, I lost Nicolas's email.
I checked with the mmsys git log with reset controller function.
1. Enric add mmsys reset controller function in [1]/[2].
=> in mtk_mmsys_reset_update(), all mmsys reset offset is
MMSYS_SW0_RST_B (0x140).
2. After Enric's patch, Rex add sw0_rst_offset in mmsys driver data in
[3].
So, I think sw0_rst_offset is not zero. Instead of only add num_resets
but also need to add sw0_rst_offset for all mmsys. What do you think ?
[1]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/soc/mediatek/mtk-mmsys.c?id=f27ef2856343e2ddc392975d7b15120442e4d7b7
[2]
https://patchwork.kernel.org/project/linux-mediatek/cover/20210825102632.601614-1-enric.balletbo@collabora.com/
[3]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/soc/mediatek/mtk-mmsys.c?id=62dc30150c06774a8122c52aedd0eddaceaf5940
Regards,
Nancy
>
> > };
> >
> > static const struct mtk_mmsys_match_data mt8192_mmsys_match_data
> > = {
> > @@ -288,13 +294,19 @@ static int mtk_mmsys_reset_update(struct
> > reset_controller_dev *rcdev, unsigned l
> > {
> > struct mtk_mmsys *mmsys = container_of(rcdev, struct mtk_mmsys,
> > rcdev);
> > unsigned long flags;
> > + u32 offset;
> > + u32 reg;
> > +
> > + offset = (id / MMSYS_SW_RESET_PER_REG) * sizeof(u32);
> > + id = id % MMSYS_SW_RESET_PER_REG;
> > + reg = mmsys->data->sw0_rst_offset + offset;
> >
> > spin_lock_irqsave(&mmsys->lock, flags);
> >
> > if (assert)
> > - mtk_mmsys_update_bits(mmsys, mmsys->data-
> > >sw0_rst_offset, BIT(id), 0, NULL);
> > + mtk_mmsys_update_bits(mmsys, reg, BIT(id), 0, NULL);
> > else
> > - mtk_mmsys_update_bits(mmsys, mmsys->data-
> > >sw0_rst_offset, BIT(id), BIT(id), NULL);
> > + mtk_mmsys_update_bits(mmsys, reg, BIT(id), BIT(id),
> > NULL);
> >
> > spin_unlock_irqrestore(&mmsys->lock, flags);
> >
> > @@ -351,18 +363,6 @@ static int mtk_mmsys_probe(struct
> > platform_device *pdev)
> > return ret;
> > }
> >
> > - spin_lock_init(&mmsys->lock);
> > -
> > - mmsys->rcdev.owner = THIS_MODULE;
> > - mmsys->rcdev.nr_resets = 32;
> > - mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
> > - mmsys->rcdev.of_node = pdev->dev.of_node;
> > - ret = devm_reset_controller_register(&pdev->dev, &mmsys-
> > >rcdev);
> > - if (ret) {
> > - dev_err(&pdev->dev, "Couldn't register mmsys reset
> > controller: %d\n", ret);
> > - return ret;
> > - }
> > -
> > res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > if (!res) {
> > dev_err(dev, "Couldn't get mmsys resource\n");
> > @@ -384,6 +384,18 @@ static int mtk_mmsys_probe(struct
> > platform_device *pdev)
> > mmsys->data = match_data->drv_data[0];
> > }
> >
> > + spin_lock_init(&mmsys->lock);
> > +
> > + mmsys->rcdev.owner = THIS_MODULE;
> > + mmsys->rcdev.nr_resets = mmsys->data->num_resets;
> > + mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
> > + mmsys->rcdev.of_node = pdev->dev.of_node;
> > + ret = devm_reset_controller_register(&pdev->dev, &mmsys-
> > >rcdev);
> > + if (ret) {
> > + dev_err(&pdev->dev, "Couldn't register mmsys reset
> > controller: %d\n", ret);
> > + return ret;
> > + }
> > +
> > #if IS_REACHABLE(CONFIG_MTK_CMDQ)
> > ret = cmdq_dev_get_client_reg(dev, &mmsys->cmdq_base, 0);
> > if (ret)
> > diff --git a/drivers/soc/mediatek/mtk-mmsys.h
> > b/drivers/soc/mediatek/mtk-mmsys.h
> > index f01ba206481d..20a271b80b3b 100644
> > --- a/drivers/soc/mediatek/mtk-mmsys.h
> > +++ b/drivers/soc/mediatek/mtk-mmsys.h
> > @@ -92,6 +92,7 @@ struct mtk_mmsys_driver_data {
> > const struct mtk_mmsys_routes *routes;
> > const unsigned int num_routes;
> > const u16 sw0_rst_offset;
> > + const u32 num_resets;
> > };
> >
> > struct mtk_mmsys_match_data {
>
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v26 07/10] soc: mediatek: mmsys: add mmsys for support 64 reset bits
2022-08-23 11:30 ` Nancy.Lin
@ 2022-08-23 12:08 ` Matthias Brugger
2022-08-24 2:44 ` Nancy.Lin
0 siblings, 1 reply; 17+ messages in thread
From: Matthias Brugger @ 2022-08-23 12:08 UTC (permalink / raw)
To: Nancy.Lin, Rob Herring, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
jason-jh . lin, Yongqiang Niu, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek, dri-devel, llvm, singo.chang,
Project_Global_Chrome_Upstream_Group
On 23/08/2022 13:30, Nancy.Lin wrote:
> Hi Matthias,
>
> Thanks for the review.
>
> On Tue, 2022-08-23 at 12:20 +0200, Matthias Brugger wrote:
>>
>> On 19/08/2022 08:10, Nancy.Lin wrote:
>>> Add mmsys for support 64 reset bits. It is a preparation for MT8195
>>> vdosys1 HW reset. MT8195 vdosys1 has more than 32 reset bits.
>>>
>>> 1. Add the number of reset bits in mmsys private data
>>> 2. move the whole "reset register code section" behind the
>>> "get mmsys->data" code section for getting the num_resets in mmsys-
>>>> data.
>>>
>>> Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
>>> Reviewed-by: AngeloGioacchino Del Regno <
>>> angelogioacchino.delregno@collabora.com>
>>> Reviewed-by: CK Hu <ck.hu@mediatek.com>
>>> Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
>>> ---
>>> drivers/soc/mediatek/mtk-mmsys.c | 40 +++++++++++++++++++++----
>>> -------
>>> drivers/soc/mediatek/mtk-mmsys.h | 1 +
>>> 2 files changed, 27 insertions(+), 14 deletions(-)
>>>
>>> diff --git a/drivers/soc/mediatek/mtk-mmsys.c
>>> b/drivers/soc/mediatek/mtk-mmsys.c
>>> index 999be064103b..20ae751ad8a7 100644
>>> --- a/drivers/soc/mediatek/mtk-mmsys.c
>>> +++ b/drivers/soc/mediatek/mtk-mmsys.c
>>> @@ -20,6 +20,8 @@
>>> #include "mt8195-mmsys.h"
>>> #include "mt8365-mmsys.h"
>>>
>>> +#define MMSYS_SW_RESET_PER_REG 32
>>> +
>>> static const struct mtk_mmsys_driver_data
>>> mt2701_mmsys_driver_data = {
>>> .clk_driver = "clk-mt2701-mm",
>>> .routes = mmsys_default_routing_table,
>>> @@ -86,6 +88,7 @@ static const struct mtk_mmsys_driver_data
>>> mt8173_mmsys_driver_data = {
>>> .routes = mmsys_default_routing_table,
>>> .num_routes = ARRAY_SIZE(mmsys_default_routing_table),
>>> .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
>>> + .num_resets = 32,
>>> };
>>>
>>> static const struct mtk_mmsys_match_data mt8173_mmsys_match_data
>>> = {
>>> @@ -100,6 +103,7 @@ static const struct mtk_mmsys_driver_data
>>> mt8183_mmsys_driver_data = {
>>> .routes = mmsys_mt8183_routing_table,
>>> .num_routes = ARRAY_SIZE(mmsys_mt8183_routing_table),
>>> .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
>>> + .num_resets = 32,
>>> };
>>>
>>> static const struct mtk_mmsys_match_data mt8183_mmsys_match_data
>>> = {
>>> @@ -114,6 +118,7 @@ static const struct mtk_mmsys_driver_data
>>> mt8186_mmsys_driver_data = {
>>> .routes = mmsys_mt8186_routing_table,
>>> .num_routes = ARRAY_SIZE(mmsys_mt8186_routing_table),
>>> .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
>>> + .num_resets = 32,
>>> };
>>>
>>> static const struct mtk_mmsys_match_data mt8186_mmsys_match_data
>>> = {
>>> @@ -128,6 +133,7 @@ static const struct mtk_mmsys_driver_data
>>> mt8192_mmsys_driver_data = {
>>> .routes = mmsys_mt8192_routing_table,
>>> .num_routes = ARRAY_SIZE(mmsys_mt8192_routing_table),
>>> .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
>>> + .num_resets = 32,
>>
>> You didn't reply to Nicolas regarding the reset numbers. I actually
>> agree with
>> him that we will need the num_resets declared for all devices. Why do
>> you think
>> this is not the case?
>>
>> Regards,
>> Matthias
>>
>
> Sorry, I lost Nicolas's email.
>
> I checked with the mmsys git log with reset controller function.
>
> 1. Enric add mmsys reset controller function in [1]/[2].
> => in mtk_mmsys_reset_update(), all mmsys reset offset is
> MMSYS_SW0_RST_B (0x140).
>
> 2. After Enric's patch, Rex add sw0_rst_offset in mmsys driver data in
> [3].
>
> So, I think sw0_rst_offset is not zero. Instead of only add num_resets
> but also need to add sw0_rst_offset for all mmsys. What do you think ?
>
Good point. It seems we have a bug in the driver. Either all SoCs have the
reset, but it's broken since
62dc30150c06 ("soc: mediatek: mmsys: add sw0_rst_offset in mmsys driver data")
or we are adding a reset controller independently if the silicon has one, which
would be an error in:
f27ef2856343 ("soc: mediatek: mmsys: Add reset controller support")
We have to find that out.
Regards,
Matthias
> [1]
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/soc/mediatek/mtk-mmsys.c?id=f27ef2856343e2ddc392975d7b15120442e4d7b7
> [2]
>
> https://patchwork.kernel.org/project/linux-mediatek/cover/20210825102632.601614-1-enric.balletbo@collabora.com/
> [3]
>
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/soc/mediatek/mtk-mmsys.c?id=62dc30150c06774a8122c52aedd0eddaceaf5940
>
> Regards,
> Nancy
>>
>>> };
>>>
>>> static const struct mtk_mmsys_match_data mt8192_mmsys_match_data
>>> = {
>>> @@ -288,13 +294,19 @@ static int mtk_mmsys_reset_update(struct
>>> reset_controller_dev *rcdev, unsigned l
>>> {
>>> struct mtk_mmsys *mmsys = container_of(rcdev, struct mtk_mmsys,
>>> rcdev);
>>> unsigned long flags;
>>> + u32 offset;
>>> + u32 reg;
>>> +
>>> + offset = (id / MMSYS_SW_RESET_PER_REG) * sizeof(u32);
>>> + id = id % MMSYS_SW_RESET_PER_REG;
>>> + reg = mmsys->data->sw0_rst_offset + offset;
>>>
>>> spin_lock_irqsave(&mmsys->lock, flags);
>>>
>>> if (assert)
>>> - mtk_mmsys_update_bits(mmsys, mmsys->data-
>>>> sw0_rst_offset, BIT(id), 0, NULL);
>>> + mtk_mmsys_update_bits(mmsys, reg, BIT(id), 0, NULL);
>>> else
>>> - mtk_mmsys_update_bits(mmsys, mmsys->data-
>>>> sw0_rst_offset, BIT(id), BIT(id), NULL);
>>> + mtk_mmsys_update_bits(mmsys, reg, BIT(id), BIT(id),
>>> NULL);
>>>
>>> spin_unlock_irqrestore(&mmsys->lock, flags);
>>>
>>> @@ -351,18 +363,6 @@ static int mtk_mmsys_probe(struct
>>> platform_device *pdev)
>>> return ret;
>>> }
>>>
>>> - spin_lock_init(&mmsys->lock);
>>> -
>>> - mmsys->rcdev.owner = THIS_MODULE;
>>> - mmsys->rcdev.nr_resets = 32;
>>> - mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
>>> - mmsys->rcdev.of_node = pdev->dev.of_node;
>>> - ret = devm_reset_controller_register(&pdev->dev, &mmsys-
>>>> rcdev);
>>> - if (ret) {
>>> - dev_err(&pdev->dev, "Couldn't register mmsys reset
>>> controller: %d\n", ret);
>>> - return ret;
>>> - }
>>> -
>>> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>>> if (!res) {
>>> dev_err(dev, "Couldn't get mmsys resource\n");
>>> @@ -384,6 +384,18 @@ static int mtk_mmsys_probe(struct
>>> platform_device *pdev)
>>> mmsys->data = match_data->drv_data[0];
>>> }
>>>
>>> + spin_lock_init(&mmsys->lock);
>>> +
>>> + mmsys->rcdev.owner = THIS_MODULE;
>>> + mmsys->rcdev.nr_resets = mmsys->data->num_resets;
>>> + mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
>>> + mmsys->rcdev.of_node = pdev->dev.of_node;
>>> + ret = devm_reset_controller_register(&pdev->dev, &mmsys-
>>>> rcdev);
>>> + if (ret) {
>>> + dev_err(&pdev->dev, "Couldn't register mmsys reset
>>> controller: %d\n", ret);
>>> + return ret;
>>> + }
>>> +
>>> #if IS_REACHABLE(CONFIG_MTK_CMDQ)
>>> ret = cmdq_dev_get_client_reg(dev, &mmsys->cmdq_base, 0);
>>> if (ret)
>>> diff --git a/drivers/soc/mediatek/mtk-mmsys.h
>>> b/drivers/soc/mediatek/mtk-mmsys.h
>>> index f01ba206481d..20a271b80b3b 100644
>>> --- a/drivers/soc/mediatek/mtk-mmsys.h
>>> +++ b/drivers/soc/mediatek/mtk-mmsys.h
>>> @@ -92,6 +92,7 @@ struct mtk_mmsys_driver_data {
>>> const struct mtk_mmsys_routes *routes;
>>> const unsigned int num_routes;
>>> const u16 sw0_rst_offset;
>>> + const u32 num_resets;
>>> };
>>>
>>> struct mtk_mmsys_match_data {
>>
>>
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v26 07/10] soc: mediatek: mmsys: add mmsys for support 64 reset bits
2022-08-23 12:08 ` Matthias Brugger
@ 2022-08-24 2:44 ` Nancy.Lin
2022-08-24 11:41 ` Matthias Brugger
0 siblings, 1 reply; 17+ messages in thread
From: Nancy.Lin @ 2022-08-24 2:44 UTC (permalink / raw)
To: Matthias Brugger, Rob Herring, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
jason-jh . lin, Yongqiang Niu, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek, dri-devel, llvm, singo.chang,
Project_Global_Chrome_Upstream_Group
Hi Matthias,
Thanks for your comment.
On Tue, 2022-08-23 at 14:08 +0200, Matthias Brugger wrote:
>
> On 23/08/2022 13:30, Nancy.Lin wrote:
> > Hi Matthias,
> >
> > Thanks for the review.
> >
> > On Tue, 2022-08-23 at 12:20 +0200, Matthias Brugger wrote:
> > >
> > > On 19/08/2022 08:10, Nancy.Lin wrote:
> > > > Add mmsys for support 64 reset bits. It is a preparation for
> > > > MT8195
> > > > vdosys1 HW reset. MT8195 vdosys1 has more than 32 reset bits.
> > > >
> > > > 1. Add the number of reset bits in mmsys private data
> > > > 2. move the whole "reset register code section" behind the
> > > > "get mmsys->data" code section for getting the num_resets in
> > > > mmsys-
> > > > > data.
> > > >
> > > > Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
> > > > Reviewed-by: AngeloGioacchino Del Regno <
> > > > angelogioacchino.delregno@collabora.com>
> > > > Reviewed-by: CK Hu <ck.hu@mediatek.com>
> > > > Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
> > > > ---
> > > > drivers/soc/mediatek/mtk-mmsys.c | 40 +++++++++++++++++++++-
> > > > ---
> > > > -------
> > > > drivers/soc/mediatek/mtk-mmsys.h | 1 +
> > > > 2 files changed, 27 insertions(+), 14 deletions(-)
> > > >
> > > > diff --git a/drivers/soc/mediatek/mtk-mmsys.c
> > > > b/drivers/soc/mediatek/mtk-mmsys.c
> > > > index 999be064103b..20ae751ad8a7 100644
> > > > --- a/drivers/soc/mediatek/mtk-mmsys.c
> > > > +++ b/drivers/soc/mediatek/mtk-mmsys.c
> > > > @@ -20,6 +20,8 @@
> > > > #include "mt8195-mmsys.h"
> > > > #include "mt8365-mmsys.h"
> > > >
> > > > +#define MMSYS_SW_RESET_PER_REG 32
> > > > +
> > > > static const struct mtk_mmsys_driver_data
> > > > mt2701_mmsys_driver_data = {
> > > > .clk_driver = "clk-mt2701-mm",
> > > > .routes = mmsys_default_routing_table,
> > > > @@ -86,6 +88,7 @@ static const struct mtk_mmsys_driver_data
> > > > mt8173_mmsys_driver_data = {
> > > > .routes = mmsys_default_routing_table,
> > > > .num_routes = ARRAY_SIZE(mmsys_default_routing_table),
> > > > .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
> > > > + .num_resets = 32,
> > > > };
> > > >
> > > > static const struct mtk_mmsys_match_data
> > > > mt8173_mmsys_match_data
> > > > = {
> > > > @@ -100,6 +103,7 @@ static const struct mtk_mmsys_driver_data
> > > > mt8183_mmsys_driver_data = {
> > > > .routes = mmsys_mt8183_routing_table,
> > > > .num_routes = ARRAY_SIZE(mmsys_mt8183_routing_table),
> > > > .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
> > > > + .num_resets = 32,
> > > > };
> > > >
> > > > static const struct mtk_mmsys_match_data
> > > > mt8183_mmsys_match_data
> > > > = {
> > > > @@ -114,6 +118,7 @@ static const struct mtk_mmsys_driver_data
> > > > mt8186_mmsys_driver_data = {
> > > > .routes = mmsys_mt8186_routing_table,
> > > > .num_routes = ARRAY_SIZE(mmsys_mt8186_routing_table),
> > > > .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
> > > > + .num_resets = 32,
> > > > };
> > > >
> > > > static const struct mtk_mmsys_match_data
> > > > mt8186_mmsys_match_data
> > > > = {
> > > > @@ -128,6 +133,7 @@ static const struct mtk_mmsys_driver_data
> > > > mt8192_mmsys_driver_data = {
> > > > .routes = mmsys_mt8192_routing_table,
> > > > .num_routes = ARRAY_SIZE(mmsys_mt8192_routing_table),
> > > > .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
> > > > + .num_resets = 32,
> > >
> > > You didn't reply to Nicolas regarding the reset numbers. I
> > > actually
> > > agree with
> > > him that we will need the num_resets declared for all devices.
> > > Why do
> > > you think
> > > this is not the case?
> > >
> > > Regards,
> > > Matthias
> > >
> >
> > Sorry, I lost Nicolas's email.
> >
> > I checked with the mmsys git log with reset controller function.
> >
> > 1. Enric add mmsys reset controller function in [1]/[2].
> > => in mtk_mmsys_reset_update(), all mmsys reset offset is
> > MMSYS_SW0_RST_B (0x140).
> >
> > 2. After Enric's patch, Rex add sw0_rst_offset in mmsys driver data
> > in
> > [3].
> >
> > So, I think sw0_rst_offset is not zero. Instead of only add
> > num_resets
> > but also need to add sw0_rst_offset for all mmsys. What do you
> > think ?
> >
>
> Good point. It seems we have a bug in the driver. Either all SoCs
> have the
> reset, but it's broken since
> 62dc30150c06 ("soc: mediatek: mmsys: add sw0_rst_offset in mmsys
> driver data")
> or we are adding a reset controller independently if the silicon has
> one, which
> would be an error in:
> f27ef2856343 ("soc: mediatek: mmsys: Add reset controller support")
>
> We have to find that out.
>
> Regards,
> Matthias
In [2], I think the first revision of Enric's reset controller is added
for 8173 and 8183, not for all mmsys device.
=>[v3,4/7] arm64: dts: mt8173: Add the mmsys reset bit to reset the
dsi0
=>[v3,5/7] arm64: dts: mt8183: Add the mmsys reset bit to reset the
dsi0
In [3], Rex only add sw0_rst_offset in 8173 and 8183 mmsys driver data.
>
For other SoCs, like mt2701,mt2712..., these SoCs even don't define
mmsys hw reset bit[4]. So I think only set the num_resets to 32 or 64
to those mmsys devices who really need the reset control, others set to
0(same as my v26 patch).
[4]mt2701-resets.h
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/dt-bindings/reset/mt2701-resets.h?id=62dc30150c06774a8122c52aedd0eddaceaf5940
Regards,
Nancy
> > [1]
> >
https://urldefense.com/v3/__https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/soc/mediatek/mtk-mmsys.c?id=f27ef2856343e2ddc392975d7b15120442e4d7b7__;!!CTRNKA9wMg0ARbw!3cWAYlD1mrWRmNZy0zoJs8MNiD3s7K9PteJI9cGEvu_qp3VShfqxsBTb_fKynszs$
> >
> > [2]
> >
> >
https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/cover/20210825102632.601614-1-enric.balletbo@collabora.com/__;!!CTRNKA9wMg0ARbw!3cWAYlD1mrWRmNZy0zoJs8MNiD3s7K9PteJI9cGEvu_qp3VShfqxsBTb_cH-3nM8$
> >
> > [3]
> >
> >
https://urldefense.com/v3/__https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/soc/mediatek/mtk-mmsys.c?id=62dc30150c06774a8122c52aedd0eddaceaf5940__;!!CTRNKA9wMg0ARbw!3cWAYlD1mrWRmNZy0zoJs8MNiD3s7K9PteJI9cGEvu_qp3VShfqxsBTb_VXEsbNa$
> >
> >
> > Regards,
> > Nancy
> > >
> > > > };
> > > >
> > > > static const struct mtk_mmsys_match_data
> > > > mt8192_mmsys_match_data
> > > > = {
> > > > @@ -288,13 +294,19 @@ static int mtk_mmsys_reset_update(struct
> > > > reset_controller_dev *rcdev, unsigned l
> > > > {
> > > > struct mtk_mmsys *mmsys = container_of(rcdev, struct
> > > > mtk_mmsys,
> > > > rcdev);
> > > > unsigned long flags;
> > > > + u32 offset;
> > > > + u32 reg;
> > > > +
> > > > + offset = (id / MMSYS_SW_RESET_PER_REG) * sizeof(u32);
> > > > + id = id % MMSYS_SW_RESET_PER_REG;
> > > > + reg = mmsys->data->sw0_rst_offset + offset;
> > > >
> > > > spin_lock_irqsave(&mmsys->lock, flags);
> > > >
> > > > if (assert)
> > > > - mtk_mmsys_update_bits(mmsys, mmsys->data-
> > > > > sw0_rst_offset, BIT(id), 0, NULL);
> > > >
> > > > + mtk_mmsys_update_bits(mmsys, reg, BIT(id), 0,
> > > > NULL);
> > > > else
> > > > - mtk_mmsys_update_bits(mmsys, mmsys->data-
> > > > > sw0_rst_offset, BIT(id), BIT(id), NULL);
> > > >
> > > > + mtk_mmsys_update_bits(mmsys, reg, BIT(id),
> > > > BIT(id),
> > > > NULL);
> > > >
> > > > spin_unlock_irqrestore(&mmsys->lock, flags);
> > > >
> > > > @@ -351,18 +363,6 @@ static int mtk_mmsys_probe(struct
> > > > platform_device *pdev)
> > > > return ret;
> > > > }
> > > >
> > > > - spin_lock_init(&mmsys->lock);
> > > > -
> > > > - mmsys->rcdev.owner = THIS_MODULE;
> > > > - mmsys->rcdev.nr_resets = 32;
> > > > - mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
> > > > - mmsys->rcdev.of_node = pdev->dev.of_node;
> > > > - ret = devm_reset_controller_register(&pdev->dev,
> > > > &mmsys-
> > > > > rcdev);
> > > >
> > > > - if (ret) {
> > > > - dev_err(&pdev->dev, "Couldn't register mmsys
> > > > reset
> > > > controller: %d\n", ret);
> > > > - return ret;
> > > > - }
> > > > -
> > > > res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > > > if (!res) {
> > > > dev_err(dev, "Couldn't get mmsys resource\n");
> > > > @@ -384,6 +384,18 @@ static int mtk_mmsys_probe(struct
> > > > platform_device *pdev)
> > > > mmsys->data = match_data->drv_data[0];
> > > > }
> > > >
> > > > + spin_lock_init(&mmsys->lock);
> > > > +
> > > > + mmsys->rcdev.owner = THIS_MODULE;
> > > > + mmsys->rcdev.nr_resets = mmsys->data->num_resets;
> > > > + mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
> > > > + mmsys->rcdev.of_node = pdev->dev.of_node;
> > > > + ret = devm_reset_controller_register(&pdev->dev,
> > > > &mmsys-
> > > > > rcdev);
> > > >
> > > > + if (ret) {
> > > > + dev_err(&pdev->dev, "Couldn't register mmsys
> > > > reset
> > > > controller: %d\n", ret);
> > > > + return ret;
> > > > + }
> > > > +
> > > > #if IS_REACHABLE(CONFIG_MTK_CMDQ)
> > > > ret = cmdq_dev_get_client_reg(dev, &mmsys->cmdq_base,
> > > > 0);
> > > > if (ret)
> > > > diff --git a/drivers/soc/mediatek/mtk-mmsys.h
> > > > b/drivers/soc/mediatek/mtk-mmsys.h
> > > > index f01ba206481d..20a271b80b3b 100644
> > > > --- a/drivers/soc/mediatek/mtk-mmsys.h
> > > > +++ b/drivers/soc/mediatek/mtk-mmsys.h
> > > > @@ -92,6 +92,7 @@ struct mtk_mmsys_driver_data {
> > > > const struct mtk_mmsys_routes *routes;
> > > > const unsigned int num_routes;
> > > > const u16 sw0_rst_offset;
> > > > + const u32 num_resets;
> > > > };
> > > >
> > > > struct mtk_mmsys_match_data {
> > >
> > >
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v26 07/10] soc: mediatek: mmsys: add mmsys for support 64 reset bits
2022-08-24 2:44 ` Nancy.Lin
@ 2022-08-24 11:41 ` Matthias Brugger
2022-08-25 2:19 ` Nancy.Lin
0 siblings, 1 reply; 17+ messages in thread
From: Matthias Brugger @ 2022-08-24 11:41 UTC (permalink / raw)
To: Nancy.Lin, Rob Herring, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
jason-jh . lin, Yongqiang Niu, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek, dri-devel, llvm, singo.chang,
Project_Global_Chrome_Upstream_Group
On 24/08/2022 04:44, Nancy.Lin wrote:
> Hi Matthias,
>
> Thanks for your comment.
>
> On Tue, 2022-08-23 at 14:08 +0200, Matthias Brugger wrote:
>>
>> On 23/08/2022 13:30, Nancy.Lin wrote:
>>> Hi Matthias,
>>>
>>> Thanks for the review.
>>>
>>> On Tue, 2022-08-23 at 12:20 +0200, Matthias Brugger wrote:
>>>>
>>>> On 19/08/2022 08:10, Nancy.Lin wrote:
>>>>> Add mmsys for support 64 reset bits. It is a preparation for
>>>>> MT8195
>>>>> vdosys1 HW reset. MT8195 vdosys1 has more than 32 reset bits.
>>>>>
>>>>> 1. Add the number of reset bits in mmsys private data
>>>>> 2. move the whole "reset register code section" behind the
>>>>> "get mmsys->data" code section for getting the num_resets in
>>>>> mmsys-
>>>>>> data.
>>>>>
>>>>> Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
>>>>> Reviewed-by: AngeloGioacchino Del Regno <
>>>>> angelogioacchino.delregno@collabora.com>
>>>>> Reviewed-by: CK Hu <ck.hu@mediatek.com>
>>>>> Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
>>>>> ---
>>>>> drivers/soc/mediatek/mtk-mmsys.c | 40 +++++++++++++++++++++-
>>>>> ---
>>>>> -------
>>>>> drivers/soc/mediatek/mtk-mmsys.h | 1 +
>>>>> 2 files changed, 27 insertions(+), 14 deletions(-)
>>>>>
>>>>> diff --git a/drivers/soc/mediatek/mtk-mmsys.c
>>>>> b/drivers/soc/mediatek/mtk-mmsys.c
>>>>> index 999be064103b..20ae751ad8a7 100644
>>>>> --- a/drivers/soc/mediatek/mtk-mmsys.c
>>>>> +++ b/drivers/soc/mediatek/mtk-mmsys.c
>>>>> @@ -20,6 +20,8 @@
>>>>> #include "mt8195-mmsys.h"
>>>>> #include "mt8365-mmsys.h"
>>>>>
>>>>> +#define MMSYS_SW_RESET_PER_REG 32
>>>>> +
>>>>> static const struct mtk_mmsys_driver_data
>>>>> mt2701_mmsys_driver_data = {
>>>>> .clk_driver = "clk-mt2701-mm",
>>>>> .routes = mmsys_default_routing_table,
>>>>> @@ -86,6 +88,7 @@ static const struct mtk_mmsys_driver_data
>>>>> mt8173_mmsys_driver_data = {
>>>>> .routes = mmsys_default_routing_table,
>>>>> .num_routes = ARRAY_SIZE(mmsys_default_routing_table),
>>>>> .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
>>>>> + .num_resets = 32,
>>>>> };
>>>>>
>>>>> static const struct mtk_mmsys_match_data
>>>>> mt8173_mmsys_match_data
>>>>> = {
>>>>> @@ -100,6 +103,7 @@ static const struct mtk_mmsys_driver_data
>>>>> mt8183_mmsys_driver_data = {
>>>>> .routes = mmsys_mt8183_routing_table,
>>>>> .num_routes = ARRAY_SIZE(mmsys_mt8183_routing_table),
>>>>> .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
>>>>> + .num_resets = 32,
>>>>> };
>>>>>
>>>>> static const struct mtk_mmsys_match_data
>>>>> mt8183_mmsys_match_data
>>>>> = {
>>>>> @@ -114,6 +118,7 @@ static const struct mtk_mmsys_driver_data
>>>>> mt8186_mmsys_driver_data = {
>>>>> .routes = mmsys_mt8186_routing_table,
>>>>> .num_routes = ARRAY_SIZE(mmsys_mt8186_routing_table),
>>>>> .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
>>>>> + .num_resets = 32,
>>>>> };
>>>>>
>>>>> static const struct mtk_mmsys_match_data
>>>>> mt8186_mmsys_match_data
>>>>> = {
>>>>> @@ -128,6 +133,7 @@ static const struct mtk_mmsys_driver_data
>>>>> mt8192_mmsys_driver_data = {
>>>>> .routes = mmsys_mt8192_routing_table,
>>>>> .num_routes = ARRAY_SIZE(mmsys_mt8192_routing_table),
>>>>> .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
>>>>> + .num_resets = 32,
>>>>
>>>> You didn't reply to Nicolas regarding the reset numbers. I
>>>> actually
>>>> agree with
>>>> him that we will need the num_resets declared for all devices.
>>>> Why do
>>>> you think
>>>> this is not the case?
>>>>
>>>> Regards,
>>>> Matthias
>>>>
>>>
>>> Sorry, I lost Nicolas's email.
>>>
>>> I checked with the mmsys git log with reset controller function.
>>>
>>> 1. Enric add mmsys reset controller function in [1]/[2].
>>> => in mtk_mmsys_reset_update(), all mmsys reset offset is
>>> MMSYS_SW0_RST_B (0x140).
>>>
>>> 2. After Enric's patch, Rex add sw0_rst_offset in mmsys driver data
>>> in
>>> [3].
>>>
>>> So, I think sw0_rst_offset is not zero. Instead of only add
>>> num_resets
>>> but also need to add sw0_rst_offset for all mmsys. What do you
>>> think ?
>>>
>>
>> Good point. It seems we have a bug in the driver. Either all SoCs
>> have the
>> reset, but it's broken since
>> 62dc30150c06 ("soc: mediatek: mmsys: add sw0_rst_offset in mmsys
>> driver data")
>> or we are adding a reset controller independently if the silicon has
>> one, which
>> would be an error in:
>> f27ef2856343 ("soc: mediatek: mmsys: Add reset controller support")
>>
>> We have to find that out.
>>
>> Regards,
>> Matthias
>
>
> In [2], I think the first revision of Enric's reset controller is added
> for 8173 and 8183, not for all mmsys device.
> =>[v3,4/7] arm64: dts: mt8173: Add the mmsys reset bit to reset the
> dsi0
> =>[v3,5/7] arm64: dts: mt8183: Add the mmsys reset bit to reset the
> dsi0
>
> In [3], Rex only add sw0_rst_offset in 8173 and 8183 mmsys driver data.
>>
>
> For other SoCs, like mt2701,mt2712..., these SoCs even don't define
> mmsys hw reset bit[4]. So I think only set the num_resets to 32 or 64
> to those mmsys devices who really need the reset control, others set to
> 0(same as my v26 patch).
>
Thanks for looking into this, please see my comment further below.
>
> [4]mt2701-resets.h
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/dt-bindings/reset/mt2701-resets.h?id=62dc30150c06774a8122c52aedd0eddaceaf5940
>
> Regards,
> Nancy
>
>
>>> [1]
>>>
> https://urldefense.com/v3/__https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/soc/mediatek/mtk-mmsys.c?id=f27ef2856343e2ddc392975d7b15120442e4d7b7__;!!CTRNKA9wMg0ARbw!3cWAYlD1mrWRmNZy0zoJs8MNiD3s7K9PteJI9cGEvu_qp3VShfqxsBTb_fKynszs$
>>>
>>> [2]
>>>
>>>
> https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/cover/20210825102632.601614-1-enric.balletbo@collabora.com/__;!!CTRNKA9wMg0ARbw!3cWAYlD1mrWRmNZy0zoJs8MNiD3s7K9PteJI9cGEvu_qp3VShfqxsBTb_cH-3nM8$
>>>
>>> [3]
>>>
>>>
> https://urldefense.com/v3/__https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/soc/mediatek/mtk-mmsys.c?id=62dc30150c06774a8122c52aedd0eddaceaf5940__;!!CTRNKA9wMg0ARbw!3cWAYlD1mrWRmNZy0zoJs8MNiD3s7K9PteJI9cGEvu_qp3VShfqxsBTb_VXEsbNa$
>>>
>>>
>>> Regards,
>>> Nancy
>>>>
>>>>> };
>>>>>
>>>>> static const struct mtk_mmsys_match_data
>>>>> mt8192_mmsys_match_data
>>>>> = {
>>>>> @@ -288,13 +294,19 @@ static int mtk_mmsys_reset_update(struct
>>>>> reset_controller_dev *rcdev, unsigned l
>>>>> {
>>>>> struct mtk_mmsys *mmsys = container_of(rcdev, struct
>>>>> mtk_mmsys,
>>>>> rcdev);
>>>>> unsigned long flags;
>>>>> + u32 offset;
>>>>> + u32 reg;
>>>>> +
>>>>> + offset = (id / MMSYS_SW_RESET_PER_REG) * sizeof(u32);
>>>>> + id = id % MMSYS_SW_RESET_PER_REG;
>>>>> + reg = mmsys->data->sw0_rst_offset + offset;
>>>>>
>>>>> spin_lock_irqsave(&mmsys->lock, flags);
>>>>>
>>>>> if (assert)
>>>>> - mtk_mmsys_update_bits(mmsys, mmsys->data-
>>>>>> sw0_rst_offset, BIT(id), 0, NULL);
>>>>>
>>>>> + mtk_mmsys_update_bits(mmsys, reg, BIT(id), 0,
>>>>> NULL);
>>>>> else
>>>>> - mtk_mmsys_update_bits(mmsys, mmsys->data-
>>>>>> sw0_rst_offset, BIT(id), BIT(id), NULL);
>>>>>
>>>>> + mtk_mmsys_update_bits(mmsys, reg, BIT(id),
>>>>> BIT(id),
>>>>> NULL);
>>>>>
>>>>> spin_unlock_irqrestore(&mmsys->lock, flags);
>>>>>
>>>>> @@ -351,18 +363,6 @@ static int mtk_mmsys_probe(struct
>>>>> platform_device *pdev)
>>>>> return ret;
>>>>> }
>>>>>
>>>>> - spin_lock_init(&mmsys->lock);
>>>>> -
>>>>> - mmsys->rcdev.owner = THIS_MODULE;
>>>>> - mmsys->rcdev.nr_resets = 32;
>>>>> - mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
>>>>> - mmsys->rcdev.of_node = pdev->dev.of_node;
>>>>> - ret = devm_reset_controller_register(&pdev->dev,
>>>>> &mmsys-
>>>>>> rcdev);
>>>>>
>>>>> - if (ret) {
>>>>> - dev_err(&pdev->dev, "Couldn't register mmsys
>>>>> reset
>>>>> controller: %d\n", ret);
>>>>> - return ret;
>>>>> - }
>>>>> -
>>>>> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>>>>> if (!res) {
>>>>> dev_err(dev, "Couldn't get mmsys resource\n");
>>>>> @@ -384,6 +384,18 @@ static int mtk_mmsys_probe(struct
>>>>> platform_device *pdev)
>>>>> mmsys->data = match_data->drv_data[0];
>>>>> }
>>>>>
>>>>> + spin_lock_init(&mmsys->lock);
>>>>> +
>>>>> + mmsys->rcdev.owner = THIS_MODULE;
>>>>> + mmsys->rcdev.nr_resets = mmsys->data->num_resets;
>>>>> + mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
>>>>> + mmsys->rcdev.of_node = pdev->dev.of_node;
>>>>> + ret = devm_reset_controller_register(&pdev->dev,
>>>>> &mmsys-
>>>>>> rcdev);
>>>>>
>>>>> + if (ret) {
>>>>> + dev_err(&pdev->dev, "Couldn't register mmsys
>>>>> reset
>>>>> controller: %d\n", ret);
>>>>> + return ret;
>>>>> + }
>>>>> +
This code is only relevant if mmsys->data->num_resets > 0. Let's check for that
before setting up and registering an interrupt controller. What do you think?
Regards,
Matthias
>>>>> #if IS_REACHABLE(CONFIG_MTK_CMDQ)
>>>>> ret = cmdq_dev_get_client_reg(dev, &mmsys->cmdq_base,
>>>>> 0);
>>>>> if (ret)
>>>>> diff --git a/drivers/soc/mediatek/mtk-mmsys.h
>>>>> b/drivers/soc/mediatek/mtk-mmsys.h
>>>>> index f01ba206481d..20a271b80b3b 100644
>>>>> --- a/drivers/soc/mediatek/mtk-mmsys.h
>>>>> +++ b/drivers/soc/mediatek/mtk-mmsys.h
>>>>> @@ -92,6 +92,7 @@ struct mtk_mmsys_driver_data {
>>>>> const struct mtk_mmsys_routes *routes;
>>>>> const unsigned int num_routes;
>>>>> const u16 sw0_rst_offset;
>>>>> + const u32 num_resets;
>>>>> };
>>>>>
>>>>> struct mtk_mmsys_match_data {
>>>>
>>>>
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v26 07/10] soc: mediatek: mmsys: add mmsys for support 64 reset bits
2022-08-24 11:41 ` Matthias Brugger
@ 2022-08-25 2:19 ` Nancy.Lin
0 siblings, 0 replies; 17+ messages in thread
From: Nancy.Lin @ 2022-08-25 2:19 UTC (permalink / raw)
To: Matthias Brugger, Rob Herring, Chun-Kuang Hu, Philipp Zabel, wim,
AngeloGioacchino Del Regno, linux, nfraprado
Cc: David Airlie, Daniel Vetter, Nathan Chancellor, Nick Desaulniers,
jason-jh . lin, Yongqiang Niu, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek, dri-devel, llvm, singo.chang,
Project_Global_Chrome_Upstream_Group
Hi Matthias,
Thanks for your comment.
On Wed, 2022-08-24 at 13:41 +0200, Matthias Brugger wrote:
>
> On 24/08/2022 04:44, Nancy.Lin wrote:
> > Hi Matthias,
> >
> > Thanks for your comment.
> >
> > On Tue, 2022-08-23 at 14:08 +0200, Matthias Brugger wrote:
> > >
> > > On 23/08/2022 13:30, Nancy.Lin wrote:
> > > > Hi Matthias,
> > > >
> > > > Thanks for the review.
> > > >
> > > > On Tue, 2022-08-23 at 12:20 +0200, Matthias Brugger wrote:
> > > > >
> > > > > On 19/08/2022 08:10, Nancy.Lin wrote:
> > > > > > Add mmsys for support 64 reset bits. It is a preparation
> > > > > > for
> > > > > > MT8195
> > > > > > vdosys1 HW reset. MT8195 vdosys1 has more than 32 reset
> > > > > > bits.
> > > > > >
> > > > > > 1. Add the number of reset bits in mmsys private data
> > > > > > 2. move the whole "reset register code section" behind the
> > > > > > "get mmsys->data" code section for getting the num_resets
> > > > > > in
> > > > > > mmsys-
> > > > > > > data.
> > > > > >
> > > > > > Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
> > > > > > Reviewed-by: AngeloGioacchino Del Regno <
> > > > > > angelogioacchino.delregno@collabora.com>
> > > > > > Reviewed-by: CK Hu <ck.hu@mediatek.com>
> > > > > > Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
> > > > > > ---
> > > > > > drivers/soc/mediatek/mtk-mmsys.c | 40
> > > > > > +++++++++++++++++++++-
> > > > > > ---
> > > > > > -------
> > > > > > drivers/soc/mediatek/mtk-mmsys.h | 1 +
> > > > > > 2 files changed, 27 insertions(+), 14 deletions(-)
> > > > > >
> > > > > > diff --git a/drivers/soc/mediatek/mtk-mmsys.c
> > > > > > b/drivers/soc/mediatek/mtk-mmsys.c
> > > > > > index 999be064103b..20ae751ad8a7 100644
> > > > > > --- a/drivers/soc/mediatek/mtk-mmsys.c
> > > > > > +++ b/drivers/soc/mediatek/mtk-mmsys.c
> > > > > > @@ -20,6 +20,8 @@
> > > > > > #include "mt8195-mmsys.h"
> > > > > > #include "mt8365-mmsys.h"
> > > > > >
> > > > > > +#define MMSYS_SW_RESET_PER_REG 32
> > > > > > +
> > > > > > static const struct mtk_mmsys_driver_data
> > > > > > mt2701_mmsys_driver_data = {
> > > > > > .clk_driver = "clk-mt2701-mm",
> > > > > > .routes = mmsys_default_routing_table,
> > > > > > @@ -86,6 +88,7 @@ static const struct mtk_mmsys_driver_data
> > > > > > mt8173_mmsys_driver_data = {
> > > > > > .routes = mmsys_default_routing_table,
> > > > > > .num_routes =
> > > > > > ARRAY_SIZE(mmsys_default_routing_table),
> > > > > > .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
> > > > > > + .num_resets = 32,
> > > > > > };
> > > > > >
> > > > > > static const struct mtk_mmsys_match_data
> > > > > > mt8173_mmsys_match_data
> > > > > > = {
> > > > > > @@ -100,6 +103,7 @@ static const struct
> > > > > > mtk_mmsys_driver_data
> > > > > > mt8183_mmsys_driver_data = {
> > > > > > .routes = mmsys_mt8183_routing_table,
> > > > > > .num_routes =
> > > > > > ARRAY_SIZE(mmsys_mt8183_routing_table),
> > > > > > .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
> > > > > > + .num_resets = 32,
> > > > > > };
> > > > > >
> > > > > > static const struct mtk_mmsys_match_data
> > > > > > mt8183_mmsys_match_data
> > > > > > = {
> > > > > > @@ -114,6 +118,7 @@ static const struct
> > > > > > mtk_mmsys_driver_data
> > > > > > mt8186_mmsys_driver_data = {
> > > > > > .routes = mmsys_mt8186_routing_table,
> > > > > > .num_routes =
> > > > > > ARRAY_SIZE(mmsys_mt8186_routing_table),
> > > > > > .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
> > > > > > + .num_resets = 32,
> > > > > > };
> > > > > >
> > > > > > static const struct mtk_mmsys_match_data
> > > > > > mt8186_mmsys_match_data
> > > > > > = {
> > > > > > @@ -128,6 +133,7 @@ static const struct
> > > > > > mtk_mmsys_driver_data
> > > > > > mt8192_mmsys_driver_data = {
> > > > > > .routes = mmsys_mt8192_routing_table,
> > > > > > .num_routes =
> > > > > > ARRAY_SIZE(mmsys_mt8192_routing_table),
> > > > > > .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
> > > > > > + .num_resets = 32,
> > > > >
> > > > > You didn't reply to Nicolas regarding the reset numbers. I
> > > > > actually
> > > > > agree with
> > > > > him that we will need the num_resets declared for all
> > > > > devices.
> > > > > Why do
> > > > > you think
> > > > > this is not the case?
> > > > >
> > > > > Regards,
> > > > > Matthias
> > > > >
> > > >
> > > > Sorry, I lost Nicolas's email.
> > > >
> > > > I checked with the mmsys git log with reset controller
> > > > function.
> > > >
> > > > 1. Enric add mmsys reset controller function in [1]/[2].
> > > > => in mtk_mmsys_reset_update(), all mmsys reset offset is
> > > > MMSYS_SW0_RST_B (0x140).
> > > >
> > > > 2. After Enric's patch, Rex add sw0_rst_offset in mmsys driver
> > > > data
> > > > in
> > > > [3].
> > > >
> > > > So, I think sw0_rst_offset is not zero. Instead of only add
> > > > num_resets
> > > > but also need to add sw0_rst_offset for all mmsys. What do you
> > > > think ?
> > > >
> > >
> > > Good point. It seems we have a bug in the driver. Either all SoCs
> > > have the
> > > reset, but it's broken since
> > > 62dc30150c06 ("soc: mediatek: mmsys: add sw0_rst_offset in mmsys
> > > driver data")
> > > or we are adding a reset controller independently if the silicon
> > > has
> > > one, which
> > > would be an error in:
> > > f27ef2856343 ("soc: mediatek: mmsys: Add reset controller
> > > support")
> > >
> > > We have to find that out.
> > >
> > > Regards,
> > > Matthias
> >
> >
> > In [2], I think the first revision of Enric's reset controller is
> > added
> > for 8173 and 8183, not for all mmsys device.
> > =>[v3,4/7] arm64: dts: mt8173: Add the mmsys reset bit to
> > reset the
> > dsi0
> > =>[v3,5/7] arm64: dts: mt8183: Add the mmsys reset bit to
> > reset the
> > dsi0
> >
> > In [3], Rex only add sw0_rst_offset in 8173 and 8183 mmsys driver
> > data.
> > >
> >
> > For other SoCs, like mt2701,mt2712..., these SoCs even don't define
> > mmsys hw reset bit[4]. So I think only set the num_resets to 32 or
> > 64
> > to those mmsys devices who really need the reset control, others
> > set to
> > 0(same as my v26 patch).
> >
>
> Thanks for looking into this, please see my comment further below.
>
>
> >
> > [4]mt2701-resets.h
> >
https://urldefense.com/v3/__https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/dt-bindings/reset/mt2701-resets.h?id=62dc30150c06774a8122c52aedd0eddaceaf5940__;!!CTRNKA9wMg0ARbw!3j1YotescyEb7vq_dITIlc-FdtaFSslPkcn3B-Sw95Zf613Z-TPG4FK0BdCyW0Fb$
> >
> >
> > Regards,
> > Nancy
> >
> >
> > > > [1]
> > > >
> >
> >
https://urldefense.com/v3/__https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/soc/mediatek/mtk-mmsys.c?id=f27ef2856343e2ddc392975d7b15120442e4d7b7__;!!CTRNKA9wMg0ARbw!3cWAYlD1mrWRmNZy0zoJs8MNiD3s7K9PteJI9cGEvu_qp3VShfqxsBTb_fKynszs$
> > > >
> > > > [2]
> > > >
> > > >
> >
> >
https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/cover/20210825102632.601614-1-enric.balletbo@collabora.com/__;!!CTRNKA9wMg0ARbw!3cWAYlD1mrWRmNZy0zoJs8MNiD3s7K9PteJI9cGEvu_qp3VShfqxsBTb_cH-3nM8$
> > > >
> > > > [3]
> > > >
> > > >
> >
> >
https://urldefense.com/v3/__https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/soc/mediatek/mtk-mmsys.c?id=62dc30150c06774a8122c52aedd0eddaceaf5940__;!!CTRNKA9wMg0ARbw!3cWAYlD1mrWRmNZy0zoJs8MNiD3s7K9PteJI9cGEvu_qp3VShfqxsBTb_VXEsbNa$
> > > >
> > > >
> > > > Regards,
> > > > Nancy
> > > > >
> > > > > > };
> > > > > >
> > > > > > static const struct mtk_mmsys_match_data
> > > > > > mt8192_mmsys_match_data
> > > > > > = {
> > > > > > @@ -288,13 +294,19 @@ static int
> > > > > > mtk_mmsys_reset_update(struct
> > > > > > reset_controller_dev *rcdev, unsigned l
> > > > > > {
> > > > > > struct mtk_mmsys *mmsys = container_of(rcdev,
> > > > > > struct
> > > > > > mtk_mmsys,
> > > > > > rcdev);
> > > > > > unsigned long flags;
> > > > > > + u32 offset;
> > > > > > + u32 reg;
> > > > > > +
> > > > > > + offset = (id / MMSYS_SW_RESET_PER_REG) * sizeof(u32);
> > > > > > + id = id % MMSYS_SW_RESET_PER_REG;
> > > > > > + reg = mmsys->data->sw0_rst_offset + offset;
> > > > > >
> > > > > > spin_lock_irqsave(&mmsys->lock, flags);
> > > > > >
> > > > > > if (assert)
> > > > > > - mtk_mmsys_update_bits(mmsys, mmsys->data-
> > > > > > > sw0_rst_offset, BIT(id), 0, NULL);
> > > > > >
> > > > > > + mtk_mmsys_update_bits(mmsys, reg, BIT(id), 0,
> > > > > > NULL);
> > > > > > else
> > > > > > - mtk_mmsys_update_bits(mmsys, mmsys->data-
> > > > > > > sw0_rst_offset, BIT(id), BIT(id), NULL);
> > > > > >
> > > > > > + mtk_mmsys_update_bits(mmsys, reg, BIT(id),
> > > > > > BIT(id),
> > > > > > NULL);
> > > > > >
> > > > > > spin_unlock_irqrestore(&mmsys->lock, flags);
> > > > > >
> > > > > > @@ -351,18 +363,6 @@ static int mtk_mmsys_probe(struct
> > > > > > platform_device *pdev)
> > > > > > return ret;
> > > > > > }
> > > > > >
> > > > > > - spin_lock_init(&mmsys->lock);
> > > > > > -
> > > > > > - mmsys->rcdev.owner = THIS_MODULE;
> > > > > > - mmsys->rcdev.nr_resets = 32;
> > > > > > - mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
> > > > > > - mmsys->rcdev.of_node = pdev->dev.of_node;
> > > > > > - ret = devm_reset_controller_register(&pdev->dev,
> > > > > > &mmsys-
> > > > > > > rcdev);
> > > > > >
> > > > > > - if (ret) {
> > > > > > - dev_err(&pdev->dev, "Couldn't register mmsys
> > > > > > reset
> > > > > > controller: %d\n", ret);
> > > > > > - return ret;
> > > > > > - }
> > > > > > -
> > > > > > res = platform_get_resource(pdev,
> > > > > > IORESOURCE_MEM, 0);
> > > > > > if (!res) {
> > > > > > dev_err(dev, "Couldn't get mmsys
> > > > > > resource\n");
> > > > > > @@ -384,6 +384,18 @@ static int mtk_mmsys_probe(struct
> > > > > > platform_device *pdev)
> > > > > > mmsys->data = match_data->drv_data[0];
> > > > > > }
> > > > > >
> > > > > > + spin_lock_init(&mmsys->lock);
> > > > > > +
> > > > > > + mmsys->rcdev.owner = THIS_MODULE;
> > > > > > + mmsys->rcdev.nr_resets = mmsys->data->num_resets;
> > > > > > + mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
> > > > > > + mmsys->rcdev.of_node = pdev->dev.of_node;
> > > > > > + ret = devm_reset_controller_register(&pdev->dev,
> > > > > > &mmsys-
> > > > > > > rcdev);
> > > > > >
> > > > > > + if (ret) {
> > > > > > + dev_err(&pdev->dev, "Couldn't register mmsys
> > > > > > reset
> > > > > > controller: %d\n", ret);
> > > > > > + return ret;
> > > > > > + }
> > > > > > +
>
>
> This code is only relevant if mmsys->data->num_resets > 0. Let's
> check for that
> before setting up and registering an interrupt controller. What do
> you think?
>
> Regards,
> Matthias
>
There is no doubt that we need to check num_resets > 0 before
registering reset controller.
I will add it in the next revision.
Regards,
Nancy
> > > > > > #if IS_REACHABLE(CONFIG_MTK_CMDQ)
> > > > > > ret = cmdq_dev_get_client_reg(dev, &mmsys-
> > > > > > >cmdq_base,
> > > > > > 0);
> > > > > > if (ret)
> > > > > > diff --git a/drivers/soc/mediatek/mtk-mmsys.h
> > > > > > b/drivers/soc/mediatek/mtk-mmsys.h
> > > > > > index f01ba206481d..20a271b80b3b 100644
> > > > > > --- a/drivers/soc/mediatek/mtk-mmsys.h
> > > > > > +++ b/drivers/soc/mediatek/mtk-mmsys.h
> > > > > > @@ -92,6 +92,7 @@ struct mtk_mmsys_driver_data {
> > > > > > const struct mtk_mmsys_routes *routes;
> > > > > > const unsigned int num_routes;
> > > > > > const u16 sw0_rst_offset;
> > > > > > + const u32 num_resets;
> > > > > > };
> > > > > >
> > > > > > struct mtk_mmsys_match_data {
> > > > >
> > > > >
>
>
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2022-08-25 3:13 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-19 6:10 [PATCH v26 00/10] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 01/10] dt-bindings: reset: mt8195: add vdosys1 reset control bit Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 02/10] soc: mediatek: add mtk-mmsys ethdr and mdp_rdma components Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 03/10] soc: mediatek: add mtk-mmsys support for mt8195 vdosys1 Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 04/10] soc: mediatek: add mtk_mmsys_update_bits API Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 05/10] soc: mediatek: add mtk-mmsys config API for mt8195 vdosys1 Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 06/10] soc: mediatek: add cmdq support of " Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 07/10] soc: mediatek: mmsys: add mmsys for support 64 reset bits Nancy.Lin
2022-08-23 10:20 ` Matthias Brugger
2022-08-23 11:30 ` Nancy.Lin
2022-08-23 12:08 ` Matthias Brugger
2022-08-24 2:44 ` Nancy.Lin
2022-08-24 11:41 ` Matthias Brugger
2022-08-25 2:19 ` Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 08/10] soc: mediatek: mmsys: add reset control for MT8195 vdosys1 Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 09/10] soc: mediatek: add mtk-mutex component - dp_intf1 Nancy.Lin
2022-08-19 6:10 ` [PATCH v26 10/10] soc: mediatek: add mtk-mutex support for mt8195 vdosys1 Nancy.Lin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).