keystone_net.c 27 KB

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