mbox series

[V8,00/13] Add driver for dvfsrc, support for interconnect

Message ID 1611648234-15043-1-git-send-email-henryc.chen@mediatek.com
Headers show
Series Add driver for dvfsrc, support for interconnect | expand

Message

Henry Chen Jan. 26, 2021, 8:03 a.m. UTC
This series is based on v5.11-rc1.

The patchsets add support for MediaTek hardware module named DVFSRC
(dynamic voltage and frequency scaling resource collector). The DVFSRC is
a HW module which is used to collect all the requests from both software
and hardware and turn into the decision of minimum operating voltage and
minimum DRAM frequency to fulfill those requests.

So, This series is to implement the dvfsrc driver to collect all the
requests of operating voltage or DRAM bandwidth from other device drivers
likes GPU/Camera through 3 frameworks basically:

1. interconnect framework: to aggregate the bandwidth
   requirements from different clients

[1] https://patchwork.kernel.org/cover/10766329/

There has a hw module "DRAM scheduler", which used to control the throughput.
The DVFSRC will collect forecast data of dram bandwidth from
SW consumers(camera/gpu...), and according the forecast to change the DRAM
frequency

2. Regualtor framework: to handle the operating voltage requirement from user or
   cosumer which not belong any power domain

Changes in V8:
* Fixed the dt_binding_check error of dvfsrc.yaml. (Rob)
* Remove Kconfig dependency of DVFSRC

Changes in V7:
* Fixed the dt_binding_check error of dvfsrc.yaml. (Rob)
* Fixed the checkpatch complains of "Signed-off-by: email name mismatch". (Georgi)
* Fixed coding style of interconnect driver. (Georgi)
* Upate comment of the years to 2021. (Georgi)

Changes in V6:
* Remove the performace state support, because the request from consumer can be
replaced by using interconnect and regulator framework.
* Update the DT patches and convert them to DT schema. (Georgi)
* Modify the comment format and coding style. (Mark)

Changes in V5:
* Support more platform mt6873/mt8192
* Drop the compatible and interconnect provider node and make the parent node an
interconnect provider. (Rob/Georgi)
* Make modification of interconnect driver from coding suggestion. (Georgi)
* Move interconnect diagram into the commit text of patch. (Georgi)
* Register the interconnect provider as a platform sub-device. (Georgi)

Changes in V4:
* Add acked TAG on dt-bindings patches. (Rob)
* Declaration of emi_icc_aggregate since the prototype of aggregate function
has changed meanwhile. (Georgi)
* Used emi_icc_remove instead of icc_provider_del on probe. (Georgi)
* Add dvfsrc regulator driver into series.
* Bug fixed of mt8183_get_current_level.
* Add mutex protection for pstate operation on dvfsrc_set_performance.

Changes in V3:
* Remove RFC from the subject prefix of the series
* Combine dt-binding patch and move interconnect dt-binding document into
dvfsrc. (Rob)
* Remove unused header, add unit descirption to the bandwidth, rename compatible
name on interconnect driver. (Georgi)
* Fixed some coding style: check flow, naming, used readx_poll_timeout
on dvfsrc driver. (Ryan)
* Rename interconnect driver mt8183.c to mtk-emi.c
* Rename interconnect header mtk,mt8183.h to mtk,emi.h
* mtk-scpsys.c: Add opp table check first to avoid OF runtime parse failed

Changes in RFC V2:
* Remove the DT property dram_type. (Rob)
* Used generic dts property 'opp-level' to get the performace state. (Stephen)
* Remove unecessary dependency config on Kconfig. (Stephen)
* Remove unused header file, fixed some coding style issue, typo,
error handling on dvfsrc driver. (Nicolas/Stephen)
* Remove irq handler on dvfsrc driver. (Stephen)
* Remove init table on dvfsrc driver, combine hw init on trustzone.
* Add interconnect support of mt8183 to aggregate the emi bandwidth.
(Georgi)

V7: https://patchwork.kernel.org/project/linux-mediatek/list/?series=411057
V6: https://patchwork.kernel.org/project/linux-mediatek/list/?series=406077
V5: https://patchwork.kernel.org/project/linux-mediatek/list/?series=348065
V4: https://lore.kernel.org/patchwork/cover/1209284/
V3: https://patchwork.kernel.org/cover/11118867/
RFC V2: https://lore.kernel.org/patchwork/patch/1068113/
RFC V1: https://lore.kernel.org/patchwork/cover/1028535/

Comments

Rob Herring (Arm) Feb. 5, 2021, 8:43 p.m. UTC | #1
On Tue, Jan 26, 2021 at 04:03:43PM +0800, Henry Chen wrote:
> Document the binding for enabling dvfsrc on MediaTek SoC.

> 

> Signed-off-by: Henry Chen <henryc.chen@mediatek.com>

> ---

>  .../devicetree/bindings/soc/mediatek/dvfsrc.yaml   | 67 ++++++++++++++++++++++

>  include/dt-bindings/interconnect/mtk,mt8183-emi.h  | 21 +++++++

>  2 files changed, 88 insertions(+)

>  create mode 100644 Documentation/devicetree/bindings/soc/mediatek/dvfsrc.yaml

>  create mode 100644 include/dt-bindings/interconnect/mtk,mt8183-emi.h

> 

> diff --git a/Documentation/devicetree/bindings/soc/mediatek/dvfsrc.yaml b/Documentation/devicetree/bindings/soc/mediatek/dvfsrc.yaml

> new file mode 100644

> index 0000000..0b746a8

> --- /dev/null

> +++ b/Documentation/devicetree/bindings/soc/mediatek/dvfsrc.yaml

> @@ -0,0 +1,67 @@

> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)

> +%YAML 1.2

> +---

> +$id: "http://devicetree.org/schemas/soc/mediatek/dvfsrc.yaml#"

> +$schema: "http://devicetree.org/meta-schemas/core.yaml#"

> +

> +title: MediaTek dynamic voltage and frequency scaling resource collector (DVFSRC)

> +

> +description: |

> +  The Dynamic Voltage and Frequency Scaling Resource Collector (DVFSRC) is a

> +  HW module which is used to collect all the requests from both software and

> +  hardware and turn into the decision of minimum operating voltage and minimum

> +  DRAM frequency to fulfill those requests.

> +

> +maintainers:

> +  - henryc.chen <henryc.chen@mediatek.com>

> +

> +properties:

> +  reg:

> +    description: DVFSRC common register address and length.


maxItems: 1

> +

> +  compatible:

> +    enum:

> +      - mediatek,mt6873-dvfsrc

> +      - mediatek,mt8183-dvfsrc

> +      - mediatek,mt8192-dvfsrc

> +

> +  '#interconnect-cells':

> +    const: 1

> +

> +patternProperties:

> +  dvfsrc-vcore:


Not a pattern. Move to 'properties'.

> +    type: object

> +    description:

> +      The DVFSRC regulator is modelled as a subdevice of the DVFSRC.

> +      Because DVFSRC can request power directly via register read/write, likes

> +      vcore which is a core power of mt8183. As such, the DVFSRC regulator

> +      requires that DVFSRC nodes be present.

> +    $ref: /schemas/regulator/regulator.yaml#

> +

> +required:

> +  - compatible

> +  - reg

> +  - "#interconnect-cells"

> +

> +additionalProperties: false

> +

> +examples:

> +  - |

> +    #include <dt-bindings/interconnect/mtk,mt8183-emi.h>

> +

> +    soc {

> +        #address-cells = <2>;

> +        #size-cells = <2>;

> +

> +        dvfsrc@10012000 {

> +            compatible = "mediatek,mt8183-dvfsrc";

> +            reg = <0 0x10012000 0 0x1000>;

> +            #interconnect-cells = <1>;

> +            dvfsrc_vcore: dvfsrc-vcore {

> +                    regulator-name = "dvfsrc-vcore";

> +                    regulator-min-microvolt = <725000>;

> +                    regulator-max-microvolt = <800000>;

> +                    regulator-always-on;

> +            };

> +        };

> +    };

> diff --git a/include/dt-bindings/interconnect/mtk,mt8183-emi.h b/include/dt-bindings/interconnect/mtk,mt8183-emi.h

> new file mode 100644

> index 0000000..dfd143f

> --- /dev/null

> +++ b/include/dt-bindings/interconnect/mtk,mt8183-emi.h

> @@ -0,0 +1,21 @@

> +/* SPDX-License-Identifier: GPL-2.0

> + *

> + * Copyright (c) 2021 MediaTek Inc.

> + */

> +

> +#ifndef __DT_BINDINGS_INTERCONNECT_MTK_MT8183_EMI_H

> +#define __DT_BINDINGS_INTERCONNECT_MTK_MT8183_EMI_H

> +

> +#define MT8183_SLAVE_DDR_EMI			0

> +#define MT8183_MASTER_MCUSYS			1

> +#define MT8183_MASTER_GPU			2

> +#define MT8183_MASTER_MMSYS			3

> +#define MT8183_MASTER_MM_VPU			4

> +#define MT8183_MASTER_MM_DISP			5

> +#define MT8183_MASTER_MM_VDEC			6

> +#define MT8183_MASTER_MM_VENC			7

> +#define MT8183_MASTER_MM_CAM			8

> +#define MT8183_MASTER_MM_IMG			9

> +#define MT8183_MASTER_MM_MDP			10

> +

> +#endif

> -- 

> 1.9.1

>
Rob Herring (Arm) Feb. 5, 2021, 8:45 p.m. UTC | #2
On Tue, Jan 26, 2021 at 04:03:49PM +0800, Henry Chen wrote:
> Add interconnect provider dt-bindings for MT6873.
> 
> Signed-off-by: Henry Chen <henryc.chen@mediatek.com>
> ---
>  include/dt-bindings/interconnect/mtk,mt6873-emi.h | 41 +++++++++++++++++++++++
>  1 file changed, 41 insertions(+)
>  create mode 100644 include/dt-bindings/interconnect/mtk,mt6873-emi.h

Odd that you put one header in patch 1 and this one separate.

> 
> diff --git a/include/dt-bindings/interconnect/mtk,mt6873-emi.h b/include/dt-bindings/interconnect/mtk,mt6873-emi.h
> new file mode 100644
> index 0000000..0b20011
> --- /dev/null
> +++ b/include/dt-bindings/interconnect/mtk,mt6873-emi.h
> @@ -0,0 +1,41 @@
> +/* SPDX-License-Identifier: GPL-2.0

Don't care about non-GPL users?

> + *
> + * Copyright (c) 2021 MediaTek Inc.
> + */
> +
> +#ifndef __DT_BINDINGS_INTERCONNECT_MTK_MT6873_EMI_H
> +#define __DT_BINDINGS_INTERCONNECT_MTK_MT6873_EMI_H
> +
> +#define MT6873_SLAVE_DDR_EMI		0
> +#define MT6873_MASTER_MCUSYS		1
> +#define MT6873_MASTER_GPUSYS		2
> +#define MT6873_MASTER_MMSYS		3
> +#define MT6873_MASTER_MM_VPU		4
> +#define MT6873_MASTER_MM_DISP		5
> +#define MT6873_MASTER_MM_VDEC		6
> +#define MT6873_MASTER_MM_VENC		7
> +#define MT6873_MASTER_MM_CAM		8
> +#define MT6873_MASTER_MM_IMG		9
> +#define MT6873_MASTER_MM_MDP		10
> +#define MT6873_MASTER_VPUSYS		11
> +#define MT6873_MASTER_VPU_0		12
> +#define MT6873_MASTER_VPU_1		13
> +#define MT6873_MASTER_MDLASYS		14
> +#define MT6873_MASTER_MDLA_0		15
> +#define MT6873_MASTER_UFS		16
> +#define MT6873_MASTER_PCIE		17
> +#define MT6873_MASTER_USB		18
> +#define MT6873_MASTER_DBGIF		19
> +#define MT6873_SLAVE_HRT_DDR_EMI	20
> +#define MT6873_MASTER_HRT_MMSYS		21
> +#define MT6873_MASTER_HRT_MM_DISP	22
> +#define MT6873_MASTER_HRT_MM_VDEC	23
> +#define MT6873_MASTER_HRT_MM_VENC	24
> +#define MT6873_MASTER_HRT_MM_CAM	25
> +#define MT6873_MASTER_HRT_MM_IMG	26
> +#define MT6873_MASTER_HRT_MM_MDP	27
> +#define MT6873_MASTER_HRT_DBGIF		28
> +#define MT6873_MASTER_WIFI		29
> +#define MT6873_MASTER_BT		30
> +#define MT6873_MASTER_NETSYS		31
> +#endif
> -- 
> 1.9.1
>