[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240417091442.170505-1-angelogioacchino.delregno@collabora.com>
Date: Wed, 17 Apr 2024 11:14:35 +0200
From: AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>
To: djakov@...nel.org
Cc: robh@...nel.org,
krzysztof.kozlowski+dt@...aro.org,
conor+dt@...nel.org,
matthias.bgg@...il.com,
angelogioacchino.delregno@...labora.com,
lgirdwood@...il.com,
broonie@...nel.org,
keescook@...omium.org,
gustavoars@...nel.org,
henryc.chen@...iatek.com,
linux-pm@...r.kernel.org,
devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org,
linux-mediatek@...ts.infradead.org,
kernel@...labora.com,
wenst@...omium.org,
amergnat@...libre.com
Subject: [PATCH v2 0/7] MediaTek DVFSRC Bus Bandwidth and Regulator knobs
Changes in v2:
- Fixed issues with regulator binding about useless quotes and
wrong binding path (oops)
- Removed useless 'items' from DVFSRC main binding
- Allowed address/size cells to DVFSRC main binding to resolve
validation issues on the regulator and interconnect bindings
- Changed dvfsrc node name to `system-controller`, as the DVFSRC
is actually able to control multiple system components.
- Added a commit to remove mtk-dvfs-regulator.c before adding the
new, refactored regulator driver
This series adds support for the MediaTek Dynamic Voltage and Frequency
Scaling Resource Controller (DVFSRC), found on many MediaTek SoCs.
This hardware collects requests from both software and the various remote
processors embededd into the SoC, and decides about a minimum operating
voltage and a minimum DRAM frequency to fulfill those requests, in an
effort to provide the best achievable performance per watt.
Such hardware IP is capable of transparently performing direct register
R/W on all of the DVFSRC-controlled regulators and SoC bandwidth knobs.
Summarizing how the DVFSRC works for Interconnect:
ICC provider ICC Nodes
---- ----
_________ |CPU | |--- |VPU |
_____ | |----- ---- | ----
| |->| DRAM | ---- | ----
|DRAM |->|scheduler|----- |GPU | |--- |DISP|
| |->| (EMI) | ---- | ----
|_____|->|_________|---. ----- | ----
/|\ `-|MMSYS|--|--- |VDEC|
| ----- | ----
| | ----
| change DRAM freq |--- |VENC|
-------- | ----
SMC --> | DVFSRC | | ----
-------- |--- |IMG |
| ----
| ----
|--- |CAM |
----
..and for regulators, it's simply...
SMC -> DVFSRC -> Regulator voltage decider -> (vreg) Registers R/W
Please note that this series is based on an old (abandoned) series from
MediaTek [1], and reuses some parts of the code found in that.
Besides, included in this series, there's also a refactoring of the
mtk-dvfsrc-regulator driver, which never got compiled at all, and would
not build anyway because of missing headers and typos: that commit did
not get any Fixes tag because, well, backporting makes no sense at all
as the DVFSRC support - which is critical for that driver to work - is
introduced with *this series*! :-)
P.S.: The DVFSRC regulator is a requirement for the MediaTek UFSHCI
controller's crypto boost feature, which is already upstream but
lacking the actual regulator to work....... :-)
[1]: https://lore.kernel.org/all/20210812085846.2628-1-dawei.chien@mediatek.com/
Cheers!
AngeloGioacchino Del Regno (7):
dt-bindings: regulator: Add bindings for MediaTek DVFSRC Regulators
dt-bindings: interconnect: Add MediaTek EMI Interconnect bindings
dt-bindings: soc: mediatek: Add DVFSRC bindings for MT8183 and MT8195
soc: mediatek: Add MediaTek DVFS Resource Collector (DVFSRC) driver
regulator: Remove mtk-dvfsrc-regulator.c
regulator: Add refactored mtk-dvfsrc-regulator driver
interconnect: mediatek: Add MediaTek MT8183/8195 EMI Interconnect
driver
.../interconnect/mediatek,mt8183-emi.yaml | 76 +++
.../mediatek,mt6873-dvfsrc-regulator.yaml | 71 +++
.../soc/mediatek/mediatek,mt8183-dvfsrc.yaml | 94 +++
drivers/interconnect/Kconfig | 1 +
drivers/interconnect/Makefile | 1 +
drivers/interconnect/mediatek/Kconfig | 32 +
drivers/interconnect/mediatek/Makefile | 5 +
drivers/interconnect/mediatek/icc-emi.c | 153 +++++
drivers/interconnect/mediatek/icc-emi.h | 40 ++
drivers/interconnect/mediatek/mt8183.c | 143 +++++
drivers/interconnect/mediatek/mt8195.c | 339 +++++++++++
drivers/regulator/mtk-dvfsrc-regulator.c | 242 ++++----
drivers/soc/mediatek/Kconfig | 11 +
drivers/soc/mediatek/Makefile | 1 +
drivers/soc/mediatek/mtk-dvfsrc.c | 551 ++++++++++++++++++
.../interconnect/mediatek,mt8183.h | 23 +
.../interconnect/mediatek,mt8195.h | 44 ++
include/linux/soc/mediatek/dvfsrc.h | 36 ++
include/linux/soc/mediatek/mtk_sip_svc.h | 3 +
19 files changed, 1736 insertions(+), 130 deletions(-)
create mode 100644 Documentation/devicetree/bindings/interconnect/mediatek,mt8183-emi.yaml
create mode 100644 Documentation/devicetree/bindings/regulator/mediatek,mt6873-dvfsrc-regulator.yaml
create mode 100644 Documentation/devicetree/bindings/soc/mediatek/mediatek,mt8183-dvfsrc.yaml
create mode 100644 drivers/interconnect/mediatek/Kconfig
create mode 100644 drivers/interconnect/mediatek/Makefile
create mode 100644 drivers/interconnect/mediatek/icc-emi.c
create mode 100644 drivers/interconnect/mediatek/icc-emi.h
create mode 100644 drivers/interconnect/mediatek/mt8183.c
create mode 100644 drivers/interconnect/mediatek/mt8195.c
create mode 100644 drivers/soc/mediatek/mtk-dvfsrc.c
create mode 100644 include/dt-bindings/interconnect/mediatek,mt8183.h
create mode 100644 include/dt-bindings/interconnect/mediatek,mt8195.h
create mode 100644 include/linux/soc/mediatek/dvfsrc.h
--
2.44.0
Powered by blists - more mailing lists