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