keystone_net.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  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 <net.h>
  13. #include <phy.h>
  14. #include <errno.h>
  15. #include <miiphy.h>
  16. #include <malloc.h>
  17. #include <asm/ti-common/keystone_nav.h>
  18. #include <asm/ti-common/keystone_net.h>
  19. #include <asm/ti-common/keystone_serdes.h>
  20. unsigned int emac_open;
  21. static struct mii_dev *mdio_bus;
  22. static unsigned int sys_has_mdio = 1;
  23. #ifdef KEYSTONE2_EMAC_GIG_ENABLE
  24. #define emac_gigabit_enable(x) keystone2_eth_gigabit_enable(x)
  25. #else
  26. #define emac_gigabit_enable(x) /* no gigabit to enable */
  27. #endif
  28. #define RX_BUFF_NUMS 24
  29. #define RX_BUFF_LEN 1520
  30. #define MAX_SIZE_STREAM_BUFFER RX_BUFF_LEN
  31. #define SGMII_ANEG_TIMEOUT 4000
  32. static u8 rx_buffs[RX_BUFF_NUMS * RX_BUFF_LEN] __aligned(16);
  33. struct rx_buff_desc net_rx_buffs = {
  34. .buff_ptr = rx_buffs,
  35. .num_buffs = RX_BUFF_NUMS,
  36. .buff_len = RX_BUFF_LEN,
  37. .rx_flow = 22,
  38. };
  39. #ifndef CONFIG_SOC_K2G
  40. static void keystone2_net_serdes_setup(void);
  41. #endif
  42. int keystone2_eth_read_mac_addr(struct eth_device *dev)
  43. {
  44. struct eth_priv_t *eth_priv;
  45. u32 maca = 0;
  46. u32 macb = 0;
  47. eth_priv = (struct eth_priv_t *)dev->priv;
  48. /* Read the e-fuse mac address */
  49. if (eth_priv->slave_port == 1) {
  50. maca = __raw_readl(MAC_ID_BASE_ADDR);
  51. macb = __raw_readl(MAC_ID_BASE_ADDR + 4);
  52. }
  53. dev->enetaddr[0] = (macb >> 8) & 0xff;
  54. dev->enetaddr[1] = (macb >> 0) & 0xff;
  55. dev->enetaddr[2] = (maca >> 24) & 0xff;
  56. dev->enetaddr[3] = (maca >> 16) & 0xff;
  57. dev->enetaddr[4] = (maca >> 8) & 0xff;
  58. dev->enetaddr[5] = (maca >> 0) & 0xff;
  59. return 0;
  60. }
  61. /* MDIO */
  62. static int keystone2_mdio_reset(struct mii_dev *bus)
  63. {
  64. u_int32_t clkdiv;
  65. struct mdio_regs *adap_mdio = bus->priv;
  66. clkdiv = (EMAC_MDIO_BUS_FREQ / EMAC_MDIO_CLOCK_FREQ) - 1;
  67. writel((clkdiv & 0xffff) | MDIO_CONTROL_ENABLE |
  68. MDIO_CONTROL_FAULT | MDIO_CONTROL_FAULT_ENABLE,
  69. &adap_mdio->control);
  70. while (readl(&adap_mdio->control) & MDIO_CONTROL_IDLE)
  71. ;
  72. return 0;
  73. }
  74. /**
  75. * keystone2_mdio_read - read a PHY register via MDIO interface.
  76. * Blocks until operation is complete.
  77. */
  78. static int keystone2_mdio_read(struct mii_dev *bus,
  79. int addr, int devad, int reg)
  80. {
  81. int tmp;
  82. struct mdio_regs *adap_mdio = bus->priv;
  83. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  84. ;
  85. writel(MDIO_USERACCESS0_GO | MDIO_USERACCESS0_WRITE_READ |
  86. ((reg & 0x1f) << 21) | ((addr & 0x1f) << 16),
  87. &adap_mdio->useraccess0);
  88. /* Wait for command to complete */
  89. while ((tmp = readl(&adap_mdio->useraccess0)) & MDIO_USERACCESS0_GO)
  90. ;
  91. if (tmp & MDIO_USERACCESS0_ACK)
  92. return tmp & 0xffff;
  93. return -1;
  94. }
  95. /**
  96. * keystone2_mdio_write - write to a PHY register via MDIO interface.
  97. * Blocks until operation is complete.
  98. */
  99. static int keystone2_mdio_write(struct mii_dev *bus,
  100. int addr, int devad, int reg, u16 val)
  101. {
  102. struct mdio_regs *adap_mdio = bus->priv;
  103. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  104. ;
  105. writel(MDIO_USERACCESS0_GO | MDIO_USERACCESS0_WRITE_WRITE |
  106. ((reg & 0x1f) << 21) | ((addr & 0x1f) << 16) |
  107. (val & 0xffff), &adap_mdio->useraccess0);
  108. /* Wait for command to complete */
  109. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  110. ;
  111. return 0;
  112. }
  113. static void __attribute__((unused))
  114. keystone2_eth_gigabit_enable(struct eth_device *dev)
  115. {
  116. u_int16_t data;
  117. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  118. if (sys_has_mdio) {
  119. data = keystone2_mdio_read(mdio_bus, eth_priv->phy_addr,
  120. MDIO_DEVAD_NONE, 0);
  121. /* speed selection MSB */
  122. if (!(data & (1 << 6)))
  123. return;
  124. }
  125. /*
  126. * Check if link detected is giga-bit
  127. * If Gigabit mode detected, enable gigbit in MAC
  128. */
  129. writel(readl(DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) +
  130. CPGMACSL_REG_CTL) |
  131. EMAC_MACCONTROL_GIGFORCE | EMAC_MACCONTROL_GIGABIT_ENABLE,
  132. DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) + CPGMACSL_REG_CTL);
  133. }
  134. #ifdef CONFIG_SOC_K2G
  135. int keystone_rgmii_config(struct phy_device *phy_dev)
  136. {
  137. unsigned int i, status;
  138. i = 0;
  139. do {
  140. if (i > SGMII_ANEG_TIMEOUT) {
  141. puts(" TIMEOUT !\n");
  142. phy_dev->link = 0;
  143. return 0;
  144. }
  145. if (ctrlc()) {
  146. puts("user interrupt!\n");
  147. phy_dev->link = 0;
  148. return -EINTR;
  149. }
  150. if ((i++ % 500) == 0)
  151. printf(".");
  152. udelay(1000); /* 1 ms */
  153. status = readl(RGMII_STATUS_REG);
  154. } while (!(status & RGMII_REG_STATUS_LINK));
  155. puts(" done\n");
  156. return 0;
  157. }
  158. #else
  159. int keystone_sgmii_config(struct phy_device *phy_dev, int port, int interface)
  160. {
  161. unsigned int i, status, mask;
  162. unsigned int mr_adv_ability, control;
  163. switch (interface) {
  164. case SGMII_LINK_MAC_MAC_AUTONEG:
  165. mr_adv_ability = (SGMII_REG_MR_ADV_ENABLE |
  166. SGMII_REG_MR_ADV_LINK |
  167. SGMII_REG_MR_ADV_FULL_DUPLEX |
  168. SGMII_REG_MR_ADV_GIG_MODE);
  169. control = (SGMII_REG_CONTROL_MASTER |
  170. SGMII_REG_CONTROL_AUTONEG);
  171. break;
  172. case SGMII_LINK_MAC_PHY:
  173. case SGMII_LINK_MAC_PHY_FORCED:
  174. mr_adv_ability = SGMII_REG_MR_ADV_ENABLE;
  175. control = SGMII_REG_CONTROL_AUTONEG;
  176. break;
  177. case SGMII_LINK_MAC_MAC_FORCED:
  178. mr_adv_ability = (SGMII_REG_MR_ADV_ENABLE |
  179. SGMII_REG_MR_ADV_LINK |
  180. SGMII_REG_MR_ADV_FULL_DUPLEX |
  181. SGMII_REG_MR_ADV_GIG_MODE);
  182. control = SGMII_REG_CONTROL_MASTER;
  183. break;
  184. case SGMII_LINK_MAC_FIBER:
  185. mr_adv_ability = 0x20;
  186. control = SGMII_REG_CONTROL_AUTONEG;
  187. break;
  188. default:
  189. mr_adv_ability = SGMII_REG_MR_ADV_ENABLE;
  190. control = SGMII_REG_CONTROL_AUTONEG;
  191. }
  192. __raw_writel(0, SGMII_CTL_REG(port));
  193. /*
  194. * Wait for the SerDes pll to lock,
  195. * but don't trap if lock is never read
  196. */
  197. for (i = 0; i < 1000; i++) {
  198. udelay(2000);
  199. status = __raw_readl(SGMII_STATUS_REG(port));
  200. if ((status & SGMII_REG_STATUS_LOCK) != 0)
  201. break;
  202. }
  203. __raw_writel(mr_adv_ability, SGMII_MRADV_REG(port));
  204. __raw_writel(control, SGMII_CTL_REG(port));
  205. mask = SGMII_REG_STATUS_LINK;
  206. if (control & SGMII_REG_CONTROL_AUTONEG)
  207. mask |= SGMII_REG_STATUS_AUTONEG;
  208. status = __raw_readl(SGMII_STATUS_REG(port));
  209. if ((status & mask) == mask)
  210. return 0;
  211. printf("\n%s Waiting for SGMII auto negotiation to complete",
  212. phy_dev->dev->name);
  213. while ((status & mask) != mask) {
  214. /*
  215. * Timeout reached ?
  216. */
  217. if (i > SGMII_ANEG_TIMEOUT) {
  218. puts(" TIMEOUT !\n");
  219. phy_dev->link = 0;
  220. return 0;
  221. }
  222. if (ctrlc()) {
  223. puts("user interrupt!\n");
  224. phy_dev->link = 0;
  225. return -EINTR;
  226. }
  227. if ((i++ % 500) == 0)
  228. printf(".");
  229. udelay(1000); /* 1 ms */
  230. status = __raw_readl(SGMII_STATUS_REG(port));
  231. }
  232. puts(" done\n");
  233. return 0;
  234. }
  235. #endif
  236. int mac_sl_reset(u32 port)
  237. {
  238. u32 i, v;
  239. if (port >= DEVICE_N_GMACSL_PORTS)
  240. return GMACSL_RET_INVALID_PORT;
  241. /* Set the soft reset bit */
  242. writel(CPGMAC_REG_RESET_VAL_RESET,
  243. DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  244. /* Wait for the bit to clear */
  245. for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) {
  246. v = readl(DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  247. if ((v & CPGMAC_REG_RESET_VAL_RESET_MASK) !=
  248. CPGMAC_REG_RESET_VAL_RESET)
  249. return GMACSL_RET_OK;
  250. }
  251. /* Timeout on the reset */
  252. return GMACSL_RET_WARN_RESET_INCOMPLETE;
  253. }
  254. int mac_sl_config(u_int16_t port, struct mac_sl_cfg *cfg)
  255. {
  256. u32 v, i;
  257. int ret = GMACSL_RET_OK;
  258. if (port >= DEVICE_N_GMACSL_PORTS)
  259. return GMACSL_RET_INVALID_PORT;
  260. if (cfg->max_rx_len > CPGMAC_REG_MAXLEN_LEN) {
  261. cfg->max_rx_len = CPGMAC_REG_MAXLEN_LEN;
  262. ret = GMACSL_RET_WARN_MAXLEN_TOO_BIG;
  263. }
  264. /* Must wait if the device is undergoing reset */
  265. for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) {
  266. v = readl(DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  267. if ((v & CPGMAC_REG_RESET_VAL_RESET_MASK) !=
  268. CPGMAC_REG_RESET_VAL_RESET)
  269. break;
  270. }
  271. if (i == DEVICE_EMACSL_RESET_POLL_COUNT)
  272. return GMACSL_RET_CONFIG_FAIL_RESET_ACTIVE;
  273. writel(cfg->max_rx_len, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_MAXLEN);
  274. writel(cfg->ctl, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_CTL);
  275. #ifndef CONFIG_SOC_K2HK
  276. /* Map RX packet flow priority to 0 */
  277. writel(0, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RX_PRI_MAP);
  278. #endif
  279. return ret;
  280. }
  281. int ethss_config(u32 ctl, u32 max_pkt_size)
  282. {
  283. u32 i;
  284. /* Max length register */
  285. writel(max_pkt_size, DEVICE_CPSW_BASE + CPSW_REG_MAXLEN);
  286. /* Control register */
  287. writel(ctl, DEVICE_CPSW_BASE + CPSW_REG_CTL);
  288. /* All statistics enabled by default */
  289. writel(CPSW_REG_VAL_STAT_ENABLE_ALL,
  290. DEVICE_CPSW_BASE + CPSW_REG_STAT_PORT_EN);
  291. /* Reset and enable the ALE */
  292. writel(CPSW_REG_VAL_ALE_CTL_RESET_AND_ENABLE |
  293. CPSW_REG_VAL_ALE_CTL_BYPASS,
  294. DEVICE_CPSW_BASE + CPSW_REG_ALE_CONTROL);
  295. /* All ports put into forward mode */
  296. for (i = 0; i < DEVICE_CPSW_NUM_PORTS; i++)
  297. writel(CPSW_REG_VAL_PORTCTL_FORWARD_MODE,
  298. DEVICE_CPSW_BASE + CPSW_REG_ALE_PORTCTL(i));
  299. return 0;
  300. }
  301. int ethss_start(void)
  302. {
  303. int i;
  304. struct mac_sl_cfg cfg;
  305. cfg.max_rx_len = MAX_SIZE_STREAM_BUFFER;
  306. cfg.ctl = GMACSL_ENABLE | GMACSL_RX_ENABLE_EXT_CTL;
  307. for (i = 0; i < DEVICE_N_GMACSL_PORTS; i++) {
  308. mac_sl_reset(i);
  309. mac_sl_config(i, &cfg);
  310. }
  311. return 0;
  312. }
  313. int ethss_stop(void)
  314. {
  315. int i;
  316. for (i = 0; i < DEVICE_N_GMACSL_PORTS; i++)
  317. mac_sl_reset(i);
  318. return 0;
  319. }
  320. int32_t cpmac_drv_send(u32 *buffer, int num_bytes, int slave_port_num)
  321. {
  322. if (num_bytes < EMAC_MIN_ETHERNET_PKT_SIZE)
  323. num_bytes = EMAC_MIN_ETHERNET_PKT_SIZE;
  324. return ksnav_send(&netcp_pktdma, buffer,
  325. num_bytes, (slave_port_num) << 16);
  326. }
  327. /* Eth device open */
  328. static int keystone2_eth_open(struct eth_device *dev, bd_t *bis)
  329. {
  330. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  331. struct phy_device *phy_dev = eth_priv->phy_dev;
  332. debug("+ emac_open\n");
  333. net_rx_buffs.rx_flow = eth_priv->rx_flow;
  334. sys_has_mdio =
  335. (eth_priv->sgmii_link_type == SGMII_LINK_MAC_PHY) ? 1 : 0;
  336. if (sys_has_mdio)
  337. keystone2_mdio_reset(mdio_bus);
  338. #ifdef CONFIG_SOC_K2G
  339. keystone_rgmii_config(phy_dev);
  340. #else
  341. keystone_sgmii_config(phy_dev, eth_priv->slave_port - 1,
  342. eth_priv->sgmii_link_type);
  343. #endif
  344. udelay(10000);
  345. /* On chip switch configuration */
  346. ethss_config(target_get_switch_ctl(), SWITCH_MAX_PKT_SIZE);
  347. /* TODO: add error handling code */
  348. if (qm_init()) {
  349. printf("ERROR: qm_init()\n");
  350. return -1;
  351. }
  352. if (ksnav_init(&netcp_pktdma, &net_rx_buffs)) {
  353. qm_close();
  354. printf("ERROR: netcp_init()\n");
  355. return -1;
  356. }
  357. /*
  358. * Streaming switch configuration. If not present this
  359. * statement is defined to void in target.h.
  360. * If present this is usually defined to a series of register writes
  361. */
  362. hw_config_streaming_switch();
  363. if (sys_has_mdio) {
  364. keystone2_mdio_reset(mdio_bus);
  365. phy_startup(phy_dev);
  366. if (phy_dev->link == 0) {
  367. ksnav_close(&netcp_pktdma);
  368. qm_close();
  369. return -1;
  370. }
  371. }
  372. emac_gigabit_enable(dev);
  373. ethss_start();
  374. debug("- emac_open\n");
  375. emac_open = 1;
  376. return 0;
  377. }
  378. /* Eth device close */
  379. void keystone2_eth_close(struct eth_device *dev)
  380. {
  381. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  382. struct phy_device *phy_dev = eth_priv->phy_dev;
  383. debug("+ emac_close\n");
  384. if (!emac_open)
  385. return;
  386. ethss_stop();
  387. ksnav_close(&netcp_pktdma);
  388. qm_close();
  389. phy_shutdown(phy_dev);
  390. emac_open = 0;
  391. debug("- emac_close\n");
  392. }
  393. /*
  394. * This function sends a single packet on the network and returns
  395. * positive number (number of bytes transmitted) or negative for error
  396. */
  397. static int keystone2_eth_send_packet(struct eth_device *dev,
  398. void *packet, int length)
  399. {
  400. int ret_status = -1;
  401. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  402. struct phy_device *phy_dev = eth_priv->phy_dev;
  403. genphy_update_link(phy_dev);
  404. if (phy_dev->link == 0)
  405. return -1;
  406. if (cpmac_drv_send((u32 *)packet, length, eth_priv->slave_port) != 0)
  407. return ret_status;
  408. return length;
  409. }
  410. /*
  411. * This function handles receipt of a packet from the network
  412. */
  413. static int keystone2_eth_rcv_packet(struct eth_device *dev)
  414. {
  415. void *hd;
  416. int pkt_size;
  417. u32 *pkt;
  418. hd = ksnav_recv(&netcp_pktdma, &pkt, &pkt_size);
  419. if (hd == NULL)
  420. return 0;
  421. net_process_received_packet((uchar *)pkt, pkt_size);
  422. ksnav_release_rxhd(&netcp_pktdma, hd);
  423. return pkt_size;
  424. }
  425. #ifdef CONFIG_MCAST_TFTP
  426. static int keystone2_eth_bcast_addr(struct eth_device *dev, u32 ip, u8 set)
  427. {
  428. return 0;
  429. }
  430. #endif
  431. /*
  432. * This function initializes the EMAC hardware.
  433. */
  434. int keystone2_emac_initialize(struct eth_priv_t *eth_priv)
  435. {
  436. int res;
  437. struct eth_device *dev;
  438. struct phy_device *phy_dev;
  439. dev = malloc(sizeof(struct eth_device));
  440. if (dev == NULL)
  441. return -1;
  442. memset(dev, 0, sizeof(struct eth_device));
  443. strcpy(dev->name, eth_priv->int_name);
  444. dev->priv = eth_priv;
  445. keystone2_eth_read_mac_addr(dev);
  446. dev->iobase = 0;
  447. dev->init = keystone2_eth_open;
  448. dev->halt = keystone2_eth_close;
  449. dev->send = keystone2_eth_send_packet;
  450. dev->recv = keystone2_eth_rcv_packet;
  451. #ifdef CONFIG_MCAST_TFTP
  452. dev->mcast = keystone2_eth_bcast_addr;
  453. #endif
  454. eth_register(dev);
  455. /* Register MDIO bus if it's not registered yet */
  456. if (!mdio_bus) {
  457. mdio_bus = mdio_alloc();
  458. mdio_bus->read = keystone2_mdio_read;
  459. mdio_bus->write = keystone2_mdio_write;
  460. mdio_bus->reset = keystone2_mdio_reset;
  461. mdio_bus->priv = (void *)EMAC_MDIO_BASE_ADDR;
  462. sprintf(mdio_bus->name, "ethernet-mdio");
  463. res = mdio_register(mdio_bus);
  464. if (res)
  465. return res;
  466. }
  467. #ifndef CONFIG_SOC_K2G
  468. keystone2_net_serdes_setup();
  469. #endif
  470. /* Create phy device and bind it with driver */
  471. #ifdef CONFIG_KSNET_MDIO_PHY_CONFIG_ENABLE
  472. phy_dev = phy_connect(mdio_bus, eth_priv->phy_addr,
  473. dev, eth_priv->phy_if);
  474. phy_config(phy_dev);
  475. #else
  476. phy_dev = phy_find_by_mask(mdio_bus, 1 << eth_priv->phy_addr,
  477. eth_priv->phy_if);
  478. phy_dev->dev = dev;
  479. #endif
  480. eth_priv->phy_dev = phy_dev;
  481. return 0;
  482. }
  483. struct ks2_serdes ks2_serdes_sgmii_156p25mhz = {
  484. .clk = SERDES_CLOCK_156P25M,
  485. .rate = SERDES_RATE_5G,
  486. .rate_mode = SERDES_QUARTER_RATE,
  487. .intf = SERDES_PHY_SGMII,
  488. .loopback = 0,
  489. };
  490. #ifndef CONFIG_SOC_K2G
  491. static void keystone2_net_serdes_setup(void)
  492. {
  493. ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII_BASE,
  494. &ks2_serdes_sgmii_156p25mhz,
  495. CONFIG_KSNET_SERDES_LANES_PER_SGMII);
  496. #if defined(CONFIG_SOC_K2E) || defined(CONFIG_SOC_K2L)
  497. ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII2_BASE,
  498. &ks2_serdes_sgmii_156p25mhz,
  499. CONFIG_KSNET_SERDES_LANES_PER_SGMII);
  500. #endif
  501. /* wait till setup */
  502. udelay(5000);
  503. }
  504. #endif