From: Suman Anna <s-anna@ti.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Linus Walleij <linus.walleij@linaro.org>,
Russell King <linux@arm.linux.org.uk>,
Arnd Bergmann <arnd@arndb.de>, Tony Lindgren <tony@atomide.com>,
Ohad Ben-Cohen <ohad@wizery.com>, <linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-omap@vger.kernel.org>,
Omar Ramirez Luna <omar.ramirez@copitl.com>,
Loic Pallardy <loic.pallardy@st.com>, Suman Anna <s-anna@ti.com>
Subject: [PATCHv3 10/14] mailbox: add no_irq send message
Date: Tue, 12 Mar 2013 22:24:26 -0500 [thread overview]
Message-ID: <1363145066-14681-1-git-send-email-s-anna@ti.com> (raw)
From: Loic Pallardy <loic.pallardy@st.com>
For debug purpose, mailbox must be available when
interrupts are disabled to collect dump information.
Signed-off-by: Loic Pallardy <loic.pallardy@st.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/mailbox/mailbox.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++
include/linux/mailbox.h | 3 +++
2 files changed, 69 insertions(+)
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
index 35813f5..eaaf87e 100644
--- a/drivers/mailbox/mailbox.c
+++ b/drivers/mailbox/mailbox.c
@@ -110,6 +110,72 @@ out:
}
EXPORT_SYMBOL(mailbox_msg_send);
+#define TRANSFER_TIMEOUT 30000 /* Becomes ~3s timeout */
+
+static struct mailbox_msg no_irq_msg_res;
+
+struct mailbox_msg *mailbox_msg_send_receive_no_irq(struct mailbox *mbox,
+ struct mailbox_msg *msg)
+{
+ int ret = 0;
+ int count = 0;
+
+ BUG_ON(!irqs_disabled());
+
+ if (likely(mbox->ops->write && mbox->ops->read)) {
+ if (__mbox_poll_for_space(mbox)) {
+ ret = -EBUSY;
+ goto out;
+ }
+ mbox->ops->write(mbox, msg);
+ while (!is_mbox_irq(mbox, IRQ_RX)) {
+ udelay(100);
+ cpu_relax();
+ count++;
+ if (count > TRANSFER_TIMEOUT) {
+ pr_err("%s: Error: transfer timed out\n",
+ __func__);
+ ret = -EINVAL;
+ goto out;
+ }
+ }
+ mbox->ops->read(mbox, &no_irq_msg_res);
+ ack_mbox_irq(mbox, IRQ_RX);
+ } else {
+ ret = -EINVAL;
+ }
+
+out:
+ BUG_ON(ret < 0);
+
+ return &no_irq_msg_res;
+}
+EXPORT_SYMBOL(mailbox_msg_send_receive_no_irq);
+
+int mailbox_msg_send_no_irq(struct mailbox *mbox,
+ struct mailbox_msg *msg)
+{
+ int ret = 0;
+
+ BUG_ON(!irqs_disabled());
+
+ if (likely(mbox->ops->write)) {
+ if (__mbox_poll_for_space(mbox)) {
+ ret = -EBUSY;
+ goto out;
+ }
+ mbox->ops->write(mbox, msg);
+ } else {
+ ret = -EINVAL;
+ }
+
+out:
+ WARN_ON(ret < 0);
+
+ return ret;
+}
+EXPORT_SYMBOL(mailbox_msg_send_no_irq);
+
void mailbox_save_ctx(struct mailbox *mbox)
{
if (!mbox->ops->save_ctx) {
diff --git a/include/linux/mailbox.h b/include/linux/mailbox.h
index f8730b4..a41b67d 100644
--- a/include/linux/mailbox.h
+++ b/include/linux/mailbox.h
@@ -28,6 +28,9 @@ struct mailbox_msg {
}
int mailbox_msg_send(struct mailbox *, struct mailbox_msg *msg);
+struct mailbox_msg *mailbox_msg_send_receive_no_irq(struct mailbox *,
+ struct mailbox_msg *msg);
+int mailbox_msg_send_no_irq(struct mailbox *, struct mailbox_msg *msg);
struct mailbox *mailbox_get(const char *, struct notifier_block *nb);
void mailbox_put(struct mailbox *mbox, struct notifier_block *nb);
--
1.8.1.2
WARNING: multiple messages have this Message-ID (diff)
From: Suman Anna <s-anna@ti.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Linus Walleij <linus.walleij@linaro.org>,
Russell King <linux@arm.linux.org.uk>,
Arnd Bergmann <arnd@arndb.de>, Tony Lindgren <tony@atomide.com>,
Ohad Ben-Cohen <ohad@wizery.com>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
Omar Ramirez Luna <omar.ramirez@copitl.com>,
Loic Pallardy <loic.pallardy@st.com>, Suman Anna <s-anna@ti.com>
Subject: [PATCHv3 10/14] mailbox: add no_irq send message
Date: Tue, 12 Mar 2013 22:24:26 -0500 [thread overview]
Message-ID: <1363145066-14681-1-git-send-email-s-anna@ti.com> (raw)
From: Loic Pallardy <loic.pallardy@st.com>
For debug purpose, mailbox must be available when
interrupts are disabled to collect dump information.
Signed-off-by: Loic Pallardy <loic.pallardy@st.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/mailbox/mailbox.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++
include/linux/mailbox.h | 3 +++
2 files changed, 69 insertions(+)
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
index 35813f5..eaaf87e 100644
--- a/drivers/mailbox/mailbox.c
+++ b/drivers/mailbox/mailbox.c
@@ -110,6 +110,72 @@ out:
}
EXPORT_SYMBOL(mailbox_msg_send);
+#define TRANSFER_TIMEOUT 30000 /* Becomes ~3s timeout */
+
+static struct mailbox_msg no_irq_msg_res;
+
+struct mailbox_msg *mailbox_msg_send_receive_no_irq(struct mailbox *mbox,
+ struct mailbox_msg *msg)
+{
+ int ret = 0;
+ int count = 0;
+
+ BUG_ON(!irqs_disabled());
+
+ if (likely(mbox->ops->write && mbox->ops->read)) {
+ if (__mbox_poll_for_space(mbox)) {
+ ret = -EBUSY;
+ goto out;
+ }
+ mbox->ops->write(mbox, msg);
+ while (!is_mbox_irq(mbox, IRQ_RX)) {
+ udelay(100);
+ cpu_relax();
+ count++;
+ if (count > TRANSFER_TIMEOUT) {
+ pr_err("%s: Error: transfer timed out\n",
+ __func__);
+ ret = -EINVAL;
+ goto out;
+ }
+ }
+ mbox->ops->read(mbox, &no_irq_msg_res);
+ ack_mbox_irq(mbox, IRQ_RX);
+ } else {
+ ret = -EINVAL;
+ }
+
+out:
+ BUG_ON(ret < 0);
+
+ return &no_irq_msg_res;
+}
+EXPORT_SYMBOL(mailbox_msg_send_receive_no_irq);
+
+int mailbox_msg_send_no_irq(struct mailbox *mbox,
+ struct mailbox_msg *msg)
+{
+ int ret = 0;
+
+ BUG_ON(!irqs_disabled());
+
+ if (likely(mbox->ops->write)) {
+ if (__mbox_poll_for_space(mbox)) {
+ ret = -EBUSY;
+ goto out;
+ }
+ mbox->ops->write(mbox, msg);
+ } else {
+ ret = -EINVAL;
+ }
+
+out:
+ WARN_ON(ret < 0);
+
+ return ret;
+}
+EXPORT_SYMBOL(mailbox_msg_send_no_irq);
+
void mailbox_save_ctx(struct mailbox *mbox)
{
if (!mbox->ops->save_ctx) {
diff --git a/include/linux/mailbox.h b/include/linux/mailbox.h
index f8730b4..a41b67d 100644
--- a/include/linux/mailbox.h
+++ b/include/linux/mailbox.h
@@ -28,6 +28,9 @@ struct mailbox_msg {
}
int mailbox_msg_send(struct mailbox *, struct mailbox_msg *msg);
+struct mailbox_msg *mailbox_msg_send_receive_no_irq(struct mailbox *,
+ struct mailbox_msg *msg);
+int mailbox_msg_send_no_irq(struct mailbox *, struct mailbox_msg *msg);
struct mailbox *mailbox_get(const char *, struct notifier_block *nb);
void mailbox_put(struct mailbox *mbox, struct notifier_block *nb);
--
1.8.1.2
WARNING: multiple messages have this Message-ID (diff)
From: s-anna@ti.com (Suman Anna)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv3 10/14] mailbox: add no_irq send message
Date: Tue, 12 Mar 2013 22:24:26 -0500 [thread overview]
Message-ID: <1363145066-14681-1-git-send-email-s-anna@ti.com> (raw)
From: Loic Pallardy <loic.pallardy@st.com>
For debug purpose, mailbox must be available when
interrupts are disabled to collect dump information.
Signed-off-by: Loic Pallardy <loic.pallardy@st.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/mailbox/mailbox.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++
include/linux/mailbox.h | 3 +++
2 files changed, 69 insertions(+)
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
index 35813f5..eaaf87e 100644
--- a/drivers/mailbox/mailbox.c
+++ b/drivers/mailbox/mailbox.c
@@ -110,6 +110,72 @@ out:
}
EXPORT_SYMBOL(mailbox_msg_send);
+#define TRANSFER_TIMEOUT 30000 /* Becomes ~3s timeout */
+
+static struct mailbox_msg no_irq_msg_res;
+
+struct mailbox_msg *mailbox_msg_send_receive_no_irq(struct mailbox *mbox,
+ struct mailbox_msg *msg)
+{
+ int ret = 0;
+ int count = 0;
+
+ BUG_ON(!irqs_disabled());
+
+ if (likely(mbox->ops->write && mbox->ops->read)) {
+ if (__mbox_poll_for_space(mbox)) {
+ ret = -EBUSY;
+ goto out;
+ }
+ mbox->ops->write(mbox, msg);
+ while (!is_mbox_irq(mbox, IRQ_RX)) {
+ udelay(100);
+ cpu_relax();
+ count++;
+ if (count > TRANSFER_TIMEOUT) {
+ pr_err("%s: Error: transfer timed out\n",
+ __func__);
+ ret = -EINVAL;
+ goto out;
+ }
+ }
+ mbox->ops->read(mbox, &no_irq_msg_res);
+ ack_mbox_irq(mbox, IRQ_RX);
+ } else {
+ ret = -EINVAL;
+ }
+
+out:
+ BUG_ON(ret < 0);
+
+ return &no_irq_msg_res;
+}
+EXPORT_SYMBOL(mailbox_msg_send_receive_no_irq);
+
+int mailbox_msg_send_no_irq(struct mailbox *mbox,
+ struct mailbox_msg *msg)
+{
+ int ret = 0;
+
+ BUG_ON(!irqs_disabled());
+
+ if (likely(mbox->ops->write)) {
+ if (__mbox_poll_for_space(mbox)) {
+ ret = -EBUSY;
+ goto out;
+ }
+ mbox->ops->write(mbox, msg);
+ } else {
+ ret = -EINVAL;
+ }
+
+out:
+ WARN_ON(ret < 0);
+
+ return ret;
+}
+EXPORT_SYMBOL(mailbox_msg_send_no_irq);
+
void mailbox_save_ctx(struct mailbox *mbox)
{
if (!mbox->ops->save_ctx) {
diff --git a/include/linux/mailbox.h b/include/linux/mailbox.h
index f8730b4..a41b67d 100644
--- a/include/linux/mailbox.h
+++ b/include/linux/mailbox.h
@@ -28,6 +28,9 @@ struct mailbox_msg {
}
int mailbox_msg_send(struct mailbox *, struct mailbox_msg *msg);
+struct mailbox_msg *mailbox_msg_send_receive_no_irq(struct mailbox *,
+ struct mailbox_msg *msg);
+int mailbox_msg_send_no_irq(struct mailbox *, struct mailbox_msg *msg);
struct mailbox *mailbox_get(const char *, struct notifier_block *nb);
void mailbox_put(struct mailbox *mbox, struct notifier_block *nb);
--
1.8.1.2
next reply other threads:[~2013-03-13 3:31 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-13 3:24 Suman Anna [this message]
2013-03-13 3:24 ` [PATCHv3 10/14] mailbox: add no_irq send message Suman Anna
2013-03-13 3:24 ` Suman Anna
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1363145066-14681-1-git-send-email-s-anna@ti.com \
--to=s-anna@ti.com \
--cc=arnd@arndb.de \
--cc=gregkh@linuxfoundation.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=loic.pallardy@st.com \
--cc=ohad@wizery.com \
--cc=omar.ramirez@copitl.com \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.