Subject: Writing to PCI Bridge in User Space - Problem

From: Steven Vacca <[email-masked]>
Date: Mon, 17 Dec 2001 14:17:22 -0500

I have a "resident" driver which reads and writes a PLX PCI Bridge
chip, which is mapped into 0x2000.0000 in MMU_init() (for the mpc860).

The driver controls an LED, attached to the PLX chip, by writing to the
one of the PLX chip regs whenever its ioctl() fops func is called.

The kernel space, of course, is mapped in at 0xc000.0000.

Immediately before executing  - execve("/sbin/init") -  in init(),
to get the app going, the kernel code can call the same func, say,
led_onOff(), that the driver's ioctl() calls to turn the LED on and OFF.
This works fine.

But when my app executes an ioctl(), and then the driver's ioctl() func
calls the same func, led_onOff(),  the LED doesn't turn ON and OFF
(doesn't do anything).  There are no addr exceptions errors.  The code
in led_onOff executes printk()'s OK.

This func, led_onOff() uses get_user() and put_user() to access the
non-kernel-space address 0x2000.0000 + PLX_reg_offset.

So, why does it work fine just before starting the app, from the non-driver
kernel code, but not from the driver's ioctl fops func?

"Thanks for your help  "
"my fellow linuxonians!"
     /
  \O/
   \/	<---- Steven
 _/\_

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/