keystone_net.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  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 <net.h>
  12. #include <miiphy.h>
  13. #include <malloc.h>
  14. #include <asm/ti-common/keystone_nav.h>
  15. #include <asm/ti-common/keystone_net.h>
  16. #include <asm/ti-common/keystone_serdes.h>
  17. unsigned int emac_open;
  18. static unsigned int sys_has_mdio = 1;
  19. #ifdef KEYSTONE2_EMAC_GIG_ENABLE
  20. #define emac_gigabit_enable(x) keystone2_eth_gigabit_enable(x)
  21. #else
  22. #define emac_gigabit_enable(x) /* no gigabit to enable */
  23. #endif
  24. #define RX_BUFF_NUMS 24
  25. #define RX_BUFF_LEN 1520
  26. #define MAX_SIZE_STREAM_BUFFER RX_BUFF_LEN
  27. static u8 rx_buffs[RX_BUFF_NUMS * RX_BUFF_LEN] __aligned(16);
  28. struct rx_buff_desc net_rx_buffs = {
  29. .buff_ptr = rx_buffs,
  30. .num_buffs = RX_BUFF_NUMS,
  31. .buff_len = RX_BUFF_LEN,
  32. .rx_flow = 22,
  33. };
  34. static void keystone2_eth_mdio_enable(void);
  35. static void keystone2_net_serdes_setup(void);
  36. static int gen_get_link_speed(int phy_addr);
  37. /* EMAC Addresses */
  38. static volatile struct mdio_regs *adap_mdio =
  39. (struct mdio_regs *)EMAC_MDIO_BASE_ADDR;
  40. int keystone2_eth_read_mac_addr(struct eth_device *dev)
  41. {
  42. struct eth_priv_t *eth_priv;
  43. u32 maca = 0;
  44. u32 macb = 0;
  45. eth_priv = (struct eth_priv_t *)dev->priv;
  46. /* Read the e-fuse mac address */
  47. if (eth_priv->slave_port == 1) {
  48. maca = __raw_readl(MAC_ID_BASE_ADDR);
  49. macb = __raw_readl(MAC_ID_BASE_ADDR + 4);
  50. }
  51. dev->enetaddr[0] = (macb >> 8) & 0xff;
  52. dev->enetaddr[1] = (macb >> 0) & 0xff;
  53. dev->enetaddr[2] = (maca >> 24) & 0xff;
  54. dev->enetaddr[3] = (maca >> 16) & 0xff;
  55. dev->enetaddr[4] = (maca >> 8) & 0xff;
  56. dev->enetaddr[5] = (maca >> 0) & 0xff;
  57. return 0;
  58. }
  59. static void keystone2_eth_mdio_enable(void)
  60. {
  61. u_int32_t clkdiv;
  62. clkdiv = (EMAC_MDIO_BUS_FREQ / EMAC_MDIO_CLOCK_FREQ) - 1;
  63. writel((clkdiv & 0xffff) |
  64. MDIO_CONTROL_ENABLE |
  65. MDIO_CONTROL_FAULT |
  66. MDIO_CONTROL_FAULT_ENABLE,
  67. &adap_mdio->control);
  68. while (readl(&adap_mdio->control) & MDIO_CONTROL_IDLE)
  69. ;
  70. }
  71. /* Read a PHY register via MDIO inteface. Returns 1 on success, 0 otherwise */
  72. int keystone2_eth_phy_read(u_int8_t phy_addr, u_int8_t reg_num, u_int16_t *data)
  73. {
  74. int tmp;
  75. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  76. ;
  77. writel(MDIO_USERACCESS0_GO |
  78. MDIO_USERACCESS0_WRITE_READ |
  79. ((reg_num & 0x1f) << 21) |
  80. ((phy_addr & 0x1f) << 16),
  81. &adap_mdio->useraccess0);
  82. /* Wait for command to complete */
  83. while ((tmp = readl(&adap_mdio->useraccess0)) & MDIO_USERACCESS0_GO)
  84. ;
  85. if (tmp & MDIO_USERACCESS0_ACK) {
  86. *data = tmp & 0xffff;
  87. return 0;
  88. }
  89. *data = -1;
  90. return -1;
  91. }
  92. /*
  93. * Write to a PHY register via MDIO inteface.
  94. * Blocks until operation is complete.
  95. */
  96. int keystone2_eth_phy_write(u_int8_t phy_addr, u_int8_t reg_num, u_int16_t data)
  97. {
  98. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  99. ;
  100. writel(MDIO_USERACCESS0_GO |
  101. MDIO_USERACCESS0_WRITE_WRITE |
  102. ((reg_num & 0x1f) << 21) |
  103. ((phy_addr & 0x1f) << 16) |
  104. (data & 0xffff),
  105. &adap_mdio->useraccess0);
  106. /* Wait for command to complete */
  107. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  108. ;
  109. return 0;
  110. }
  111. /* PHY functions for a generic PHY */
  112. static int gen_get_link_speed(int phy_addr)
  113. {
  114. u_int16_t tmp;
  115. if ((!keystone2_eth_phy_read(phy_addr, MII_STATUS_REG, &tmp)) &&
  116. (tmp & 0x04)) {
  117. return 0;
  118. }
  119. return -1;
  120. }
  121. static void __attribute__((unused))
  122. keystone2_eth_gigabit_enable(struct eth_device *dev)
  123. {
  124. u_int16_t data;
  125. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  126. if (sys_has_mdio) {
  127. if (keystone2_eth_phy_read(eth_priv->phy_addr, 0, &data) ||
  128. !(data & (1 << 6))) /* speed selection MSB */
  129. return;
  130. }
  131. /*
  132. * Check if link detected is giga-bit
  133. * If Gigabit mode detected, enable gigbit in MAC
  134. */
  135. writel(readl(DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) +
  136. CPGMACSL_REG_CTL) |
  137. EMAC_MACCONTROL_GIGFORCE | EMAC_MACCONTROL_GIGABIT_ENABLE,
  138. DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) + CPGMACSL_REG_CTL);
  139. }
  140. int keystone_sgmii_link_status(int port)
  141. {
  142. u32 status = 0;
  143. status = __raw_readl(SGMII_STATUS_REG(port));
  144. return status & SGMII_REG_STATUS_LINK;
  145. }
  146. int keystone_get_link_status(struct eth_device *dev)
  147. {
  148. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  149. int sgmii_link;
  150. int link_state = 0;
  151. #if CONFIG_GET_LINK_STATUS_ATTEMPTS > 1
  152. int j;
  153. for (j = 0; (j < CONFIG_GET_LINK_STATUS_ATTEMPTS) && (link_state == 0);
  154. j++) {
  155. #endif
  156. sgmii_link =
  157. keystone_sgmii_link_status(eth_priv->slave_port - 1);
  158. if (sgmii_link) {
  159. link_state = 1;
  160. if (eth_priv->sgmii_link_type == SGMII_LINK_MAC_PHY)
  161. if (gen_get_link_speed(eth_priv->phy_addr))
  162. link_state = 0;
  163. }
  164. #if CONFIG_GET_LINK_STATUS_ATTEMPTS > 1
  165. }
  166. #endif
  167. return link_state;
  168. }
  169. int keystone_sgmii_config(int port, int interface)
  170. {
  171. unsigned int i, status, mask;
  172. unsigned int mr_adv_ability, control;
  173. switch (interface) {
  174. case SGMII_LINK_MAC_MAC_AUTONEG:
  175. mr_adv_ability = (SGMII_REG_MR_ADV_ENABLE |
  176. SGMII_REG_MR_ADV_LINK |
  177. SGMII_REG_MR_ADV_FULL_DUPLEX |
  178. SGMII_REG_MR_ADV_GIG_MODE);
  179. control = (SGMII_REG_CONTROL_MASTER |
  180. SGMII_REG_CONTROL_AUTONEG);
  181. break;
  182. case SGMII_LINK_MAC_PHY:
  183. case SGMII_LINK_MAC_PHY_FORCED:
  184. mr_adv_ability = SGMII_REG_MR_ADV_ENABLE;
  185. control = SGMII_REG_CONTROL_AUTONEG;
  186. break;
  187. case SGMII_LINK_MAC_MAC_FORCED:
  188. mr_adv_ability = (SGMII_REG_MR_ADV_ENABLE |
  189. SGMII_REG_MR_ADV_LINK |
  190. SGMII_REG_MR_ADV_FULL_DUPLEX |
  191. SGMII_REG_MR_ADV_GIG_MODE);
  192. control = SGMII_REG_CONTROL_MASTER;
  193. break;
  194. case SGMII_LINK_MAC_FIBER:
  195. mr_adv_ability = 0x20;
  196. control = SGMII_REG_CONTROL_AUTONEG;
  197. break;
  198. default:
  199. mr_adv_ability = SGMII_REG_MR_ADV_ENABLE;
  200. control = SGMII_REG_CONTROL_AUTONEG;
  201. }
  202. __raw_writel(0, SGMII_CTL_REG(port));
  203. /*
  204. * Wait for the SerDes pll to lock,
  205. * but don't trap if lock is never read
  206. */
  207. for (i = 0; i < 1000; i++) {
  208. udelay(2000);
  209. status = __raw_readl(SGMII_STATUS_REG(port));
  210. if ((status & SGMII_REG_STATUS_LOCK) != 0)
  211. break;
  212. }
  213. __raw_writel(mr_adv_ability, SGMII_MRADV_REG(port));
  214. __raw_writel(control, SGMII_CTL_REG(port));
  215. mask = SGMII_REG_STATUS_LINK;
  216. if (control & SGMII_REG_CONTROL_AUTONEG)
  217. mask |= SGMII_REG_STATUS_AUTONEG;
  218. for (i = 0; i < 1000; i++) {
  219. status = __raw_readl(SGMII_STATUS_REG(port));
  220. if ((status & mask) == mask)
  221. break;
  222. }
  223. return 0;
  224. }
  225. int mac_sl_reset(u32 port)
  226. {
  227. u32 i, v;
  228. if (port >= DEVICE_N_GMACSL_PORTS)
  229. return GMACSL_RET_INVALID_PORT;
  230. /* Set the soft reset bit */
  231. writel(CPGMAC_REG_RESET_VAL_RESET,
  232. DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  233. /* Wait for the bit to clear */
  234. for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) {
  235. v = readl(DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  236. if ((v & CPGMAC_REG_RESET_VAL_RESET_MASK) !=
  237. CPGMAC_REG_RESET_VAL_RESET)
  238. return GMACSL_RET_OK;
  239. }
  240. /* Timeout on the reset */
  241. return GMACSL_RET_WARN_RESET_INCOMPLETE;
  242. }
  243. int mac_sl_config(u_int16_t port, struct mac_sl_cfg *cfg)
  244. {
  245. u32 v, i;
  246. int ret = GMACSL_RET_OK;
  247. if (port >= DEVICE_N_GMACSL_PORTS)
  248. return GMACSL_RET_INVALID_PORT;
  249. if (cfg->max_rx_len > CPGMAC_REG_MAXLEN_LEN) {
  250. cfg->max_rx_len = CPGMAC_REG_MAXLEN_LEN;
  251. ret = GMACSL_RET_WARN_MAXLEN_TOO_BIG;
  252. }
  253. /* Must wait if the device is undergoing reset */
  254. for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) {
  255. v = readl(DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  256. if ((v & CPGMAC_REG_RESET_VAL_RESET_MASK) !=
  257. CPGMAC_REG_RESET_VAL_RESET)
  258. break;
  259. }
  260. if (i == DEVICE_EMACSL_RESET_POLL_COUNT)
  261. return GMACSL_RET_CONFIG_FAIL_RESET_ACTIVE;
  262. writel(cfg->max_rx_len, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_MAXLEN);
  263. writel(cfg->ctl, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_CTL);
  264. return ret;
  265. }
  266. int ethss_config(u32 ctl, u32 max_pkt_size)
  267. {
  268. u32 i;
  269. /* Max length register */
  270. writel(max_pkt_size, DEVICE_CPSW_BASE + CPSW_REG_MAXLEN);
  271. /* Control register */
  272. writel(ctl, DEVICE_CPSW_BASE + CPSW_REG_CTL);
  273. /* All statistics enabled by default */
  274. writel(CPSW_REG_VAL_STAT_ENABLE_ALL,
  275. DEVICE_CPSW_BASE + CPSW_REG_STAT_PORT_EN);
  276. /* Reset and enable the ALE */
  277. writel(CPSW_REG_VAL_ALE_CTL_RESET_AND_ENABLE |
  278. CPSW_REG_VAL_ALE_CTL_BYPASS,
  279. DEVICE_CPSW_BASE + CPSW_REG_ALE_CONTROL);
  280. /* All ports put into forward mode */
  281. for (i = 0; i < DEVICE_CPSW_NUM_PORTS; i++)
  282. writel(CPSW_REG_VAL_PORTCTL_FORWARD_MODE,
  283. DEVICE_CPSW_BASE + CPSW_REG_ALE_PORTCTL(i));
  284. return 0;
  285. }
  286. int ethss_start(void)
  287. {
  288. int i;
  289. struct mac_sl_cfg cfg;
  290. cfg.max_rx_len = MAX_SIZE_STREAM_BUFFER;
  291. cfg.ctl = GMACSL_ENABLE | GMACSL_RX_ENABLE_EXT_CTL;
  292. for (i = 0; i < DEVICE_N_GMACSL_PORTS; i++) {
  293. mac_sl_reset(i);
  294. mac_sl_config(i, &cfg);
  295. }
  296. return 0;
  297. }
  298. int ethss_stop(void)
  299. {
  300. int i;
  301. for (i = 0; i < DEVICE_N_GMACSL_PORTS; i++)
  302. mac_sl_reset(i);
  303. return 0;
  304. }
  305. int32_t cpmac_drv_send(u32 *buffer, int num_bytes, int slave_port_num)
  306. {
  307. if (num_bytes < EMAC_MIN_ETHERNET_PKT_SIZE)
  308. num_bytes = EMAC_MIN_ETHERNET_PKT_SIZE;
  309. return ksnav_send(&netcp_pktdma, buffer,
  310. num_bytes, (slave_port_num) << 16);
  311. }
  312. /* Eth device open */
  313. static int keystone2_eth_open(struct eth_device *dev, bd_t *bis)
  314. {
  315. u_int32_t clkdiv;
  316. int link;
  317. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  318. debug("+ emac_open\n");
  319. net_rx_buffs.rx_flow = eth_priv->rx_flow;
  320. sys_has_mdio =
  321. (eth_priv->sgmii_link_type == SGMII_LINK_MAC_PHY) ? 1 : 0;
  322. keystone2_net_serdes_setup();
  323. if (sys_has_mdio)
  324. keystone2_eth_mdio_enable();
  325. keystone_sgmii_config(eth_priv->slave_port - 1,
  326. eth_priv->sgmii_link_type);
  327. udelay(10000);
  328. /* On chip switch configuration */
  329. ethss_config(target_get_switch_ctl(), SWITCH_MAX_PKT_SIZE);
  330. /* TODO: add error handling code */
  331. if (qm_init()) {
  332. printf("ERROR: qm_init()\n");
  333. return -1;
  334. }
  335. if (ksnav_init(&netcp_pktdma, &net_rx_buffs)) {
  336. qm_close();
  337. printf("ERROR: netcp_init()\n");
  338. return -1;
  339. }
  340. /*
  341. * Streaming switch configuration. If not present this
  342. * statement is defined to void in target.h.
  343. * If present this is usually defined to a series of register writes
  344. */
  345. hw_config_streaming_switch();
  346. if (sys_has_mdio) {
  347. /* Init MDIO & get link state */
  348. clkdiv = (EMAC_MDIO_BUS_FREQ / EMAC_MDIO_CLOCK_FREQ) - 1;
  349. writel((clkdiv & 0xff) | MDIO_CONTROL_ENABLE |
  350. MDIO_CONTROL_FAULT, &adap_mdio->control)
  351. ;
  352. /* We need to wait for MDIO to start */
  353. udelay(1000);
  354. link = keystone_get_link_status(dev);
  355. if (link == 0) {
  356. ksnav_close(&netcp_pktdma);
  357. qm_close();
  358. return -1;
  359. }
  360. }
  361. emac_gigabit_enable(dev);
  362. ethss_start();
  363. debug("- emac_open\n");
  364. emac_open = 1;
  365. return 0;
  366. }
  367. /* Eth device close */
  368. void keystone2_eth_close(struct eth_device *dev)
  369. {
  370. debug("+ emac_close\n");
  371. if (!emac_open)
  372. return;
  373. ethss_stop();
  374. ksnav_close(&netcp_pktdma);
  375. qm_close();
  376. emac_open = 0;
  377. debug("- emac_close\n");
  378. }
  379. /*
  380. * This function sends a single packet on the network and returns
  381. * positive number (number of bytes transmitted) or negative for error
  382. */
  383. static int keystone2_eth_send_packet(struct eth_device *dev,
  384. void *packet, int length)
  385. {
  386. int ret_status = -1;
  387. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  388. if (keystone_get_link_status(dev) == 0)
  389. return -1;
  390. if (cpmac_drv_send((u32 *)packet, length, eth_priv->slave_port) != 0)
  391. return ret_status;
  392. return length;
  393. }
  394. /*
  395. * This function handles receipt of a packet from the network
  396. */
  397. static int keystone2_eth_rcv_packet(struct eth_device *dev)
  398. {
  399. void *hd;
  400. int pkt_size;
  401. u32 *pkt;
  402. hd = ksnav_recv(&netcp_pktdma, &pkt, &pkt_size);
  403. if (hd == NULL)
  404. return 0;
  405. NetReceive((uchar *)pkt, pkt_size);
  406. ksnav_release_rxhd(&netcp_pktdma, hd);
  407. return pkt_size;
  408. }
  409. /*
  410. * This function initializes the EMAC hardware.
  411. */
  412. int keystone2_emac_initialize(struct eth_priv_t *eth_priv)
  413. {
  414. struct eth_device *dev;
  415. dev = malloc(sizeof(struct eth_device));
  416. if (dev == NULL)
  417. return -1;
  418. memset(dev, 0, sizeof(struct eth_device));
  419. strcpy(dev->name, eth_priv->int_name);
  420. dev->priv = eth_priv;
  421. keystone2_eth_read_mac_addr(dev);
  422. dev->iobase = 0;
  423. dev->init = keystone2_eth_open;
  424. dev->halt = keystone2_eth_close;
  425. dev->send = keystone2_eth_send_packet;
  426. dev->recv = keystone2_eth_rcv_packet;
  427. eth_register(dev);
  428. return 0;
  429. }
  430. static void keystone2_net_serdes_setup(void)
  431. {
  432. ks2_serdes_sgmii_156p25mhz_setup();
  433. }