* [PATCH 0/2] soc: ti: wkup_m3_ipc: support vtt toggle @ 2022-04-09 4:51 Drew Fustini 2022-04-09 4:51 ` [PATCH 1/2] dt-bindings: wkup-m3-ipc: Add vtt toggle bindings Drew Fustini 2022-04-09 4:51 ` [PATCH 2/2] soc: ti: wkup_m3_ipc: Add support for toggling VTT regulator Drew Fustini 0 siblings, 2 replies; 6+ messages in thread From: Drew Fustini @ 2022-04-09 4:51 UTC (permalink / raw) To: Rob Herring, Krzysztof Kozlowski, Nishanth Menon, Santosh Shilimkar, Dave Gerlach, Tony Lindgren Cc: devicetree, linux-arm-kernel, linux-kernel, Drew Fustini This series enables the Cortex M3 processor found in AM33xx and AM43xx SoCs to toggle the VTT regulator during low power mode transitions. I recently converted the Wakeup M3 IPC bindings to YAML. Rob has applied that patch [1]. It is a prerequisite for the wkup-m3-ipc.yaml patch in this series. [1] https://lore.kernel.org/linux-devicetree/YlCACSZx5xsPSwNC@robh.at.kernel.org/ Dave Gerlach (1): soc: ti: wkup_m3_ipc: Add support for toggling VTT regulator Drew Fustini (1): dt-bindings: wkup-m3-ipc: Add vtt toggle bindings .../bindings/soc/ti/wkup-m3-ipc.yaml | 21 +++++++++++++++ drivers/soc/ti/wkup_m3_ipc.c | 27 +++++++++++++++++-- include/linux/wkup_m3_ipc.h | 1 + 3 files changed, 47 insertions(+), 2 deletions(-) -- 2.32.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] dt-bindings: wkup-m3-ipc: Add vtt toggle bindings 2022-04-09 4:51 [PATCH 0/2] soc: ti: wkup_m3_ipc: support vtt toggle Drew Fustini @ 2022-04-09 4:51 ` Drew Fustini 2022-04-09 16:25 ` Krzysztof Kozlowski 2022-04-09 4:51 ` [PATCH 2/2] soc: ti: wkup_m3_ipc: Add support for toggling VTT regulator Drew Fustini 1 sibling, 1 reply; 6+ messages in thread From: Drew Fustini @ 2022-04-09 4:51 UTC (permalink / raw) To: Rob Herring, Krzysztof Kozlowski, Nishanth Menon, Santosh Shilimkar, Dave Gerlach, Tony Lindgren Cc: devicetree, linux-arm-kernel, linux-kernel, Drew Fustini Document the Wakeup M3 IPC properties that can be used to toggle the VTT regulator during low power mode transitions. Signed-off-by: Dave Gerlach <d-gerlach@ti.com> [dfustini: converted to YAML] Signed-off-by: Drew Fustini <dfustini@baylibre.com> --- .../bindings/soc/ti/wkup-m3-ipc.yaml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Documentation/devicetree/bindings/soc/ti/wkup-m3-ipc.yaml b/Documentation/devicetree/bindings/soc/ti/wkup-m3-ipc.yaml index d855c01ce61c..6a8fcad8b2fd 100644 --- a/Documentation/devicetree/bindings/soc/ti/wkup-m3-ipc.yaml +++ b/Documentation/devicetree/bindings/soc/ti/wkup-m3-ipc.yaml @@ -24,6 +24,16 @@ description: |+ A wkup_m3_ipc device node is used to represent the IPC registers within an SoC. + Support for VTT Toggle + ================================== + In order to enable the support for VTT toggle during Suspend/Resume sequence + needed by some boards (like AM335x EVM-SK & AM437x GP EVM), the vtt properties + below are required. It is possible to toggle VTT using one of two methods + depending on the SoC being used, either GPIO0 toggle (AM335x and AM437x), or + any GPIO with DS_PAD_CONFIG bits in the control module (AM437x only). Please + note that only pins on the GPIO0 module can be used for GPIO toggle. It will + not work with any other GPIO module. + properties: compatible: enum: @@ -51,6 +61,15 @@ properties: mbox_wkupm3 child node. maxItems: 1 + ti,needs-vtt-toggle: + type: boolean + description: boards requires VTT toggling during suspend/resume + + ti,vtt-gpio-pin: + $ref: /schemas/types.yaml#/definitions/uint32 + description: pin on the GPIO0 module used for VTT toggle + maxItems: 1 + required: - compatible - reg @@ -76,6 +95,8 @@ examples: interrupts = <78>; ti,rproc = <&wkup_m3>; mboxes = <&mailbox &mbox_wkupm3>; + ti,needs-vtt-toggle; + ti,vtt-gpio-pin = <7>; }; }; ... -- 2.32.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] dt-bindings: wkup-m3-ipc: Add vtt toggle bindings 2022-04-09 4:51 ` [PATCH 1/2] dt-bindings: wkup-m3-ipc: Add vtt toggle bindings Drew Fustini @ 2022-04-09 16:25 ` Krzysztof Kozlowski 2022-04-09 20:37 ` Drew Fustini 2022-04-12 16:09 ` Rob Herring 0 siblings, 2 replies; 6+ messages in thread From: Krzysztof Kozlowski @ 2022-04-09 16:25 UTC (permalink / raw) To: Drew Fustini, Rob Herring, Krzysztof Kozlowski, Nishanth Menon, Santosh Shilimkar, Dave Gerlach, Tony Lindgren Cc: devicetree, linux-arm-kernel, linux-kernel On 09/04/2022 06:51, Drew Fustini wrote: > Document the Wakeup M3 IPC properties that can be used to toggle the VTT > regulator during low power mode transitions. > (...) > @@ -51,6 +61,15 @@ properties: > mbox_wkupm3 child node. > maxItems: 1 > > + ti,needs-vtt-toggle: > + type: boolean > + description: boards requires VTT toggling during suspend/resume > + > + ti,vtt-gpio-pin: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: pin on the GPIO0 module used for VTT toggle > + maxItems: 1 No need for maxItems, it's a single uint32. You could add "maximum" if you know the constraints for the value. Do you actually need two properties (bool + pin)? A case of "ti,vtt-gpio-pin" without the "ti,needs-vtt-toggle" is valid? The other way looks wrong, so you need to add a dependency (see example-schema). Best regards, Krzysztof ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] dt-bindings: wkup-m3-ipc: Add vtt toggle bindings 2022-04-09 16:25 ` Krzysztof Kozlowski @ 2022-04-09 20:37 ` Drew Fustini 2022-04-12 16:09 ` Rob Herring 1 sibling, 0 replies; 6+ messages in thread From: Drew Fustini @ 2022-04-09 20:37 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: Rob Herring, Krzysztof Kozlowski, Nishanth Menon, Santosh Shilimkar, Dave Gerlach, Tony Lindgren, devicetree, linux-arm-kernel, linux-kernel On Sat, Apr 09, 2022 at 06:25:24PM +0200, Krzysztof Kozlowski wrote: > On 09/04/2022 06:51, Drew Fustini wrote: > > Document the Wakeup M3 IPC properties that can be used to toggle the VTT > > regulator during low power mode transitions. > > > > (...) > > > @@ -51,6 +61,15 @@ properties: > > mbox_wkupm3 child node. > > maxItems: 1 > > > > + ti,needs-vtt-toggle: > > + type: boolean > > + description: boards requires VTT toggling during suspend/resume > > + > > + ti,vtt-gpio-pin: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: pin on the GPIO0 module used for VTT toggle > > + maxItems: 1 > > No need for maxItems, it's a single uint32. You could add "maximum" if > you know the constraints for the value. Thank you for letting me know. > Do you actually need two properties (bool + pin)? A case of > "ti,vtt-gpio-pin" without the "ti,needs-vtt-toggle" is valid? You raise a good point. In fact, the driver does nothing useful in the case of "ti,needs-vtt-toggle" without "ti,vtt-gpio-pin". Therefore, I will remove the "ti,needs-vtt-toggle" property. > > The other way looks wrong, so you need to add a dependency (see > example-schema). > > > Best regards, > Krzysztof Thank you, Drew ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] dt-bindings: wkup-m3-ipc: Add vtt toggle bindings 2022-04-09 16:25 ` Krzysztof Kozlowski 2022-04-09 20:37 ` Drew Fustini @ 2022-04-12 16:09 ` Rob Herring 1 sibling, 0 replies; 6+ messages in thread From: Rob Herring @ 2022-04-12 16:09 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: Drew Fustini, Krzysztof Kozlowski, Nishanth Menon, Santosh Shilimkar, Dave Gerlach, Tony Lindgren, devicetree, linux-arm-kernel, linux-kernel On Sat, Apr 09, 2022 at 06:25:24PM +0200, Krzysztof Kozlowski wrote: > On 09/04/2022 06:51, Drew Fustini wrote: > > Document the Wakeup M3 IPC properties that can be used to toggle the VTT > > regulator during low power mode transitions. > > > > (...) > > > @@ -51,6 +61,15 @@ properties: > > mbox_wkupm3 child node. > > maxItems: 1 > > > > + ti,needs-vtt-toggle: > > + type: boolean > > + description: boards requires VTT toggling during suspend/resume > > + > > + ti,vtt-gpio-pin: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: pin on the GPIO0 module used for VTT toggle > > + maxItems: 1 > > No need for maxItems, it's a single uint32. You could add "maximum" if > you know the constraints for the value. Whenever I see the same problem repeated, I ask if we can catch with meta-schema. Often we can, but we have to fix all the existing ones: media/mediatek,vcodec-encoder.yaml: properties:mediatek,scp:maxItems: False schema does not allow 1 media/mediatek,vcodec-encoder.yaml: properties:mediatek,vpu:maxItems: False schema does not allow 1 remoteproc/qcom,sc7280-wpss-pil.yaml: properties:glink-edge:properties:qcom,remote-pid:maxItems: False schema does not allow 1 media/mediatek,vcodec-subdev-decoder.yaml: properties:mediatek,scp:maxItems: False schema does not allow 1 media/mediatek,vcodec-decoder.yaml: properties:mediatek,vpu:maxItems: False schema does not allow 1 media/mediatek,vcodec-decoder.yaml: properties:mediatek,scp:maxItems: False schema does not allow 1 media/coda.yaml: properties:iram:maxItems: False schema does not allow 1 display/panel/panel-timing.yaml: properties:vsync-len:oneOf:0:maxItems: False schema does not allow 1 display/panel/panel-timing.yaml: properties:vsync-len:oneOf:0:items: False schema does not allow {'description': 'typical number of lines'} display/panel/panel-timing.yaml: properties:hfront-porch:oneOf:0:maxItems: False schema does not allow 1 display/panel/panel-timing.yaml: properties:hfront-porch:oneOf:0:items: False schema does not allow {'description': 'typical number of pixels'} display/panel/panel-timing.yaml: properties:hback-porch:oneOf:0:maxItems: False schema does not allow 1 display/panel/panel-timing.yaml: properties:hback-porch:oneOf:0:items: False schema does not allow {'description': 'typical number of pixels'} display/panel/panel-timing.yaml: properties:hsync-len:oneOf:0:maxItems: False schema does not allow 1 display/panel/panel-timing.yaml: properties:hsync-len:oneOf:0:items: False schema does not allow {'description': 'typical number of pixels'} display/panel/panel-timing.yaml: properties:vfront-porch:oneOf:0:maxItems: False schema does not allow 1 display/panel/panel-timing.yaml: properties:vfront-porch:oneOf:0:items: False schema does not allow {'description': 'typical number of lines'} display/panel/panel-timing.yaml: properties:vback-porch:oneOf:0:maxItems: False schema does not allow 1 display/panel/panel-timing.yaml: properties:vback-porch:oneOf:0:items: False schema does not allow {'description': 'typical number of lines'} iio/adc/st,stm32-dfsdm-adc.yaml: patternProperties:^filter@[0-9]+$:properties:st,filter-order:items: False schema does not allow {'minimum': 0, 'maximum': 5} spi/renesas,sh-msiof.yaml: properties:renesas,rx-fifo-size:maxItems: False schema does not allow 1 spi/renesas,sh-msiof.yaml: properties:renesas,tx-fifo-size:maxItems: False schema does not allow 1 hwmon/ti,tmp421.yaml: patternProperties:^channel@([0-3])$:properties:ti,n-factor:items: False schema does not allow {'minimum': 0, 'maximum': 255} hwmon/ti,tmp464.yaml: patternProperties:^channel@([0-8])$:properties:ti,n-factor:items: False schema does not allow {'minimum': -128, 'maximum': 127} I already have fixes for these. FYI, the meta-schema change looks like this: diff --git a/dtschema/meta-schemas/keywords.yaml b/dtschema/meta-schemas/keywords.yaml index 6d6fdfd08d3b..73ed113aed3a 100644 --- a/dtschema/meta-schemas/keywords.yaml +++ b/dtschema/meta-schemas/keywords.yaml @@ -155,3 +155,17 @@ properties: - type: boolean uniqueItems: type: boolean + +allOf: + - description: Scalar properties should not have array keywords + if: + properties: + $ref: + pattern: '(int[1-8]+|phandle|flag)$' + required: + - $ref + then: + properties: + maxItems: false + minItems: false + items: false ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] soc: ti: wkup_m3_ipc: Add support for toggling VTT regulator 2022-04-09 4:51 [PATCH 0/2] soc: ti: wkup_m3_ipc: support vtt toggle Drew Fustini 2022-04-09 4:51 ` [PATCH 1/2] dt-bindings: wkup-m3-ipc: Add vtt toggle bindings Drew Fustini @ 2022-04-09 4:51 ` Drew Fustini 1 sibling, 0 replies; 6+ messages in thread From: Drew Fustini @ 2022-04-09 4:51 UTC (permalink / raw) To: Rob Herring, Krzysztof Kozlowski, Nishanth Menon, Santosh Shilimkar, Dave Gerlach, Tony Lindgren Cc: devicetree, linux-arm-kernel, linux-kernel, Drew Fustini, Keerthy From: Dave Gerlach <d-gerlach@ti.com> Some boards (currently AM335x EVM-SK) provides s/w control via GPIO to toggle VTT regulator to reduce power consumption in low power state. The VTT regulator should be disabled after enabling self-refresh on suspend, and should be enabled before disabling self-refresh on resume. This is to allow proper self-refresh entry/exit commands to be transmitted to the memory. Add support for toggling VTT regulator using DT properties. Actual toggling happens in CM3 Firmware. The enable option & the GPIO pin used is collected in A8 Core and then sent to CM3 using IPC registers. Note: Here it is assumed that VTT Toggle will be done using a pin on GPIO-0 Instance. The reason is GPIO-0 is in wakeup domain. Signed-off-by: Dave Gerlach <d-gerlach@ti.com> Signed-off-by: Keerthy <j-keerthy@ti.com> Signed-off-by: Drew Fustini <dfustini@baylibre.com> --- drivers/soc/ti/wkup_m3_ipc.c | 27 +++++++++++++++++++++++++-- include/linux/wkup_m3_ipc.h | 1 + 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/soc/ti/wkup_m3_ipc.c b/drivers/soc/ti/wkup_m3_ipc.c index 2f03ced0f411..8b92425255a2 100644 --- a/drivers/soc/ti/wkup_m3_ipc.c +++ b/drivers/soc/ti/wkup_m3_ipc.c @@ -40,6 +40,13 @@ #define M3_FW_VERSION_MASK 0xffff #define M3_WAKE_SRC_MASK 0xff +#define IPC_MEM_TYPE_SHIFT (0x0) +#define IPC_MEM_TYPE_MASK (0x7 << 0) +#define IPC_VTT_STAT_SHIFT (0x3) +#define IPC_VTT_STAT_MASK (0x1 << 3) +#define IPC_VTT_GPIO_PIN_SHIFT (0x4) +#define IPC_VTT_GPIO_PIN_MASK (0x3f << 4) + #define M3_STATE_UNKNOWN 0 #define M3_STATE_RESET 1 #define M3_STATE_INITED 2 @@ -215,6 +222,12 @@ static int wkup_m3_is_available(struct wkup_m3_ipc *m3_ipc) (m3_ipc->state != M3_STATE_UNKNOWN)); } +static void wkup_m3_set_vtt_gpio(struct wkup_m3_ipc *m3_ipc, int gpio) +{ + m3_ipc->vtt_conf = (1 << IPC_VTT_STAT_SHIFT) | + (gpio << IPC_VTT_GPIO_PIN_SHIFT); +} + /* Public functions */ /** * wkup_m3_set_mem_type - Pass wkup_m3 which type of memory is in use @@ -294,7 +307,8 @@ static int wkup_m3_prepare_low_power(struct wkup_m3_ipc *m3_ipc, int state) /* Program each required IPC register then write defaults to others */ wkup_m3_ctrl_ipc_write(m3_ipc, m3_ipc->resume_addr, 0); wkup_m3_ctrl_ipc_write(m3_ipc, m3_power_state, 1); - wkup_m3_ctrl_ipc_write(m3_ipc, m3_ipc->mem_type, 4); + wkup_m3_ctrl_ipc_write(m3_ipc, m3_ipc->mem_type | + m3_ipc->vtt_conf, 4); wkup_m3_ctrl_ipc_write(m3_ipc, DS_IPC_DEFAULT, 2); wkup_m3_ctrl_ipc_write(m3_ipc, DS_IPC_DEFAULT, 3); @@ -433,12 +447,13 @@ static int wkup_m3_rproc_boot_thread(void *arg) static int wkup_m3_ipc_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; - int irq, ret; + int irq, ret, temp; phandle rproc_phandle; struct rproc *m3_rproc; struct resource *res; struct task_struct *task; struct wkup_m3_ipc *m3_ipc; + struct device_node *np = dev->of_node; m3_ipc = devm_kzalloc(dev, sizeof(*m3_ipc), GFP_KERNEL); if (!m3_ipc) @@ -496,6 +511,14 @@ static int wkup_m3_ipc_probe(struct platform_device *pdev) m3_ipc->ops = &ipc_ops; + if (of_find_property(np, "ti,needs-vtt-toggle", NULL) && + !(of_property_read_u32(np, "ti,vtt-gpio-pin", &temp))) { + if (temp >= 0 && temp <= 31) + wkup_m3_set_vtt_gpio(m3_ipc, temp); + else + dev_warn(dev, "Invalid VTT GPIO(%d) pin\n", temp); + } + /* * Wait for firmware loading completion in a thread so we * can boot the wkup_m3 as soon as it's ready without holding diff --git a/include/linux/wkup_m3_ipc.h b/include/linux/wkup_m3_ipc.h index 3f496967b538..2bc52c6381d5 100644 --- a/include/linux/wkup_m3_ipc.h +++ b/include/linux/wkup_m3_ipc.h @@ -33,6 +33,7 @@ struct wkup_m3_ipc { int mem_type; unsigned long resume_addr; + int vtt_conf; int state; struct completion sync_complete; -- 2.32.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-04-12 16:09 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-04-09 4:51 [PATCH 0/2] soc: ti: wkup_m3_ipc: support vtt toggle Drew Fustini 2022-04-09 4:51 ` [PATCH 1/2] dt-bindings: wkup-m3-ipc: Add vtt toggle bindings Drew Fustini 2022-04-09 16:25 ` Krzysztof Kozlowski 2022-04-09 20:37 ` Drew Fustini 2022-04-12 16:09 ` Rob Herring 2022-04-09 4:51 ` [PATCH 2/2] soc: ti: wkup_m3_ipc: Add support for toggling VTT regulator Drew Fustini
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).