keystone_net.c 14 KB

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