keystone_net.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  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. #ifdef CONFIG_K2E_EVM
  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. keystone2_net_serdes_setup();
  315. keystone_sgmii_config(phy_dev, eth_priv->slave_port - 1,
  316. eth_priv->sgmii_link_type);
  317. udelay(10000);
  318. /* On chip switch configuration */
  319. ethss_config(target_get_switch_ctl(), SWITCH_MAX_PKT_SIZE);
  320. /* TODO: add error handling code */
  321. if (qm_init()) {
  322. printf("ERROR: qm_init()\n");
  323. return -1;
  324. }
  325. if (ksnav_init(&netcp_pktdma, &net_rx_buffs)) {
  326. qm_close();
  327. printf("ERROR: netcp_init()\n");
  328. return -1;
  329. }
  330. /*
  331. * Streaming switch configuration. If not present this
  332. * statement is defined to void in target.h.
  333. * If present this is usually defined to a series of register writes
  334. */
  335. hw_config_streaming_switch();
  336. if (sys_has_mdio) {
  337. keystone2_mdio_reset(mdio_bus);
  338. phy_startup(phy_dev);
  339. if (phy_dev->link == 0) {
  340. ksnav_close(&netcp_pktdma);
  341. qm_close();
  342. return -1;
  343. }
  344. }
  345. emac_gigabit_enable(dev);
  346. ethss_start();
  347. debug("- emac_open\n");
  348. emac_open = 1;
  349. return 0;
  350. }
  351. /* Eth device close */
  352. void keystone2_eth_close(struct eth_device *dev)
  353. {
  354. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  355. struct phy_device *phy_dev = eth_priv->phy_dev;
  356. debug("+ emac_close\n");
  357. if (!emac_open)
  358. return;
  359. ethss_stop();
  360. ksnav_close(&netcp_pktdma);
  361. qm_close();
  362. phy_shutdown(phy_dev);
  363. emac_open = 0;
  364. debug("- emac_close\n");
  365. }
  366. /*
  367. * This function sends a single packet on the network and returns
  368. * positive number (number of bytes transmitted) or negative for error
  369. */
  370. static int keystone2_eth_send_packet(struct eth_device *dev,
  371. void *packet, int length)
  372. {
  373. int ret_status = -1;
  374. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  375. struct phy_device *phy_dev = eth_priv->phy_dev;
  376. genphy_update_link(phy_dev);
  377. if (phy_dev->link == 0)
  378. return -1;
  379. if (cpmac_drv_send((u32 *)packet, length, eth_priv->slave_port) != 0)
  380. return ret_status;
  381. return length;
  382. }
  383. /*
  384. * This function handles receipt of a packet from the network
  385. */
  386. static int keystone2_eth_rcv_packet(struct eth_device *dev)
  387. {
  388. void *hd;
  389. int pkt_size;
  390. u32 *pkt;
  391. hd = ksnav_recv(&netcp_pktdma, &pkt, &pkt_size);
  392. if (hd == NULL)
  393. return 0;
  394. NetReceive((uchar *)pkt, pkt_size);
  395. ksnav_release_rxhd(&netcp_pktdma, hd);
  396. return pkt_size;
  397. }
  398. /*
  399. * This function initializes the EMAC hardware.
  400. */
  401. int keystone2_emac_initialize(struct eth_priv_t *eth_priv)
  402. {
  403. int res;
  404. struct eth_device *dev;
  405. struct phy_device *phy_dev;
  406. dev = malloc(sizeof(struct eth_device));
  407. if (dev == NULL)
  408. return -1;
  409. memset(dev, 0, sizeof(struct eth_device));
  410. strcpy(dev->name, eth_priv->int_name);
  411. dev->priv = eth_priv;
  412. keystone2_eth_read_mac_addr(dev);
  413. dev->iobase = 0;
  414. dev->init = keystone2_eth_open;
  415. dev->halt = keystone2_eth_close;
  416. dev->send = keystone2_eth_send_packet;
  417. dev->recv = keystone2_eth_rcv_packet;
  418. eth_register(dev);
  419. /* Register MDIO bus if it's not registered yet */
  420. if (!mdio_bus) {
  421. mdio_bus = mdio_alloc();
  422. mdio_bus->read = keystone2_mdio_read;
  423. mdio_bus->write = keystone2_mdio_write;
  424. mdio_bus->reset = keystone2_mdio_reset;
  425. mdio_bus->priv = (void *)EMAC_MDIO_BASE_ADDR;
  426. sprintf(mdio_bus->name, "ethernet-mdio");
  427. res = mdio_register(mdio_bus);
  428. if (res)
  429. return res;
  430. }
  431. /* Create phy device and bind it with driver */
  432. #ifdef CONFIG_KSNET_MDIO_PHY_CONFIG_ENABLE
  433. phy_dev = phy_connect(mdio_bus, eth_priv->phy_addr,
  434. dev, PHY_INTERFACE_MODE_SGMII);
  435. phy_config(phy_dev);
  436. #else
  437. phy_dev = phy_find_by_mask(mdio_bus, 1 << eth_priv->phy_addr,
  438. PHY_INTERFACE_MODE_SGMII);
  439. phy_dev->dev = dev;
  440. #endif
  441. eth_priv->phy_dev = phy_dev;
  442. return 0;
  443. }
  444. struct ks2_serdes ks2_serdes_sgmii_156p25mhz = {
  445. .clk = SERDES_CLOCK_156P25M,
  446. .rate = SERDES_RATE_5G,
  447. .rate_mode = SERDES_QUARTER_RATE,
  448. .intf = SERDES_PHY_SGMII,
  449. .loopback = 0,
  450. };
  451. static void keystone2_net_serdes_setup(void)
  452. {
  453. ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII_BASE,
  454. &ks2_serdes_sgmii_156p25mhz,
  455. CONFIG_KSNET_SERDES_LANES_PER_SGMII);
  456. #ifdef CONFIG_SOC_K2E
  457. ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII2_BASE,
  458. &ks2_serdes_sgmii_156p25mhz,
  459. CONFIG_KSNET_SERDES_LANES_PER_SGMII);
  460. #endif
  461. /* wait till setup */
  462. udelay(5000);
  463. }