APM X-Gene Mailbox driver
v2 cover APM X-Gene Mailbox driver
This adds the mailbox driver for the APM X-Gene SoC
V2 change
- Add ACPI support
- use defines for reg offset
Feng Kan (4):
mailbox: add support for APM X-Gene platform mailbox driver
mailbox: xgene: add ACPI support for X-Gene mailbox driver
Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts
documentation
arm64: dts: mailbox device tree node for APM X-Gene platform.
.../bindings/mailbox/xgene-slimpro-mailbox.txt | 34 +++ arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 ++ drivers/mailbox/Kconfig | 10 + drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 271 +++++++++++++++++++++ 5 files changed, 331 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c
Signature · 1 line
1.9.1
PATCH v2 1/4 mailbox: add support for APM X-Gene platform mailbox driver
Add support for APM X-Gene platform mailbox driver.
--- drivers/mailbox/Kconfig | 10 ++ drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 261 ++++++++++++++++++++++++++++++++ 3 files changed, 273 insertions(+) create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c
drivers/mailbox/Kconfig +10 -0
@@ -60,4 +60,14 @@ config ALTERA_MBOX An implementation of the Altera Mailbox soft core. It is used to send message between processors. Say Y here if you want to use the Altera mailbox support. + +config XGENE_SLIMPRO_MBOX + tristate "APM SoC X-Gene SLIMpro Mailbox Controller" + depends on ARCH_XGENE + help + An implementation of the APM X-Gene Interprocessor Communication + Mailbox (IPCM) between the ARM 64-bit cores and SLIMpro controller. + It is used to send short messages between ARM64-bit cores and + the SLIMpro Management Engine, primarily for PM. Say Y here if you + want to use the APM X-Gene SLIMpro IPCM support. endif
drivers/mailbox/Makefile +2 -0
@@ -11,3 +11,5 @@ obj-$(CONFIG_OMAP2PLUS_MBOX) += omap-mailbox.o obj-$(CONFIG_PCC) += pcc.o obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o + +obj-$(CONFIG_XGENE_SLIMPRO_MBOX) += mailbox-xgene-slimpro.o
drivers/mailbox/mailbox-xgene-slimpro.c new file +261 -0
261 lines not on this page · raw message
Signature · 1 line
1.9.1
Re: [PATCH V2 1/4] mailbox: add support for APM X-Gene platform mailbox driver
Quoted 9 lines · Feng Kan
drivers/mailbox/mailbox-xgene-slimpro.c new file +6
-0+static struct platform_driver slimpro_mbox_driver = { + .probe = slimpro_mbox_probe, + .remove = slimpro_mbox_remove, + .driver = { + .name ="xgene-slimpro-mbox" , + .owner =THIS_MODULE ,
drivers/mailbox/mailbox-xgene-slimpro.c line 258
Quoted 10 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +10
-0+ .of_match_table = of_match_ptr(slimpro_of_match), + }, +}; + +static int __init slimpro_mbox_init (void ) +{ +return platform_driver_register (&slimpro_mbox_driver); +} + +subsys_initcall (slimpro_mbox_init);
After a quick scan of this driver you'd expect something like
static void __exit slimpro_mbox_exit(void)
{
platform_driver_unregister(&slimpro_mbox_driver);
}
module_exit(slimpro_mbox_exit);too here. At least, I do. Is there some non-obvious (to me) reason this driver can't be unloaded if it is built as a module?
drivers/mailbox/mailbox-xgene-slimpro.c line 261
Quoted 2 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +2
-0+MODULE_DESCRIPTION ("APM X-Gene SLIMpro Mailbox Driver" ); +MODULE_LICENSE ("GPL" );
Thanks,
Paul Bolle
v3 cover mailbox: Add APM X-Gene platform mailbox driver
APM X-Gene SoC has a mailbox controller that provides communication mechanism for X-Gene Arm64 cores to communicate with X-Gene SoC's Cortex M3 (SLIMpro) processor.
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Changes since v2:
- Rebase Feng's patch set over v4.3-rc5
- Remove uneccessary 'inline' in function definition
- Use module_platform_driver instead of subsys_initcall
- Minor coding stype clean up
Changes since v1:
- Add ACPI support
- Use defines for reg offset
.../bindings/mailbox/xgene-slimpro-mailbox.txt | 34 +++ arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 ++ drivers/mailbox/Kconfig | 9 + drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 264 +++++++++++++++++++++ 5 files changed, 323 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c
Signature · 1 line
1.9.1
PATCH v3 1/3 mailbox: Add support for APM X-Gene platform mailbox driver
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
[dhdang: rebase over 4.3-rc5, some minor changes to address comment in v2 patch set]
--- drivers/mailbox/Kconfig | 9 ++ drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 264 ++++++++++++++++++++++++++++++++ 3 files changed, 275 insertions(+) create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c
drivers/mailbox/Kconfig +9 -0
@@ -71,4 +71,13 @@ config BCM2835_MBOX the services of the Videocore. Say Y here if you want to use the BCM2835 Mailbox. +config XGENE_SLIMPRO_MBOX + tristate "APM SoC X-Gene SLIMpro Mailbox Controller" + depends on ARCH_XGENE + help + An implementation of the APM X-Gene Interprocessor Communication + Mailbox (IPCM) between the ARM 64-bit cores and SLIMpro controller. + It is used to send short messages between ARM64-bit cores and + the SLIMpro Management Engine, primarily for PM. Say Y here if you + want to use the APM X-Gene SLIMpro IPCM support. endif
drivers/mailbox/Makefile +2 -0
@@ -13,3 +13,5 @@ obj-$(CONFIG_PCC) += pcc.o obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o obj-$(CONFIG_BCM2835_MBOX) += bcm2835-mailbox.o + +obj-$(CONFIG_XGENE_SLIMPRO_MBOX) += mailbox-xgene-slimpro.o
drivers/mailbox/mailbox-xgene-slimpro.c new file +264 -0
264 lines not on this page · raw message
Signature · 1 line
1.9.1
Jassi Brar
maintainerRe: [PATCH v3 1/3] mailbox: Add support for APM X-Gene platform mailbox driver
Quoted 6 lines · Duc Dang
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
[dhdang: rebase over 4.3-rc5, some minor changes to address comment in v2 patch set]
Do you want this to go into git logs?
Quoted 3 lines
Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>---
here is the right place for any history. And it is good practice to specify whatever changes were made from last revision.
drivers/mailbox/mailbox-xgene-slimpro.c line 51
Quoted 7 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +6
-0+ +struct slimpro_mbox_chan { +struct device *dev; +struct mbox_chan *chan; +void __iomem *reg; +int id;
You don't seem to really need 'id'.
Quoted 7 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +7
-0+ +static void mb_chan_enable_int (struct slimpro_mbox_chan *mb_chan,u32 mask) +{ +u32 val =readl (mb_chan->reg +REG_DB_STATMASK ); + + val &= ~mask; +writel (val, mb_chan->reg +REG_DB_STATMASK );
drivers/mailbox/mailbox-xgene-slimpro.c line 91
Quoted 10 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +10
-0+} + +static void mb_chan_disable_int (struct slimpro_mbox_chan *mb_chan,u32 mask) +{ +u32 val =readl (mb_chan->reg +REG_DB_STATMASK ); + + val |= mask; +writel (val, mb_chan->reg +REG_DB_STATMASK ); +} +
These 2 functions are called just once. And do what other drivers usually inline. Wouldn't it be better to directly set & clear the bit when needed?
drivers/mailbox/mailbox-xgene-slimpro.c line 132
Quoted 5 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +5
-0+static int slimpro_mbox_send_data (struct mbox_chan *chan,void *msg) +{ +struct slimpro_mbox_chan *mb_chan = + (struct slimpro_mbox_chan *)chan->con_priv; +
You don't need to typecast a void pointer. Here and elsewhere.
drivers/mailbox/mailbox-xgene-slimpro.c line 196
Quoted 5 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +4
-0+ +/* Setup mailbox links */ +for (i =0 ; i <MBOX_CNT ; i++) { + ctx->mc[i].irq =platform_get_irq (pdev, i);
You expect every platform to provide exactly 'MBOX_CNT' irqs and they must be different (because you don't 'SHARE' when you request). Usually developers relax either of the conditions.
drivers/mailbox/mailbox-xgene-slimpro.c line 255
Quoted 7 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +6
-0+static struct platform_driver slimpro_mbox_driver = { + .probe = slimpro_mbox_probe, + .remove = slimpro_mbox_remove, + .driver = { + .name ="xgene-slimpro-mbox" , + .owner =THIS_MODULE ,
No need to set .owner.
Cheers.
Re: [PATCH v3 1/3] mailbox: Add support for APM X-Gene platform mailbox driver
Quoted 8 lines · Jassi Brar
Quoted 6 lines · Duc Dang
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
[dhdang: rebase over 4.3-rc5, some minor changes to address comment in v2 patch set]
Do you want this to go into git logs?
Yes.
I will also rebase the patch set to v4.4-rc1.
Quoted 6 lines
Quoted 4 lines
Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>---
here is the right place for any history. And it is good practice to specify whatever changes were made from last revision.
I will add change log into this section in next version of the patch.
Quoted 10 lines
drivers/mailbox/mailbox-xgene-slimpro.c line 51
Quoted 9 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +6
-0+ +struct slimpro_mbox_chan { +struct device *dev; +struct mbox_chan *chan; +void __iomem *reg; +int id;You don't seem to really need 'id'.
I will remove 'id'.
Quoted 14 lines
Quoted 14 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +12
-0+ +static void mb_chan_enable_int (struct slimpro_mbox_chan *mb_chan,u32 mask) +{ +u32 val =readl (mb_chan->reg +REG_DB_STATMASK ); + + val &= ~mask; +writel (val, mb_chan->reg +REG_DB_STATMASK ); +} + +static void mb_chan_disable_int (struct slimpro_mbox_chan *mb_chan,u32 mask) +{ +u32 val =readl (mb_chan->reg +REG_DB_STATMASK );
Quoted 8 lines
drivers/mailbox/mailbox-xgene-slimpro.c line 91
Quoted 5 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +5
-0+ + val |= mask; +writel (val, mb_chan->reg +REG_DB_STATMASK ); +} +These 2 functions are called just once. And do what other drivers usually inline. Wouldn't it be better to directly set & clear the bit when needed?
I will fold these 2 functions into their callers and then get rid of them.
Quoted 7 lines
drivers/mailbox/mailbox-xgene-slimpro.c line 132
Quoted 6 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +5
-0+static int slimpro_mbox_send_data (struct mbox_chan *chan,void *msg) +{ +struct slimpro_mbox_chan *mb_chan = + (struct slimpro_mbox_chan *)chan->con_priv; +You don't need to typecast a void pointer. Here and elsewhere.
I will remove all the typecast of a void pointer in the driver.
Quoted 10 lines
drivers/mailbox/mailbox-xgene-slimpro.c line 196
Quoted 7 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +4
-0+ +/* Setup mailbox links */ +for (i =0 ; i <MBOX_CNT ; i++) { + ctx->mc[i].irq =platform_get_irq (pdev, i);You expect every platform to provide exactly '
MBOX_CNT' irqs and they must be different (because you don't 'SHARE' when you request). Usually developers relax either of the conditions.
I will relax the MBOX_CNT irqs restriction: Platform can provide less than MBOX_CNT irqs, which also means less than MBOX_CNT mailbox channels.
Quoted 10 lines
drivers/mailbox/mailbox-xgene-slimpro.c line 255
Quoted 9 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +6
-0+static struct platform_driver slimpro_mbox_driver = { + .probe = slimpro_mbox_probe, + .remove = slimpro_mbox_remove, + .driver = { + .name ="xgene-slimpro-mbox" , + .owner =THIS_MODULE ,No need to set .owner.
I will remove it.
Quoted 2 lines
Cheers.
Regards,
Duc Dang.
v4 cover mailbox: Add APM X-Gene platform mailbox driver
In reply to Jassi BrarAPM X-Gene SoC has a mailbox controller that provides communication mechanism for X-Gene Arm64 cores to communicate with X-Gene SoC's Cortex M3 (SLIMpro) processor.
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Changes since v3:
- Rebase over v4.4
- Remove 'id' in slimpro_mbox_chan structure
- Remove functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Fix error and address comment in documentation (xgene-slimpro-mailbox.txt)
Changes since v2:
- Rebase Feng's patch set over v4.3-rc5
- Remove uneccessary 'inline' in function definition
- Use module_platform_driver instead of subsys_initcall
- Minor coding stype clean up
Changes since v1:
- Add ACPI support
- Use defines for reg offset
Duc Dang (3):
mailbox: Add support for APM X-Gene platform mailbox driver
Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts
documentation
arm64: dts: mailbox device tree node for APM X-Gene platform.
.../bindings/mailbox/xgene-slimpro-mailbox.txt | 35 +++ arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 ++ drivers/mailbox/Kconfig | 9 + drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 265 +++++++++++++++++++++ 5 files changed, 325 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c
Signature · 1 line
1.9.1
PATCH v4 1/3 mailbox: Add support for APM X-Gene platform mailbox driver
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
---
Changes since v3:
- Rebase over v4.4
- Remove 'id' in slimpro_mbox_chan structure
- Remove small functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Use subsys_initcall to guarantee mailbox driver will be registered before any other dependent driver is loaded.
drivers/mailbox/Kconfig | 9 ++ drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 265 ++++++++++++++++++++++++++++++++ 3 files changed, 276 insertions(+) create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c
drivers/mailbox/Kconfig +9 -0
@@ -85,4 +85,13 @@ config MAILBOX_TEST Test client to help with testing new Controller driver implementations. +config XGENE_SLIMPRO_MBOX + tristate "APM SoC X-Gene SLIMpro Mailbox Controller" + depends on ARCH_XGENE + help + An implementation of the APM X-Gene Interprocessor Communication + Mailbox (IPCM) between the ARM 64-bit cores and SLIMpro controller. + It is used to send short messages between ARM64-bit cores and + the SLIMpro Management Engine, primarily for PM. Say Y here if you + want to use the APM X-Gene SLIMpro IPCM support. endif
drivers/mailbox/Makefile +2 -0
@@ -17,3 +17,5 @@ obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o obj-$(CONFIG_BCM2835_MBOX) += bcm2835-mailbox.o obj-$(CONFIG_STI_MBOX) += mailbox-sti.o + +obj-$(CONFIG_XGENE_SLIMPRO_MBOX) += mailbox-xgene-slimpro.o
drivers/mailbox/mailbox-xgene-slimpro.c new file +265 -0
265 lines not on this page · raw message
Signature · 1 line
1.9.1
kbuild test robot
build botRe: [PATCH v4 1/3] mailbox: Add support for APM X-Gene platform mailbox driver
reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree…
Hi Duc,
[auto build test WARNING on robh/for-next]
[also build test WARNING on v4.4 next-20160115]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]
url: https://github.com/0day-ci/linux/commits/Duc-Dang/mailbox-Add-support-for-APM-X-Gene-platform-mailbox-driver/20160116-110535 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux for-next config: arm64-allyesconfig (attached as .config)
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=arm64
All warnings (new ones prefixed by >>):
>> WARNING: vmlinux.o(.data+0xfd6260): Section mismatch in reference from the variable slimpro_mbox_driver to the variable .init.text:$x
The variable slimpro_mbox_driver references
the variable __init $x
If the reference is valid then annotate the
variable with or __refdata (see linux/init.h) or name the variable:
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/octet-stream
Size: 46958 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160116/c613e700/attachment-0001.obj>
Re: [PATCH v4 1/3] mailbox: Add support for APM X-Gene platform mailbox driver
Quoted 15 lines · kbuild test robot
Hi Duc,
[auto build test WARNING on robh/for-next]
[also build test WARNING on v4.4 next-20160115]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]url: https://github.com/0day-ci/linux/commits/Duc-Dang/mailbox-Add-support-for-APM-X-Gene-platform-mailbox-driver/20160116-110535 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux for-next config: arm64-allyesconfig (attached as .config)reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=arm64
Quoted 7 lines
All warnings (new ones prefixed by >>):
Quoted 1 line
Quoted 1 line
WARNING:
vmlinux.o(.data+0xfd6260): Section mismatch in reference from the variableslimpro_mbox_driverto the variable .init.text:$xThe variable
slimpro_mbox_driverreferences
the variable__init$x
If the reference is valid then annotate the
variable with or__refdata(seelinux/init.h) or name the variable:
I fixed the build warning, will post and updated after further comment from Jassi.
I did not catch it before posting my patch because I did not compile with CONFIG_DEBUG_SECTION_MISMATCH=y. I will make sure I have this option enabled for my build process going forward.
Regards,
Duc Dang.
Quoted 5 lines
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Re: [PATCH v4 1/3] mailbox: Add support for APM X-Gene platform mailbox driver
In reply to Duc DangHi Jassi,
Quoted 2 lines · Duc Dang
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Did you have a chance to look into this version 4 of my mail-box patch?
Regards,
Duc Dang.
Quoted 323 lines
Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>---
Changes since v3:
- Rebase over v4.4
- Remove 'id' inslimpro_mbox_chanstructure
- Remove small functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Usesubsys_initcallto guarantee mailbox driver will be registered before any other dependent driver is loaded.drivers/mailbox/Kconfig | 9 ++ drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 265 ++++++++++++++++++++++++++++++++ 3 files changed, 276 insertions(+) create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.cdrivers/mailbox/Kconfig +9
-0@@ -85,4 +85,13 @@ config MAILBOX_TEST Test client to help with testing new Controller driver implementations. +config XGENE_SLIMPRO_MBOX + tristate "APM SoC X-Gene SLIMpro Mailbox Controller" + depends on ARCH_XGENE + help + An implementation of the APM X-Gene Interprocessor Communication + Mailbox (IPCM) between the ARM 64-bit cores and SLIMpro controller. + It is used to send short messages between ARM64-bit cores and + the SLIMpro Management Engine, primarily for PM. Say Y here if you + want to use the APM X-Gene SLIMpro IPCM support. endifdrivers/mailbox/Makefile +2
-0@@ -17,3 +17,5 @@ obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o obj-$(CONFIG_BCM2835_MBOX) += bcm2835-mailbox.o obj-$(CONFIG_STI_MBOX) += mailbox-sti.o + +obj-$(CONFIG_XGENE_SLIMPRO_MBOX) += mailbox-xgene-slimpro.odrivers/mailbox/mailbox-xgene-slimpro.c new file +265
-1@@ -0,0 +1,265 @@ +/* +* APM X-Gene SLIMpro MailBox Driver +* +* Copyright (c) 2015, Applied Micro Circuits Corporation +* Author: Feng Kan fkan at apm.com +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, see <http://www.gnu.org/licenses/>. +* +*/ +#include <linux/acpi.h> +#include <linux/delay.h> +#include <linux/interrupt.h> +#include <linux/io.h> +#include <linux/mailbox_controller.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/platform_device.h> +#include <linux/spinlock.h> + +#define MBOX_CON_NAME "slimpro-mbox" +#define MBOX_REG_SET_OFFSET 0x1000 +#define MBOX_CNT 8 +#define MBOX_STATUS_AVAIL_MASK BIT(16) +#define MBOX_STATUS_ACK_MASK BIT(0) + +/* Configuration and Status Registers */ +#define REG_DB_IN 0x00 +#define REG_DB_DIN0 0x04 +#define REG_DB_DIN1 0x08 +#define REG_DB_OUT 0x10 +#define REG_DB_DOUT0 0x14 +#define REG_DB_DOUT1 0x18 +#define REG_DB_STAT 0x20 +#define REG_DB_STATMASK 0x24 + +struct slimpro_mbox_chan { +struct device *dev; +struct mbox_chan *chan; +void __iomem *reg; +int irq; +u32 rx_msg[3 ]; +}; + +struct slimpro_mbox { +struct mbox_controller mb_ctrl; +struct slimpro_mbox_chan mc[MBOX_CNT ]; +struct mbox_chan chans[MBOX_CNT ]; +}; + +static void mb_chan_send_msg (struct slimpro_mbox_chan *mb_chan,u32 *msg) +{ +writel (msg[1 ], mb_chan->reg +REG_DB_DOUT0 ); +writel (msg[2 ], mb_chan->reg +REG_DB_DOUT1 ); +writel (msg[0 ], mb_chan->reg +REG_DB_OUT ); +} + +static void mb_chan_recv_msg (struct slimpro_mbox_chan *mb_chan) +{ + mb_chan->rx_msg[1 ] =readl (mb_chan->reg +REG_DB_DIN0 ); + mb_chan->rx_msg[2 ] =readl (mb_chan->reg +REG_DB_DIN1 ); + mb_chan->rx_msg[0 ] =readl (mb_chan->reg +REG_DB_IN ); +} + +static int mb_chan_status_ack (struct slimpro_mbox_chan *mb_chan) +{ +u32 val =readl (mb_chan->reg +REG_DB_STAT ); + +if (val &MBOX_STATUS_ACK_MASK ) { +writel (MBOX_STATUS_ACK_MASK , mb_chan->reg +REG_DB_STAT ); +return 1 ; + } +return 0 ; +} + +static int mb_chan_status_avail (struct slimpro_mbox_chan *mb_chan) +{ +u32 val =readl (mb_chan->reg +REG_DB_STAT ); + +if (val &MBOX_STATUS_AVAIL_MASK ) { +mb_chan_recv_msg (mb_chan); +writel (MBOX_STATUS_AVAIL_MASK , mb_chan->reg +REG_DB_STAT ); +return 1 ; + } +return 0 ; +} + +static irqreturn_t slimpro_mbox_irq (int irq,void *id) +{ +struct slimpro_mbox_chan *mb_chan = id; + +if (mb_chan_status_ack (mb_chan)) +mbox_chan_txdone (mb_chan->chan,0 ); + +if (mb_chan_status_avail (mb_chan)) +mbox_chan_received_data (mb_chan->chan, mb_chan->rx_msg); + +return IRQ_HANDLED ; +} + +static int slimpro_mbox_send_data (struct mbox_chan *chan,void *msg) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; + +mb_chan_send_msg (mb_chan, msg); +return 0 ; +} + +static int slimpro_mbox_startup (struct mbox_chan *chan) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; +int rc; +u32 val; + + rc =devm_request_irq (mb_chan->dev, mb_chan->irq, slimpro_mbox_irq,0 , +MBOX_CON_NAME , mb_chan); +if (unlikely (rc)) { +dev_err (mb_chan->dev,"failed to register mailbox interrupt %d\n" , + mb_chan->irq); +return rc; + } + +/* Enable HW interrupt */ +writel (MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK , + mb_chan->reg +REG_DB_STAT ); +/* Unmask doorbell status interrupt */ + val =readl (mb_chan->reg +REG_DB_STATMASK ); + val &= ~(MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK ); +writel (val, mb_chan->reg +REG_DB_STATMASK ); + +return 0 ; +} + +static void slimpro_mbox_shutdown (struct mbox_chan *chan) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; +u32 val; + +/* Mask doorbell status interrupt */ + val =readl (mb_chan->reg +REG_DB_STATMASK ); + val |= (MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK ); +writel (val, mb_chan->reg +REG_DB_STATMASK ); + +devm_free_irq (mb_chan->dev, mb_chan->irq, mb_chan); +} + +static struct mbox_chan_ops slimpro_mbox_ops = { + .send_data = slimpro_mbox_send_data, + .startup = slimpro_mbox_startup, + .shutdown = slimpro_mbox_shutdown, +}; + +static int __init slimpro_mbox_probe (struct platform_device *pdev) +{ +struct slimpro_mbox *ctx; +struct resource *regs; +void __iomem *mb_base; +int rc; +int i; + + ctx =devm_kzalloc (&pdev->dev,sizeof (struct slimpro_mbox ),GFP_KERNEL ); +if (IS_ERR (ctx)) +return PTR_ERR (ctx); + +platform_set_drvdata (pdev, ctx); + + regs =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + mb_base =devm_ioremap (&pdev->dev, regs->start,resource_size (regs)); +if (IS_ERR (mb_base)) +return PTR_ERR (mb_base); + +/* Setup mailbox links */ +for (i =0 ; i <MBOX_CNT ; i++) { + ctx->mc[i].irq =platform_get_irq (pdev, i); +if (ctx->mc[i].irq <0 ) { +if (i ==0 ) { +dev_err (&pdev->dev,"no available IRQ\n" ); +return -EINVAL ; + } +dev_info (&pdev->dev,"no IRQ at index %d\n" , + ctx->mc[i].irq); +break ; + } + + ctx->mc[i].dev = &pdev->dev; + ctx->mc[i].reg = mb_base + i *MBOX_REG_SET_OFFSET ; + ctx->mc[i].chan = &ctx->chans[i]; + ctx->chans[i].con_priv = &ctx->mc[i]; + } + +/* Setup mailbox controller */ + ctx->mb_ctrl.dev = &pdev->dev; + ctx->mb_ctrl.chans = ctx->chans; + ctx->mb_ctrl.txdone_irq = true; + ctx->mb_ctrl.ops = &slimpro_mbox_ops; + ctx->mb_ctrl.num_chans = i; + + rc =mbox_controller_register (&ctx->mb_ctrl); +if (rc) { +dev_err (&pdev->dev, +"APM X-Gene SLIMpro MailBox register failed:%d\n" , rc); +return rc; + } + +dev_info (&pdev->dev,"APM X-Gene SLIMpro MailBox registered\n" ); +return 0 ; +} + +static int slimpro_mbox_remove (struct platform_device *pdev) +{ +struct slimpro_mbox *smb =platform_get_drvdata (pdev); + +mbox_controller_unregister (&smb->mb_ctrl); +return 0 ; +} + +static const struct of_device_id slimpro_of_match[] = { + {.compatible ="apm,xgene-slimpro-mbox" }, + { }, +}; +MODULE_DEVICE_TABLE (of, slimpro_of_match); + +#ifdef CONFIG_ACPI +static const struct acpi_device_id slimpro_acpi_ids[] = { + {"APMC0D01" ,0 }, + {} +}; +MODULE_DEVICE_TABLE (acpi, slimpro_acpi_ids); +#endif + +static struct platform_driver slimpro_mbox_driver = { + .probe = slimpro_mbox_probe, + .remove = slimpro_mbox_remove, + .driver = { + .name ="xgene-slimpro-mbox" , + .of_match_table =of_match_ptr (slimpro_of_match), + .acpi_match_table =ACPI_PTR (slimpro_acpi_ids) + }, +}; + +static int __init slimpro_mbox_init (void ) +{ +return platform_driver_register (&slimpro_mbox_driver); +} + +static void __exit slimpro_mbox_exit(void) +{ +platform_driver_unregister (&slimpro_mbox_driver); +} + +subsys_initcall (slimpro_mbox_init); +module_exit (slimpro_mbox_exit); + +MODULE_DESCRIPTION ("APM X-Gene SLIMpro Mailbox Driver" ); +MODULE_LICENSE ("GPL" ); --1.9.1
Jassi Brar
maintainerRe: [PATCH v4 1/3] mailbox: Add support for APM X-Gene platform mailbox driver
Quoted 8 lines · Duc Dang
Hi Jassi,
Quoted 2 lines · Duc Dang
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Did you have a chance to look into this version 4 of my mail-box patch?
Seems ok, please just fix the "section mismatch" warnings reported by the build-bot.
Thanks
v5 cover mailbox: Add APM X-Gene platform mailbox driver
APM X-Gene SoC has a mailbox controller that provides communication mechanism for X-Gene Arm64 cores to communicate with X-Gene SoC's Cortex M3 (SLIMpro) processor.
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Changes since v4:
- Rebase over v4.5-rc1
- Fix section mismatch warning during compiling
- Correctly print channel number when there is no IRQ for that channel
- Change node name to mailbox at 10540000
- Correct the number of IRQs in documentation
Changes since v3:
- Rebase over v4.4
- Remove 'id' in slimpro_mbox_chan structure
- Remove functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Fix error and address comment in documentation (xgene-slimpro-mailbox.txt)
Changes since v2:
- Rebase Feng's patch set over v4.3-rc5
- Remove uneccessary 'inline' in function definition
- Use module_platform_driver instead of subsys_initcall
- Minor coding stype clean up
Changes since v1:
- Add ACPI support
- Use defines for reg offset
Duc Dang (3):
mailbox: Add support for APM X-Gene platform mailbox driver
Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts
documentation
arm64: dts: mailbox device tree node for APM X-Gene platform.
.../bindings/mailbox/xgene-slimpro-mailbox.txt | 35 +++ arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 ++ drivers/mailbox/Kconfig | 9 + drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 264 +++++++++++++++++++++ 5 files changed, 324 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c
Signature · 1 line
1.9.1
PATCH v5 1/3 mailbox: Add support for APM X-Gene platform mailbox driver
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
---
Changes since v4:
- Rebase over v4.5-rc1
- Fix section mistmatch warning by removing __init in slimpro_mbox_probe declaration
- Correctly print channel number when there is no IRQ for that channel
Changes since v3:
- Rebase over v4.4
- Remove 'id' in slimpro_mbox_chan structure
- Remove small functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Use subsys_initcall to guarantee mailbox driver will be registered before any other dependent driver is loaded.
drivers/mailbox/Kconfig | 9 ++ drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 264 ++++++++++++++++++++++++++++++++ 3 files changed, 275 insertions(+) create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c
drivers/mailbox/Kconfig +9 -0
@@ -85,4 +85,13 @@ config MAILBOX_TEST Test client to help with testing new Controller driver implementations. +config XGENE_SLIMPRO_MBOX + tristate "APM SoC X-Gene SLIMpro Mailbox Controller" + depends on ARCH_XGENE + help + An implementation of the APM X-Gene Interprocessor Communication + Mailbox (IPCM) between the ARM 64-bit cores and SLIMpro controller. + It is used to send short messages between ARM64-bit cores and + the SLIMpro Management Engine, primarily for PM. Say Y here if you + want to use the APM X-Gene SLIMpro IPCM support. endif
drivers/mailbox/Makefile +2 -0
@@ -17,3 +17,5 @@ obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o obj-$(CONFIG_BCM2835_MBOX) += bcm2835-mailbox.o obj-$(CONFIG_STI_MBOX) += mailbox-sti.o + +obj-$(CONFIG_XGENE_SLIMPRO_MBOX) += mailbox-xgene-slimpro.o
drivers/mailbox/mailbox-xgene-slimpro.c new file +264 -0
264 lines not on this page · raw message
Signature · 1 line
1.9.1
Re: [PATCH v5 1/3] mailbox: Add support for APM X-Gene platform mailbox driver
Quoted 113 lines · Duc Dang
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>---
Changes since v4:
- Rebase over v4.5-rc1
- Fix section mistmatch warning by removing__initinslimpro_mbox_probedeclaration
- Correctly print channel number when there is no IRQ for that channelChanges since v3:
- Rebase over v4.4
- Remove 'id' inslimpro_mbox_chanstructure
- Remove small functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Usesubsys_initcallto guarantee mailbox driver will be registered before any other dependent driver is loaded.drivers/mailbox/Kconfig | 9 ++ drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 264 ++++++++++++++++++++++++++++++++ 3 files changed, 275 insertions(+) create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.cdrivers/mailbox/Kconfig +9
-0@@ -85,4 +85,13 @@ config MAILBOX_TEST Test client to help with testing new Controller driver implementations. +config XGENE_SLIMPRO_MBOX + tristate "APM SoC X-Gene SLIMpro Mailbox Controller" + depends on ARCH_XGENE + help + An implementation of the APM X-Gene Interprocessor Communication + Mailbox (IPCM) between the ARM 64-bit cores and SLIMpro controller. + It is used to send short messages between ARM64-bit cores and + the SLIMpro Management Engine, primarily for PM. Say Y here if you + want to use the APM X-Gene SLIMpro IPCM support. endifdrivers/mailbox/Makefile +2
-0@@ -17,3 +17,5 @@ obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o obj-$(CONFIG_BCM2835_MBOX) += bcm2835-mailbox.o obj-$(CONFIG_STI_MBOX) += mailbox-sti.o + +obj-$(CONFIG_XGENE_SLIMPRO_MBOX) += mailbox-xgene-slimpro.odrivers/mailbox/mailbox-xgene-slimpro.c new file +49
-0@@ -0,0 +1,264 @@ +/* +* APM X-Gene SLIMpro MailBox Driver +* +* Copyright (c) 2015, Applied Micro Circuits Corporation +* Author: Feng Kan fkan at apm.com +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, see <http://www.gnu.org/licenses/>. +* +*/ +#include <linux/acpi.h> +#include <linux/delay.h> +#include <linux/interrupt.h> +#include <linux/io.h> +#include <linux/mailbox_controller.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/platform_device.h> +#include <linux/spinlock.h> + +#define MBOX_CON_NAME "slimpro-mbox" +#define MBOX_REG_SET_OFFSET 0x1000 +#define MBOX_CNT 8 +#define MBOX_STATUS_AVAIL_MASK BIT(16) +#define MBOX_STATUS_ACK_MASK BIT(0) + +/* Configuration and Status Registers */ +#define REG_DB_IN 0x00 +#define REG_DB_DIN0 0x04 +#define REG_DB_DIN1 0x08 +#define REG_DB_OUT 0x10 +#define REG_DB_DOUT0 0x14 +#define REG_DB_DOUT1 0x18 +#define REG_DB_STAT 0x20 +#define REG_DB_STATMASK 0x24 + +struct slimpro_mbox_chan { +struct device *dev; +struct mbox_chan *chan;
drivers/mailbox/mailbox-xgene-slimpro.c line 59
Quoted 10 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +10
-0+void __iomem *reg; +int irq; +u32 rx_msg[3 ]; +}; + +struct slimpro_mbox { +struct mbox_controller mb_ctrl; +struct slimpro_mbox_chan mc[MBOX_CNT ]; +struct mbox_chan chans[MBOX_CNT ]; +};
The above two structure declaration could use kernel style documentation.
Quoted 4 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +4
-0+ +static void mb_chan_send_msg (struct slimpro_mbox_chan *mb_chan,u32 *msg) +{ +writel (msg[1 ], mb_chan->reg +REG_DB_DOUT0 );
drivers/mailbox/mailbox-xgene-slimpro.c line 73
Quoted 10 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +10
-0+writel (msg[2 ], mb_chan->reg +REG_DB_DOUT1 ); +writel (msg[0 ], mb_chan->reg +REG_DB_OUT ); +} + +static void mb_chan_recv_msg (struct slimpro_mbox_chan *mb_chan) +{ + mb_chan->rx_msg[1 ] =readl (mb_chan->reg +REG_DB_DIN0 ); + mb_chan->rx_msg[2 ] =readl (mb_chan->reg +REG_DB_DIN1 ); + mb_chan->rx_msg[0 ] =readl (mb_chan->reg +REG_DB_IN ); +}
Is there a requirement that operations in the above two functions be ordered? If not significant gains could be achieved by using writel/readl_relaxed(). Same comment for the rest of this driver.
Thanks,
Mathieu
Quoted 194 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +191
-1+ +static int mb_chan_status_ack (struct slimpro_mbox_chan *mb_chan) +{ +u32 val =readl (mb_chan->reg +REG_DB_STAT ); + +if (val &MBOX_STATUS_ACK_MASK ) { +writel (MBOX_STATUS_ACK_MASK , mb_chan->reg +REG_DB_STAT ); +return 1 ; + } +return 0 ; +} + +static int mb_chan_status_avail (struct slimpro_mbox_chan *mb_chan) +{ +u32 val =readl (mb_chan->reg +REG_DB_STAT ); + +if (val &MBOX_STATUS_AVAIL_MASK ) { +mb_chan_recv_msg (mb_chan); +writel (MBOX_STATUS_AVAIL_MASK , mb_chan->reg +REG_DB_STAT ); +return 1 ; + } +return 0 ; +} + +static irqreturn_t slimpro_mbox_irq (int irq,void *id) +{ +struct slimpro_mbox_chan *mb_chan = id; + +if (mb_chan_status_ack (mb_chan)) +mbox_chan_txdone (mb_chan->chan,0 ); + +if (mb_chan_status_avail (mb_chan)) +mbox_chan_received_data (mb_chan->chan, mb_chan->rx_msg); + +return IRQ_HANDLED ; +} + +static int slimpro_mbox_send_data (struct mbox_chan *chan,void *msg) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; + +mb_chan_send_msg (mb_chan, msg); +return 0 ; +} + +static int slimpro_mbox_startup (struct mbox_chan *chan) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; +int rc; +u32 val; + + rc =devm_request_irq (mb_chan->dev, mb_chan->irq, slimpro_mbox_irq,0 , +MBOX_CON_NAME , mb_chan); +if (unlikely (rc)) { +dev_err (mb_chan->dev,"failed to register mailbox interrupt %d\n" , + mb_chan->irq); +return rc; + } + +/* Enable HW interrupt */ +writel (MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK , + mb_chan->reg +REG_DB_STAT ); +/* Unmask doorbell status interrupt */ + val =readl (mb_chan->reg +REG_DB_STATMASK ); + val &= ~(MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK ); +writel (val, mb_chan->reg +REG_DB_STATMASK ); + +return 0 ; +} + +static void slimpro_mbox_shutdown (struct mbox_chan *chan) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; +u32 val; + +/* Mask doorbell status interrupt */ + val =readl (mb_chan->reg +REG_DB_STATMASK ); + val |= (MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK ); +writel (val, mb_chan->reg +REG_DB_STATMASK ); + +devm_free_irq (mb_chan->dev, mb_chan->irq, mb_chan); +} + +static struct mbox_chan_ops slimpro_mbox_ops = { + .send_data = slimpro_mbox_send_data, + .startup = slimpro_mbox_startup, + .shutdown = slimpro_mbox_shutdown, +}; + +static int slimpro_mbox_probe (struct platform_device *pdev) +{ +struct slimpro_mbox *ctx; +struct resource *regs; +void __iomem *mb_base; +int rc; +int i; + + ctx =devm_kzalloc (&pdev->dev,sizeof (struct slimpro_mbox ),GFP_KERNEL ); +if (IS_ERR (ctx)) +return PTR_ERR (ctx); + +platform_set_drvdata (pdev, ctx); + + regs =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + mb_base =devm_ioremap (&pdev->dev, regs->start,resource_size (regs)); +if (IS_ERR (mb_base)) +return PTR_ERR (mb_base); + +/* Setup mailbox links */ +for (i =0 ; i <MBOX_CNT ; i++) { + ctx->mc[i].irq =platform_get_irq (pdev, i); +if (ctx->mc[i].irq <0 ) { +if (i ==0 ) { +dev_err (&pdev->dev,"no available IRQ\n" ); +return -EINVAL ; + } +dev_info (&pdev->dev,"no IRQ for channel %d\n" , i); +break ; + } + + ctx->mc[i].dev = &pdev->dev; + ctx->mc[i].reg = mb_base + i *MBOX_REG_SET_OFFSET ; + ctx->mc[i].chan = &ctx->chans[i]; + ctx->chans[i].con_priv = &ctx->mc[i]; + } + +/* Setup mailbox controller */ + ctx->mb_ctrl.dev = &pdev->dev; + ctx->mb_ctrl.chans = ctx->chans; + ctx->mb_ctrl.txdone_irq = true; + ctx->mb_ctrl.ops = &slimpro_mbox_ops; + ctx->mb_ctrl.num_chans = i; + + rc =mbox_controller_register (&ctx->mb_ctrl); +if (rc) { +dev_err (&pdev->dev, +"APM X-Gene SLIMpro MailBox register failed:%d\n" , rc); +return rc; + } + +dev_info (&pdev->dev,"APM X-Gene SLIMpro MailBox registered\n" ); +return 0 ; +} + +static int slimpro_mbox_remove (struct platform_device *pdev) +{ +struct slimpro_mbox *smb =platform_get_drvdata (pdev); + +mbox_controller_unregister (&smb->mb_ctrl); +return 0 ; +} + +static const struct of_device_id slimpro_of_match[] = { + {.compatible ="apm,xgene-slimpro-mbox" }, + { }, +}; +MODULE_DEVICE_TABLE (of, slimpro_of_match); + +#ifdef CONFIG_ACPI +static const struct acpi_device_id slimpro_acpi_ids[] = { + {"APMC0D01" ,0 }, + {} +}; +MODULE_DEVICE_TABLE (acpi, slimpro_acpi_ids); +#endif + +static struct platform_driver slimpro_mbox_driver = { + .probe = slimpro_mbox_probe, + .remove = slimpro_mbox_remove, + .driver = { + .name ="xgene-slimpro-mbox" , + .of_match_table =of_match_ptr (slimpro_of_match), + .acpi_match_table =ACPI_PTR (slimpro_acpi_ids) + }, +}; + +static int __init slimpro_mbox_init (void ) +{ +return platform_driver_register (&slimpro_mbox_driver); +} + +static void __exit slimpro_mbox_exit(void) +{ +platform_driver_unregister (&slimpro_mbox_driver); +} + +subsys_initcall (slimpro_mbox_init); +module_exit (slimpro_mbox_exit); + +MODULE_DESCRIPTION ("APM X-Gene SLIMpro Mailbox Driver" ); +MODULE_LICENSE ("GPL" ); --1.9.1
Re: [PATCH v5 1/3] mailbox: Add support for APM X-Gene platform mailbox driver
Quoted 118 lines · Mathieu Poirier
Quoted 117 lines · Duc Dang
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>---
Changes since v4:
- Rebase over v4.5-rc1
- Fix section mistmatch warning by removing__initinslimpro_mbox_probedeclaration
- Correctly print channel number when there is no IRQ for that channelChanges since v3:
- Rebase over v4.4
- Remove 'id' inslimpro_mbox_chanstructure
- Remove small functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Usesubsys_initcallto guarantee mailbox driver will be registered before any other dependent driver is loaded.drivers/mailbox/Kconfig | 9 ++ drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 264 ++++++++++++++++++++++++++++++++ 3 files changed, 275 insertions(+) create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.cdrivers/mailbox/Kconfig +9
-0@@ -85,4 +85,13 @@ config MAILBOX_TEST Test client to help with testing new Controller driver implementations. +config XGENE_SLIMPRO_MBOX + tristate "APM SoC X-Gene SLIMpro Mailbox Controller" + depends on ARCH_XGENE + help + An implementation of the APM X-Gene Interprocessor Communication + Mailbox (IPCM) between the ARM 64-bit cores and SLIMpro controller. + It is used to send short messages between ARM64-bit cores and + the SLIMpro Management Engine, primarily for PM. Say Y here if you + want to use the APM X-Gene SLIMpro IPCM support. endifdrivers/mailbox/Makefile +2
-0@@ -17,3 +17,5 @@ obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o obj-$(CONFIG_BCM2835_MBOX) += bcm2835-mailbox.o obj-$(CONFIG_STI_MBOX) += mailbox-sti.o + +obj-$(CONFIG_XGENE_SLIMPRO_MBOX) += mailbox-xgene-slimpro.odrivers/mailbox/mailbox-xgene-slimpro.c new file +53
-0@@ -0,0 +1,264 @@ +/* +* APM X-Gene SLIMpro MailBox Driver +* +* Copyright (c) 2015, Applied Micro Circuits Corporation +* Author: Feng Kan fkan at apm.com +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, see <http://www.gnu.org/licenses/>. +* +*/ +#include <linux/acpi.h> +#include <linux/delay.h> +#include <linux/interrupt.h> +#include <linux/io.h> +#include <linux/mailbox_controller.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/platform_device.h> +#include <linux/spinlock.h> + +#define MBOX_CON_NAME "slimpro-mbox" +#define MBOX_REG_SET_OFFSET 0x1000 +#define MBOX_CNT 8 +#define MBOX_STATUS_AVAIL_MASK BIT(16) +#define MBOX_STATUS_ACK_MASK BIT(0) + +/* Configuration and Status Registers */ +#define REG_DB_IN 0x00 +#define REG_DB_DIN0 0x04 +#define REG_DB_DIN1 0x08 +#define REG_DB_OUT 0x10 +#define REG_DB_DOUT0 0x14 +#define REG_DB_DOUT1 0x18 +#define REG_DB_STAT 0x20 +#define REG_DB_STATMASK 0x24 + +struct slimpro_mbox_chan { +struct device *dev; +struct mbox_chan *chan; +void __iomem *reg; +int irq; +u32 rx_msg[3 ]; +};
Quoted 8 lines
drivers/mailbox/mailbox-xgene-slimpro.c line 59
Quoted 6 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +6
-0+ +struct slimpro_mbox { +struct mbox_controller mb_ctrl; +struct slimpro_mbox_chan mc[MBOX_CNT ]; +struct mbox_chan chans[MBOX_CNT ]; +};The above two structure declaration could use kernel style documentation.
Can you please clarify or give an example? I looked into several files in drivers/mailbox/ and drivers/irqchip but could not find what I need to tweak.
Quoted 11 lines
Quoted 11 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +10
-0+ +static void mb_chan_send_msg (struct slimpro_mbox_chan *mb_chan,u32 *msg) +{ +writel (msg[1 ], mb_chan->reg +REG_DB_DOUT0 ); +writel (msg[2 ], mb_chan->reg +REG_DB_DOUT1 ); +writel (msg[0 ], mb_chan->reg +REG_DB_OUT ); +} + +static void mb_chan_recv_msg (struct slimpro_mbox_chan *mb_chan) +{
Quoted 8 lines
drivers/mailbox/mailbox-xgene-slimpro.c line 73
Quoted 4 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +4
-0+ mb_chan->rx_msg[1 ] =readl (mb_chan->reg +REG_DB_DIN0 ); + mb_chan->rx_msg[2 ] =readl (mb_chan->reg +REG_DB_DIN1 ); + mb_chan->rx_msg[0 ] =readl (mb_chan->reg +REG_DB_IN ); +}Is there a requirement that operations in the above two functions be ordered? If not significant gains could be achieved by using writel/readl_relaxed(). Same comment for the rest of this driver.
The 'writes' need to be in order as writing to REG_DB_OUT will trigger interrupt, so I want the other 2 'writes' complete before it.
After the receiver get the message, it will clear door bell available interrupt request, this will also trigger a door bell acknowledge interrupt. So the 'read' to get the message and the 'write' to clear the door bell available interrupt must be in order as well.
Regards,
Duc Dang.
Quoted 198 lines
Thanks,
MathieuQuoted 194 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +191
-1+ +static int mb_chan_status_ack (struct slimpro_mbox_chan *mb_chan) +{ +u32 val =readl (mb_chan->reg +REG_DB_STAT ); + +if (val &MBOX_STATUS_ACK_MASK ) { +writel (MBOX_STATUS_ACK_MASK , mb_chan->reg +REG_DB_STAT ); +return 1 ; + } +return 0 ; +} + +static int mb_chan_status_avail (struct slimpro_mbox_chan *mb_chan) +{ +u32 val =readl (mb_chan->reg +REG_DB_STAT ); + +if (val &MBOX_STATUS_AVAIL_MASK ) { +mb_chan_recv_msg (mb_chan); +writel (MBOX_STATUS_AVAIL_MASK , mb_chan->reg +REG_DB_STAT ); +return 1 ; + } +return 0 ; +} + +static irqreturn_t slimpro_mbox_irq (int irq,void *id) +{ +struct slimpro_mbox_chan *mb_chan = id; + +if (mb_chan_status_ack (mb_chan)) +mbox_chan_txdone (mb_chan->chan,0 ); + +if (mb_chan_status_avail (mb_chan)) +mbox_chan_received_data (mb_chan->chan, mb_chan->rx_msg); + +return IRQ_HANDLED ; +} + +static int slimpro_mbox_send_data (struct mbox_chan *chan,void *msg) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; + +mb_chan_send_msg (mb_chan, msg); +return 0 ; +} + +static int slimpro_mbox_startup (struct mbox_chan *chan) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; +int rc; +u32 val; + + rc =devm_request_irq (mb_chan->dev, mb_chan->irq, slimpro_mbox_irq,0 , +MBOX_CON_NAME , mb_chan); +if (unlikely (rc)) { +dev_err (mb_chan->dev,"failed to register mailbox interrupt %d\n" , + mb_chan->irq); +return rc; + } + +/* Enable HW interrupt */ +writel (MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK , + mb_chan->reg +REG_DB_STAT ); +/* Unmask doorbell status interrupt */ + val =readl (mb_chan->reg +REG_DB_STATMASK ); + val &= ~(MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK ); +writel (val, mb_chan->reg +REG_DB_STATMASK ); + +return 0 ; +} + +static void slimpro_mbox_shutdown (struct mbox_chan *chan) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; +u32 val; + +/* Mask doorbell status interrupt */ + val =readl (mb_chan->reg +REG_DB_STATMASK ); + val |= (MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK ); +writel (val, mb_chan->reg +REG_DB_STATMASK ); + +devm_free_irq (mb_chan->dev, mb_chan->irq, mb_chan); +} + +static struct mbox_chan_ops slimpro_mbox_ops = { + .send_data = slimpro_mbox_send_data, + .startup = slimpro_mbox_startup, + .shutdown = slimpro_mbox_shutdown, +}; + +static int slimpro_mbox_probe (struct platform_device *pdev) +{ +struct slimpro_mbox *ctx; +struct resource *regs; +void __iomem *mb_base; +int rc; +int i; + + ctx =devm_kzalloc (&pdev->dev,sizeof (struct slimpro_mbox ),GFP_KERNEL ); +if (IS_ERR (ctx)) +return PTR_ERR (ctx); + +platform_set_drvdata (pdev, ctx); + + regs =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + mb_base =devm_ioremap (&pdev->dev, regs->start,resource_size (regs)); +if (IS_ERR (mb_base)) +return PTR_ERR (mb_base); + +/* Setup mailbox links */ +for (i =0 ; i <MBOX_CNT ; i++) { + ctx->mc[i].irq =platform_get_irq (pdev, i); +if (ctx->mc[i].irq <0 ) { +if (i ==0 ) { +dev_err (&pdev->dev,"no available IRQ\n" ); +return -EINVAL ; + } +dev_info (&pdev->dev,"no IRQ for channel %d\n" , i); +break ; + } + + ctx->mc[i].dev = &pdev->dev; + ctx->mc[i].reg = mb_base + i *MBOX_REG_SET_OFFSET ; + ctx->mc[i].chan = &ctx->chans[i]; + ctx->chans[i].con_priv = &ctx->mc[i]; + } + +/* Setup mailbox controller */ + ctx->mb_ctrl.dev = &pdev->dev; + ctx->mb_ctrl.chans = ctx->chans; + ctx->mb_ctrl.txdone_irq = true; + ctx->mb_ctrl.ops = &slimpro_mbox_ops; + ctx->mb_ctrl.num_chans = i; + + rc =mbox_controller_register (&ctx->mb_ctrl); +if (rc) { +dev_err (&pdev->dev, +"APM X-Gene SLIMpro MailBox register failed:%d\n" , rc); +return rc; + } + +dev_info (&pdev->dev,"APM X-Gene SLIMpro MailBox registered\n" ); +return 0 ; +} + +static int slimpro_mbox_remove (struct platform_device *pdev) +{ +struct slimpro_mbox *smb =platform_get_drvdata (pdev); + +mbox_controller_unregister (&smb->mb_ctrl); +return 0 ; +} + +static const struct of_device_id slimpro_of_match[] = { + {.compatible ="apm,xgene-slimpro-mbox" }, + { }, +}; +MODULE_DEVICE_TABLE (of, slimpro_of_match); + +#ifdef CONFIG_ACPI +static const struct acpi_device_id slimpro_acpi_ids[] = { + {"APMC0D01" ,0 }, + {} +}; +MODULE_DEVICE_TABLE (acpi, slimpro_acpi_ids); +#endif + +static struct platform_driver slimpro_mbox_driver = { + .probe = slimpro_mbox_probe, + .remove = slimpro_mbox_remove, + .driver = { + .name ="xgene-slimpro-mbox" , + .of_match_table =of_match_ptr (slimpro_of_match), + .acpi_match_table =ACPI_PTR (slimpro_acpi_ids) + }, +}; + +static int __init slimpro_mbox_init (void ) +{ +return platform_driver_register (&slimpro_mbox_driver); +} + +static void __exit slimpro_mbox_exit(void) +{ +platform_driver_unregister (&slimpro_mbox_driver); +} + +subsys_initcall (slimpro_mbox_init); +module_exit (slimpro_mbox_exit); + +MODULE_DESCRIPTION ("APM X-Gene SLIMpro Mailbox Driver" ); +MODULE_LICENSE ("GPL" ); --1.9.1
Re: [PATCH v5 1/3] mailbox: Add support for APM X-Gene platform mailbox driver
Quoted 129 lines · Duc Dang
Quoted 118 lines · Mathieu Poirier
Quoted 117 lines · Duc Dang
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>---
Changes since v4:
- Rebase over v4.5-rc1
- Fix section mistmatch warning by removing__initinslimpro_mbox_probedeclaration
- Correctly print channel number when there is no IRQ for that channelChanges since v3:
- Rebase over v4.4
- Remove 'id' inslimpro_mbox_chanstructure
- Remove small functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Usesubsys_initcallto guarantee mailbox driver will be registered before any other dependent driver is loaded.drivers/mailbox/Kconfig | 9 ++ drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 264 ++++++++++++++++++++++++++++++++ 3 files changed, 275 insertions(+) create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.cdrivers/mailbox/Kconfig +9
-0@@ -85,4 +85,13 @@ config MAILBOX_TEST Test client to help with testing new Controller driver implementations. +config XGENE_SLIMPRO_MBOX + tristate "APM SoC X-Gene SLIMpro Mailbox Controller" + depends on ARCH_XGENE + help + An implementation of the APM X-Gene Interprocessor Communication + Mailbox (IPCM) between the ARM 64-bit cores and SLIMpro controller. + It is used to send short messages between ARM64-bit cores and + the SLIMpro Management Engine, primarily for PM. Say Y here if you + want to use the APM X-Gene SLIMpro IPCM support. endifdrivers/mailbox/Makefile +2
-0@@ -17,3 +17,5 @@ obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o obj-$(CONFIG_BCM2835_MBOX) += bcm2835-mailbox.o obj-$(CONFIG_STI_MBOX) += mailbox-sti.o + +obj-$(CONFIG_XGENE_SLIMPRO_MBOX) += mailbox-xgene-slimpro.odrivers/mailbox/mailbox-xgene-slimpro.c new file +53
-0@@ -0,0 +1,264 @@ +/* +* APM X-Gene SLIMpro MailBox Driver +* +* Copyright (c) 2015, Applied Micro Circuits Corporation +* Author: Feng Kan fkan at apm.com +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, see <http://www.gnu.org/licenses/>. +* +*/ +#include <linux/acpi.h> +#include <linux/delay.h> +#include <linux/interrupt.h> +#include <linux/io.h> +#include <linux/mailbox_controller.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/platform_device.h> +#include <linux/spinlock.h> + +#define MBOX_CON_NAME "slimpro-mbox" +#define MBOX_REG_SET_OFFSET 0x1000 +#define MBOX_CNT 8 +#define MBOX_STATUS_AVAIL_MASK BIT(16) +#define MBOX_STATUS_ACK_MASK BIT(0) + +/* Configuration and Status Registers */ +#define REG_DB_IN 0x00 +#define REG_DB_DIN0 0x04 +#define REG_DB_DIN1 0x08 +#define REG_DB_OUT 0x10 +#define REG_DB_DOUT0 0x14 +#define REG_DB_DOUT1 0x18 +#define REG_DB_STAT 0x20 +#define REG_DB_STATMASK 0x24 + +struct slimpro_mbox_chan { +struct device *dev; +struct mbox_chan *chan; +void __iomem *reg; +int irq; +u32 rx_msg[3 ]; +};Quoted 8 lines
drivers/mailbox/mailbox-xgene-slimpro.c line 59
Quoted 6 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +6
-0+ +struct slimpro_mbox { +struct mbox_controller mb_ctrl; +struct slimpro_mbox_chan mc[MBOX_CNT ]; +struct mbox_chan chans[MBOX_CNT ]; +};The above two structure declaration could use kernel style documentation.
Quoted 3 lines
Can you please clarify or give an example? I looked into several files in
drivers/mailbox/anddrivers/irqchipbut could not find what I need to tweak.
http://lxr.free-electrons.com/source/drivers/mailbox/mailbox-sti.c#L42
Quoted 229 lines
Quoted 12 lines
Quoted 12 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +10
-0+ +static void mb_chan_send_msg (struct slimpro_mbox_chan *mb_chan,u32 *msg) +{ +writel (msg[1 ], mb_chan->reg +REG_DB_DOUT0 ); +writel (msg[2 ], mb_chan->reg +REG_DB_DOUT1 ); +writel (msg[0 ], mb_chan->reg +REG_DB_OUT ); +} + +static void mb_chan_recv_msg (struct slimpro_mbox_chan *mb_chan) +{Quoted 8 lines
drivers/mailbox/mailbox-xgene-slimpro.c line 73
Quoted 4 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +4
-0+ mb_chan->rx_msg[1 ] =readl (mb_chan->reg +REG_DB_DIN0 ); + mb_chan->rx_msg[2 ] =readl (mb_chan->reg +REG_DB_DIN1 ); + mb_chan->rx_msg[0 ] =readl (mb_chan->reg +REG_DB_IN ); +}Is there a requirement that operations in the above two functions be ordered? If not significant gains could be achieved by using writel/readl_relaxed(). Same comment for the rest of this driver.
The 'writes' need to be in order as writing to
REG_DB_OUTwill trigger interrupt, so I want the other 2 'writes' complete before it.After the receiver get the message, it will clear door bell available interrupt request, this will also trigger a door bell acknowledge interrupt. So the 'read' to get the message and the 'write' to clear the door bell available interrupt must be in order as well.
Regards,
Duc Dang.Quoted 198 lines
Thanks,
MathieuQuoted 194 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +191
-1+ +static int mb_chan_status_ack (struct slimpro_mbox_chan *mb_chan) +{ +u32 val =readl (mb_chan->reg +REG_DB_STAT ); + +if (val &MBOX_STATUS_ACK_MASK ) { +writel (MBOX_STATUS_ACK_MASK , mb_chan->reg +REG_DB_STAT ); +return 1 ; + } +return 0 ; +} + +static int mb_chan_status_avail (struct slimpro_mbox_chan *mb_chan) +{ +u32 val =readl (mb_chan->reg +REG_DB_STAT ); + +if (val &MBOX_STATUS_AVAIL_MASK ) { +mb_chan_recv_msg (mb_chan); +writel (MBOX_STATUS_AVAIL_MASK , mb_chan->reg +REG_DB_STAT ); +return 1 ; + } +return 0 ; +} + +static irqreturn_t slimpro_mbox_irq (int irq,void *id) +{ +struct slimpro_mbox_chan *mb_chan = id; + +if (mb_chan_status_ack (mb_chan)) +mbox_chan_txdone (mb_chan->chan,0 ); + +if (mb_chan_status_avail (mb_chan)) +mbox_chan_received_data (mb_chan->chan, mb_chan->rx_msg); + +return IRQ_HANDLED ; +} + +static int slimpro_mbox_send_data (struct mbox_chan *chan,void *msg) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; + +mb_chan_send_msg (mb_chan, msg); +return 0 ; +} + +static int slimpro_mbox_startup (struct mbox_chan *chan) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; +int rc; +u32 val; + + rc =devm_request_irq (mb_chan->dev, mb_chan->irq, slimpro_mbox_irq,0 , +MBOX_CON_NAME , mb_chan); +if (unlikely (rc)) { +dev_err (mb_chan->dev,"failed to register mailbox interrupt %d\n" , + mb_chan->irq); +return rc; + } + +/* Enable HW interrupt */ +writel (MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK , + mb_chan->reg +REG_DB_STAT ); +/* Unmask doorbell status interrupt */ + val =readl (mb_chan->reg +REG_DB_STATMASK ); + val &= ~(MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK ); +writel (val, mb_chan->reg +REG_DB_STATMASK ); + +return 0 ; +} + +static void slimpro_mbox_shutdown (struct mbox_chan *chan) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; +u32 val; + +/* Mask doorbell status interrupt */ + val =readl (mb_chan->reg +REG_DB_STATMASK ); + val |= (MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK ); +writel (val, mb_chan->reg +REG_DB_STATMASK ); + +devm_free_irq (mb_chan->dev, mb_chan->irq, mb_chan); +} + +static struct mbox_chan_ops slimpro_mbox_ops = { + .send_data = slimpro_mbox_send_data, + .startup = slimpro_mbox_startup, + .shutdown = slimpro_mbox_shutdown, +}; + +static int slimpro_mbox_probe (struct platform_device *pdev) +{ +struct slimpro_mbox *ctx; +struct resource *regs; +void __iomem *mb_base; +int rc; +int i; + + ctx =devm_kzalloc (&pdev->dev,sizeof (struct slimpro_mbox ),GFP_KERNEL ); +if (IS_ERR (ctx)) +return PTR_ERR (ctx); + +platform_set_drvdata (pdev, ctx); + + regs =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + mb_base =devm_ioremap (&pdev->dev, regs->start,resource_size (regs)); +if (IS_ERR (mb_base)) +return PTR_ERR (mb_base); + +/* Setup mailbox links */ +for (i =0 ; i <MBOX_CNT ; i++) { + ctx->mc[i].irq =platform_get_irq (pdev, i); +if (ctx->mc[i].irq <0 ) { +if (i ==0 ) { +dev_err (&pdev->dev,"no available IRQ\n" ); +return -EINVAL ; + } +dev_info (&pdev->dev,"no IRQ for channel %d\n" , i); +break ; + } + + ctx->mc[i].dev = &pdev->dev; + ctx->mc[i].reg = mb_base + i *MBOX_REG_SET_OFFSET ; + ctx->mc[i].chan = &ctx->chans[i]; + ctx->chans[i].con_priv = &ctx->mc[i]; + } + +/* Setup mailbox controller */ + ctx->mb_ctrl.dev = &pdev->dev; + ctx->mb_ctrl.chans = ctx->chans; + ctx->mb_ctrl.txdone_irq = true; + ctx->mb_ctrl.ops = &slimpro_mbox_ops; + ctx->mb_ctrl.num_chans = i; + + rc =mbox_controller_register (&ctx->mb_ctrl); +if (rc) { +dev_err (&pdev->dev, +"APM X-Gene SLIMpro MailBox register failed:%d\n" , rc); +return rc; + } + +dev_info (&pdev->dev,"APM X-Gene SLIMpro MailBox registered\n" ); +return 0 ; +} + +static int slimpro_mbox_remove (struct platform_device *pdev) +{ +struct slimpro_mbox *smb =platform_get_drvdata (pdev); + +mbox_controller_unregister (&smb->mb_ctrl); +return 0 ; +} + +static const struct of_device_id slimpro_of_match[] = { + {.compatible ="apm,xgene-slimpro-mbox" }, + { }, +}; +MODULE_DEVICE_TABLE (of, slimpro_of_match); + +#ifdef CONFIG_ACPI +static const struct acpi_device_id slimpro_acpi_ids[] = { + {"APMC0D01" ,0 }, + {} +}; +MODULE_DEVICE_TABLE (acpi, slimpro_acpi_ids); +#endif + +static struct platform_driver slimpro_mbox_driver = { + .probe = slimpro_mbox_probe, + .remove = slimpro_mbox_remove, + .driver = { + .name ="xgene-slimpro-mbox" , + .of_match_table =of_match_ptr (slimpro_of_match), + .acpi_match_table =ACPI_PTR (slimpro_acpi_ids) + }, +}; + +static int __init slimpro_mbox_init (void ) +{ +return platform_driver_register (&slimpro_mbox_driver); +} + +static void __exit slimpro_mbox_exit(void) +{ +platform_driver_unregister (&slimpro_mbox_driver); +} + +subsys_initcall (slimpro_mbox_init); +module_exit (slimpro_mbox_exit); + +MODULE_DESCRIPTION ("APM X-Gene SLIMpro Mailbox Driver" ); +MODULE_LICENSE ("GPL" ); --1.9.1
Re: [PATCH v5 1/3] mailbox: Add support for APM X-Gene platform mailbox driver
Quoted 130 lines · Mathieu Poirier
Quoted 129 lines · Duc Dang
Quoted 126 lines · Mathieu Poirier
Quoted 113 lines · Duc Dang
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>---
Changes since v4:
- Rebase over v4.5-rc1
- Fix section mistmatch warning by removing__initinslimpro_mbox_probedeclaration
- Correctly print channel number when there is no IRQ for that channelChanges since v3:
- Rebase over v4.4
- Remove 'id' inslimpro_mbox_chanstructure
- Remove small functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Usesubsys_initcallto guarantee mailbox driver will be registered before any other dependent driver is loaded.drivers/mailbox/Kconfig | 9 ++ drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 264 ++++++++++++++++++++++++++++++++ 3 files changed, 275 insertions(+) create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.cdrivers/mailbox/Kconfig +9
-0@@ -85,4 +85,13 @@ config MAILBOX_TEST Test client to help with testing new Controller driver implementations. +config XGENE_SLIMPRO_MBOX + tristate "APM SoC X-Gene SLIMpro Mailbox Controller" + depends on ARCH_XGENE + help + An implementation of the APM X-Gene Interprocessor Communication + Mailbox (IPCM) between the ARM 64-bit cores and SLIMpro controller. + It is used to send short messages between ARM64-bit cores and + the SLIMpro Management Engine, primarily for PM. Say Y here if you + want to use the APM X-Gene SLIMpro IPCM support. endifdrivers/mailbox/Makefile +2
-0@@ -17,3 +17,5 @@ obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o obj-$(CONFIG_BCM2835_MBOX) += bcm2835-mailbox.o obj-$(CONFIG_STI_MBOX) += mailbox-sti.o + +obj-$(CONFIG_XGENE_SLIMPRO_MBOX) += mailbox-xgene-slimpro.odrivers/mailbox/mailbox-xgene-slimpro.c new file +49
-0@@ -0,0 +1,264 @@ +/* +* APM X-Gene SLIMpro MailBox Driver +* +* Copyright (c) 2015, Applied Micro Circuits Corporation +* Author: Feng Kan fkan at apm.com +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, see <http://www.gnu.org/licenses/>. +* +*/ +#include <linux/acpi.h> +#include <linux/delay.h> +#include <linux/interrupt.h> +#include <linux/io.h> +#include <linux/mailbox_controller.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/platform_device.h> +#include <linux/spinlock.h> + +#define MBOX_CON_NAME "slimpro-mbox" +#define MBOX_REG_SET_OFFSET 0x1000 +#define MBOX_CNT 8 +#define MBOX_STATUS_AVAIL_MASK BIT(16) +#define MBOX_STATUS_ACK_MASK BIT(0) + +/* Configuration and Status Registers */ +#define REG_DB_IN 0x00 +#define REG_DB_DIN0 0x04 +#define REG_DB_DIN1 0x08 +#define REG_DB_OUT 0x10 +#define REG_DB_DOUT0 0x14 +#define REG_DB_DOUT1 0x18 +#define REG_DB_STAT 0x20 +#define REG_DB_STATMASK 0x24 + +struct slimpro_mbox_chan { +struct device *dev; +struct mbox_chan *chan;drivers/mailbox/mailbox-xgene-slimpro.c line 59
Quoted 10 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +10
-0+void __iomem *reg; +int irq; +u32 rx_msg[3 ]; +}; + +struct slimpro_mbox { +struct mbox_controller mb_ctrl; +struct slimpro_mbox_chan mc[MBOX_CNT ]; +struct mbox_chan chans[MBOX_CNT ]; +};The above two structure declaration could use kernel style documentation.
Quoted 5 lines
Quoted 3 lines
Can you please clarify or give an example? I looked into several files in
drivers/mailbox/anddrivers/irqchipbut could not find what I need to tweak.http://lxr.free-electrons.com/source/drivers/mailbox/mailbox-sti.c#L42
I am modifying the structure defintion to add description and will post a new version shortly.
Regards,
Duc Dang.
Quoted 230 lines
Quoted 230 lines
Quoted 13 lines
Quoted 13 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +10
-0+ +static void mb_chan_send_msg (struct slimpro_mbox_chan *mb_chan,u32 *msg) +{ +writel (msg[1 ], mb_chan->reg +REG_DB_DOUT0 ); +writel (msg[2 ], mb_chan->reg +REG_DB_DOUT1 ); +writel (msg[0 ], mb_chan->reg +REG_DB_OUT ); +} + +static void mb_chan_recv_msg (struct slimpro_mbox_chan *mb_chan) +{Quoted 8 lines
drivers/mailbox/mailbox-xgene-slimpro.c line 73
Quoted 4 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +4
-0+ mb_chan->rx_msg[1 ] =readl (mb_chan->reg +REG_DB_DIN0 ); + mb_chan->rx_msg[2 ] =readl (mb_chan->reg +REG_DB_DIN1 ); + mb_chan->rx_msg[0 ] =readl (mb_chan->reg +REG_DB_IN ); +}Is there a requirement that operations in the above two functions be ordered? If not significant gains could be achieved by using writel/readl_relaxed(). Same comment for the rest of this driver.
The 'writes' need to be in order as writing to
REG_DB_OUTwill trigger interrupt, so I want the other 2 'writes' complete before it.After the receiver get the message, it will clear door bell available interrupt request, this will also trigger a door bell acknowledge interrupt. So the 'read' to get the message and the 'write' to clear the door bell available interrupt must be in order as well.
Regards,
Duc Dang.Quoted 198 lines
Thanks,
MathieuQuoted 194 lines
drivers/mailbox/mailbox-xgene-slimpro.c new file +191
-1+ +static int mb_chan_status_ack (struct slimpro_mbox_chan *mb_chan) +{ +u32 val =readl (mb_chan->reg +REG_DB_STAT ); + +if (val &MBOX_STATUS_ACK_MASK ) { +writel (MBOX_STATUS_ACK_MASK , mb_chan->reg +REG_DB_STAT ); +return 1 ; + } +return 0 ; +} + +static int mb_chan_status_avail (struct slimpro_mbox_chan *mb_chan) +{ +u32 val =readl (mb_chan->reg +REG_DB_STAT ); + +if (val &MBOX_STATUS_AVAIL_MASK ) { +mb_chan_recv_msg (mb_chan); +writel (MBOX_STATUS_AVAIL_MASK , mb_chan->reg +REG_DB_STAT ); +return 1 ; + } +return 0 ; +} + +static irqreturn_t slimpro_mbox_irq (int irq,void *id) +{ +struct slimpro_mbox_chan *mb_chan = id; + +if (mb_chan_status_ack (mb_chan)) +mbox_chan_txdone (mb_chan->chan,0 ); + +if (mb_chan_status_avail (mb_chan)) +mbox_chan_received_data (mb_chan->chan, mb_chan->rx_msg); + +return IRQ_HANDLED ; +} + +static int slimpro_mbox_send_data (struct mbox_chan *chan,void *msg) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; + +mb_chan_send_msg (mb_chan, msg); +return 0 ; +} + +static int slimpro_mbox_startup (struct mbox_chan *chan) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; +int rc; +u32 val; + + rc =devm_request_irq (mb_chan->dev, mb_chan->irq, slimpro_mbox_irq,0 , +MBOX_CON_NAME , mb_chan); +if (unlikely (rc)) { +dev_err (mb_chan->dev,"failed to register mailbox interrupt %d\n" , + mb_chan->irq); +return rc; + } + +/* Enable HW interrupt */ +writel (MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK , + mb_chan->reg +REG_DB_STAT ); +/* Unmask doorbell status interrupt */ + val =readl (mb_chan->reg +REG_DB_STATMASK ); + val &= ~(MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK ); +writel (val, mb_chan->reg +REG_DB_STATMASK ); + +return 0 ; +} + +static void slimpro_mbox_shutdown (struct mbox_chan *chan) +{ +struct slimpro_mbox_chan *mb_chan = chan->con_priv; +u32 val; + +/* Mask doorbell status interrupt */ + val =readl (mb_chan->reg +REG_DB_STATMASK ); + val |= (MBOX_STATUS_ACK_MASK |MBOX_STATUS_AVAIL_MASK ); +writel (val, mb_chan->reg +REG_DB_STATMASK ); + +devm_free_irq (mb_chan->dev, mb_chan->irq, mb_chan); +} + +static struct mbox_chan_ops slimpro_mbox_ops = { + .send_data = slimpro_mbox_send_data, + .startup = slimpro_mbox_startup, + .shutdown = slimpro_mbox_shutdown, +}; + +static int slimpro_mbox_probe (struct platform_device *pdev) +{ +struct slimpro_mbox *ctx; +struct resource *regs; +void __iomem *mb_base; +int rc; +int i; + + ctx =devm_kzalloc (&pdev->dev,sizeof (struct slimpro_mbox ),GFP_KERNEL ); +if (IS_ERR (ctx)) +return PTR_ERR (ctx); + +platform_set_drvdata (pdev, ctx); + + regs =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + mb_base =devm_ioremap (&pdev->dev, regs->start,resource_size (regs)); +if (IS_ERR (mb_base)) +return PTR_ERR (mb_base); + +/* Setup mailbox links */ +for (i =0 ; i <MBOX_CNT ; i++) { + ctx->mc[i].irq =platform_get_irq (pdev, i); +if (ctx->mc[i].irq <0 ) { +if (i ==0 ) { +dev_err (&pdev->dev,"no available IRQ\n" ); +return -EINVAL ; + } +dev_info (&pdev->dev,"no IRQ for channel %d\n" , i); +break ; + } + + ctx->mc[i].dev = &pdev->dev; + ctx->mc[i].reg = mb_base + i *MBOX_REG_SET_OFFSET ; + ctx->mc[i].chan = &ctx->chans[i]; + ctx->chans[i].con_priv = &ctx->mc[i]; + } + +/* Setup mailbox controller */ + ctx->mb_ctrl.dev = &pdev->dev; + ctx->mb_ctrl.chans = ctx->chans; + ctx->mb_ctrl.txdone_irq = true; + ctx->mb_ctrl.ops = &slimpro_mbox_ops; + ctx->mb_ctrl.num_chans = i; + + rc =mbox_controller_register (&ctx->mb_ctrl); +if (rc) { +dev_err (&pdev->dev, +"APM X-Gene SLIMpro MailBox register failed:%d\n" , rc); +return rc; + } + +dev_info (&pdev->dev,"APM X-Gene SLIMpro MailBox registered\n" ); +return 0 ; +} + +static int slimpro_mbox_remove (struct platform_device *pdev) +{ +struct slimpro_mbox *smb =platform_get_drvdata (pdev); + +mbox_controller_unregister (&smb->mb_ctrl); +return 0 ; +} + +static const struct of_device_id slimpro_of_match[] = { + {.compatible ="apm,xgene-slimpro-mbox" }, + { }, +}; +MODULE_DEVICE_TABLE (of, slimpro_of_match); + +#ifdef CONFIG_ACPI +static const struct acpi_device_id slimpro_acpi_ids[] = { + {"APMC0D01" ,0 }, + {} +}; +MODULE_DEVICE_TABLE (acpi, slimpro_acpi_ids); +#endif + +static struct platform_driver slimpro_mbox_driver = { + .probe = slimpro_mbox_probe, + .remove = slimpro_mbox_remove, + .driver = { + .name ="xgene-slimpro-mbox" , + .of_match_table =of_match_ptr (slimpro_of_match), + .acpi_match_table =ACPI_PTR (slimpro_acpi_ids) + }, +}; + +static int __init slimpro_mbox_init (void ) +{ +return platform_driver_register (&slimpro_mbox_driver); +} + +static void __exit slimpro_mbox_exit(void) +{ +platform_driver_unregister (&slimpro_mbox_driver); +} + +subsys_initcall (slimpro_mbox_init); +module_exit (slimpro_mbox_exit); + +MODULE_DESCRIPTION ("APM X-Gene SLIMpro Mailbox Driver" ); +MODULE_LICENSE ("GPL" ); --1.9.1
v6 cover mailbox: Add APM X-Gene platform mailbox driver
In reply to Mathieu PoirierAPM X-Gene SoC has a mailbox controller that provides communication mechanism for X-Gene Arm64 cores to communicate with X-Gene SoC's Cortex M3 (SLIMpro) processor.
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Changes since v5:
- Add more description into SlimPRO
mailbox data structure
Changes since v4:
- Rebase over v4.5-rc1
- Fix section mismatch warning during compiling
- Correctly print channel number when there is no IRQ for that channel
- Change node name to mailbox at 10540000
- Correct the number of IRQs in documentation
Changes since v3:
- Rebase over v4.4
- Remove 'id' in slimpro_mbox_chan structure
- Remove functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Fix error and address comment in documentation (xgene-slimpro-mailbox.txt)
Changes since v2:
- Rebase Feng's patch set over v4.3-rc5
- Remove uneccessary 'inline' in function definition
- Use module_platform_driver instead of subsys_initcall
- Minor coding stype clean up
Changes since v1:
- Add ACPI support
- Use defines for reg offset
Duc Dang (3):
mailbox: Add support for APM X-Gene platform mailbox driver
Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts
documentation
arm64: dts: mailbox device tree node for APM X-Gene platform.
.../bindings/mailbox/xgene-slimpro-mailbox.txt | 35 +++ arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 + drivers/mailbox/Kconfig | 9 + drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 284 +++++++++++++++++++++ 5 files changed, 344 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c
Signature · 1 line
1.9.1
PATCH v6 1/3 mailbox: Add support for APM X-Gene platform mailbox driver
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
---
Changes since v5:
- Add description for struct slimpro_mbox_chan and struct slimpro_mbox
Changes since v4:
- Rebase over v4.5-rc1
- Fix section mistmatch warning by removing __init in slimpro_mbox_probe declaration
- Correctly print channel number when there is no IRQ for that channel
Changes since v3:
- Rebase over v4.4
- Remove 'id' in slimpro_mbox_chan structure
- Remove small functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Use subsys_initcall to guarantee mailbox driver will be registered before any other dependent driver is loaded.
drivers/mailbox/Kconfig | 9 + drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 284 ++++++++++++++++++++++++++++++++ 3 files changed, 295 insertions(+) create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c
drivers/mailbox/Kconfig +9 -0
@@ -85,4 +85,13 @@ config MAILBOX_TEST Test client to help with testing new Controller driver implementations. +config XGENE_SLIMPRO_MBOX + tristate "APM SoC X-Gene SLIMpro Mailbox Controller" + depends on ARCH_XGENE + help + An implementation of the APM X-Gene Interprocessor Communication + Mailbox (IPCM) between the ARM 64-bit cores and SLIMpro controller. + It is used to send short messages between ARM64-bit cores and + the SLIMpro Management Engine, primarily for PM. Say Y here if you + want to use the APM X-Gene SLIMpro IPCM support. endif
drivers/mailbox/Makefile +2 -0
@@ -17,3 +17,5 @@ obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o obj-$(CONFIG_BCM2835_MBOX) += bcm2835-mailbox.o obj-$(CONFIG_STI_MBOX) += mailbox-sti.o + +obj-$(CONFIG_XGENE_SLIMPRO_MBOX) += mailbox-xgene-slimpro.o
drivers/mailbox/mailbox-xgene-slimpro.c new file +284 -0
284 lines not on this page · raw message
Signature · 1 line
1.9.1
PATCH v6 2/3 Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts documentation
In reply to Duc DangThis adds the APM X-Gene SLIMpro mailbox device tree node documentation.
---
Changes since v5:
- None
Changes since v4:
- Rebase over v4.5-rc1
- Fix number of total interrupts in
introduction text
- Change node name to mailbox at 10540000
Changes since v3:
- Rebase over v4.4
- Change number of mailbox IRQs to 8
- Fix white spaces, typos.
.../bindings/mailbox/xgene-slimpro-mailbox.txt | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +35 -0
@@ -0,0 +1,35 @@ +The APM X-Gene SLIMpro mailbox is used to communicate messages between +the ARM64 processors and the Cortex M3 (dubbed SLIMpro). It uses a simple +interrupt based door bell mechanism and can exchange simple messages using the +internal registers. + +There are total of 8 interrupts in this mailbox. Each used for an individual +door bell (or mailbox channel). + +Required properties: +- compatible: Should be as "apm,xgene-slimpro-mbox". + +- reg: Contains the mailbox register address range. + +- interrupts: 8 interrupts must be from 0 to 7, interrupt 0 define the + the interrupt for mailbox channel 0 and interrupt 1 for + mailbox channel 1 and so likewise for the reminder. + +- #mbox-cells: only one to specify the mailbox channel number. + +Example: + +Mailbox Node: + mailbox: mailbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + <0x0 0x7 0x4>, + };
Signature · 1 line
1.9.1
PATCH v6 3/3 arm64: dts: mailbox device tree node for APM X-Gene platform.
In reply to Duc DangMailbox device tree node for APM X-Gene platform.
---
Changes since v5:
- None
Changes since v4:
- Rebase over v4.5-rc1
- Change node name to mailbox at 10540000
Changes since v3:
- Rebase over v4.4
arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
arch/arm64/boot/dts/apm/apm-storm.dtsi +14 -0
@@ -691,6 +691,20 @@ msi-parent = <&msi>; }; + mailbox: mailbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + <0x0 0x7 0x4>; + }; + serial0: serial at 1c020000 { status = "disabled"; device_type = "serial";
Signature · 1 line
1.9.1
Re: [PATCH v6 3/3] arm64: dts: mailbox device tree node for APM X-Gene platform.
Quoted 2 lines · Duc Dang
Mailbox device tree node for APM X-Gene platform.
Hi Jassi,
Will you take this patch to your mailbox tree or you want me to include it into my git pull request to Olof/Arnd (arm-soc tree)?
Regards,
Duc Dang.
Quoted 45 lines
Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>---
Changes since v5:
- NoneChanges since v4:
- Rebase over v4.5-rc1
- Change node name to mailbox at 10540000Changes since v3:
- Rebase over v4.4arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 ++++++++++++++ 1 file changed, 14 insertions(+)arch/arm64/boot/dts/apm/apm-storm.dtsi +14
-1@@ -691,6 +691,20 @@ msi-parent = <&msi>; }; + mailbox: mailbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + <0x0 0x7 0x4>; + }; + serial0: serial at 1c020000 { status = "disabled"; device_type = "serial"; --1.9.1
Re: [PATCH v6 0/3] mailbox: Add APM X-Gene platform mailbox driver
In reply to Duc DangQuoted 6 lines · Duc Dang
APM X-Gene SoC has a mailbox controller that provides communication mechanism for X-Gene Arm64 cores to communicate with X-Gene SoC's Cortex M3 (SLIMpro) processor.
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Hi Jassi,
Are you fine with this version of the patch?
Regards,
Duc Dang.
Quoted 51 lines
Changes since v5:
- Add more description into SlimPRO
mailbox data structureChanges since v4:
- Rebase over v4.5-rc1
- Fix section mismatch warning during compiling
- Correctly print channel number when there is no IRQ for that channel
- Change node name to mailbox at 10540000
- Correct the number of IRQs in documentationChanges since v3:
- Rebase over v4.4
- Remove 'id' inslimpro_mbox_chanstructure
- Remove functions that are only called once and fold them into the other callers
- Remove void* pointer type cast
- Relax the number of mailbox IRQs condition
- Fix error and address comment in documentation (xgene-slimpro-mailbox.txt)Changes since v2:
- Rebase Feng's patch set over v4.3-rc5
- Remove uneccessary 'inline' in function definition
- Usemodule_platform_driverinstead ofsubsys_initcall
- Minor coding stype clean upChanges since v1:
- Add ACPI support
- Use defines for reg offsetDuc Dang (3):
mailbox: Add support for APM X-Gene platform mailbox driver
Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts
documentation
arm64: dts: mailbox device tree node for APM X-Gene platform..../bindings/mailbox/xgene-slimpro-mailbox.txt | 35 +++ arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 + drivers/mailbox/Kconfig | 9 + drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 284 +++++++++++++++++++++ 5 files changed, 344 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c--
1.9.1
PATCH v5 2/3 Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts documentation
In reply to Duc DangThis adds the APM X-Gene SLIMpro mailbox device tree node documentation.
---
Changes since v4:
- Rebase over v4.5-rc1
- Fix number of total interrupts in
introduction text
- Change node name to mailbox at 10540000
Changes since v3:
- Rebase over v4.4
- Change number of mailbox IRQs to 8
- Fix white spaces, typos.
.../bindings/mailbox/xgene-slimpro-mailbox.txt | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +35 -0
@@ -0,0 +1,35 @@ +The APM X-Gene SLIMpro mailbox is used to communicate messages between +the ARM64 processors and the Cortex M3 (dubbed SLIMpro). It uses a simple +interrupt based door bell mechanism and can exchange simple messages using the +internal registers. + +There are total of 8 interrupts in this mailbox. Each used for an individual +door bell (or mailbox channel). + +Required properties: +- compatible: Should be as "apm,xgene-slimpro-mbox". + +- reg: Contains the mailbox register address range. + +- interrupts: 8 interrupts must be from 0 to 7, interrupt 0 define the + the interrupt for mailbox channel 0 and interrupt 1 for + mailbox channel 1 and so likewise for the reminder. + +- #mbox-cells: only one to specify the mailbox channel number. + +Example: + +Mailbox Node: + mailbox: mailbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + <0x0 0x7 0x4>, + };
Signature · 1 line
1.9.1
PATCH v5 3/3 arm64: dts: mailbox device tree node for APM X-Gene platform.
In reply to Duc DangMailbox device tree node for APM X-Gene platform.
---
Changes since v4:
- Rebase over v4.5-rc1
- Change node name to mailbox at 10540000
Changes since v3:
- Rebase over v4.4
arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
arch/arm64/boot/dts/apm/apm-storm.dtsi +14 -0
@@ -691,6 +691,20 @@ msi-parent = <&msi>; }; + mailbox: mailbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + <0x0 0x7 0x4>; + }; + serial0: serial at 1c020000 { status = "disabled"; device_type = "serial";
Signature · 1 line
1.9.1
PATCH v4 2/3 Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts documentation
In reply to Duc DangThis adds the APM X-Gene SLIMpro mailbox device tree node documentation.
---
Changes since v3:
- Rebase over v4.4
- Change number of mailbox IRQs to 8
- Fix white spaces, typos.
.../bindings/mailbox/xgene-slimpro-mailbox.txt | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +35 -0
@@ -0,0 +1,35 @@ +The APM X-Gene SLIMpro mailbox is used to communicate messages between +the ARM64 processors and the Cortex M3 (dubbed SLIMpro). It uses a simple +interrupt based door bell mechanism and can exchange simple messages using the +internal registers. + +There are total of 7 interrupts in this mailbox. Each used for an individual +door bell (or mailbox channel). + +Required properties: +- compatible: Should be as "apm,xgene-slimpro-mbox". + +- reg: Contains the mailbox register address range. + +- interrupts: 8 interrupts must be from 0 to 7, interrupt 0 define the + the interrupt for mailbox channel 0 and interrupt 1 for + mailbox channel 1 and so likewise for the reminder. + +- #mbox-cells: only one to specify the mailbox channel number. + +Example: + +Mailbox Node: + slimpro-mbox: slimpro-mbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + <0x0 0x7 0x4>, + };
Signature · 1 line
1.9.1
Re: [PATCH v4 2/3] Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts documentation
Quoted 34 lines · Duc Dang
This adds the APM X-Gene SLIMpro mailbox device tree node documentation.
Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>---
Changes since v3:
- Rebase over v4.4
- Change number of mailbox IRQs to 8
- Fix white spaces, typos..../bindings/mailbox/xgene-slimpro-mailbox.txt | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txtDocumentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +13
-0@@ -0,0 +1,35 @@ +The APM X-Gene SLIMpro mailbox is used to communicate messages between +the ARM64 processors and the Cortex M3 (dubbed SLIMpro). It uses a simple +interrupt based door bell mechanism and can exchange simple messages using the +internal registers. + +There are total of 7 interrupts in this mailbox. Each used for an individual +door bell (or mailbox channel). + +Required properties: +- compatible: Should be as "apm,xgene-slimpro-mbox". + +- reg: Contains the mailbox register address range. +
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt line 23
Quoted 10 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +10
-0+- interrupts: 8 interrupts must be from 0 to 7, interrupt 0 define the + the interrupt for mailbox channel 0 and interrupt 1 for + mailbox channel 1 and so likewise for the reminder. + +- #mbox-cells: only one to specify the mailbox channel number. + +Example: + +Mailbox Node: + slimpro-mbox: slimpro-mbox at 10540000 {
Nit: just use mailbox@ or mbox@ (whatever others are using) for node name. Otherwise:
Re: [PATCH v4 2/3] Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts documentation
Quoted 49 lines · Rob Herring
Quoted 34 lines · Duc Dang
This adds the APM X-Gene SLIMpro mailbox device tree node documentation.
Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>---
Changes since v3:
- Rebase over v4.4
- Change number of mailbox IRQs to 8
- Fix white spaces, typos..../bindings/mailbox/xgene-slimpro-mailbox.txt | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txtDocumentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +13
-0@@ -0,0 +1,35 @@ +The APM X-Gene SLIMpro mailbox is used to communicate messages between +the ARM64 processors and the Cortex M3 (dubbed SLIMpro). It uses a simple +interrupt based door bell mechanism and can exchange simple messages using the +internal registers. + +There are total of 7 interrupts in this mailbox. Each used for an individual +door bell (or mailbox channel). + +Required properties: +- compatible: Should be as "apm,xgene-slimpro-mbox". + +- reg: Contains the mailbox register address range. +Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt line 23
Quoted 10 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +10
-0+- interrupts: 8 interrupts must be from 0 to 7, interrupt 0 define the + the interrupt for mailbox channel 0 and interrupt 1 for + mailbox channel 1 and so likewise for the reminder. + +- #mbox-cells: only one to specify the mailbox channel number. + +Example: + +Mailbox Node: + slimpro-mbox: slimpro-mbox at 10540000 {Nit: just use mailbox@ or mbox@ (whatever others are using) for node name. Otherwise:
Quoted 1 line
Acked-by Rob Herring <[email protected]>
Thanks, Rob.
I will change the node name to mailbox at 10540000 in the document and DT as well in the next version.
Regards,
Duc Dang.
PATCH v4 3/3 arm64: dts: mailbox device tree node for APM X-Gene platform.
In reply to Duc DangMailbox device tree node for APM X-Gene platform.
---
Changes since v3:
- Rebase over v4.4
arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
arch/arm64/boot/dts/apm/apm-storm.dtsi +14 -0
@@ -642,6 +642,20 @@ msi-parent = <&msi>; }; + mailbox: slimpro-mbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + <0x0 0x7 0x4>; + }; + serial0: serial at 1c020000 { status = "disabled"; device_type = "serial";
Signature · 1 line
1.9.1
PATCH v3 2/3 Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts documentation
In reply to Duc DangThis adds the APM X-Gene SLIMpro mailbox device tree node documentation.
--- .../bindings/mailbox/xgene-slimpro-mailbox.txt | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +34 -0
@@ -0,0 +1,34 @@ +The APM X-Gene SLIMpro mailbox is used to communicate messages between +the ARM64 processors and the Cortex M3 (dubbed SLIMpro). It uses a simple +interrupt based door bell mechanism and can exchange simple messages using the +internal registers. + +There are total of 7 interrupts in this mailbox. Each used for an individual +door bell (or mailbox channel). + +Required properties: +- compatible: Should be as "apm, xgene-slimpro-mbox". + +- reg: Contain the mailbox register address range. + +- interrupts: 7 interrupts must start from 0 to 6, interrupt 0 define the + the interrupt for mailbox channel 0 and interrupt 1 for + mailbox channel 1 and so likewise for the reminder. + +- #mbox-cells: only one to specify the mailbox channel number. + +Example: + +Mailbox Node: + slimpro-mbox: slimpro-mbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + };
Signature · 1 line
1.9.1
Rob Herring
maintainerRe: [PATCH v3 2/3] Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts documentation
Quoted 17 lines · Duc Dang
This adds the APM X-Gene SLIMpro mailbox device tree node documentation.
[dhdang: rebase over 4.3-rc5]Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>--- .../bindings/mailbox/xgene-slimpro-mailbox.txt | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txtDocumentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +0
-0
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt line 10
Quoted 10 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +10
-0@@ -0,0 +1,34 @@ +The APM X-Gene SLIMpro mailbox is used to communicate messages between +the ARM64 processors and the Cortex M3 (dubbed SLIMpro). It uses a simple +interrupt based door bell mechanism and can exchange simple messages using the +internal registers. + +There are total of 7 interrupts in this mailbox. Each used for an individual +door bell (or mailbox channel). + +Required properties: +- compatible: Should be as "apm, xgene-slimpro-mbox".
^
remove the space
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt line 12
Quoted 2 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +2
-0+ +- reg: Contain the mailbox register address range.
s/Contain/Contains/
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt line 16
Quoted 4 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +4
-0+ +- interrupts: 7 interrupts must start from 0 to 6, interrupt 0 define the + the interrupt for mailbox channel 0 and interrupt 1 for + mailbox channel 1 and so likewise for the reminder.
s/start/be/
Quoted 25 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +18
-0+ +- #mbox-cells: only one to specify the mailbox channel number. + +Example: + +Mailbox Node: + slimpro-mbox: slimpro-mbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + };Signature · 6 lines
1.9.1 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v3 2/3] Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts documentation
Quoted 29 lines · Rob Herring
Quoted 17 lines · Duc Dang
This adds the APM X-Gene SLIMpro mailbox device tree node documentation.
[dhdang: rebase over 4.3-rc5]Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>--- .../bindings/mailbox/xgene-slimpro-mailbox.txt | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txtDocumentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +0
-0Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt line 10
Quoted 10 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +10
-0@@ -0,0 +1,34 @@ +The APM X-Gene SLIMpro mailbox is used to communicate messages between +the ARM64 processors and the Cortex M3 (dubbed SLIMpro). It uses a simple +interrupt based door bell mechanism and can exchange simple messages using the +internal registers. + +There are total of 7 interrupts in this mailbox. Each used for an individual +door bell (or mailbox channel). + +Required properties: +- compatible: Should be as "apm, xgene-slimpro-mbox".^
Quoted 1 line
remove the space
I will fix in next version of the patch.
Quoted 5 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt line 12
Quoted 3 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +2
-0+ +- reg: Contain the mailbox register address range.s/Contain/Contains/
Will change.
Quoted 7 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt line 16
Quoted 5 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +4
-0+ +- interrupts: 7 interrupts must start from 0 to 6, interrupt 0 define the + the interrupt for mailbox channel 0 and interrupt 1 for + mailbox channel 1 and so likewise for the reminder.s/start/be/
Will change.
Quoted 22 lines
Quoted 22 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +18
-1+ +- #mbox-cells: only one to specify the mailbox channel number. + +Example: + +Mailbox Node: + slimpro-mbox: slimpro-mbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + }; --1.9.1
Quoted 4 lines
Quoted 4 lines
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Regards,
Duc Dang.
Re: [PATCH v3 2/3] Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts documentation
In reply to Rob HerringQuoted 35 lines · Rob Herring
Quoted 17 lines · Duc Dang
This adds the APM X-Gene SLIMpro mailbox device tree node documentation.
[dhdang: rebase over 4.3-rc5]Signed-off-by Feng Kan <[email protected]>Signed-off-by Duc Dang <[email protected]>--- .../bindings/mailbox/xgene-slimpro-mailbox.txt | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txtDocumentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +0
-0Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt line 10
Quoted 10 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +10
-0@@ -0,0 +1,34 @@ +The APM X-Gene SLIMpro mailbox is used to communicate messages between +the ARM64 processors and the Cortex M3 (dubbed SLIMpro). It uses a simple +interrupt based door bell mechanism and can exchange simple messages using the +internal registers. + +There are total of 7 interrupts in this mailbox. Each used for an individual +door bell (or mailbox channel). + +Required properties: +- compatible: Should be as "apm, xgene-slimpro-mbox".^remove the space
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt line 12
Quoted 2 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +2
-0+ +- reg: Contain the mailbox register address range.
Quoted 8 lines
s/Contain/Contains/
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt line 16
Quoted 4 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +4
-0+ +- interrupts: 7 interrupts must start from 0 to 6, interrupt 0 define the + the interrupt for mailbox channel 0 and interrupt 1 for + mailbox channel 1 and so likewise for the reminder.s/start/be/
Thanks, Rob.
I will post an updated version shortly.
Regards,
Duc Dang.
Quoted 26 lines
Quoted 26 lines
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +18
-1+ +- #mbox-cells: only one to specify the mailbox channel number. + +Example: + +Mailbox Node: + slimpro-mbox: slimpro-mbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + }; --1.9.1
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v3 3/3 arm64: dts: mailbox device tree node for APM X-Gene platform.
In reply to Duc DangMailbox device tree node for APM X-Gene platform.
--- arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
arch/arm64/boot/dts/apm/apm-storm.dtsi +14 -0
@@ -604,6 +604,20 @@ msi-parent = <&msi>; }; + mailbox: slimpro-mbox at 10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + <0x0 0x7 0x4>; + }; + serial0: serial at 1c020000 { status = "disabled"; device_type = "serial";
Signature · 1 line
1.9.1
Re: [PATCH v3 0/3] mailbox: Add APM X-Gene platform mailbox driver
In reply to Duc DangQuoted 17 lines · Duc Dang
APM X-Gene SoC has a mailbox controller that provides communication mechanism for X-Gene Arm64 cores to communicate with X-Gene SoC's Cortex M3 (SLIMpro) processor.
X-Gene mailbox controller provides 8 mailbox channels, with each channel has a dedicated interrupt line.
Changes since v2:
- Rebase Feng's patch set over v4.3-rc5
- Remove uneccessary 'inline' in function definition
- Usemodule_platform_driverinstead ofsubsys_initcall
- Minor coding stype clean upChanges since v1:
- Add ACPI support
- Use defines for reg offset
Quoted 9 lines
.../bindings/mailbox/xgene-slimpro-mailbox.txt | 34 +++ arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 ++ drivers/mailbox/Kconfig | 9 + drivers/mailbox/Makefile | 2 + drivers/mailbox/mailbox-xgene-slimpro.c | 264 +++++++++++++++++++++ 5 files changed, 323 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt create mode 100644 drivers/mailbox/mailbox-xgene-slimpro.c
Hi Jassi, Paul,
Do you have any comment on this patch set?
Quoted 3 lines
--
1.9.1
Regards,
Duc dang.
Re: [PATCH v3 0/3] mailbox: Add APM X-Gene platform mailbox driver
Hi Duc,
Quoted 3 lines · Duc Dang
Hi Jassi, Paul,
Do you have any comment on this patch set?
Are you perhaps confusing me with another Paul?
(I think I made a minor comment or two on this series about half a year ago. But I'm not the maintainer here and it's the maintainers verdict that you're probably interested in mostly. So it's not clear to me why you specifically ask for my comment.)
Thanks,
Paul Bolle
PATCH v2 2/4 mailbox: xgene: add ACPI support for X-Gene mailbox driver
In reply to Feng KanAdd ACPI support for APM X-Gene mailbox driver.
--- drivers/mailbox/mailbox-xgene-slimpro.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/mailbox/mailbox-xgene-slimpro.c +10 -0
@@ -18,6 +18,7 @@* along with this program; if not, see <http://www.gnu.org/licenses/>. * */ +#include <linux/acpi.h> #include <linux/delay.h> #include <linux/interrupt.h> #include <linux/io.h>
@@ -240,6 +241,14 @@ static const struct of_device_id slimpro_of_match[] = { };MODULE_DEVICE_TABLE (of, slimpro_of_match); +#ifdef CONFIG_ACPI +static const struct acpi_device_id slimpro_acpi_ids[] = { + {"APMC0D01" ,0 }, + {} +}; +MODULE_DEVICE_TABLE (acpi, slimpro_acpi_ids); +#endif +static struct platform_driver slimpro_mbox_driver = { .probe = slimpro_mbox_probe, .remove = slimpro_mbox_remove,
@@ -247,6 +256,7 @@ static struct platform_driver slimpro_mbox_driver = { .name = "xgene-slimpro-mbox", .owner = THIS_MODULE, .of_match_table = of_match_ptr(slimpro_of_match), + .acpi_match_table =ACPI_PTR (slimpro_acpi_ids) }, };
Signature · 1 line
1.9.1
PATCH v2 3/4 Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts documentation
In reply to Feng KanThis adds the APM X-Gene SLIMpro mailbox device tree node documentation.
--- .../bindings/mailbox/xgene-slimpro-mailbox.txt | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt
Documentation/devicetree/bindings/mailbox/xgene-slimpro-mailbox.txt new file +34 -0
@@ -0,0 +1,34 @@ +The APM X-Gene SLIMpro mailbox is used to communicate messages between +the ARM64 processors and the Cortex M3 (dubbed SLIMpro). It uses a simple +interrupt based door bell mechanism and can exchange simple messages using the +internal registers. + +There are total of 7 interrupts in this mailbox. Each used for an individual +door bell (or mailbox channel). + +Required properties: +- compatible: Should be as "apm, xgene-slimpro-mbox". + +- reg: Contain the mailbox register address range. + +- interrupts: 7 interrupts must start from 0 to 6, interrupt 0 define the + the interrupt for mailbox channel 0 and interrupt 1 for + mailbox channel 1 and so likewise for the reminder. + +- #mbox-cells: only one to specify the mailbox channel number. + +Example: + +Mailbox Node: + slimpro-mbox: slimpro-mbox@10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + };
Signature · 1 line
1.9.1
PATCH v2 4/4 arm64: dts: mailbox device tree node for APM X-Gene platform.
In reply to Feng KanMailbox device tree node for APM X-Gene platform.
--- arch/arm64/boot/dts/apm/apm-storm.dtsi | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
arch/arm64/boot/dts/apm/apm-storm.dtsi +14 -0
@@ -489,6 +489,20 @@ clocks = <&pcie4clk 0>; }; + mailbox: slimpro-mbox@10540000 { + compatible = "apm,xgene-slimpro-mbox"; + reg = <0x0 0x10540000 0x0 0xa000>; + #mbox-cells = <1>; + interrupts = <0x0 0x0 0x4>, + <0x0 0x1 0x4>, + <0x0 0x2 0x4>, + <0x0 0x3 0x4>, + <0x0 0x4 0x4>, + <0x0 0x5 0x4>, + <0x0 0x6 0x4>, + <0x0 0x7 0x4>; + }; + serial0: serial@1c020000 { status = "disabled"; device_type = "serial";
Signature · 6 lines
1.9.1 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html