Message ID | 20230906024011.17488-1-takahiro.akashi@linaro.org |
---|---|
Headers | show |
Series | firmware: scmi: add SCMI pinctrl protocol support | expand |
Adding Peng Fan, who is working on scmi/pinctrl support for i.MX9: https://lore.kernel.org/all/ZO9GLG5tQynYyAvR@pluto/T/ On Tue, Sep 5, 2023 at 11:41 PM AKASHI Takahiro <takahiro.akashi@linaro.org> wrote: > > This is an RFC and meant to get feedback from other developers as > - the specification (pinctrl part) is still in a draft > - the upstream patch for linux, including dt bindings, is still WIP > - I'm not confident the drivers are generic enough to cover most HWs > - The tests ("ut") doesn't cover all the features yet > > > This patch series allows users to access SCMI pin control protocol provided > by SCMI server (platform). See SCMI specification document v3.2 beta 2[1] > for more details about SCMI pin control protocol. > > The implementation consists of two layers: > - basic helper functions for SCMI pin control protocol > in drivers/firmware/scmi/pinctrl.c (patch#2) > - DM-compliant pinctrl/gpio drivers, which utilizes the helper functions, > in drivers/pinctrl/pinctrl-scmi.c (patch#3,#4) > > [1] https://developer.arm.com/documentation/den0056/e/?lang=en > > DT bindings > =========== > Upstream pinctrl patch for linux defines the bindings in [2] though > it doesn't say much. > I expect that my implementation basically complies with U-Boot's generic > bindings described in [3], but not all the features are verified. > > As for gpio, unless you hard-code pin assignments directly in a device > driver, my implementation allows the following alternatives in DT. > Either way, we may need an additional binding description for gpio. > > (A) > scmi { > ... // other protocols > scmi_pinctrl: protocol@19 { // Pin control protocol > ... > {pinmux definitions}... // if any, including GPIO? > } > } > scmi_gpio: scmi_gpio { > compatible = "arm,scmi-gpio-generic"; > gpio-controller; > #gpio-cells = <2>; > gpio-ranges = <&scmi_pinctrl 0 5 4>, > <&scmi_pinctrl 4 0 0>; > gpio-ranges-group-names = "", > "ANOTHER_GPIO_GROUP"; > } > some_device { > ... > reset-gpios = <&scmi_gpio 0 GPIO_ACTIVE_HIGH>; > } > (B) > scmi { > ... // other protocols > scmi_pinctrl: protocol@19 { // Pin control protocol > ... > {pinmux definitions}... // if any, including GPIO? > > scmi_gpio: scmi_gpio { > // no need for "compatible" > gpio-controller; > #gpio-cells = <2>; > gpio-ranges = <&scmi_pinctrl 0 5 4>, > <&scmi_pinctrl 4 0 0>; > gpio-ranges-group-names = "", > "ANOTHER_GPIO_GROUP"; > } > } > } > some_device { > ... > reset-gpios = <&scmi_gpio 0 GPIO_ACTIVE_HIGH>; > } > (C) > if "gpio-ranges" is missing in gpio definition, assume 1:1 mapping, > i.e. use a native pinctrl pin number (5). > some_device { > ... > reset-gpios = <&scmi_gpio 5 GPIO_ACTIVE_HIGH>; > } > > > [2] https://lkml.iu.edu/hypermail/linux/kernel/2308.1/01084.html > [3] <u-boot>/doc/device-tree-bindings/pinctrl/pinctrl-bindings.txt > <u-boot>/doc/device-tree-bindings/gpio/gpio.txt > > Test > ==== > The patch series was tested on the following platforms: > * sandbox ("ut dm pinmux" and manually using gpio command) > > > Prerequisite: > ============= > * This patch series is based on my WIP "Base protocol support" patches > on v2023.10-rc3. You can fetch the whole code from [4]. > > [4] https://git.linaro.org/people/takahiro.akashi/u-boot.git > branch:scmi/pinctrl > > > Patches: > ======== > Patch#1: Add SCMI base protocol driver > Patch#2-#4: Add drivers > Patch#5-#6: Test related > > > Change history: > =============== > RFC (Sep 6, 2023) > * initial release as RFC > > AKASHI Takahiro (6): > firmware: scmi: fix protocol enumeration logic > firmware: scmi: add pinctrl protocol support > pinctrl: add scmi driver > gpio: add scmi driver based on pinctrl > firmware: scmi: add pseudo pinctrl protocol support on sandbox > test: dm: add SCMI pinctrl test > > arch/sandbox/dts/test.dts | 115 +++ > cmd/scmi.c | 1 + > drivers/firmware/scmi/Kconfig | 3 + > drivers/firmware/scmi/Makefile | 1 + > drivers/firmware/scmi/pinctrl.c | 412 ++++++++ > drivers/firmware/scmi/sandbox-scmi_agent.c | 722 +++++++++++++ > drivers/firmware/scmi/scmi_agent-uclass.c | 18 +- > drivers/pinctrl/Kconfig | 11 + > drivers/pinctrl/Makefile | 1 + > drivers/pinctrl/pinctrl-scmi.c | 1071 ++++++++++++++++++++ > include/scmi_agent-uclass.h | 2 + > include/scmi_protocols.h | 435 ++++++++ > test/dm/scmi.c | 62 ++ > 13 files changed, 2852 insertions(+), 2 deletions(-) > create mode 100644 drivers/firmware/scmi/pinctrl.c > create mode 100644 drivers/pinctrl/pinctrl-scmi.c > > -- > 2.34.1 >
Hi Peng, On Wed, Sep 06, 2023 at 12:09:45AM -0300, Fabio Estevam wrote: > Adding Peng Fan, who is working on scmi/pinctrl support for i.MX9: > > https://lore.kernel.org/all/ZO9GLG5tQynYyAvR@pluto/T/ I made a comment there. BTW, do you already have your own implementation of SCMI pin control protocol at SCMI firmware(server)? Is it public available? -Takahiro Akashi > On Tue, Sep 5, 2023 at 11:41 PM AKASHI Takahiro > <takahiro.akashi@linaro.org> wrote: > > > > This is an RFC and meant to get feedback from other developers as > > - the specification (pinctrl part) is still in a draft > > - the upstream patch for linux, including dt bindings, is still WIP > > - I'm not confident the drivers are generic enough to cover most HWs > > - The tests ("ut") doesn't cover all the features yet > > > > > > This patch series allows users to access SCMI pin control protocol provided > > by SCMI server (platform). See SCMI specification document v3.2 beta 2[1] > > for more details about SCMI pin control protocol. > > > > The implementation consists of two layers: > > - basic helper functions for SCMI pin control protocol > > in drivers/firmware/scmi/pinctrl.c (patch#2) > > - DM-compliant pinctrl/gpio drivers, which utilizes the helper functions, > > in drivers/pinctrl/pinctrl-scmi.c (patch#3,#4) > > > > [1] https://developer.arm.com/documentation/den0056/e/?lang=en > > > > DT bindings > > =========== > > Upstream pinctrl patch for linux defines the bindings in [2] though > > it doesn't say much. > > I expect that my implementation basically complies with U-Boot's generic > > bindings described in [3], but not all the features are verified. > > > > As for gpio, unless you hard-code pin assignments directly in a device > > driver, my implementation allows the following alternatives in DT. > > Either way, we may need an additional binding description for gpio. > > > > (A) > > scmi { > > ... // other protocols > > scmi_pinctrl: protocol@19 { // Pin control protocol > > ... > > {pinmux definitions}... // if any, including GPIO? > > } > > } > > scmi_gpio: scmi_gpio { > > compatible = "arm,scmi-gpio-generic"; > > gpio-controller; > > #gpio-cells = <2>; > > gpio-ranges = <&scmi_pinctrl 0 5 4>, > > <&scmi_pinctrl 4 0 0>; > > gpio-ranges-group-names = "", > > "ANOTHER_GPIO_GROUP"; > > } > > some_device { > > ... > > reset-gpios = <&scmi_gpio 0 GPIO_ACTIVE_HIGH>; > > } > > (B) > > scmi { > > ... // other protocols > > scmi_pinctrl: protocol@19 { // Pin control protocol > > ... > > {pinmux definitions}... // if any, including GPIO? > > > > scmi_gpio: scmi_gpio { > > // no need for "compatible" > > gpio-controller; > > #gpio-cells = <2>; > > gpio-ranges = <&scmi_pinctrl 0 5 4>, > > <&scmi_pinctrl 4 0 0>; > > gpio-ranges-group-names = "", > > "ANOTHER_GPIO_GROUP"; > > } > > } > > } > > some_device { > > ... > > reset-gpios = <&scmi_gpio 0 GPIO_ACTIVE_HIGH>; > > } > > (C) > > if "gpio-ranges" is missing in gpio definition, assume 1:1 mapping, > > i.e. use a native pinctrl pin number (5). > > some_device { > > ... > > reset-gpios = <&scmi_gpio 5 GPIO_ACTIVE_HIGH>; > > } > > > > > > [2] https://lkml.iu.edu/hypermail/linux/kernel/2308.1/01084.html > > [3] <u-boot>/doc/device-tree-bindings/pinctrl/pinctrl-bindings.txt > > <u-boot>/doc/device-tree-bindings/gpio/gpio.txt > > > > Test > > ==== > > The patch series was tested on the following platforms: > > * sandbox ("ut dm pinmux" and manually using gpio command) > > > > > > Prerequisite: > > ============= > > * This patch series is based on my WIP "Base protocol support" patches > > on v2023.10-rc3. You can fetch the whole code from [4]. > > > > [4] https://git.linaro.org/people/takahiro.akashi/u-boot.git > > branch:scmi/pinctrl > > > > > > Patches: > > ======== > > Patch#1: Add SCMI base protocol driver > > Patch#2-#4: Add drivers > > Patch#5-#6: Test related > > > > > > Change history: > > =============== > > RFC (Sep 6, 2023) > > * initial release as RFC > > > > AKASHI Takahiro (6): > > firmware: scmi: fix protocol enumeration logic > > firmware: scmi: add pinctrl protocol support > > pinctrl: add scmi driver > > gpio: add scmi driver based on pinctrl > > firmware: scmi: add pseudo pinctrl protocol support on sandbox > > test: dm: add SCMI pinctrl test > > > > arch/sandbox/dts/test.dts | 115 +++ > > cmd/scmi.c | 1 + > > drivers/firmware/scmi/Kconfig | 3 + > > drivers/firmware/scmi/Makefile | 1 + > > drivers/firmware/scmi/pinctrl.c | 412 ++++++++ > > drivers/firmware/scmi/sandbox-scmi_agent.c | 722 +++++++++++++ > > drivers/firmware/scmi/scmi_agent-uclass.c | 18 +- > > drivers/pinctrl/Kconfig | 11 + > > drivers/pinctrl/Makefile | 1 + > > drivers/pinctrl/pinctrl-scmi.c | 1071 ++++++++++++++++++++ > > include/scmi_agent-uclass.h | 2 + > > include/scmi_protocols.h | 435 ++++++++ > > test/dm/scmi.c | 62 ++ > > 13 files changed, 2852 insertions(+), 2 deletions(-) > > create mode 100644 drivers/firmware/scmi/pinctrl.c > > create mode 100644 drivers/pinctrl/pinctrl-scmi.c > > > > -- > > 2.34.1 > >
On 9/7/2023 5:58 PM, AKASHI Takahiro wrote: > Hi Peng, > > On Wed, Sep 06, 2023 at 12:09:45AM -0300, Fabio Estevam wrote: >> Adding Peng Fan, who is working on scmi/pinctrl support for i.MX9: Thanks for looping me. >> >> https://lore.kernel.org/all/ZO9GLG5tQynYyAvR@pluto/T/ > > I made a comment there. Thanks for help reviewing. > > BTW, do you already have your own implementation of SCMI pin control > protocol at SCMI firmware(server)? We follow the SCMI 3.2 pinctrl protocol, but use OEM config type. > Is it public available? The firmware is not public for now, but I could share the config set array, something like this: MUX TYPE, MUX REG, CONF_TYPE, CONF REG, DAISY TYPE, DAISY ID, DAISY VALUE. Regards, Peng. > > -Takahiro Akashi > > >> On Tue, Sep 5, 2023 at 11:41 PM AKASHI Takahiro >> <takahiro.akashi@linaro.org> wrote: >>> >>> This is an RFC and meant to get feedback from other developers as >>> - the specification (pinctrl part) is still in a draft >>> - the upstream patch for linux, including dt bindings, is still WIP >>> - I'm not confident the drivers are generic enough to cover most HWs >>> - The tests ("ut") doesn't cover all the features yet >>> >>> >>> This patch series allows users to access SCMI pin control protocol provided >>> by SCMI server (platform). See SCMI specification document v3.2 beta 2[1] >>> for more details about SCMI pin control protocol. >>> >>> The implementation consists of two layers: >>> - basic helper functions for SCMI pin control protocol >>> in drivers/firmware/scmi/pinctrl.c (patch#2) >>> - DM-compliant pinctrl/gpio drivers, which utilizes the helper functions, >>> in drivers/pinctrl/pinctrl-scmi.c (patch#3,#4) >>> >>> [1] https://developer.arm.com/documentation/den0056/e/?lang=en >>> >>> DT bindings >>> =========== >>> Upstream pinctrl patch for linux defines the bindings in [2] though >>> it doesn't say much. >>> I expect that my implementation basically complies with U-Boot's generic >>> bindings described in [3], but not all the features are verified. >>> >>> As for gpio, unless you hard-code pin assignments directly in a device >>> driver, my implementation allows the following alternatives in DT. >>> Either way, we may need an additional binding description for gpio. >>> >>> (A) >>> scmi { >>> ... // other protocols >>> scmi_pinctrl: protocol@19 { // Pin control protocol >>> ... >>> {pinmux definitions}... // if any, including GPIO? >>> } >>> } >>> scmi_gpio: scmi_gpio { >>> compatible = "arm,scmi-gpio-generic"; >>> gpio-controller; >>> #gpio-cells = <2>; >>> gpio-ranges = <&scmi_pinctrl 0 5 4>, >>> <&scmi_pinctrl 4 0 0>; >>> gpio-ranges-group-names = "", >>> "ANOTHER_GPIO_GROUP"; >>> } >>> some_device { >>> ... >>> reset-gpios = <&scmi_gpio 0 GPIO_ACTIVE_HIGH>; >>> } >>> (B) >>> scmi { >>> ... // other protocols >>> scmi_pinctrl: protocol@19 { // Pin control protocol >>> ... >>> {pinmux definitions}... // if any, including GPIO? >>> >>> scmi_gpio: scmi_gpio { >>> // no need for "compatible" >>> gpio-controller; >>> #gpio-cells = <2>; >>> gpio-ranges = <&scmi_pinctrl 0 5 4>, >>> <&scmi_pinctrl 4 0 0>; >>> gpio-ranges-group-names = "", >>> "ANOTHER_GPIO_GROUP"; >>> } >>> } >>> } >>> some_device { >>> ... >>> reset-gpios = <&scmi_gpio 0 GPIO_ACTIVE_HIGH>; >>> } >>> (C) >>> if "gpio-ranges" is missing in gpio definition, assume 1:1 mapping, >>> i.e. use a native pinctrl pin number (5). >>> some_device { >>> ... >>> reset-gpios = <&scmi_gpio 5 GPIO_ACTIVE_HIGH>; >>> } >>> >>> >>> [2] https://lkml.iu.edu/hypermail/linux/kernel/2308.1/01084.html >>> [3] <u-boot>/doc/device-tree-bindings/pinctrl/pinctrl-bindings.txt >>> <u-boot>/doc/device-tree-bindings/gpio/gpio.txt >>> >>> Test >>> ==== >>> The patch series was tested on the following platforms: >>> * sandbox ("ut dm pinmux" and manually using gpio command) >>> >>> >>> Prerequisite: >>> ============= >>> * This patch series is based on my WIP "Base protocol support" patches >>> on v2023.10-rc3. You can fetch the whole code from [4]. >>> >>> [4] https://git.linaro.org/people/takahiro.akashi/u-boot.git >>> branch:scmi/pinctrl >>> >>> >>> Patches: >>> ======== >>> Patch#1: Add SCMI base protocol driver >>> Patch#2-#4: Add drivers >>> Patch#5-#6: Test related >>> >>> >>> Change history: >>> =============== >>> RFC (Sep 6, 2023) >>> * initial release as RFC >>> >>> AKASHI Takahiro (6): >>> firmware: scmi: fix protocol enumeration logic >>> firmware: scmi: add pinctrl protocol support >>> pinctrl: add scmi driver >>> gpio: add scmi driver based on pinctrl >>> firmware: scmi: add pseudo pinctrl protocol support on sandbox >>> test: dm: add SCMI pinctrl test >>> >>> arch/sandbox/dts/test.dts | 115 +++ >>> cmd/scmi.c | 1 + >>> drivers/firmware/scmi/Kconfig | 3 + >>> drivers/firmware/scmi/Makefile | 1 + >>> drivers/firmware/scmi/pinctrl.c | 412 ++++++++ >>> drivers/firmware/scmi/sandbox-scmi_agent.c | 722 +++++++++++++ >>> drivers/firmware/scmi/scmi_agent-uclass.c | 18 +- >>> drivers/pinctrl/Kconfig | 11 + >>> drivers/pinctrl/Makefile | 1 + >>> drivers/pinctrl/pinctrl-scmi.c | 1071 ++++++++++++++++++++ >>> include/scmi_agent-uclass.h | 2 + >>> include/scmi_protocols.h | 435 ++++++++ >>> test/dm/scmi.c | 62 ++ >>> 13 files changed, 2852 insertions(+), 2 deletions(-) >>> create mode 100644 drivers/firmware/scmi/pinctrl.c >>> create mode 100644 drivers/pinctrl/pinctrl-scmi.c >>> >>> -- >>> 2.34.1 >>>