* [PATCH v1 1/2] dt-bindings: Add bindings for BrcmSTB SCMI mailbox driver @ 2020-09-15 19:31 ` Jim Quinlan 0 siblings, 0 replies; 8+ messages in thread From: Jim Quinlan @ 2020-09-15 19:31 UTC (permalink / raw) To: bcm-kernel-feedback-list, james.quinlan Cc: Florian Fainelli, Rob Herring, open list, moderated list:BROADCOM BCM7XXX ARM ARCHITECTURE, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS [-- Attachment #1.1: Type: text/plain, Size: 1496 bytes --] Bindings are added. Only one interrupt is needed because we do not yet employ the SCMI p2a channel. Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com> --- .../bindings/mailbox/brcm,brcmstb-mbox.yaml | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml diff --git a/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml b/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml new file mode 100644 index 000000000000..c2359f3a2b13 --- /dev/null +++ b/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml @@ -0,0 +1,39 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$schema: "http://devicetree.org/meta-schemas/core.yaml#" +$id: http://devicetree.org/schemas/mailbox/brcm,brcmstb-mbox.yaml# + +title: Broadcom STB SCMI mailbox driver bindings + +maintainers: + - Jim Quinlan <james.quinlan@broadcom.com> + +properties: + compatible: + enum: + - brcm,brcmstb-mbox + + interrupts: + items: + - description: SCMI a2p return interrupt + + "#mbox-cells": + const: 1 + +required: + - compatible + - interrupts + - "#mbox-cells" + +additionalProperties: false + +examples: + - | + #include <dt-bindings/interrupt-controller/arm-gic.h> + mailbox0: mailbox@0 { + compatible = "brcm,brcmstb-mailbox"; + #mbox-cells = <1>; + interrupts = <GIC_SPI 0xc6 IRQ_TYPE_LEVEL_HIGH>; + }; +... -- 2.17.1 [-- Attachment #1.2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4167 bytes --] [-- Attachment #2: Type: text/plain, Size: 176 bytes --] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v1 1/2] dt-bindings: Add bindings for BrcmSTB SCMI mailbox driver @ 2020-09-15 19:31 ` Jim Quinlan 0 siblings, 0 replies; 8+ messages in thread From: Jim Quinlan @ 2020-09-15 19:31 UTC (permalink / raw) To: bcm-kernel-feedback-list, james.quinlan Cc: Rob Herring, Florian Fainelli, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, moderated list:BROADCOM BCM7XXX ARM ARCHITECTURE, open list [-- Attachment #1: Type: text/plain, Size: 1496 bytes --] Bindings are added. Only one interrupt is needed because we do not yet employ the SCMI p2a channel. Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com> --- .../bindings/mailbox/brcm,brcmstb-mbox.yaml | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml diff --git a/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml b/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml new file mode 100644 index 000000000000..c2359f3a2b13 --- /dev/null +++ b/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml @@ -0,0 +1,39 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$schema: "http://devicetree.org/meta-schemas/core.yaml#" +$id: http://devicetree.org/schemas/mailbox/brcm,brcmstb-mbox.yaml# + +title: Broadcom STB SCMI mailbox driver bindings + +maintainers: + - Jim Quinlan <james.quinlan@broadcom.com> + +properties: + compatible: + enum: + - brcm,brcmstb-mbox + + interrupts: + items: + - description: SCMI a2p return interrupt + + "#mbox-cells": + const: 1 + +required: + - compatible + - interrupts + - "#mbox-cells" + +additionalProperties: false + +examples: + - | + #include <dt-bindings/interrupt-controller/arm-gic.h> + mailbox0: mailbox@0 { + compatible = "brcm,brcmstb-mailbox"; + #mbox-cells = <1>; + interrupts = <GIC_SPI 0xc6 IRQ_TYPE_LEVEL_HIGH>; + }; +... -- 2.17.1 [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4167 bytes --] ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v1 2/2] mailbox: Add Broadcom STB mailbox driver 2020-09-15 19:31 ` Jim Quinlan @ 2020-09-15 19:31 ` Jim Quinlan -1 siblings, 0 replies; 8+ messages in thread From: Jim Quinlan @ 2020-09-15 19:31 UTC (permalink / raw) To: bcm-kernel-feedback-list, james.quinlan Cc: Jassi Brar, Florian Fainelli, open list, moderated list:BROADCOM BCM7XXX ARM ARCHITECTURE [-- Attachment #1.1: Type: text/plain, Size: 6673 bytes --] This is a simple mailbox driver to be used by the SCMI protocol stack. It only implements the agent-to-platform channel; we may implement the platform-to-agent channel in the future. An unusual aspect of this driver is how the completion of an SCMI message is indicated. An SCMI message is initiated with an ARM SMC call, but the return of this call does not indicate the execution or completion of the message. Rather, the message's completion is signaled by an interrupt. Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- drivers/mailbox/Kconfig | 13 +++ drivers/mailbox/Makefile | 2 + drivers/mailbox/brcmstb-mailbox.c | 173 ++++++++++++++++++++++++++++++ 3 files changed, 188 insertions(+) create mode 100644 drivers/mailbox/brcmstb-mailbox.c diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig index 05b1009e2820..bebf7da778bc 100644 --- a/drivers/mailbox/Kconfig +++ b/drivers/mailbox/Kconfig @@ -254,4 +254,17 @@ config QCOM_IPCC acts as an interrupt controller for receiving interrupts from clients. Say Y here if you want to build this driver. +config BRCMSTB_MBOX + tristate "Broadcom STB Mailbox" + depends on ARM64 || ARM + depends on ARM_SCMI_PROTOCOL && ARCH_BRCMSTB + depends on SMP + default ARM_SCMI_PROTOCOL && ARCH_BRCMSTB + help + Mailbox implementation of the Broadcom STB for the sole purposes + of SCMI communication. This is used by the SCMI drivers to + communicate with FW that runs in EL3. This mailbox only implements + the agent-to-platform channgel of SCMI but may be augmented in + the future to add the platform-to-agent channel. + endif diff --git a/drivers/mailbox/Makefile b/drivers/mailbox/Makefile index 60d224b723a1..a74efd02eece 100644 --- a/drivers/mailbox/Makefile +++ b/drivers/mailbox/Makefile @@ -54,3 +54,5 @@ obj-$(CONFIG_SUN6I_MSGBOX) += sun6i-msgbox.o obj-$(CONFIG_SPRD_MBOX) += sprd-mailbox.o obj-$(CONFIG_QCOM_IPCC) += qcom-ipcc.o + +obj-$(CONFIG_BRCMSTB_MBOX) += brcmstb-mailbox.o diff --git a/drivers/mailbox/brcmstb-mailbox.c b/drivers/mailbox/brcmstb-mailbox.c new file mode 100644 index 000000000000..27d87938b08c --- /dev/null +++ b/drivers/mailbox/brcmstb-mailbox.c @@ -0,0 +1,173 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2017, Broadcom */ + +#include <linux/kernel.h> +#include <linux/interrupt.h> +#include <linux/mailbox_controller.h> +#include <linux/mailbox_client.h> +#include <linux/module.h> +#include <linux/io.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/of_irq.h> +#include <linux/of_platform.h> +#include <linux/platform_device.h> +#include <linux/slab.h> +#if defined(CONFIG_ARM64) || defined(CONFIG_ARM) +#include <linux/arm-smccc.h> +#endif + +#define BRCM_SCMI_SMC_OEM_FUNC 0x400 +#define BRCM_SCMI_MBOX_NUM 0 +#define BRCM_FID(ch) ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ + IS_ENABLED(CONFIG_ARM64), \ + ARM_SMCCC_OWNER_OEM, \ + BRCM_SCMI_SMC_OEM_FUNC + (ch)) +enum { + A2P_CHAN = 0, + NUM_CHAN +}; + +struct chan_priv { + unsigned int mbox_num; + unsigned int ch; +}; + +struct brcm_mbox { + struct mbox_controller controller; + int irqs[NUM_CHAN]; +}; + +static struct mbox_chan *brcm_mbox_of_xlate(struct mbox_controller *controller, + const struct of_phandle_args *sp) +{ + unsigned int ch = sp->args[0]; + struct brcm_mbox *mbox + = container_of(controller, struct brcm_mbox, controller); + + if (!mbox || ch >= NUM_CHAN) + return ERR_PTR(-ENOENT); + + return &mbox->controller.chans[ch]; +} + +#if defined(CONFIG_ARM64) || defined(CONFIG_ARM) +static int announce_msg(unsigned int mbox_num, unsigned int ch) +{ + struct arm_smccc_res res; + + if (ch >= NUM_CHAN) + return -EIO; + arm_smccc_smc(BRCM_FID(ch), mbox_num, 0, 0, 0, 0, 0, 0, &res); + if (res.a0) + return -EIO; + return 0; +} +#else +#error Func announce_msg() not defined for the current ARCH +#endif + +static int brcm_mbox_send_data(struct mbox_chan *chan, void *data) +{ + struct chan_priv *priv = chan->con_priv; + + return announce_msg(priv->mbox_num, priv->ch); +} + +static int brcm_mbox_startup(struct mbox_chan *chan) +{ + return 0; +} + +static const struct mbox_chan_ops brcm_mbox_ops = { + .send_data = brcm_mbox_send_data, + .startup = brcm_mbox_startup, +}; + +static irqreturn_t brcm_a2p_isr(int irq, void *data) +{ + struct mbox_chan *chan = data; + + mbox_chan_received_data(chan, NULL); + return IRQ_HANDLED; +} + +static int brcm_mbox_probe(struct platform_device *pdev) +{ + struct brcm_mbox *mbox; + struct device *dev = &pdev->dev; + struct device_node *np = dev->of_node; + struct chan_priv *chan_priv; + int ret; + + if (!np) + return -EINVAL; + + mbox = devm_kzalloc(&pdev->dev, sizeof(*mbox), GFP_KERNEL); + if (!mbox) + return -ENOMEM; + + /* Allocate channels */ + mbox->controller.chans = devm_kzalloc( + &pdev->dev, NUM_CHAN * sizeof(struct mbox_chan), GFP_KERNEL); + if (!mbox->controller.chans) + return -ENOMEM; + chan_priv = devm_kzalloc( + &pdev->dev, NUM_CHAN * sizeof(struct chan_priv), GFP_KERNEL); + if (!chan_priv) + return -ENOMEM; + + mbox->irqs[A2P_CHAN] = platform_get_irq(pdev, 0); + ret = devm_request_irq(&pdev->dev, mbox->irqs[A2P_CHAN], brcm_a2p_isr, + IRQF_NO_SUSPEND, "brcm: SCMI a2p intr", + &mbox->controller.chans[A2P_CHAN]); + if (ret) { + dev_err(&pdev->dev, "failed to setup SCMI a2p isr\n"); + return ret; + } + chan_priv[A2P_CHAN].mbox_num = BRCM_SCMI_MBOX_NUM; + chan_priv[A2P_CHAN].ch = A2P_CHAN; + mbox->controller.chans[A2P_CHAN].con_priv = &chan_priv[A2P_CHAN]; + mbox->controller.num_chans++; + mbox->controller.dev = &pdev->dev; + mbox->controller.ops = &brcm_mbox_ops; + mbox->controller.of_xlate = brcm_mbox_of_xlate; + ret = mbox_controller_register(&mbox->controller); + if (ret) { + dev_err(dev, "failed to register BrcmSTB mbox\n"); + return ret; + } + + platform_set_drvdata(pdev, mbox); + return 0; +} + +static int brcm_mbox_remove(struct platform_device *pdev) +{ + struct brcm_mbox *mbox = platform_get_drvdata(pdev); + + mbox_controller_unregister(&mbox->controller); + + return 0; +} + +static const struct of_device_id brcm_mbox_of_match[] = { + { .compatible = "brcm,brcmstb-mbox", }, + {} +}; +MODULE_DEVICE_TABLE(of, brcm_mbox_of_match); + +static struct platform_driver brcm_mbox_driver = { + .probe = brcm_mbox_probe, + .remove = brcm_mbox_remove, + .driver = { + .name = "brcm_mbox", + .of_match_table = brcm_mbox_of_match, + }, +}; + +module_platform_driver(brcm_mbox_driver); + +MODULE_LICENSE("GPL v2"); +MODULE_DESCRIPTION("Broadcom STB SCMI Mailbox driver"); +MODULE_AUTHOR("Broadcom"); -- 2.17.1 [-- Attachment #1.2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4167 bytes --] [-- Attachment #2: Type: text/plain, Size: 176 bytes --] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v1 2/2] mailbox: Add Broadcom STB mailbox driver @ 2020-09-15 19:31 ` Jim Quinlan 0 siblings, 0 replies; 8+ messages in thread From: Jim Quinlan @ 2020-09-15 19:31 UTC (permalink / raw) To: bcm-kernel-feedback-list, james.quinlan Cc: Florian Fainelli, Jassi Brar, open list, moderated list:BROADCOM BCM7XXX ARM ARCHITECTURE [-- Attachment #1: Type: text/plain, Size: 6673 bytes --] This is a simple mailbox driver to be used by the SCMI protocol stack. It only implements the agent-to-platform channel; we may implement the platform-to-agent channel in the future. An unusual aspect of this driver is how the completion of an SCMI message is indicated. An SCMI message is initiated with an ARM SMC call, but the return of this call does not indicate the execution or completion of the message. Rather, the message's completion is signaled by an interrupt. Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- drivers/mailbox/Kconfig | 13 +++ drivers/mailbox/Makefile | 2 + drivers/mailbox/brcmstb-mailbox.c | 173 ++++++++++++++++++++++++++++++ 3 files changed, 188 insertions(+) create mode 100644 drivers/mailbox/brcmstb-mailbox.c diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig index 05b1009e2820..bebf7da778bc 100644 --- a/drivers/mailbox/Kconfig +++ b/drivers/mailbox/Kconfig @@ -254,4 +254,17 @@ config QCOM_IPCC acts as an interrupt controller for receiving interrupts from clients. Say Y here if you want to build this driver. +config BRCMSTB_MBOX + tristate "Broadcom STB Mailbox" + depends on ARM64 || ARM + depends on ARM_SCMI_PROTOCOL && ARCH_BRCMSTB + depends on SMP + default ARM_SCMI_PROTOCOL && ARCH_BRCMSTB + help + Mailbox implementation of the Broadcom STB for the sole purposes + of SCMI communication. This is used by the SCMI drivers to + communicate with FW that runs in EL3. This mailbox only implements + the agent-to-platform channgel of SCMI but may be augmented in + the future to add the platform-to-agent channel. + endif diff --git a/drivers/mailbox/Makefile b/drivers/mailbox/Makefile index 60d224b723a1..a74efd02eece 100644 --- a/drivers/mailbox/Makefile +++ b/drivers/mailbox/Makefile @@ -54,3 +54,5 @@ obj-$(CONFIG_SUN6I_MSGBOX) += sun6i-msgbox.o obj-$(CONFIG_SPRD_MBOX) += sprd-mailbox.o obj-$(CONFIG_QCOM_IPCC) += qcom-ipcc.o + +obj-$(CONFIG_BRCMSTB_MBOX) += brcmstb-mailbox.o diff --git a/drivers/mailbox/brcmstb-mailbox.c b/drivers/mailbox/brcmstb-mailbox.c new file mode 100644 index 000000000000..27d87938b08c --- /dev/null +++ b/drivers/mailbox/brcmstb-mailbox.c @@ -0,0 +1,173 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2017, Broadcom */ + +#include <linux/kernel.h> +#include <linux/interrupt.h> +#include <linux/mailbox_controller.h> +#include <linux/mailbox_client.h> +#include <linux/module.h> +#include <linux/io.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/of_irq.h> +#include <linux/of_platform.h> +#include <linux/platform_device.h> +#include <linux/slab.h> +#if defined(CONFIG_ARM64) || defined(CONFIG_ARM) +#include <linux/arm-smccc.h> +#endif + +#define BRCM_SCMI_SMC_OEM_FUNC 0x400 +#define BRCM_SCMI_MBOX_NUM 0 +#define BRCM_FID(ch) ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ + IS_ENABLED(CONFIG_ARM64), \ + ARM_SMCCC_OWNER_OEM, \ + BRCM_SCMI_SMC_OEM_FUNC + (ch)) +enum { + A2P_CHAN = 0, + NUM_CHAN +}; + +struct chan_priv { + unsigned int mbox_num; + unsigned int ch; +}; + +struct brcm_mbox { + struct mbox_controller controller; + int irqs[NUM_CHAN]; +}; + +static struct mbox_chan *brcm_mbox_of_xlate(struct mbox_controller *controller, + const struct of_phandle_args *sp) +{ + unsigned int ch = sp->args[0]; + struct brcm_mbox *mbox + = container_of(controller, struct brcm_mbox, controller); + + if (!mbox || ch >= NUM_CHAN) + return ERR_PTR(-ENOENT); + + return &mbox->controller.chans[ch]; +} + +#if defined(CONFIG_ARM64) || defined(CONFIG_ARM) +static int announce_msg(unsigned int mbox_num, unsigned int ch) +{ + struct arm_smccc_res res; + + if (ch >= NUM_CHAN) + return -EIO; + arm_smccc_smc(BRCM_FID(ch), mbox_num, 0, 0, 0, 0, 0, 0, &res); + if (res.a0) + return -EIO; + return 0; +} +#else +#error Func announce_msg() not defined for the current ARCH +#endif + +static int brcm_mbox_send_data(struct mbox_chan *chan, void *data) +{ + struct chan_priv *priv = chan->con_priv; + + return announce_msg(priv->mbox_num, priv->ch); +} + +static int brcm_mbox_startup(struct mbox_chan *chan) +{ + return 0; +} + +static const struct mbox_chan_ops brcm_mbox_ops = { + .send_data = brcm_mbox_send_data, + .startup = brcm_mbox_startup, +}; + +static irqreturn_t brcm_a2p_isr(int irq, void *data) +{ + struct mbox_chan *chan = data; + + mbox_chan_received_data(chan, NULL); + return IRQ_HANDLED; +} + +static int brcm_mbox_probe(struct platform_device *pdev) +{ + struct brcm_mbox *mbox; + struct device *dev = &pdev->dev; + struct device_node *np = dev->of_node; + struct chan_priv *chan_priv; + int ret; + + if (!np) + return -EINVAL; + + mbox = devm_kzalloc(&pdev->dev, sizeof(*mbox), GFP_KERNEL); + if (!mbox) + return -ENOMEM; + + /* Allocate channels */ + mbox->controller.chans = devm_kzalloc( + &pdev->dev, NUM_CHAN * sizeof(struct mbox_chan), GFP_KERNEL); + if (!mbox->controller.chans) + return -ENOMEM; + chan_priv = devm_kzalloc( + &pdev->dev, NUM_CHAN * sizeof(struct chan_priv), GFP_KERNEL); + if (!chan_priv) + return -ENOMEM; + + mbox->irqs[A2P_CHAN] = platform_get_irq(pdev, 0); + ret = devm_request_irq(&pdev->dev, mbox->irqs[A2P_CHAN], brcm_a2p_isr, + IRQF_NO_SUSPEND, "brcm: SCMI a2p intr", + &mbox->controller.chans[A2P_CHAN]); + if (ret) { + dev_err(&pdev->dev, "failed to setup SCMI a2p isr\n"); + return ret; + } + chan_priv[A2P_CHAN].mbox_num = BRCM_SCMI_MBOX_NUM; + chan_priv[A2P_CHAN].ch = A2P_CHAN; + mbox->controller.chans[A2P_CHAN].con_priv = &chan_priv[A2P_CHAN]; + mbox->controller.num_chans++; + mbox->controller.dev = &pdev->dev; + mbox->controller.ops = &brcm_mbox_ops; + mbox->controller.of_xlate = brcm_mbox_of_xlate; + ret = mbox_controller_register(&mbox->controller); + if (ret) { + dev_err(dev, "failed to register BrcmSTB mbox\n"); + return ret; + } + + platform_set_drvdata(pdev, mbox); + return 0; +} + +static int brcm_mbox_remove(struct platform_device *pdev) +{ + struct brcm_mbox *mbox = platform_get_drvdata(pdev); + + mbox_controller_unregister(&mbox->controller); + + return 0; +} + +static const struct of_device_id brcm_mbox_of_match[] = { + { .compatible = "brcm,brcmstb-mbox", }, + {} +}; +MODULE_DEVICE_TABLE(of, brcm_mbox_of_match); + +static struct platform_driver brcm_mbox_driver = { + .probe = brcm_mbox_probe, + .remove = brcm_mbox_remove, + .driver = { + .name = "brcm_mbox", + .of_match_table = brcm_mbox_of_match, + }, +}; + +module_platform_driver(brcm_mbox_driver); + +MODULE_LICENSE("GPL v2"); +MODULE_DESCRIPTION("Broadcom STB SCMI Mailbox driver"); +MODULE_AUTHOR("Broadcom"); -- 2.17.1 [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4167 bytes --] ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v1 2/2] mailbox: Add Broadcom STB mailbox driver 2020-09-15 19:31 ` Jim Quinlan @ 2020-09-15 19:33 ` Florian Fainelli -1 siblings, 0 replies; 8+ messages in thread From: Florian Fainelli @ 2020-09-15 19:33 UTC (permalink / raw) To: Jim Quinlan, bcm-kernel-feedback-list Cc: Jassi Brar, Florian Fainelli, open list, moderated list:BROADCOM BCM7XXX ARM ARCHITECTURE Hi Jim, On 9/15/2020 12:31 PM, Jim Quinlan wrote: > This is a simple mailbox driver to be used by the SCMI protocol stack. It > only implements the agent-to-platform channel; we may implement the > platform-to-agent channel in the future. An unusual aspect of this driver > is how the completion of an SCMI message is indicated. An SCMI message is > initiated with an ARM SMC call, but the return of this call does not > indicate the execution or completion of the message. Rather, the message's > completion is signaled by an interrupt. > > Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com> > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > --- > drivers/mailbox/Kconfig | 13 +++ > drivers/mailbox/Makefile | 2 + > drivers/mailbox/brcmstb-mailbox.c | 173 ++++++++++++++++++++++++++++++ > 3 files changed, 188 insertions(+) > create mode 100644 drivers/mailbox/brcmstb-mailbox.c > > diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig > index 05b1009e2820..bebf7da778bc 100644 > --- a/drivers/mailbox/Kconfig > +++ b/drivers/mailbox/Kconfig > @@ -254,4 +254,17 @@ config QCOM_IPCC > acts as an interrupt controller for receiving interrupts from clients. > Say Y here if you want to build this driver. > > +config BRCMSTB_MBOX > + tristate "Broadcom STB Mailbox" > + depends on ARM64 || ARM > + depends on ARM_SCMI_PROTOCOL && ARCH_BRCMSTB > + depends on SMP We can actually remove the SMP dependency cannot we? This was needed back when we used the hackish way of hooking to IPIs in the downstream kernel which we fortunately no longer do. -- Florian _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 2/2] mailbox: Add Broadcom STB mailbox driver @ 2020-09-15 19:33 ` Florian Fainelli 0 siblings, 0 replies; 8+ messages in thread From: Florian Fainelli @ 2020-09-15 19:33 UTC (permalink / raw) To: Jim Quinlan, bcm-kernel-feedback-list Cc: Florian Fainelli, Jassi Brar, open list, moderated list:BROADCOM BCM7XXX ARM ARCHITECTURE Hi Jim, On 9/15/2020 12:31 PM, Jim Quinlan wrote: > This is a simple mailbox driver to be used by the SCMI protocol stack. It > only implements the agent-to-platform channel; we may implement the > platform-to-agent channel in the future. An unusual aspect of this driver > is how the completion of an SCMI message is indicated. An SCMI message is > initiated with an ARM SMC call, but the return of this call does not > indicate the execution or completion of the message. Rather, the message's > completion is signaled by an interrupt. > > Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com> > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > --- > drivers/mailbox/Kconfig | 13 +++ > drivers/mailbox/Makefile | 2 + > drivers/mailbox/brcmstb-mailbox.c | 173 ++++++++++++++++++++++++++++++ > 3 files changed, 188 insertions(+) > create mode 100644 drivers/mailbox/brcmstb-mailbox.c > > diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig > index 05b1009e2820..bebf7da778bc 100644 > --- a/drivers/mailbox/Kconfig > +++ b/drivers/mailbox/Kconfig > @@ -254,4 +254,17 @@ config QCOM_IPCC > acts as an interrupt controller for receiving interrupts from clients. > Say Y here if you want to build this driver. > > +config BRCMSTB_MBOX > + tristate "Broadcom STB Mailbox" > + depends on ARM64 || ARM > + depends on ARM_SCMI_PROTOCOL && ARCH_BRCMSTB > + depends on SMP We can actually remove the SMP dependency cannot we? This was needed back when we used the hackish way of hooking to IPIs in the downstream kernel which we fortunately no longer do. -- Florian ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 1/2] dt-bindings: Add bindings for BrcmSTB SCMI mailbox driver 2020-09-15 19:31 ` Jim Quinlan @ 2020-09-18 17:22 ` Rob Herring -1 siblings, 0 replies; 8+ messages in thread From: Rob Herring @ 2020-09-18 17:22 UTC (permalink / raw) To: Jim Quinlan Cc: open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, Florian Fainelli, bcm-kernel-feedback-list, open list, moderated list:BROADCOM BCM7XXX ARM ARCHITECTURE On Tue, Sep 15, 2020 at 03:31:04PM -0400, Jim Quinlan wrote: > Bindings are added. Only one interrupt is needed because > we do not yet employ the SCMI p2a channel. > > Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com> > --- > .../bindings/mailbox/brcm,brcmstb-mbox.yaml | 39 +++++++++++++++++++ > 1 file changed, 39 insertions(+) > create mode 100644 Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml > > diff --git a/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml b/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml > new file mode 100644 > index 000000000000..c2359f3a2b13 > --- /dev/null > +++ b/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml > @@ -0,0 +1,39 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$schema: "http://devicetree.org/meta-schemas/core.yaml#" > +$id: http://devicetree.org/schemas/mailbox/brcm,brcmstb-mbox.yaml# > + > +title: Broadcom STB SCMI mailbox driver bindings I thought SCMI was a mailbox consumer, not provider? > + > +maintainers: > + - Jim Quinlan <james.quinlan@broadcom.com> > + > +properties: > + compatible: > + enum: > + - brcm,brcmstb-mbox > + > + interrupts: > + items: > + - description: SCMI a2p return interrupt > + > + "#mbox-cells": > + const: 1 > + > +required: > + - compatible > + - interrupts > + - "#mbox-cells" > + > +additionalProperties: false > + > +examples: > + - | > + #include <dt-bindings/interrupt-controller/arm-gic.h> > + mailbox0: mailbox@0 { Drop the label and unit-address. Run 'make dt_binding_check' as it will tell you the latter. > + compatible = "brcm,brcmstb-mailbox"; > + #mbox-cells = <1>; > + interrupts = <GIC_SPI 0xc6 IRQ_TYPE_LEVEL_HIGH>; > + }; > +... > -- > 2.17.1 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 1/2] dt-bindings: Add bindings for BrcmSTB SCMI mailbox driver @ 2020-09-18 17:22 ` Rob Herring 0 siblings, 0 replies; 8+ messages in thread From: Rob Herring @ 2020-09-18 17:22 UTC (permalink / raw) To: Jim Quinlan Cc: bcm-kernel-feedback-list, Florian Fainelli, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, moderated list:BROADCOM BCM7XXX ARM ARCHITECTURE, open list On Tue, Sep 15, 2020 at 03:31:04PM -0400, Jim Quinlan wrote: > Bindings are added. Only one interrupt is needed because > we do not yet employ the SCMI p2a channel. > > Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com> > --- > .../bindings/mailbox/brcm,brcmstb-mbox.yaml | 39 +++++++++++++++++++ > 1 file changed, 39 insertions(+) > create mode 100644 Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml > > diff --git a/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml b/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml > new file mode 100644 > index 000000000000..c2359f3a2b13 > --- /dev/null > +++ b/Documentation/devicetree/bindings/mailbox/brcm,brcmstb-mbox.yaml > @@ -0,0 +1,39 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$schema: "http://devicetree.org/meta-schemas/core.yaml#" > +$id: http://devicetree.org/schemas/mailbox/brcm,brcmstb-mbox.yaml# > + > +title: Broadcom STB SCMI mailbox driver bindings I thought SCMI was a mailbox consumer, not provider? > + > +maintainers: > + - Jim Quinlan <james.quinlan@broadcom.com> > + > +properties: > + compatible: > + enum: > + - brcm,brcmstb-mbox > + > + interrupts: > + items: > + - description: SCMI a2p return interrupt > + > + "#mbox-cells": > + const: 1 > + > +required: > + - compatible > + - interrupts > + - "#mbox-cells" > + > +additionalProperties: false > + > +examples: > + - | > + #include <dt-bindings/interrupt-controller/arm-gic.h> > + mailbox0: mailbox@0 { Drop the label and unit-address. Run 'make dt_binding_check' as it will tell you the latter. > + compatible = "brcm,brcmstb-mailbox"; > + #mbox-cells = <1>; > + interrupts = <GIC_SPI 0xc6 IRQ_TYPE_LEVEL_HIGH>; > + }; > +... > -- > 2.17.1 > ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-09-18 17:24 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-09-15 19:31 [PATCH v1 1/2] dt-bindings: Add bindings for BrcmSTB SCMI mailbox driver Jim Quinlan 2020-09-15 19:31 ` Jim Quinlan 2020-09-15 19:31 ` [PATCH v1 2/2] mailbox: Add Broadcom STB " Jim Quinlan 2020-09-15 19:31 ` Jim Quinlan 2020-09-15 19:33 ` Florian Fainelli 2020-09-15 19:33 ` Florian Fainelli 2020-09-18 17:22 ` [PATCH v1 1/2] dt-bindings: Add bindings for BrcmSTB SCMI " Rob Herring 2020-09-18 17:22 ` Rob Herring
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.