1*c66ec88fSEmmanuel VadotCortina systems Gemini platforms 2*c66ec88fSEmmanuel Vadot 3*c66ec88fSEmmanuel VadotThe Gemini SoC is the project name for an ARMv4 FA525-based SoC originally 4*c66ec88fSEmmanuel Vadotproduced by Storlink Semiconductor around 2005. The company was renamed 5*c66ec88fSEmmanuel Vadotlater renamed Storm Semiconductor. The chip product name is Storlink SL3516. 6*c66ec88fSEmmanuel VadotIt was derived from earlier products from Storm named SL3316 (Centroid) and 7*c66ec88fSEmmanuel VadotSL3512 (Bulverde). 8*c66ec88fSEmmanuel Vadot 9*c66ec88fSEmmanuel VadotStorm Semiconductor was acquired by Cortina Systems in 2008 and the SoC was 10*c66ec88fSEmmanuel Vadotproduced and used for NAS and similar usecases. In 2014 Cortina Systems was 11*c66ec88fSEmmanuel Vadotin turn acquired by Inphi, who seem to have discontinued this product family. 12*c66ec88fSEmmanuel Vadot 13*c66ec88fSEmmanuel VadotMany of the IP blocks used in the SoC comes from Faraday Technology. 14*c66ec88fSEmmanuel Vadot 15*c66ec88fSEmmanuel VadotRequired properties (in root node): 16*c66ec88fSEmmanuel Vadot compatible = "cortina,gemini"; 17*c66ec88fSEmmanuel Vadot 18*c66ec88fSEmmanuel VadotRequired nodes: 19*c66ec88fSEmmanuel Vadot 20*c66ec88fSEmmanuel Vadot- soc: the SoC should be represented by a simple bus encompassing all the 21*c66ec88fSEmmanuel Vadot onchip devices, this is referred to as the soc bus node. 22*c66ec88fSEmmanuel Vadot 23*c66ec88fSEmmanuel Vadot- syscon: the soc bus node must have a system controller node pointing to the 24*c66ec88fSEmmanuel Vadot global control registers, with the compatible string 25*c66ec88fSEmmanuel Vadot "cortina,gemini-syscon", "syscon"; 26*c66ec88fSEmmanuel Vadot 27*c66ec88fSEmmanuel Vadot Required properties on the syscon: 28*c66ec88fSEmmanuel Vadot - reg: syscon register location and size. 29*c66ec88fSEmmanuel Vadot - #clock-cells: should be set to <1> - the system controller is also a 30*c66ec88fSEmmanuel Vadot clock provider. 31*c66ec88fSEmmanuel Vadot - #reset-cells: should be set to <1> - the system controller is also a 32*c66ec88fSEmmanuel Vadot reset line provider. 33*c66ec88fSEmmanuel Vadot 34*c66ec88fSEmmanuel Vadot The clock sources have shorthand defines in the include file: 35*c66ec88fSEmmanuel Vadot <dt-bindings/clock/cortina,gemini-clock.h> 36*c66ec88fSEmmanuel Vadot 37*c66ec88fSEmmanuel Vadot The reset lines have shorthand defines in the include file: 38*c66ec88fSEmmanuel Vadot <dt-bindings/reset/cortina,gemini-reset.h> 39*c66ec88fSEmmanuel Vadot 40*c66ec88fSEmmanuel Vadot- timer: the soc bus node must have a timer node pointing to the SoC timer 41*c66ec88fSEmmanuel Vadot block, with the compatible string "cortina,gemini-timer" 42*c66ec88fSEmmanuel Vadot See: clocksource/cortina,gemini-timer.txt 43*c66ec88fSEmmanuel Vadot 44*c66ec88fSEmmanuel Vadot- interrupt-controller: the sob bus node must have an interrupt controller 45*c66ec88fSEmmanuel Vadot node pointing to the SoC interrupt controller block, with the compatible 46*c66ec88fSEmmanuel Vadot string "cortina,gemini-interrupt-controller" 47*c66ec88fSEmmanuel Vadot See interrupt-controller/cortina,gemini-interrupt-controller.txt 48*c66ec88fSEmmanuel Vadot 49*c66ec88fSEmmanuel VadotExample: 50*c66ec88fSEmmanuel Vadot 51*c66ec88fSEmmanuel Vadot/ { 52*c66ec88fSEmmanuel Vadot model = "Foo Gemini Machine"; 53*c66ec88fSEmmanuel Vadot compatible = "cortina,gemini"; 54*c66ec88fSEmmanuel Vadot #address-cells = <1>; 55*c66ec88fSEmmanuel Vadot #size-cells = <1>; 56*c66ec88fSEmmanuel Vadot 57*c66ec88fSEmmanuel Vadot memory { 58*c66ec88fSEmmanuel Vadot device_type = "memory"; 59*c66ec88fSEmmanuel Vadot reg = <0x00000000 0x8000000>; 60*c66ec88fSEmmanuel Vadot }; 61*c66ec88fSEmmanuel Vadot 62*c66ec88fSEmmanuel Vadot soc { 63*c66ec88fSEmmanuel Vadot #address-cells = <1>; 64*c66ec88fSEmmanuel Vadot #size-cells = <1>; 65*c66ec88fSEmmanuel Vadot ranges; 66*c66ec88fSEmmanuel Vadot compatible = "simple-bus"; 67*c66ec88fSEmmanuel Vadot interrupt-parent = <&intcon>; 68*c66ec88fSEmmanuel Vadot 69*c66ec88fSEmmanuel Vadot syscon: syscon@40000000 { 70*c66ec88fSEmmanuel Vadot compatible = "cortina,gemini-syscon", "syscon"; 71*c66ec88fSEmmanuel Vadot reg = <0x40000000 0x1000>; 72*c66ec88fSEmmanuel Vadot #clock-cells = <1>; 73*c66ec88fSEmmanuel Vadot #reset-cells = <1>; 74*c66ec88fSEmmanuel Vadot }; 75*c66ec88fSEmmanuel Vadot 76*c66ec88fSEmmanuel Vadot uart0: serial@42000000 { 77*c66ec88fSEmmanuel Vadot compatible = "ns16550a"; 78*c66ec88fSEmmanuel Vadot reg = <0x42000000 0x100>; 79*c66ec88fSEmmanuel Vadot resets = <&syscon GEMINI_RESET_UART>; 80*c66ec88fSEmmanuel Vadot clocks = <&syscon GEMINI_CLK_UART>; 81*c66ec88fSEmmanuel Vadot interrupts = <18 IRQ_TYPE_LEVEL_HIGH>; 82*c66ec88fSEmmanuel Vadot reg-shift = <2>; 83*c66ec88fSEmmanuel Vadot }; 84*c66ec88fSEmmanuel Vadot 85*c66ec88fSEmmanuel Vadot timer@43000000 { 86*c66ec88fSEmmanuel Vadot compatible = "cortina,gemini-timer"; 87*c66ec88fSEmmanuel Vadot reg = <0x43000000 0x1000>; 88*c66ec88fSEmmanuel Vadot interrupt-parent = <&intcon>; 89*c66ec88fSEmmanuel Vadot interrupts = <14 IRQ_TYPE_EDGE_FALLING>, /* Timer 1 */ 90*c66ec88fSEmmanuel Vadot <15 IRQ_TYPE_EDGE_FALLING>, /* Timer 2 */ 91*c66ec88fSEmmanuel Vadot <16 IRQ_TYPE_EDGE_FALLING>; /* Timer 3 */ 92*c66ec88fSEmmanuel Vadot resets = <&syscon GEMINI_RESET_TIMER>; 93*c66ec88fSEmmanuel Vadot /* APB clock or RTC clock */ 94*c66ec88fSEmmanuel Vadot clocks = <&syscon GEMINI_CLK_APB>, 95*c66ec88fSEmmanuel Vadot <&syscon GEMINI_CLK_RTC>; 96*c66ec88fSEmmanuel Vadot clock-names = "PCLK", "EXTCLK"; 97*c66ec88fSEmmanuel Vadot syscon = <&syscon>; 98*c66ec88fSEmmanuel Vadot }; 99*c66ec88fSEmmanuel Vadot 100*c66ec88fSEmmanuel Vadot intcon: interrupt-controller@48000000 { 101*c66ec88fSEmmanuel Vadot compatible = "cortina,gemini-interrupt-controller"; 102*c66ec88fSEmmanuel Vadot reg = <0x48000000 0x1000>; 103*c66ec88fSEmmanuel Vadot resets = <&syscon GEMINI_RESET_INTCON0>; 104*c66ec88fSEmmanuel Vadot interrupt-controller; 105*c66ec88fSEmmanuel Vadot #interrupt-cells = <2>; 106*c66ec88fSEmmanuel Vadot }; 107*c66ec88fSEmmanuel Vadot }; 108*c66ec88fSEmmanuel Vadot}; 109