From: Jean Delvare <jdelvare@suse.de>
To: Ben Skeggs <bskeggs@redhat.com>
Cc: dri-devel@lists.freedesktop.org
Subject: i2c handling in nouveau driver
Date: Wed, 11 Jan 2012 11:17:55 +0100 [thread overview]
Message-ID: <201201111117.55699.jdelvare@suse.de> (raw)
Hi Ben,
I see in commit f553b79c03f0dbd52f6f03abe8233a2bef8cbd0d that you just
changed the nouveau driver to use an internal i2c bit-banging
implementation instead of i2c-algo-bit. Let me say here publicly that I
disapprove this change. I believe this is a move in the wrong direction.
Just because doing so fixed one bug you were seeing doesn't make it
right.
If i2c-algo-bit has problems, please report them to the maintainer (i.e.
me) and have them fixed. If you have problems with it, others may do as
well. If everyone stops using common pieces of code as soon as they have
a problem, we will end up with a lot of duplicated code in the kernel,
which is bad in many respects.
In the commit message, you complain about the use of cond_resched() in
i2c-algo-bit. You might as well be right, maybe it should be removed.
It's been there pretty much forever (February 2002 at least) and while I
can understand why it was put there, I would agree it isn't necessarily
a good idea. Did you try removing it to see if it solved your problem?
There is also a call to yield() somewhere else in the i2c-algo-bit
driver. I remember having a discussion about it long ago, someone
proposed to change it to cond_resched(), but it never happened. I admit
I don't know the difference between cond_resched() and yield() so I
can't really make a decision until someone explains it to me.
I see that your reimplementation uses:
#define T_HOLD 5000
which basically means you're running the I2C bus at ~100 kHz, while the
original code had:
port->bit.udelay = 40;
which basically ran the bus at ~12.5 kHz, i.e. only a tad faster than
the low limit allowed by SMBus. I warned some times ago that such low
speeds could be problematic:
http://lists.freedesktop.org/archives/dri-devel/2011-October/015512.html
I even posted a patch:
http://lists.freedesktop.org/archives/dri-devel/2011-October/015504.html
Despite positive comments from the i915 and radeon driver maintainers,
it was never applied. Did you try lowering the udelay value with i2c-
algo-bit to see if it would solve your problem?
David, any reason why you did not pick this patch? Should I resend it?
In a split form maybe?
Ben, again, I would really have appreciated if you had contacted me
while investigating your NVS 300 issue, instead of silently running away
from i2c-algo-bit. If the code is broken, let's fix it for the benefit
of all users. Duplicating code around isn't going to help any.
Thanks,
--
Jean Delvare
Suse L3
next reply other threads:[~2012-01-11 10:17 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-11 10:17 Jean Delvare [this message]
2012-01-11 12:40 ` i2c handling in nouveau driver Ben Skeggs
2012-03-15 21:42 ` Jean Delvare
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=201201111117.55699.jdelvare@suse.de \
--to=jdelvare@suse.de \
--cc=bskeggs@redhat.com \
--cc=dri-devel@lists.freedesktop.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox