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