tnetv107x.c 29 KB

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