tnetv107x.c 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766
  1. /*
  2. * Texas Instruments TNETV107X SoC Support
  3. *
  4. * Copyright (C) 2010 Texas Instruments
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License as
  8. * published by the Free Software Foundation version 2.
  9. *
  10. * This program is distributed "as is" WITHOUT ANY WARRANTY of any
  11. * kind, whether express or implied; without even the implied warranty
  12. * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. */
  15. #include <linux/gpio.h>
  16. #include <linux/kernel.h>
  17. #include <linux/init.h>
  18. #include <linux/clk.h>
  19. #include <linux/io.h>
  20. #include <linux/err.h>
  21. #include <linux/platform_device.h>
  22. #include <asm/mach/map.h>
  23. #include <mach/common.h>
  24. #include <mach/time.h>
  25. #include <mach/cputype.h>
  26. #include <mach/psc.h>
  27. #include <mach/cp_intc.h>
  28. #include <mach/irqs.h>
  29. #include <mach/hardware.h>
  30. #include <mach/tnetv107x.h>
  31. #include <mach/gpio-davinci.h>
  32. #include "clock.h"
  33. #include "mux.h"
  34. /* Base addresses for on-chip devices */
  35. #define TNETV107X_INTC_BASE 0x03000000
  36. #define TNETV107X_TIMER0_BASE 0x08086500
  37. #define TNETV107X_TIMER1_BASE 0x08086600
  38. #define TNETV107X_CHIP_CFG_BASE 0x08087000
  39. #define TNETV107X_GPIO_BASE 0x08088000
  40. #define TNETV107X_CLOCK_CONTROL_BASE 0x0808a000
  41. #define TNETV107X_PSC_BASE 0x0808b000
  42. /* Reference clock frequencies */
  43. #define OSC_FREQ_ONCHIP (24000 * 1000)
  44. #define OSC_FREQ_OFFCHIP_SYS (25000 * 1000)
  45. #define OSC_FREQ_OFFCHIP_ETH (25000 * 1000)
  46. #define OSC_FREQ_OFFCHIP_TDM (19200 * 1000)
  47. #define N_PLLS 3
  48. /* Clock Control Registers */
  49. struct clk_ctrl_regs {
  50. u32 pll_bypass;
  51. u32 _reserved0;
  52. u32 gem_lrst;
  53. u32 _reserved1;
  54. u32 pll_unlock_stat;
  55. u32 sys_unlock;
  56. u32 eth_unlock;
  57. u32 tdm_unlock;
  58. };
  59. /* SSPLL Registers */
  60. struct sspll_regs {
  61. u32 modes;
  62. u32 post_div;
  63. u32 pre_div;
  64. u32 mult_factor;
  65. u32 divider_range;
  66. u32 bw_divider;
  67. u32 spr_amount;
  68. u32 spr_rate_div;
  69. u32 diag;
  70. };
  71. /* Watchdog Timer Registers */
  72. struct wdt_regs {
  73. u32 kick_lock;
  74. u32 kick;
  75. u32 change_lock;
  76. u32 change ;
  77. u32 disable_lock;
  78. u32 disable;
  79. u32 prescale_lock;
  80. u32 prescale;
  81. };
  82. static struct clk_ctrl_regs __iomem *clk_ctrl_regs;
  83. static struct sspll_regs __iomem *sspll_regs[N_PLLS];
  84. static int sspll_regs_base[N_PLLS] = { 0x40, 0x80, 0xc0 };
  85. /* PLL bypass bit shifts in clk_ctrl_regs->pll_bypass register */
  86. static u32 bypass_mask[N_PLLS] = { BIT(0), BIT(2), BIT(1) };
  87. /* offchip (external) reference clock frequencies */
  88. static u32 pll_ext_freq[] = {
  89. OSC_FREQ_OFFCHIP_SYS,
  90. OSC_FREQ_OFFCHIP_TDM,
  91. OSC_FREQ_OFFCHIP_ETH
  92. };
  93. /* PSC control registers */
  94. static u32 psc_regs[] = { TNETV107X_PSC_BASE };
  95. /* Host map for interrupt controller */
  96. static u32 intc_host_map[] = { 0x01010000, 0x01010101, -1 };
  97. static unsigned long clk_sspll_recalc(struct clk *clk);
  98. /* Level 1 - the PLLs */
  99. #define define_pll_clk(cname, pll, divmask, base) \
  100. static struct pll_data pll_##cname##_data = { \
  101. .num = pll, \
  102. .div_ratio_mask = divmask, \
  103. .phys_base = base + \
  104. TNETV107X_CLOCK_CONTROL_BASE, \
  105. }; \
  106. static struct clk pll_##cname##_clk = { \
  107. .name = "pll_" #cname "_clk", \
  108. .pll_data = &pll_##cname##_data, \
  109. .flags = CLK_PLL, \
  110. .recalc = clk_sspll_recalc, \
  111. }
  112. define_pll_clk(sys, 0, 0x1ff, 0x600);
  113. define_pll_clk(tdm, 1, 0x0ff, 0x200);
  114. define_pll_clk(eth, 2, 0x0ff, 0x400);
  115. /* Level 2 - divided outputs from the PLLs */
  116. #define define_pll_div_clk(pll, cname, div) \
  117. static struct clk pll##_##cname##_clk = { \
  118. .name = #pll "_" #cname "_clk", \
  119. .parent = &pll_##pll##_clk, \
  120. .flags = CLK_PLL, \
  121. .div_reg = PLLDIV##div, \
  122. .set_rate = davinci_set_sysclk_rate, \
  123. }
  124. define_pll_div_clk(sys, arm1176, 1);
  125. define_pll_div_clk(sys, dsp, 2);
  126. define_pll_div_clk(sys, ddr, 3);
  127. define_pll_div_clk(sys, full, 4);
  128. define_pll_div_clk(sys, lcd, 5);
  129. define_pll_div_clk(sys, vlynq_ref, 6);
  130. define_pll_div_clk(sys, tsc, 7);
  131. define_pll_div_clk(sys, half, 8);
  132. define_pll_div_clk(eth, 5mhz, 1);
  133. define_pll_div_clk(eth, 50mhz, 2);
  134. define_pll_div_clk(eth, 125mhz, 3);
  135. define_pll_div_clk(eth, 250mhz, 4);
  136. define_pll_div_clk(eth, 25mhz, 5);
  137. define_pll_div_clk(tdm, 0, 1);
  138. define_pll_div_clk(tdm, extra, 2);
  139. define_pll_div_clk(tdm, 1, 3);
  140. /* Level 3 - LPSC gated clocks */
  141. #define __lpsc_clk(cname, _parent, mod, flg) \
  142. static struct clk clk_##cname = { \
  143. .name = #cname, \
  144. .parent = &_parent, \
  145. .lpsc = TNETV107X_LPSC_##mod,\
  146. .flags = flg, \
  147. }
  148. #define lpsc_clk_enabled(cname, parent, mod) \
  149. __lpsc_clk(cname, parent, mod, ALWAYS_ENABLED)
  150. #define lpsc_clk(cname, parent, mod) \
  151. __lpsc_clk(cname, parent, mod, 0)
  152. lpsc_clk_enabled(arm, sys_arm1176_clk, ARM);
  153. lpsc_clk_enabled(gem, sys_dsp_clk, GEM);
  154. lpsc_clk_enabled(ddr2_phy, sys_ddr_clk, DDR2_PHY);
  155. lpsc_clk_enabled(tpcc, sys_full_clk, TPCC);
  156. lpsc_clk_enabled(tptc0, sys_full_clk, TPTC0);
  157. lpsc_clk_enabled(tptc1, sys_full_clk, TPTC1);
  158. lpsc_clk_enabled(ram, sys_full_clk, RAM);
  159. lpsc_clk_enabled(aemif, sys_full_clk, AEMIF);
  160. lpsc_clk_enabled(chipcfg, sys_half_clk, CHIP_CFG);
  161. lpsc_clk_enabled(rom, sys_half_clk, ROM);
  162. lpsc_clk_enabled(secctl, sys_half_clk, SECCTL);
  163. lpsc_clk_enabled(keymgr, sys_half_clk, KEYMGR);
  164. lpsc_clk_enabled(gpio, sys_half_clk, GPIO);
  165. lpsc_clk_enabled(debugss, sys_half_clk, DEBUGSS);
  166. lpsc_clk_enabled(system, sys_half_clk, SYSTEM);
  167. lpsc_clk_enabled(ddr2_vrst, sys_ddr_clk, DDR2_EMIF1_VRST);
  168. lpsc_clk_enabled(ddr2_vctl_rst, sys_ddr_clk, DDR2_EMIF2_VCTL_RST);
  169. lpsc_clk_enabled(wdt_arm, sys_half_clk, WDT_ARM);
  170. lpsc_clk_enabled(timer1, sys_half_clk, TIMER1);
  171. lpsc_clk(mbx_lite, sys_arm1176_clk, MBX_LITE);
  172. lpsc_clk(ethss, eth_125mhz_clk, ETHSS);
  173. lpsc_clk(tsc, sys_tsc_clk, TSC);
  174. lpsc_clk(uart0, sys_half_clk, UART0);
  175. lpsc_clk(uart1, sys_half_clk, UART1);
  176. lpsc_clk(uart2, sys_half_clk, UART2);
  177. lpsc_clk(pktsec, sys_half_clk, PKTSEC);
  178. lpsc_clk(keypad, sys_half_clk, KEYPAD);
  179. lpsc_clk(mdio, sys_half_clk, MDIO);
  180. lpsc_clk(sdio0, sys_half_clk, SDIO0);
  181. lpsc_clk(sdio1, sys_half_clk, SDIO1);
  182. lpsc_clk(timer0, sys_half_clk, TIMER0);
  183. lpsc_clk(wdt_dsp, sys_half_clk, WDT_DSP);
  184. lpsc_clk(ssp, sys_half_clk, SSP);
  185. lpsc_clk(tdm0, tdm_0_clk, TDM0);
  186. lpsc_clk(tdm1, tdm_1_clk, TDM1);
  187. lpsc_clk(vlynq, sys_vlynq_ref_clk, VLYNQ);
  188. lpsc_clk(mcdma, sys_half_clk, MCDMA);
  189. lpsc_clk(usbss, sys_half_clk, USBSS);
  190. lpsc_clk(usb0, clk_usbss, USB0);
  191. lpsc_clk(usb1, clk_usbss, USB1);
  192. lpsc_clk(ethss_rgmii, eth_250mhz_clk, ETHSS_RGMII);
  193. lpsc_clk(imcop, sys_dsp_clk, IMCOP);
  194. lpsc_clk(spare, sys_half_clk, SPARE);
  195. /* LCD needs a full power down to clear controller state */
  196. __lpsc_clk(lcd, sys_lcd_clk, LCD, PSC_SWRSTDISABLE);
  197. /* Level 4 - leaf clocks for LPSC modules shared across drivers */
  198. static struct clk clk_rng = { .name = "rng", .parent = &clk_pktsec };
  199. static struct clk clk_pka = { .name = "pka", .parent = &clk_pktsec };
  200. static struct clk_lookup clks[] = {
  201. CLK(NULL, "pll_sys_clk", &pll_sys_clk),
  202. CLK(NULL, "pll_eth_clk", &pll_eth_clk),
  203. CLK(NULL, "pll_tdm_clk", &pll_tdm_clk),
  204. CLK(NULL, "sys_arm1176_clk", &sys_arm1176_clk),
  205. CLK(NULL, "sys_dsp_clk", &sys_dsp_clk),
  206. CLK(NULL, "sys_ddr_clk", &sys_ddr_clk),
  207. CLK(NULL, "sys_full_clk", &sys_full_clk),
  208. CLK(NULL, "sys_lcd_clk", &sys_lcd_clk),
  209. CLK(NULL, "sys_vlynq_ref_clk", &sys_vlynq_ref_clk),
  210. CLK(NULL, "sys_tsc_clk", &sys_tsc_clk),
  211. CLK(NULL, "sys_half_clk", &sys_half_clk),
  212. CLK(NULL, "eth_5mhz_clk", &eth_5mhz_clk),
  213. CLK(NULL, "eth_50mhz_clk", &eth_50mhz_clk),
  214. CLK(NULL, "eth_125mhz_clk", &eth_125mhz_clk),
  215. CLK(NULL, "eth_250mhz_clk", &eth_250mhz_clk),
  216. CLK(NULL, "eth_25mhz_clk", &eth_25mhz_clk),
  217. CLK(NULL, "tdm_0_clk", &tdm_0_clk),
  218. CLK(NULL, "tdm_extra_clk", &tdm_extra_clk),
  219. CLK(NULL, "tdm_1_clk", &tdm_1_clk),
  220. CLK(NULL, "clk_arm", &clk_arm),
  221. CLK(NULL, "clk_gem", &clk_gem),
  222. CLK(NULL, "clk_ddr2_phy", &clk_ddr2_phy),
  223. CLK(NULL, "clk_tpcc", &clk_tpcc),
  224. CLK(NULL, "clk_tptc0", &clk_tptc0),
  225. CLK(NULL, "clk_tptc1", &clk_tptc1),
  226. CLK(NULL, "clk_ram", &clk_ram),
  227. CLK(NULL, "clk_mbx_lite", &clk_mbx_lite),
  228. CLK("tnetv107x-fb.0", NULL, &clk_lcd),
  229. CLK(NULL, "clk_ethss", &clk_ethss),
  230. CLK(NULL, "aemif", &clk_aemif),
  231. CLK(NULL, "clk_chipcfg", &clk_chipcfg),
  232. CLK("tnetv107x-ts.0", NULL, &clk_tsc),
  233. CLK(NULL, "clk_rom", &clk_rom),
  234. CLK(NULL, "uart2", &clk_uart2),
  235. CLK(NULL, "clk_pktsec", &clk_pktsec),
  236. CLK("tnetv107x-rng.0", NULL, &clk_rng),
  237. CLK("tnetv107x-pka.0", NULL, &clk_pka),
  238. CLK(NULL, "clk_secctl", &clk_secctl),
  239. CLK(NULL, "clk_keymgr", &clk_keymgr),
  240. CLK("tnetv107x-keypad.0", NULL, &clk_keypad),
  241. CLK(NULL, "clk_gpio", &clk_gpio),
  242. CLK(NULL, "clk_mdio", &clk_mdio),
  243. CLK("davinci_mmc.0", NULL, &clk_sdio0),
  244. CLK(NULL, "uart0", &clk_uart0),
  245. CLK(NULL, "uart1", &clk_uart1),
  246. CLK(NULL, "timer0", &clk_timer0),
  247. CLK(NULL, "timer1", &clk_timer1),
  248. CLK("tnetv107x_wdt.0", NULL, &clk_wdt_arm),
  249. CLK(NULL, "clk_wdt_dsp", &clk_wdt_dsp),
  250. CLK("ti-ssp", NULL, &clk_ssp),
  251. CLK(NULL, "clk_tdm0", &clk_tdm0),
  252. CLK(NULL, "clk_vlynq", &clk_vlynq),
  253. CLK(NULL, "clk_mcdma", &clk_mcdma),
  254. CLK(NULL, "clk_usbss", &clk_usbss),
  255. CLK(NULL, "clk_usb0", &clk_usb0),
  256. CLK(NULL, "clk_usb1", &clk_usb1),
  257. CLK(NULL, "clk_tdm1", &clk_tdm1),
  258. CLK(NULL, "clk_debugss", &clk_debugss),
  259. CLK(NULL, "clk_ethss_rgmii", &clk_ethss_rgmii),
  260. CLK(NULL, "clk_system", &clk_system),
  261. CLK(NULL, "clk_imcop", &clk_imcop),
  262. CLK(NULL, "clk_spare", &clk_spare),
  263. CLK("davinci_mmc.1", NULL, &clk_sdio1),
  264. CLK(NULL, "clk_ddr2_vrst", &clk_ddr2_vrst),
  265. CLK(NULL, "clk_ddr2_vctl_rst", &clk_ddr2_vctl_rst),
  266. CLK(NULL, NULL, NULL),
  267. };
  268. static const struct mux_config pins[] = {
  269. #ifdef CONFIG_DAVINCI_MUX
  270. MUX_CFG(TNETV107X, ASR_A00, 0, 0, 0x1f, 0x00, false)
  271. MUX_CFG(TNETV107X, GPIO32, 0, 0, 0x1f, 0x04, false)
  272. MUX_CFG(TNETV107X, ASR_A01, 0, 5, 0x1f, 0x00, false)
  273. MUX_CFG(TNETV107X, GPIO33, 0, 5, 0x1f, 0x04, false)
  274. MUX_CFG(TNETV107X, ASR_A02, 0, 10, 0x1f, 0x00, false)
  275. MUX_CFG(TNETV107X, GPIO34, 0, 10, 0x1f, 0x04, false)
  276. MUX_CFG(TNETV107X, ASR_A03, 0, 15, 0x1f, 0x00, false)
  277. MUX_CFG(TNETV107X, GPIO35, 0, 15, 0x1f, 0x04, false)
  278. MUX_CFG(TNETV107X, ASR_A04, 0, 20, 0x1f, 0x00, false)
  279. MUX_CFG(TNETV107X, GPIO36, 0, 20, 0x1f, 0x04, false)
  280. MUX_CFG(TNETV107X, ASR_A05, 0, 25, 0x1f, 0x00, false)
  281. MUX_CFG(TNETV107X, GPIO37, 0, 25, 0x1f, 0x04, false)
  282. MUX_CFG(TNETV107X, ASR_A06, 1, 0, 0x1f, 0x00, false)
  283. MUX_CFG(TNETV107X, GPIO38, 1, 0, 0x1f, 0x04, false)
  284. MUX_CFG(TNETV107X, ASR_A07, 1, 5, 0x1f, 0x00, false)
  285. MUX_CFG(TNETV107X, GPIO39, 1, 5, 0x1f, 0x04, false)
  286. MUX_CFG(TNETV107X, ASR_A08, 1, 10, 0x1f, 0x00, false)
  287. MUX_CFG(TNETV107X, GPIO40, 1, 10, 0x1f, 0x04, false)
  288. MUX_CFG(TNETV107X, ASR_A09, 1, 15, 0x1f, 0x00, false)
  289. MUX_CFG(TNETV107X, GPIO41, 1, 15, 0x1f, 0x04, false)
  290. MUX_CFG(TNETV107X, ASR_A10, 1, 20, 0x1f, 0x00, false)
  291. MUX_CFG(TNETV107X, GPIO42, 1, 20, 0x1f, 0x04, false)
  292. MUX_CFG(TNETV107X, ASR_A11, 1, 25, 0x1f, 0x00, false)
  293. MUX_CFG(TNETV107X, BOOT_STRP_0, 1, 25, 0x1f, 0x04, false)
  294. MUX_CFG(TNETV107X, ASR_A12, 2, 0, 0x1f, 0x00, false)
  295. MUX_CFG(TNETV107X, BOOT_STRP_1, 2, 0, 0x1f, 0x04, false)
  296. MUX_CFG(TNETV107X, ASR_A13, 2, 5, 0x1f, 0x00, false)
  297. MUX_CFG(TNETV107X, GPIO43, 2, 5, 0x1f, 0x04, false)
  298. MUX_CFG(TNETV107X, ASR_A14, 2, 10, 0x1f, 0x00, false)
  299. MUX_CFG(TNETV107X, GPIO44, 2, 10, 0x1f, 0x04, false)
  300. MUX_CFG(TNETV107X, ASR_A15, 2, 15, 0x1f, 0x00, false)
  301. MUX_CFG(TNETV107X, GPIO45, 2, 15, 0x1f, 0x04, false)
  302. MUX_CFG(TNETV107X, ASR_A16, 2, 20, 0x1f, 0x00, false)
  303. MUX_CFG(TNETV107X, GPIO46, 2, 20, 0x1f, 0x04, false)
  304. MUX_CFG(TNETV107X, ASR_A17, 2, 25, 0x1f, 0x00, false)
  305. MUX_CFG(TNETV107X, GPIO47, 2, 25, 0x1f, 0x04, false)
  306. MUX_CFG(TNETV107X, ASR_A18, 3, 0, 0x1f, 0x00, false)
  307. MUX_CFG(TNETV107X, GPIO48, 3, 0, 0x1f, 0x04, false)
  308. MUX_CFG(TNETV107X, SDIO1_DATA3_0, 3, 0, 0x1f, 0x1c, false)
  309. MUX_CFG(TNETV107X, ASR_A19, 3, 5, 0x1f, 0x00, false)
  310. MUX_CFG(TNETV107X, GPIO49, 3, 5, 0x1f, 0x04, false)
  311. MUX_CFG(TNETV107X, SDIO1_DATA2_0, 3, 5, 0x1f, 0x1c, false)
  312. MUX_CFG(TNETV107X, ASR_A20, 3, 10, 0x1f, 0x00, false)
  313. MUX_CFG(TNETV107X, GPIO50, 3, 10, 0x1f, 0x04, false)
  314. MUX_CFG(TNETV107X, SDIO1_DATA1_0, 3, 10, 0x1f, 0x1c, false)
  315. MUX_CFG(TNETV107X, ASR_A21, 3, 15, 0x1f, 0x00, false)
  316. MUX_CFG(TNETV107X, GPIO51, 3, 15, 0x1f, 0x04, false)
  317. MUX_CFG(TNETV107X, SDIO1_DATA0_0, 3, 15, 0x1f, 0x1c, false)
  318. MUX_CFG(TNETV107X, ASR_A22, 3, 20, 0x1f, 0x00, false)
  319. MUX_CFG(TNETV107X, GPIO52, 3, 20, 0x1f, 0x04, false)
  320. MUX_CFG(TNETV107X, SDIO1_CMD_0, 3, 20, 0x1f, 0x1c, false)
  321. MUX_CFG(TNETV107X, ASR_A23, 3, 25, 0x1f, 0x00, false)
  322. MUX_CFG(TNETV107X, GPIO53, 3, 25, 0x1f, 0x04, false)
  323. MUX_CFG(TNETV107X, SDIO1_CLK_0, 3, 25, 0x1f, 0x1c, false)
  324. MUX_CFG(TNETV107X, ASR_BA_1, 4, 0, 0x1f, 0x00, false)
  325. MUX_CFG(TNETV107X, GPIO54, 4, 0, 0x1f, 0x04, false)
  326. MUX_CFG(TNETV107X, SYS_PLL_CLK, 4, 0, 0x1f, 0x1c, false)
  327. MUX_CFG(TNETV107X, ASR_CS0, 4, 5, 0x1f, 0x00, false)
  328. MUX_CFG(TNETV107X, ASR_CS1, 4, 10, 0x1f, 0x00, false)
  329. MUX_CFG(TNETV107X, ASR_CS2, 4, 15, 0x1f, 0x00, false)
  330. MUX_CFG(TNETV107X, TDM_PLL_CLK, 4, 15, 0x1f, 0x1c, false)
  331. MUX_CFG(TNETV107X, ASR_CS3, 4, 20, 0x1f, 0x00, false)
  332. MUX_CFG(TNETV107X, ETH_PHY_CLK, 4, 20, 0x1f, 0x0c, false)
  333. MUX_CFG(TNETV107X, ASR_D00, 4, 25, 0x1f, 0x00, false)
  334. MUX_CFG(TNETV107X, GPIO55, 4, 25, 0x1f, 0x1c, false)
  335. MUX_CFG(TNETV107X, ASR_D01, 5, 0, 0x1f, 0x00, false)
  336. MUX_CFG(TNETV107X, GPIO56, 5, 0, 0x1f, 0x1c, false)
  337. MUX_CFG(TNETV107X, ASR_D02, 5, 5, 0x1f, 0x00, false)
  338. MUX_CFG(TNETV107X, GPIO57, 5, 5, 0x1f, 0x1c, false)
  339. MUX_CFG(TNETV107X, ASR_D03, 5, 10, 0x1f, 0x00, false)
  340. MUX_CFG(TNETV107X, GPIO58, 5, 10, 0x1f, 0x1c, false)
  341. MUX_CFG(TNETV107X, ASR_D04, 5, 15, 0x1f, 0x00, false)
  342. MUX_CFG(TNETV107X, GPIO59_0, 5, 15, 0x1f, 0x1c, false)
  343. MUX_CFG(TNETV107X, ASR_D05, 5, 20, 0x1f, 0x00, false)
  344. MUX_CFG(TNETV107X, GPIO60_0, 5, 20, 0x1f, 0x1c, false)
  345. MUX_CFG(TNETV107X, ASR_D06, 5, 25, 0x1f, 0x00, false)
  346. MUX_CFG(TNETV107X, GPIO61_0, 5, 25, 0x1f, 0x1c, false)
  347. MUX_CFG(TNETV107X, ASR_D07, 6, 0, 0x1f, 0x00, false)
  348. MUX_CFG(TNETV107X, GPIO62_0, 6, 0, 0x1f, 0x1c, false)
  349. MUX_CFG(TNETV107X, ASR_D08, 6, 5, 0x1f, 0x00, false)
  350. MUX_CFG(TNETV107X, GPIO63_0, 6, 5, 0x1f, 0x1c, false)
  351. MUX_CFG(TNETV107X, ASR_D09, 6, 10, 0x1f, 0x00, false)
  352. MUX_CFG(TNETV107X, GPIO64_0, 6, 10, 0x1f, 0x1c, false)
  353. MUX_CFG(TNETV107X, ASR_D10, 6, 15, 0x1f, 0x00, false)
  354. MUX_CFG(TNETV107X, SDIO1_DATA3_1, 6, 15, 0x1f, 0x1c, false)
  355. MUX_CFG(TNETV107X, ASR_D11, 6, 20, 0x1f, 0x00, false)
  356. MUX_CFG(TNETV107X, SDIO1_DATA2_1, 6, 20, 0x1f, 0x1c, false)
  357. MUX_CFG(TNETV107X, ASR_D12, 6, 25, 0x1f, 0x00, false)
  358. MUX_CFG(TNETV107X, SDIO1_DATA1_1, 6, 25, 0x1f, 0x1c, false)
  359. MUX_CFG(TNETV107X, ASR_D13, 7, 0, 0x1f, 0x00, false)
  360. MUX_CFG(TNETV107X, SDIO1_DATA0_1, 7, 0, 0x1f, 0x1c, false)
  361. MUX_CFG(TNETV107X, ASR_D14, 7, 5, 0x1f, 0x00, false)
  362. MUX_CFG(TNETV107X, SDIO1_CMD_1, 7, 5, 0x1f, 0x1c, false)
  363. MUX_CFG(TNETV107X, ASR_D15, 7, 10, 0x1f, 0x00, false)
  364. MUX_CFG(TNETV107X, SDIO1_CLK_1, 7, 10, 0x1f, 0x1c, false)
  365. MUX_CFG(TNETV107X, ASR_OE, 7, 15, 0x1f, 0x00, false)
  366. MUX_CFG(TNETV107X, BOOT_STRP_2, 7, 15, 0x1f, 0x04, false)
  367. MUX_CFG(TNETV107X, ASR_RNW, 7, 20, 0x1f, 0x00, false)
  368. MUX_CFG(TNETV107X, GPIO29_0, 7, 20, 0x1f, 0x04, false)
  369. MUX_CFG(TNETV107X, ASR_WAIT, 7, 25, 0x1f, 0x00, false)
  370. MUX_CFG(TNETV107X, GPIO30_0, 7, 25, 0x1f, 0x04, false)
  371. MUX_CFG(TNETV107X, ASR_WE, 8, 0, 0x1f, 0x00, false)
  372. MUX_CFG(TNETV107X, BOOT_STRP_3, 8, 0, 0x1f, 0x04, false)
  373. MUX_CFG(TNETV107X, ASR_WE_DQM0, 8, 5, 0x1f, 0x00, false)
  374. MUX_CFG(TNETV107X, GPIO31, 8, 5, 0x1f, 0x04, false)
  375. MUX_CFG(TNETV107X, LCD_PD17_0, 8, 5, 0x1f, 0x1c, false)
  376. MUX_CFG(TNETV107X, ASR_WE_DQM1, 8, 10, 0x1f, 0x00, false)
  377. MUX_CFG(TNETV107X, ASR_BA0_0, 8, 10, 0x1f, 0x04, false)
  378. MUX_CFG(TNETV107X, VLYNQ_CLK, 9, 0, 0x1f, 0x00, false)
  379. MUX_CFG(TNETV107X, GPIO14, 9, 0, 0x1f, 0x04, false)
  380. MUX_CFG(TNETV107X, LCD_PD19_0, 9, 0, 0x1f, 0x1c, false)
  381. MUX_CFG(TNETV107X, VLYNQ_RXD0, 9, 5, 0x1f, 0x00, false)
  382. MUX_CFG(TNETV107X, GPIO15, 9, 5, 0x1f, 0x04, false)
  383. MUX_CFG(TNETV107X, LCD_PD20_0, 9, 5, 0x1f, 0x1c, false)
  384. MUX_CFG(TNETV107X, VLYNQ_RXD1, 9, 10, 0x1f, 0x00, false)
  385. MUX_CFG(TNETV107X, GPIO16, 9, 10, 0x1f, 0x04, false)
  386. MUX_CFG(TNETV107X, LCD_PD21_0, 9, 10, 0x1f, 0x1c, false)
  387. MUX_CFG(TNETV107X, VLYNQ_TXD0, 9, 15, 0x1f, 0x00, false)
  388. MUX_CFG(TNETV107X, GPIO17, 9, 15, 0x1f, 0x04, false)
  389. MUX_CFG(TNETV107X, LCD_PD22_0, 9, 15, 0x1f, 0x1c, false)
  390. MUX_CFG(TNETV107X, VLYNQ_TXD1, 9, 20, 0x1f, 0x00, false)
  391. MUX_CFG(TNETV107X, GPIO18, 9, 20, 0x1f, 0x04, false)
  392. MUX_CFG(TNETV107X, LCD_PD23_0, 9, 20, 0x1f, 0x1c, false)
  393. MUX_CFG(TNETV107X, SDIO0_CLK, 10, 0, 0x1f, 0x00, false)
  394. MUX_CFG(TNETV107X, GPIO19, 10, 0, 0x1f, 0x04, false)
  395. MUX_CFG(TNETV107X, SDIO0_CMD, 10, 5, 0x1f, 0x00, false)
  396. MUX_CFG(TNETV107X, GPIO20, 10, 5, 0x1f, 0x04, false)
  397. MUX_CFG(TNETV107X, SDIO0_DATA0, 10, 10, 0x1f, 0x00, false)
  398. MUX_CFG(TNETV107X, GPIO21, 10, 10, 0x1f, 0x04, false)
  399. MUX_CFG(TNETV107X, SDIO0_DATA1, 10, 15, 0x1f, 0x00, false)
  400. MUX_CFG(TNETV107X, GPIO22, 10, 15, 0x1f, 0x04, false)
  401. MUX_CFG(TNETV107X, SDIO0_DATA2, 10, 20, 0x1f, 0x00, false)
  402. MUX_CFG(TNETV107X, GPIO23, 10, 20, 0x1f, 0x04, false)
  403. MUX_CFG(TNETV107X, SDIO0_DATA3, 10, 25, 0x1f, 0x00, false)
  404. MUX_CFG(TNETV107X, GPIO24, 10, 25, 0x1f, 0x04, false)
  405. MUX_CFG(TNETV107X, EMU0, 11, 0, 0x1f, 0x00, false)
  406. MUX_CFG(TNETV107X, EMU1, 11, 5, 0x1f, 0x00, false)
  407. MUX_CFG(TNETV107X, RTCK, 12, 0, 0x1f, 0x00, false)
  408. MUX_CFG(TNETV107X, TRST_N, 12, 5, 0x1f, 0x00, false)
  409. MUX_CFG(TNETV107X, TCK, 12, 10, 0x1f, 0x00, false)
  410. MUX_CFG(TNETV107X, TDI, 12, 15, 0x1f, 0x00, false)
  411. MUX_CFG(TNETV107X, TDO, 12, 20, 0x1f, 0x00, false)
  412. MUX_CFG(TNETV107X, TMS, 12, 25, 0x1f, 0x00, false)
  413. MUX_CFG(TNETV107X, TDM1_CLK, 13, 0, 0x1f, 0x00, false)
  414. MUX_CFG(TNETV107X, TDM1_RX, 13, 5, 0x1f, 0x00, false)
  415. MUX_CFG(TNETV107X, TDM1_TX, 13, 10, 0x1f, 0x00, false)
  416. MUX_CFG(TNETV107X, TDM1_FS, 13, 15, 0x1f, 0x00, false)
  417. MUX_CFG(TNETV107X, KEYPAD_R0, 14, 0, 0x1f, 0x00, false)
  418. MUX_CFG(TNETV107X, KEYPAD_R1, 14, 5, 0x1f, 0x00, false)
  419. MUX_CFG(TNETV107X, KEYPAD_R2, 14, 10, 0x1f, 0x00, false)
  420. MUX_CFG(TNETV107X, KEYPAD_R3, 14, 15, 0x1f, 0x00, false)
  421. MUX_CFG(TNETV107X, KEYPAD_R4, 14, 20, 0x1f, 0x00, false)
  422. MUX_CFG(TNETV107X, KEYPAD_R5, 14, 25, 0x1f, 0x00, false)
  423. MUX_CFG(TNETV107X, KEYPAD_R6, 15, 0, 0x1f, 0x00, false)
  424. MUX_CFG(TNETV107X, GPIO12, 15, 0, 0x1f, 0x04, false)
  425. MUX_CFG(TNETV107X, KEYPAD_R7, 15, 5, 0x1f, 0x00, false)
  426. MUX_CFG(TNETV107X, GPIO10, 15, 5, 0x1f, 0x04, false)
  427. MUX_CFG(TNETV107X, KEYPAD_C0, 15, 10, 0x1f, 0x00, false)
  428. MUX_CFG(TNETV107X, KEYPAD_C1, 15, 15, 0x1f, 0x00, false)
  429. MUX_CFG(TNETV107X, KEYPAD_C2, 15, 20, 0x1f, 0x00, false)
  430. MUX_CFG(TNETV107X, KEYPAD_C3, 15, 25, 0x1f, 0x00, false)
  431. MUX_CFG(TNETV107X, KEYPAD_C4, 16, 0, 0x1f, 0x00, false)
  432. MUX_CFG(TNETV107X, KEYPAD_C5, 16, 5, 0x1f, 0x00, false)
  433. MUX_CFG(TNETV107X, KEYPAD_C6, 16, 10, 0x1f, 0x00, false)
  434. MUX_CFG(TNETV107X, GPIO13, 16, 10, 0x1f, 0x04, false)
  435. MUX_CFG(TNETV107X, TEST_CLK_IN, 16, 10, 0x1f, 0x0c, false)
  436. MUX_CFG(TNETV107X, KEYPAD_C7, 16, 15, 0x1f, 0x00, false)
  437. MUX_CFG(TNETV107X, GPIO11, 16, 15, 0x1f, 0x04, false)
  438. MUX_CFG(TNETV107X, SSP0_0, 17, 0, 0x1f, 0x00, false)
  439. MUX_CFG(TNETV107X, SCC_DCLK, 17, 0, 0x1f, 0x04, false)
  440. MUX_CFG(TNETV107X, LCD_PD20_1, 17, 0, 0x1f, 0x0c, false)
  441. MUX_CFG(TNETV107X, SSP0_1, 17, 5, 0x1f, 0x00, false)
  442. MUX_CFG(TNETV107X, SCC_CS_N, 17, 5, 0x1f, 0x04, false)
  443. MUX_CFG(TNETV107X, LCD_PD21_1, 17, 5, 0x1f, 0x0c, false)
  444. MUX_CFG(TNETV107X, SSP0_2, 17, 10, 0x1f, 0x00, false)
  445. MUX_CFG(TNETV107X, SCC_D, 17, 10, 0x1f, 0x04, false)
  446. MUX_CFG(TNETV107X, LCD_PD22_1, 17, 10, 0x1f, 0x0c, false)
  447. MUX_CFG(TNETV107X, SSP0_3, 17, 15, 0x1f, 0x00, false)
  448. MUX_CFG(TNETV107X, SCC_RESETN, 17, 15, 0x1f, 0x04, false)
  449. MUX_CFG(TNETV107X, LCD_PD23_1, 17, 15, 0x1f, 0x0c, false)
  450. MUX_CFG(TNETV107X, SSP1_0, 18, 0, 0x1f, 0x00, false)
  451. MUX_CFG(TNETV107X, GPIO25, 18, 0, 0x1f, 0x04, false)
  452. MUX_CFG(TNETV107X, UART2_CTS, 18, 0, 0x1f, 0x0c, false)
  453. MUX_CFG(TNETV107X, SSP1_1, 18, 5, 0x1f, 0x00, false)
  454. MUX_CFG(TNETV107X, GPIO26, 18, 5, 0x1f, 0x04, false)
  455. MUX_CFG(TNETV107X, UART2_RD, 18, 5, 0x1f, 0x0c, false)
  456. MUX_CFG(TNETV107X, SSP1_2, 18, 10, 0x1f, 0x00, false)
  457. MUX_CFG(TNETV107X, GPIO27, 18, 10, 0x1f, 0x04, false)
  458. MUX_CFG(TNETV107X, UART2_RTS, 18, 10, 0x1f, 0x0c, false)
  459. MUX_CFG(TNETV107X, SSP1_3, 18, 15, 0x1f, 0x00, false)
  460. MUX_CFG(TNETV107X, GPIO28, 18, 15, 0x1f, 0x04, false)
  461. MUX_CFG(TNETV107X, UART2_TD, 18, 15, 0x1f, 0x0c, false)
  462. MUX_CFG(TNETV107X, UART0_CTS, 19, 0, 0x1f, 0x00, false)
  463. MUX_CFG(TNETV107X, UART0_RD, 19, 5, 0x1f, 0x00, false)
  464. MUX_CFG(TNETV107X, UART0_RTS, 19, 10, 0x1f, 0x00, false)
  465. MUX_CFG(TNETV107X, UART0_TD, 19, 15, 0x1f, 0x00, false)
  466. MUX_CFG(TNETV107X, UART1_RD, 19, 20, 0x1f, 0x00, false)
  467. MUX_CFG(TNETV107X, UART1_TD, 19, 25, 0x1f, 0x00, false)
  468. MUX_CFG(TNETV107X, LCD_AC_NCS, 20, 0, 0x1f, 0x00, false)
  469. MUX_CFG(TNETV107X, LCD_HSYNC_RNW, 20, 5, 0x1f, 0x00, false)
  470. MUX_CFG(TNETV107X, LCD_VSYNC_A0, 20, 10, 0x1f, 0x00, false)
  471. MUX_CFG(TNETV107X, LCD_MCLK, 20, 15, 0x1f, 0x00, false)
  472. MUX_CFG(TNETV107X, LCD_PD16_0, 20, 15, 0x1f, 0x0c, false)
  473. MUX_CFG(TNETV107X, LCD_PCLK_E, 20, 20, 0x1f, 0x00, false)
  474. MUX_CFG(TNETV107X, LCD_PD00, 20, 25, 0x1f, 0x00, false)
  475. MUX_CFG(TNETV107X, LCD_PD01, 21, 0, 0x1f, 0x00, false)
  476. MUX_CFG(TNETV107X, LCD_PD02, 21, 5, 0x1f, 0x00, false)
  477. MUX_CFG(TNETV107X, LCD_PD03, 21, 10, 0x1f, 0x00, false)
  478. MUX_CFG(TNETV107X, LCD_PD04, 21, 15, 0x1f, 0x00, false)
  479. MUX_CFG(TNETV107X, LCD_PD05, 21, 20, 0x1f, 0x00, false)
  480. MUX_CFG(TNETV107X, LCD_PD06, 21, 25, 0x1f, 0x00, false)
  481. MUX_CFG(TNETV107X, LCD_PD07, 22, 0, 0x1f, 0x00, false)
  482. MUX_CFG(TNETV107X, LCD_PD08, 22, 5, 0x1f, 0x00, false)
  483. MUX_CFG(TNETV107X, GPIO59_1, 22, 5, 0x1f, 0x0c, false)
  484. MUX_CFG(TNETV107X, LCD_PD09, 22, 10, 0x1f, 0x00, false)
  485. MUX_CFG(TNETV107X, GPIO60_1, 22, 10, 0x1f, 0x0c, false)
  486. MUX_CFG(TNETV107X, LCD_PD10, 22, 15, 0x1f, 0x00, false)
  487. MUX_CFG(TNETV107X, ASR_BA0_1, 22, 15, 0x1f, 0x04, false)
  488. MUX_CFG(TNETV107X, GPIO61_1, 22, 15, 0x1f, 0x0c, false)
  489. MUX_CFG(TNETV107X, LCD_PD11, 22, 20, 0x1f, 0x00, false)
  490. MUX_CFG(TNETV107X, GPIO62_1, 22, 20, 0x1f, 0x0c, false)
  491. MUX_CFG(TNETV107X, LCD_PD12, 22, 25, 0x1f, 0x00, false)
  492. MUX_CFG(TNETV107X, GPIO63_1, 22, 25, 0x1f, 0x0c, false)
  493. MUX_CFG(TNETV107X, LCD_PD13, 23, 0, 0x1f, 0x00, false)
  494. MUX_CFG(TNETV107X, GPIO64_1, 23, 0, 0x1f, 0x0c, false)
  495. MUX_CFG(TNETV107X, LCD_PD14, 23, 5, 0x1f, 0x00, false)
  496. MUX_CFG(TNETV107X, GPIO29_1, 23, 5, 0x1f, 0x0c, false)
  497. MUX_CFG(TNETV107X, LCD_PD15, 23, 10, 0x1f, 0x00, false)
  498. MUX_CFG(TNETV107X, GPIO30_1, 23, 10, 0x1f, 0x0c, false)
  499. MUX_CFG(TNETV107X, EINT0, 24, 0, 0x1f, 0x00, false)
  500. MUX_CFG(TNETV107X, GPIO08, 24, 0, 0x1f, 0x04, false)
  501. MUX_CFG(TNETV107X, EINT1, 24, 5, 0x1f, 0x00, false)
  502. MUX_CFG(TNETV107X, GPIO09, 24, 5, 0x1f, 0x04, false)
  503. MUX_CFG(TNETV107X, GPIO00, 24, 10, 0x1f, 0x00, false)
  504. MUX_CFG(TNETV107X, LCD_PD20_2, 24, 10, 0x1f, 0x04, false)
  505. MUX_CFG(TNETV107X, TDM_CLK_IN_2, 24, 10, 0x1f, 0x0c, false)
  506. MUX_CFG(TNETV107X, GPIO01, 24, 15, 0x1f, 0x00, false)
  507. MUX_CFG(TNETV107X, LCD_PD21_2, 24, 15, 0x1f, 0x04, false)
  508. MUX_CFG(TNETV107X, 24M_CLK_OUT_1, 24, 15, 0x1f, 0x0c, false)
  509. MUX_CFG(TNETV107X, GPIO02, 24, 20, 0x1f, 0x00, false)
  510. MUX_CFG(TNETV107X, LCD_PD22_2, 24, 20, 0x1f, 0x04, false)
  511. MUX_CFG(TNETV107X, GPIO03, 24, 25, 0x1f, 0x00, false)
  512. MUX_CFG(TNETV107X, LCD_PD23_2, 24, 25, 0x1f, 0x04, false)
  513. MUX_CFG(TNETV107X, GPIO04, 25, 0, 0x1f, 0x00, false)
  514. MUX_CFG(TNETV107X, LCD_PD16_1, 25, 0, 0x1f, 0x04, false)
  515. MUX_CFG(TNETV107X, USB0_RXERR, 25, 0, 0x1f, 0x0c, false)
  516. MUX_CFG(TNETV107X, GPIO05, 25, 5, 0x1f, 0x00, false)
  517. MUX_CFG(TNETV107X, LCD_PD17_1, 25, 5, 0x1f, 0x04, false)
  518. MUX_CFG(TNETV107X, TDM_CLK_IN_1, 25, 5, 0x1f, 0x0c, false)
  519. MUX_CFG(TNETV107X, GPIO06, 25, 10, 0x1f, 0x00, false)
  520. MUX_CFG(TNETV107X, LCD_PD18, 25, 10, 0x1f, 0x04, false)
  521. MUX_CFG(TNETV107X, 24M_CLK_OUT_2, 25, 10, 0x1f, 0x0c, false)
  522. MUX_CFG(TNETV107X, GPIO07, 25, 15, 0x1f, 0x00, false)
  523. MUX_CFG(TNETV107X, LCD_PD19_1, 25, 15, 0x1f, 0x04, false)
  524. MUX_CFG(TNETV107X, USB1_RXERR, 25, 15, 0x1f, 0x0c, false)
  525. MUX_CFG(TNETV107X, ETH_PLL_CLK, 25, 15, 0x1f, 0x1c, false)
  526. MUX_CFG(TNETV107X, MDIO, 26, 0, 0x1f, 0x00, false)
  527. MUX_CFG(TNETV107X, MDC, 26, 5, 0x1f, 0x00, false)
  528. MUX_CFG(TNETV107X, AIC_MUTE_STAT_N, 26, 10, 0x1f, 0x00, false)
  529. MUX_CFG(TNETV107X, TDM0_CLK, 26, 10, 0x1f, 0x04, false)
  530. MUX_CFG(TNETV107X, AIC_HNS_EN_N, 26, 15, 0x1f, 0x00, false)
  531. MUX_CFG(TNETV107X, TDM0_FS, 26, 15, 0x1f, 0x04, false)
  532. MUX_CFG(TNETV107X, AIC_HDS_EN_STAT_N, 26, 20, 0x1f, 0x00, false)
  533. MUX_CFG(TNETV107X, TDM0_TX, 26, 20, 0x1f, 0x04, false)
  534. MUX_CFG(TNETV107X, AIC_HNF_EN_STAT_N, 26, 25, 0x1f, 0x00, false)
  535. MUX_CFG(TNETV107X, TDM0_RX, 26, 25, 0x1f, 0x04, false)
  536. #endif
  537. };
  538. /* FIQ are pri 0-1; otherwise 2-7, with 7 lowest priority */
  539. static u8 irq_prios[TNETV107X_N_CP_INTC_IRQ] = {
  540. /* fill in default priority 7 */
  541. [0 ... (TNETV107X_N_CP_INTC_IRQ - 1)] = 7,
  542. /* now override as needed, e.g. [xxx] = 5 */
  543. };
  544. /* Contents of JTAG ID register used to identify exact cpu type */
  545. static struct davinci_id ids[] = {
  546. {
  547. .variant = 0x0,
  548. .part_no = 0xb8a1,
  549. .manufacturer = 0x017,
  550. .cpu_id = DAVINCI_CPU_ID_TNETV107X,
  551. .name = "tnetv107x rev 1.0",
  552. },
  553. {
  554. .variant = 0x1,
  555. .part_no = 0xb8a1,
  556. .manufacturer = 0x017,
  557. .cpu_id = DAVINCI_CPU_ID_TNETV107X,
  558. .name = "tnetv107x rev 1.1/1.2",
  559. },
  560. };
  561. static struct davinci_timer_instance timer_instance[2] = {
  562. {
  563. .base = TNETV107X_TIMER0_BASE,
  564. .bottom_irq = IRQ_TNETV107X_TIMER_0_TINT12,
  565. .top_irq = IRQ_TNETV107X_TIMER_0_TINT34,
  566. },
  567. {
  568. .base = TNETV107X_TIMER1_BASE,
  569. .bottom_irq = IRQ_TNETV107X_TIMER_1_TINT12,
  570. .top_irq = IRQ_TNETV107X_TIMER_1_TINT34,
  571. },
  572. };
  573. static struct davinci_timer_info timer_info = {
  574. .timers = timer_instance,
  575. .clockevent_id = T0_BOT,
  576. .clocksource_id = T0_TOP,
  577. };
  578. /*
  579. * TNETV107X platforms do not use the static mappings from Davinci
  580. * IO_PHYS/IO_VIRT. This SOC's interesting MMRs are at different addresses,
  581. * and changing IO_PHYS would break away from existing Davinci SOCs.
  582. *
  583. * The primary impact of the current model is that IO_ADDRESS() is not to be
  584. * used to map registers on TNETV107X.
  585. *
  586. * 1. The first chunk is for INTC: This needs to be mapped in via iotable
  587. * because ioremap() does not seem to be operational at the time when
  588. * irqs are initialized. Without this, consistent dma init bombs.
  589. *
  590. * 2. The second chunk maps in register areas that need to be populated into
  591. * davinci_soc_info. Note that alignment restrictions come into play if
  592. * low-level debug is enabled (see note in <mach/tnetv107x.h>).
  593. */
  594. static struct map_desc io_desc[] = {
  595. { /* INTC */
  596. .virtual = IO_VIRT,
  597. .pfn = __phys_to_pfn(TNETV107X_INTC_BASE),
  598. .length = SZ_16K,
  599. .type = MT_DEVICE
  600. },
  601. { /* Most of the rest */
  602. .virtual = TNETV107X_IO_VIRT,
  603. .pfn = __phys_to_pfn(TNETV107X_IO_BASE),
  604. .length = IO_SIZE - SZ_1M,
  605. .type = MT_DEVICE
  606. },
  607. };
  608. static unsigned long clk_sspll_recalc(struct clk *clk)
  609. {
  610. int pll;
  611. unsigned long mult = 0, prediv = 1, postdiv = 1;
  612. unsigned long ref = OSC_FREQ_ONCHIP, ret;
  613. u32 tmp;
  614. if (WARN_ON(!clk->pll_data))
  615. return clk->rate;
  616. if (!clk_ctrl_regs) {
  617. void __iomem *tmp;
  618. tmp = ioremap(TNETV107X_CLOCK_CONTROL_BASE, SZ_4K);
  619. if (WARN(!tmp, "failed ioremap for clock control regs\n"))
  620. return clk->parent ? clk->parent->rate : 0;
  621. for (pll = 0; pll < N_PLLS; pll++)
  622. sspll_regs[pll] = tmp + sspll_regs_base[pll];
  623. clk_ctrl_regs = tmp;
  624. }
  625. pll = clk->pll_data->num;
  626. tmp = __raw_readl(&clk_ctrl_regs->pll_bypass);
  627. if (!(tmp & bypass_mask[pll])) {
  628. mult = __raw_readl(&sspll_regs[pll]->mult_factor);
  629. prediv = __raw_readl(&sspll_regs[pll]->pre_div) + 1;
  630. postdiv = __raw_readl(&sspll_regs[pll]->post_div) + 1;
  631. }
  632. tmp = __raw_readl(clk->pll_data->base + PLLCTL);
  633. if (tmp & PLLCTL_CLKMODE)
  634. ref = pll_ext_freq[pll];
  635. clk->pll_data->input_rate = ref;
  636. tmp = __raw_readl(clk->pll_data->base + PLLCTL);
  637. if (!(tmp & PLLCTL_PLLEN))
  638. return ref;
  639. ret = ref;
  640. if (mult)
  641. ret += ((unsigned long long)ref * mult) / 256;
  642. ret /= (prediv * postdiv);
  643. return ret;
  644. }
  645. static void tnetv107x_watchdog_reset(struct platform_device *pdev)
  646. {
  647. struct wdt_regs __iomem *regs;
  648. regs = ioremap(pdev->resource[0].start, SZ_4K);
  649. /* disable watchdog */
  650. __raw_writel(0x7777, &regs->disable_lock);
  651. __raw_writel(0xcccc, &regs->disable_lock);
  652. __raw_writel(0xdddd, &regs->disable_lock);
  653. __raw_writel(0, &regs->disable);
  654. /* program prescale */
  655. __raw_writel(0x5a5a, &regs->prescale_lock);
  656. __raw_writel(0xa5a5, &regs->prescale_lock);
  657. __raw_writel(0, &regs->prescale);
  658. /* program countdown */
  659. __raw_writel(0x6666, &regs->change_lock);
  660. __raw_writel(0xbbbb, &regs->change_lock);
  661. __raw_writel(1, &regs->change);
  662. /* enable watchdog */
  663. __raw_writel(0x7777, &regs->disable_lock);
  664. __raw_writel(0xcccc, &regs->disable_lock);
  665. __raw_writel(0xdddd, &regs->disable_lock);
  666. __raw_writel(1, &regs->disable);
  667. /* kick */
  668. __raw_writel(0x5555, &regs->kick_lock);
  669. __raw_writel(0xaaaa, &regs->kick_lock);
  670. __raw_writel(1, &regs->kick);
  671. }
  672. void tnetv107x_restart(char mode, const char *cmd)
  673. {
  674. tnetv107x_watchdog_reset(&tnetv107x_wdt_device);
  675. }
  676. static struct davinci_soc_info tnetv107x_soc_info = {
  677. .io_desc = io_desc,
  678. .io_desc_num = ARRAY_SIZE(io_desc),
  679. .ids = ids,
  680. .ids_num = ARRAY_SIZE(ids),
  681. .jtag_id_reg = TNETV107X_CHIP_CFG_BASE + 0x018,
  682. .cpu_clks = clks,
  683. .psc_bases = psc_regs,
  684. .psc_bases_num = ARRAY_SIZE(psc_regs),
  685. .pinmux_base = TNETV107X_CHIP_CFG_BASE + 0x150,
  686. .pinmux_pins = pins,
  687. .pinmux_pins_num = ARRAY_SIZE(pins),
  688. .intc_type = DAVINCI_INTC_TYPE_CP_INTC,
  689. .intc_base = TNETV107X_INTC_BASE,
  690. .intc_irq_prios = irq_prios,
  691. .intc_irq_num = TNETV107X_N_CP_INTC_IRQ,
  692. .intc_host_map = intc_host_map,
  693. .gpio_base = TNETV107X_GPIO_BASE,
  694. .gpio_type = GPIO_TYPE_TNETV107X,
  695. .gpio_num = TNETV107X_N_GPIO,
  696. .timer_info = &timer_info,
  697. .serial_dev = &tnetv107x_serial_device,
  698. };
  699. void __init tnetv107x_init(void)
  700. {
  701. davinci_common_init(&tnetv107x_soc_info);
  702. }