mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 10:26:10 +01:00 
			
		
		
		
	eNET: Implement eNET Watchdog
Signed-off-by: Graeme Russ <graeme.russ@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 Wolfgang Denk
						Wolfgang Denk
					
				
			
			
				
	
			
			
			
						parent
						
							f2a55055e9
						
					
				
				
					commit
					880c59e5ad
				
			| @@ -45,6 +45,9 @@ DECLARE_GLOBAL_DATA_PTR; | ||||
|  | ||||
| unsigned long monitor_flash_len = CONFIG_SYS_MONITOR_LEN; | ||||
|  | ||||
| static void enet_timer_isr(void); | ||||
| static void enet_toggle_run_led(void); | ||||
|  | ||||
| void init_sc520_enet (void) | ||||
| { | ||||
| 	/* Set CPU Speed to 100MHz */ | ||||
| @@ -160,6 +163,10 @@ int last_stage_init(void) | ||||
|  | ||||
| 	major = minor = 0; | ||||
|  | ||||
| 	outb(0x00, LED_LATCH_ADDRESS); | ||||
|  | ||||
| 	register_timer_isr (enet_timer_isr); | ||||
|  | ||||
| 	printf("Serck Controls eNET\n"); | ||||
|  | ||||
| 	return 0; | ||||
| @@ -218,3 +225,41 @@ void setup_pcat_compatibility() | ||||
| 	writeb(SC520_IRQ_DISABLED, &sc520_mmcr->wpvmap); | ||||
| 	writeb(SC520_IRQ_DISABLED, &sc520_mmcr->icemap); | ||||
| } | ||||
|  | ||||
| void enet_timer_isr(void) | ||||
| { | ||||
| 	static long enet_ticks = 0; | ||||
|  | ||||
| 	enet_ticks++; | ||||
|  | ||||
| 	/* Toggle Watchdog every 100ms */ | ||||
| 	if ((enet_ticks % 100) == 0) | ||||
| 		hw_watchdog_reset(); | ||||
|  | ||||
| 	/* Toggle Run LED every 500ms */ | ||||
| 	if ((enet_ticks % 500) == 0) | ||||
| 		enet_toggle_run_led(); | ||||
| } | ||||
|  | ||||
| void hw_watchdog_reset(void) | ||||
| { | ||||
| 	/* Watchdog Reset must be atomic */ | ||||
| 	long flag = disable_interrupts(); | ||||
|  | ||||
| 	if (sc520_mmcr->piodata15_0 & WATCHDOG_PIO_BIT) | ||||
| 		sc520_mmcr->pioclr15_0 = WATCHDOG_PIO_BIT; | ||||
| 	else | ||||
| 		sc520_mmcr->pioset15_0 = WATCHDOG_PIO_BIT; | ||||
|  | ||||
| 	if (flag) | ||||
| 		enable_interrupts(); | ||||
| } | ||||
|  | ||||
| void enet_toggle_run_led(void) | ||||
| { | ||||
| 	unsigned char leds_state= inb(LED_LATCH_ADDRESS); | ||||
| 	if (leds_state & LED_RUN_BITMASK) | ||||
| 		outb(leds_state &~ LED_RUN_BITMASK, LED_LATCH_ADDRESS); | ||||
| 	else | ||||
| 		outb(leds_state | LED_RUN_BITMASK, LED_LATCH_ADDRESS); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user