Junfeng Feng
2014-05-02 21:05:13 UTC
Hello there,
Right now, I try to support the IGMP functionality on Davinci. I have
configured the option CONFIG_IP_MULTICAST.
But when I try to join or leave one multicast group, I did not see the
multicast traffic. For comparison, I have tried the same test program on
Netra chip with kernel 2.6.37 and there is multicast message there.
Have anyone encountered the same issue before? Thanks.
Regards,
Junfeng
-----Original Message-----
From:
davinci-linux-open-source-bounces+jfeng=evertz.com at linux.davincidsp.com
[mailto:davinci-linux-open-source-bounces+jfeng=evertz.com at linux.davinci
dsp.com] On Behalf Of
davinci-linux-open-source-request at linux.davincidsp.com
Sent: Friday, May 02, 2014 1:00 PM
To: davinci-linux-open-source at linux.davincidsp.com
Subject: Davinci-linux-open-source Digest, Vol 101, Issue 1
Send Davinci-linux-open-source mailing list submissions to
davinci-linux-open-source at linux.davincidsp.com
To subscribe or unsubscribe via the World Wide Web, visit
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
or, via email, send a message with subject or body 'help' to
davinci-linux-open-source-request at linux.davincidsp.com
You can reach the person managing the list at
davinci-linux-open-source-owner at linux.davincidsp.com
When replying, please edit your Subject line so it is more specific than
"Re: Contents of Davinci-linux-open-source digest..."
Today's Topics:
1. [PATCH] i2c: davinci: Add block read functionality for IPMI
(Murali Karicheri)
----------------------------------------------------------------------
Message: 1
Date: Thu, 1 May 2014 14:49:46 -0400
From: Murali Karicheri <m-karicheri2 at ti.com>
To: <davinci-linux-open-source at linux.davincidsp.com>,
<linux-i2c at vger.kernel.org>, <linux-kernel at vger.kernel.org>
Cc: Wolfram Sang <wsa at the-dreams.de>, Kevin Hilman
<khilman at deeprootsystems.com>, Santosh Shilimkar
<santosh.shilimkar at ti.com>, Garrett Ding <g-ding at ti.com>
Subject: [PATCH] i2c: davinci: Add block read functionality for IPMI
Message-ID: <1398970186-12204-1-git-send-email-m-karicheri2 at ti.com>
Content-Type: text/plain
Intelligent Plaform Management Interface (IPMI) requires I2C driver to
support block read, where the first byte received from slave is the
length of following data:- Added length check if the read type is block
read (I2C_M_RECV_LEN) Send NACK/STOP bits before last byte is received
Signed-off-by: Garrett Ding <g-ding at ti.com>
Signed-off-by: Murali Karicheri <m-karicheri2 at ti.com>
Tested-by: Garrett Ding <g-ding at ti.com>
CC: Sekhar Nori <nsekhar at ti.com>
CC: Kevin Hilman <khilman at deeprootsystems.com>
CC: Wolfram Sang <wsa at the-dreams.de>
CC: Santosh Shilimkar <santosh.shilimkar at ti.com>
---
Tested on a customer board based on K2HK SoC
drivers/i2c/busses/i2c-davinci.c | 42
+++++++++++++++++++++++++++++++++-----
1 file changed, 37 insertions(+), 5 deletions(-)
diff --git a/drivers/i2c/busses/i2c-davinci.c
b/drivers/i2c/busses/i2c-davinci.c
index 389bc68..cd97920 100644
--- a/drivers/i2c/busses/i2c-davinci.c
+++ b/drivers/i2c/busses/i2c-davinci.c
@@ -97,6 +97,10 @@
#define DAVINCI_I2C_IMR_NACK BIT(1)
#define DAVINCI_I2C_IMR_AL BIT(0)
+/* capabilities */
+#define I2C_CAPABILITIES (I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | \
+ I2C_FUNC_SMBUS_READ_BLOCK_DATA)
+
struct davinci_i2c_dev {
struct device *dev;
void __iomem *base;
@@ -318,7 +322,13 @@ i2c_davinci_xfer_msg(struct i2c_adapter *adap,
struct i2c_msg *msg, int stop)
davinci_i2c_write_reg(dev, DAVINCI_I2C_SAR_REG, msg->addr);
dev->buf = msg->buf;
- dev->buf_len = msg->len;
+
+ /* if first received byte is length, set buf_len = 0xffff as
flag */
+ if (msg->flags & I2C_M_RECV_LEN)
+ dev->buf_len = 0xffff;
+ else
+ dev->buf_len = msg->len;
+
dev->stop = stop;
davinci_i2c_write_reg(dev, DAVINCI_I2C_CNT_REG, dev->buf_len);
@@ -456,7 +466,7 @@ i2c_davinci_xfer(struct i2c_adapter *adap, struct
i2c_msg msgs[], int num)
static u32 i2c_davinci_func(struct i2c_adapter *adap) {
- return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
+ return I2C_CAPABILITIES;
}
static void terminate_read(struct davinci_i2c_dev *dev) @@ -528,10
+538,32 @@ static irqreturn_t i2c_davinci_isr(int this_irq, void
*dev_id)
case DAVINCI_I2C_IVR_RDR:
if (dev->buf_len) {
- *dev->buf++ =
- davinci_i2c_read_reg(dev,
-
DAVINCI_I2C_DRR_REG);
+ *dev->buf++ = davinci_i2c_read_reg(dev,
+
DAVINCI_I2C_DRR_REG);
+ /*
+ * check if the first received byte is
message
+ * length, i.e, I2C_M_RECV_LEN
+ */
+ if (dev->buf_len == 0xffff)
+ dev->buf_len = *(dev->buf - 1) +
1;
+
dev->buf_len--;
+ /*
+ * send NACK/STOP bits BEFORE last byte
is
+ * received
+ */
+ if (dev->buf_len == 1) {
+ w = davinci_i2c_read_reg(dev,
+
DAVINCI_I2C_MDR_REG);
+ w |= DAVINCI_I2C_MDR_NACK;
+ davinci_i2c_write_reg(dev,
+
DAVINCI_I2C_MDR_REG, w);
+
+ w |= DAVINCI_I2C_MDR_STP;
+ davinci_i2c_write_reg(dev,
+
DAVINCI_I2C_MDR_REG, w);
+ }
+
if (dev->buf_len)
continue;
--
1.7.9.5
------------------------------
_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source at linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
End of Davinci-linux-open-source Digest, Vol 101, Issue 1
*********************************************************
Right now, I try to support the IGMP functionality on Davinci. I have
configured the option CONFIG_IP_MULTICAST.
But when I try to join or leave one multicast group, I did not see the
multicast traffic. For comparison, I have tried the same test program on
Netra chip with kernel 2.6.37 and there is multicast message there.
Have anyone encountered the same issue before? Thanks.
Regards,
Junfeng
-----Original Message-----
From:
davinci-linux-open-source-bounces+jfeng=evertz.com at linux.davincidsp.com
[mailto:davinci-linux-open-source-bounces+jfeng=evertz.com at linux.davinci
dsp.com] On Behalf Of
davinci-linux-open-source-request at linux.davincidsp.com
Sent: Friday, May 02, 2014 1:00 PM
To: davinci-linux-open-source at linux.davincidsp.com
Subject: Davinci-linux-open-source Digest, Vol 101, Issue 1
Send Davinci-linux-open-source mailing list submissions to
davinci-linux-open-source at linux.davincidsp.com
To subscribe or unsubscribe via the World Wide Web, visit
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
or, via email, send a message with subject or body 'help' to
davinci-linux-open-source-request at linux.davincidsp.com
You can reach the person managing the list at
davinci-linux-open-source-owner at linux.davincidsp.com
When replying, please edit your Subject line so it is more specific than
"Re: Contents of Davinci-linux-open-source digest..."
Today's Topics:
1. [PATCH] i2c: davinci: Add block read functionality for IPMI
(Murali Karicheri)
----------------------------------------------------------------------
Message: 1
Date: Thu, 1 May 2014 14:49:46 -0400
From: Murali Karicheri <m-karicheri2 at ti.com>
To: <davinci-linux-open-source at linux.davincidsp.com>,
<linux-i2c at vger.kernel.org>, <linux-kernel at vger.kernel.org>
Cc: Wolfram Sang <wsa at the-dreams.de>, Kevin Hilman
<khilman at deeprootsystems.com>, Santosh Shilimkar
<santosh.shilimkar at ti.com>, Garrett Ding <g-ding at ti.com>
Subject: [PATCH] i2c: davinci: Add block read functionality for IPMI
Message-ID: <1398970186-12204-1-git-send-email-m-karicheri2 at ti.com>
Content-Type: text/plain
Intelligent Plaform Management Interface (IPMI) requires I2C driver to
support block read, where the first byte received from slave is the
length of following data:- Added length check if the read type is block
read (I2C_M_RECV_LEN) Send NACK/STOP bits before last byte is received
Signed-off-by: Garrett Ding <g-ding at ti.com>
Signed-off-by: Murali Karicheri <m-karicheri2 at ti.com>
Tested-by: Garrett Ding <g-ding at ti.com>
CC: Sekhar Nori <nsekhar at ti.com>
CC: Kevin Hilman <khilman at deeprootsystems.com>
CC: Wolfram Sang <wsa at the-dreams.de>
CC: Santosh Shilimkar <santosh.shilimkar at ti.com>
---
Tested on a customer board based on K2HK SoC
drivers/i2c/busses/i2c-davinci.c | 42
+++++++++++++++++++++++++++++++++-----
1 file changed, 37 insertions(+), 5 deletions(-)
diff --git a/drivers/i2c/busses/i2c-davinci.c
b/drivers/i2c/busses/i2c-davinci.c
index 389bc68..cd97920 100644
--- a/drivers/i2c/busses/i2c-davinci.c
+++ b/drivers/i2c/busses/i2c-davinci.c
@@ -97,6 +97,10 @@
#define DAVINCI_I2C_IMR_NACK BIT(1)
#define DAVINCI_I2C_IMR_AL BIT(0)
+/* capabilities */
+#define I2C_CAPABILITIES (I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | \
+ I2C_FUNC_SMBUS_READ_BLOCK_DATA)
+
struct davinci_i2c_dev {
struct device *dev;
void __iomem *base;
@@ -318,7 +322,13 @@ i2c_davinci_xfer_msg(struct i2c_adapter *adap,
struct i2c_msg *msg, int stop)
davinci_i2c_write_reg(dev, DAVINCI_I2C_SAR_REG, msg->addr);
dev->buf = msg->buf;
- dev->buf_len = msg->len;
+
+ /* if first received byte is length, set buf_len = 0xffff as
flag */
+ if (msg->flags & I2C_M_RECV_LEN)
+ dev->buf_len = 0xffff;
+ else
+ dev->buf_len = msg->len;
+
dev->stop = stop;
davinci_i2c_write_reg(dev, DAVINCI_I2C_CNT_REG, dev->buf_len);
@@ -456,7 +466,7 @@ i2c_davinci_xfer(struct i2c_adapter *adap, struct
i2c_msg msgs[], int num)
static u32 i2c_davinci_func(struct i2c_adapter *adap) {
- return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
+ return I2C_CAPABILITIES;
}
static void terminate_read(struct davinci_i2c_dev *dev) @@ -528,10
+538,32 @@ static irqreturn_t i2c_davinci_isr(int this_irq, void
*dev_id)
case DAVINCI_I2C_IVR_RDR:
if (dev->buf_len) {
- *dev->buf++ =
- davinci_i2c_read_reg(dev,
-
DAVINCI_I2C_DRR_REG);
+ *dev->buf++ = davinci_i2c_read_reg(dev,
+
DAVINCI_I2C_DRR_REG);
+ /*
+ * check if the first received byte is
message
+ * length, i.e, I2C_M_RECV_LEN
+ */
+ if (dev->buf_len == 0xffff)
+ dev->buf_len = *(dev->buf - 1) +
1;
+
dev->buf_len--;
+ /*
+ * send NACK/STOP bits BEFORE last byte
is
+ * received
+ */
+ if (dev->buf_len == 1) {
+ w = davinci_i2c_read_reg(dev,
+
DAVINCI_I2C_MDR_REG);
+ w |= DAVINCI_I2C_MDR_NACK;
+ davinci_i2c_write_reg(dev,
+
DAVINCI_I2C_MDR_REG, w);
+
+ w |= DAVINCI_I2C_MDR_STP;
+ davinci_i2c_write_reg(dev,
+
DAVINCI_I2C_MDR_REG, w);
+ }
+
if (dev->buf_len)
continue;
--
1.7.9.5
------------------------------
_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source at linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
End of Davinci-linux-open-source Digest, Vol 101, Issue 1
*********************************************************