GPMC Equivalent for BeagleV Fire?

Hi all,

I have a BBB project which makes extensive use of the AM3359’s GPMC peripheral.

I’m trying to assess what it would take to port it to the BeagleV Fire. Is there an equivalent way to control external memory through the P8/P9 headers? Precise pin compatibility is not a requirement.

Tangentially, is there a technical reference manual available for the MPFS025T? The docs I can find online are only a few hundred pages long, and only cover properly powering the package. Not anywhere close to the level of depth that the AM3359’s 5000 page TRM with programming models and notes on each peripheral register.

Thanks in advance,
Fred

The P8/P9 pins are generally connected to the FPGA fabric, which means you can pretty much create any sort of external memory interface you want.

Would that require me to write a custom device driver, though?

What the GPMC offered was the ability to give some address space over to an external device, and then simply mmap() it from inside Linux.

GPMC is TI ip, with a specific driver… memory « drivers - kernel/git/torvalds/linux.git - Linux kernel source tree

Your options, are really emulate GPMC in fabric, find a VHDL/Verlog source for any of these options… or write a new driver…

Regards,

Interesting. So, in this case I would have to implement the device against the device driver :slight_smile:

Thanks for the info.

I see here that some of the P8/P9 pins have “HSIO” in their functionality description. Does that mean I can use the GPIO as a PCIe lane?

You are describing UIO. To use this you need to craft an entry in the device tree, but you don’t need to write any drivers. You use device-tree to tell Linux where your bus lives in physical address space and tie it to the uio device driver. Then your user code can mmap() the /dev/uioX device and (assuming your FPGA logic is properly bridging between the internal buses and your external bus) the bus transactions will show up on the I/O pins.

https://www.kernel.org/doc/html/latest/driver-api/uio-howto.html

1 Like

Very interesting. I didn’t realize UIO was that flexible. Thanks for the info!

That’s why upstream/ti doesn’t like uio… :wink: it’s just too powerful…

Regards,

1 Like

The HSIOs are not fast enough for PCIe. You need to use the tranceivers signal pairs for PCIe. There are two pairs you can use on the SYZYGY connector for PCIe.

…but it’s WAY better than straight-up mmap()'ing /dev/mem as root!!! :slight_smile: