keystone_net.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032
  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 <dm.h>
  13. #include <net.h>
  14. #include <phy.h>
  15. #include <errno.h>
  16. #include <miiphy.h>
  17. #include <malloc.h>
  18. #include <asm/ti-common/keystone_nav.h>
  19. #include <asm/ti-common/keystone_net.h>
  20. #include <asm/ti-common/keystone_serdes.h>
  21. #include <asm/arch/psc_defs.h>
  22. DECLARE_GLOBAL_DATA_PTR;
  23. #ifndef CONFIG_DM_ETH
  24. unsigned int emac_open;
  25. static struct mii_dev *mdio_bus;
  26. static unsigned int sys_has_mdio = 1;
  27. #endif
  28. #ifdef KEYSTONE2_EMAC_GIG_ENABLE
  29. #define emac_gigabit_enable(x) keystone2_eth_gigabit_enable(x)
  30. #else
  31. #define emac_gigabit_enable(x) /* no gigabit to enable */
  32. #endif
  33. #define RX_BUFF_NUMS 24
  34. #define RX_BUFF_LEN 1520
  35. #define MAX_SIZE_STREAM_BUFFER RX_BUFF_LEN
  36. #define SGMII_ANEG_TIMEOUT 4000
  37. static u8 rx_buffs[RX_BUFF_NUMS * RX_BUFF_LEN] __aligned(16);
  38. #ifndef CONFIG_DM_ETH
  39. struct rx_buff_desc net_rx_buffs = {
  40. .buff_ptr = rx_buffs,
  41. .num_buffs = RX_BUFF_NUMS,
  42. .buff_len = RX_BUFF_LEN,
  43. .rx_flow = 22,
  44. };
  45. #endif
  46. #ifdef CONFIG_DM_ETH
  47. enum link_type {
  48. LINK_TYPE_MAC_TO_MAC_AUTO = 0,
  49. LINK_TYPE_MAC_TO_PHY_MODE = 1,
  50. LINK_TYPE_MAC_TO_MAC_FORCED_MODE = 2,
  51. LINK_TYPE_MAC_TO_FIBRE_MODE = 3,
  52. LINK_TYPE_MAC_TO_PHY_NO_MDIO_MODE = 4,
  53. LINK_TYPE_10G_MAC_TO_PHY_MODE = 10,
  54. LINK_TYPE_10G_MAC_TO_MAC_FORCED_MODE = 11,
  55. };
  56. #define mac_hi(mac) (((mac)[0] << 0) | ((mac)[1] << 8) | \
  57. ((mac)[2] << 16) | ((mac)[3] << 24))
  58. #define mac_lo(mac) (((mac)[4] << 0) | ((mac)[5] << 8))
  59. #ifdef CONFIG_KSNET_NETCP_V1_0
  60. #define EMAC_EMACSW_BASE_OFS 0x90800
  61. #define EMAC_EMACSW_PORT_BASE_OFS (EMAC_EMACSW_BASE_OFS + 0x60)
  62. /* CPSW Switch slave registers */
  63. #define CPGMACSL_REG_SA_LO 0x10
  64. #define CPGMACSL_REG_SA_HI 0x14
  65. #define DEVICE_EMACSW_BASE(base, x) ((base) + EMAC_EMACSW_PORT_BASE_OFS + \
  66. (x) * 0x30)
  67. #elif defined CONFIG_KSNET_NETCP_V1_5
  68. #define EMAC_EMACSW_PORT_BASE_OFS 0x222000
  69. /* CPSW Switch slave registers */
  70. #define CPGMACSL_REG_SA_LO 0x308
  71. #define CPGMACSL_REG_SA_HI 0x30c
  72. #define DEVICE_EMACSW_BASE(base, x) ((base) + EMAC_EMACSW_PORT_BASE_OFS + \
  73. (x) * 0x1000)
  74. #endif
  75. struct ks2_eth_priv {
  76. struct udevice *dev;
  77. struct phy_device *phydev;
  78. struct mii_dev *mdio_bus;
  79. int phy_addr;
  80. phy_interface_t phy_if;
  81. int sgmii_link_type;
  82. void *mdio_base;
  83. struct rx_buff_desc net_rx_buffs;
  84. struct pktdma_cfg *netcp_pktdma;
  85. void *hd;
  86. int slave_port;
  87. enum link_type link_type;
  88. bool emac_open;
  89. bool has_mdio;
  90. };
  91. #endif
  92. /* MDIO */
  93. static int keystone2_mdio_reset(struct mii_dev *bus)
  94. {
  95. u_int32_t clkdiv;
  96. struct mdio_regs *adap_mdio = bus->priv;
  97. clkdiv = (EMAC_MDIO_BUS_FREQ / EMAC_MDIO_CLOCK_FREQ) - 1;
  98. writel((clkdiv & 0xffff) | MDIO_CONTROL_ENABLE |
  99. MDIO_CONTROL_FAULT | MDIO_CONTROL_FAULT_ENABLE,
  100. &adap_mdio->control);
  101. while (readl(&adap_mdio->control) & MDIO_CONTROL_IDLE)
  102. ;
  103. return 0;
  104. }
  105. /**
  106. * keystone2_mdio_read - read a PHY register via MDIO interface.
  107. * Blocks until operation is complete.
  108. */
  109. static int keystone2_mdio_read(struct mii_dev *bus,
  110. int addr, int devad, int reg)
  111. {
  112. int tmp;
  113. struct mdio_regs *adap_mdio = bus->priv;
  114. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  115. ;
  116. writel(MDIO_USERACCESS0_GO | MDIO_USERACCESS0_WRITE_READ |
  117. ((reg & 0x1f) << 21) | ((addr & 0x1f) << 16),
  118. &adap_mdio->useraccess0);
  119. /* Wait for command to complete */
  120. while ((tmp = readl(&adap_mdio->useraccess0)) & MDIO_USERACCESS0_GO)
  121. ;
  122. if (tmp & MDIO_USERACCESS0_ACK)
  123. return tmp & 0xffff;
  124. return -1;
  125. }
  126. /**
  127. * keystone2_mdio_write - write to a PHY register via MDIO interface.
  128. * Blocks until operation is complete.
  129. */
  130. static int keystone2_mdio_write(struct mii_dev *bus,
  131. int addr, int devad, int reg, u16 val)
  132. {
  133. struct mdio_regs *adap_mdio = bus->priv;
  134. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  135. ;
  136. writel(MDIO_USERACCESS0_GO | MDIO_USERACCESS0_WRITE_WRITE |
  137. ((reg & 0x1f) << 21) | ((addr & 0x1f) << 16) |
  138. (val & 0xffff), &adap_mdio->useraccess0);
  139. /* Wait for command to complete */
  140. while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
  141. ;
  142. return 0;
  143. }
  144. #ifndef CONFIG_DM_ETH
  145. static void __attribute__((unused))
  146. keystone2_eth_gigabit_enable(struct eth_device *dev)
  147. {
  148. u_int16_t data;
  149. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  150. if (sys_has_mdio) {
  151. data = keystone2_mdio_read(mdio_bus, eth_priv->phy_addr,
  152. MDIO_DEVAD_NONE, 0);
  153. /* speed selection MSB */
  154. if (!(data & (1 << 6)))
  155. return;
  156. }
  157. /*
  158. * Check if link detected is giga-bit
  159. * If Gigabit mode detected, enable gigbit in MAC
  160. */
  161. writel(readl(DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) +
  162. CPGMACSL_REG_CTL) |
  163. EMAC_MACCONTROL_GIGFORCE | EMAC_MACCONTROL_GIGABIT_ENABLE,
  164. DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) + CPGMACSL_REG_CTL);
  165. }
  166. #else
  167. static void __attribute__((unused))
  168. keystone2_eth_gigabit_enable(struct udevice *dev)
  169. {
  170. struct ks2_eth_priv *priv = dev_get_priv(dev);
  171. u_int16_t data;
  172. if (priv->has_mdio) {
  173. data = keystone2_mdio_read(priv->mdio_bus, priv->phy_addr,
  174. MDIO_DEVAD_NONE, 0);
  175. /* speed selection MSB */
  176. if (!(data & (1 << 6)))
  177. return;
  178. }
  179. /*
  180. * Check if link detected is giga-bit
  181. * If Gigabit mode detected, enable gigbit in MAC
  182. */
  183. writel(readl(DEVICE_EMACSL_BASE(priv->slave_port - 1) +
  184. CPGMACSL_REG_CTL) |
  185. EMAC_MACCONTROL_GIGFORCE | EMAC_MACCONTROL_GIGABIT_ENABLE,
  186. DEVICE_EMACSL_BASE(priv->slave_port - 1) + CPGMACSL_REG_CTL);
  187. }
  188. #endif
  189. #ifdef CONFIG_SOC_K2G
  190. int keystone_rgmii_config(struct phy_device *phy_dev)
  191. {
  192. unsigned int i, status;
  193. i = 0;
  194. do {
  195. if (i > SGMII_ANEG_TIMEOUT) {
  196. puts(" TIMEOUT !\n");
  197. phy_dev->link = 0;
  198. return 0;
  199. }
  200. if (ctrlc()) {
  201. puts("user interrupt!\n");
  202. phy_dev->link = 0;
  203. return -EINTR;
  204. }
  205. if ((i++ % 500) == 0)
  206. printf(".");
  207. udelay(1000); /* 1 ms */
  208. status = readl(RGMII_STATUS_REG);
  209. } while (!(status & RGMII_REG_STATUS_LINK));
  210. puts(" done\n");
  211. return 0;
  212. }
  213. #else
  214. int keystone_sgmii_config(struct phy_device *phy_dev, int port, int interface)
  215. {
  216. unsigned int i, status, mask;
  217. unsigned int mr_adv_ability, control;
  218. switch (interface) {
  219. case SGMII_LINK_MAC_MAC_AUTONEG:
  220. mr_adv_ability = (SGMII_REG_MR_ADV_ENABLE |
  221. SGMII_REG_MR_ADV_LINK |
  222. SGMII_REG_MR_ADV_FULL_DUPLEX |
  223. SGMII_REG_MR_ADV_GIG_MODE);
  224. control = (SGMII_REG_CONTROL_MASTER |
  225. SGMII_REG_CONTROL_AUTONEG);
  226. break;
  227. case SGMII_LINK_MAC_PHY:
  228. case SGMII_LINK_MAC_PHY_FORCED:
  229. mr_adv_ability = SGMII_REG_MR_ADV_ENABLE;
  230. control = SGMII_REG_CONTROL_AUTONEG;
  231. break;
  232. case SGMII_LINK_MAC_MAC_FORCED:
  233. mr_adv_ability = (SGMII_REG_MR_ADV_ENABLE |
  234. SGMII_REG_MR_ADV_LINK |
  235. SGMII_REG_MR_ADV_FULL_DUPLEX |
  236. SGMII_REG_MR_ADV_GIG_MODE);
  237. control = SGMII_REG_CONTROL_MASTER;
  238. break;
  239. case SGMII_LINK_MAC_FIBER:
  240. mr_adv_ability = 0x20;
  241. control = SGMII_REG_CONTROL_AUTONEG;
  242. break;
  243. default:
  244. mr_adv_ability = SGMII_REG_MR_ADV_ENABLE;
  245. control = SGMII_REG_CONTROL_AUTONEG;
  246. }
  247. __raw_writel(0, SGMII_CTL_REG(port));
  248. /*
  249. * Wait for the SerDes pll to lock,
  250. * but don't trap if lock is never read
  251. */
  252. for (i = 0; i < 1000; i++) {
  253. udelay(2000);
  254. status = __raw_readl(SGMII_STATUS_REG(port));
  255. if ((status & SGMII_REG_STATUS_LOCK) != 0)
  256. break;
  257. }
  258. __raw_writel(mr_adv_ability, SGMII_MRADV_REG(port));
  259. __raw_writel(control, SGMII_CTL_REG(port));
  260. mask = SGMII_REG_STATUS_LINK;
  261. if (control & SGMII_REG_CONTROL_AUTONEG)
  262. mask |= SGMII_REG_STATUS_AUTONEG;
  263. status = __raw_readl(SGMII_STATUS_REG(port));
  264. if ((status & mask) == mask)
  265. return 0;
  266. printf("\n%s Waiting for SGMII auto negotiation to complete",
  267. phy_dev->dev->name);
  268. while ((status & mask) != mask) {
  269. /*
  270. * Timeout reached ?
  271. */
  272. if (i > SGMII_ANEG_TIMEOUT) {
  273. puts(" TIMEOUT !\n");
  274. phy_dev->link = 0;
  275. return 0;
  276. }
  277. if (ctrlc()) {
  278. puts("user interrupt!\n");
  279. phy_dev->link = 0;
  280. return -EINTR;
  281. }
  282. if ((i++ % 500) == 0)
  283. printf(".");
  284. udelay(1000); /* 1 ms */
  285. status = __raw_readl(SGMII_STATUS_REG(port));
  286. }
  287. puts(" done\n");
  288. return 0;
  289. }
  290. #endif
  291. int mac_sl_reset(u32 port)
  292. {
  293. u32 i, v;
  294. if (port >= DEVICE_N_GMACSL_PORTS)
  295. return GMACSL_RET_INVALID_PORT;
  296. /* Set the soft reset bit */
  297. writel(CPGMAC_REG_RESET_VAL_RESET,
  298. DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  299. /* Wait for the bit to clear */
  300. for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) {
  301. v = readl(DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  302. if ((v & CPGMAC_REG_RESET_VAL_RESET_MASK) !=
  303. CPGMAC_REG_RESET_VAL_RESET)
  304. return GMACSL_RET_OK;
  305. }
  306. /* Timeout on the reset */
  307. return GMACSL_RET_WARN_RESET_INCOMPLETE;
  308. }
  309. int mac_sl_config(u_int16_t port, struct mac_sl_cfg *cfg)
  310. {
  311. u32 v, i;
  312. int ret = GMACSL_RET_OK;
  313. if (port >= DEVICE_N_GMACSL_PORTS)
  314. return GMACSL_RET_INVALID_PORT;
  315. if (cfg->max_rx_len > CPGMAC_REG_MAXLEN_LEN) {
  316. cfg->max_rx_len = CPGMAC_REG_MAXLEN_LEN;
  317. ret = GMACSL_RET_WARN_MAXLEN_TOO_BIG;
  318. }
  319. /* Must wait if the device is undergoing reset */
  320. for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) {
  321. v = readl(DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RESET);
  322. if ((v & CPGMAC_REG_RESET_VAL_RESET_MASK) !=
  323. CPGMAC_REG_RESET_VAL_RESET)
  324. break;
  325. }
  326. if (i == DEVICE_EMACSL_RESET_POLL_COUNT)
  327. return GMACSL_RET_CONFIG_FAIL_RESET_ACTIVE;
  328. writel(cfg->max_rx_len, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_MAXLEN);
  329. writel(cfg->ctl, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_CTL);
  330. #ifndef CONFIG_SOC_K2HK
  331. /* Map RX packet flow priority to 0 */
  332. writel(0, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RX_PRI_MAP);
  333. #endif
  334. return ret;
  335. }
  336. int ethss_config(u32 ctl, u32 max_pkt_size)
  337. {
  338. u32 i;
  339. /* Max length register */
  340. writel(max_pkt_size, DEVICE_CPSW_BASE + CPSW_REG_MAXLEN);
  341. /* Control register */
  342. writel(ctl, DEVICE_CPSW_BASE + CPSW_REG_CTL);
  343. /* All statistics enabled by default */
  344. writel(CPSW_REG_VAL_STAT_ENABLE_ALL,
  345. DEVICE_CPSW_BASE + CPSW_REG_STAT_PORT_EN);
  346. /* Reset and enable the ALE */
  347. writel(CPSW_REG_VAL_ALE_CTL_RESET_AND_ENABLE |
  348. CPSW_REG_VAL_ALE_CTL_BYPASS,
  349. DEVICE_CPSW_BASE + CPSW_REG_ALE_CONTROL);
  350. /* All ports put into forward mode */
  351. for (i = 0; i < DEVICE_CPSW_NUM_PORTS; i++)
  352. writel(CPSW_REG_VAL_PORTCTL_FORWARD_MODE,
  353. DEVICE_CPSW_BASE + CPSW_REG_ALE_PORTCTL(i));
  354. return 0;
  355. }
  356. int ethss_start(void)
  357. {
  358. int i;
  359. struct mac_sl_cfg cfg;
  360. cfg.max_rx_len = MAX_SIZE_STREAM_BUFFER;
  361. cfg.ctl = GMACSL_ENABLE | GMACSL_RX_ENABLE_EXT_CTL;
  362. for (i = 0; i < DEVICE_N_GMACSL_PORTS; i++) {
  363. mac_sl_reset(i);
  364. mac_sl_config(i, &cfg);
  365. }
  366. return 0;
  367. }
  368. int ethss_stop(void)
  369. {
  370. int i;
  371. for (i = 0; i < DEVICE_N_GMACSL_PORTS; i++)
  372. mac_sl_reset(i);
  373. return 0;
  374. }
  375. struct ks2_serdes ks2_serdes_sgmii_156p25mhz = {
  376. .clk = SERDES_CLOCK_156P25M,
  377. .rate = SERDES_RATE_5G,
  378. .rate_mode = SERDES_QUARTER_RATE,
  379. .intf = SERDES_PHY_SGMII,
  380. .loopback = 0,
  381. };
  382. #ifndef CONFIG_SOC_K2G
  383. static void keystone2_net_serdes_setup(void)
  384. {
  385. ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII_BASE,
  386. &ks2_serdes_sgmii_156p25mhz,
  387. CONFIG_KSNET_SERDES_LANES_PER_SGMII);
  388. #if defined(CONFIG_SOC_K2E) || defined(CONFIG_SOC_K2L)
  389. ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII2_BASE,
  390. &ks2_serdes_sgmii_156p25mhz,
  391. CONFIG_KSNET_SERDES_LANES_PER_SGMII);
  392. #endif
  393. /* wait till setup */
  394. udelay(5000);
  395. }
  396. #endif
  397. #ifndef CONFIG_DM_ETH
  398. int keystone2_eth_read_mac_addr(struct eth_device *dev)
  399. {
  400. struct eth_priv_t *eth_priv;
  401. u32 maca = 0;
  402. u32 macb = 0;
  403. eth_priv = (struct eth_priv_t *)dev->priv;
  404. /* Read the e-fuse mac address */
  405. if (eth_priv->slave_port == 1) {
  406. maca = __raw_readl(MAC_ID_BASE_ADDR);
  407. macb = __raw_readl(MAC_ID_BASE_ADDR + 4);
  408. }
  409. dev->enetaddr[0] = (macb >> 8) & 0xff;
  410. dev->enetaddr[1] = (macb >> 0) & 0xff;
  411. dev->enetaddr[2] = (maca >> 24) & 0xff;
  412. dev->enetaddr[3] = (maca >> 16) & 0xff;
  413. dev->enetaddr[4] = (maca >> 8) & 0xff;
  414. dev->enetaddr[5] = (maca >> 0) & 0xff;
  415. return 0;
  416. }
  417. int32_t cpmac_drv_send(u32 *buffer, int num_bytes, int slave_port_num)
  418. {
  419. if (num_bytes < EMAC_MIN_ETHERNET_PKT_SIZE)
  420. num_bytes = EMAC_MIN_ETHERNET_PKT_SIZE;
  421. return ksnav_send(&netcp_pktdma, buffer,
  422. num_bytes, (slave_port_num) << 16);
  423. }
  424. /* Eth device open */
  425. static int keystone2_eth_open(struct eth_device *dev, bd_t *bis)
  426. {
  427. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  428. struct phy_device *phy_dev = eth_priv->phy_dev;
  429. debug("+ emac_open\n");
  430. net_rx_buffs.rx_flow = eth_priv->rx_flow;
  431. sys_has_mdio =
  432. (eth_priv->sgmii_link_type == SGMII_LINK_MAC_PHY) ? 1 : 0;
  433. if (sys_has_mdio)
  434. keystone2_mdio_reset(mdio_bus);
  435. #ifdef CONFIG_SOC_K2G
  436. keystone_rgmii_config(phy_dev);
  437. #else
  438. keystone_sgmii_config(phy_dev, eth_priv->slave_port - 1,
  439. eth_priv->sgmii_link_type);
  440. #endif
  441. udelay(10000);
  442. /* On chip switch configuration */
  443. ethss_config(target_get_switch_ctl(), SWITCH_MAX_PKT_SIZE);
  444. /* TODO: add error handling code */
  445. if (qm_init()) {
  446. printf("ERROR: qm_init()\n");
  447. return -1;
  448. }
  449. if (ksnav_init(&netcp_pktdma, &net_rx_buffs)) {
  450. qm_close();
  451. printf("ERROR: netcp_init()\n");
  452. return -1;
  453. }
  454. /*
  455. * Streaming switch configuration. If not present this
  456. * statement is defined to void in target.h.
  457. * If present this is usually defined to a series of register writes
  458. */
  459. hw_config_streaming_switch();
  460. if (sys_has_mdio) {
  461. keystone2_mdio_reset(mdio_bus);
  462. phy_startup(phy_dev);
  463. if (phy_dev->link == 0) {
  464. ksnav_close(&netcp_pktdma);
  465. qm_close();
  466. return -1;
  467. }
  468. }
  469. emac_gigabit_enable(dev);
  470. ethss_start();
  471. debug("- emac_open\n");
  472. emac_open = 1;
  473. return 0;
  474. }
  475. /* Eth device close */
  476. void keystone2_eth_close(struct eth_device *dev)
  477. {
  478. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  479. struct phy_device *phy_dev = eth_priv->phy_dev;
  480. debug("+ emac_close\n");
  481. if (!emac_open)
  482. return;
  483. ethss_stop();
  484. ksnav_close(&netcp_pktdma);
  485. qm_close();
  486. phy_shutdown(phy_dev);
  487. emac_open = 0;
  488. debug("- emac_close\n");
  489. }
  490. /*
  491. * This function sends a single packet on the network and returns
  492. * positive number (number of bytes transmitted) or negative for error
  493. */
  494. static int keystone2_eth_send_packet(struct eth_device *dev,
  495. void *packet, int length)
  496. {
  497. int ret_status = -1;
  498. struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
  499. struct phy_device *phy_dev = eth_priv->phy_dev;
  500. genphy_update_link(phy_dev);
  501. if (phy_dev->link == 0)
  502. return -1;
  503. if (cpmac_drv_send((u32 *)packet, length, eth_priv->slave_port) != 0)
  504. return ret_status;
  505. return length;
  506. }
  507. /*
  508. * This function handles receipt of a packet from the network
  509. */
  510. static int keystone2_eth_rcv_packet(struct eth_device *dev)
  511. {
  512. void *hd;
  513. int pkt_size;
  514. u32 *pkt;
  515. hd = ksnav_recv(&netcp_pktdma, &pkt, &pkt_size);
  516. if (hd == NULL)
  517. return 0;
  518. net_process_received_packet((uchar *)pkt, pkt_size);
  519. ksnav_release_rxhd(&netcp_pktdma, hd);
  520. return pkt_size;
  521. }
  522. #ifdef CONFIG_MCAST_TFTP
  523. static int keystone2_eth_bcast_addr(struct eth_device *dev, u32 ip, u8 set)
  524. {
  525. return 0;
  526. }
  527. #endif
  528. /*
  529. * This function initializes the EMAC hardware.
  530. */
  531. int keystone2_emac_initialize(struct eth_priv_t *eth_priv)
  532. {
  533. int res;
  534. struct eth_device *dev;
  535. struct phy_device *phy_dev;
  536. struct mdio_regs *adap_mdio = (struct mdio_regs *)EMAC_MDIO_BASE_ADDR;
  537. dev = malloc(sizeof(struct eth_device));
  538. if (dev == NULL)
  539. return -1;
  540. memset(dev, 0, sizeof(struct eth_device));
  541. strcpy(dev->name, eth_priv->int_name);
  542. dev->priv = eth_priv;
  543. keystone2_eth_read_mac_addr(dev);
  544. dev->iobase = 0;
  545. dev->init = keystone2_eth_open;
  546. dev->halt = keystone2_eth_close;
  547. dev->send = keystone2_eth_send_packet;
  548. dev->recv = keystone2_eth_rcv_packet;
  549. #ifdef CONFIG_MCAST_TFTP
  550. dev->mcast = keystone2_eth_bcast_addr;
  551. #endif
  552. eth_register(dev);
  553. /* Register MDIO bus if it's not registered yet */
  554. if (!mdio_bus) {
  555. mdio_bus = mdio_alloc();
  556. mdio_bus->read = keystone2_mdio_read;
  557. mdio_bus->write = keystone2_mdio_write;
  558. mdio_bus->reset = keystone2_mdio_reset;
  559. mdio_bus->priv = (void *)EMAC_MDIO_BASE_ADDR;
  560. strcpy(mdio_bus->name, "ethernet-mdio");
  561. res = mdio_register(mdio_bus);
  562. if (res)
  563. return res;
  564. }
  565. #ifndef CONFIG_SOC_K2G
  566. keystone2_net_serdes_setup();
  567. #endif
  568. /* Create phy device and bind it with driver */
  569. #ifdef CONFIG_KSNET_MDIO_PHY_CONFIG_ENABLE
  570. phy_dev = phy_connect(mdio_bus, eth_priv->phy_addr,
  571. dev, eth_priv->phy_if);
  572. phy_config(phy_dev);
  573. #else
  574. phy_dev = phy_find_by_mask(mdio_bus, 1 << eth_priv->phy_addr,
  575. eth_priv->phy_if);
  576. phy_dev->dev = dev;
  577. #endif
  578. eth_priv->phy_dev = phy_dev;
  579. return 0;
  580. }
  581. #else
  582. static int ks2_eth_start(struct udevice *dev)
  583. {
  584. struct ks2_eth_priv *priv = dev_get_priv(dev);
  585. #ifdef CONFIG_SOC_K2G
  586. keystone_rgmii_config(priv->phydev);
  587. #else
  588. keystone_sgmii_config(priv->phydev, priv->slave_port - 1,
  589. priv->sgmii_link_type);
  590. #endif
  591. udelay(10000);
  592. /* On chip switch configuration */
  593. ethss_config(target_get_switch_ctl(), SWITCH_MAX_PKT_SIZE);
  594. qm_init();
  595. if (ksnav_init(priv->netcp_pktdma, &priv->net_rx_buffs)) {
  596. error("ksnav_init failed\n");
  597. goto err_knav_init;
  598. }
  599. /*
  600. * Streaming switch configuration. If not present this
  601. * statement is defined to void in target.h.
  602. * If present this is usually defined to a series of register writes
  603. */
  604. hw_config_streaming_switch();
  605. if (priv->has_mdio) {
  606. phy_startup(priv->phydev);
  607. if (priv->phydev->link == 0) {
  608. error("phy startup failed\n");
  609. goto err_phy_start;
  610. }
  611. }
  612. emac_gigabit_enable(dev);
  613. ethss_start();
  614. priv->emac_open = true;
  615. return 0;
  616. err_phy_start:
  617. ksnav_close(priv->netcp_pktdma);
  618. err_knav_init:
  619. qm_close();
  620. return -EFAULT;
  621. }
  622. static int ks2_eth_send(struct udevice *dev, void *packet, int length)
  623. {
  624. struct ks2_eth_priv *priv = dev_get_priv(dev);
  625. genphy_update_link(priv->phydev);
  626. if (priv->phydev->link == 0)
  627. return -1;
  628. if (length < EMAC_MIN_ETHERNET_PKT_SIZE)
  629. length = EMAC_MIN_ETHERNET_PKT_SIZE;
  630. return ksnav_send(priv->netcp_pktdma, (u32 *)packet,
  631. length, (priv->slave_port) << 16);
  632. }
  633. static int ks2_eth_recv(struct udevice *dev, int flags, uchar **packetp)
  634. {
  635. struct ks2_eth_priv *priv = dev_get_priv(dev);
  636. int pkt_size;
  637. u32 *pkt = NULL;
  638. priv->hd = ksnav_recv(priv->netcp_pktdma, &pkt, &pkt_size);
  639. if (priv->hd == NULL)
  640. return -EAGAIN;
  641. *packetp = (uchar *)pkt;
  642. return pkt_size;
  643. }
  644. static int ks2_eth_free_pkt(struct udevice *dev, uchar *packet,
  645. int length)
  646. {
  647. struct ks2_eth_priv *priv = dev_get_priv(dev);
  648. ksnav_release_rxhd(priv->netcp_pktdma, priv->hd);
  649. return 0;
  650. }
  651. static void ks2_eth_stop(struct udevice *dev)
  652. {
  653. struct ks2_eth_priv *priv = dev_get_priv(dev);
  654. if (!priv->emac_open)
  655. return;
  656. ethss_stop();
  657. ksnav_close(priv->netcp_pktdma);
  658. qm_close();
  659. phy_shutdown(priv->phydev);
  660. priv->emac_open = false;
  661. }
  662. int ks2_eth_read_rom_hwaddr(struct udevice *dev)
  663. {
  664. struct ks2_eth_priv *priv = dev_get_priv(dev);
  665. struct eth_pdata *pdata = dev_get_platdata(dev);
  666. u32 maca = 0;
  667. u32 macb = 0;
  668. /* Read the e-fuse mac address */
  669. if (priv->slave_port == 1) {
  670. maca = __raw_readl(MAC_ID_BASE_ADDR);
  671. macb = __raw_readl(MAC_ID_BASE_ADDR + 4);
  672. }
  673. pdata->enetaddr[0] = (macb >> 8) & 0xff;
  674. pdata->enetaddr[1] = (macb >> 0) & 0xff;
  675. pdata->enetaddr[2] = (maca >> 24) & 0xff;
  676. pdata->enetaddr[3] = (maca >> 16) & 0xff;
  677. pdata->enetaddr[4] = (maca >> 8) & 0xff;
  678. pdata->enetaddr[5] = (maca >> 0) & 0xff;
  679. return 0;
  680. }
  681. int ks2_eth_write_hwaddr(struct udevice *dev)
  682. {
  683. struct ks2_eth_priv *priv = dev_get_priv(dev);
  684. struct eth_pdata *pdata = dev_get_platdata(dev);
  685. writel(mac_hi(pdata->enetaddr),
  686. DEVICE_EMACSW_BASE(pdata->iobase, priv->slave_port - 1) +
  687. CPGMACSL_REG_SA_HI);
  688. writel(mac_lo(pdata->enetaddr),
  689. DEVICE_EMACSW_BASE(pdata->iobase, priv->slave_port - 1) +
  690. CPGMACSL_REG_SA_LO);
  691. return 0;
  692. }
  693. static int ks2_eth_probe(struct udevice *dev)
  694. {
  695. struct ks2_eth_priv *priv = dev_get_priv(dev);
  696. struct mii_dev *mdio_bus;
  697. int ret;
  698. priv->dev = dev;
  699. /* These clock enables has to be moved to common location */
  700. if (cpu_is_k2g())
  701. writel(KS2_ETHERNET_RGMII, KS2_ETHERNET_CFG);
  702. /* By default, select PA PLL clock as PA clock source */
  703. #ifndef CONFIG_SOC_K2G
  704. if (psc_enable_module(KS2_LPSC_PA))
  705. return -EACCES;
  706. #endif
  707. if (psc_enable_module(KS2_LPSC_CPGMAC))
  708. return -EACCES;
  709. if (psc_enable_module(KS2_LPSC_CRYPTO))
  710. return -EACCES;
  711. if (cpu_is_k2e() || cpu_is_k2l())
  712. pll_pa_clk_sel();
  713. priv->net_rx_buffs.buff_ptr = rx_buffs,
  714. priv->net_rx_buffs.num_buffs = RX_BUFF_NUMS,
  715. priv->net_rx_buffs.buff_len = RX_BUFF_LEN,
  716. /* Register MDIO bus */
  717. mdio_bus = mdio_alloc();
  718. if (!mdio_bus) {
  719. error("MDIO alloc failed\n");
  720. return -ENOMEM;
  721. }
  722. priv->mdio_bus = mdio_bus;
  723. mdio_bus->read = keystone2_mdio_read;
  724. mdio_bus->write = keystone2_mdio_write;
  725. mdio_bus->reset = keystone2_mdio_reset;
  726. mdio_bus->priv = priv->mdio_base;
  727. sprintf(mdio_bus->name, "ethernet-mdio");
  728. ret = mdio_register(mdio_bus);
  729. if (ret) {
  730. error("MDIO bus register failed\n");
  731. return ret;
  732. }
  733. #ifndef CONFIG_SOC_K2G
  734. keystone2_net_serdes_setup();
  735. #endif
  736. priv->netcp_pktdma = &netcp_pktdma;
  737. priv->phydev = phy_connect(mdio_bus, priv->phy_addr, dev, priv->phy_if);
  738. phy_config(priv->phydev);
  739. return 0;
  740. }
  741. int ks2_eth_remove(struct udevice *dev)
  742. {
  743. struct ks2_eth_priv *priv = dev_get_priv(dev);
  744. free(priv->phydev);
  745. mdio_unregister(priv->mdio_bus);
  746. mdio_free(priv->mdio_bus);
  747. return 0;
  748. }
  749. static const struct eth_ops ks2_eth_ops = {
  750. .start = ks2_eth_start,
  751. .send = ks2_eth_send,
  752. .recv = ks2_eth_recv,
  753. .free_pkt = ks2_eth_free_pkt,
  754. .stop = ks2_eth_stop,
  755. .read_rom_hwaddr = ks2_eth_read_rom_hwaddr,
  756. .write_hwaddr = ks2_eth_write_hwaddr,
  757. };
  758. static int ks2_eth_ofdata_to_platdata(struct udevice *dev)
  759. {
  760. struct ks2_eth_priv *priv = dev_get_priv(dev);
  761. struct eth_pdata *pdata = dev_get_platdata(dev);
  762. const void *fdt = gd->fdt_blob;
  763. int interfaces;
  764. int interface_0;
  765. int netcp_gbe_0;
  766. int phy;
  767. int mdio;
  768. u32 dma_channel[6];
  769. interfaces = fdt_subnode_offset(fdt, dev->of_offset,
  770. "netcp-interfaces");
  771. interface_0 = fdt_subnode_offset(fdt, interfaces, "interface-0");
  772. netcp_gbe_0 = fdtdec_lookup_phandle(fdt, interface_0, "netcp-gbe");
  773. priv->link_type = fdtdec_get_int(fdt, netcp_gbe_0,
  774. "link-interface", -1);
  775. priv->slave_port = fdtdec_get_int(fdt, netcp_gbe_0, "slave-port", -1);
  776. /* U-Boot slave port number starts with 1 instead of 0 */
  777. priv->slave_port += 1;
  778. phy = fdtdec_lookup_phandle(fdt, netcp_gbe_0, "phy-handle");
  779. priv->phy_addr = fdtdec_get_int(fdt, phy, "reg", -1);
  780. mdio = fdt_parent_offset(fdt, phy);
  781. if (mdio < 0) {
  782. error("mdio dt not found\n");
  783. return -ENODEV;
  784. }
  785. priv->mdio_base = (void *)fdtdec_get_addr(fdt, mdio, "reg");
  786. if (priv->link_type == LINK_TYPE_MAC_TO_PHY_MODE) {
  787. priv->phy_if = PHY_INTERFACE_MODE_SGMII;
  788. pdata->phy_interface = priv->phy_if;
  789. priv->sgmii_link_type = SGMII_LINK_MAC_PHY;
  790. priv->has_mdio = true;
  791. }
  792. pdata->iobase = dev_get_addr(dev);
  793. fdtdec_get_int_array(fdt, dev->of_offset, "ti,navigator-dmas",
  794. dma_channel, 6);
  795. priv->net_rx_buffs.rx_flow = dma_channel[1];
  796. return 0;
  797. }
  798. static const struct udevice_id ks2_eth_ids[] = {
  799. { .compatible = "ti,netcp-1.0" },
  800. { }
  801. };
  802. U_BOOT_DRIVER(eth_ks2) = {
  803. .name = "eth_ks2",
  804. .id = UCLASS_ETH,
  805. .of_match = ks2_eth_ids,
  806. .ofdata_to_platdata = ks2_eth_ofdata_to_platdata,
  807. .probe = ks2_eth_probe,
  808. .remove = ks2_eth_remove,
  809. .ops = &ks2_eth_ops,
  810. .priv_auto_alloc_size = sizeof(struct ks2_eth_priv),
  811. .platdata_auto_alloc_size = sizeof(struct eth_pdata),
  812. .flags = DM_FLAG_ALLOC_PRIV_DMA,
  813. };
  814. #endif