1*c66ec88fSEmmanuel VadotXilinx Slave Serial SPI FPGA Manager 2*c66ec88fSEmmanuel Vadot 3*c66ec88fSEmmanuel VadotXilinx Spartan-6 and 7 Series FPGAs support a method of loading the 4*c66ec88fSEmmanuel Vadotbitstream over what is referred to as "slave serial" interface. 5*c66ec88fSEmmanuel VadotThe slave serial link is not technically SPI, and might require extra 6*c66ec88fSEmmanuel Vadotcircuits in order to play nicely with other SPI slaves on the same bus. 7*c66ec88fSEmmanuel Vadot 8*c66ec88fSEmmanuel VadotSee: 9*c66ec88fSEmmanuel Vadot- https://www.xilinx.com/support/documentation/user_guides/ug380.pdf 10*c66ec88fSEmmanuel Vadot- https://www.xilinx.com/support/documentation/user_guides/ug470_7Series_Config.pdf 11*c66ec88fSEmmanuel Vadot- https://www.xilinx.com/support/documentation/application_notes/xapp583-fpga-configuration.pdf 12*c66ec88fSEmmanuel Vadot 13*c66ec88fSEmmanuel VadotRequired properties: 14*c66ec88fSEmmanuel Vadot- compatible: should contain "xlnx,fpga-slave-serial" 15*c66ec88fSEmmanuel Vadot- reg: spi chip select of the FPGA 16*c66ec88fSEmmanuel Vadot- prog_b-gpios: config pin (referred to as PROGRAM_B in the manual) 17*c66ec88fSEmmanuel Vadot- done-gpios: config status pin (referred to as DONE in the manual) 18*c66ec88fSEmmanuel Vadot 19*c66ec88fSEmmanuel VadotOptional properties: 20*c66ec88fSEmmanuel Vadot- init-b-gpios: initialization status and configuration error pin 21*c66ec88fSEmmanuel Vadot (referred to as INIT_B in the manual) 22*c66ec88fSEmmanuel Vadot 23*c66ec88fSEmmanuel VadotExample for full FPGA configuration: 24*c66ec88fSEmmanuel Vadot 25*c66ec88fSEmmanuel Vadot fpga-region0 { 26*c66ec88fSEmmanuel Vadot compatible = "fpga-region"; 27*c66ec88fSEmmanuel Vadot fpga-mgr = <&fpga_mgr_spi>; 28*c66ec88fSEmmanuel Vadot #address-cells = <0x1>; 29*c66ec88fSEmmanuel Vadot #size-cells = <0x1>; 30*c66ec88fSEmmanuel Vadot }; 31*c66ec88fSEmmanuel Vadot 32*c66ec88fSEmmanuel Vadot spi1: spi@10680 { 33*c66ec88fSEmmanuel Vadot compatible = "marvell,armada-xp-spi", "marvell,orion-spi"; 34*c66ec88fSEmmanuel Vadot pinctrl-0 = <&spi0_pins>; 35*c66ec88fSEmmanuel Vadot pinctrl-names = "default"; 36*c66ec88fSEmmanuel Vadot #address-cells = <1>; 37*c66ec88fSEmmanuel Vadot #size-cells = <0>; 38*c66ec88fSEmmanuel Vadot cell-index = <1>; 39*c66ec88fSEmmanuel Vadot interrupts = <92>; 40*c66ec88fSEmmanuel Vadot clocks = <&coreclk 0>; 41*c66ec88fSEmmanuel Vadot 42*c66ec88fSEmmanuel Vadot fpga_mgr_spi: fpga-mgr@0 { 43*c66ec88fSEmmanuel Vadot compatible = "xlnx,fpga-slave-serial"; 44*c66ec88fSEmmanuel Vadot spi-max-frequency = <60000000>; 45*c66ec88fSEmmanuel Vadot spi-cpha; 46*c66ec88fSEmmanuel Vadot reg = <0>; 47*c66ec88fSEmmanuel Vadot prog_b-gpios = <&gpio0 29 GPIO_ACTIVE_LOW>; 48*c66ec88fSEmmanuel Vadot init-b-gpios = <&gpio0 28 GPIO_ACTIVE_LOW>; 49*c66ec88fSEmmanuel Vadot done-gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>; 50*c66ec88fSEmmanuel Vadot }; 51*c66ec88fSEmmanuel Vadot }; 52