⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bootmenu.c

📁 1. 8623L平台
💻 C
📖 第 1 页 / 共 5 页
字号:
	    strcat(buf, ".gz");                        if (ipv4_tftp(g_bootconfig.server, buf, addr, &len) == 0) {            uart_printf(recv_msg, len, len, addr);       	    if (gzipped) {                uart_printf(unzip_msg, origaddr);                len = kunzip((char *) addr, (char *) origaddr, loadaddr_heap_unzip);	    }            g_download_info[target].download = 1;            g_download_info[target].len = len;        }    }#endif#ifdef CONFIG_ENABLE_USERPREF#ifdef CONFIG_ENABLE_VSYNCPARAM#ifdef CONFIG_ENABLE_FLASH    else if ((strcmp(argv[1], "flash") == 0) && (target == DOWNLOAD_VSYNCPARAM)) {	if (doload_vsyncparam(g_download_info[target].addr, 1) != 0) 	    g_download_info[target].download = 1;	else	    uart_puts("Invalid vsync image\n");	goto download_out;    }#endif#endif#endif    else {        uart_puts("Unknown media\n");	goto download_out;    }    if (g_download_info[target].len > 0)         uart_printf("Checksum: 0x%x\n", checksum = binfile_crc_check((void *)g_download_info[target].addr, g_download_info[target].len));     else	goto download_out;    if ((target == DOWNLOAD_INSTFILE) && (g_download_info[target].len > 0)) {	if ((checksum != 0) || (doload_installablefile(g_download_info[target].addr, g_download_info[target].len, 0, 0) == 0)) 	    uart_puts("Invalid installable file.\n");	g_download_info[target].download = 0; /* Free it up for further download */	g_download_info[target].len = 0;    }  #ifdef CONFIG_ENABLE_IRQHANDLER    if ((target == DOWNLOAD_IRQHANDLER) && (g_download_info[target].len > 0)) {#ifdef CONFIG_ENABLE_VSYNCPARAM	    if (g_download_info[DOWNLOAD_VSYNCPARAM].download == 0) {		    uart_puts("No VSYNC parameters loaded: blank structure.\n");		    /* clear 32KB */		    memset((void *) g_download_info[DOWNLOAD_VSYNCPARAM].addr, 0, MAX_USERPREF_SIZE/2);		    g_download_info[DOWNLOAD_VSYNCPARAM].download = 1;	    }#endif	if ((checksum != 0) || (doload_irqhandler(g_download_info[target].addr, g_download_info[target].len, 0) == 0)) {	    uart_puts("Invalid IRQ handler.\n");	    g_download_info[target].download = 0;	    g_download_info[target].len = 0;	}    }#endif#ifdef CONFIG_ENABLE_UCODES    /* Assume ucode file only use top reserved area in DRAM0 */    if ((target == DOWNLOAD_UCODE) && (g_download_info[target].len > 0))  {	if ((checksum != 0) || (doload_ucode(g_download_info[target].addr, g_download_info[target].len, 0) == 0)) {	    uart_puts("Invalid ucode image\n");	    g_download_info[target].download = 0;	    g_download_info[target].len = 0;	}    } #endif#ifdef CONFIG_ENABLE_BITMAPS    if ((target == DOWNLOAD_BITMAP) && (g_download_info[target].len > 0))  {	if ((checksum != 0) || (doload_bitmap(g_download_info[target].addr, g_download_info[target].len, 0) == 0)) {	    uart_puts("Invalid bitmap\n");	    g_download_info[target].download = 0;	    g_download_info[target].len = 0;	}     } #endif#ifdef CONFIG_ENABLE_DVI    if ((target == DOWNLOAD_DVI) && (g_download_info[target].len > 0))  {	if ((checksum != 0) || (doload_dvi(g_download_info[target].addr, g_download_info[target].len, 0) == 0)) {	    uart_puts("Invalid dvi\n");	    g_download_info[target].download = 0;	    g_download_info[target].len = 0;	}     } #endifdownload_out:    return 0;}#ifdef CONFIG_ARCH_TANGO15#ifdef CONFIG_ENABLE_FULLFUNCTIONvoid mac_subwrite(int argc, char *argv[]){	unsigned char buffer[256];	unsigned int addr=I2C_EEPROM_WRITE_ADDR, saddr=0, len=8;	int i;	if(argc>2) 		saddr = atoi(argv[2]);	if(argc>3) 		len = atoi(argv[3]);	for(i=0;i<len;i++) {		if (argc > (i+4))			buffer[i] = htoi(argv[i+4]);		else			break;	}	for(i=0;i<len;i++) 		uart_printf("%02x ",buffer[i]);	uart_printf("\naddr=0x%x, subaddr=0x%x, len=0x%x\n",addr, saddr, len);	hwi2c_write(addr, saddr, &buffer[0], len, 20);    em86xx_msleep(100);    // always read the remaining 256-(saddr+len) bytes	if (hwi2c_read_no_subaddr(addr, &buffer[saddr+len], 256-(saddr+len), 200) != 0) 	    uart_printf("mac subwrite error: hwi2c_read_no_subaddr\n");}void mac_dump(int argc, char *argv[]){	unsigned char buffer[256];	unsigned int addr=I2C_EEPROM_READ_ADDR, len=256;	int i;	memset(buffer, 0xff, sizeof(buffer));	if (hwi2c_read_no_subaddr(addr, &buffer[0], len, 200) != 0) {		/* ERROR */		uart_printf("mac dump error\n");	} else {		/* We have the first 8 bytes in buffer */		uart_printf("0x00: ");		for(i=0;i<len;i++) {			uart_printf("%02x ",buffer[i]);			if((i&0xf) == 0xf)				uart_printf("\n0x%02x: ",i+1);		}		uart_printf("\n");	}}#endif //#ifdef CONFIG_ENABLE_FULLFUNCTION#ifdef CONFIG_ENABLE_NETWORK_TANGO15#define SIGN 0x5astatic unsigned int mac_offset=0;int mac_read(char *bufr){	unsigned char buf[256];	unsigned char sum=0;	unsigned int offset;	int i;#ifdef BOOTLOADER	offset = mac_offset;#else	offset = 0;#endif	hwi2c_read_no_subaddr(I2C_EEPROM_READ_ADDR, buf, 256, 20);	for(i=0;i<8;i++) 		sum += buf[offset+i];	if( (sum ==0) && (buf[offset+6] == SIGN) ) {		memcpy(bufr,&buf[offset],8);		return 0;	}	else 		return -1;}int bootmenu_mac(int argc, char *argv[]){	unsigned char bufw[8]={0x11,0x33,0x66,0x99,0xaa,0xbb,0xcc,0xdd};	unsigned char sum=0;	unsigned int addr=0xa5;	unsigned char buffer[256];	int i;    if (argc == 1) {#ifndef CONFIG_DISABLE_HELP_MSGS        uart_puts(s_help_mac_brief);        uart_puts(s_help_mac);#else        uart_puts(no_help_msg);#endif        return 0;    }    if (strcmp(argv[1], "read") == 0) {		if (mac_read(bufw) == -1) 			uart_printf("mac read error: sum=%02x\n",bufw[7]);		for(i=0;i<6;i++) 			uart_printf("%02x ",bufw[i]);		uart_printf("\n");    } else if (strcmp(argv[1], "write") == 0 ) {		for(i=0;i<6;i++) {			if (argc > (i+2))				bufw[i] = htoi(argv[i+2]);			uart_printf("%02x ",bufw[i]);			sum+=bufw[i];		}		bufw[6] = SIGN;		sum+=bufw[6];		bufw[7] = (unsigned char)(-sum);		sum += bufw[7];		uart_printf("%02x %02x sum=0x%02x\n",bufw[6],bufw[7],sum);		//for(i=0;i<8;i++) 			//hwi2c_write(addr, i, &bufw[i], 1, 200);		hwi2c_write(I2C_EEPROM_WRITE_ADDR, 0, &bufw[0], 8, 20);        em86xx_msleep(100);        // always read the remaining 248 bytes	    if (hwi2c_read_no_subaddr(addr, &buffer[8], 248, 200) != 0) 		    uart_printf("mac write error: hwi2c_read_no_subaddr\n");//		hwi2c_write(addr, 0, &bufw[0], 8, 200);		//mac_offset = 0x100 - 8; 	} #ifdef CONFIG_ENABLE_FULLFUNCTION	else if(strcmp(argv[1], "dump") == 0 ) {		mac_dump(argc, argv);	} else if(strcmp(argv[1], "subwrite") == 0 ) {		mac_subwrite(argc, argv);	}#endif 	return 0; }#endif //TANGO15#endif /* CONFIG_ENABLE_NETWORK_TANGO15 */#ifdef CONFIG_BOOTMENU_BISTstatic int do_bist(const struct bist_entry *entry){    register unsigned int i;    unsigned int mask = 0, pass = 0;    unsigned int save_regs[32];    unsigned int org_status, busy;    unsigned int addr = entry->addr;    unsigned int bist_mask = entry->mask;    int timeout;    /* Save original status before BIST starts */    org_status = __raw_readl(addr + G2L_RESET_CONTROL);    if (addr == REG_BASE_dram_controller_0) {	for (i = 0; i < DRAM_REGS; i++)            save_regs[i] = __raw_readl(REG_BASE_dram_controller_0 + DRAM_dunit_cfg + (i<<2));    } else if (addr == REG_BASE_host_interface) {        for (i = 0; i < PBI_REGS; i++)            save_regs[i] = __raw_readl(REG_BASE_host_interface + PB_timing0 + (i<<2));    } else if (addr == REG_BASE_display_block) {        save_regs[0] = __raw_readl(REG_BASE_system_block + SYS_avclk_mux);        save_regs[1] = __raw_readl(REG_BASE_system_block + SYS_clkgen1_pll);        save_regs[2] = __raw_readl(REG_BASE_system_block + SYS_clkgen1_div);                __raw_writel(3, REG_BASE_display_block + G2L_RESET_CONTROL);        __raw_writel(2, REG_BASE_display_block + G2L_RESET_CONTROL);        __raw_writel(0x800000, REG_BASE_display_block + VO_reset_datapath);        __raw_writel(0x800000, REG_BASE_display_block + VO_run);                __raw_writel(1, REG_BASE_display_block + 0x3d00);                __raw_writel(0x01010020, REG_BASE_system_block + SYS_clkgen1_pll); /* 306MHz */        __raw_writel(0x202, REG_BASE_system_block + SYS_clkgen1_div); /* PLL1_1 = PLL1_2 = 153MHz */        __raw_writel(0xbbba, REG_BASE_system_block + SYS_avclk_mux);        em86xx_msleep(30); // wait until PLL gets stable    }#if (DEFAULT_DRAM1_SIZE != 0)    else if (addr == REG_BASE_dram_controller_1) {        for (i = 0; i < DRAM_REGS; i++)            save_regs[i] = __raw_readl(REG_BASE_dram_controller_1 + DRAM_dunit_cfg + (i<<2));    }#endif    uart_printf("BIST(0x%lx, %s): ", addr, entry->name);    if ((addr == REG_BASE_cpu_block) || (addr == REG_BASE_system_block) || (addr == REG_BASE_dram_controller_0)) {	    uart_printf(" => Skipped (used by bootmenu)\n");	    return 0;    }     __raw_writel(1, addr + G2L_RESET_CONTROL);    mask = __raw_readl(addr + G2L_BIST_MASK) & ~bist_mask;    /* Start BIST */    __raw_writel(0x80000000, addr + G2L_BIST_BUSY);    /* Max. wait for 1 second */    for (timeout = 0; timeout < BIST_TIMEOUT; timeout++, em86xx_msleep(1)) {	    busy = __raw_readl(addr + G2L_BIST_BUSY);	    if (((busy & 0x7fffffff) & (~bist_mask)) == 0)		    break;    }    pass = __raw_readl(addr + G2L_BIST_PASS) & ~bist_mask;    __raw_writel(0, addr + G2L_BIST_BUSY);    em86xx_msleep(10);    if (timeout >= BIST_TIMEOUT) 	    uart_printf("BUSY=0x%lx, MASK=0x%lx, PASS=0x%lx", (busy & 0x7fffffff) & (~bist_mask), mask, pass);    else 	    uart_printf("MASK=0x%lx, PASS=0x%lx", mask, pass);    if (addr == REG_BASE_dram_controller_0) {	for (i = 0; i < DRAM_REGS; i++)            __raw_writel(save_regs[i], REG_BASE_dram_controller_0 + DRAM_dunit_cfg + (i<<2));    } else if (addr == REG_BASE_host_interface) {        for (i = 0; i < PBI_REGS; i++)            __raw_writel(save_regs[i], REG_BASE_host_interface + PB_timing0 + (i<<2));    } else if (addr == REG_BASE_display_block) {        __raw_writel(save_regs[2], REG_BASE_system_block + SYS_clkgen1_div);        __raw_writel(save_regs[1], REG_BASE_system_block + SYS_clkgen1_pll);        __raw_writel(save_regs[0], REG_BASE_system_block + SYS_avclk_mux);        em86xx_msleep(30); // wait until PLL gets stable    }#if (DEFAULT_DRAM1_SIZE != 0)    else if (addr == REG_BASE_dram_controller_1) {	for (i = 0; i < DRAM_REGS; i++)            __raw_writel(save_regs[i], REG_BASE_dram_controller_1 + DRAM_dunit_cfg + (i<<2));    }#endif    __raw_writel(org_status, addr + G2L_RESET_CONTROL);    em86xx_msleep(10);    uart_printf(" => %s\n", (timeout >= BIST_TIMEOUT) ? "Timeout\07" : ((mask == pass) ? "Passed" : "Failed\07"));    return(((timeout < BIST_TIMEOUT) && (mask == pass)) ? 0 : 1); /* 0=OK, 1=Failed */}int bootmenu_bist(int argc, char *argv[]){    int i;    if (argc != 1)        return 0;    for (i = 0; bist_table[i].addr != 0; i++)         do_bist(&bist_table[i]);    return 0;}#endifint bootmenu_dump(int argc, char *argv[]){    static unsigned int addr = 0;    int i;    unsigned int num = 0x100, unit = 1;    for (i = 1; (i < argc) && (argv[i][0] == '-'); ++i) {        switch (argv[i][1]) {        case 'l' : unit = 4; break;        case 'w' : unit = 2; break;        case 'b' : unit = 1; break;        }    }                if (argc > i)        addr = atoi(argv[i++]);    if (argc > i)        num = atoi(argv[i++]);    dump_memory(NULL, addr, num, unit);    addr += num;        return 0;}#ifdef CONFIG_ENABLE_FLASHint bootmenu_flash(int argc, char *argv[]){    int flash_inited = 0;    if (argc > 1 && strcmp(argv[1], "probe") == 0) {        unsigned int addr = LOADER_FLASHBASE;        if (argc > 2)            addr = atoi(argv[2]);        flash_probe(addr, 1, 1);	goto flash_out;    } else if (!flash_found()) {        flash_inited = 1;        flash_probe(LOADER_FLASHBASE, 0, 0);        if (!flash_found()) {            if (argc == 1 || strcmp(argv[1], "test") != 0) 		goto flash_out;        }    }        if (argc == 1) {        if (!flash_inited) {#ifndef CONFIG_DISABLE_HELP_MSGS            uart_puts(s_help_flash_brief);            uart_puts(s_help_flash);#else            uart_puts(no_help_msg);#endif        }	goto flash_out;    }    if (strcmp(argv[1], "list") == 0) {        flash_list(

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -