Re: Providing access to kernel memory from PCI bus

From: Robert Hancock
Date: Thu Jul 10 2008 - 19:42:58 EST


darrell.holigan@xxxxxxxxx wrote:
I'm developing a PCI driver under linux to communicate with an Intel
IQ80331 which supports PCI boot. To accomplish this, the IQ80331
needs access to an image stored in the host processor's (AMCC 405GPr)
RAM.

Linux boots, sees the PCI bridge and the address translation unit on
the IQ80331 (core is held in reset) and calls the probe function my
driver which retrieves the address allocated to BAR0 and ioremaps it.
The IQ80331 implements a single BAR which provides access to ATU
registers.

From here, I can configure the IQ80331 through BAR0 to do a long jump
at boot. According to the dev manual I need to configure the outbound
window of the ATU so that it translates the jump to host memory where
my boot image is stored.

I have kmalloced kernel memory in my driver's ioctl and loaded in the
image from user space, but I do not understand the process to tell the
kernel that I want the kmalloced area available for access from PCI
devices. I assume that I must do this explicitly since allowing
unrestricted access to kernel memory from PCI space would be a
security/stabilty concern, yes? But I cannot find the proper kernel
API calls to do this.

You should likely allocate the memory that you are making available to the device using dma_alloc_coherent. That will give you a bus address that points to the memory that you can give to your device.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/