sam460ex, sm501 incorrect device id with kernel >=linux-2.6.39
acrux
acrux_it at libero.it
Sat Dec 3 01:48:33 EST 2011
On Mon, 28 Nov 2011 21:22:24 +0100
Anatolij Gustschin <agust at denx.de> wrote:
> On Mon, 28 Nov 2011 20:56:55 +0100
> acrux <acrux_it at libero.it> wrote:
> ...
> > it seems to be an endianess issue but i didn't find when it was
> > introduced. Really strange this kind of issue was never noticed
> > bumping from 2.6.38.x to 2.6.39.x .
>
> Look at commit bf5f0019046d596d613caf74722ba4994e153899
> (video, sm501: add I/O functions for use on powerpc).
> This is the issue, I think. Especially changes in
> include/linux/sm501.h by this commit. Since CONFIG_PPC32 is defined
> for canyonlands, ioread32be() is used to access the registers at PCI
> space which is wrong. The patch was tested on tqm5200 with sm501
> connected on localbus, so using ioread32be() worked there. Your sm502
> is on PCI bus I suppose. This issue needs to be fixed.
>
well, the commit suggested is this one:
http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=commitdiff;h=bf5f0019046d596d613caf74722ba4994e153899
This little hack fix my problem:
--- a/inlcude/linux/sm501.h 2011-12-02 01:11:04.000000000 +0100
+++ b/include/linux/sm501.h 2011-12-02 01:11:09.000000000 +0100
@@ -174,8 +174,8 @@
};
#if defined(CONFIG_PPC32)
-#define smc501_readl(addr) ioread32be((addr))
-#define smc501_writel(val, addr) iowrite32be((val), (addr))
+#define smc501_readl(addr) ioread32((addr))
+#define smc501_writel(val, addr) iowrite32((val), (addr))
#else
#define smc501_readl(addr) readl(addr)
#define smc501_writel(val, addr) writel(val, addr)
but instead, why am I obliged to read it as little endian to have the correct value?
thanks for your help,
--nico
--
GNU/Linux on Power Architecture
CRUX PPC - http://cruxppc.org/
More information about the Linuxppc-dev
mailing list