Subject: Re: MPC8349ea Random Device Generator driver

From: Timur Tabi <[email-masked]>
Date: Wed, 06 Jun 2007 17:19:26 -0500

Arnd Bergmann wrote:

> The only code that is allowed to dereference an __iomem pointer is the
> implementation of readl/writel and similar functions.
> The code you gave as an example gives you a warning when building with
> make C=1 using sparse, and missed barriers.

Well, that's why I said "or something like that".

Anyway, there's a more fundamental problem.  I can't find any 64-bit versions of the 
in_be/out_be/read/write functions.  Because the registers are big-endian, then we have a 
few choices:

1) Create 64-bit versions of these functions.  Can someone tell me why they don't exist 
already?

2) Do something stupid like u32 v = in_be32(((void *) &rng->rngisr) + 4);

3) Change the struct like this:

struct sec_rng {
	__be32	rngmr_hi;
	__be32	rngmr_lo;
	u8 res1[8];
	__be32 rngdsr_hi;
	__be32 rngdsr_lo;
	__be32 rngrcr_hi;
	__be32 rngrcr_lo;
...

Comments?

-- 
Timur Tabi
Linux Kernel Developer @ Freescale