I have a custom peripheral that works using standalone code, but when using the same function from Linux it does not work.
One symptom of failure is that the code issues a segmentation fault (segfault).
This is a Linux programming issue not specific to Zynq devices.
The solution is to use mmap (usually better suited for debugging) to access the memory region belonging to the peripheral, or to write the complete Linux device driver for the peripheral.
For the latter, an example exists for how to create a Linux device driver, based on the Zynq DMA and its device driver. It is available on the wiki: http://wiki.xilinx.com/zynq-linux-pl330-dma