diff options
Diffstat (limited to 'arch/arm/mach-davinci')
23 files changed, 133 insertions, 47 deletions
diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c index 95b5e102ceb..6da25eebf91 100644 --- a/arch/arm/mach-davinci/board-da830-evm.c +++ b/arch/arm/mach-davinci/board-da830-evm.c @@ -652,8 +652,13 @@ static __init void da830_evm_init(void)  	if (ret)  		pr_warning("da830_evm_init: rtc setup failed: %d\n", ret); -	ret = da8xx_register_spi(0, da830evm_spi_info, -				 ARRAY_SIZE(da830evm_spi_info)); +	ret = spi_register_board_info(da830evm_spi_info, +				      ARRAY_SIZE(da830evm_spi_info)); +	if (ret) +		pr_warn("%s: spi info registration failed: %d\n", __func__, +			ret); + +	ret = da8xx_register_spi_bus(0, ARRAY_SIZE(da830evm_spi_info));  	if (ret)  		pr_warning("da830_evm_init: spi 0 registration failed: %d\n",  			   ret); @@ -679,7 +684,7 @@ MACHINE_START(DAVINCI_DA830_EVM, "DaVinci DA830/OMAP-L137/AM17x EVM")  	.atag_offset	= 0x100,  	.map_io		= da830_evm_map_io,  	.init_irq	= cp_intc_init, -	.timer		= &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine	= da830_evm_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c index 0299915575a..3a76a47df39 100644 --- a/arch/arm/mach-davinci/board-da850-evm.c +++ b/arch/arm/mach-davinci/board-da850-evm.c @@ -1565,8 +1565,13 @@ static __init void da850_evm_init(void)  	da850_vpif_init(); -	ret = da8xx_register_spi(1, da850evm_spi_info, -				 ARRAY_SIZE(da850evm_spi_info)); +	ret = spi_register_board_info(da850evm_spi_info, +				      ARRAY_SIZE(da850evm_spi_info)); +	if (ret) +		pr_warn("%s: spi info registration failed: %d\n", __func__, +			ret); + +	ret = da8xx_register_spi_bus(1, ARRAY_SIZE(da850evm_spi_info));  	if (ret)  		pr_warning("da850_evm_init: spi 1 registration failed: %d\n",  				ret); @@ -1599,7 +1604,7 @@ MACHINE_START(DAVINCI_DA850_EVM, "DaVinci DA850/OMAP-L138/AM18x EVM")  	.atag_offset	= 0x100,  	.map_io		= da850_evm_map_io,  	.init_irq	= cp_intc_init, -	.timer		= &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine	= da850_evm_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c index cdf8d0746e7..147b8e1a440 100644 --- a/arch/arm/mach-davinci/board-dm355-evm.c +++ b/arch/arm/mach-davinci/board-dm355-evm.c @@ -355,7 +355,7 @@ MACHINE_START(DAVINCI_DM355_EVM, "DaVinci DM355 EVM")  	.atag_offset  = 0x100,  	.map_io	      = dm355_evm_map_io,  	.init_irq     = davinci_irq_init, -	.timer	      = &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine = dm355_evm_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/board-dm355-leopard.c b/arch/arm/mach-davinci/board-dm355-leopard.c index d41954507fc..dff4ddc5ef8 100644 --- a/arch/arm/mach-davinci/board-dm355-leopard.c +++ b/arch/arm/mach-davinci/board-dm355-leopard.c @@ -274,7 +274,7 @@ MACHINE_START(DM355_LEOPARD, "DaVinci DM355 leopard")  	.atag_offset  = 0x100,  	.map_io	      = dm355_leopard_map_io,  	.init_irq     = davinci_irq_init, -	.timer	      = &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine = dm355_leopard_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c index 5d49c75388c..c2d4958a0cb 100644 --- a/arch/arm/mach-davinci/board-dm365-evm.c +++ b/arch/arm/mach-davinci/board-dm365-evm.c @@ -616,7 +616,7 @@ MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM")  	.atag_offset	= 0x100,  	.map_io		= dm365_evm_map_io,  	.init_irq	= davinci_irq_init, -	.timer		= &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine	= dm365_evm_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c index f5e018de7fa..e4a16f98e6a 100644 --- a/arch/arm/mach-davinci/board-dm644x-evm.c +++ b/arch/arm/mach-davinci/board-dm644x-evm.c @@ -825,7 +825,7 @@ MACHINE_START(DAVINCI_EVM, "DaVinci DM644x EVM")  	.atag_offset  = 0x100,  	.map_io	      = davinci_evm_map_io,  	.init_irq     = davinci_irq_init, -	.timer	      = &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine = davinci_evm_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c index 6e2f1631df5..de7adff324d 100644 --- a/arch/arm/mach-davinci/board-dm646x-evm.c +++ b/arch/arm/mach-davinci/board-dm646x-evm.c @@ -818,7 +818,7 @@ MACHINE_START(DAVINCI_DM6467_EVM, "DaVinci DM646x EVM")  	.atag_offset  = 0x100,  	.map_io       = davinci_map_io,  	.init_irq     = davinci_irq_init, -	.timer        = &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine = evm_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, @@ -829,7 +829,7 @@ MACHINE_START(DAVINCI_DM6467TEVM, "DaVinci DM6467T EVM")  	.atag_offset  = 0x100,  	.map_io       = davinci_map_io,  	.init_irq     = davinci_irq_init, -	.timer        = &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine = evm_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/board-mityomapl138.c b/arch/arm/mach-davinci/board-mityomapl138.c index 43e4a0d663f..9549d53aa63 100644 --- a/arch/arm/mach-davinci/board-mityomapl138.c +++ b/arch/arm/mach-davinci/board-mityomapl138.c @@ -529,8 +529,13 @@ static void __init mityomapl138_init(void)  	mityomapl138_setup_nand(); -	ret = da8xx_register_spi(1, mityomapl138_spi_flash_info, -			       ARRAY_SIZE(mityomapl138_spi_flash_info)); +	ret = spi_register_board_info(mityomapl138_spi_flash_info, +				      ARRAY_SIZE(mityomapl138_spi_flash_info)); +	if (ret) +		pr_warn("spi info registration failed: %d\n", ret); + +	ret = da8xx_register_spi_bus(1, +				     ARRAY_SIZE(mityomapl138_spi_flash_info));  	if (ret)  		pr_warning("spi 1 registration failed: %d\n", ret); @@ -570,7 +575,7 @@ MACHINE_START(MITYOMAPL138, "MityDSP-L138/MityARM-1808")  	.atag_offset	= 0x100,  	.map_io		= mityomapl138_map_io,  	.init_irq	= cp_intc_init, -	.timer		= &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine	= mityomapl138_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c index 3e3e3afebf8..1c98107527f 100644 --- a/arch/arm/mach-davinci/board-neuros-osd2.c +++ b/arch/arm/mach-davinci/board-neuros-osd2.c @@ -237,7 +237,7 @@ MACHINE_START(NEUROS_OSD2, "Neuros OSD2")  	.atag_offset	= 0x100,  	.map_io		 = davinci_ntosd2_map_io,  	.init_irq	= davinci_irq_init, -	.timer		= &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine = davinci_ntosd2_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/board-omapl138-hawk.c b/arch/arm/mach-davinci/board-omapl138-hawk.c index dc1208e9e66..deb3922612b 100644 --- a/arch/arm/mach-davinci/board-omapl138-hawk.c +++ b/arch/arm/mach-davinci/board-omapl138-hawk.c @@ -341,7 +341,7 @@ MACHINE_START(OMAPL138_HAWKBOARD, "AM18x/OMAP-L138 Hawkboard")  	.atag_offset	= 0x100,  	.map_io		= omapl138_hawk_map_io,  	.init_irq	= cp_intc_init, -	.timer		= &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine	= omapl138_hawk_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/board-sffsdr.c b/arch/arm/mach-davinci/board-sffsdr.c index 6957787fa7f..739be7e738f 100644 --- a/arch/arm/mach-davinci/board-sffsdr.c +++ b/arch/arm/mach-davinci/board-sffsdr.c @@ -155,7 +155,7 @@ MACHINE_START(SFFSDR, "Lyrtech SFFSDR")  	.atag_offset  = 0x100,  	.map_io	      = davinci_sffsdr_map_io,  	.init_irq     = davinci_irq_init, -	.timer	      = &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine = davinci_sffsdr_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/board-tnetv107x-evm.c b/arch/arm/mach-davinci/board-tnetv107x-evm.c index be3099733b1..4f416023d4e 100644 --- a/arch/arm/mach-davinci/board-tnetv107x-evm.c +++ b/arch/arm/mach-davinci/board-tnetv107x-evm.c @@ -280,7 +280,7 @@ MACHINE_START(TNETV107X, "TNETV107X EVM")  	.atag_offset	= 0x100,  	.map_io		= tnetv107x_init,  	.init_irq	= cp_intc_init, -	.timer		= &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine	= tnetv107x_evm_board_init,  	.init_late	= davinci_init_late,  	.dma_zone_size	= SZ_128M, diff --git a/arch/arm/mach-davinci/clock.c b/arch/arm/mach-davinci/clock.c index 34668ead53c..d458558ee84 100644 --- a/arch/arm/mach-davinci/clock.c +++ b/arch/arm/mach-davinci/clock.c @@ -52,6 +52,40 @@ static void __clk_disable(struct clk *clk)  		__clk_disable(clk->parent);  } +int davinci_clk_reset(struct clk *clk, bool reset) +{ +	unsigned long flags; + +	if (clk == NULL || IS_ERR(clk)) +		return -EINVAL; + +	spin_lock_irqsave(&clockfw_lock, flags); +	if (clk->flags & CLK_PSC) +		davinci_psc_reset(clk->gpsc, clk->lpsc, reset); +	spin_unlock_irqrestore(&clockfw_lock, flags); + +	return 0; +} +EXPORT_SYMBOL(davinci_clk_reset); + +int davinci_clk_reset_assert(struct clk *clk) +{ +	if (clk == NULL || IS_ERR(clk) || !clk->reset) +		return -EINVAL; + +	return clk->reset(clk, true); +} +EXPORT_SYMBOL(davinci_clk_reset_assert); + +int davinci_clk_reset_deassert(struct clk *clk) +{ +	if (clk == NULL || IS_ERR(clk) || !clk->reset) +		return -EINVAL; + +	return clk->reset(clk, false); +} +EXPORT_SYMBOL(davinci_clk_reset_deassert); +  int clk_enable(struct clk *clk)  {  	unsigned long flags; @@ -535,7 +569,7 @@ int davinci_set_refclk_rate(unsigned long rate)  }  int __init davinci_clk_init(struct clk_lookup *clocks) -  { +{  	struct clk_lookup *c;  	struct clk *clk;  	size_t num_clocks = 0; @@ -576,6 +610,9 @@ int __init davinci_clk_init(struct clk_lookup *clocks)  		if (clk->lpsc)  			clk->flags |= CLK_PSC; +		if (clk->flags & PSC_LRST) +			clk->reset = davinci_clk_reset; +  		clk_register(clk);  		num_clocks++; diff --git a/arch/arm/mach-davinci/clock.h b/arch/arm/mach-davinci/clock.h index 46f0f1bf1a4..8694b395fc9 100644 --- a/arch/arm/mach-davinci/clock.h +++ b/arch/arm/mach-davinci/clock.h @@ -103,6 +103,7 @@ struct clk {  	unsigned long (*recalc) (struct clk *);  	int (*set_rate) (struct clk *clk, unsigned long rate);  	int (*round_rate) (struct clk *clk, unsigned long rate); +	int (*reset) (struct clk *clk, bool reset);  };  /* Clock flags: SoC-specific flags start at BIT(16) */ @@ -112,6 +113,7 @@ struct clk {  #define PRE_PLL			BIT(4) /* source is before PLL mult/div */  #define PSC_SWRSTDISABLE	BIT(5) /* Disable state is SwRstDisable */  #define PSC_FORCE		BIT(6) /* Force module state transtition */ +#define PSC_LRST		BIT(8) /* Use local reset on enable/disable */  #define CLK(dev, con, ck) 	\  	{			\ @@ -126,6 +128,7 @@ int davinci_set_pllrate(struct pll_data *pll, unsigned int prediv,  int davinci_set_sysclk_rate(struct clk *clk, unsigned long rate);  int davinci_set_refclk_rate(unsigned long rate);  int davinci_simple_set_rate(struct clk *clk, unsigned long rate); +int davinci_clk_reset(struct clk *clk, bool reset);  extern struct platform_device davinci_wdt_device;  extern void davinci_watchdog_reset(struct platform_device *); diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c index 6b9154e9f90..0c4a26ddebb 100644 --- a/arch/arm/mach-davinci/da850.c +++ b/arch/arm/mach-davinci/da850.c @@ -76,6 +76,13 @@ static struct clk pll0_aux_clk = {  	.flags		= CLK_PLL | PRE_PLL,  }; +static struct clk pll0_sysclk1 = { +	.name		= "pll0_sysclk1", +	.parent		= &pll0_clk, +	.flags		= CLK_PLL, +	.div_reg	= PLLDIV1, +}; +  static struct clk pll0_sysclk2 = {  	.name		= "pll0_sysclk2",  	.parent		= &pll0_clk, @@ -368,10 +375,19 @@ static struct clk sata_clk = {  	.flags		= PSC_FORCE,  }; +static struct clk dsp_clk = { +	.name		= "dsp", +	.parent		= &pll0_sysclk1, +	.domain		= DAVINCI_GPSC_DSPDOMAIN, +	.lpsc		= DA8XX_LPSC0_GEM, +	.flags		= PSC_LRST | PSC_FORCE, +}; +  static struct clk_lookup da850_clks[] = {  	CLK(NULL,		"ref",		&ref_clk),  	CLK(NULL,		"pll0",		&pll0_clk),  	CLK(NULL,		"pll0_aux",	&pll0_aux_clk), +	CLK(NULL,		"pll0_sysclk1",	&pll0_sysclk1),  	CLK(NULL,		"pll0_sysclk2",	&pll0_sysclk2),  	CLK(NULL,		"pll0_sysclk3",	&pll0_sysclk3),  	CLK(NULL,		"pll0_sysclk4",	&pll0_sysclk4), @@ -413,6 +429,7 @@ static struct clk_lookup da850_clks[] = {  	CLK("spi_davinci.1",	NULL,		&spi1_clk),  	CLK("vpif",		NULL,		&vpif_clk),  	CLK("ahci",		NULL,		&sata_clk), +	CLK("davinci-rproc.0",	NULL,		&dsp_clk),  	CLK(NULL,		NULL,		NULL),  }; diff --git a/arch/arm/mach-davinci/da8xx-dt.c b/arch/arm/mach-davinci/da8xx-dt.c index 37c27af18fa..9a7c76efc8f 100644 --- a/arch/arm/mach-davinci/da8xx-dt.c +++ b/arch/arm/mach-davinci/da8xx-dt.c @@ -56,7 +56,7 @@ static const char *da850_boards_compat[] __initdata = {  DT_MACHINE_START(DA850_DT, "Generic DA850/OMAP-L138/AM18x")  	.map_io		= da850_init,  	.init_irq	= da8xx_init_irq, -	.timer		= &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine	= da850_init_machine,  	.dt_compat	= da850_boards_compat,  	.init_late	= davinci_init_late, diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c index 2d5502d84a2..aa402bc160c 100644 --- a/arch/arm/mach-davinci/devices-da8xx.c +++ b/arch/arm/mach-davinci/devices-da8xx.c @@ -751,7 +751,7 @@ void __iomem * __init da8xx_get_mem_ctlr(void)  	da8xx_ddr2_ctlr_base = ioremap(DA8XX_DDR2_CTL_BASE, SZ_32K);  	if (!da8xx_ddr2_ctlr_base) -		pr_warning("%s: Unable to map DDR2 controller",	__func__); +		pr_warn("%s: Unable to map DDR2 controller", __func__);  	return da8xx_ddr2_ctlr_base;  } @@ -832,7 +832,7 @@ static struct resource da8xx_spi1_resources[] = {  	},  }; -struct davinci_spi_platform_data da8xx_spi_pdata[] = { +static struct davinci_spi_platform_data da8xx_spi_pdata[] = {  	[0] = {  		.version	= SPI_VERSION_2,  		.intr_line	= 1, @@ -866,20 +866,12 @@ static struct platform_device da8xx_spi_device[] = {  	},  }; -int __init da8xx_register_spi(int instance, const struct spi_board_info *info, -			      unsigned len) +int __init da8xx_register_spi_bus(int instance, unsigned num_chipselect)  { -	int ret; -  	if (instance < 0 || instance > 1)  		return -EINVAL; -	ret = spi_register_board_info(info, len); -	if (ret) -		pr_warning("%s: failed to register board info for spi %d :" -			   " %d\n", __func__, instance, ret); - -	da8xx_spi_pdata[instance].num_chipselect = len; +	da8xx_spi_pdata[instance].num_chipselect = num_chipselect;  	if (instance == 1 && cpu_is_davinci_da850()) {  		da8xx_spi1_resources[0].start = DA850_SPI1_BASE; diff --git a/arch/arm/mach-davinci/include/mach/clock.h b/arch/arm/mach-davinci/include/mach/clock.h index a3b04021987..3e8af6a0b64 100644 --- a/arch/arm/mach-davinci/include/mach/clock.h +++ b/arch/arm/mach-davinci/include/mach/clock.h @@ -18,4 +18,7 @@ struct clk;  extern int clk_register(struct clk *clk);  extern void clk_unregister(struct clk *clk); +int davinci_clk_reset_assert(struct clk *c); +int davinci_clk_reset_deassert(struct clk *c); +  #endif diff --git a/arch/arm/mach-davinci/include/mach/common.h b/arch/arm/mach-davinci/include/mach/common.h index 046c7238a3d..b124b77c90c 100644 --- a/arch/arm/mach-davinci/include/mach/common.h +++ b/arch/arm/mach-davinci/include/mach/common.h @@ -15,9 +15,7 @@  #include <linux/compiler.h>  #include <linux/types.h> -struct sys_timer; - -extern struct sys_timer davinci_timer; +extern void davinci_timer_init(void);  extern void davinci_irq_init(void);  extern void __iomem *davinci_intc_base; diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h index 700d311c685..1b14aea4031 100644 --- a/arch/arm/mach-davinci/include/mach/da8xx.h +++ b/arch/arm/mach-davinci/include/mach/da8xx.h @@ -82,8 +82,7 @@ void __init da850_init(void);  int da830_register_edma(struct edma_rsv_info *rsv);  int da850_register_edma(struct edma_rsv_info *rsv[2]);  int da8xx_register_i2c(int instance, struct davinci_i2c_platform_data *pdata); -int da8xx_register_spi(int instance, -		const struct spi_board_info *info, unsigned len); +int da8xx_register_spi_bus(int instance, unsigned num_chipselect);  int da8xx_register_watchdog(void);  int da8xx_register_usb20(unsigned mA, unsigned potpgt);  int da8xx_register_usb11(struct da8xx_ohci_root_hub *pdata); @@ -110,7 +109,6 @@ extern struct platform_device da8xx_serial_device;  extern struct emac_platform_data da8xx_emac_pdata;  extern struct da8xx_lcdc_platform_data sharp_lcd035q3dg01_pdata;  extern struct da8xx_lcdc_platform_data sharp_lk043t1dg01_pdata; -extern struct davinci_spi_platform_data da8xx_spi_pdata[];  extern struct platform_device da8xx_wdt_device; diff --git a/arch/arm/mach-davinci/include/mach/psc.h b/arch/arm/mach-davinci/include/mach/psc.h index 40a0027838e..0a22710493f 100644 --- a/arch/arm/mach-davinci/include/mach/psc.h +++ b/arch/arm/mach-davinci/include/mach/psc.h @@ -246,6 +246,7 @@  #define MDSTAT_STATE_MASK	0x3f  #define PDSTAT_STATE_MASK	0x1f +#define MDCTL_LRST		BIT(8)  #define MDCTL_FORCE		BIT(31)  #define PDCTL_NEXT		BIT(0)  #define PDCTL_EPCGOOD		BIT(8) @@ -253,6 +254,8 @@  #ifndef __ASSEMBLER__  extern int davinci_psc_is_clk_active(unsigned int ctlr, unsigned int id); +extern void davinci_psc_reset(unsigned int ctlr, unsigned int id, +		bool reset);  extern void davinci_psc_config(unsigned int domain, unsigned int ctlr,  		unsigned int id, bool enable, u32 flags); diff --git a/arch/arm/mach-davinci/psc.c b/arch/arm/mach-davinci/psc.c index d7e210f4b55..82fdc69d572 100644 --- a/arch/arm/mach-davinci/psc.c +++ b/arch/arm/mach-davinci/psc.c @@ -35,7 +35,7 @@ int __init davinci_psc_is_clk_active(unsigned int ctlr, unsigned int id)  	struct davinci_soc_info *soc_info = &davinci_soc_info;  	if (!soc_info->psc_bases || (ctlr >= soc_info->psc_bases_num)) { -		pr_warning("PSC: Bad psc data: 0x%x[%d]\n", +		pr_warn("PSC: Bad psc data: 0x%x[%d]\n",  				(int)soc_info->psc_bases, ctlr);  		return 0;  	} @@ -48,6 +48,31 @@ int __init davinci_psc_is_clk_active(unsigned int ctlr, unsigned int id)  	return mdstat & BIT(12);  } +/* Control "reset" line associated with PSC domain */ +void davinci_psc_reset(unsigned int ctlr, unsigned int id, bool reset) +{ +	u32 mdctl; +	void __iomem *psc_base; +	struct davinci_soc_info *soc_info = &davinci_soc_info; + +	if (!soc_info->psc_bases || (ctlr >= soc_info->psc_bases_num)) { +		pr_warn("PSC: Bad psc data: 0x%x[%d]\n", +				(int)soc_info->psc_bases, ctlr); +		return; +	} + +	psc_base = ioremap(soc_info->psc_bases[ctlr], SZ_4K); + +	mdctl = readl(psc_base + MDCTL + 4 * id); +	if (reset) +		mdctl &= ~MDCTL_LRST; +	else +		mdctl |= MDCTL_LRST; +	writel(mdctl, psc_base + MDCTL + 4 * id); + +	iounmap(psc_base); +} +  /* Enable or disable a PSC domain */  void davinci_psc_config(unsigned int domain, unsigned int ctlr,  		unsigned int id, bool enable, u32 flags) @@ -58,7 +83,7 @@ void davinci_psc_config(unsigned int domain, unsigned int ctlr,  	u32 next_state = PSC_STATE_ENABLE;  	if (!soc_info->psc_bases || (ctlr >= soc_info->psc_bases_num)) { -		pr_warning("PSC: Bad psc data: 0x%x[%d]\n", +		pr_warn("PSC: Bad psc data: 0x%x[%d]\n",  				(int)soc_info->psc_bases, ctlr);  		return;  	} diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c index 9847938785c..bad361ec166 100644 --- a/arch/arm/mach-davinci/time.c +++ b/arch/arm/mach-davinci/time.c @@ -337,7 +337,7 @@ static struct clock_event_device clockevent_davinci = {  }; -static void __init davinci_timer_init(void) +void __init davinci_timer_init(void)  {  	struct clk *timer_clk;  	struct davinci_soc_info *soc_info = &davinci_soc_info; @@ -410,11 +410,6 @@ static void __init davinci_timer_init(void)  		timer32_config(&timers[i]);  } -struct sys_timer davinci_timer = { -	.init   = davinci_timer_init, -}; - -  /* reset board using watchdog timer */  void davinci_watchdog_reset(struct platform_device *pdev)  {  |