Subject: Re: VME driver problem on MVME6100

From: "Konstantin Boyanov" <[email-masked]>
Date: Fri, 26 May 2006 01:33:55 +0200

2006/5/25, Konstantin Boyanov <[email-masked]>:
>
> Hi again,
>
> The problem persist even with the new driver for 2.6 ... :(
> It is obvious that the driver cannot allocate memory for the window... It
> fails that thing called __ioremap(), whatever it might be used for:
>
> [mvme6100]# vme_setoutboundwin -h
> vme_setoutboundwin
> Usage: vme_setoutboundwin <options>
>         -w <window>     window(where 0<=window<=6)
>         -m <mode>       address mode (where
> 0=A16,1=A24,2=A32,3=A64,4=CRCSR)
>         -p <protocol>   protocol (where
> 1=SCT,2=BLT,4=MBLT,8=2eVME,0x10=2eSST)
>         -a <VME addr>   VME address
>         -d <data width> data width (8, 16, 32, 64)
>         -s <window size>        window size (where 0 < window_size <=
> 0x400000)
>         -v              Be more verbose
>         -h              Give this (short) help
>
> [mvme6100]# vme_setoutboundwin -w0 -m0 -p8 -a0x8800 -d16 -s400000 -v
> window = 0, mode = 0 protocol 0x8 vme_addr = 0x8800 data width = 16
> __ioremap(): phys addr 01000000 is RAM lr d100be34
> vmedrv: No memory for outbound window
> ioctl VME_IOCTL_SET_OUTBOUND failed.: Cannot allocate memory
>
> While searching on the web for information about __ioremap I found this:
>
> /*
>  * Remap an arbitrary physical address space into the kernel virtual
>  * address space. Needed when the kernel wants to access high addresses
>  * directly.
>  *
>
>  * NOTE! We need to allow non-page-aligned mappings too: we will obviously
>  * have to convert them into an offset in a page-aligned mapping, but the
>  * caller shouldn't need to know that small detail.
>  */
>
>
>  And another thing - people should not be using __ioremap() unless they
> have a _good_ _reason_ in their driver.  They should be using ioremap()
> instead.  __ioremap() is an architecture implementation detail which
>
> has no interface stability guarantees _at all_.
>
> How's that? So it seems that the kernel can't translate the accesses to
> the VME bus propperly. Any ideas how to fix that?
> Actually I cant figure out why configuring a single outbound window is so
> damn tough to achieve.e maybe I'm missing some crutial settings. I tried
> to set up the window attribute register, and the outbound translation offset
> register in the hope to fit in the needed size for the window, but again
> failed. I'm trying to get frustrated about that...
>
> Best regards,
> Konstantin
>
>  P.S. I forgot to say that on the target I'm booting a bare kernel with
not much functionality. Could it be that there are missing some settings for
the virtual memory management, which are crutial for the VME driver? I mean
the above message "phys addr 01000000 is RAM lr d100be34" is somehow
connected to misconfiguration (or lack of it at all) for the virtual memory
pages? That's what I can think of som late in the night...
Thank you anyways.

Best regards,
Konstantin