keystone_net.c 13 KB

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