I own a small FPGA Board by Avnet with a Spartan 3A FPGA on it. The board is nice, but unfortunately, the flash chips on the board aren't on the JTAG chain. Instead, there is a small PSoC microcontroller that lets you programm the flashes via UART. There is a Windows tool to perform that programming which is shipped with the board. Here's what I did to program the SPI configuration flash on Linux.
Via the FPGALibre site, I found a link to a tool called ASTriAEKiPro, which allows me to write to the FPGA SPI Configuration flash via UART and the PSoC microcontroller.
Compiling the tool is as simple as running this command:
$ make
To erase the SPI configuration flash, I used this command:
$ ./astriaekipro -p /dev/ttyACM0 -e
Avnet Spartan 3A Eval Kit Programmer v1.2.1
Copyright (c) 2009 Salvador E. Tropea
Copyright (c) 2009 Instituto Nacional de Tecnolog�a Industrial
Embedded BPI server provided by Avnet Inc. http://www.em.avnet.com/
Erasing the memory, be patient (>1 minute) ...
To write a configuration to the SPI flash:
$ ./astriaekipro -p /dev/ttyACM0 -w \
-b ~/sandbox/avnet_lpc/projects/13.3/avnet_lpc/avnet_i2c.bit
Avnet Spartan 3A Eval Kit Programmer v1.2.1
Copyright (c) 2009 Salvador E. Tropea
Copyright (c) 2009 Instituto Nacional de Tecnolog�a Industrial
Embedded BPI server provided by Avnet Inc. http://www.em.avnet.com/
Writing 235820 bytes to the serial flash, offset 0x0000000
Erasing: sector 3 (100.00 %)
Bytes written: 235820 (100.00 %)
All written!