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.