367 lines
9.2 KiB
C
367 lines
9.2 KiB
C
#include "chip.h"
|
|
|
|
void vSysctlConfigure(uint32_t regoffset, uint32_t bitoffset, uint32_t mask, uint32_t val)
|
|
{
|
|
uint32_t tmp = readl(REGS_SYSCTL_BASE + regoffset);
|
|
|
|
tmp &= ~(mask << bitoffset);
|
|
tmp |= val << bitoffset;
|
|
writel(tmp, REGS_SYSCTL_BASE + regoffset);
|
|
}
|
|
|
|
void sys_soft_reset (int reset_dev)
|
|
{
|
|
unsigned int mask;
|
|
volatile unsigned int* reg;
|
|
switch (reset_dev)
|
|
{
|
|
case softreset_imc:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 31;
|
|
break;
|
|
case softreset_usbphy:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 30;
|
|
break;
|
|
case softreset_ddr:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 29;
|
|
break;
|
|
case softreset_icu:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 28;
|
|
break;
|
|
case softreset_aes:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 27;
|
|
break;
|
|
case softreset_rcrt:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 26;
|
|
break;
|
|
case softreset_adc:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 25;
|
|
break;
|
|
case softreset_rtc:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 24;
|
|
break;
|
|
case softreset_i2s:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 23;
|
|
break;
|
|
case softreset_wdt:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 22;
|
|
break;
|
|
case softreset_pwm:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 21;
|
|
break;
|
|
case softreset_timer3:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 20;
|
|
break;
|
|
case softreset_timer2:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 19;
|
|
break;
|
|
case softreset_timer1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 18;
|
|
break;
|
|
case softreset_timer0:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 17;
|
|
break;
|
|
case softreset_gpio:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 16;
|
|
break;
|
|
case softreset_uart3:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 15;
|
|
break;
|
|
case softreset_uart2:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 14;
|
|
break;
|
|
case softreset_uart1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 13;
|
|
break;
|
|
case softreset_uart0:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 12;
|
|
break;
|
|
case softreset_i2c1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 11;
|
|
break;
|
|
case softreset_i2c:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 10;
|
|
break;
|
|
case softreset_ssp1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 9;
|
|
break;
|
|
case softreset_ssp:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 8;
|
|
break;
|
|
case softreset_pxp:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 7;
|
|
break;
|
|
case softreset_gpu:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 6;
|
|
break;
|
|
case softreset_itu:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 5;
|
|
break;
|
|
case softreset_card:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 4;
|
|
break;
|
|
case softreset_usb:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 3;
|
|
break;
|
|
case softreset_jpeg:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 2;
|
|
break;
|
|
case softreset_dma:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 1;
|
|
break;
|
|
case softreset_lcd:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 0;
|
|
break;
|
|
case softreset_can0:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 0;
|
|
break;
|
|
case softreset_can1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 1;
|
|
break;
|
|
case softreset_h2xdma:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 2;
|
|
break;
|
|
case softreset_h2xusb:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 3;
|
|
break;
|
|
case softreset_mipi:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 4;
|
|
break;
|
|
case softreset_usb_utmi:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 5;
|
|
break;
|
|
case softreset_vpu:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 6;
|
|
break;
|
|
case softreset_i2s1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 8;
|
|
break;
|
|
|
|
default:
|
|
printf ("illegal reset device (%d)\n", reset_dev);
|
|
return;
|
|
}
|
|
|
|
portENTER_CRITICAL();
|
|
*reg &= ~(1 << mask);
|
|
udelay (100);
|
|
*reg |= (1 << mask);
|
|
portEXIT_CRITICAL();
|
|
}
|
|
|
|
void sys_soft_reset_from_isr (int reset_dev)
|
|
{
|
|
unsigned int mask;
|
|
volatile unsigned int* reg;
|
|
switch (reset_dev)
|
|
{
|
|
case softreset_imc:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 31;
|
|
break;
|
|
case softreset_usbphy:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 30;
|
|
break;
|
|
case softreset_ddr:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 29;
|
|
break;
|
|
case softreset_icu:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 28;
|
|
break;
|
|
case softreset_aes:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 27;
|
|
break;
|
|
case softreset_rcrt:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 26;
|
|
break;
|
|
case softreset_adc:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 25;
|
|
break;
|
|
case softreset_rtc:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 24;
|
|
break;
|
|
case softreset_i2s:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 23;
|
|
break;
|
|
case softreset_wdt:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 22;
|
|
break;
|
|
case softreset_pwm:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 21;
|
|
break;
|
|
case softreset_timer3:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 20;
|
|
break;
|
|
case softreset_timer2:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 19;
|
|
break;
|
|
case softreset_timer1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 18;
|
|
break;
|
|
case softreset_timer0:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 17;
|
|
break;
|
|
case softreset_gpio:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 16;
|
|
break;
|
|
case softreset_uart3:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 15;
|
|
break;
|
|
case softreset_uart2:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 14;
|
|
break;
|
|
case softreset_uart1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 13;
|
|
break;
|
|
case softreset_uart0:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 12;
|
|
break;
|
|
case softreset_i2c1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 11;
|
|
break;
|
|
case softreset_i2c:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 10;
|
|
break;
|
|
case softreset_ssp1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 9;
|
|
break;
|
|
case softreset_ssp:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 8;
|
|
break;
|
|
case softreset_pxp:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 7;
|
|
break;
|
|
case softreset_gpu:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 6;
|
|
break;
|
|
case softreset_itu:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 5;
|
|
break;
|
|
case softreset_card:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 4;
|
|
break;
|
|
case softreset_usb:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 3;
|
|
break;
|
|
case softreset_jpeg:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 2;
|
|
break;
|
|
case softreset_dma:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 1;
|
|
break;
|
|
case softreset_lcd:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x5c));
|
|
mask = 0;
|
|
break;
|
|
case softreset_can0:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 0;
|
|
break;
|
|
case softreset_can1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 1;
|
|
break;
|
|
case softreset_h2xdma:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 2;
|
|
break;
|
|
case softreset_h2xusb:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 3;
|
|
break;
|
|
case softreset_mipi:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 4;
|
|
break;
|
|
case softreset_usb_utmi:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 5;
|
|
break;
|
|
case softreset_vpu:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 6;
|
|
break;
|
|
case softreset_i2s1:
|
|
reg = ((volatile unsigned int *)(REGS_SYSCTL_BASE+0x60));
|
|
mask = 8;
|
|
break;
|
|
default:
|
|
printf ("illegal reset device (%d)\n", reset_dev);
|
|
return;
|
|
}
|
|
|
|
*reg &= ~(1 << mask);
|
|
udelay (100);
|
|
*reg |= (1 << mask);
|
|
}
|
|
|