Created
October 30, 2013 13:52
-
-
Save Embedded-linux/7233055 to your computer and use it in GitHub Desktop.
Adding ethernet support
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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; | |
| + | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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