Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c78a5bc2 authored by Cyril Chemparathy's avatar Cyril Chemparathy Committed by Kevin Hilman
Browse files

Davinci: watchdog reset separation across socs



The earlier watchdog reset mechanism had a couple of limitations.  First, it
embedded a reference to "davinci_wdt_device" inside common code.  This
forced all derived platforms (da8xx and tnetv107x) to define such a device.
This also would have caused problems in including multiple socs in a single
build due to symbol redefinition.

With this patch, davinci_watchdog_reset() now takes the platform device as an
argument.  The davinci_soc_info struct has been extended to include a reset
function and a watchdog platform_device.  arch_reset() then uses these
elements to reset the system in a SoC specific fashion.

Signed-off-by: default avatarCyril Chemparathy <cyril@ti.com>
Tested-by: default avatarSandeep Paulraj <s-paulraj@ti.com>
Signed-off-by: default avatarKevin Hilman <khilman@deeprootsystems.com>
parent 5b3a05ca
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ int davinci_set_pllrate(struct pll_data *pll, unsigned int prediv,
				unsigned int mult, unsigned int postdiv);

extern struct platform_device davinci_wdt_device;
extern void davinci_watchdog_reset(struct platform_device *);

#endif

+3 −0
Original line number Diff line number Diff line
@@ -77,6 +77,9 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info)
	local_flush_tlb_all();
	flush_cache_all();

	if (!davinci_soc_info.reset)
		davinci_soc_info.reset = davinci_watchdog_reset;

	/*
	 * We want to check CPU revision early for cpu_is_xxxx() macros.
	 * IO space mapping must be initialized before we can do that.
+1 −0
Original line number Diff line number Diff line
@@ -1206,6 +1206,7 @@ static struct davinci_soc_info davinci_soc_info_da830 = {
	.gpio_irq		= IRQ_DA8XX_GPIO0,
	.serial_dev		= &da8xx_serial_device,
	.emac_pdata		= &da8xx_emac_pdata,
	.reset_device		= &da8xx_wdt_device,
};

void __init da830_init(void)
+1 −0
Original line number Diff line number Diff line
@@ -1093,6 +1093,7 @@ static struct davinci_soc_info davinci_soc_info_da850 = {
	.emac_pdata		= &da8xx_emac_pdata,
	.sram_dma		= DA8XX_ARM_RAM_BASE,
	.sram_len		= SZ_8K,
	.reset_device		= &da8xx_wdt_device,
};

void __init da850_init(void)
+2 −2
Original line number Diff line number Diff line
@@ -326,7 +326,7 @@ static struct resource da8xx_watchdog_resources[] = {
	},
};

struct platform_device davinci_wdt_device = {
struct platform_device da8xx_wdt_device = {
	.name		= "watchdog",
	.id		= -1,
	.num_resources	= ARRAY_SIZE(da8xx_watchdog_resources),
@@ -335,7 +335,7 @@ struct platform_device davinci_wdt_device = {

int __init da8xx_register_watchdog(void)
{
	return platform_device_register(&davinci_wdt_device);
	return platform_device_register(&da8xx_wdt_device);
}

static struct resource da8xx_emac_resources[] = {
Loading