142 SPI flash raid controller

142 : SPI flash raid controller

Design render
  • Author: Kobi Moneh
  • Description: A simple SPI flash controller that allow 2 hosts to control 2 flashes with address based routing
  • GitHub repository
  • Open in 3D viewer
  • Clock: 50000000 Hz

Flash RAID Controller

A dual SPI flash controller ASIC that acts between hosts and flash memory chips, providing address-based routing and runtime configuration for flash redundancy and load balancing.

How it works

The Flash RAID Controller sits transparently between SPI hosts and two SPI flash chips, intelligently routing read operations based on programmable address ranges while maintaining complete SPI protocol compatibility.

Key Features
  • Dual Host Support: Accepts SPI commands from either main or secondary host interfaces
  • Dual Flash Routing: Routes operations to main flash, secondary flash, or both simultaneously
  • Address Range Detection: Programmable 24-bit address ranges determine flash selection for read operations
  • Runtime Configuration: SPI management interface allows real-time configuration changes
  • Transaction Safety: All switching operations are transaction-safe to prevent data corruption
Operating Modes
  1. MAIN Mode: All operations route to main flash only (single flash operation)
  2. SECONDARY Mode: All operations route to secondary flash only (failover operation)
  3. SHARE Mode: Both flashes receive identical commands, MISO selection based on address ranges
Address Range Routing

In SHARE mode, the controller analyzes SPI read commands (0x03, 0x0B) and compares the 24-bit address against two programmable ranges:

  • Range 0: Configurable start/end addresses → selectable flash (main or secondary)
  • Range 1: Configurable start/end addresses → selectable flash (main or secondary)
  • Default: Addresses outside ranges use default flash selection

Write operations always use the default flash selection to prevent data corruption from misconfigured ranges.

Management Interface

A dedicated SPI slave interface provides runtime configuration through 14 registers (0x00-0x0D):

  • Address range configuration (start/end for each range)
  • Mode control (MAIN/SECONDARY/SHARE)
  • Range enable/disable and flash selection
  • Host selection (main/secondary)
  • Status monitoring

The management interface uses a 14-register map accessed via SPI commands 0x02 (write) and 0x03 (read):

Address Register R/W Description Default
0x00 ADDR0_START_H R/W Range 0 Start Address [23:16] 0x00
0x01 ADDR0_START_M R/W Range 0 Start Address [15:8] 0x00
0x02 ADDR0_START_L R/W Range 0 Start Address [7:0] 0x00
0x03 ADDR0_END_H R/W Range 0 End Address [23:16] 0xFF
0x04 ADDR0_END_M R/W Range 0 End Address [15:8] 0xFF
0x05 ADDR0_END_L R/W Range 0 End Address [7:0] 0xFF
0x06 ADDR1_START_H R/W Range 1 Start Address [23:16] 0x00
0x07 ADDR1_START_M R/W Range 1 Start Address [15:8] 0x00
0x08 ADDR1_START_L R/W Range 1 Start Address [7:0] 0x00
0x09 ADDR1_END_H R/W Range 1 End Address [23:16] 0xFF
0x0A ADDR1_END_M R/W Range 1 End Address [15:8] 0xFF
0x0B ADDR1_END_L R/W Range 1 End Address [7:0] 0xFF
0x0C CONTROL_REG R/W Control Register 0x00
0x0D STATUS_REG R Status Register 0x00
Control Register (0x0C) Bit Definitions
  • Bits [1:0]: Flash Mode
    • 00: MAIN - Only main flash active
    • 01: SECONDARY - Only secondary flash active
    • 10: SHARE - Both flashes active, address-based MISO selection
    • 11: Reserved
  • Bit [2]: Range 0 Enable (0=disabled, 1=enabled)
  • Bit [3]: Range 1 Enable (0=disabled, 1=enabled)
  • Bit [4]: Range 0 Flash Select (0=main flash, 1=secondary flash)
  • Bit [5]: Range 1 Flash Select (0=main flash, 1=secondary flash)
  • Bit [6]: Host Select (0=main host, 1=secondary host)
  • Bit [7]: Reserved
Status Register (0x0D) Bit Definitions
  • Bit [0]: SPI Transaction Active (management interface busy)
  • Bit [1]: Last Command was Read (0x03 detected)
  • Bit [2]: Last Command was Write (0x02 detected)
  • Bits [7:3]: Reserved
SPI Protocol
  • Write Command: 0x02 [Address] [Data]
  • Read Command: 0x03 [Address] → [Data]
  • SPI Mode: Mode 0 (CPOL=0, CPHA=0)
  • Clock Speed: Up to 1 MHz recommended

How to test

Basic Functionality Test
  1. Connect Hardware: Wire SPI host, two SPI flash chips, and management controller according to pinout
  2. Default Operation: Power on - controller defaults to MAIN mode routing all operations to main flash
  3. Verify Passthrough: Read/write operations from host should work transparently through main flash
Advanced Configuration Test
  1. Management Setup: Connect SPI master to management interface (pins: mgmt_sclk, mgmt_cs_n, mgmt_mosi, mgmt_miso)

  2. Configure Address Ranges:

    # Example: Split 16MB flash - first 8MB to main, second 8MB to secondary
    Write 0x00-0x02: 0x00, 0x00, 0x00  (Range0 start: 0x000000)
    Write 0x03-0x05: 0x7F, 0xFF, 0xFF  (Range0 end: 0x7FFFFF) 
    Write 0x06-0x08: 0x80, 0x00, 0x00  (Range1 start: 0x800000)
    Write 0x09-0x0B: 0xFF, 0xFF, 0xFF  (Range1 end: 0xFFFFFF)
    Write 0x0C: 0x2E                    (SHARE mode + both ranges enabled + Range1→secondary)
    
  3. Test Address Routing:

    • Read from 0x400000 → should return data from main flash
    • Read from 0x900000 → should return data from secondary flash
Host Switching Test
  1. Configure Secondary Host: Connect second SPI host to secondary interface
  2. Switch Host: Use management interface to set bit 6 of control register (0x0C)
  3. Verify Switching: Operations from secondary host should now control the flashes

External hardware

Required Components
  1. SPI Flash Chips (2x):

    • JEDEC-compatible SPI NOR flash (e.g., W25Q128, MX25L12835E)
    • Minimum 16MB (128Mbit) recommended for address range testing
    • 3.3V operation, SPI Mode 0 (CPOL=0, CPHA=0)
  2. SPI Host Controller:

    • Microcontroller with SPI master capability (e.g., Arduino, Raspberry Pi)
    • Or dedicated SPI host device
    • 3.3V I/O levels
  3. Management Controller (Optional but recommended):

    • Second SPI master for runtime configuration
    • Can be same microcontroller with multiple SPI interfaces
    • Or separate microcontroller/SPI bridge device
Wiring Connections

Main Host Interface: ui[0] (main_host_sclk) → Host SPI Clock ui[1] (main_host_cs_n) → Host SPI Chip Select# ui[2] (main_host_mosi) → Host SPI MOSI (Data Out) uo[0] (main_host_miso) → Host SPI MISO (Data In)

Secondary Host Interface: ui[3] (secondary_host_sclk) → Secondary Host SPI Clock ui[4] (secondary_host_cs_n) → Secondary Host SPI Chip Select# ui[5] (secondary_host_mosi) → Secondary Host SPI MOSI (Data Out) uo[1] (secondary_host_miso) → Secondary Host SPI MISO (Data In)

Management Interface: ui[6] (mgmt_sclk) → Management SPI Clock ui[7] (mgmt_cs_n) → Management SPI Chip Select# uio[0] (mgmt_mosi) → Management SPI MOSI (Data Out) uo[2] (mgmt_miso) → Management SPI MISO (Data In)

Main Flash Connection: uo[3] (main_flash_sclk) → Main Flash SPI Clock uo[4] (main_flash_cs_n) → Main Flash SPI Chip Select# uo[5] (main_flash_mosi) → Main Flash SPI MOSI (Data In) uio[1] (main_flash_miso) → Main Flash SPI MISO (Data Out)

Secondary Flash Connection: uo[6] (secondary_flash_sclk) → Secondary Flash SPI Clock uo[7] (secondary_flash_cs_n) → Secondary Flash SPI Chip Select# uio[3] (secondary_flash_mosi) → Secondary Flash SPI MOSI (Data In) uio[2] (secondary_flash_miso) → Secondary Flash SPI MISO (Data Out) uio[4] (secondary_flash_wp_n) → Secondary Flash Write Protect# (tied high)

Example Test Setup

A complete test setup might include:

  • MCU as primary host and management controller, can have additional host to act as secondary
  • Two 128Mbit SPI flash chips (different manufacturers for diversity testing)
  • Logic analyzer connected to monitor all SPI buses
  • LED indicators for visual status feedback
  • Push buttons for manual mode switching tests

IO

#InputOutputBidirectional
0main_host_sclkmain_host_misomgmt_mosi
1main_host_cs_nsecondary_host_misomain_flash_miso
2main_host_mosimgmt_misosecondary_flash_miso
3secondary_host_sclkmain_flash_sclksecondary_flash_mosi
4secondary_host_cs_nmain_flash_cs_nsecondary_flash_wp_n
5secondary_host_mosimain_flash_mosi
6mgmt_sclksecondary_flash_sclk
7mgmt_cs_nsecondary_flash_cs_n

Chip location

Controller Mux Mux Mux Mux Mux Mux Mux Mux Mux Analog Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Analog Mux Mux Mux Mux Analog Mux Mux Mux Mux Mux Mux tt_um_chip_rom (Chip ROM) tt_um_factory_test (Tiny Tapeout Factory Test) tt_um_oscillating_bones (Oscillating Bones) tt_um_rebelmike_incrementer (Incrementer) tt_um_rebeccargb_tt09ball_gdsart (TT09Ball GDS Art) tt_um_tt_tinyQV (TinyQV 'Asteroids' - Crowdsourced Risc-V SoC) tt_um_DalinEM_asic_1 (ASIC) tt_um_urish_simon (Simon Says memory game) tt_um_rburt16_bias_generator (Bias Generator) tt_um_librelane3_test (Tiny Tapeout LibreLane 3 Test) tt_um_10_vga_crossyroad (Crossyroad) tt_um_rebeccargb_universal_decoder (Universal Binary to Segment Decoder) tt_um_rebeccargb_hardware_utf8 (Hardware UTF Encoder/Decoder) tt_um_rebeccargb_intercal_alu (INTERCAL ALU) tt_um_rebeccargb_dipped (Densely Packed Decimal) tt_um_rebeccargb_styler (Styler) tt_um_rebeccargb_vga_timing_experiments (VGA Timing Experiments) tt_um_rebeccargb_colorbars (Color Bars) tt_um_rebeccargb_vga_pride (VGA Pride) tt_um_cw_vref (Current-Mode Bandgap Reference) tt_um_tinytapeout_logo_screensaver (VGA Screensaver with Tiny Tapeout Logo) tt_um_rburt16_opamp_3stage (OpAmp 3stage) tt_um_gamepad_pmod_demo (Gamepad Pmod Demo) tt_um_micro_tiles_container (Micro tile container) tt_um_virantha_enigma (Enigma - 52-bit Key Length) tt_um_jamesrosssharp_1bitam (1bit_am_sdr) tt_um_jamesrosssharp_tiny1bitam (Tiny 1-bit AM Radio) tt_um_MichaelBell_rle_vga (RLE Video Player) tt_um_MichaelBell_mandelbrot (VGA Mandelbrot) tt_um_murmann_group (Decimation Filter for Incremental and Regular Delta-Sigma Modulators) tt_um_betz_morse_keyer (Morse Code Keyer) tt_um_urish_giant_ringosc (Giant Ring Oscillator (3853 inverters)) tt_um_tiny_pll (Tiny PLL) tt_um_tc503_countdown_timer (Countdown Timer) tt_um_richardgonzalez_ped_traff_light (Pedestrian Traffic Light) tt_um_analog_factory_test (TT08 Analog Factory Test) tt_um_alexandercoabad_mixedsignal (mixedsignal) tt_um_tgrillz_sixSidedDie (Six Sided Die) tt_um_mattvenn_analog_ring_osc (Ring Oscillators) tt_um_vga_clock (VGA clock) tt_um_mattvenn_r2r_dac_3v3 (Analog 8 bit 3.3v R2R DAC) tt_um_mattvenn_spi_test (SPI test) tt_um_quarren42_demoscene_top (asic design is my passion) tt_um_micro_tiles_container_group2 (Micro tile container (group 2)) tt_um_z2a_rgb_mixer (RGB Mixer demo) tt_um_frequency_counter (Frequency counter) tt_um_urish_sic1 (SIC-1 8-bit SUBLEQ Single Instruction Computer) tt_um_tobi_mckellar_top (Capacitive Touch Sensor) tt_um_log_afpm (16-bit Logarithmic Approximate Floating Point Multiplier) tt_um_uwasic_dinogame (UW ASIC - Optimized Dino) tt_um_ece298a_8_bit_cpu_top (8-Bit CPU) tt_um_tqv_peripheral_harness (Rotary Encoder Peripheral) tt_um_led_matrix_driver (SPI LED Matrix Driver) tt_um_2048_vga_game (2048 sliding tile puzzle game (VGA)) tt_um_mac (MAC) tt_um_dpmunit (DPM_Unit) tt_um_nitelich_riscyjr (RISCY Jr.) tt_um_nitelich_conway (Conway's GoL) tt_um_pwen (Pulse Width Encoder) tt_um_mcs4_cpu (MCS-4 4004 CPU) tt_um_mbist (Design of SRAM BIST) tt_um_weighted_majority (Weighted Majority Voter / Trend Detector) tt_um_brandonramos_VGA_Pong_with_NES_Controllers (VGA Pong with NES Controllers) tt_um_brandonramos_opamp_ladder (2-bit Flash ADC) tt_um_NE567Mixer28 (OTA folded cascode) tt_um_acidonitroso_programmable_threshold_voltage_sensor (Programmable threshold voltage sensor) tt_um_DAC1 (tt_um_DAC1) tt_um_trivium_stream_processor (Trivium Stream Cipher) tt_um_analog_example (Digital OTA) tt_um_sortaALUAriaMitra (Sorta 4-Bit ALU) tt_um_RoyTr16 (Connect Four VGA) tt_um_jnw_wulffern (JNW-TEMP) tt_um_serdes (Secure SERDES with Integrated FIR Filtering) tt_um_limpix31_r0 (VGA Human Reaction Meter) tt_um_torurstrom_async_lock (Asynchronous Locking Unit) tt_um_galaguna_PostSys (Post's Machine CPU Based) tt_um_edwintorok (Rounding error) tt_um_td4 (tt-td04) tt_um_snn (Reward implemented Spiking Neural Network) tt_um_matrag_chirp_top (Tiny Tapeout Chirp Modulator) tt_um_sha256_processor_dvirdc (SHA-256 Processor) tt_um_pchri03_levenshtein (Fuzzy Search Engine) tt_um_AriaMitraClock (12 Hour Clock (with AM and PM)) tt_um_swangust (posit8_add) tt_um_DelosReyesJordan_HDL (Reaction Time Test) tt_um_upalermo_simple_analog_circuit (Simple Analog Circuit) tt_um_swangust2 (posit8_mul) tt_um_thexeno_rgbw_controller (RGBW Color Processor) tt_um_top_layer (Spike Detection and Classification System) tt_um_Alida_DutyCycleMeter (Duty Cycle Meter) tt_um_dco (Digitally Controlled Oscillator) tt_um_8bitalu (8-bit Pipelined ALU) tt_um_resfuzzy (resfuzzy) tt_um_javibajocero_top (MarcoPolo) tt_um_Scimia_oscillator_tester (Oscillator tester) tt_um_ag_priority_encoder_parity_checker (Priority Encoder with Parity Checker) tt_um_tnt_mosbius (tnt's variant of SKY130 mini-MOSbius) tt_um_program_counter_top_level (Test Design 1) tt_um_subdiduntil2_mixed_signal_classifier (Mixed-signal Classifier) tt_um_dac_test3v3 (Analog 8 bit 3.3v R2R DAC) tt_um_LPCAS_TP1 ( LPCAS_TP1 ) tt_um_regfield (Register Field) tt_um_delaychain (Delay Chain) tt_um_tdctest_container (Micro tile container) tt_um_spacewar (Spacewar) tt_um_Enhanced_pll (Enhance PLL) tt_um_romless_cordic_engine (ROM-less Cordic Engine) tt_um_ev_motor_control (PLC Based Electric Vehicle Motor Control System) tt_um_plc_prg (PLC-PRG) tt_um_kishorenetheti_tt16_mips (8-bit MIPS Single Cycle Processor) tt_um_snn_core (Adaptive Leaky Integrate-and-Fire spiking neuron core for edge AI) tt_um_myprocessor (8-bit Custom Processor) tt_um_sjsu (SJSU vga demo) tt_um_vedic_4x4 (Vedic 4x4 Multiplier) tt_um_braun_mult (8x8 Braun Array Multiplier) tt_um_r2r_dac (4-bit R2R DAC) tt_um_stochastic_integrator_tt9_CL123abc (Stochastic Integrator) tt_um_uart (UART Controller with FIFO and Interrupts) tt_um_lfsr_stevej (Linear Feedback Shift Register) tt_um_FFT_engine (FFT Engine) tt_um_tpu (Tiny Tapeout Tensor Processing Unit) tt_um_tt_tinyQVb (TinyQV 'Berzerk' - Crowdsourced Risc-V SoC) tt_um_IZ_RG_22 (IZ_RG_22) tt_um_32_bit_fp_ALU_S_M (32-bit floating point ALU) tt_um_AriaMitraGames (Games (Tic Tac Toe and Rock Paper Scissors)) tt_um_sc_bipolar_qif_neuron (Stochastic Computing based QIF model neuron) tt_um_mac_spst_tiny (Low Power and Enhanced Speed Multiplier, Accumulator with SPST Adder) tt_um_kb2ghz_xalu (4-bit minicomputer ALU) tt_um_emmersonv_tiq_adc (3 Bit TIQ ADC) tt_um_simonsays (Simon Says) tt_um_BNN (8-bit Binary Neural Network) tt_um_anweiteck_2stageCMOSOpAmp (2 Stage CMOS Op Amp) tt_um_6502 (Simplified 6502 Processor) tt_um_swangust3 (posit8_div) tt_um_jonathan_thing_vga (VGA-Video-Player) tt_um_wokwi_412635532198550529 (ttsky-pettit-wokproc-trainer) tt_um_vga_hello_world (VGA HELLO WORLD) tt_um_jyblue1001_pll (Analog PLL) tt_um_BryanKuang_mac_peripheral (8-bit Multiply-Accumulate (MAC) with 2-Cycle Serial Interface) tt_um_rebeccargb_tt09ball_screensaver (TT09Ball VGA Screensaver) tt_um_openfpga22 (Open FGPA 2x2 design) tt_um_andyshor_demux (Demux) tt_um_flash_raid_controller (SPI flash raid controller) tt_um_jonnor_pdm_microphone (PDM microphone) tt_um_digital_playground (Sky130 Digital Playground) tt_um_mod6_counter (Mod-6 Counter) tt_um_BMSCE_T2 (Choreo8) tt_um_Richard28277 (4-bit ALU) tt_um_shuangyu_top (Calculator) tt_um_wokwi_441382314812372993 (Sumador/restador de 4 bits) tt_um_TensorFlowE (TensorFlowE) tt_um_wokwi_441378095886546945 (7SDSC) tt_um_wokwi_440004235377529857 (Latched 4-bits adder) tt_um_dlmiles_tqvph_i2c (TinyQV I2C Controller Device) tt_um_markgarnold_pdp8 (Serial PDP8) tt_um_wokwi_441564414591667201 (tt-parity-detector) tt_um_vga_glyph_mode (VGA Glyph Mode) tt_um_toivoh_pwl_synth (PiecewiseOrionSynth Deluxe) tt_um_minirisc (MiniRISC-FSM) tt_um_wokwi_438920793944579073 (Multiple digital design structures) tt_um_sleepwell (Sleep Well) tt_um_lcd_controller_Andres078 (LCD_controller) tt_um_SummerTT_HDL (SJSU Summer Project: Game of Life) tt_um_chrishtet_LIF (Leaky Integrate and Fire Neuron) tt_um_diff (ttsky25_EpitaXC) tt_um_htfab_split_flops (Split Flops) tt_um_alu_4bit_wrapper (4-bit ALU with Flags) tt_um_tnt_rf_test (TTSKY25A Register File Test) tt_um_mosbius (mini mosbius) tt_um_robot_controller_top_module (AR Chip) tt_um_flummer_ltc (Linear Timecode (LTC) generator) tt_um_stress_sensor (Tiny_Tapeout_2025_three_sensors) tt_um_krisjdev_manchester_baby (Manchester Baby) tt_um_mbikovitsky_audio_player (Simple audio player) tt_um_wokwi_414123795172381697 (TinySnake) tt_um_vga_example (Jabulani Ball VGA Demo ) tt_um_stochastic_addmultiply_CL123abc (Stochastic Multiplier, Adder and Self-Multiplier) tt_um_nvious_graphics (nVious Graphics) tt_um_pe_simonbju (pe) tt_um_mikael (TinyTestOut) tt_um_brent_kung (brent-kung_4) tt_um_7FM_ShadyPong (ShadyPong) tt_um_algofoogle_vga_matrix_dac (Analog VGA CSDAC experiments) tt_um_tv_b_gone (TV-B-Gone) tt_um_sjsu_vga_music (SJSU Fight Song) tt_um_fsm_haz (FSM based RISC-V Pipeline Hazard Resolver) tt_um_dma (DMA controller) tt_um_3v_inverter_SiliconeGuide (Analog Double Inverter) tt_um_rejunity_lgn_mnist (LGN hand-written digit classifier (MNIST, 16x16 pixels)) tt_um_gray_sobel (Gray scale and Sobel filter for Edge Detection) tt_um_Xgamer1999_LIF (Demonstration of Leaky integrate and Fire neuron SJSU) tt_um_dac12 (12 bit DAC) tt_um_voting_machine (Digital Voting Machine) tt_um_updown_counter (8bit_up-down_counter) tt_um_openram_top (Single Port OpenRAM Testchip) tt_um_customalu (Custom ALU) tt_um_assaify_mssf_pll (24 MHz MSSF PLL) tt_um_Maj_opamp (2-Stage OpAmp Design) tt_um_wokwi_442131619043064833 (Encoder 7 segments display) tt_um_wokwi_441835796137492481 (TESVG Binary Counter and shif register ) tt_um_combo_haz (Combinational Logic Based RISC-V Pipeline Hazard Resolver) tt_um_tx_fsm (Design and Functional Verification of Error-Correcting FIFO Buffer with SECDED and ARQ ) tt_um_will_keen_solitaire (solitaire) tt_um_rom_vga_screensaver (VGA Screensaver with embedded bitmap ROM) tt_um_13hihi31_tdc (Time to Digital Converter) tt_um_dteal_awg (Arbitrary Waveform Generator) tt_um_LIF_neuron (AFM_LIF) tt_um_rebelmike_register (Circulating register test) tt_um_MichaelBell_hs_mul (8b10b decoder and multiplier) tt_um_SNPU (random_latch) tt_um_rejunity_atari2600 (Atari 2600) tt_um_bit_serial_cpu_top (16-bit bit-serial CPU) tt_um_semaforo (semaforo) tt_um_bleeptrack_cc1 (Cross stitch Creatures #1) tt_um_bleeptrack_cc2 (Cross stitch Creatures #2) tt_um_bleeptrack_cc3 (Cross stitch Creatures #3) tt_um_bleeptrack_cc4 (Cross stitch Creatures #4) tt_um_bitty (Bitty) tt_um_spi2ws2811x16 (spi2ws2811x8) tt_um_uart_spi (UART and SPI Communication blocks with loopback) tt_um_urish_charge_pump (Dickson Charge Pump) tt_um_adc_dac_tern_alu (adc_dac_BCT_addr_ALU_STI) tt_um_sky1 (GD Sky Processor) tt_um_fifo (ASYNCHRONOUS FIFO) tt_um_TT16 (Asynchronous FIFO) tt_um_axi4lite_top (Axi4_Lite) tt_um_TT06_pwm (PWM Generator) tt_um_hack_cpu (HACK CPU) tt_um_marxkar_jtag (JTAG CONTROLLER) tt_um_cache_controller (Simple Cache Controller) tt_um_stopwatchtop (Stopwatch with 7-seg Display) tt_um_adpll (all-digital pll) tt_um_tnt_rom_test (TT09 SKY130 ROM Test) tt_um_tnt_rom_nolvt_test (TT09 SKY130 ROM Test (no LVT variant)) tt_um_wokwi_414120207283716097 (fulladder) tt_um_kianV_rv32ima_uLinux_SoC (KianV uLinux SoC) tt_um_tv_b_gone_rom (TV-B-Gone-EU) Available Available Available Available Available Available Available Available Available Available Available Available Available