Thread (24 messages) 24 messages, 4 authors, 2014-06-11

[PATCH v7 3/5] misc: fuse: Add efuse driver for Tegra

From: pdeschrijver@nvidia.com (Peter De Schrijver)
Date: 2014-06-11 16:19:09
Also in: linux-tegra, lkml

On Wed, Jun 11, 2014 at 05:58:28PM +0200, Stephen Warren wrote:
On 06/11/2014 09:25 AM, Peter De Schrijver wrote:
quoted
On Wed, Jun 11, 2014 at 02:47:31PM +0200, Mikko Perttunen wrote:
quoted
On 05/06/14 16:09, Peter De Schrijver wrote:
...
quoted
+int tegra_fuse_readl(u32 offset, u32 *val)
+{
+       if (!fuse_readl)
+               return -ENXIO;
+
+       *val = fuse_readl(offset);
+
+       return 0;
+}
+
-EPROBE_DEFER would be a better error value, so that drivers can work 
Ok.
quoted
even if they are initially probed before the fuse driver. Of course, if 
the fuse initialization is moved into machine init then this is a non-issue.
The exported function will always be initialized later because on Tegra20 it
requires APB DMA to be available. If you read the fuses directly, the system
sometimes hangs.
That's not true in the current code. IIRC, the bug was that *if* an APB
DMA access to anything and a CPU access to the fuses happen at the same
time, then there can be a hang. As such, the current fuse code accesses
the fuses directly (without potential for a hang) if the APB DMA driver
is not available, but once the driver becomes available, it reads the
fuses through DMA instead. Does the new code not do that?
I'm not so sure about that. I have seen the hang when dumping all fuses using
sysfs in an otherwise idle system booted from initrd. I don't think there
should be any APB DMA activity going on then?

Cheers,

Peter.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help