big autopep8 whitespace cleanup, not run before on pinmux spec code
[pinmux.git] / src / spec / c_class.py
1 #!/usr/bin/env python
2
3 from interfaces import i2s, emmc, sdmmc, spi, quadspi, i2c
4 from interfaces import jtag, uart, ulpi, uartfull, rgbttl, rgmii
5 from interfaces import flexbus1, flexbus2, sdram1, sdram2, mcu8080
6 from interfaces import eint, pwm, gpio
7 from interfaces import pinmerge
8 from ifaceprint import display, display_fns, check_functions
9 from ifaceprint import display_fixed
10
11
12 def pinspec():
13 pinouts = {}
14
15 pinbanks = {'A': 16,
16 'B': 16,
17 'C': 16,
18 'D': 16,
19 'E': 16,
20 'F': 48,
21 'G': 24,
22 }
23 bankspec = {}
24 pkeys = pinbanks.keys()
25 pkeys.sort()
26 offs = 0
27 for kn in pkeys:
28 bankspec[kn] = offs
29 offs += pinbanks[kn]
30
31 # Bank A, 0-15
32 pinmerge(pinouts, gpio(bankspec, "", ('A', 0), "A", 0, 16, 0))
33 pinmerge(pinouts, spi(bankspec, "0", ('A', 0), "A", 1))
34 pinmerge(pinouts, spi(bankspec, "1", ('A', 4), "A", 1))
35 pinmerge(pinouts, uart(bankspec, "0", ('A', 8), "A", 1))
36 pinmerge(pinouts, uart(bankspec, "1", ('A', 10), "A", 1))
37 pinmerge(pinouts, i2c(bankspec, "0", ('A', 12), "A", 1))
38 pinmerge(pinouts, i2c(bankspec, "1", ('A', 14), "A", 1))
39 for i in range(16):
40 pinmerge(pinouts, pwm(bankspec, str(i), ('A', i), "A", mux=2))
41
42 # Bank B, 16-31
43 pinmerge(pinouts, gpio(bankspec, "", ('B', 0), "B", 0, 16, 0))
44 pinmerge(pinouts, spi(bankspec, "2", ('B', 0), "B", 1))
45 pinmerge(pinouts, uart(bankspec, "2", ('B', 4), "B", 1))
46 pinmerge(pinouts, uart(bankspec, "3", ('B', 6), "B", 1))
47 pinmerge(pinouts, uart(bankspec, "4", ('B', 8), "B", 1))
48 pinmerge(pinouts, i2c(bankspec, "2", ('B', 10), "B", 1))
49 pinmerge(pinouts, i2c(bankspec, "3", ('B', 12), "B", 1))
50 pinmerge(pinouts, uart(bankspec, "5", ('B', 14), "B", 1))
51 for i in range(16):
52 pinmerge(pinouts, pwm(bankspec, str(i+16), ('B', i), "B", mux=2))
53
54 # Bank C, 32-47
55 pinmerge(pinouts, gpio(bankspec, "", ('C', 0), "C", 0, 16, 0))
56 pinmerge(pinouts, spi(bankspec, "1", ('C', 0), "C", 1))
57 pinmerge(pinouts, spi(bankspec, "2", ('C', 4), "C", 1))
58 pinmerge(pinouts, uart(bankspec, "2", ('C', 8), "C", 1))
59 pinmerge(pinouts, uart(bankspec, "3", ('C', 10), "C", 1))
60 pinmerge(pinouts, i2c(bankspec, "1", ('C', 12), "C", 1))
61 pinmerge(pinouts, i2c(bankspec, "3", ('C', 14), "C", 1))
62
63 # Bank D, 48-63
64 pinmerge(pinouts, ulpi(bankspec, "0", ('D', 0), "D", 1))
65 pinmerge(pinouts, spi(bankspec, "0", ('D', 12), "D", 1))
66
67 # Bank E, 64-80
68 pinmerge(pinouts, sdmmc(bankspec, "0", ('E', 0), "E", 1))
69 pinmerge(pinouts, jtag(bankspec, "0", ('E', 6), "E", 1))
70 pinmerge(pinouts, uart(bankspec, "0", ('E', 10), "E", 1))
71 pinmerge(pinouts, i2c(bankspec, "0", ('E', 12), "E", 1))
72 pinmerge(pinouts, uart(bankspec, "1", ('E', 14), "E", 1))
73
74 # Bank F, 80-127
75 flexspec = {
76 'FB_TS': ('FB_ALE', 2, "F"),
77 'FB_CS2': ('FB_BWE2', 2, "F"),
78 'FB_A0': ('FB_BWE2', 3, "F"),
79 'FB_CS3': ('FB_BWE3', 2, "F"),
80 'FB_A1': ('FB_BWE3', 3, "F"),
81 'FB_TBST': ('FB_OE', 2, "F"),
82 'FB_TSIZ0': ('FB_BWE0', 2, "F"),
83 'FB_TSIZ1': ('FB_BWE1', 2, "F"),
84 }
85 pinmerge(pinouts, flexbus1(bankspec, "", ('F', 0), "F", 1))
86 pinmerge(pinouts, flexbus2(bankspec, "", ('F', 30), "F", 1, limit=8))
87
88 # Bank G, 128-151
89
90 pinmerge(pinouts, rgmii(bankspec, "", ('G', 0), "G", 1))
91
92 print "# Pinouts (PinMux)"
93 print
94 print "auto-generated by [[pinouts.py]]"
95 print
96 print "[[!toc ]]"
97 print
98 display(pinouts)
99 print
100
101 print "# Pinouts (Fixed function)"
102 print
103
104 fixedpins = {
105 'CTRL_SYS':
106 [
107 'TEST', 'BOOT_SEL',
108 'NMI#', 'RESET#',
109 'CLK24M_IN', 'CLK24M_OUT',
110 'CLK32K_IN', 'CLK32K_OUT',
111 'PLLTEST', 'PLLREGIO', 'PLLVP25',
112 'PLLDV', 'PLLVREG', 'PLLGND',
113 ],
114
115 'POWER_CPU':
116 ['VDD0_CPU', 'VDD1_CPU', 'VDD2_CPU', 'VDD3_CPU', 'VDD4_CPU', 'VDD5_CPU',
117 'GND0_CPU', 'GND1_CPU', 'GND2_CPU', 'GND3_CPU', 'GND4_CPU', 'GND5_CPU',
118 ],
119
120 'POWER_DLL':
121 ['VDD0_DLL', 'VDD1_DLL', 'VDD2_DLL',
122 'GND0_DLL', 'GND1_DLL', 'GND2_DLL',
123 ],
124
125 'POWER_INT':
126 ['VDD0_INT', 'VDD1_INT', 'VDD2_INT', 'VDD3_INT', 'VDD4_INT',
127 'VDD5_INT', 'VDD6_INT', 'VDD7_INT', 'VDD8_INT', 'VDD9_INT',
128 'GND0_INT', 'GND1_INT', 'GND2_INT', 'GND3_INT', 'GND4_INT',
129 'GND5_INT', 'GND6_INT', 'GND7_INT', 'GND8_INT', 'GND9_INT',
130 ],
131
132 'POWER_GPIO':
133 ['VDD_GPIOA', 'VDD_GPIOB', 'VDD_GPIOC',
134 'VDD_GPIOD', 'VDD_GPIOE', 'VDD_GPIOF',
135 'VDD_GPIOG',
136 'GND_GPIOA', 'GND_GPIOB', 'GND_GPIOC',
137 'GND_GPIOD', 'GND_GPIOE', 'GND_GPIOF',
138 'GND_GPIOG',
139 ]
140
141 }
142
143 display_fixed(fixedpins, len(pinouts))
144
145 print "# Functions (PinMux)"
146 print
147 print "auto-generated by [[pinouts.py]]"
148 print
149
150 function_names = {'EINT': 'External Interrupt',
151 'FB': 'MC68k FlexBus',
152 'IIS': 'I2S Audio',
153 'JTAG0': 'JTAG',
154 'JTAG1': 'JTAG (same as JTAG2, JTAG_SEL=LOW)',
155 'JTAG2': 'JTAG (same as JTAG1, JTAG_SEL=HIGH)',
156 'LCD': '24-pin RGB/TTL LCD',
157 'RG': 'RGMII Ethernet',
158 'MMC': 'eMMC 1/2/4/8 pin',
159 'PWM': 'PWM (pulse-width modulation)',
160 'SD0': 'SD/MMC 0',
161 'SD1': 'SD/MMC 1',
162 'SD2': 'SD/MMC 2',
163 'SD3': 'SD/MMC 3',
164 'SPI0': 'SPI (Serial Peripheral Interface) 0',
165 'SPI1': 'SPI (Serial Peripheral Interface) 1',
166 'SPI2': 'SPI (Serial Peripheral Interface) 2',
167 'SPI3': 'Quad SPI (Serial Peripheral Interface) 3',
168 'TWI0': 'I2C 0',
169 'TWI1': 'I2C 1',
170 'TWI2': 'I2C 2',
171 'TWI3': 'I2C 3',
172 'UART0': 'UART (TX/RX) 0',
173 'UART1': 'UART (TX/RX) 1',
174 'UART2': 'UART (TX/RX) 2',
175 'UART3': 'UART (TX/RX) 3',
176 'UART4': 'UART (TX/RX) 4',
177 'UART5': 'UART (TX/RX) 5',
178 'ULPI0': 'ULPI (USB Low Pin-count) 0',
179 'ULPI1': 'ULPI (USB Low Pin-count) 1',
180 'ULPI2': 'ULPI (USB Low Pin-count) 2',
181 'ULPI3': 'ULPI (USB Low Pin-count) 3',
182 }
183
184 fns = display_fns(bankspec, pinouts, function_names)
185 print
186
187 # Scenarios below can be spec'd out as either "find first interface"
188 # by name/number e.g. SPI1, or as "find in bank/mux" which must be
189 # spec'd as "BM:Name" where B is bank (A-F), M is Mux (0-3)
190 # EINT and PWM are grouped together, specially, but may still be spec'd
191 # using "BM:Name". Pins are removed in-order as listed from
192 # lists (interfaces, EINTs, PWMs) from available pins.
193
194 # Robotics scenario.
195
196 robotics = ['FB', 'RG', 'ULPI0/8',
197 'SD0',
198 'JTAG0', 'E1:UART0',
199 'D1:SPI0', 'E1:TWI0']
200 robotics_pwm = []
201 for i in range(32):
202 robotics_pwm.append('PWM_%d' % i)
203 robotics_eint = ['EINT24', 'EINT25', 'EINT26', 'EINT27',
204 'EINT20', 'EINT21', 'EINT22', 'EINT23']
205 robotics_eint = []
206
207 unused_pins = check_functions("Robotics", bankspec, fns, pinouts,
208 robotics, robotics_eint, robotics_pwm)
209
210 print "# Reference Datasheets"
211 print
212 print "datasheets and pinout links"
213 print
214 print "* <http://datasheets.chipdb.org/AMD/8018x/80186/amd-80186.pdf>"
215 print "* <http://hands.com/~lkcl/eoma/shenzen/frida/FRD144A2701.pdf>"
216 print "* <http://pinouts.ru/Memory/sdcard_pinout.shtml>"
217 print "* p8 <http://www.onfi.org/~/media/onfi/specs/onfi_2_0_gold.pdf?la=en>"
218 print "* <https://www.heyrick.co.uk/blog/files/datasheets/dm9000aep.pdf>"
219 print "* <http://cache.freescale.com/files/microcontrollers/doc/app_note/AN4393.pdf>"
220 print "* <https://www.nxp.com/docs/en/data-sheet/MCF54418.pdf>"
221 print "* ULPI OTG PHY, ST <http://www.st.com/en/interfaces-and-transceivers/stulpi01a.html>"
222 print "* ULPI OTG PHY, TI TUSB1210 <http://ti.com/product/TUSB1210/>"
223
224 return pinouts, bankspec, fixedpins