[parisc-linux] sym53c8xx driver with 64-bit kernel on C200.

Matthew Wilcox matthew@wil.cx
Sun, 4 Mar 2001 04:18:33 +0000


On Sat, Mar 03, 2001 at 08:45:03PM -0700, Ryan Bradetich wrote:
> When I run OUTL(nc_dsp,pc) through the preprocessor the statement gets
> expanded into this:
> 
> _gsc_writel(((__builtin_constant_p((__u32)((((pc))))) ? ({ __u32 __x =
> (((((pc))))); ((__u32)( (((__u32)(__x) & (__u32)0x000000ffUL) << 24) |
> (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) | (((__u32)(__x) &
> (__u32)0x00ff0000UL) >> 8) | (((__u32)(__x) & (__u32)0xff000000UL) >>
> 24) )); }) : __fswab32(((((pc))))))),(void *)((char *)np->reg +
> (((size_t) &((struct ncr_reg *)0)->nc_dsp))));

I guess you'd like this decoded?  Let's see.  `pc' is clearly not a constant,
so __builtin_constant_p returns false, so we can simplify this down to:

_gsc_writel(__fswab32(pc) ,
 (void *)((char *)np->reg + (((size_t) &((struct ncr_reg *)0)->nc_dsp))));

which leads me to ask `what value does `pc' have?'

I suspect you want to put debugging code in _gsc_writel to tell you where
you're trying to perform IO to.

My suspicion is that you're writing to the 32 bit IO space in 64-bit mode,
which is juts not going to work.

-- 
Revolutions do not require corporate support.