All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolas Boichat <drinkcat@chromium.org>
To: Roger Lu <roger.lu@mediatek.com>
Cc: "Rob Herring" <robh@kernel.org>,
	"Kevin Hilman" <khilman@kernel.org>,
	"Nicolas Boichat" <drinkcat@google.com>,
	"Stephen Boyd" <sboyd@kernel.org>,
	"Fan Chen (陳凡)" <fan.chen@mediatek.com>,
	"HenryC Chen (陳建豪)" <HenryC.Chen@mediatek.com>,
	"YT Lee (李仰哲)" <yt.lee@mediatek.com>,
	"Xiaoqing Liu (刘晓庆)" <Xiaoqing.Liu@mediatek.com>,
	"Charles Yang (楊于進)" <Charles.Yang@mediatek.com>,
	"Angus Lin (林瑛豪)" <Angus.Lin@mediatek.com>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Matthias Brugger" <matthias.bgg@gmail.com>,
	"Nishanth Menon" <nm@ti.com>,
	"Devicetree List" <devicetree@vger.kernel.org>,
	"linux-arm Mailing List" <linux-arm-kernel@lists.infradead.org>,
	"moderated list:ARM/Mediatek SoC support"
	<linux-mediatek@lists.infradead.org>,
	lkml <linux-kernel@vger.kernel.org>,
	"open list:THERMAL" <linux-pm@vger.kernel.org>,
	"James Liao" <jamesjj.liao@mediatek.com>,
	"Enric Balletbo i Serra" <enric.balletbo@collabora.com>
Subject: Re: [PATCH v6 1/3] dt-bindings: soc: add mtk svs dt-bindings
Date: Wed, 8 Apr 2020 13:58:48 +0800	[thread overview]
Message-ID: <CANMq1KBcV_7O-_XQxk+6LTWywVoPW1U5BjYRG=-ojih9DOK-Wg@mail.gmail.com> (raw)
In-Reply-To: <CANMq1KBVs7ZucNu9pTxXGZ0__E6tyxd1+mm2Zui81G=xQNtShA@mail.gmail.com>

On Thu, Feb 27, 2020 at 11:55 AM Nicolas Boichat <drinkcat@chromium.org> wrote:
>
> Hi Rob,
>
> On Tue, Feb 11, 2020 at 3:36 PM Roger Lu <roger.lu@mediatek.com> wrote:
> >
> > Hi Rob & Nicolas,
> >
> > Sorry for the late reply.
> >
> > On Mon, 2020-01-13 at 23:50 +0800, Rob Herring wrote:
> > > On Mon, Jan 13, 2020 at 12:44 AM Nicolas Boichat <drinkcat@chromium.org> wrote:
> > > >
> > > > On Thu, Jan 9, 2020 at 4:38 AM Rob Herring <robh@kernel.org> wrote:
> > > > >
> > > > > On Tue, Jan 07, 2020 at 03:01:52PM +0800, Roger Lu wrote:
> > > > > > Document the binding for enabling mtk svs on MediaTek SoC.
> > > > > >
> > > > > > Signed-off-by: Roger Lu <roger.lu@mediatek.com>
> > > > > > ---
> > > > > >  .../devicetree/bindings/power/mtk-svs.txt     | 76 +++++++++++++++++++
> > > > > >  1 file changed, 76 insertions(+)
> > > > > >  create mode 100644 Documentation/devicetree/bindings/power/mtk-svs.txt
> > > > > >
> > > > > > diff --git a/Documentation/devicetree/bindings/power/mtk-svs.txt b/Documentation/devicetree/bindings/power/mtk-svs.txt
> > > > > > new file mode 100644
> > > > > > index 000000000000..9a3e81b9e1d2
> > > > > > --- /dev/null
> > > > > > +++ b/Documentation/devicetree/bindings/power/mtk-svs.txt
> > > > > > @@ -0,0 +1,76 @@
> > > > > > +* Mediatek Smart Voltage Scaling (MTK SVS)
> > > > > > +
> > > > > > +This describes the device tree binding for the MTK SVS controller (bank)
> > > > > > +which helps provide the optimized CPU/GPU/CCI voltages. This device also
> > > > > > +needs thermal data to calculate thermal slope for accurately compensate
> > > > > > +the voltages when temperature change.
> > > > > > +
> > > > > > +Required properties:
> > > > > > +- compatible:
> > > > > > +  - "mediatek,mt8183-svs" : For MT8183 family of SoCs
> > > > > > +- reg: Address range of the MTK SVS controller.
> > > > > > +- interrupts: IRQ for the MTK SVS controller.
> > > > > > +- clocks, clock-names: Clocks needed for the svs hardware. required
> > > > > > +                       clocks are:
> > > > > > +                    "main": Main clock for svs controller to work.
> > > > > > +- nvmem-cells: Phandle to the calibration data provided by a nvmem device.
> > > > > > +- nvmem-cell-names: Should be "svs-calibration-data" and "calibration-data"
> > > > > > +
> > > > > > +Subnodes:
> > > > > > +- svs-cpu-little: SVS bank device node of little CPU
> > > > > > +  compatible: "mediatek,mt8183-svs-cpu-little"
> > > > > > +  operating-points-v2: OPP table hooked by SVS little CPU bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vcpu-little-supply: PMIC buck of little CPU
> > > > > > +- svs-cpu-big: SVS bank device node of big CPU
> > > > > > +  compatible: "mediatek,mt8183-svs-cpu-big"
> > > > > > +  operating-points-v2: OPP table hooked by SVS big CPU bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vcpu-big-supply: PMIC buck of big CPU
> > > > > > +- svs-cci: SVS bank device node of CCI
> > > > > > +  compatible: "mediatek,mt8183-svs-cci"
> > > > > > +  operating-points-v2: OPP table hooked by SVS CCI bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vcci-supply: PMIC buck of CCI
> > > > > > +- svs-gpu: SVS bank device node of GPU
> > > > > > +  compatible: "mediatek,mt8183-svs-gpu"
> > > > > > +  operating-points-v2: OPP table hooked by SVS GPU bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vgpu-supply: PMIC buck of GPU
> > > > > > +
> > > > > > +Example:
> > > > > > +
> > > > > > +     svs: svs@1100b000 {
> > > > > > +             compatible = "mediatek,mt8183-svs";
> > > > > > +             reg = <0 0x1100b000 0 0x1000>;
> > > > > > +             interrupts = <GIC_SPI 127 IRQ_TYPE_LEVEL_LOW>;
> > > > > > +             clocks = <&infracfg CLK_INFRA_THERM>;
> > > > > > +             clock-names = "main_clk";
> > > > > > +             nvmem-cells = <&svs_calibration>, <&thermal_calibration>;
> > > > > > +             nvmem-cell-names = "svs-calibration-data", "calibration-data";
> > > > > > +
> > > > > > +             svs_cpu_little: svs-cpu-little {
> > > > > > +                     compatible = "mediatek,mt8183-svs-cpu-little";
> > > > > > +                     operating-points-v2 = <&cluster0_opp>;
> > > > > > +                     vcpu-little-supply = <&mt6358_vproc12_reg>;
> > > > > > +             };
> > > > >
> > > > > I don't think this is a good binding. This information already exists
> > > > > elsewhere in the DT, so your driver should just look in those nodes.
> > > > > For example the regulator can be in the cpu nodes or the OPP table
> > > > > itself.
> > > >
> > > > Roger, if that helps, without changing any other binding, on 8183,
> > > > basically you could have:
> > > >  - svs-cpu-little: Add a handle to &cpu0 and get the regulator/opp
> > > > table from it.
> > > >  - svs-cpu-big: Handle to &cpu4
> > >
> > > Why do you need those? Use the compatible of the cpus to determine big
> > > and little cores. Or there's the cpu capacity property that could be
> > > used instead.
> > >
> > > >  - svs-cci: Handle to &cci
> > >
> > > Is there more than 1 CCI? Just retrieve the node by the compatible.
> > > There's no need to have nodes that simply serve as a collection of
> > > data for some driver.
> > >
> > > >  - svs-gpu: Handle to &gpu (BTW, it is expected that SVS would only
> > > > apply to vgpu/mali regulator, and not vsram regulator?)
> >
> > svs-gpu depends on vgpu power on for init (don't care vgpu_sram). After
> > svs-gpu init is done, it doesn't need vgpu power on anymore. (vgpu can
> > be turned off)
> >
> > Please allows me to introduce more about what svs-gpu device needs.
> > 1. It needs gpu opp table from "gpu node" and gpu_core2 power-domains
> > from "gpu_core2 node". When svs-gpu has those resources, it turns on
> > gpu_core2 power-domain for svs-gpu-hw to have power (for calculating)
> > and svs-gpu-sw will update gpu opp table voltages' part.
> > 2. Therefore, if I retrieve gpu-related node from phandle or compatible,
> > it means svs-gpu device in driver needs to attach two different gpu
> > nodes for attaining gpu opp table and gpu_core2 power-domains. I think
> > this architecture of svs-gpu confuses maintainer why it attaches two
> > different nodes instead of having a device to describe what it needs.
>
> > 3. Is it acceptable to have a Linux device attaching two different
> > nodes? If yes, could you guide us some APIs for one device to attach two
> > nodes? I don't know how to implement it. Thanks.
>
> I'm also trying to understand how that would work. The way the code
> works now (https://chromium.googlesource.com/chromiumos/third_party/kernel/+/refs/heads/chromeos-4.19/drivers/power/avs/mtk_svs.c#1388):
>
> The SVS driver creates a platform device for each sub-node, find the
> sub-node that matches the compatible (pdev->dev.of_node):
> for_each_child_of_node(svs->dev->of_node, np) {
>   if (of_device_is_compatible(np, svsb->of_compatible)) {
>     pdev->dev.of_node = np;
>     break;
>   }
> }
>
> Then, thanks to that, the 2 functions dev_pm_opp_of_add_table and
> devm_regulator_get_optional "just work", as the get the opp table and
> regulator from the device tree node.
>
> So what you suggest is basically something like this:
> pdev->dev.of_node = of_find_compatible_node(NULL, NULL, "mediatek,mt8183-cci");
>
> I came up with a (very dirty) prototype here:
> https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2076718
> ... and it doesn't really work
> (https://gist.github.com/drinkcat/61e50eedbdc301d418c9cee3ee5b6b06, I
> think the kernel is probing more than it should, like the DMA mask
> errors should not happen...)
>
> Before I dig further... I have the same concern as Roger, is it ok to
> have 2 devices bound to the same device tree node/compatible? My
> understanding was also that it's not.

Rob: It seems like this conversation died here. Do you have any
suggestions for the above?

Thanks,

WARNING: multiple messages have this Message-ID (diff)
From: Nicolas Boichat <drinkcat@chromium.org>
To: Roger Lu <roger.lu@mediatek.com>
Cc: "Mark Rutland" <mark.rutland@arm.com>,
	"Rob Herring" <robh@kernel.org>,
	"Angus Lin (林瑛豪)" <Angus.Lin@mediatek.com>,
	"Enric Balletbo i Serra" <enric.balletbo@collabora.com>,
	"Nicolas Boichat" <drinkcat@google.com>,
	"Stephen Boyd" <sboyd@kernel.org>,
	"open list:THERMAL" <linux-pm@vger.kernel.org>,
	"Kevin Hilman" <khilman@kernel.org>,
	lkml <linux-kernel@vger.kernel.org>,
	"HenryC Chen (陳建豪)" <HenryC.Chen@mediatek.com>,
	"YT Lee (李仰哲)" <yt.lee@mediatek.com>,
	"Fan Chen (陳凡)" <fan.chen@mediatek.com>,
	"Devicetree List" <devicetree@vger.kernel.org>,
	"moderated list:ARM/Mediatek SoC support"
	<linux-mediatek@lists.infradead.org>,
	"Xiaoqing Liu (刘晓庆)" <Xiaoqing.Liu@mediatek.com>,
	"Charles Yang (楊于進)" <Charles.Yang@mediatek.com>,
	"Matthias Brugger" <matthias.bgg@gmail.com>,
	"Nishanth Menon" <nm@ti.com>,
	"James Liao" <jamesjj.liao@mediatek.com>,
	"linux-arm Mailing List" <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v6 1/3] dt-bindings: soc: add mtk svs dt-bindings
Date: Wed, 8 Apr 2020 13:58:48 +0800	[thread overview]
Message-ID: <CANMq1KBcV_7O-_XQxk+6LTWywVoPW1U5BjYRG=-ojih9DOK-Wg@mail.gmail.com> (raw)
In-Reply-To: <CANMq1KBVs7ZucNu9pTxXGZ0__E6tyxd1+mm2Zui81G=xQNtShA@mail.gmail.com>

On Thu, Feb 27, 2020 at 11:55 AM Nicolas Boichat <drinkcat@chromium.org> wrote:
>
> Hi Rob,
>
> On Tue, Feb 11, 2020 at 3:36 PM Roger Lu <roger.lu@mediatek.com> wrote:
> >
> > Hi Rob & Nicolas,
> >
> > Sorry for the late reply.
> >
> > On Mon, 2020-01-13 at 23:50 +0800, Rob Herring wrote:
> > > On Mon, Jan 13, 2020 at 12:44 AM Nicolas Boichat <drinkcat@chromium.org> wrote:
> > > >
> > > > On Thu, Jan 9, 2020 at 4:38 AM Rob Herring <robh@kernel.org> wrote:
> > > > >
> > > > > On Tue, Jan 07, 2020 at 03:01:52PM +0800, Roger Lu wrote:
> > > > > > Document the binding for enabling mtk svs on MediaTek SoC.
> > > > > >
> > > > > > Signed-off-by: Roger Lu <roger.lu@mediatek.com>
> > > > > > ---
> > > > > >  .../devicetree/bindings/power/mtk-svs.txt     | 76 +++++++++++++++++++
> > > > > >  1 file changed, 76 insertions(+)
> > > > > >  create mode 100644 Documentation/devicetree/bindings/power/mtk-svs.txt
> > > > > >
> > > > > > diff --git a/Documentation/devicetree/bindings/power/mtk-svs.txt b/Documentation/devicetree/bindings/power/mtk-svs.txt
> > > > > > new file mode 100644
> > > > > > index 000000000000..9a3e81b9e1d2
> > > > > > --- /dev/null
> > > > > > +++ b/Documentation/devicetree/bindings/power/mtk-svs.txt
> > > > > > @@ -0,0 +1,76 @@
> > > > > > +* Mediatek Smart Voltage Scaling (MTK SVS)
> > > > > > +
> > > > > > +This describes the device tree binding for the MTK SVS controller (bank)
> > > > > > +which helps provide the optimized CPU/GPU/CCI voltages. This device also
> > > > > > +needs thermal data to calculate thermal slope for accurately compensate
> > > > > > +the voltages when temperature change.
> > > > > > +
> > > > > > +Required properties:
> > > > > > +- compatible:
> > > > > > +  - "mediatek,mt8183-svs" : For MT8183 family of SoCs
> > > > > > +- reg: Address range of the MTK SVS controller.
> > > > > > +- interrupts: IRQ for the MTK SVS controller.
> > > > > > +- clocks, clock-names: Clocks needed for the svs hardware. required
> > > > > > +                       clocks are:
> > > > > > +                    "main": Main clock for svs controller to work.
> > > > > > +- nvmem-cells: Phandle to the calibration data provided by a nvmem device.
> > > > > > +- nvmem-cell-names: Should be "svs-calibration-data" and "calibration-data"
> > > > > > +
> > > > > > +Subnodes:
> > > > > > +- svs-cpu-little: SVS bank device node of little CPU
> > > > > > +  compatible: "mediatek,mt8183-svs-cpu-little"
> > > > > > +  operating-points-v2: OPP table hooked by SVS little CPU bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vcpu-little-supply: PMIC buck of little CPU
> > > > > > +- svs-cpu-big: SVS bank device node of big CPU
> > > > > > +  compatible: "mediatek,mt8183-svs-cpu-big"
> > > > > > +  operating-points-v2: OPP table hooked by SVS big CPU bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vcpu-big-supply: PMIC buck of big CPU
> > > > > > +- svs-cci: SVS bank device node of CCI
> > > > > > +  compatible: "mediatek,mt8183-svs-cci"
> > > > > > +  operating-points-v2: OPP table hooked by SVS CCI bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vcci-supply: PMIC buck of CCI
> > > > > > +- svs-gpu: SVS bank device node of GPU
> > > > > > +  compatible: "mediatek,mt8183-svs-gpu"
> > > > > > +  operating-points-v2: OPP table hooked by SVS GPU bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vgpu-supply: PMIC buck of GPU
> > > > > > +
> > > > > > +Example:
> > > > > > +
> > > > > > +     svs: svs@1100b000 {
> > > > > > +             compatible = "mediatek,mt8183-svs";
> > > > > > +             reg = <0 0x1100b000 0 0x1000>;
> > > > > > +             interrupts = <GIC_SPI 127 IRQ_TYPE_LEVEL_LOW>;
> > > > > > +             clocks = <&infracfg CLK_INFRA_THERM>;
> > > > > > +             clock-names = "main_clk";
> > > > > > +             nvmem-cells = <&svs_calibration>, <&thermal_calibration>;
> > > > > > +             nvmem-cell-names = "svs-calibration-data", "calibration-data";
> > > > > > +
> > > > > > +             svs_cpu_little: svs-cpu-little {
> > > > > > +                     compatible = "mediatek,mt8183-svs-cpu-little";
> > > > > > +                     operating-points-v2 = <&cluster0_opp>;
> > > > > > +                     vcpu-little-supply = <&mt6358_vproc12_reg>;
> > > > > > +             };
> > > > >
> > > > > I don't think this is a good binding. This information already exists
> > > > > elsewhere in the DT, so your driver should just look in those nodes.
> > > > > For example the regulator can be in the cpu nodes or the OPP table
> > > > > itself.
> > > >
> > > > Roger, if that helps, without changing any other binding, on 8183,
> > > > basically you could have:
> > > >  - svs-cpu-little: Add a handle to &cpu0 and get the regulator/opp
> > > > table from it.
> > > >  - svs-cpu-big: Handle to &cpu4
> > >
> > > Why do you need those? Use the compatible of the cpus to determine big
> > > and little cores. Or there's the cpu capacity property that could be
> > > used instead.
> > >
> > > >  - svs-cci: Handle to &cci
> > >
> > > Is there more than 1 CCI? Just retrieve the node by the compatible.
> > > There's no need to have nodes that simply serve as a collection of
> > > data for some driver.
> > >
> > > >  - svs-gpu: Handle to &gpu (BTW, it is expected that SVS would only
> > > > apply to vgpu/mali regulator, and not vsram regulator?)
> >
> > svs-gpu depends on vgpu power on for init (don't care vgpu_sram). After
> > svs-gpu init is done, it doesn't need vgpu power on anymore. (vgpu can
> > be turned off)
> >
> > Please allows me to introduce more about what svs-gpu device needs.
> > 1. It needs gpu opp table from "gpu node" and gpu_core2 power-domains
> > from "gpu_core2 node". When svs-gpu has those resources, it turns on
> > gpu_core2 power-domain for svs-gpu-hw to have power (for calculating)
> > and svs-gpu-sw will update gpu opp table voltages' part.
> > 2. Therefore, if I retrieve gpu-related node from phandle or compatible,
> > it means svs-gpu device in driver needs to attach two different gpu
> > nodes for attaining gpu opp table and gpu_core2 power-domains. I think
> > this architecture of svs-gpu confuses maintainer why it attaches two
> > different nodes instead of having a device to describe what it needs.
>
> > 3. Is it acceptable to have a Linux device attaching two different
> > nodes? If yes, could you guide us some APIs for one device to attach two
> > nodes? I don't know how to implement it. Thanks.
>
> I'm also trying to understand how that would work. The way the code
> works now (https://chromium.googlesource.com/chromiumos/third_party/kernel/+/refs/heads/chromeos-4.19/drivers/power/avs/mtk_svs.c#1388):
>
> The SVS driver creates a platform device for each sub-node, find the
> sub-node that matches the compatible (pdev->dev.of_node):
> for_each_child_of_node(svs->dev->of_node, np) {
>   if (of_device_is_compatible(np, svsb->of_compatible)) {
>     pdev->dev.of_node = np;
>     break;
>   }
> }
>
> Then, thanks to that, the 2 functions dev_pm_opp_of_add_table and
> devm_regulator_get_optional "just work", as the get the opp table and
> regulator from the device tree node.
>
> So what you suggest is basically something like this:
> pdev->dev.of_node = of_find_compatible_node(NULL, NULL, "mediatek,mt8183-cci");
>
> I came up with a (very dirty) prototype here:
> https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2076718
> ... and it doesn't really work
> (https://gist.github.com/drinkcat/61e50eedbdc301d418c9cee3ee5b6b06, I
> think the kernel is probing more than it should, like the DMA mask
> errors should not happen...)
>
> Before I dig further... I have the same concern as Roger, is it ok to
> have 2 devices bound to the same device tree node/compatible? My
> understanding was also that it's not.

Rob: It seems like this conversation died here. Do you have any
suggestions for the above?

Thanks,

_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

WARNING: multiple messages have this Message-ID (diff)
From: Nicolas Boichat <drinkcat@chromium.org>
To: Roger Lu <roger.lu@mediatek.com>
Cc: "Mark Rutland" <mark.rutland@arm.com>,
	"Rob Herring" <robh@kernel.org>,
	"Angus Lin (林瑛豪)" <Angus.Lin@mediatek.com>,
	"Enric Balletbo i Serra" <enric.balletbo@collabora.com>,
	"Nicolas Boichat" <drinkcat@google.com>,
	"Stephen Boyd" <sboyd@kernel.org>,
	"open list:THERMAL" <linux-pm@vger.kernel.org>,
	"Kevin Hilman" <khilman@kernel.org>,
	lkml <linux-kernel@vger.kernel.org>,
	"HenryC Chen (陳建豪)" <HenryC.Chen@mediatek.com>,
	"YT Lee (李仰哲)" <yt.lee@mediatek.com>,
	"Fan Chen (陳凡)" <fan.chen@mediatek.com>,
	"Devicetree List" <devicetree@vger.kernel.org>,
	"moderated list:ARM/Mediatek SoC support"
	<linux-mediatek@lists.infradead.org>,
	"Xiaoqing Liu (刘晓庆)" <Xiaoqing.Liu@mediatek.com>,
	"Charles Yang (楊于進)" <Charles.Yang@mediatek.com>,
	"Matthias Brugger" <matthias.bgg@gmail.com>,
	"Nishanth Menon" <nm@ti.com>,
	"James Liao" <jamesjj.liao@mediatek.com>,
	"linux-arm Mailing List" <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v6 1/3] dt-bindings: soc: add mtk svs dt-bindings
Date: Wed, 8 Apr 2020 13:58:48 +0800	[thread overview]
Message-ID: <CANMq1KBcV_7O-_XQxk+6LTWywVoPW1U5BjYRG=-ojih9DOK-Wg@mail.gmail.com> (raw)
In-Reply-To: <CANMq1KBVs7ZucNu9pTxXGZ0__E6tyxd1+mm2Zui81G=xQNtShA@mail.gmail.com>

On Thu, Feb 27, 2020 at 11:55 AM Nicolas Boichat <drinkcat@chromium.org> wrote:
>
> Hi Rob,
>
> On Tue, Feb 11, 2020 at 3:36 PM Roger Lu <roger.lu@mediatek.com> wrote:
> >
> > Hi Rob & Nicolas,
> >
> > Sorry for the late reply.
> >
> > On Mon, 2020-01-13 at 23:50 +0800, Rob Herring wrote:
> > > On Mon, Jan 13, 2020 at 12:44 AM Nicolas Boichat <drinkcat@chromium.org> wrote:
> > > >
> > > > On Thu, Jan 9, 2020 at 4:38 AM Rob Herring <robh@kernel.org> wrote:
> > > > >
> > > > > On Tue, Jan 07, 2020 at 03:01:52PM +0800, Roger Lu wrote:
> > > > > > Document the binding for enabling mtk svs on MediaTek SoC.
> > > > > >
> > > > > > Signed-off-by: Roger Lu <roger.lu@mediatek.com>
> > > > > > ---
> > > > > >  .../devicetree/bindings/power/mtk-svs.txt     | 76 +++++++++++++++++++
> > > > > >  1 file changed, 76 insertions(+)
> > > > > >  create mode 100644 Documentation/devicetree/bindings/power/mtk-svs.txt
> > > > > >
> > > > > > diff --git a/Documentation/devicetree/bindings/power/mtk-svs.txt b/Documentation/devicetree/bindings/power/mtk-svs.txt
> > > > > > new file mode 100644
> > > > > > index 000000000000..9a3e81b9e1d2
> > > > > > --- /dev/null
> > > > > > +++ b/Documentation/devicetree/bindings/power/mtk-svs.txt
> > > > > > @@ -0,0 +1,76 @@
> > > > > > +* Mediatek Smart Voltage Scaling (MTK SVS)
> > > > > > +
> > > > > > +This describes the device tree binding for the MTK SVS controller (bank)
> > > > > > +which helps provide the optimized CPU/GPU/CCI voltages. This device also
> > > > > > +needs thermal data to calculate thermal slope for accurately compensate
> > > > > > +the voltages when temperature change.
> > > > > > +
> > > > > > +Required properties:
> > > > > > +- compatible:
> > > > > > +  - "mediatek,mt8183-svs" : For MT8183 family of SoCs
> > > > > > +- reg: Address range of the MTK SVS controller.
> > > > > > +- interrupts: IRQ for the MTK SVS controller.
> > > > > > +- clocks, clock-names: Clocks needed for the svs hardware. required
> > > > > > +                       clocks are:
> > > > > > +                    "main": Main clock for svs controller to work.
> > > > > > +- nvmem-cells: Phandle to the calibration data provided by a nvmem device.
> > > > > > +- nvmem-cell-names: Should be "svs-calibration-data" and "calibration-data"
> > > > > > +
> > > > > > +Subnodes:
> > > > > > +- svs-cpu-little: SVS bank device node of little CPU
> > > > > > +  compatible: "mediatek,mt8183-svs-cpu-little"
> > > > > > +  operating-points-v2: OPP table hooked by SVS little CPU bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vcpu-little-supply: PMIC buck of little CPU
> > > > > > +- svs-cpu-big: SVS bank device node of big CPU
> > > > > > +  compatible: "mediatek,mt8183-svs-cpu-big"
> > > > > > +  operating-points-v2: OPP table hooked by SVS big CPU bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vcpu-big-supply: PMIC buck of big CPU
> > > > > > +- svs-cci: SVS bank device node of CCI
> > > > > > +  compatible: "mediatek,mt8183-svs-cci"
> > > > > > +  operating-points-v2: OPP table hooked by SVS CCI bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vcci-supply: PMIC buck of CCI
> > > > > > +- svs-gpu: SVS bank device node of GPU
> > > > > > +  compatible: "mediatek,mt8183-svs-gpu"
> > > > > > +  operating-points-v2: OPP table hooked by SVS GPU bank.
> > > > > > +                    SVS will optimze this OPP table voltage part.
> > > > > > +  vgpu-supply: PMIC buck of GPU
> > > > > > +
> > > > > > +Example:
> > > > > > +
> > > > > > +     svs: svs@1100b000 {
> > > > > > +             compatible = "mediatek,mt8183-svs";
> > > > > > +             reg = <0 0x1100b000 0 0x1000>;
> > > > > > +             interrupts = <GIC_SPI 127 IRQ_TYPE_LEVEL_LOW>;
> > > > > > +             clocks = <&infracfg CLK_INFRA_THERM>;
> > > > > > +             clock-names = "main_clk";
> > > > > > +             nvmem-cells = <&svs_calibration>, <&thermal_calibration>;
> > > > > > +             nvmem-cell-names = "svs-calibration-data", "calibration-data";
> > > > > > +
> > > > > > +             svs_cpu_little: svs-cpu-little {
> > > > > > +                     compatible = "mediatek,mt8183-svs-cpu-little";
> > > > > > +                     operating-points-v2 = <&cluster0_opp>;
> > > > > > +                     vcpu-little-supply = <&mt6358_vproc12_reg>;
> > > > > > +             };
> > > > >
> > > > > I don't think this is a good binding. This information already exists
> > > > > elsewhere in the DT, so your driver should just look in those nodes.
> > > > > For example the regulator can be in the cpu nodes or the OPP table
> > > > > itself.
> > > >
> > > > Roger, if that helps, without changing any other binding, on 8183,
> > > > basically you could have:
> > > >  - svs-cpu-little: Add a handle to &cpu0 and get the regulator/opp
> > > > table from it.
> > > >  - svs-cpu-big: Handle to &cpu4
> > >
> > > Why do you need those? Use the compatible of the cpus to determine big
> > > and little cores. Or there's the cpu capacity property that could be
> > > used instead.
> > >
> > > >  - svs-cci: Handle to &cci
> > >
> > > Is there more than 1 CCI? Just retrieve the node by the compatible.
> > > There's no need to have nodes that simply serve as a collection of
> > > data for some driver.
> > >
> > > >  - svs-gpu: Handle to &gpu (BTW, it is expected that SVS would only
> > > > apply to vgpu/mali regulator, and not vsram regulator?)
> >
> > svs-gpu depends on vgpu power on for init (don't care vgpu_sram). After
> > svs-gpu init is done, it doesn't need vgpu power on anymore. (vgpu can
> > be turned off)
> >
> > Please allows me to introduce more about what svs-gpu device needs.
> > 1. It needs gpu opp table from "gpu node" and gpu_core2 power-domains
> > from "gpu_core2 node". When svs-gpu has those resources, it turns on
> > gpu_core2 power-domain for svs-gpu-hw to have power (for calculating)
> > and svs-gpu-sw will update gpu opp table voltages' part.
> > 2. Therefore, if I retrieve gpu-related node from phandle or compatible,
> > it means svs-gpu device in driver needs to attach two different gpu
> > nodes for attaining gpu opp table and gpu_core2 power-domains. I think
> > this architecture of svs-gpu confuses maintainer why it attaches two
> > different nodes instead of having a device to describe what it needs.
>
> > 3. Is it acceptable to have a Linux device attaching two different
> > nodes? If yes, could you guide us some APIs for one device to attach two
> > nodes? I don't know how to implement it. Thanks.
>
> I'm also trying to understand how that would work. The way the code
> works now (https://chromium.googlesource.com/chromiumos/third_party/kernel/+/refs/heads/chromeos-4.19/drivers/power/avs/mtk_svs.c#1388):
>
> The SVS driver creates a platform device for each sub-node, find the
> sub-node that matches the compatible (pdev->dev.of_node):
> for_each_child_of_node(svs->dev->of_node, np) {
>   if (of_device_is_compatible(np, svsb->of_compatible)) {
>     pdev->dev.of_node = np;
>     break;
>   }
> }
>
> Then, thanks to that, the 2 functions dev_pm_opp_of_add_table and
> devm_regulator_get_optional "just work", as the get the opp table and
> regulator from the device tree node.
>
> So what you suggest is basically something like this:
> pdev->dev.of_node = of_find_compatible_node(NULL, NULL, "mediatek,mt8183-cci");
>
> I came up with a (very dirty) prototype here:
> https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2076718
> ... and it doesn't really work
> (https://gist.github.com/drinkcat/61e50eedbdc301d418c9cee3ee5b6b06, I
> think the kernel is probing more than it should, like the DMA mask
> errors should not happen...)
>
> Before I dig further... I have the same concern as Roger, is it ok to
> have 2 devices bound to the same device tree node/compatible? My
> understanding was also that it's not.

Rob: It seems like this conversation died here. Do you have any
suggestions for the above?

Thanks,

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-04-08  5:59 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-07  7:01 PM / AVS: SVS: Introduce SVS engine Roger Lu
2020-01-07  7:01 ` Roger Lu
2020-01-07  7:01 ` Roger Lu
2020-01-07  7:01 ` [PATCH v6 1/3] dt-bindings: soc: add mtk svs dt-bindings Roger Lu
2020-01-07  7:01   ` Roger Lu
2020-01-07  7:01   ` Roger Lu
2020-01-08 20:38   ` Rob Herring
2020-01-08 20:38     ` Rob Herring
2020-01-08 20:38     ` Rob Herring
2020-01-13  6:44     ` Nicolas Boichat
2020-01-13  6:44       ` Nicolas Boichat
2020-01-13  6:44       ` Nicolas Boichat
2020-01-13 15:50       ` Rob Herring
2020-01-13 15:50         ` Rob Herring
2020-01-13 15:50         ` Rob Herring
2020-02-11  7:36         ` Roger Lu
2020-02-11  7:36           ` Roger Lu
2020-02-11  7:36           ` Roger Lu
2020-02-27  3:55           ` Nicolas Boichat
2020-02-27  3:55             ` Nicolas Boichat
2020-02-27  3:55             ` Nicolas Boichat
2020-04-08  5:58             ` Nicolas Boichat [this message]
2020-04-08  5:58               ` Nicolas Boichat
2020-04-08  5:58               ` Nicolas Boichat
2020-01-07  7:01 ` [PATCH v6 2/3] arm64: dts: mt8183: add svs device information Roger Lu
2020-01-07  7:01   ` Roger Lu
2020-01-07  7:01   ` Roger Lu
2020-01-07  7:01 ` [PATCH v6 3/3] PM / AVS: SVS: Introduce SVS engine Roger Lu
2020-01-07  7:01   ` Roger Lu
2020-01-07  7:01   ` Roger Lu
2020-01-08 11:12   ` Pi-Hsun Shih
2020-01-08 11:12     ` Pi-Hsun Shih
2020-01-08 11:12     ` Pi-Hsun Shih
2020-01-09  5:02     ` Roger Lu
2020-01-09  5:02       ` Roger Lu
2020-01-09  5:02       ` Roger Lu

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to='CANMq1KBcV_7O-_XQxk+6LTWywVoPW1U5BjYRG=-ojih9DOK-Wg@mail.gmail.com' \
    --to=drinkcat@chromium.org \
    --cc=Angus.Lin@mediatek.com \
    --cc=Charles.Yang@mediatek.com \
    --cc=HenryC.Chen@mediatek.com \
    --cc=Xiaoqing.Liu@mediatek.com \
    --cc=devicetree@vger.kernel.org \
    --cc=drinkcat@google.com \
    --cc=enric.balletbo@collabora.com \
    --cc=fan.chen@mediatek.com \
    --cc=jamesjj.liao@mediatek.com \
    --cc=khilman@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=matthias.bgg@gmail.com \
    --cc=nm@ti.com \
    --cc=robh@kernel.org \
    --cc=roger.lu@mediatek.com \
    --cc=sboyd@kernel.org \
    --cc=yt.lee@mediatek.com \
    /path/to/YOUR_REPLY

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

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