Skip to content

Instantly share code, notes, and snippets.

@Embedded-linux
Created October 30, 2013 13:52
Show Gist options
  • Select an option

  • Save Embedded-linux/7233055 to your computer and use it in GitHub Desktop.

Select an option

Save Embedded-linux/7233055 to your computer and use it in GitHub Desktop.
Adding ethernet support
For adding ethernet support platform supported PHY values are added
File Name : "arch/arm/mach-omap2/include/mach/board-am335xevm.h"
+
+/* Define Ethernet Phy Types */
+#define MII_MODE_ENABLE 0x0
+#define RMII_MODE_ENABLE 0x5
+#define RGMII_MODE_ENABLE 0xA
+#define MAC_MII_SEL 0x650
+
+void am33xx_evmid_fillup(unsigned int evmid);
+void am33xx_cpsw_init_generic(unsigned int phy_type, unsigned int gigen);
For adding ethernet support
File Name: arch/arm/mach-omap2/board-am335xevm.c
+ mii1_init();
+ am33xx_cpsw_init_generic(MII_MODE_ENABLE,gigabit_enable);
+static void mii1_init(void)
+{
+ setup_pin_mux(mii1_pin_mux);
+ return;
+}
+
+/* Module pin mux for mii1 */
+static struct pinmux_config mii1_pin_mux[] = {
+ {"mii1_rxerr.mii1_rxerr", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_txen.mii1_txen", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
+ {"mii1_rxdv.mii1_rxdv", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_txd3.mii1_txd3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
+ {"mii1_txd2.mii1_txd2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
+ {"mii1_txd1.mii1_txd1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
+ {"mii1_txd0.mii1_txd0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
+ {"mii1_txclk.mii1_txclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_rxclk.mii1_rxclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_rxd3.mii1_rxd3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_rxd2.mii1_rxd2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_rxd1.mii1_rxd1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_rxd0.mii1_rxd0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
+ {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP},
+ {NULL, 0},
+};
+
+unsigned int gigabit_enable = 1;
+
For adding ethernet support
File Name : arch/arm/mach-omap2/devices.c
+/*
+ Taken from am33xx_cpsw_init, provided as a means to genrerize
+ the cpsw init from being TI board eeprom specific
+*/
+void am33xx_cpsw_init_generic(unsigned int phy_type, unsigned int gigen)
+{
+ struct omap_hwmod *oh;
+ struct platform_device *pdev;
+ u32 mac_lo, mac_hi;
+
+ mac_lo = omap_ctrl_readl(TI81XX_CONTROL_MAC_ID0_LO);
+ mac_hi = omap_ctrl_readl(TI81XX_CONTROL_MAC_ID0_HI);
+ am33xx_cpsw_slaves[0].mac_addr[0] = mac_hi & 0xFF;
+ am33xx_cpsw_slaves[0].mac_addr[1] = (mac_hi & 0xFF00) >> 8;
+ am33xx_cpsw_slaves[0].mac_addr[2] = (mac_hi & 0xFF0000) >> 16;
+ am33xx_cpsw_slaves[0].mac_addr[3] = (mac_hi & 0xFF000000) >> 24;
+ am33xx_cpsw_slaves[0].mac_addr[4] = mac_lo & 0xFF;
+ am33xx_cpsw_slaves[0].mac_addr[5] = (mac_lo & 0xFF00) >> 8;
+
+ mac_lo = omap_ctrl_readl(TI81XX_CONTROL_MAC_ID1_LO);
+ mac_hi = omap_ctrl_readl(TI81XX_CONTROL_MAC_ID1_HI);
+ am33xx_cpsw_slaves[1].mac_addr[0] = mac_hi & 0xFF;
+ am33xx_cpsw_slaves[1].mac_addr[1] = (mac_hi & 0xFF00) >> 8;
+ am33xx_cpsw_slaves[1].mac_addr[2] = (mac_hi & 0xFF0000) >> 16;
+ am33xx_cpsw_slaves[1].mac_addr[3] = (mac_hi & 0xFF000000) >> 24;
+ am33xx_cpsw_slaves[1].mac_addr[4] = mac_lo & 0xFF;
+ am33xx_cpsw_slaves[1].mac_addr[5] = (mac_lo & 0xFF00) >> 8;
+
+ __raw_writel(phy_type,
+ AM33XX_CTRL_REGADDR(MAC_MII_SEL));
+
+ memcpy(am33xx_cpsw_pdata.mac_addr,
+ am33xx_cpsw_slaves[0].mac_addr, ETH_ALEN);
+
+ oh = omap_hwmod_lookup("mdio");
+ if (!oh) {
+ pr_err("could not find cpgmac0 hwmod data\n");
+ return -ENODEV;
+ }
+ pdev = omap_device_build("davinci_mdio", 0, oh, &am33xx_cpsw_mdiopdata,
+ sizeof(am33xx_cpsw_mdiopdata), NULL, 0, 0);
+ if (IS_ERR(pdev))
+ pr_err("could not build omap_device for cpsw\n");
+
+ oh = omap_hwmod_lookup("cpgmac0");
+ if (!oh) {
+ pr_err("could not find cpgmac0 hwmod data\n");
+ return -ENODEV;
+ }
+
+ pdev = omap_device_build("cpsw", -1, oh, &am33xx_cpsw_pdata,
+ sizeof(am33xx_cpsw_pdata), NULL, 0, 0);
+ if (IS_ERR(pdev))
+ pr_err("could not build omap_device for cpsw\n");
+
+ return 0;
+}
+
+
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment