From: Wolfgang Zarre <info@essax.com>
To: Wolfgang Grandegger <wg@grandegger.com>
Cc: David Laight <David.Laight@ACULAB.COM>,
Oliver Hartkopp <socketcan@hartkopp.net>,
henrik@proconx.com, netdev@vger.kernel.org,
linux-can@vger.kernel.org, socketcan-users@lists.berlios.de,
IreneV <boir1@yandex.ru>,
Stanislav Yelenskiy <stanislavelensky@yahoo.com>,
oe@port.de, henrik@focus-sw.com
Subject: Re: [PATCH net-next v2 2/4] can: cc770: add legacy ISA bus driver for the CC770 and AN82527
Date: Wed, 11 Jan 2012 10:05:46 +0100 [thread overview]
Message-ID: <4F0D50EA.6080900@essax.com> (raw)
In-Reply-To: <4F0C8B4B.8070104@essax.com>
Hello Wolfgang,
> Hello Wolfgang,
>
> -------- Original Message --------
> Subject: Re: [PATCH net-next v2 2/4] can: cc770: add legacy ISA bus driver for the CC770 and AN82527
> From: Wolfgang Grandegger <wg@grandegger.com>
> To: info@essax.com
> Cc: David Laight <David.Laight@ACULAB.COM>, Oliver Hartkopp <socketcan@hartkopp.net>, henrik@proconx.com, netdev@vger.kernel.org, linux-can@vger.kernel.org,
> socketcan-users@lists.berlios.de, IreneV <boir1@yandex.ru>, Stanislav Yelenskiy <stanislavelensky@yahoo.com>, oe@port.de, henrik@focus-sw.com
> Date: Tue Jan 10 2012 17:23:59 GMT+0100 (CET)
>
>> Hi Wolfgang,
>>
>> On 01/10/2012 05:13 PM, Wolfgang Zarre wrote:
>>> Hello Wolfgang,
>>>
>>>> On 01/10/2012 01:41 PM, Wolfgang Zarre wrote:
>>>>> Hello David,
>>>>>>
>>>>>>> cc770_isa_port_write_reg_indirect(const struct cc770_priv *priv,
>>>>>>> int reg, u8 val)
>>>>>>> {
>>>>>>> unsigned long base = (unsigned long)priv->reg_base;
>>>>>>> + unsigned long flags;
>>>>>>>
>>>>>>> + spin_lock_irqsave(&outb_lock, flags);
>>>>>>> outb(reg, base);
>>>>>>> outb(val, base + 1);
>>>>>>> + spin_unlock_irqrestore(&outb_lock, flags);
>>>>>>
>>>>>> Is there a 'read_reg_indirect' function??
>>>>>
>>>>> Yes, there is.
>>>>>
>>>>>> If so it also needs to use the same mutex.
>>>>>
>>>>> Actually, I don't think that we have a problem with mutex
>>>>> beside that it's using just one inb() statement but having
>>>>> for sure with an interrupt between both outb() statements which
>>>>> seems to be critical for the cc770.
>>>>
>>>> But the indirect read function also sets the address register before
>>>> reading the data using inb(). This sequence should also not be
>>>> interrupted and therefore we need to synchronize. For the indirect
>>>> access of the SJA1000 we also need to add spinlocks. Wonder why nobody
>>>> complained so far.
>>>
>>> So, if I understand correct that means that inb() can be interrupted
>>> between
>>> setting the address and reading. If this is the case then yes, we need
>>> spinlock if this is not the case then IMHO we wouldn't need or am I wrong?
>>
>> I think we speak about different things. inb() cannot be interrupted but
>> outb() followed by inb(). For indirect accesses we need something like:
>>
>> /* Spinlock for cc770_isa_port_write_reg_indirect */
>> static DEFINE_SPINLOCK(cc770_isa_port_lock);
>>
>> static u8 cc770_isa_port_read_reg_indirect(const struct cc770_priv *priv,
>> int reg)
>> {
>> unsigned long base = (unsigned long)priv->reg_base;
>> unsigned long flags;
>> u8 val;
>>
>> spin_lock_irqsave(&cc770_isa_port_lock, flags);
>> outb(reg, base);
>> val = inb(base + 1);
>> spin_unlock_irqrestore(&cc770_isa_port_lock, flags);
>>
>> return val;
>> }
>>
>> static void cc770_isa_port_write_reg_indirect(const struct cc770_priv *priv,
>> int reg, u8 val)
>> {
>> unsigned long base = (unsigned long)priv->reg_base;
>> unsigned long flags;
>>
>> spin_lock_irqsave(&cc770_isa_port_lock, flags);
>> outb(reg, base);
>> outb(val, base + 1);
>> spin_unlock_irqrestore(&cc770_isa_port_lock, flags);
>> }
>>
>> Hope we are in synch now.
>>
>
> Thanks a lot. Yes, now phase locked and in synch and sorry, by mistake
> I looked at the wrong function (cc770_isa_port_read_reg) in the heat of
> the moment.
>
> Absolutely clear, there we need a spinlock definitely. I'll start another test run
> just to confirm.
>
>
Test was successful, 2.000.000 telegrams again without problems.
Here so far the patch as You suggested:
-------------------------------------------------------------------
diff --git a/drivers/net/can/cc770/cc770_isa.c b/drivers/net/can/cc770/cc770_isa.c
index 4be5fe2..adf3e45 100644
--- a/drivers/net/can/cc770/cc770_isa.c
+++ b/drivers/net/can/cc770/cc770_isa.c
@@ -110,6 +110,10 @@ MODULE_PARM_DESC(bcr, "Bus configuration register (default=0x40 [CBY])");
#define CC770_IOSIZE 0x20
#define CC770_IOSIZE_INDIRECT 0x02
+/* Spinlock for cc770_isa_port_write_reg_indirect */
+static DEFINE_SPINLOCK(cc770_isa_port_lock);
+
+
static struct platform_device *cc770_isa_devs[MAXDEV];
static u8 cc770_isa_mem_read_reg(const struct cc770_priv *priv, int reg)
@@ -138,18 +142,26 @@ static u8 cc770_isa_port_read_reg_indirect(const struct cc770_priv *priv,
int reg)
{
unsigned long base = (unsigned long)priv->reg_base;
+ unsigned long flags;
+ u8 val;
+ spin_lock_irqsave(&cc770_isa_port_lock, flags);
outb(reg, base);
- return inb(base + 1);
+ val = inb(base + 1);
+ spin_unlock_irqrestore(&cc770_isa_port_lock, flags);
+ return val;
}
static void cc770_isa_port_write_reg_indirect(const struct cc770_priv *priv,
int reg, u8 val)
{
unsigned long base = (unsigned long)priv->reg_base;
+ unsigned long flags;
+ spin_lock_irqsave(&cc770_isa_port_lock, flags);
outb(reg, base);
outb(val, base + 1);
+ spin_unlock_irqrestore(&cc770_isa_port_lock, flags);
}
static int __devinit cc770_isa_probe(struct platform_device *pdev)
-------------------------------------------------------
>> Wolfgang.
>>
>
> Wolfgang
Wolfgang
next prev parent reply other threads:[~2012-01-11 9:05 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-25 9:43 [PATCH net-next v2 0/4] can: cc770: add support for the Bosch CC770 and Intel AN82527 Wolfgang Grandegger
2011-11-25 9:43 ` [PATCH net-next v2 1/4] can: cc770: add driver core " Wolfgang Grandegger
[not found] ` <1322214204-1121-2-git-send-email-wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
2011-11-26 15:11 ` Oliver Hartkopp
2011-11-28 11:28 ` [Socketcan-users] " Marc Kleine-Budde
2011-11-28 13:52 ` Wolfgang Grandegger
[not found] ` <4ED3922A.50704-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
2011-11-28 14:01 ` Marc Kleine-Budde
2011-11-28 14:01 ` [Socketcan-users] " David Laight
2011-11-28 14:01 ` David Laight
[not found] ` <4ED3941D.3070302-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2011-11-28 14:10 ` Wolfgang Grandegger
[not found] ` <4ED3966E.7080609-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
2011-11-28 14:18 ` Marc Kleine-Budde
[not found] ` <4ED3704D.5020903-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2011-11-29 9:20 ` Wolfgang Grandegger
2011-11-25 9:43 ` [PATCH net-next v2 2/4] can: cc770: add legacy ISA bus driver for the CC770 and AN82527 Wolfgang Grandegger
[not found] ` <1322214204-1121-3-git-send-email-wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
2011-11-26 14:59 ` Oliver Hartkopp
2011-11-28 8:56 ` Wolfgang Zarre
2011-11-28 9:17 ` Wolfgang Grandegger
2011-11-28 12:03 ` Wolfgang Zarre
[not found] ` <4ED37885.8080909-PyqsHJVlJN8AvxtiuMwx3w@public.gmane.org>
2011-11-28 16:06 ` Oliver Hartkopp
[not found] ` <4ED3B198.2040308-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
2011-11-29 9:16 ` Wolfgang Grandegger
[not found] ` <4ED4A2EC.40103-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
2011-12-04 18:47 ` Wolfgang Zarre
2011-12-04 18:56 ` Wolfgang Grandegger
[not found] ` <4EDBC25D.50405-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
2011-12-06 21:08 ` Wolfgang Zarre
[not found] ` <4EDE8435.5080100-PyqsHJVlJN8AvxtiuMwx3w@public.gmane.org>
2011-12-07 13:42 ` Wolfgang Grandegger
2011-12-09 10:26 ` Wolfgang Grandegger
2011-12-11 18:33 ` Wolfgang Zarre
[not found] ` <4EE4F76E.3000506-PyqsHJVlJN8AvxtiuMwx3w@public.gmane.org>
2011-12-12 9:23 ` Wolfgang Grandegger
2011-12-12 9:23 ` Wolfgang Grandegger
[not found] ` <4EE5C824.2050704-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
2011-12-12 11:18 ` Wolfgang Zarre
2011-12-12 11:55 ` Wolfgang Grandegger
[not found] ` <4EE5EBBF.6080007-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
2011-12-21 18:32 ` Wolfgang Zarre
2011-12-22 9:37 ` Wolfgang Grandegger
[not found] ` <4EF2FA3F.3010308-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
2011-12-22 13:20 ` Wolfgang Zarre
[not found] ` <4EF32E84.1080006-PyqsHJVlJN8AvxtiuMwx3w@public.gmane.org>
2011-12-31 9:39 ` Wolfgang Zarre
2012-01-04 13:10 ` Wolfgang Grandegger
2012-01-05 3:29 ` Wolfgang Zarre
[not found] ` <4F051927.8010600-PyqsHJVlJN8AvxtiuMwx3w@public.gmane.org>
2012-01-05 11:51 ` Wolfgang Grandegger
2012-01-05 12:00 ` David Laight
2012-01-05 12:00 ` David Laight
2012-01-09 21:47 ` Wolfgang Zarre
2012-01-09 23:11 ` Marc Kleine-Budde
2012-01-10 9:30 ` Wolfgang Grandegger
2012-01-10 12:30 ` Wolfgang Zarre
2012-01-10 14:20 ` Wolfgang Grandegger
2012-01-10 14:25 ` Wolfgang Grandegger
2012-01-11 9:00 ` Wolfgang Zarre
2012-01-11 9:37 ` David Laight
2012-01-11 9:37 ` David Laight
2012-01-11 14:37 ` Wolfgang Zarre
2012-01-11 9:38 ` Marc Kleine-Budde
2012-01-11 14:42 ` Wolfgang Zarre
2012-01-11 15:02 ` Marc Kleine-Budde
2012-01-10 10:00 ` David Laight
2012-01-10 10:00 ` David Laight
2012-01-10 12:41 ` Wolfgang Zarre
2012-01-10 14:43 ` Wolfgang Grandegger
2012-01-10 14:50 ` Oliver Hartkopp
2012-01-10 16:13 ` Wolfgang Zarre
2012-01-10 16:20 ` Marc Kleine-Budde
2012-01-10 16:23 ` Wolfgang Grandegger
2012-01-10 19:02 ` Wolfgang Zarre
2012-01-11 9:05 ` Wolfgang Zarre [this message]
2012-01-11 9:31 ` Marc Kleine-Budde
2012-01-10 11:41 ` Henrik Maier
2012-01-10 11:59 ` Wolfgang Grandegger
2012-01-10 12:43 ` Wolfgang Zarre
2012-01-05 19:45 ` Oliver Hartkopp
2012-01-05 20:48 ` Oliver Hartkopp
2011-12-23 11:32 ` peak_pci: device channels chained list issue Grosjean Stephane
2011-12-23 12:11 ` peak_pci: device channels chained list issue (cont.) Grosjean Stephane
2012-01-31 22:12 ` Marc Kleine-Budde
2011-11-28 12:09 ` [PATCH net-next v2 2/4] can: cc770: add legacy ISA bus driver for the CC770 and AN82527 Marc Kleine-Budde
[not found] ` <4ED379F3.1070206-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2011-11-28 13:59 ` Wolfgang Grandegger
2011-11-28 14:03 ` David Laight
2011-11-28 14:03 ` David Laight
[not found] ` <AE90C24D6B3A694183C094C60CF0A2F6D8AEE9-CgBM+Bx2aUAnGFn1LkZF6NBPR1lH4CV8@public.gmane.org>
2011-11-28 14:09 ` Marc Kleine-Budde
[not found] ` <4ED3960F.4040508-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2011-11-28 15:10 ` Wolfgang Grandegger
2011-11-25 9:43 ` [PATCH net-next v2 3/4] can: cc770: add platform " Wolfgang Grandegger
2011-11-25 9:43 ` Wolfgang Grandegger
2011-11-25 9:43 ` [PATCH net-next v2 4/4] powerpc: tqm8548/tqm8xx: add and update CAN device nodes Wolfgang Grandegger
2011-11-25 9:43 ` Wolfgang Grandegger
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=4F0D50EA.6080900@essax.com \
--to=info@essax.com \
--cc=David.Laight@ACULAB.COM \
--cc=boir1@yandex.ru \
--cc=henrik@focus-sw.com \
--cc=henrik@proconx.com \
--cc=linux-can@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=oe@port.de \
--cc=socketcan-users@lists.berlios.de \
--cc=socketcan@hartkopp.net \
--cc=stanislavelensky@yahoo.com \
--cc=wg@grandegger.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.