I would like to have all IO pins as GPIO. But you can add the other functions as alternate functions. I don't know how full the FPGA is, but a simple mux shouldn't need much logic.
From Linux the infrastructure for pin muxing is already in the kernel:
https://www.kernel.org/doc/Documentation/pinctrl.txt
The driver and FPGA backend for it should be simple, just a few registers to set the function of each pin, with GPIO as default. If there is not enough logic available to mux it to any pin, it should be at least possible to disable it and use the GPIO function for a pin. But if the FPGA has still some room, you could fill it up with as many SPI, CAN etc. modules as you want.