mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	ARM: OMAP: move generic EMAC init to separate file
AM35xx SoCs include DaVinci EMAC IP. Initialization code in board-am3517evm.c is pretty board independent and will work for any AM35xx based board so move this code to it's own file to be reused by other boards. Signed-off-by: Ilya Yanok <yanok@emcraft.com> Signed-off-by: Igor Grinberg <grinberg@compulab.co.il> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
		
							parent
							
								
									d4860ebef4
								
							
						
					
					
						commit
						a8195ba87c
					
				
					 4 changed files with 137 additions and 115 deletions
				
			
		|  | @ -270,4 +270,7 @@ smsc911x-$(CONFIG_SMSC911X)		:= gpmc-smsc911x.o | |||
| obj-y					+= $(smsc911x-m) $(smsc911x-y) | ||||
| obj-$(CONFIG_ARCH_OMAP4)		+= hwspinlock.o | ||||
| 
 | ||||
| emac-$(CONFIG_TI_DAVINCI_EMAC)		:= am35xx-emac.o | ||||
| obj-y					+= $(emac-m) $(emac-y) | ||||
| 
 | ||||
| obj-y					+= common-board-devices.o twl-common.o | ||||
|  |  | |||
							
								
								
									
										117
									
								
								arch/arm/mach-omap2/am35xx-emac.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								arch/arm/mach-omap2/am35xx-emac.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,117 @@ | |||
| /*
 | ||||
|  * Copyright (C) 2011 Ilya Yanok, Emcraft Systems | ||||
|  * | ||||
|  * Based on mach-omap2/board-am3517evm.c | ||||
|  * Copyright (C) 2009 Texas Instruments Incorporated | ||||
|  * Author: Ranjith Lohithakshan <ranjithl@ti.com> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License version 2 | ||||
|  * published by the Free Software Foundation. | ||||
|  * | ||||
|  * This program is distributed "as is" WITHOUT ANY WARRANTY of any kind, | ||||
|  * whether express or implied; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/clk.h> | ||||
| #include <linux/davinci_emac.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <plat/irqs.h> | ||||
| #include <mach/am35xx.h> | ||||
| 
 | ||||
| #include "control.h" | ||||
| 
 | ||||
| static struct mdio_platform_data am35xx_emac_mdio_pdata; | ||||
| 
 | ||||
| static struct resource am35xx_emac_mdio_resources[] = { | ||||
| 	DEFINE_RES_MEM(AM35XX_IPSS_EMAC_BASE + AM35XX_EMAC_MDIO_OFFSET, SZ_4K), | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device am35xx_emac_mdio_device = { | ||||
| 	.name		= "davinci_mdio", | ||||
| 	.id		= 0, | ||||
| 	.num_resources	= ARRAY_SIZE(am35xx_emac_mdio_resources), | ||||
| 	.resource	= am35xx_emac_mdio_resources, | ||||
| 	.dev.platform_data = &am35xx_emac_mdio_pdata, | ||||
| }; | ||||
| 
 | ||||
| static void am35xx_enable_emac_int(void) | ||||
| { | ||||
| 	u32 regval; | ||||
| 
 | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| 	regval = (regval | AM35XX_CPGMAC_C0_RX_PULSE_CLR | | ||||
| 		  AM35XX_CPGMAC_C0_TX_PULSE_CLR | | ||||
| 		  AM35XX_CPGMAC_C0_MISC_PULSE_CLR | | ||||
| 		  AM35XX_CPGMAC_C0_RX_THRESH_CLR); | ||||
| 	omap_ctrl_writel(regval, AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| } | ||||
| 
 | ||||
| static void am35xx_disable_emac_int(void) | ||||
| { | ||||
| 	u32 regval; | ||||
| 
 | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| 	regval = (regval | AM35XX_CPGMAC_C0_RX_PULSE_CLR | | ||||
| 		  AM35XX_CPGMAC_C0_TX_PULSE_CLR); | ||||
| 	omap_ctrl_writel(regval, AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| } | ||||
| 
 | ||||
| static struct emac_platform_data am35xx_emac_pdata = { | ||||
| 	.ctrl_reg_offset	= AM35XX_EMAC_CNTRL_OFFSET, | ||||
| 	.ctrl_mod_reg_offset	= AM35XX_EMAC_CNTRL_MOD_OFFSET, | ||||
| 	.ctrl_ram_offset	= AM35XX_EMAC_CNTRL_RAM_OFFSET, | ||||
| 	.ctrl_ram_size		= AM35XX_EMAC_CNTRL_RAM_SIZE, | ||||
| 	.hw_ram_addr		= AM35XX_EMAC_HW_RAM_ADDR, | ||||
| 	.version		= EMAC_VERSION_2, | ||||
| 	.interrupt_enable	= am35xx_enable_emac_int, | ||||
| 	.interrupt_disable	= am35xx_disable_emac_int, | ||||
| }; | ||||
| 
 | ||||
| static struct resource am35xx_emac_resources[] = { | ||||
| 	DEFINE_RES_MEM(AM35XX_IPSS_EMAC_BASE, 0x30000), | ||||
| 	DEFINE_RES_IRQ(INT_35XX_EMAC_C0_RXTHRESH_IRQ), | ||||
| 	DEFINE_RES_IRQ(INT_35XX_EMAC_C0_RX_PULSE_IRQ), | ||||
| 	DEFINE_RES_IRQ(INT_35XX_EMAC_C0_TX_PULSE_IRQ), | ||||
| 	DEFINE_RES_IRQ(INT_35XX_EMAC_C0_MISC_PULSE_IRQ), | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device am35xx_emac_device = { | ||||
| 	.name		= "davinci_emac", | ||||
| 	.id		= -1, | ||||
| 	.num_resources	= ARRAY_SIZE(am35xx_emac_resources), | ||||
| 	.resource	= am35xx_emac_resources, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &am35xx_emac_pdata, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en) | ||||
| { | ||||
| 	unsigned int regval; | ||||
| 	int err; | ||||
| 
 | ||||
| 	am35xx_emac_pdata.rmii_en = rmii_en; | ||||
| 	am35xx_emac_mdio_pdata.bus_freq = mdio_bus_freq; | ||||
| 	err = platform_device_register(&am35xx_emac_device); | ||||
| 	if (err) { | ||||
| 		pr_err("AM35x: failed registering EMAC device: %d\n", err); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	err = platform_device_register(&am35xx_emac_mdio_device); | ||||
| 	if (err) { | ||||
| 		pr_err("AM35x: failed registering EMAC MDIO device: %d\n", err); | ||||
| 		platform_device_unregister(&am35xx_emac_device); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); | ||||
| 	regval = regval & (~(AM35XX_CPGMACSS_SW_RST)); | ||||
| 	omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET); | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); | ||||
| } | ||||
							
								
								
									
										15
									
								
								arch/arm/mach-omap2/am35xx-emac.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								arch/arm/mach-omap2/am35xx-emac.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| /*
 | ||||
|  * Copyright (C) 2011 Ilya Yanok, Emcraft Systems | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License version 2 as | ||||
|  * published by the Free Software Foundation. | ||||
|  */ | ||||
| 
 | ||||
| #define AM35XX_DEFAULT_MDIO_FREQUENCY	1000000 | ||||
| 
 | ||||
| #if defined(CONFIG_TI_DAVINCI_EMAC) || defined(CONFIG_TI_DAVINCI_EMAC_MODULE) | ||||
| void am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en); | ||||
| #else | ||||
| static inline void am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en) {} | ||||
| #endif | ||||
|  | @ -39,124 +39,11 @@ | |||
| #include <video/omap-panel-generic-dpi.h> | ||||
| #include <video/omap-panel-dvi.h> | ||||
| 
 | ||||
| #include "am35xx-emac.h" | ||||
| #include "mux.h" | ||||
| #include "control.h" | ||||
| #include "hsmmc.h" | ||||
| 
 | ||||
| #define AM35XX_EVM_MDIO_FREQUENCY	(1000000) | ||||
| 
 | ||||
| static struct mdio_platform_data am3517_evm_mdio_pdata = { | ||||
| 	.bus_freq	= AM35XX_EVM_MDIO_FREQUENCY, | ||||
| }; | ||||
| 
 | ||||
| static struct resource am3517_mdio_resources[] = { | ||||
| 	{ | ||||
| 		.start  = AM35XX_IPSS_EMAC_BASE + AM35XX_EMAC_MDIO_OFFSET, | ||||
| 		.end    = AM35XX_IPSS_EMAC_BASE + AM35XX_EMAC_MDIO_OFFSET + | ||||
| 			  SZ_4K - 1, | ||||
| 		.flags  = IORESOURCE_MEM, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device am3517_mdio_device = { | ||||
| 	.name		= "davinci_mdio", | ||||
| 	.id		= 0, | ||||
| 	.num_resources	= ARRAY_SIZE(am3517_mdio_resources), | ||||
| 	.resource	= am3517_mdio_resources, | ||||
| 	.dev.platform_data = &am3517_evm_mdio_pdata, | ||||
| }; | ||||
| 
 | ||||
| static struct emac_platform_data am3517_evm_emac_pdata = { | ||||
| 	.rmii_en	= 1, | ||||
| }; | ||||
| 
 | ||||
| static struct resource am3517_emac_resources[] = { | ||||
| 	{ | ||||
| 		.start  = AM35XX_IPSS_EMAC_BASE, | ||||
| 		.end    = AM35XX_IPSS_EMAC_BASE + 0x2FFFF, | ||||
| 		.flags  = IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.start  = INT_35XX_EMAC_C0_RXTHRESH_IRQ, | ||||
| 		.end    = INT_35XX_EMAC_C0_RXTHRESH_IRQ, | ||||
| 		.flags  = IORESOURCE_IRQ, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.start  = INT_35XX_EMAC_C0_RX_PULSE_IRQ, | ||||
| 		.end    = INT_35XX_EMAC_C0_RX_PULSE_IRQ, | ||||
| 		.flags  = IORESOURCE_IRQ, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.start  = INT_35XX_EMAC_C0_TX_PULSE_IRQ, | ||||
| 		.end    = INT_35XX_EMAC_C0_TX_PULSE_IRQ, | ||||
| 		.flags  = IORESOURCE_IRQ, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.start  = INT_35XX_EMAC_C0_MISC_PULSE_IRQ, | ||||
| 		.end    = INT_35XX_EMAC_C0_MISC_PULSE_IRQ, | ||||
| 		.flags  = IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device am3517_emac_device = { | ||||
| 	.name		= "davinci_emac", | ||||
| 	.id		= -1, | ||||
| 	.num_resources	= ARRAY_SIZE(am3517_emac_resources), | ||||
| 	.resource	= am3517_emac_resources, | ||||
| }; | ||||
| 
 | ||||
| static void am3517_enable_ethernet_int(void) | ||||
| { | ||||
| 	u32 regval; | ||||
| 
 | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| 	regval = (regval | AM35XX_CPGMAC_C0_RX_PULSE_CLR | | ||||
| 		AM35XX_CPGMAC_C0_TX_PULSE_CLR | | ||||
| 		AM35XX_CPGMAC_C0_MISC_PULSE_CLR | | ||||
| 		AM35XX_CPGMAC_C0_RX_THRESH_CLR); | ||||
| 	omap_ctrl_writel(regval, AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| } | ||||
| 
 | ||||
| static void am3517_disable_ethernet_int(void) | ||||
| { | ||||
| 	u32 regval; | ||||
| 
 | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| 	regval = (regval | AM35XX_CPGMAC_C0_RX_PULSE_CLR | | ||||
| 		AM35XX_CPGMAC_C0_TX_PULSE_CLR); | ||||
| 	omap_ctrl_writel(regval, AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); | ||||
| } | ||||
| 
 | ||||
| static void am3517_evm_ethernet_init(struct emac_platform_data *pdata) | ||||
| { | ||||
| 	unsigned int regval; | ||||
| 
 | ||||
| 	pdata->ctrl_reg_offset		= AM35XX_EMAC_CNTRL_OFFSET; | ||||
| 	pdata->ctrl_mod_reg_offset	= AM35XX_EMAC_CNTRL_MOD_OFFSET; | ||||
| 	pdata->ctrl_ram_offset		= AM35XX_EMAC_CNTRL_RAM_OFFSET; | ||||
| 	pdata->ctrl_ram_size		= AM35XX_EMAC_CNTRL_RAM_SIZE; | ||||
| 	pdata->version			= EMAC_VERSION_2; | ||||
| 	pdata->hw_ram_addr		= AM35XX_EMAC_HW_RAM_ADDR; | ||||
| 	pdata->interrupt_enable		= am3517_enable_ethernet_int; | ||||
| 	pdata->interrupt_disable	= am3517_disable_ethernet_int; | ||||
| 	am3517_emac_device.dev.platform_data	= pdata; | ||||
| 	platform_device_register(&am3517_emac_device); | ||||
| 	platform_device_register(&am3517_mdio_device); | ||||
| 	clk_add_alias(NULL, dev_name(&am3517_mdio_device.dev), | ||||
| 		      NULL, &am3517_emac_device.dev); | ||||
| 
 | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); | ||||
| 	regval = regval & (~(AM35XX_CPGMACSS_SW_RST)); | ||||
| 	omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET); | ||||
| 	regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); | ||||
| 
 | ||||
| 	return ; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #define LCD_PANEL_PWR		176 | ||||
| #define LCD_PANEL_BKLIGHT_PWR	182 | ||||
| #define LCD_PANEL_PWM		181 | ||||
|  | @ -498,7 +385,7 @@ static void __init am3517_evm_init(void) | |||
| 	i2c_register_board_info(1, am3517evm_i2c1_boardinfo, | ||||
| 				ARRAY_SIZE(am3517evm_i2c1_boardinfo)); | ||||
| 	/*Ethernet*/ | ||||
| 	am3517_evm_ethernet_init(&am3517_evm_emac_pdata); | ||||
| 	am35xx_emac_init(AM35XX_DEFAULT_MDIO_FREQUENCY, 1); | ||||
| 
 | ||||
| 	/* MUSB */ | ||||
| 	am3517_evm_musb_init(); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Ilya Yanok
						Ilya Yanok