keystone_net.c 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171
  1. /*
  2. * Ethernet driver for TI K2HK EVM.
  3. *
  4. * (C) Copyright 2012-2014
  5. * Texas Instruments Incorporated, <www.ti.com>
  6. *
  7. * SPDX-License-Identifier: GPL-2.0+
  8. */
  9. #include <common.h>
  10. #include <command.h>
  11. #include <console.h>
  12. #include <dm.h>
  13. #include <dm/lists.h>
  14. #include <net.h>
  15. #include <phy.h>
  16. #include <errno.h>
  17. #include <miiphy.h>
  18. #include <malloc.h>
  19. #include <asm/ti-common/keystone_nav.h>
  20. #include <asm/ti-common/keystone_net.h>
  21. #include <asm/ti-common/keystone_serdes.h>
  22. #include <asm/arch/psc_defs.h>
  23. DECLARE_GLOBAL_DATA_PTR;
  24. #ifndef CONFIG_DM_ETH
  25. unsigned int emac_open;
  26. static struct mii_dev *mdio_bus;
  27. static unsigned int sys_has_mdio = 1;
  28. #endif
  29. #ifdef KEYSTONE2_EMAC_GIG_ENABLE
  30. #define emac_gigabit_enable(x) keystone2_eth_gigabit_enable(x)
  31. #else
  32. #define emac_gigabit_enable(x) /* no gigabit to enable */
  33. #endif
  34. #define RX_BUFF_NUMS 24
  35. #define RX_BUFF_LEN 1520
  36. #define MAX_SIZE_STREAM_BUFFER RX_BUFF_LEN
  37. #define SGMII_ANEG_TIMEOUT 4000
  38. static u8 rx_buffs[RX_BUFF_NUMS * RX_BUFF_LEN] __aligned(16);
  39. #ifndef CONFIG_DM_ETH
  40. struct rx_buff_desc net_rx_buffs = {
  41. .buff_ptr = rx_buffs,
  42. .num_buffs = RX_BUFF_NUMS,
  43. .buff_len = RX_BUFF_LEN,
  44. .rx_flow = 22,
  45. };
  46. #endif
  47. #ifdef CONFIG_DM_ETH
  48. enum link_type {
  49. LINK_TYPE_SGMII_MAC_TO_MAC_AUTO = 0,
  50. LINK_TYPE_SGMII_MAC_TO_PHY_MODE = 1,
  51. LINK_TYPE_SGMII_MAC_TO_MAC_FORCED_MODE = 2,
  52. LINK_TYPE_SGMII_MAC_TO_FIBRE_MODE = 3,
  53. LINK_TYPE_SGMII_MAC_TO_PHY_NO_MDIO_MODE = 4,
  54. LINK_TYPE_RGMII_LINK_MAC_PHY = 5,
  55. LINK_TYPE_RGMII_LINK_MAC_MAC_FORCED = 6,
  56. LINK_TYPE_RGMII_LINK_MAC_PHY_NO_MDIO = 7,
  57. LINK_TYPE_10G_MAC_TO_PHY_MODE = 10,
  58. LINK_TYPE_10G_MAC_TO_MAC_FORCED_MODE = 11,
  59. };
  60. #define mac_hi(mac) (((mac)[0] << 0) | ((mac)[1] << 8) | \
  61. ((mac)[2] << 16) | ((mac)[3] << 24))
  62. #define mac_lo(mac) (((mac)[4] << 0) | ((mac)[5] << 8))
  63. #ifdef CONFIG_KSNET_NETCP_V1_0
  64. #define EMAC_EMACSW_BASE_OFS 0x90800
  65. #define EMAC_EMACSW_PORT_BASE_OFS (EMAC_EMACSW_BASE_OFS + 0x60)
  66. /* CPSW Switch slave registers */
  67. #define CPGMACSL_REG_SA_LO 0x10
  68. #define CPGMACSL_REG_SA_HI 0x14
  69. #define DEVICE_EMACSW_BASE(base, x) ((base) + EMAC_EMACSW_PORT_BASE_OFS + \
  70. (x) * 0x30)
  71. #elif defined CONFIG_KSNET_NETCP_V1_5
  72. #define EMAC_EMACSW_PORT_BASE_OFS 0x222000
  73. /* CPSW Switch slave registers */
  74. #define CPGMACSL_REG_SA_LO 0x308
  75. #define CPGMACSL_REG_SA_HI 0x30c
  76. #define DEVICE_EMACSW_BASE(base, x) ((base) + EMAC_EMACSW_PORT_BASE_OFS + \
  77. (x) * 0x1000)
  78. #endif
  79. struct ks2_eth_priv {
  80. struct udevice *dev;
  81. struct phy_device *phydev;
  82. struct mii_dev *mdio_bus;
  83. int phy_addr;
  84. phy_interface_t phy_if;
  85. int sgmii_link_type;
  86. void *mdio_base;
  87. struct rx_buff_desc net_rx_buffs;
  88. struct pktdma_cfg *netcp_pktdma;
  89. void *hd;
  90. int slave_port;
  91. enum link_type link_type;
  92. bool emac_open;
  93. bool has_mdio;
  94. };
  95. #endif
  96. /* MDIO */
  97. static int keystone2_mdio_reset(struct mii_dev *bus)
  98. {
  99. u_int32_t clkdiv;
  100. struct mdio_regs *adap_mdio = bus->priv;
  101. clkdiv = (EMAC_MDIO_BUS_FREQ / EMAC_MDIO_CLOCK_FREQ) - 1;
  102. writel((clkdiv & 0xffff) | MDIO_CONTROL_ENABLE |
  103. MDIO_CONTROL_FAULT | MDIO_CONTROL_FAULT_ENABLE,
  104. &adap_mdio->control);
  105. while (readl(&adap_mdio->control) & MDIO_CONTROL_IDLE)
  106. ;
  107. return 0;
  108. }
  109. /**
  110. * keystone2_mdio_read - read a PHY register via MDIO interface.
  111. * Blocks until operation is complete.
  112. */
  113. static int keystone2_mdio_read(struct mii_dev *bus,
  114. int addr, int devad, int reg)
  115. {
  116. int tmp;
  117. struct mdio_regs *adap_mdio = bus->priv;
  118. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  119. ;
  120. writel(MDIO_USERACCESS0_GO | MDIO_USERACCESS0_WRITE_READ |
  121. ((reg & 0x1f) << 21) | ((addr & 0x1f) << 16),
  122. &adap_mdio->useraccess0);
  123. /* Wait for command to complete */
  124. while ((tmp = readl(&adap_mdio->useraccess0)) & MDIO_USERACCESS0_GO)
  125. ;
  126. if (tmp & MDIO_USERACCESS0_ACK)
  127. return tmp & 0xffff;
  128. return -1;
  129. }
  130. /**
  131. * keystone2_mdio_write - write to a PHY register via MDIO interface.
  132. * Blocks until operation is complete.
  133. */
  134. static int keystone2_mdio_write(struct mii_dev *bus,
  135. int addr, int devad, int reg, u16 val)
  136. {
  137. struct mdio_regs *adap_mdio = bus->priv;
  138. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  139. ;
  140. writel(MDIO_USERACCESS0_GO | MDIO_USERACCESS0_WRITE_WRITE |
  141. ((reg & 0x1f) << 21) | ((addr & 0x1f) << 16) |
  142. (val & 0xffff), &adap_mdio->useraccess0);
  143. /* Wait for command to complete */
  144. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  145. ;
  146. return 0;
  147. }
  148. #ifndef CONFIG_DM_ETH
  149. static void __attribute__((unused))
  150. keystone2_eth_gigabit_enable(struct eth_device *dev)
  151. {
  152. u_int16_t data;
  153. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  154. if (sys_has_mdio) {
  155. data = keystone2_mdio_read(mdio_bus, eth_priv->phy_addr,
  156. MDIO_DEVAD_NONE, 0);
  157. /* speed selection MSB */
  158. if (!(data & (1 << 6)))
  159. return;
  160. }
  161. /*
  162. * Check if link detected is giga-bit
  163. * If Gigabit mode detected, enable gigbit in MAC
  164. */
  165. writel(readl(DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) +
  166. CPGMACSL_REG_CTL) |
  167. EMAC_MACCONTROL_GIGFORCE | EMAC_MACCONTROL_GIGABIT_ENABLE,
  168. DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) + CPGMACSL_REG_CTL);
  169. }
  170. #else
  171. static void __attribute__((unused))
  172. keystone2_eth_gigabit_enable(struct udevice *dev)
  173. {
  174. struct ks2_eth_priv *priv = dev_get_priv(dev);
  175. u_int16_t data;
  176. if (priv->has_mdio) {
  177. data = keystone2_mdio_read(priv->mdio_bus, priv->phy_addr,
  178. MDIO_DEVAD_NONE, 0);
  179. /* speed selection MSB */
  180. if (!(data & (1 << 6)))
  181. return;
  182. }
  183. /*
  184. * Check if link detected is giga-bit
  185. * If Gigabit mode detected, enable gigbit in MAC
  186. */
  187. writel(readl(DEVICE_EMACSL_BASE(priv->slave_port - 1) +
  188. CPGMACSL_REG_CTL) |
  189. EMAC_MACCONTROL_GIGFORCE | EMAC_MACCONTROL_GIGABIT_ENABLE,
  190. DEVICE_EMACSL_BASE(priv->slave_port - 1) + CPGMACSL_REG_CTL);
  191. }
  192. #endif
  193. #ifdef CONFIG_SOC_K2G
  194. int keystone_rgmii_config(struct phy_device *phy_dev)
  195. {
  196. unsigned int i, status;
  197. i = 0;
  198. do {
  199. if (i > SGMII_ANEG_TIMEOUT) {
  200. puts(" TIMEOUT !\n");
  201. phy_dev->link = 0;
  202. return 0;
  203. }
  204. if (ctrlc()) {
  205. puts("user interrupt!\n");
  206. phy_dev->link = 0;
  207. return -EINTR;
  208. }
  209. if ((i++ % 500) == 0)
  210. printf(".");
  211. udelay(1000); /* 1 ms */
  212. status = readl(RGMII_STATUS_REG);
  213. } while (!(status & RGMII_REG_STATUS_LINK));
  214. puts(" done\n");
  215. return 0;
  216. }
  217. #else
  218. int keystone_sgmii_config(struct phy_device *phy_dev, int port, int interface)
  219. {
  220. unsigned int i, status, mask;
  221. unsigned int mr_adv_ability, control;
  222. switch (interface) {
  223. case SGMII_LINK_MAC_MAC_AUTONEG:
  224. mr_adv_ability = (SGMII_REG_MR_ADV_ENABLE |
  225. SGMII_REG_MR_ADV_LINK |
  226. SGMII_REG_MR_ADV_FULL_DUPLEX |
  227. SGMII_REG_MR_ADV_GIG_MODE);
  228. control = (SGMII_REG_CONTROL_MASTER |
  229. SGMII_REG_CONTROL_AUTONEG);
  230. break;
  231. case SGMII_LINK_MAC_PHY:
  232. case SGMII_LINK_MAC_PHY_FORCED:
  233. mr_adv_ability = SGMII_REG_MR_ADV_ENABLE;
  234. control = SGMII_REG_CONTROL_AUTONEG;
  235. break;
  236. case SGMII_LINK_MAC_MAC_FORCED:
  237. mr_adv_ability = (SGMII_REG_MR_ADV_ENABLE |
  238. SGMII_REG_MR_ADV_LINK |
  239. SGMII_REG_MR_ADV_FULL_DUPLEX |
  240. SGMII_REG_MR_ADV_GIG_MODE);
  241. control = SGMII_REG_CONTROL_MASTER;
  242. break;
  243. case SGMII_LINK_MAC_FIBER:
  244. mr_adv_ability = 0x20;
  245. control = SGMII_REG_CONTROL_AUTONEG;
  246. break;
  247. default:
  248. mr_adv_ability = SGMII_REG_MR_ADV_ENABLE;
  249. control = SGMII_REG_CONTROL_AUTONEG;
  250. }
  251. __raw_writel(0, SGMII_CTL_REG(port));
  252. /*
  253. * Wait for the SerDes pll to lock,
  254. * but don't trap if lock is never read
  255. */
  256. for (i = 0; i < 1000; i++) {
  257. udelay(2000);
  258. status = __raw_readl(SGMII_STATUS_REG(port));
  259. if ((status & SGMII_REG_STATUS_LOCK) != 0)
  260. break;
  261. }
  262. __raw_writel(mr_adv_ability, SGMII_MRADV_REG(port));
  263. __raw_writel(control, SGMII_CTL_REG(port));
  264. mask = SGMII_REG_STATUS_LINK;
  265. if (control & SGMII_REG_CONTROL_AUTONEG)
  266. mask |= SGMII_REG_STATUS_AUTONEG;
  267. status = __raw_readl(SGMII_STATUS_REG(port));
  268. if ((status & mask) == mask)
  269. return 0;
  270. printf("\n%s Waiting for SGMII auto negotiation to complete",
  271. phy_dev->dev->name);
  272. while ((status & mask) != mask) {
  273. /*
  274. * Timeout reached ?
  275. */
  276. if (i > SGMII_ANEG_TIMEOUT) {
  277. puts(" TIMEOUT !\n");
  278. phy_dev->link = 0;
  279. return 0;
  280. }
  281. if (ctrlc()) {
  282. puts("user interrupt!\n");
  283. phy_dev->link = 0;
  284. return -EINTR;
  285. }
  286. if ((i++ % 500) == 0)
  287. printf(".");
  288. udelay(1000); /* 1 ms */
  289. status = __raw_readl(SGMII_STATUS_REG(port));
  290. }
  291. puts(" done\n");
  292. return 0;
  293. }
  294. #endif
  295. int mac_sl_reset(u32 port)
  296. {
  297. u32 i, v;
  298. if (port >= DEVICE_N_GMACSL_PORTS)
  299. return GMACSL_RET_INVALID_PORT;
  300. /* Set the soft reset bit */
  301. writel(CPGMAC_REG_RESET_VAL_RESET,
  302. DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  303. /* Wait for the bit to clear */
  304. for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) {
  305. v = readl(DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  306. if ((v & CPGMAC_REG_RESET_VAL_RESET_MASK) !=
  307. CPGMAC_REG_RESET_VAL_RESET)
  308. return GMACSL_RET_OK;
  309. }
  310. /* Timeout on the reset */
  311. return GMACSL_RET_WARN_RESET_INCOMPLETE;
  312. }
  313. int mac_sl_config(u_int16_t port, struct mac_sl_cfg *cfg)
  314. {
  315. u32 v, i;
  316. int ret = GMACSL_RET_OK;
  317. if (port >= DEVICE_N_GMACSL_PORTS)
  318. return GMACSL_RET_INVALID_PORT;
  319. if (cfg->max_rx_len > CPGMAC_REG_MAXLEN_LEN) {
  320. cfg->max_rx_len = CPGMAC_REG_MAXLEN_LEN;
  321. ret = GMACSL_RET_WARN_MAXLEN_TOO_BIG;
  322. }
  323. /* Must wait if the device is undergoing reset */
  324. for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) {
  325. v = readl(DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  326. if ((v & CPGMAC_REG_RESET_VAL_RESET_MASK) !=
  327. CPGMAC_REG_RESET_VAL_RESET)
  328. break;
  329. }
  330. if (i == DEVICE_EMACSL_RESET_POLL_COUNT)
  331. return GMACSL_RET_CONFIG_FAIL_RESET_ACTIVE;
  332. writel(cfg->max_rx_len, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_MAXLEN);
  333. writel(cfg->ctl, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_CTL);
  334. #ifndef CONFIG_SOC_K2HK
  335. /* Map RX packet flow priority to 0 */
  336. writel(0, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RX_PRI_MAP);
  337. #endif
  338. return ret;
  339. }
  340. int ethss_config(u32 ctl, u32 max_pkt_size)
  341. {
  342. u32 i;
  343. /* Max length register */
  344. writel(max_pkt_size, DEVICE_CPSW_BASE + CPSW_REG_MAXLEN);
  345. /* Control register */
  346. writel(ctl, DEVICE_CPSW_BASE + CPSW_REG_CTL);
  347. /* All statistics enabled by default */
  348. writel(CPSW_REG_VAL_STAT_ENABLE_ALL,
  349. DEVICE_CPSW_BASE + CPSW_REG_STAT_PORT_EN);
  350. /* Reset and enable the ALE */
  351. writel(CPSW_REG_VAL_ALE_CTL_RESET_AND_ENABLE |
  352. CPSW_REG_VAL_ALE_CTL_BYPASS,
  353. DEVICE_CPSW_BASE + CPSW_REG_ALE_CONTROL);
  354. /* All ports put into forward mode */
  355. for (i = 0; i < DEVICE_CPSW_NUM_PORTS; i++)
  356. writel(CPSW_REG_VAL_PORTCTL_FORWARD_MODE,
  357. DEVICE_CPSW_BASE + CPSW_REG_ALE_PORTCTL(i));
  358. return 0;
  359. }
  360. int ethss_start(void)
  361. {
  362. int i;
  363. struct mac_sl_cfg cfg;
  364. cfg.max_rx_len = MAX_SIZE_STREAM_BUFFER;
  365. cfg.ctl = GMACSL_ENABLE | GMACSL_RX_ENABLE_EXT_CTL;
  366. for (i = 0; i < DEVICE_N_GMACSL_PORTS; i++) {
  367. mac_sl_reset(i);
  368. mac_sl_config(i, &cfg);
  369. }
  370. return 0;
  371. }
  372. int ethss_stop(void)
  373. {
  374. int i;
  375. for (i = 0; i < DEVICE_N_GMACSL_PORTS; i++)
  376. mac_sl_reset(i);
  377. return 0;
  378. }
  379. struct ks2_serdes ks2_serdes_sgmii_156p25mhz = {
  380. .clk = SERDES_CLOCK_156P25M,
  381. .rate = SERDES_RATE_5G,
  382. .rate_mode = SERDES_QUARTER_RATE,
  383. .intf = SERDES_PHY_SGMII,
  384. .loopback = 0,
  385. };
  386. #ifndef CONFIG_SOC_K2G
  387. static void keystone2_net_serdes_setup(void)
  388. {
  389. ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII_BASE,
  390. &ks2_serdes_sgmii_156p25mhz,
  391. CONFIG_KSNET_SERDES_LANES_PER_SGMII);
  392. #if defined(CONFIG_SOC_K2E) || defined(CONFIG_SOC_K2L)
  393. ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII2_BASE,
  394. &ks2_serdes_sgmii_156p25mhz,
  395. CONFIG_KSNET_SERDES_LANES_PER_SGMII);
  396. #endif
  397. /* wait till setup */
  398. udelay(5000);
  399. }
  400. #endif
  401. #ifndef CONFIG_DM_ETH
  402. int keystone2_eth_read_mac_addr(struct eth_device *dev)
  403. {
  404. struct eth_priv_t *eth_priv;
  405. u32 maca = 0;
  406. u32 macb = 0;
  407. eth_priv = (struct eth_priv_t *)dev->priv;
  408. /* Read the e-fuse mac address */
  409. if (eth_priv->slave_port == 1) {
  410. maca = __raw_readl(MAC_ID_BASE_ADDR);
  411. macb = __raw_readl(MAC_ID_BASE_ADDR + 4);
  412. }
  413. dev->enetaddr[0] = (macb >> 8) & 0xff;
  414. dev->enetaddr[1] = (macb >> 0) & 0xff;
  415. dev->enetaddr[2] = (maca >> 24) & 0xff;
  416. dev->enetaddr[3] = (maca >> 16) & 0xff;
  417. dev->enetaddr[4] = (maca >> 8) & 0xff;
  418. dev->enetaddr[5] = (maca >> 0) & 0xff;
  419. return 0;
  420. }
  421. int32_t cpmac_drv_send(u32 *buffer, int num_bytes, int slave_port_num)
  422. {
  423. if (num_bytes < EMAC_MIN_ETHERNET_PKT_SIZE)
  424. num_bytes = EMAC_MIN_ETHERNET_PKT_SIZE;
  425. return ksnav_send(&netcp_pktdma, buffer,
  426. num_bytes, (slave_port_num) << 16);
  427. }
  428. /* Eth device open */
  429. static int keystone2_eth_open(struct eth_device *dev, bd_t *bis)
  430. {
  431. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  432. struct phy_device *phy_dev = eth_priv->phy_dev;
  433. debug("+ emac_open\n");
  434. net_rx_buffs.rx_flow = eth_priv->rx_flow;
  435. sys_has_mdio =
  436. (eth_priv->sgmii_link_type == SGMII_LINK_MAC_PHY) ? 1 : 0;
  437. if (sys_has_mdio)
  438. keystone2_mdio_reset(mdio_bus);
  439. #ifdef CONFIG_SOC_K2G
  440. keystone_rgmii_config(phy_dev);
  441. #else
  442. keystone_sgmii_config(phy_dev, eth_priv->slave_port - 1,
  443. eth_priv->sgmii_link_type);
  444. #endif
  445. udelay(10000);
  446. /* On chip switch configuration */
  447. ethss_config(target_get_switch_ctl(), SWITCH_MAX_PKT_SIZE);
  448. /* TODO: add error handling code */
  449. if (qm_init()) {
  450. printf("ERROR: qm_init()\n");
  451. return -1;
  452. }
  453. if (ksnav_init(&netcp_pktdma, &net_rx_buffs)) {
  454. qm_close();
  455. printf("ERROR: netcp_init()\n");
  456. return -1;
  457. }
  458. /*
  459. * Streaming switch configuration. If not present this
  460. * statement is defined to void in target.h.
  461. * If present this is usually defined to a series of register writes
  462. */
  463. hw_config_streaming_switch();
  464. if (sys_has_mdio) {
  465. keystone2_mdio_reset(mdio_bus);
  466. phy_startup(phy_dev);
  467. if (phy_dev->link == 0) {
  468. ksnav_close(&netcp_pktdma);
  469. qm_close();
  470. return -1;
  471. }
  472. }
  473. emac_gigabit_enable(dev);
  474. ethss_start();
  475. debug("- emac_open\n");
  476. emac_open = 1;
  477. return 0;
  478. }
  479. /* Eth device close */
  480. void keystone2_eth_close(struct eth_device *dev)
  481. {
  482. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  483. struct phy_device *phy_dev = eth_priv->phy_dev;
  484. debug("+ emac_close\n");
  485. if (!emac_open)
  486. return;
  487. ethss_stop();
  488. ksnav_close(&netcp_pktdma);
  489. qm_close();
  490. phy_shutdown(phy_dev);
  491. emac_open = 0;
  492. debug("- emac_close\n");
  493. }
  494. /*
  495. * This function sends a single packet on the network and returns
  496. * positive number (number of bytes transmitted) or negative for error
  497. */
  498. static int keystone2_eth_send_packet(struct eth_device *dev,
  499. void *packet, int length)
  500. {
  501. int ret_status = -1;
  502. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  503. struct phy_device *phy_dev = eth_priv->phy_dev;
  504. genphy_update_link(phy_dev);
  505. if (phy_dev->link == 0)
  506. return -1;
  507. if (cpmac_drv_send((u32 *)packet, length, eth_priv->slave_port) != 0)
  508. return ret_status;
  509. return length;
  510. }
  511. /*
  512. * This function handles receipt of a packet from the network
  513. */
  514. static int keystone2_eth_rcv_packet(struct eth_device *dev)
  515. {
  516. void *hd;
  517. int pkt_size;
  518. u32 *pkt;
  519. hd = ksnav_recv(&netcp_pktdma, &pkt, &pkt_size);
  520. if (hd == NULL)
  521. return 0;
  522. net_process_received_packet((uchar *)pkt, pkt_size);
  523. ksnav_release_rxhd(&netcp_pktdma, hd);
  524. return pkt_size;
  525. }
  526. #ifdef CONFIG_MCAST_TFTP
  527. static int keystone2_eth_bcast_addr(struct eth_device *dev, u32 ip, u8 set)
  528. {
  529. return 0;
  530. }
  531. #endif
  532. /*
  533. * This function initializes the EMAC hardware.
  534. */
  535. int keystone2_emac_initialize(struct eth_priv_t *eth_priv)
  536. {
  537. int res;
  538. struct eth_device *dev;
  539. struct phy_device *phy_dev;
  540. struct mdio_regs *adap_mdio = (struct mdio_regs *)EMAC_MDIO_BASE_ADDR;
  541. dev = malloc(sizeof(struct eth_device));
  542. if (dev == NULL)
  543. return -1;
  544. memset(dev, 0, sizeof(struct eth_device));
  545. strcpy(dev->name, eth_priv->int_name);
  546. dev->priv = eth_priv;
  547. keystone2_eth_read_mac_addr(dev);
  548. dev->iobase = 0;
  549. dev->init = keystone2_eth_open;
  550. dev->halt = keystone2_eth_close;
  551. dev->send = keystone2_eth_send_packet;
  552. dev->recv = keystone2_eth_rcv_packet;
  553. #ifdef CONFIG_MCAST_TFTP
  554. dev->mcast = keystone2_eth_bcast_addr;
  555. #endif
  556. eth_register(dev);
  557. /* Register MDIO bus if it's not registered yet */
  558. if (!mdio_bus) {
  559. mdio_bus = mdio_alloc();
  560. mdio_bus->read = keystone2_mdio_read;
  561. mdio_bus->write = keystone2_mdio_write;
  562. mdio_bus->reset = keystone2_mdio_reset;
  563. mdio_bus->priv = (void *)EMAC_MDIO_BASE_ADDR;
  564. strcpy(mdio_bus->name, "ethernet-mdio");
  565. res = mdio_register(mdio_bus);
  566. if (res)
  567. return res;
  568. }
  569. #ifndef CONFIG_SOC_K2G
  570. keystone2_net_serdes_setup();
  571. #endif
  572. /* Create phy device and bind it with driver */
  573. #ifdef CONFIG_KSNET_MDIO_PHY_CONFIG_ENABLE
  574. phy_dev = phy_connect(mdio_bus, eth_priv->phy_addr,
  575. dev, eth_priv->phy_if);
  576. phy_config(phy_dev);
  577. #else
  578. phy_dev = phy_find_by_mask(mdio_bus, 1 << eth_priv->phy_addr,
  579. eth_priv->phy_if);
  580. phy_dev->dev = dev;
  581. #endif
  582. eth_priv->phy_dev = phy_dev;
  583. return 0;
  584. }
  585. #else
  586. static int ks2_eth_start(struct udevice *dev)
  587. {
  588. struct ks2_eth_priv *priv = dev_get_priv(dev);
  589. #ifdef CONFIG_SOC_K2G
  590. keystone_rgmii_config(priv->phydev);
  591. #else
  592. keystone_sgmii_config(priv->phydev, priv->slave_port - 1,
  593. priv->sgmii_link_type);
  594. #endif
  595. udelay(10000);
  596. /* On chip switch configuration */
  597. ethss_config(target_get_switch_ctl(), SWITCH_MAX_PKT_SIZE);
  598. qm_init();
  599. if (ksnav_init(priv->netcp_pktdma, &priv->net_rx_buffs)) {
  600. pr_err("ksnav_init failed\n");
  601. goto err_knav_init;
  602. }
  603. /*
  604. * Streaming switch configuration. If not present this
  605. * statement is defined to void in target.h.
  606. * If present this is usually defined to a series of register writes
  607. */
  608. hw_config_streaming_switch();
  609. if (priv->has_mdio) {
  610. keystone2_mdio_reset(priv->mdio_bus);
  611. phy_startup(priv->phydev);
  612. if (priv->phydev->link == 0) {
  613. pr_err("phy startup failed\n");
  614. goto err_phy_start;
  615. }
  616. }
  617. emac_gigabit_enable(dev);
  618. ethss_start();
  619. priv->emac_open = true;
  620. return 0;
  621. err_phy_start:
  622. ksnav_close(priv->netcp_pktdma);
  623. err_knav_init:
  624. qm_close();
  625. return -EFAULT;
  626. }
  627. static int ks2_eth_send(struct udevice *dev, void *packet, int length)
  628. {
  629. struct ks2_eth_priv *priv = dev_get_priv(dev);
  630. genphy_update_link(priv->phydev);
  631. if (priv->phydev->link == 0)
  632. return -1;
  633. if (length < EMAC_MIN_ETHERNET_PKT_SIZE)
  634. length = EMAC_MIN_ETHERNET_PKT_SIZE;
  635. return ksnav_send(priv->netcp_pktdma, (u32 *)packet,
  636. length, (priv->slave_port) << 16);
  637. }
  638. static int ks2_eth_recv(struct udevice *dev, int flags, uchar **packetp)
  639. {
  640. struct ks2_eth_priv *priv = dev_get_priv(dev);
  641. int pkt_size;
  642. u32 *pkt = NULL;
  643. priv->hd = ksnav_recv(priv->netcp_pktdma, &pkt, &pkt_size);
  644. if (priv->hd == NULL)
  645. return -EAGAIN;
  646. *packetp = (uchar *)pkt;
  647. return pkt_size;
  648. }
  649. static int ks2_eth_free_pkt(struct udevice *dev, uchar *packet,
  650. int length)
  651. {
  652. struct ks2_eth_priv *priv = dev_get_priv(dev);
  653. ksnav_release_rxhd(priv->netcp_pktdma, priv->hd);
  654. return 0;
  655. }
  656. static void ks2_eth_stop(struct udevice *dev)
  657. {
  658. struct ks2_eth_priv *priv = dev_get_priv(dev);
  659. if (!priv->emac_open)
  660. return;
  661. ethss_stop();
  662. ksnav_close(priv->netcp_pktdma);
  663. qm_close();
  664. phy_shutdown(priv->phydev);
  665. priv->emac_open = false;
  666. }
  667. int ks2_eth_read_rom_hwaddr(struct udevice *dev)
  668. {
  669. struct ks2_eth_priv *priv = dev_get_priv(dev);
  670. struct eth_pdata *pdata = dev_get_platdata(dev);
  671. u32 maca = 0;
  672. u32 macb = 0;
  673. /* Read the e-fuse mac address */
  674. if (priv->slave_port == 1) {
  675. maca = __raw_readl(MAC_ID_BASE_ADDR);
  676. macb = __raw_readl(MAC_ID_BASE_ADDR + 4);
  677. }
  678. pdata->enetaddr[0] = (macb >> 8) & 0xff;
  679. pdata->enetaddr[1] = (macb >> 0) & 0xff;
  680. pdata->enetaddr[2] = (maca >> 24) & 0xff;
  681. pdata->enetaddr[3] = (maca >> 16) & 0xff;
  682. pdata->enetaddr[4] = (maca >> 8) & 0xff;
  683. pdata->enetaddr[5] = (maca >> 0) & 0xff;
  684. return 0;
  685. }
  686. int ks2_eth_write_hwaddr(struct udevice *dev)
  687. {
  688. struct ks2_eth_priv *priv = dev_get_priv(dev);
  689. struct eth_pdata *pdata = dev_get_platdata(dev);
  690. writel(mac_hi(pdata->enetaddr),
  691. DEVICE_EMACSW_BASE(pdata->iobase, priv->slave_port - 1) +
  692. CPGMACSL_REG_SA_HI);
  693. writel(mac_lo(pdata->enetaddr),
  694. DEVICE_EMACSW_BASE(pdata->iobase, priv->slave_port - 1) +
  695. CPGMACSL_REG_SA_LO);
  696. return 0;
  697. }
  698. static int ks2_eth_probe(struct udevice *dev)
  699. {
  700. struct ks2_eth_priv *priv = dev_get_priv(dev);
  701. struct mii_dev *mdio_bus;
  702. int ret;
  703. priv->dev = dev;
  704. /* These clock enables has to be moved to common location */
  705. if (cpu_is_k2g())
  706. writel(KS2_ETHERNET_RGMII, KS2_ETHERNET_CFG);
  707. /* By default, select PA PLL clock as PA clock source */
  708. #ifndef CONFIG_SOC_K2G
  709. if (psc_enable_module(KS2_LPSC_PA))
  710. return -EACCES;
  711. #endif
  712. if (psc_enable_module(KS2_LPSC_CPGMAC))
  713. return -EACCES;
  714. if (psc_enable_module(KS2_LPSC_CRYPTO))
  715. return -EACCES;
  716. if (cpu_is_k2e() || cpu_is_k2l())
  717. pll_pa_clk_sel();
  718. priv->net_rx_buffs.buff_ptr = rx_buffs;
  719. priv->net_rx_buffs.num_buffs = RX_BUFF_NUMS;
  720. priv->net_rx_buffs.buff_len = RX_BUFF_LEN;
  721. if (priv->slave_port == 1) {
  722. /*
  723. * Register MDIO bus for slave 0 only, other slave have
  724. * to re-use the same
  725. */
  726. mdio_bus = mdio_alloc();
  727. if (!mdio_bus) {
  728. pr_err("MDIO alloc failed\n");
  729. return -ENOMEM;
  730. }
  731. priv->mdio_bus = mdio_bus;
  732. mdio_bus->read = keystone2_mdio_read;
  733. mdio_bus->write = keystone2_mdio_write;
  734. mdio_bus->reset = keystone2_mdio_reset;
  735. mdio_bus->priv = priv->mdio_base;
  736. sprintf(mdio_bus->name, "ethernet-mdio");
  737. ret = mdio_register(mdio_bus);
  738. if (ret) {
  739. pr_err("MDIO bus register failed\n");
  740. return ret;
  741. }
  742. } else {
  743. /* Get the MDIO bus from slave 0 device */
  744. struct ks2_eth_priv *parent_priv;
  745. parent_priv = dev_get_priv(dev->parent);
  746. priv->mdio_bus = parent_priv->mdio_bus;
  747. }
  748. #ifndef CONFIG_SOC_K2G
  749. keystone2_net_serdes_setup();
  750. #endif
  751. priv->netcp_pktdma = &netcp_pktdma;
  752. if (priv->has_mdio) {
  753. priv->phydev = phy_connect(priv->mdio_bus, priv->phy_addr,
  754. dev, priv->phy_if);
  755. phy_config(priv->phydev);
  756. }
  757. return 0;
  758. }
  759. int ks2_eth_remove(struct udevice *dev)
  760. {
  761. struct ks2_eth_priv *priv = dev_get_priv(dev);
  762. free(priv->phydev);
  763. mdio_unregister(priv->mdio_bus);
  764. mdio_free(priv->mdio_bus);
  765. return 0;
  766. }
  767. static const struct eth_ops ks2_eth_ops = {
  768. .start = ks2_eth_start,
  769. .send = ks2_eth_send,
  770. .recv = ks2_eth_recv,
  771. .free_pkt = ks2_eth_free_pkt,
  772. .stop = ks2_eth_stop,
  773. .read_rom_hwaddr = ks2_eth_read_rom_hwaddr,
  774. .write_hwaddr = ks2_eth_write_hwaddr,
  775. };
  776. static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
  777. {
  778. const void *fdt = gd->fdt_blob;
  779. struct udevice *sl_dev;
  780. int interfaces;
  781. int sec_slave;
  782. int slave;
  783. int ret;
  784. char *slave_name;
  785. interfaces = fdt_subnode_offset(fdt, gbe, "interfaces");
  786. fdt_for_each_subnode(slave, fdt, interfaces) {
  787. int slave_no;
  788. slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
  789. if (slave_no == -ENOENT)
  790. continue;
  791. if (slave_no == 0) {
  792. /* This is the current eth device */
  793. *gbe_0 = slave;
  794. } else {
  795. /* Slave devices to be registered */
  796. slave_name = malloc(20);
  797. snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
  798. ret = device_bind_driver_to_node(dev, "eth_ks2_sl",
  799. slave_name, offset_to_ofnode(slave),
  800. &sl_dev);
  801. if (ret) {
  802. pr_err("ks2_net - not able to bind slave interfaces\n");
  803. return ret;
  804. }
  805. }
  806. }
  807. sec_slave = fdt_subnode_offset(fdt, gbe, "secondary-slave-ports");
  808. fdt_for_each_subnode(slave, fdt, sec_slave) {
  809. int slave_no;
  810. slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
  811. if (slave_no == -ENOENT)
  812. continue;
  813. /* Slave devices to be registered */
  814. slave_name = malloc(20);
  815. snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
  816. ret = device_bind_driver_to_node(dev, "eth_ks2_sl", slave_name,
  817. offset_to_ofnode(slave), &sl_dev);
  818. if (ret) {
  819. pr_err("ks2_net - not able to bind slave interfaces\n");
  820. return ret;
  821. }
  822. }
  823. return 0;
  824. }
  825. static int ks2_eth_parse_slave_interface(int netcp, int slave,
  826. struct ks2_eth_priv *priv,
  827. struct eth_pdata *pdata)
  828. {
  829. const void *fdt = gd->fdt_blob;
  830. int mdio;
  831. int phy;
  832. int dma_count;
  833. u32 dma_channel[8];
  834. priv->slave_port = fdtdec_get_int(fdt, slave, "slave-port", -1);
  835. priv->net_rx_buffs.rx_flow = priv->slave_port * 8;
  836. /* U-Boot slave port number starts with 1 instead of 0 */
  837. priv->slave_port += 1;
  838. dma_count = fdtdec_get_int_array_count(fdt, netcp,
  839. "ti,navigator-dmas",
  840. dma_channel, 8);
  841. if (dma_count > (2 * priv->slave_port)) {
  842. int dma_idx;
  843. dma_idx = priv->slave_port * 2 - 1;
  844. priv->net_rx_buffs.rx_flow = dma_channel[dma_idx];
  845. }
  846. priv->link_type = fdtdec_get_int(fdt, slave, "link-interface", -1);
  847. phy = fdtdec_lookup_phandle(fdt, slave, "phy-handle");
  848. if (phy >= 0) {
  849. priv->phy_addr = fdtdec_get_int(fdt, phy, "reg", -1);
  850. mdio = fdt_parent_offset(fdt, phy);
  851. if (mdio < 0) {
  852. pr_err("mdio dt not found\n");
  853. return -ENODEV;
  854. }
  855. priv->mdio_base = (void *)fdtdec_get_addr(fdt, mdio, "reg");
  856. }
  857. if (priv->link_type == LINK_TYPE_SGMII_MAC_TO_PHY_MODE) {
  858. priv->phy_if = PHY_INTERFACE_MODE_SGMII;
  859. pdata->phy_interface = priv->phy_if;
  860. priv->sgmii_link_type = SGMII_LINK_MAC_PHY;
  861. priv->has_mdio = true;
  862. } else if (priv->link_type == LINK_TYPE_RGMII_LINK_MAC_PHY) {
  863. priv->phy_if = PHY_INTERFACE_MODE_RGMII;
  864. pdata->phy_interface = priv->phy_if;
  865. priv->has_mdio = true;
  866. }
  867. return 0;
  868. }
  869. static int ks2_sl_eth_ofdata_to_platdata(struct udevice *dev)
  870. {
  871. struct ks2_eth_priv *priv = dev_get_priv(dev);
  872. struct eth_pdata *pdata = dev_get_platdata(dev);
  873. const void *fdt = gd->fdt_blob;
  874. int slave = dev_of_offset(dev);
  875. int interfaces;
  876. int gbe;
  877. int netcp_devices;
  878. int netcp;
  879. interfaces = fdt_parent_offset(fdt, slave);
  880. gbe = fdt_parent_offset(fdt, interfaces);
  881. netcp_devices = fdt_parent_offset(fdt, gbe);
  882. netcp = fdt_parent_offset(fdt, netcp_devices);
  883. ks2_eth_parse_slave_interface(netcp, slave, priv, pdata);
  884. pdata->iobase = fdtdec_get_addr(fdt, netcp, "reg");
  885. return 0;
  886. }
  887. static int ks2_eth_ofdata_to_platdata(struct udevice *dev)
  888. {
  889. struct ks2_eth_priv *priv = dev_get_priv(dev);
  890. struct eth_pdata *pdata = dev_get_platdata(dev);
  891. const void *fdt = gd->fdt_blob;
  892. int gbe_0 = -ENODEV;
  893. int netcp_devices;
  894. int gbe;
  895. netcp_devices = fdt_subnode_offset(fdt, dev_of_offset(dev),
  896. "netcp-devices");
  897. gbe = fdt_subnode_offset(fdt, netcp_devices, "gbe");
  898. ks2_eth_bind_slaves(dev, gbe, &gbe_0);
  899. ks2_eth_parse_slave_interface(dev_of_offset(dev), gbe_0, priv, pdata);
  900. pdata->iobase = devfdt_get_addr(dev);
  901. return 0;
  902. }
  903. static const struct udevice_id ks2_eth_ids[] = {
  904. { .compatible = "ti,netcp-1.0" },
  905. { }
  906. };
  907. U_BOOT_DRIVER(eth_ks2_slave) = {
  908. .name = "eth_ks2_sl",
  909. .id = UCLASS_ETH,
  910. .ofdata_to_platdata = ks2_sl_eth_ofdata_to_platdata,
  911. .probe = ks2_eth_probe,
  912. .remove = ks2_eth_remove,
  913. .ops = &ks2_eth_ops,
  914. .priv_auto_alloc_size = sizeof(struct ks2_eth_priv),
  915. .platdata_auto_alloc_size = sizeof(struct eth_pdata),
  916. .flags = DM_FLAG_ALLOC_PRIV_DMA,
  917. };
  918. U_BOOT_DRIVER(eth_ks2) = {
  919. .name = "eth_ks2",
  920. .id = UCLASS_ETH,
  921. .of_match = ks2_eth_ids,
  922. .ofdata_to_platdata = ks2_eth_ofdata_to_platdata,
  923. .probe = ks2_eth_probe,
  924. .remove = ks2_eth_remove,
  925. .ops = &ks2_eth_ops,
  926. .priv_auto_alloc_size = sizeof(struct ks2_eth_priv),
  927. .platdata_auto_alloc_size = sizeof(struct eth_pdata),
  928. .flags = DM_FLAG_ALLOC_PRIV_DMA,
  929. };
  930. #endif