本文共 2523 字,大约阅读时间需要 8 分钟。
六 { clkdiv = clk_power->CLKDIVN; camdiv = clk_power->CAMDIVN; /* work out clock scalings */ switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) { case S3C2440_CLKDIVN_HDIVN_1: hdiv = 1; break; case S3C2440_CLKDIVN_HDIVN_2: hdiv = 2; break; case S3C2440_CLKDIVN_HDIVN_4_8: hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4; break; case S3C2440_CLKDIVN_HDIVN_3_6: hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3; break; } return get_FCLK() / hdiv; } } /* return PCLK frequency */ ulong get_PCLK(void) { S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER(); unsigned long clkdiv; unsigned long camdiv; int hdiv = 1; /* support both of S3C2410 and S3C2440 */ if (gd->bd->bi_arch_number == MACH_TYPE_SMDK2410) return((clk_power->CLKDIVN & 0x1) ? get_HCLK()/2 : get_HCLK()); else { clkdiv = clk_power->CLKDIVN; camdiv = clk_power->CAMDIVN; /* work out clock scalings */ switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) { case S3C2440_CLKDIVN_HDIVN_1: hdiv = 1; break; case S3C2440_CLKDIVN_HDIVN_2: hdiv = 2; break; case S3C2440_CLKDIVN_HDIVN_4_8: hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4; break; case S3C2440_CLKDIVN_HDIVN_3_6: hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3; break; } return get_FCLK() / hdiv / ((clkdiv & S3C2440_CLKDIVN_PDIVN)? 2:1); } } (3) common/env_nand.c // puts ("*** Warning - bad CRC or NAND, using default environment\n\n"); //HJ_del 注释此句 (4) include/nand.h struct nand_write_options { 结构体中添加 int skipfirstblk; /* if true, skip the first good block*/ (5) include/s3c2410.h 添加: /* for s3c2440, www.top-e.org */ static inline S3C2440_NAND * const S3C2440_GetBase_NAND(void) { return (S3C2440_NAND * const)S3C2410_NAND_BASE; } 5.增加函数实现 (1) common/cmd_load.c 【 1 】增加函数声明 /* support xmodem*/ static ulong load_serial_xmodem (ulong offset); 并后面添加其函数实现: /* support xmodem */ static ulong load_serial_xmodem (ulong offset) { int size; char buf[32]; int err; int res; connection_info_t info; char xmodemBuf[1024]; ulong store_addr = ~0; ulong addr = 0; size = 0; info.mode = xyzModem_xmodem; res = xyzModem_stream_open (&info, &err); if (!res) { while ((res = xyzModem_stream_read (xmodemBuf, 1024, &err)) > 0) { store_addr = addr + offset; size += res; addr += res; #ifndef CFG_NO_FLASH if (addr2info (store_addr)) { int rc; rc = flash_write ((char *) xmodemBuf, store_addr, res); if (rc != 0) { flash_perror (rc); return (~0); } } else #endif { memcpy ((char *) (store_addr), xmodemBuf, res); } } |