On 24/2/20 6:52, CK Hu wrote:
> 
> Hi,
> 
> On Fri, 2020-02-21 at 18:10 +0100, Enric Balletbo i Serra wrote:
>> Hi,
>>
>> On 21/2/20 12:53, Matthias Brugger wrote:
>>>
>>>
>>> On 21/02/2020 12:37, Enric Balletbo i Serra wrote:
>>>> Hi CK and Matthias,
>>>>
>>>> On 21/2/20 12:11, CK Hu wrote:
>>>>> Hi, Matthias:
>>>>>
>>>>> On Fri, 2020-02-21 at 11:24 +0100, Matthias Brugger wrote:
>>>>>>
>>>>>> On 21/02/2020 10:27, CK Hu wrote:
>>>>>>> Hi, Enric:
>>>>>>>
>>>>>>> On Fri, 2020-02-21 at 09:56 +0100, Enric Balletbo i Serra wrote:
>>>>>>>> Hi CK,
>>>>>>>>
>>>>>>>> Thanks for your quick answer.
>>>>>>>>
>>>>>>>> On 21/2/20 5:39, CK Hu wrote:
>>>>>>>>> Hi, Enric:
>>>>>>>>>
>>>>>>>>> On Thu, 2020-02-20 at 18:21 +0100, Enric Balletbo i Serra wrote:
>>>>>>>>>> Dear all,
>>>>>>>>>>
>>>>>>>>>> Those patches are intended to solve an old standing issue on some
>>>>>>>>>> Mediatek devices (mt8173, mt2701 and mt2712) in a slightly different 
>>>>>>>>>> way
>>>>>>>>>> to the precedent series.
>>>>>>>>>>
>>>>>>>>>> Up to now both drivers, clock and drm are probed with the same 
>>>>>>>>>> device tree
>>>>>>>>>> compatible. But only the first driver get probed, which in effect 
>>>>>>>>>> breaks
>>>>>>>>>> graphics on those devices.
>>>>>>>>>>
>>>>>>>>>> The version eight of the series tries to solve the problem with a
>>>>>>>>>> different approach than the previous series but similar to how is 
>>>>>>>>>> solved
>>>>>>>>>> on other Mediatek devices.
>>>>>>>>>>
>>>>>>>>>> The MMSYS (Multimedia subsystem) in Mediatek SoCs has some registers 
>>>>>>>>>> to
>>>>>>>>>> control clock gates (which is used in the clk driver) and some 
>>>>>>>>>> registers
>>>>>>>>>> to set the routing and enable the differnet blocks of the display
>>>>>>>>>> and MDP (Media Data Path) subsystem. On this series the clk driver is
>>>>>>>>>> not a pure clock controller but a system controller that can provide
>>>>>>>>>> access to the shared registers between the different drivers that 
>>>>>>>>>> need
>>>>>>>>>> it (mediatek-drm and mediatek-mdp). And the biggest change is, that 
>>>>>>>>>> in
>>>>>>>>>> this version, clk driver is the entry point (parent) which will 
>>>>>>>>>> trigger
>>>>>>>>>> the probe of the corresponding mediatek-drm driver and pass its MMSYS
>>>>>>>>>> platform data for display configuration.
>>>>>>>>>
>>>>>>>>> When mmsys is a system controller, I prefer to place mmsys in
>>>>>>>>> drivers/soc/mediatek, and it share registers for clock, display, and 
>>>>>>>>> mdp
>>>>>>>>> driver. This means the probe function is placed in
>>>>>>>>> drivers/soc/mediatek ,its display clock function, mdp clock function 
>>>>>>>>> are
>>>>>>>>> placed in drivers/clk, display routing are placed in drivers/gpu/drm,
>>>>>>>>> and mdp routing are placed in dirvers/video.
>>>>>>>>>
>>>>>>>>
>>>>>>>> I understand what you mean but I am not sure this makes the code 
>>>>>>>> clearer and
>>>>>>>> useful. The driver in drivers/soc/mediatek will be a simple dummy 
>>>>>>>> implementation
>>>>>>>> of a "simple-mfd" device (a driver that simply matches with
>>>>>>>> "mediatek,mt8173-mmsys" and instantiates the "clk-mt8173-mm" and the
>>>>>>>> "mediatek-drm" driver (note that mediatek-mdp" is already instantiated 
>>>>>>>> via
>>>>>>>> device-tree).
>>>>>>>>
>>>>>>>
>>>>>>> It's clear that mmsys is neither a pure clock controller nor a pure
>>>>>>> routing controller for display and mdp. 
>>>>>>>
>>>>>>>> It'd be nice had a proper device-tree with a "simple-mfd" for mmsys 
>>>>>>>> from the
>>>>>>>> beginning representing how really hardwware is, but I think that, 
>>>>>>>> change this
>>>>>>>> now, will break backward compatibility.
>>>>>>>
>>>>>>> Maybe this is a solution. Current device tree would work only on old
>>>>>>> kernel version with a bug, so this mean there is no any device tree
>>>>>>> works on kernel version without bug. Why do we compatible with such
>>>>>>> device tree?
>>>>>>>
>>>>>>
>>>>
>>>> So the only reason why current DT worked at some point is because there 
>>>> was a
>>>> kernel bug?
>>>>
>>>
>>> I'd say you can call it a kernel bug:
>>> https://patchwork.kernel.org/patch/10367877/#22078767
>>>
>>>
>>>> If that's the case I think we shouldn't worry about break DT compatibility 
>>>> (I'm
>>>> sorry for those that having a buggy kernel makes display working)
>>>>
>>>>>> The idea behind this is, that the device-tree could be passed by some 
>>>>>> boot
>>>>>> firmware, so that the OS do not care about it. For this we need a stable 
>>>>>> DTS as
>>>>>> otherwise newer kernel with older FW would break.
>>>>>>
>>>>>> DTS is supposed to be just a different description of the HW like ACPI. 
>>>>>> So it
>>>>>> has to be compatible (newer kernel with older DTS and if possible vice 
>>>>>> versa).
>>>>>
>>>>> In my view, there is no FW (except some bug-inside FW) which works on
>>>>> this dts, so this dts is in a initial state. I think the compatibility
>>>>> is based on that dts correctly describe the HW. If we find this dts does
>>>>> not correctly describe the HW and it's in a initial state, should we
>>>>> still make it compatible?
>>>>>
>>>>
>>>> In this case I think we don't need to worry about buggy kernels, the only 
>>>> thing
>>>> that we need to take in consideration is that mmsys is instantiated on 
>>>> both (the
>>>> old DT and the new DT), we shouldn't expect display working (because never
>>>> worked, right?)
>>>>
>>>> With that in mind, I agree that is a good opportunity to fix properly the 
>>>> HW
>>>> topology.
>>>>
>>>> What thing that worries me is that I see this pattern on all Mediatek 
>>>> SoCs, does
>>>> this mean that display was never well supported for Mediatek SoCs?
>>>>
>>>
>>> That's exactly the case. Actually there were some patches for mt762x (can't
>>> remember if mt7623 or mt7622) whcih got pushed back, because we would need 
>>> to
>>> fix the mmsys problem first.
>>>
>>> Ok, so if we come to the conclusion that this actually only worked because 
>>> of a
>>> bug, then we can remodel the whole thing.
>>> In this case, I think the best would be to do what CK proposed:
>>> https://patchwork.kernel.org/patch/11381201/#23158169
>>>
>>> Making everything below 0x14000000 a subdevice of mmsys (mdp, ovl, rdma, you
>>> name it).
>>>
>>
>>
>> I see the MMSYS space as config registers to route the different ports in the
>> drm and video subsystem, so, as phandle of the display (drivers/gpur/drm) and
>> video (drivers/video) subsystem. What about something like this?
>>
>> mmsys: syscon@14000000 {
>>      compatible = "mediatek,mt8173-mmsys", "syscon";
>>      reg = <0 0x14000000 0 0x1000>;
>>      power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
>>      assigned-clocks = <&topckgen CLK_TOP_MM_SEL>;
>>      assigned-clock-rates = <400000000>;
>>      #clock-cells = <1>;
>> };
>>
>> Basically is what we have with
>>
>> * [PATCH v8 4/6] clk: mediatek: mt8173: Switch MMSYS to platform driver
>>
>> And
>>
>> display-subsystem {
>>      compatible = "mediatek,display-subsystem";
>>      mediatek,mmsys = <&mmsys>; /* phandle to the routing config registers */
>>      ports = <&ovl0>, <&ovl1>, < ... >
>> }
>>
>> We are introducing a new compatible that is not describing hardware but how
>> hardware is grouped, which I think is fine.
>>
>> The mediatek-drm driver will need a bit of rework but not much I guess.
>>
>> What is still not clear to me is the mdp part because doesn't seem to have an
>> entry point like the display part, instead it uses one port as entry point.
>>
>>      mdp_rdma0: rdma@14001000 {
>>              compatible = "mediatek,mt8173-mdp-rdma",
>>                           "mediatek,mt8173-mdp";
>>
>> AFAICS that driver is not touching MMSYS config registers to route the mdp 
>> path,
>> only is getting the clocks, but I assume it will do in the future. In such 
>> case,
>> maybe we could do something similar to the display-subsystem node?
>>
> 
> Your proposal is to probe clock driver by mmsys device and probe display 
> driver by another device. You have two choice to probe display driver: one is 
> to create a virtual device that group display devices and probe display 
> driver by this device. Another one is to choose one display device, such as 
> OVL, to probe display driver.
> 
> I do not like a virtual device solution. In some Mediatek SoC, the routing is 
> so flexible that one function block could be placed in display pipe or mdp 
> pipe by different routing.
> 
> mmsys device control the display routing and display clock. OVL control. 
> display overlay function. Both devices control partial display function, so 
> probing display driver by which one looks the same for me.
> 
> I prefer to probe display driver by mmsys device because it has more 
> information of display pipe line and OVL just focus on overlay function. Only 
> when it's difficult to probe display driver by mmsys device, we have to probe 
> display driver by OVL.
> 
> I think mmsys is really a multi-function device, and the device tree 
> description may look like:
> 
> mmsys: system-controller@14000000 {
>       compatible = "mediatek,mt8173-mmsys", "syscon", "simple-mfd";
>       reg = <0 0x14000000 0 0x1000>;
>       power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
>       assigned-clocks = <&topckgen CLK_TOP_MM_SEL>;
>       assigned-clock-rates = <400000000>;
>       #clock-cells = <1>;
> 
>       route {
>               compatible = "mediatek,mt8173-mmsys-route";

Are you suggesting move the mediatek-drm routing to a new mt8173-mmsys-route
driver? Or this is a more generic routing device? Is this routing device already
implemented somewhere?

>       };
> 
>       clock {
>               compatible = "mediatek,mt8173-mmsys-clk";
>       };
> };
> 
> But from mt6797 register map [1], mmsys have many function such as fake 
> engine, memory delay, reset,....
> Should we break each function into a sub device?
> Or we do not break any function (include clock and routing) into sub device?
> Or just break these two function into device, remove "simple-mfd" from mmsys, 
> so the rest control is in mmsys top device?
> 

How do you see move mmsys to drivers/soc/mediatek and instantiate the clk and
mediatek-drm driver

 mmsys: syscon@14000000 {
        compatible = "mediatek,mt8173-mmsys", "syscon", "simple-mfd";
        reg = <0 0x14000000 0 0x1000>;
        power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;

        clock-controller {
                compatible = "mediatek,clk-mt8173-mm"
                assigned-clocks = <&topckgen CLK_TOP_MM_SEL>;
                assigned-clock-rates = <400000000>;
                #clock-cells = <1>;
        };

        display-subsystem {
                compatible = "mediatek,display-subsystem";
        };
 };


Regards,
 Enric

> [1] 
> https://www.96boards.org/documentation/consumer/mediatekx20/additional-docs/docs/MT6797_Register_Table_Part_2.pdf
> 
> Regards,
> CK
> 
> 
>> Regards,
>>  Enric
>>
>>
>>> Regards,
>>> Matthias
>>>
>>>> Thanks.
>>>>
>>>>> If you have better solution, just let's forget this.
>>>>>
>>>>> Regards,
>>>>> CK
>>>>>
>>>>>>
>>>>>> Regards,
>>>>>> Matthias
>>>>>>
>>>>>>> Regards,
>>>>>>> CK
>>>>>>>
>>>>>>>>
>>>>>>>> IMHO I think that considering the clk driver as entry point is fine, 
>>>>>>>> but this is
>>>>>>>> something that the clock maintainers should decide.
>>>>>>>>
>>>>>>>> Also note that this is not only a MT8173 problem I am seeing the same 
>>>>>>>> problem on
>>>>>>>> all other Mediatek SoCs.
>>>>>>>>
>>>>>>>> Thanks.
>>>>>>>>
>>>>>>>>> Regards,
>>>>>>>>> CK
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> All this series was tested on the Acer R13 Chromebook only.
>>>>>>>>>>
>>>>>>>>>> For reference, here are the links to the old discussions:
>>>>>>>>>>
>>>>>>>>>> * v7: 
>>>>>>>>>> https://patchwork.kernel.org/project/linux-mediatek/list/?series=241217
>>>>>>>>>> * v6: 
>>>>>>>>>> https://patchwork.kernel.org/project/linux-mediatek/list/?series=213219
>>>>>>>>>> * v5: 
>>>>>>>>>> https://patchwork.kernel.org/project/linux-mediatek/list/?series=44063
>>>>>>>>>> * v4:
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10530871/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10530883/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10530885/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10530911/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10530913/
>>>>>>>>>> * v3:
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10367857/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10367861/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10367877/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10367875/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10367885/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10367883/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10367889/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10367907/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10367909/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10367905/
>>>>>>>>>> * v2: No relevant discussion, see v3
>>>>>>>>>> * v1:
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10016497/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10016499/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10016505/
>>>>>>>>>>   * https://patchwork.kernel.org/patch/10016507/
>>>>>>>>>>
>>>>>>>>>> Best regards,
>>>>>>>>>>  Enric
>>>>>>>>>>
>>>>>>>>>> Changes in v8:
>>>>>>>>>> - Be a builtin_platform_driver like other mediatek mmsys drivers.
>>>>>>>>>> - New patches introduced in this series.
>>>>>>>>>>
>>>>>>>>>> Changes in v7:
>>>>>>>>>> - Add R-by from CK
>>>>>>>>>> - Add R-by from CK
>>>>>>>>>> - Fix check of return value of of_clk_get
>>>>>>>>>> - Fix identation
>>>>>>>>>> - Free clk_data->clks as well
>>>>>>>>>> - Get rid of private data structure
>>>>>>>>>>
>>>>>>>>>> Enric Balletbo i Serra (2):
>>>>>>>>>>   drm/mediatek: Move MMSYS configuration to 
>>>>>>>>>> include/linux/platform_data
>>>>>>>>>>   clk/drm: mediatek: Fix mediatek-drm device probing
>>>>>>>>>>
>>>>>>>>>> Matthias Brugger (4):
>>>>>>>>>>   drm/mediatek: Use regmap for register access
>>>>>>>>>>   drm/mediatek: Omit warning on probe defers
>>>>>>>>>>   media: mtk-mdp: Check return value of of_clk_get
>>>>>>>>>>   clk: mediatek: mt8173: Switch MMSYS to platform driver
>>>>>>>>>>
>>>>>>>>>>  drivers/clk/mediatek/Kconfig                  |   6 +
>>>>>>>>>>  drivers/clk/mediatek/Makefile                 |   1 +
>>>>>>>>>>  drivers/clk/mediatek/clk-mt2701-mm.c          |  30 +++
>>>>>>>>>>  drivers/clk/mediatek/clk-mt2712-mm.c          |  44 +++++
>>>>>>>>>>  drivers/clk/mediatek/clk-mt8173-mm.c          | 172 
>>>>>>>>>> ++++++++++++++++++
>>>>>>>>>>  drivers/clk/mediatek/clk-mt8173.c             | 104 -----------
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_disp_color.c     |   5 +-
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_disp_ovl.c       |   5 +-
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_disp_rdma.c      |   5 +-
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_dpi.c            |  12 +-
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_drm_crtc.c       |   4 +-
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_drm_ddp.c        |  53 +++---
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_drm_ddp.h        |   4 +-
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h   |  56 +-----
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_drm_drv.c        | 113 +-----------
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_drm_drv.h        |  13 +-
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_dsi.c            |   8 +-
>>>>>>>>>>  drivers/gpu/drm/mediatek/mtk_hdmi.c           |   4 +-
>>>>>>>>>>  drivers/media/platform/mtk-mdp/mtk_mdp_comp.c |   6 +
>>>>>>>>>>  include/linux/platform_data/mtk_mmsys.h       |  73 ++++++++
>>>>>>>>>>  20 files changed, 401 insertions(+), 317 deletions(-)
>>>>>>>>>>  create mode 100644 drivers/clk/mediatek/clk-mt8173-mm.c
>>>>>>>>>>  create mode 100644 include/linux/platform_data/mtk_mmsys.h
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Linux-mediatek mailing list
>>>>>>>> [email protected]
>>>>>>>> http://lists.infradead.org/mailman/listinfo/linux-mediatek
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Linux-mediatek mailing list
>>>>>> [email protected]
>>>>>> http://lists.infradead.org/mailman/listinfo/linux-mediatek
>>>>>
>>>
>>
>> _______________________________________________
>> Linux-mediatek mailing list
>> [email protected]
>> http://lists.infradead.org/mailman/listinfo/linux-mediatek
> 
> 
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to