Changeset 12338
- Timestamp:
- 06/20/09 23:35:48 (4 years ago)
- Location:
- ar5315_microredboot/microredboot/boot/src
- Files:
-
- 5 edited
-
lib/nvram.c (modified) (2 diffs)
-
lib/uncompress-ar5312.h (modified) (3 diffs)
-
lib/uncompress-ar5315.h (modified) (4 diffs)
-
misc_lzma.c (modified) (1 diff)
-
ramconfig.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
ar5315_microredboot/microredboot/boot/src/lib/nvram.c
r12337 r12338 47 47 dst[i] = src[i]; 48 48 return; 49 }else{ 50 unsigned int *dst = (unsigned int*)nvram_buf; 51 for (i = 0; i < NVRAM_SPACE / 4; i++) 52 dst[i] = 0; 49 53 } 50 54 } … … 59 63 60 64 if (!nvram_buf[0]) 61 nvram_init();65 return; 62 66 63 67 /* Look for name=value and return value */ -
ar5315_microredboot/microredboot/boot/src/lib/uncompress-ar5312.h
r12328 r12338 98 98 } 99 99 100 static int ar531x_cpu_frequency(void)100 static unsigned int cpu_frequency(void) 101 101 { 102 102 static const int CLOCKCTL1_PREDIVIDE_TABLE[4] = { … … 107 107 }; 108 108 109 int preDivideSelect;110 int preDivisor;111 int multiplier;112 int doublerMask;109 unsigned int preDivideSelect; 110 unsigned int preDivisor; 111 unsigned int multiplier; 112 unsigned int doublerMask; 113 113 114 114 unsigned int clockCtl1 = SYS_REG_READ(AR5312_CLOCKCTL1); … … 159 159 { 160 160 u32 divisor; 161 u32 uart_clock_rate = ar531x_cpu_frequency() / 4;161 u32 uart_clock_rate = cpu_frequency() / 4; 162 162 u32 base_baud = uart_clock_rate / 16; 163 163 -
ar5315_microredboot/microredboot/boot/src/lib/uncompress-ar5315.h
r12328 r12338 22 22 UART16550_PARITY_NONE | \ 23 23 UART16550_STOP_1BIT 24 24 25 25 26 #define UART 0xB1100003 … … 56 57 #define UART16550_STOP_2BIT 0x4 57 58 58 #define SYS_REG_READ(p) (*((volatile unsigned long *) (p)))59 #define SYS_REG_WRITE(p,v) (*((volatile unsigned long *) (p)) = (v))60 59 #define UART16550_READ(p) (*((volatile u8*)(UART + (p)))) 61 60 #define UART16550_WRITE(p,v) ((*((volatile u8*)(UART + (p)))) = (v)) 61 62 63 #define AR5315_DSLBASE 0xB1000000 /* RESET CONTROL MMR */ 64 #define AR5315_PLLC_CTL (AR5315_DSLBASE + 0x0064) 65 #define AR5315_CPUCLK (AR5315_DSLBASE + 0x006c) 66 #define AR5315_RESET (AR5315_DSLBASE + 0x0004) 67 #define AR5315_RESET_UART0 0x00000100 /* warm reset UART0 */ 68 69 /* PLLc Control fields */ 70 #define PLLC_REF_DIV_M 0x00000003 71 #define PLLC_REF_DIV_S 0 72 #define PLLC_FDBACK_DIV_M 0x0000007C 73 #define PLLC_FDBACK_DIV_S 2 74 #define PLLC_ADD_FDBACK_DIV_M 0x00000080 75 #define PLLC_ADD_FDBACK_DIV_S 7 76 #define PLLC_CLKC_DIV_M 0x0001c000 77 #define PLLC_CLKC_DIV_S 14 78 #define PLLC_CLKM_DIV_M 0x00700000 79 #define PLLC_CLKM_DIV_S 20 80 81 /* CPU CLK Control fields */ 82 #define CPUCLK_CLK_SEL_M 0x00000003 83 #define CPUCLK_CLK_SEL_S 0 84 #define CPUCLK_CLK_DIV_M 0x0000000c 85 #define CPUCLK_CLK_DIV_S 2 86 62 87 63 88 static void putc(int c) … … 78 103 } 79 104 80 #if defined(COBRA_EMUL) 81 #define AR2316_AMBA_CLOCK_RATE 20000000 82 #define AR2316_CPU_CLOCK_RATE 40000000 83 #else 84 #if defined(DEFAULT_PLL) 85 #define AR2316_AMBA_CLOCK_RATE 40000000 86 #define AR2316_CPU_CLOCK_RATE 40000000 87 #else 88 #define AR2316_AMBA_CLOCK_RATE 92000000 89 #define AR2316_CPU_CLOCK_RATE 184000000 90 #endif /* ! DEFAULT_PLL */ 91 #endif /* ! COBRA_EMUL */ 105 106 107 static const int CLOCKCTL1_PREDIVIDE_TABLE[4] = { 108 1, 109 2, 110 4, 111 5 112 }; 113 114 static const int PLLC_DIVIDE_TABLE[5] = { 115 2, 116 3, 117 4, 118 6, 119 3 120 }; 121 #define sysRegRead(phys) \ 122 (*(volatile unsigned int *)(KSEG1|phys)) 123 124 #define sysRegWrite(phys, val) \ 125 ((*(volatile unsigned int *)(KSEG1|phys)) = (val)) 126 127 static unsigned int 128 ar5315_sys_clk(unsigned int clockCtl) 129 { 130 unsigned int pllcCtrl,cpuDiv; 131 unsigned int pllcOut,refdiv,fdiv,divby2; 132 unsigned int clkDiv; 133 134 pllcCtrl = sysRegRead(AR5315_PLLC_CTL); 135 refdiv = (pllcCtrl & PLLC_REF_DIV_M) >> PLLC_REF_DIV_S; 136 refdiv = CLOCKCTL1_PREDIVIDE_TABLE[refdiv]; 137 fdiv = (pllcCtrl & PLLC_FDBACK_DIV_M) >> PLLC_FDBACK_DIV_S; 138 divby2 = (pllcCtrl & PLLC_ADD_FDBACK_DIV_M) >> PLLC_ADD_FDBACK_DIV_S; 139 divby2 += 1; 140 pllcOut = (40000000/refdiv)*(2*divby2)*fdiv; 141 142 143 /* clkm input selected */ 144 switch(clockCtl & CPUCLK_CLK_SEL_M) { 145 case 0: 146 case 1: 147 clkDiv = PLLC_DIVIDE_TABLE[(pllcCtrl & PLLC_CLKM_DIV_M) >> PLLC_CLKM_DIV_S]; 148 break; 149 case 2: 150 clkDiv = PLLC_DIVIDE_TABLE[(pllcCtrl & PLLC_CLKC_DIV_M) >> PLLC_CLKC_DIV_S]; 151 break; 152 default: 153 pllcOut = 40000000; 154 clkDiv = 1; 155 break; 156 } 157 cpuDiv = (clockCtl & CPUCLK_CLK_DIV_M) >> CPUCLK_CLK_DIV_S; 158 cpuDiv = cpuDiv * 2 ?: 1; 159 return (pllcOut/(clkDiv * cpuDiv)); 160 } 161 162 static unsigned int cpu_frequency(void) 163 { 164 return ar5315_sys_clk(sysRegRead(AR5315_CPUCLK)); 165 } 166 92 167 93 168 static inline void arch_decomp_setup(void) 94 169 { 95 170 /* Initialise the serial port here */ 171 172 sysRegWrite(AR5315_RESET,sysRegRead(AR5315_RESET) & ~(AR5315_RESET_UART0)); 96 173 97 174 /* disable interrupts */ … … 99 176 UART16550_WRITE(OFS_INTR_ENABLE, 0); 100 177 178 /* set up buad rate */ 179 { 180 u32 divisor; 181 u32 uart_clock_rate = cpu_frequency() / 4; 182 u32 base_baud = uart_clock_rate / 16; 183 184 /* set DIAB bit */ 185 UART16550_WRITE(OFS_LINE_CONTROL, 0x80); 186 187 /* set divisor */ 188 divisor = base_baud / CONFIG_DEFAULT_BAUDRATE; 189 UART16550_WRITE(OFS_DIVISOR_LSB, divisor & 0xff); 190 UART16550_WRITE(OFS_DIVISOR_MSB, (divisor & 0xff00) >> 8); 191 192 /* clear DIAB bit */ 193 UART16550_WRITE(OFS_LINE_CONTROL, 0x0); 194 } 195 101 196 /* set data format */ 102 197 UART16550_WRITE(OFS_DATA_FORMAT, DEFAULT_DATA_FORMAT); -
ar5315_microredboot/microredboot/boot/src/misc_lzma.c
r12336 r12338 232 232 arch_decomp_setup(); 233 233 printf("MicroRedBoot v1.3, (c) 2009 DD-WRT.COM (%s)\n", __DATE__); 234 printf("CPU Clock: %d Mhz\n",cpu_frequency()/1000000); 234 235 nvram_init(); 235 236 char *ddboard = nvram_get("DD_BOARD"); -
ar5315_microredboot/microredboot/boot/src/ramconfig.h
r12324 r12338 1 1 #define RAM_SIZE 0x2000000 2 #define AR5312 13 2 #define RESETBUTTON 0x06
Note: See TracChangeset
for help on using the changeset viewer.
