- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi everyone,
I am looking for specifications for the Crystal Beach DMA controller. So far I only found the register specifications in the Xeon Processor Data sheet.
I've got a Ivy Bridge machine: Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz running on an Intel Corporation C600/X79 series chipset.
We want to build a DMA driver for our research operating system (non Linux/Windows/solaris/bsd based). So I am basically looking for a specification to the following device i.e. how to setup the descriptor chains etc.
Intel Corporation Xeon E5 v2/Core i7 Crystal Beach DMA Channel 0 (rev 04)
Thanks,
Reto
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I found some information for you:
1) Linux* driver: http://www.intel.com/support/network/adapter/pro100/sb/CS-023725.htm
2) Chipset specification: http://www.intel.com/content/dam/www/public/us/en/documents/datasheets/c600-series-chipset-datasheet.pdf
Hope that it helps, -Thai
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Fuwen Z. wrote:
1. What is this device used for? Normally, NICs, HDDs all have there independent bus mastering DMA engine. so what is this DMA engine intended for?
I have recently implemented a basic driver for our research operating system. However it's state is not complete and a bit more information would be useful.
What I have experienced so far, this device can be used for Memory-Memory transfers i.e. offloading the CPU memcpy. It also supports system memory to MMIO but not the other way round (which I cannot understand why)
Fuwen Z. wrote:
2. Can it be used to transfer data between memory locations? Can it address 32 bit address or 64 bit address
Yes, you can do various kind of transfers like xor, memcpy etc... The addresses used are 64 bit.
I haven't got any good documentation about this. The Xeon Processor specification describes the registers. If you want to have a look at the functionality I recommend the linux driver for now. (included in the recent Linux Kernel)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Sample code to exercise the ioat engine is in the last place you'd look, the driver. There's a self-test routine which is a
perfect example of synchronous IO. http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/dma/ioat/dma.c#n819
Just use dma_request_channel to get a chan like so
{ dma_cap_mask_t mask; struct dma_chan *mychan; dma_cap_zero(mask); dma_cap_set(DMA_MEMCPY, mask); printk(KERN_INFO "requesting dma channel\n"); mychan = dma_request_channel(mask, NULL, NULL); if (!mychan) { info("no channel available\n"); goto out; } printk(KERN_INFO "got channel %d!\n", mychan->chan_id); //do dma dma_release_channel(mychan); }
I hope this helps, I spent a lot of time in the dark on this :). DMA from iomem doesn't work for me, crashes the ioat driver.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page