/** * Main entry point. */ int main(int argc, char* argv[]) { fpga_dev * fpgaDev; int rtn, channel, timeout; unsigned int arg0, arg1; struct timeval tv; double tempTime; timeout = 10*1000; // 10 secs. channel = 1; arg0 = (unsigned int)rand(); arg1 = (unsigned int)rand(); if ((rtn = fpga_init(&fpgaDev)) < 0) { printf("error opening fpga: %d\n", rtn); return rtn; } if ((rtn = fpga_channel_open(fpgaDev, channel, timeout)) < 0) { printf("error opening fpga channel: %d\n", rtn); return rtn; } printf("Opened.\n"); while (1) { if ((rtn = fpga_send_args(fpgaDev, channel, arg0, arg1, 2, 1)) < 0) { printf("error sending args to fpga: %d\n", rtn); break; } printf("Called with args: 0x%x, 0x%x.\n", arg0, arg1); gettimeofday(&tv, NULL); tempTime = tv.tv_sec + tv.tv_usec / 1000000.0; if ((rtn = fpga_recv_data(fpgaDev, channel, (unsigned char *)gData, DATA_SIZE)) < 0) { printf("error receiving data from fpga: %d\n", rtn); break; } gettimeofday(&tv, NULL); tempTime = (tv.tv_sec + tv.tv_usec / 1000000.0) - tempTime; printf("Duration: %f MBs: %f\n", tempTime, (rtn/tempTime)/(1024*1024)); printf("Received data response, length: %d (0x%x)\n", rtn, rtn); printf("Values 1 & 2: 0x%x, 0x%x (from first half DMA transfer) should equal 0x%x, 0x%x\n", gData[1], gData[2], arg0, arg1); printf("Values 64KB + 1 & 64KB + 2: 0x%x, 0x%x (from second half DMA transfer) should equal 0x%x, 0x%x\n", gData[(64*1024/4) + 1], gData[(64*1024/4) + 2], arg0, arg1); break; } printf("Done.\n"); fpga_channel_close(fpgaDev, 0); fpga_free(fpgaDev); printf("Exiting.\n"); return 0; }
int board_init(void) { #ifdef CONFIG_FPGA u32 idcode; idcode = zynq_slcr_get_idcode(); switch (idcode) { case XILINX_ZYNQ_7010: fpga = fpga010; break; case XILINX_ZYNQ_7020: fpga = fpga020; break; case XILINX_ZYNQ_7030: fpga = fpga030; break; case XILINX_ZYNQ_7045: fpga = fpga045; break; } #endif icache_enable(); #ifdef CONFIG_FPGA fpga_init(); fpga_add(fpga_xilinx, &fpga); #endif return 0; }
int mvsmr_init_fpga(void) { fpga_init(); fpga_add(fpga_xilinx, &spartan3); return 1; }
int board_init(void) { /* temporary hack to clear pending irqs before Linux as it will hang Linux */ XIo_Out32(0xe0001014, 0x26d); /* temporary hack to take USB out of reset til the is fixed in Linux */ XIo_Out32(0xe000a204, 0x80); XIo_Out32(0xe000a208, 0x80); XIo_Out32(0xe000a040, 0x80); XIo_Out32(0xe000a040, 0x00); XIo_Out32(0xe000a040, 0x80); icache_enable(); #ifdef CONFIG_FPGA fpga_init(); fpga_add(fpga_xilinx, &fpga); #endif return 0; }
void pmu_power_on(void) { uint8_t i; int8_t ret; pmu_regulator_t *reg; /* if somehow this gets called twice, bail early on */ if (is_booting) return; else if (is_on) return; else state = BOOT; /* reset the fpga */ pmu_reset_fpga(true); fpga_init(); for (i = 0; i < ARRAY_SIZE(boot_order); i++) { reg = boot_order[i]; /* if regulator set a on/off function, call it */ if (reg->ops->set_regulator) { ret = pmu_set_regulator(reg, true); if (ret) { pmu_error = reg->error_code; goto fail_regulators; } } /* if regulator set a set_voltage function, call it */ if (reg->ops->set_voltage && reg->voltage) { ret = reg->ops->set_voltage(reg, reg->voltage); if (ret) { pmu_error = reg->error_code; goto fail_regulators; } } /* if we got here, this means all is well */ reg->powered = true; } /* enable the usb clock */ io_set_pin(USB_CLK_EN); _delay_ms(PMU_USB_CLK_WAIT); io_set_pin(FTDI_RESETn); _delay_ms(PMU_FTDI_WAIT); /* power for the fpga should be up now, let it run */ pmu_reset_fpga(false); state = ON; return; fail_regulators: /* TODO: Turn of stuff again in reverse order */ return; }
int mergerbox_init_fpga(void) { debug("Initialize FPGA interface\n"); fpga_init(); fpga_add(fpga_altera, &cyclone2); return 1; }
/* Add device descriptor to FPGA device table */ void board_fpga_add(void) { int i; fpga_init(); for (i = 0; i < ARRAY_SIZE(altera_fpga); i++) fpga_add(fpga_altera, &altera_fpga[i]); }
int mvblm7_init_fpga(void) { fpga_debug("Initialize FPGA interface\n"); fpga_init(); fpga_add(fpga_altera, &cyclone2); fpga_config_fn(0, 1, 0); udelay(60); return 1; }
int mvblm7_init_fpga(void) { fpga_debug("Initialize FPGA interface (reloc 0x%.8lx)\n", gd->reloc_off); fpga_init(gd->reloc_off); fpga_add(fpga_altera, &cyclone2); fpga_config_fn(0, 1, 0); udelay(60); return 1; }
/* Initialize the FPGA */ static void mt_ventoux_init_fpga(void) { fpga_pre_config_fn(0); /* Setting CS1 for FPGA access */ enable_gpmc_cs_config(gpmc_fpga, &gpmc_cfg->cs[1], FPGA_BASE_ADDR, GPMC_SIZE_128M); fpga_init(); fpga_add(fpga_xilinx, &fpga); }
int qong_fpga_init(void) { int i; fpga_init(); for (i = 0; i < CONFIG_FPGA_COUNT; i++) { fpga_add(fpga_lattice, &qong_fpga[i]); } return 0; }
int main(void) { // Global init sei(); uart_init(); fdevopen(uart1_dev_send, uart1_dev_recv); // Error configuration error_register_emerg(log_event); error_register_error(log_event); error_register_warning(log_event); error_register_notice(log_event); error_register_debug(log_event); log_level = ERROR_SEVERITY_DEBUG; // Clear screen printf("%c[2J",0x1B); printf("%c[0;0H",0x1B); // Test fpga_init(); wait_ms(100); _SFR_MEM8(0x1800) = 1; wait_ms(100); _SFR_MEM8(0x1800) = 0; NOTICE(0, "ADNS9500 init"); adns9500_init(); NOTICE(0, "ADNS9500 boot"); adns9500_boot(); NOTICE(0,"ADNS9500 > AUTO"); adns9500_set_mode(ADNS9500_BHVR_MODE_AUTOMATIC); adns9500_encoders_t e; while(1) { adns9500_encoders_get_value(&e); printf("%ld %ld %ld %ld %ld %ld | %2.2X %2.2X %2.2X | %2.2X\n", e.vectors[0], e.vectors[1], e.vectors[2], e.vectors[3], e.vectors[4], e.vectors[5], e.squals[0], e.squals[1], e.squals[2], e.fault); wait_ms(100); } NOTICE(0, "DONE"); while(1) nop(); return 0; }
int board_init(void) { printf("EL Level:\tEL%d\n", current_el()); #if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) fpga_init(); /* FIXME FPGA size/id will be handled via SMCs */ fpga_add(fpga_xilinx, &zynqmppl); #endif return 0; }
/* return FPGA_SUCCESS on success, else FPGA_FAIL */ int mvblx_init_fpga(void) { fpga_debug("Initializing FPGA interface\n"); fpga_init(); fpga_add(fpga_altera, &cyclone2); if (gpio_request(GPIO_DCLK, "dclk") || gpio_request(GPIO_nSTATUS, "nStatus") || #ifndef CONFIG_SYS_FPGA_DONT_USE_CONF_DONE gpio_request(GPIO_CONF_DONE, "conf_done") || #endif gpio_request(GPIO_nCONFIG, "nConfig") || gpio_request(GPIO_DATA0, "data0") || gpio_request(GPIO_DATA1, "data1") || gpio_request(GPIO_DATA2, "data2") || gpio_request(GPIO_DATA3, "data3") || gpio_request(GPIO_DATA4, "data4") || gpio_request(GPIO_DATA5, "data5") || gpio_request(GPIO_DATA6, "data6") || gpio_request(GPIO_DATA7, "data7")) { printf("%s: error requesting GPIOs.", __func__); return FPGA_FAIL; } /* set up outputs */ gpio_direction_output(GPIO_DCLK, 0); gpio_direction_output(GPIO_nCONFIG, 0); gpio_direction_output(GPIO_DATA0, 0); gpio_direction_output(GPIO_DATA1, 0); gpio_direction_output(GPIO_DATA2, 0); gpio_direction_output(GPIO_DATA3, 0); gpio_direction_output(GPIO_DATA4, 0); gpio_direction_output(GPIO_DATA5, 0); gpio_direction_output(GPIO_DATA6, 0); gpio_direction_output(GPIO_DATA7, 0); /* NB omap_free_gpio() resets to an input, so we can't * free ie. nCONFIG, or else the FPGA would reset * Q: presumably gpio_free() has the same effect? */ /* set up inputs */ gpio_direction_input(GPIO_nSTATUS); #ifndef CONFIG_SYS_FPGA_DONT_USE_CONF_DONE gpio_direction_input(GPIO_CONF_DONE); #endif fpga_config_fn(0, 1, 0); udelay(60); return FPGA_SUCCESS; }
int board_init(void) { #if defined(CONFIG_ENV_IS_IN_EEPROM) && !defined(CONFIG_SPL_BUILD) unsigned char eepromsel = CONFIG_SYS_I2C_MUX_EEPROM_SEL; #endif #if (defined(CONFIG_FPGA) && !defined(CONFIG_SPL_BUILD)) || \ (defined(CONFIG_SPL_FPGA_SUPPORT) && defined(CONFIG_SPL_BUILD)) u32 idcode; idcode = zynq_slcr_get_idcode(); switch (idcode) { case XILINX_ZYNQ_7010: fpga = fpga010; break; case XILINX_ZYNQ_7015: fpga = fpga015; break; case XILINX_ZYNQ_7020: fpga = fpga020; break; case XILINX_ZYNQ_7030: fpga = fpga030; break; case XILINX_ZYNQ_7035: fpga = fpga035; break; case XILINX_ZYNQ_7045: fpga = fpga045; break; case XILINX_ZYNQ_7100: fpga = fpga100; break; } #endif #if (defined(CONFIG_FPGA) && !defined(CONFIG_SPL_BUILD)) || \ (defined(CONFIG_SPL_FPGA_SUPPORT) && defined(CONFIG_SPL_BUILD)) fpga_init(); fpga_add(fpga_xilinx, &fpga); #endif #if defined(CONFIG_ENV_IS_IN_EEPROM) && !defined(CONFIG_SPL_BUILD) if (eeprom_write(CONFIG_SYS_I2C_MUX_ADDR, 0, &eepromsel, 1)) puts("I2C:EEPROM selection failed\n"); #endif /* Added by MYIR for MYS-XC7Z010 */ myir_board_init(); return 0; }
int board_init(void) { #if defined(CONFIG_ENV_IS_IN_EEPROM) && !defined(CONFIG_SPL_BUILD) unsigned char eepromsel = CONFIG_SYS_I2C_MUX_EEPROM_SEL; #endif #if (defined(CONFIG_FPGA) && !defined(CONFIG_SPL_BUILD)) || \ (defined(CONFIG_SPL_FPGA_SUPPORT) && defined(CONFIG_SPL_BUILD)) u32 idcode; idcode = zynq_slcr_get_idcode(); switch (idcode) { case XILINX_ZYNQ_7010: fpga = fpga010; break; case XILINX_ZYNQ_7015: fpga = fpga015; break; case XILINX_ZYNQ_7020: fpga = fpga020; break; case XILINX_ZYNQ_7030: fpga = fpga030; break; case XILINX_ZYNQ_7045: fpga = fpga045; break; case XILINX_ZYNQ_7100: fpga = fpga100; break; } #endif /* * temporary hack to clear pending irqs before Linux as it * will hang Linux */ writel(0x26d, 0xe0001014); #if (defined(CONFIG_FPGA) && !defined(CONFIG_SPL_BUILD)) || \ (defined(CONFIG_SPL_FPGA_SUPPORT) && defined(CONFIG_SPL_BUILD)) fpga_init(); fpga_add(fpga_xilinx, &fpga); #endif #if defined(CONFIG_ENV_IS_IN_EEPROM) && !defined(CONFIG_SPL_BUILD) if (eeprom_write(CONFIG_SYS_I2C_MUX_ADDR, 0, &eepromsel, 1)) puts("I2C:EEPROM selection failed\n"); #endif return 0; }
int board_init(void) { #if (defined(CONFIG_FPGA) && !defined(CONFIG_SPL_BUILD)) || \ (defined(CONFIG_SPL_FPGA_SUPPORT) && defined(CONFIG_SPL_BUILD)) u32 idcode; idcode = zynq_slcr_get_idcode(); switch (idcode) { case XILINX_ZYNQ_7007S: fpga = fpga007s; break; case XILINX_ZYNQ_7010: fpga = fpga010; break; case XILINX_ZYNQ_7012S: fpga = fpga012s; break; case XILINX_ZYNQ_7014S: fpga = fpga014s; break; case XILINX_ZYNQ_7015: fpga = fpga015; break; case XILINX_ZYNQ_7020: fpga = fpga020; break; case XILINX_ZYNQ_7030: fpga = fpga030; break; case XILINX_ZYNQ_7035: fpga = fpga035; break; case XILINX_ZYNQ_7045: fpga = fpga045; break; case XILINX_ZYNQ_7100: fpga = fpga100; break; } #endif #if (defined(CONFIG_FPGA) && !defined(CONFIG_SPL_BUILD)) || \ (defined(CONFIG_SPL_FPGA_SUPPORT) && defined(CONFIG_SPL_BUILD)) fpga_init(); fpga_add(fpga_xilinx, &fpga); #endif return 0; }
/* * Initialize the fpga. Return 1 on success, 0 on failure. */ void APF27_init_fpga(void) { int i; apf27_fpga_setup(); fpga_init(); for (i = 0; i < CONFIG_FPGA_COUNT; i++) { debug("%s:%d: Adding fpga %d\n", __func__, __LINE__, i); fpga_add(fpga_xilinx, &fpga[i]); } return; }
int board_init(void) { #ifdef CONFIG_FPGA u32 idcode; idcode = zynq_slcr_get_idcode(); switch (idcode) { case XILINX_ZYNQ_7010: fpga = fpga010; break; case XILINX_ZYNQ_7020: fpga = fpga020; break; case XILINX_ZYNQ_7030: fpga = fpga030; break; case XILINX_ZYNQ_7045: fpga = fpga045; break; case XILINX_ZYNQ_7100: fpga = fpga100; break; } #endif /* temporary hack to clear pending irqs before Linux as it * will hang Linux */ writel(0x26d, 0xe0001014); /* temporary hack to take USB out of reset til the is fixed * in Linux */ writel(0x80, 0xe000a204); writel(0x80, 0xe000a208); writel(0x80, 0xe000a040); writel(0x00, 0xe000a040); writel(0x80, 0xe000a040); // icache_enable(); #ifdef CONFIG_FPGA fpga_init(); fpga_add(fpga_xilinx, &fpga); #endif return 0; }
/* * initialise the interrupt system */ void __init init_IRQ(void) { int level; for (level = 1; level <= 14; level++) irq_set_chip_and_handler(level, &frv_cpu_pic, handle_level_irq); irq_set_handler(IRQ_CPU_TIMER0, handle_edge_irq); /* set the trigger levels for internal interrupt sources * - timers all falling-edge * - ERR0 is rising-edge * - all others are high-level */ __set_IITMR(0, 0x003f0000); /* DMA0-3, TIMER0-2 */ __set_IITMR(1, 0x20000000); /* ERR0-1, UART0-1, DMA4-7 */ /* route internal interrupts */ set_IRR(4, IRQ_DMA3_LEVEL, IRQ_DMA2_LEVEL, IRQ_DMA1_LEVEL, IRQ_DMA0_LEVEL); set_IRR(5, 0, IRQ_TIMER2_LEVEL, IRQ_TIMER1_LEVEL, IRQ_TIMER0_LEVEL); set_IRR(6, IRQ_GDBSTUB_LEVEL, IRQ_GDBSTUB_LEVEL, IRQ_UART1_LEVEL, IRQ_UART0_LEVEL); set_IRR(7, IRQ_DMA7_LEVEL, IRQ_DMA6_LEVEL, IRQ_DMA5_LEVEL, IRQ_DMA4_LEVEL); /* route external interrupts */ set_IRR(2, IRQ_XIRQ7_LEVEL, IRQ_XIRQ6_LEVEL, IRQ_XIRQ5_LEVEL, IRQ_XIRQ4_LEVEL); set_IRR(3, IRQ_XIRQ3_LEVEL, IRQ_XIRQ2_LEVEL, IRQ_XIRQ1_LEVEL, IRQ_XIRQ0_LEVEL); #if defined(CONFIG_MB93091_VDK) __set_TM1(0x55550000); /* XIRQ7-0 all active low */ #elif defined(CONFIG_MB93093_PDK) __set_TM1(0x15550000); /* XIRQ7 active high, 6-0 all active low */ #else #error dont know external IRQ trigger levels for this setup #endif fpga_init(); #ifdef CONFIG_FUJITSU_MB93493 mb93493_init(); #endif }
void main_init() { REVCTL = bmNOAUTOARM | bmSKIPCOMMIT; SYNCDELAY; SETCPUFREQ(CLK_48M); SYNCDELAY; printf("main_init\r\n"); ep_init(); gpif_stuff_init(); fpga_init(); /* timer2 */ CKCON &= ~(1<<5); T2CON = (1<<2); /* run timer 2 in auto reload mode */ }
/* * Initialize the fpga. Return 1 on success, 0 on failure. */ int pmc440_init_fpga(void) { char *s; debug("%s:%d: Initialize FPGA interface (relocation offset = 0x%.8lx)\n", __FUNCTION__, __LINE__, gd->reloc_off); fpga_init(gd->reloc_off); fpga_serialslave_init (); debug("%s:%d: Adding fpga 0\n", __FUNCTION__, __LINE__); fpga_add (fpga_xilinx, &fpga[0]); /* NGCC only */ if ((s = getenv("bd_type")) && !strcmp(s, "ngcc")) { ngcc_fpga_serialslave_init (); debug("%s:%d: Adding fpga 1\n", __FUNCTION__, __LINE__); fpga_add (fpga_xilinx, &fpga[1]); } return 0; }
int board_early_init_f (void) { unsigned long mfr; unsigned char *fpga_base = (unsigned char *) CONFIG_SYS_FPGA_BASE; unsigned char switch_status; unsigned long cs0_base; unsigned long cs0_size; unsigned long cs0_twt; unsigned long cs2_base; unsigned long cs2_size; unsigned long cs2_twt; /*-------------------------------------------------------------------------+ | Initialize EBC CONFIG +-------------------------------------------------------------------------*/ mtebc(EBC0_CFG, EBC_CFG_LE_UNLOCK | EBC_CFG_PTD_ENABLE | EBC_CFG_RTC_64PERCLK | EBC_CFG_ATC_PREVIOUS | EBC_CFG_DTC_PREVIOUS | EBC_CFG_CTC_PREVIOUS | EBC_CFG_EMC_NONDEFAULT | EBC_CFG_PME_DISABLE | EBC_CFG_PR_32); /*-------------------------------------------------------------------------+ | FPGA. Initialize bank 7 with default values. +-------------------------------------------------------------------------*/ mtebc(PB7AP, EBC_BXAP_BME_DISABLED|EBC_BXAP_TWT_ENCODE(7)| EBC_BXAP_BCE_DISABLE| EBC_BXAP_CSN_ENCODE(1)|EBC_BXAP_OEN_ENCODE(1)| EBC_BXAP_WBN_ENCODE(1)|EBC_BXAP_WBF_ENCODE(1)| EBC_BXAP_TH_ENCODE(1)|EBC_BXAP_RE_DISABLED| EBC_BXAP_BEM_WRITEONLY| EBC_BXAP_PEN_DISABLED); mtebc(PB7CR, EBC_BXCR_BAS_ENCODE(0x48300000)| EBC_BXCR_BS_1MB|EBC_BXCR_BU_RW|EBC_BXCR_BW_8BIT); /* read FPGA base register FPGA_REG0 */ switch_status = *fpga_base; if (switch_status & 0x40) { cs0_base = 0xFFE00000; cs0_size = EBC_BXCR_BS_2MB; cs0_twt = 8; cs2_base = 0xFF800000; cs2_size = EBC_BXCR_BS_4MB; cs2_twt = 10; } else { cs0_base = 0xFFC00000; cs0_size = EBC_BXCR_BS_4MB; cs0_twt = 10; cs2_base = 0xFF800000; cs2_size = EBC_BXCR_BS_2MB; cs2_twt = 8; } /*-------------------------------------------------------------------------+ | 1 MB FLASH / 1 MB SRAM. Initialize bank 0 with default values. +-------------------------------------------------------------------------*/ mtebc(PB0AP, EBC_BXAP_BME_DISABLED|EBC_BXAP_TWT_ENCODE(cs0_twt)| EBC_BXAP_BCE_DISABLE| EBC_BXAP_CSN_ENCODE(1)|EBC_BXAP_OEN_ENCODE(1)| EBC_BXAP_WBN_ENCODE(1)|EBC_BXAP_WBF_ENCODE(1)| EBC_BXAP_TH_ENCODE(1)|EBC_BXAP_RE_DISABLED| EBC_BXAP_BEM_WRITEONLY| EBC_BXAP_PEN_DISABLED); mtebc(PB0CR, EBC_BXCR_BAS_ENCODE(cs0_base)| cs0_size|EBC_BXCR_BU_RW|EBC_BXCR_BW_8BIT); /*-------------------------------------------------------------------------+ | 8KB NVRAM/RTC. Initialize bank 1 with default values. +-------------------------------------------------------------------------*/ mtebc(PB1AP, EBC_BXAP_BME_DISABLED|EBC_BXAP_TWT_ENCODE(10)| EBC_BXAP_BCE_DISABLE| EBC_BXAP_CSN_ENCODE(1)|EBC_BXAP_OEN_ENCODE(1)| EBC_BXAP_WBN_ENCODE(1)|EBC_BXAP_WBF_ENCODE(1)| EBC_BXAP_TH_ENCODE(1)|EBC_BXAP_RE_DISABLED| EBC_BXAP_BEM_WRITEONLY| EBC_BXAP_PEN_DISABLED); mtebc(PB1CR, EBC_BXCR_BAS_ENCODE(0x48000000)| EBC_BXCR_BS_1MB|EBC_BXCR_BU_RW|EBC_BXCR_BW_8BIT); /*-------------------------------------------------------------------------+ | 4 MB FLASH. Initialize bank 2 with default values. +-------------------------------------------------------------------------*/ mtebc(PB2AP, EBC_BXAP_BME_DISABLED|EBC_BXAP_TWT_ENCODE(cs2_twt)| EBC_BXAP_BCE_DISABLE| EBC_BXAP_CSN_ENCODE(1)|EBC_BXAP_OEN_ENCODE(1)| EBC_BXAP_WBN_ENCODE(1)|EBC_BXAP_WBF_ENCODE(1)| EBC_BXAP_TH_ENCODE(1)|EBC_BXAP_RE_DISABLED| EBC_BXAP_BEM_WRITEONLY| EBC_BXAP_PEN_DISABLED); mtebc(PB2CR, EBC_BXCR_BAS_ENCODE(cs2_base)| cs2_size|EBC_BXCR_BU_RW|EBC_BXCR_BW_8BIT); /*-------------------------------------------------------------------------+ | FPGA. Initialize bank 7 with default values. +-------------------------------------------------------------------------*/ mtebc(PB7AP, EBC_BXAP_BME_DISABLED|EBC_BXAP_TWT_ENCODE(7)| EBC_BXAP_BCE_DISABLE| EBC_BXAP_CSN_ENCODE(1)|EBC_BXAP_OEN_ENCODE(1)| EBC_BXAP_WBN_ENCODE(1)|EBC_BXAP_WBF_ENCODE(1)| EBC_BXAP_TH_ENCODE(1)|EBC_BXAP_RE_DISABLED| EBC_BXAP_BEM_WRITEONLY| EBC_BXAP_PEN_DISABLED); mtebc(PB7CR, EBC_BXCR_BAS_ENCODE(0x48300000)| EBC_BXCR_BS_1MB|EBC_BXCR_BU_RW|EBC_BXCR_BW_8BIT); /*-------------------------------------------------------------------- * Setup the interrupt controller polarities, triggers, etc. *-------------------------------------------------------------------*/ /* * Because of the interrupt handling rework to handle 440GX interrupts * with the common code, we needed to change names of the UIC registers. * Here the new relationship: * * U-Boot name 440GX name * ----------------------- * UIC0 UICB0 * UIC1 UIC0 * UIC2 UIC1 * UIC3 UIC2 */ mtdcr (UIC1SR, 0xffffffff); /* clear all */ mtdcr (UIC1ER, 0x00000000); /* disable all */ mtdcr (UIC1CR, 0x00000009); /* SMI & UIC1 crit are critical */ mtdcr (UIC1PR, 0xfffffe13); /* per ref-board manual */ mtdcr (UIC1TR, 0x01c00008); /* per ref-board manual */ mtdcr (UIC1VR, 0x00000001); /* int31 highest, base=0x000 */ mtdcr (UIC1SR, 0xffffffff); /* clear all */ mtdcr (UIC2SR, 0xffffffff); /* clear all */ mtdcr (UIC2ER, 0x00000000); /* disable all */ mtdcr (UIC2CR, 0x00000000); /* all non-critical */ mtdcr (UIC2PR, 0xffffe0ff); /* per ref-board manual */ mtdcr (UIC2TR, 0x00ffc000); /* per ref-board manual */ mtdcr (UIC2VR, 0x00000001); /* int31 highest, base=0x000 */ mtdcr (UIC2SR, 0xffffffff); /* clear all */ mtdcr (UIC3SR, 0xffffffff); /* clear all */ mtdcr (UIC3ER, 0x00000000); /* disable all */ mtdcr (UIC3CR, 0x00000000); /* all non-critical */ mtdcr (UIC3PR, 0xffffffff); /* per ref-board manual */ mtdcr (UIC3TR, 0x00ff8c0f); /* per ref-board manual */ mtdcr (UIC3VR, 0x00000001); /* int31 highest, base=0x000 */ mtdcr (UIC3SR, 0xffffffff); /* clear all */ mtdcr (UIC0SR, 0xfc000000); /* clear all */ mtdcr (UIC0ER, 0x00000000); /* disable all */ mtdcr (UIC0CR, 0x00000000); /* all non-critical */ mtdcr (UIC0PR, 0xfc000000); /* */ mtdcr (UIC0TR, 0x00000000); /* */ mtdcr (UIC0VR, 0x00000001); /* */ mfsdr (SDR0_MFR, mfr); mfr &= ~SDR0_MFR_ECS_MASK; /* mtsdr(SDR0_MFR, mfr); */ fpga_init(); return 0; }
/* Initialize the FPGA */ void balloon3_init_fpga(void) { fpga_init(); fpga_add(fpga_xilinx, &fpga); }
int board_early_init_f (void) { /*----------------------------------------------------------------------------+ | Define Boot devices +----------------------------------------------------------------------------*/ #define BOOT_FROM_SMALL_FLASH 0x00 #define BOOT_FROM_LARGE_FLASH_OR_SRAM 0x01 #define BOOT_FROM_PCI 0x02 #define BOOT_DEVICE_UNKNOWN 0x03 /*----------------------------------------------------------------------------+ | EBC Devices Characteristics | Peripheral Bank Access Parameters - EBC_BxAP | Peripheral Bank Configuration Register - EBC_BxCR +----------------------------------------------------------------------------*/ /* * Small Flash and FRAM * BU Value * BxAP : 0x03800000 - 0 00000111 0 00 00 00 00 00 000 0 0 0 0 00000 * B0CR : 0xff098000 - BAS = ff0 - 100 11 00 0000000000000 * B2CR : 0xe7098000 - BAS = e70 - 100 11 00 0000000000000 */ #define EBC_BXAP_SMALL_FLASH EBC_BXAP_BME_DISABLED | \ EBC_BXAP_TWT_ENCODE(7) | \ EBC_BXAP_BCE_DISABLE | \ EBC_BXAP_BCT_2TRANS | \ EBC_BXAP_CSN_ENCODE(0) | \ EBC_BXAP_OEN_ENCODE(0) | \ EBC_BXAP_WBN_ENCODE(0) | \ EBC_BXAP_WBF_ENCODE(0) | \ EBC_BXAP_TH_ENCODE(0) | \ EBC_BXAP_RE_DISABLED | \ EBC_BXAP_SOR_DELAYED | \ EBC_BXAP_BEM_WRITEONLY | \ EBC_BXAP_PEN_DISABLED #define EBC_BXCR_SMALL_FLASH_CS0 EBC_BXCR_BAS_ENCODE(0xFF000000) | \ EBC_BXCR_BS_16MB | \ EBC_BXCR_BU_RW | \ EBC_BXCR_BW_8BIT #define EBC_BXCR_SMALL_FLASH_CS2 EBC_BXCR_BAS_ENCODE(0xe7000000) | \ EBC_BXCR_BS_16MB | \ EBC_BXCR_BU_RW | \ EBC_BXCR_BW_8BIT /* * Large Flash and SRAM * BU Value * BxAP : 0x048ff240 - 0 00000111 0 00 00 00 00 00 000 0 0 0 0 00000 * B0CR : 0xff09a000 - BAS = ff0 - 100 11 01 0000000000000 * B2CR : 0xe709a000 - BAS = e70 - 100 11 01 0000000000000 */ #define EBC_BXAP_LARGE_FLASH EBC_BXAP_BME_DISABLED | \ EBC_BXAP_TWT_ENCODE(7) | \ EBC_BXAP_BCE_DISABLE | \ EBC_BXAP_BCT_2TRANS | \ EBC_BXAP_CSN_ENCODE(0) | \ EBC_BXAP_OEN_ENCODE(0) | \ EBC_BXAP_WBN_ENCODE(0) | \ EBC_BXAP_WBF_ENCODE(0) | \ EBC_BXAP_TH_ENCODE(0) | \ EBC_BXAP_RE_DISABLED | \ EBC_BXAP_SOR_DELAYED | \ EBC_BXAP_BEM_WRITEONLY | \ EBC_BXAP_PEN_DISABLED #define EBC_BXCR_LARGE_FLASH_CS0 EBC_BXCR_BAS_ENCODE(0xFF000000) | \ EBC_BXCR_BS_16MB | \ EBC_BXCR_BU_RW | \ EBC_BXCR_BW_16BIT #define EBC_BXCR_LARGE_FLASH_CS2 EBC_BXCR_BAS_ENCODE(0xE7000000) | \ EBC_BXCR_BS_16MB | \ EBC_BXCR_BU_RW | \ EBC_BXCR_BW_16BIT /* * FPGA * BU value : * B1AP = 0x05895240 - 0 00001011 0 00 10 01 01 01 001 0 0 1 0 00000 * B1CR = 0xe201a000 - BAS = e20 - 000 11 01 00000000000000 */ #define EBC_BXAP_FPGA EBC_BXAP_BME_DISABLED | \ EBC_BXAP_TWT_ENCODE(11) | \ EBC_BXAP_BCE_DISABLE | \ EBC_BXAP_BCT_2TRANS | \ EBC_BXAP_CSN_ENCODE(10) | \ EBC_BXAP_OEN_ENCODE(1) | \ EBC_BXAP_WBN_ENCODE(1) | \ EBC_BXAP_WBF_ENCODE(1) | \ EBC_BXAP_TH_ENCODE(1) | \ EBC_BXAP_RE_DISABLED | \ EBC_BXAP_SOR_DELAYED | \ EBC_BXAP_BEM_RW | \ EBC_BXAP_PEN_DISABLED #define EBC_BXCR_FPGA_CS1 EBC_BXCR_BAS_ENCODE(0xe2000000) | \ EBC_BXCR_BS_1MB | \ EBC_BXCR_BU_RW | \ EBC_BXCR_BW_16BIT unsigned long mfr; /* * Define Variables for EBC initialization depending on BOOTSTRAP option */ unsigned long sdr0_pinstp, sdr0_sdstp1 ; unsigned long bootstrap_settings, ebc_data_width, boot_selection; int computed_boot_device = BOOT_DEVICE_UNKNOWN; /*-------------------------------------------------------------------+ | Initialize EBC CONFIG - | Keep the Default value, but the bit PDT which has to be set to 1 ?TBC | default value : | 0x07C00000 - 0 0 000 1 1 1 1 1 0000 0 00000 000000000000 | +-------------------------------------------------------------------*/ mtebc(EBC0_CFG, EBC_CFG_LE_UNLOCK | EBC_CFG_PTD_ENABLE | EBC_CFG_RTC_16PERCLK | EBC_CFG_ATC_PREVIOUS | EBC_CFG_DTC_PREVIOUS | EBC_CFG_CTC_PREVIOUS | EBC_CFG_OEO_PREVIOUS | EBC_CFG_EMC_DEFAULT | EBC_CFG_PME_DISABLE | EBC_CFG_PR_16); /*-------------------------------------------------------------------+ | | PART 1 : Initialize EBC Bank 1 | ============================== | Bank1 is always associated to the EPLD. | It has to be initialized prior to other banks settings computation | since some board registers values may be needed to determine the | boot type | +-------------------------------------------------------------------*/ mtebc(PB1AP, EBC_BXAP_FPGA); mtebc(PB1CR, EBC_BXCR_FPGA_CS1); /*-------------------------------------------------------------------+ | | PART 2 : Determine which boot device was selected | ================================================= | | Read Pin Strap Register in PPC440SPe | Result can either be : | - Boot strap = boot from EBC 8bits => Small Flash | - Boot strap = boot from PCI | - Boot strap = IIC | In case of boot from IIC, read Serial Device Strap Register1 | | Result can either be : | - Boot from EBC - EBC Bus Width = 8bits => Small Flash | - Boot from EBC - EBC Bus Width = 16bits => Large Flash or SRAM | - Boot from PCI | +-------------------------------------------------------------------*/ /* Read Pin Strap Register in PPC440SP */ mfsdr(SDR0_PINSTP, sdr0_pinstp); bootstrap_settings = sdr0_pinstp & SDR0_PINSTP_BOOTSTRAP_MASK; switch (bootstrap_settings) { case SDR0_PINSTP_BOOTSTRAP_SETTINGS0: /* * Strapping Option A * Boot from EBC - 8 bits , Small Flash */ computed_boot_device = BOOT_FROM_SMALL_FLASH; break; case SDR0_PINSTP_BOOTSTRAP_SETTINGS1: /* * Strappping Option B * Boot from PCI */ computed_boot_device = BOOT_FROM_PCI; break; case SDR0_PINSTP_BOOTSTRAP_IIC_50_EN: case SDR0_PINSTP_BOOTSTRAP_IIC_54_EN: /* * Strapping Option C or D * Boot Settings in IIC EEprom address 0x50 or 0x54 * Read Serial Device Strap Register1 in PPC440SPe */ mfsdr(SDR0_SDSTP1, sdr0_sdstp1); boot_selection = sdr0_sdstp1 & SDR0_SDSTP1_ERPN_MASK; ebc_data_width = sdr0_sdstp1 & SDR0_SDSTP1_EBCW_MASK; switch (boot_selection) { case SDR0_SDSTP1_ERPN_EBC: switch (ebc_data_width) { case SDR0_SDSTP1_EBCW_16_BITS: computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM; break; case SDR0_SDSTP1_EBCW_8_BITS : computed_boot_device = BOOT_FROM_SMALL_FLASH; break; } break; case SDR0_SDSTP1_ERPN_PCI: computed_boot_device = BOOT_FROM_PCI; break; default: /* should not occure */ computed_boot_device = BOOT_DEVICE_UNKNOWN; } break; default: /* should not be */ computed_boot_device = BOOT_DEVICE_UNKNOWN; break; } /*-------------------------------------------------------------------+ | | PART 3 : Compute EBC settings depending on selected boot device | ====== ====================================================== | | Resulting EBC init will be among following configurations : | | - Boot from EBC 8bits => boot from Small Flash selected | EBC-CS0 = Small Flash | EBC-CS2 = Large Flash and SRAM | | - Boot from EBC 16bits => boot from Large Flash or SRAM | EBC-CS0 = Large Flash or SRAM | EBC-CS2 = Small Flash | | - Boot from PCI | EBC-CS0 = not initialized to avoid address contention | EBC-CS2 = same as boot from Small Flash selected | +-------------------------------------------------------------------*/ unsigned long ebc0_cs0_bxap_value = 0, ebc0_cs0_bxcr_value = 0; unsigned long ebc0_cs2_bxap_value = 0, ebc0_cs2_bxcr_value = 0; switch (computed_boot_device) { /*-------------------------------------------------------------------*/ case BOOT_FROM_PCI: /*-------------------------------------------------------------------*/ /* * By Default CS2 is affected to LARGE Flash * do not initialize SMALL FLASH to avoid address contention * Large Flash */ ebc0_cs2_bxap_value = EBC_BXAP_LARGE_FLASH; ebc0_cs2_bxcr_value = EBC_BXCR_LARGE_FLASH_CS2; break; /*-------------------------------------------------------------------*/ case BOOT_FROM_SMALL_FLASH: /*-------------------------------------------------------------------*/ ebc0_cs0_bxap_value = EBC_BXAP_SMALL_FLASH; ebc0_cs0_bxcr_value = EBC_BXCR_SMALL_FLASH_CS0; /* * Large Flash or SRAM */ /* ebc0_cs2_bxap_value = EBC_BXAP_LARGE_FLASH; */ ebc0_cs2_bxap_value = 0x048ff240; ebc0_cs2_bxcr_value = EBC_BXCR_LARGE_FLASH_CS2; break; /*-------------------------------------------------------------------*/ case BOOT_FROM_LARGE_FLASH_OR_SRAM: /*-------------------------------------------------------------------*/ ebc0_cs0_bxap_value = EBC_BXAP_LARGE_FLASH; ebc0_cs0_bxcr_value = EBC_BXCR_LARGE_FLASH_CS0; /* Small flash */ ebc0_cs2_bxap_value = EBC_BXAP_SMALL_FLASH; ebc0_cs2_bxcr_value = EBC_BXCR_SMALL_FLASH_CS2; break; /*-------------------------------------------------------------------*/ default: /*-------------------------------------------------------------------*/ /* BOOT_DEVICE_UNKNOWN */ break; } mtebc(PB0AP, ebc0_cs0_bxap_value); mtebc(PB0CR, ebc0_cs0_bxcr_value); mtebc(PB2AP, ebc0_cs2_bxap_value); mtebc(PB2CR, ebc0_cs2_bxcr_value); /*--------------------------------------------------------------------+ | Interrupt controller setup for the AMCC 440SPe Evaluation board. +--------------------------------------------------------------------+ +---------------------------------------------------------------------+ |Interrupt| Source | Pol. | Sensi.| Crit. | +---------+-----------------------------------+-------+-------+-------+ | IRQ 00 | UART0 | High | Level | Non | | IRQ 01 | UART1 | High | Level | Non | | IRQ 02 | IIC0 | High | Level | Non | | IRQ 03 | IIC1 | High | Level | Non | | IRQ 04 | PCI0X0 MSG IN | High | Level | Non | | IRQ 05 | PCI0X0 CMD Write | High | Level | Non | | IRQ 06 | PCI0X0 Power Mgt | High | Level | Non | | IRQ 07 | PCI0X0 VPD Access | Rising| Edge | Non | | IRQ 08 | PCI0X0 MSI level 0 | High | Lvl/ed| Non | | IRQ 09 | External IRQ 15 - (PCI-Express) | pgm H | Pgm | Non | | IRQ 10 | UIC2 Non-critical Int. | NA | NA | Non | | IRQ 11 | UIC2 Critical Interrupt | NA | NA | Crit | | IRQ 12 | PCI Express MSI Level 0 | Rising| Edge | Non | | IRQ 13 | PCI Express MSI Level 1 | Rising| Edge | Non | | IRQ 14 | PCI Express MSI Level 2 | Rising| Edge | Non | | IRQ 15 | PCI Express MSI Level 3 | Rising| Edge | Non | | IRQ 16 | UIC3 Non-critical Int. | NA | NA | Non | | IRQ 17 | UIC3 Critical Interrupt | NA | NA | Crit | | IRQ 18 | External IRQ 14 - (PCI-Express) | Pgm | Pgm | Non | | IRQ 19 | DMA Channel 0 FIFO Full | High | Level | Non | | IRQ 20 | DMA Channel 0 Stat FIFO | High | Level | Non | | IRQ 21 | DMA Channel 1 FIFO Full | High | Level | Non | | IRQ 22 | DMA Channel 1 Stat FIFO | High | Level | Non | | IRQ 23 | I2O Inbound Doorbell | High | Level | Non | | IRQ 24 | Inbound Post List FIFO Not Empt | High | Level | Non | | IRQ 25 | I2O Region 0 LL PLB Write | High | Level | Non | | IRQ 26 | I2O Region 1 LL PLB Write | High | Level | Non | | IRQ 27 | I2O Region 0 HB PLB Write | High | Level | Non | | IRQ 28 | I2O Region 1 HB PLB Write | High | Level | Non | | IRQ 29 | GPT Down Count Timer | Rising| Edge | Non | | IRQ 30 | UIC1 Non-critical Int. | NA | NA | Non | | IRQ 31 | UIC1 Critical Interrupt | NA | NA | Crit. | |---------------------------------------------------------------------- | IRQ 32 | Ext. IRQ 13 - (PCI-Express) |pgm (H)|pgm/Lvl| Non | | IRQ 33 | MAL Serr | High | Level | Non | | IRQ 34 | MAL Txde | High | Level | Non | | IRQ 35 | MAL Rxde | High | Level | Non | | IRQ 36 | DMC CE or DMC UE | High | Level | Non | | IRQ 37 | EBC or UART2 | High |Lvl Edg| Non | | IRQ 38 | MAL TX EOB | High | Level | Non | | IRQ 39 | MAL RX EOB | High | Level | Non | | IRQ 40 | PCIX0 MSI Level 1 | High |Lvl Edg| Non | | IRQ 41 | PCIX0 MSI level 2 | High |Lvl Edg| Non | | IRQ 42 | PCIX0 MSI level 3 | High |Lvl Edg| Non | | IRQ 43 | L2 Cache | Risin | Edge | Non | | IRQ 44 | GPT Compare Timer 0 | Risin | Edge | Non | | IRQ 45 | GPT Compare Timer 1 | Risin | Edge | Non | | IRQ 46 | GPT Compare Timer 2 | Risin | Edge | Non | | IRQ 47 | GPT Compare Timer 3 | Risin | Edge | Non | | IRQ 48 | GPT Compare Timer 4 | Risin | Edge | Non | | IRQ 49 | Ext. IRQ 12 - PCI-X |pgm/Fal|pgm/Lvl| Non | | IRQ 50 | Ext. IRQ 11 - |pgm (H)|pgm/Lvl| Non | | IRQ 51 | Ext. IRQ 10 - |pgm (H)|pgm/Lvl| Non | | IRQ 52 | Ext. IRQ 9 |pgm (H)|pgm/Lvl| Non | | IRQ 53 | Ext. IRQ 8 |pgm (H)|pgm/Lvl| Non | | IRQ 54 | DMA Error | High | Level | Non | | IRQ 55 | DMA I2O Error | High | Level | Non | | IRQ 56 | Serial ROM | High | Level | Non | | IRQ 57 | PCIX0 Error | High | Edge | Non | | IRQ 58 | Ext. IRQ 7- |pgm (H)|pgm/Lvl| Non | | IRQ 59 | Ext. IRQ 6- |pgm (H)|pgm/Lvl| Non | | IRQ 60 | EMAC0 Interrupt | High | Level | Non | | IRQ 61 | EMAC0 Wake-up | High | Level | Non | | IRQ 62 | Reserved | High | Level | Non | | IRQ 63 | XOR | High | Level | Non | |---------------------------------------------------------------------- | IRQ 64 | PE0 AL | High | Level | Non | | IRQ 65 | PE0 VPD Access | Risin | Edge | Non | | IRQ 66 | PE0 Hot Reset Request | Risin | Edge | Non | | IRQ 67 | PE0 Hot Reset Request | Falli | Edge | Non | | IRQ 68 | PE0 TCR | High | Level | Non | | IRQ 69 | PE0 BusMaster VCO | Falli | Edge | Non | | IRQ 70 | PE0 DCR Error | High | Level | Non | | IRQ 71 | Reserved | N/A | N/A | Non | | IRQ 72 | PE1 AL | High | Level | Non | | IRQ 73 | PE1 VPD Access | Risin | Edge | Non | | IRQ 74 | PE1 Hot Reset Request | Risin | Edge | Non | | IRQ 75 | PE1 Hot Reset Request | Falli | Edge | Non | | IRQ 76 | PE1 TCR | High | Level | Non | | IRQ 77 | PE1 BusMaster VCO | Falli | Edge | Non | | IRQ 78 | PE1 DCR Error | High | Level | Non | | IRQ 79 | Reserved | N/A | N/A | Non | | IRQ 80 | PE2 AL | High | Level | Non | | IRQ 81 | PE2 VPD Access | Risin | Edge | Non | | IRQ 82 | PE2 Hot Reset Request | Risin | Edge | Non | | IRQ 83 | PE2 Hot Reset Request | Falli | Edge | Non | | IRQ 84 | PE2 TCR | High | Level | Non | | IRQ 85 | PE2 BusMaster VCO | Falli | Edge | Non | | IRQ 86 | PE2 DCR Error | High | Level | Non | | IRQ 87 | Reserved | N/A | N/A | Non | | IRQ 88 | External IRQ(5) | Progr | Progr | Non | | IRQ 89 | External IRQ 4 - Ethernet | Progr | Progr | Non | | IRQ 90 | External IRQ 3 - PCI-X | Progr | Progr | Non | | IRQ 91 | External IRQ 2 - PCI-X | Progr | Progr | Non | | IRQ 92 | External IRQ 1 - PCI-X | Progr | Progr | Non | | IRQ 93 | External IRQ 0 - PCI-X | Progr | Progr | Non | | IRQ 94 | Reserved | N/A | N/A | Non | | IRQ 95 | Reserved | N/A | N/A | Non | |--------------------------------------------------------------------- | IRQ 96 | PE0 INTA | High | Level | Non | | IRQ 97 | PE0 INTB | High | Level | Non | | IRQ 98 | PE0 INTC | High | Level | Non | | IRQ 99 | PE0 INTD | High | Level | Non | | IRQ 100 | PE1 INTA | High | Level | Non | | IRQ 101 | PE1 INTB | High | Level | Non | | IRQ 102 | PE1 INTC | High | Level | Non | | IRQ 103 | PE1 INTD | High | Level | Non | | IRQ 104 | PE2 INTA | High | Level | Non | | IRQ 105 | PE2 INTB | High | Level | Non | | IRQ 106 | PE2 INTC | High | Level | Non | | IRQ 107 | PE2 INTD | Risin | Edge | Non | | IRQ 108 | PCI Express MSI Level 4 | Risin | Edge | Non | | IRQ 109 | PCI Express MSI Level 5 | Risin | Edge | Non | | IRQ 110 | PCI Express MSI Level 6 | Risin | Edge | Non | | IRQ 111 | PCI Express MSI Level 7 | Risin | Edge | Non | | IRQ 116 | PCI Express MSI Level 12 | Risin | Edge | Non | | IRQ 112 | PCI Express MSI Level 8 | Risin | Edge | Non | | IRQ 113 | PCI Express MSI Level 9 | Risin | Edge | Non | | IRQ 114 | PCI Express MSI Level 10 | Risin | Edge | Non | | IRQ 115 | PCI Express MSI Level 11 | Risin | Edge | Non | | IRQ 117 | PCI Express MSI Level 13 | Risin | Edge | Non | | IRQ 118 | PCI Express MSI Level 14 | Risin | Edge | Non | | IRQ 119 | PCI Express MSI Level 15 | Risin | Edge | Non | | IRQ 120 | PCI Express MSI Level 16 | Risin | Edge | Non | | IRQ 121 | PCI Express MSI Level 17 | Risin | Edge | Non | | IRQ 122 | PCI Express MSI Level 18 | Risin | Edge | Non | | IRQ 123 | PCI Express MSI Level 19 | Risin | Edge | Non | | IRQ 124 | PCI Express MSI Level 20 | Risin | Edge | Non | | IRQ 125 | PCI Express MSI Level 21 | Risin | Edge | Non | | IRQ 126 | PCI Express MSI Level 22 | Risin | Edge | Non | | IRQ 127 | PCI Express MSI Level 23 | Risin | Edge | Non | +---------+-----------------------------------+-------+-------+------*/ /*--------------------------------------------------------------------+ | Put UICs in PowerPC440SPemode. | Initialise UIC registers. Clear all interrupts. Disable all | interrupts. | Set critical interrupt values. Set interrupt polarities. Set | interrupt trigger levels. Make bit 0 High priority. Clear all | interrupts again. +-------------------------------------------------------------------*/ mtdcr (UIC3SR, 0xffffffff); /* Clear all interrupts */ mtdcr (UIC3ER, 0x00000000); /* disable all interrupts */ mtdcr (UIC3CR, 0x00000000); /* Set Critical / Non Critical * interrupts */ mtdcr (UIC3PR, 0xffffffff); /* Set Interrupt Polarities */ mtdcr (UIC3TR, 0x001fffff); /* Set Interrupt Trigger Levels */ mtdcr (UIC3VR, 0x00000001); /* Set Vect base=0,INT31 Highest * priority */ mtdcr (UIC3SR, 0x00000000); /* clear all interrupts */ mtdcr (UIC3SR, 0xffffffff); /* clear all interrupts */ mtdcr (UIC2SR, 0xffffffff); /* Clear all interrupts */ mtdcr (UIC2ER, 0x00000000); /* disable all interrupts */ mtdcr (UIC2CR, 0x00000000); /* Set Critical / Non Critical * interrupts */ mtdcr (UIC2PR, 0xebebebff); /* Set Interrupt Polarities */ mtdcr (UIC2TR, 0x74747400); /* Set Interrupt Trigger Levels */ mtdcr (UIC2VR, 0x00000001); /* Set Vect base=0,INT31 Highest * priority */ mtdcr (UIC2SR, 0x00000000); /* clear all interrupts */ mtdcr (UIC2SR, 0xffffffff); /* clear all interrupts */ mtdcr (UIC1SR, 0xffffffff); /* Clear all interrupts */ mtdcr (UIC1ER, 0x00000000); /* disable all interrupts */ mtdcr (UIC1CR, 0x00000000); /* Set Critical / Non Critical * interrupts */ mtdcr (UIC1PR, 0xffffffff); /* Set Interrupt Polarities */ mtdcr (UIC1TR, 0x001f8040); /* Set Interrupt Trigger Levels */ mtdcr (UIC1VR, 0x00000001); /* Set Vect base=0,INT31 Highest * priority */ mtdcr (UIC1SR, 0x00000000); /* clear all interrupts */ mtdcr (UIC1SR, 0xffffffff); /* clear all interrupts */ mtdcr (UIC0SR, 0xffffffff); /* Clear all interrupts */ mtdcr (UIC0ER, 0x00000000); /* disable all interrupts excepted * cascade to be checked */ mtdcr (UIC0CR, 0x00104001); /* Set Critical / Non Critical * interrupts */ mtdcr (UIC0PR, 0xffffffff); /* Set Interrupt Polarities */ mtdcr (UIC0TR, 0x010f0004); /* Set Interrupt Trigger Levels */ mtdcr (UIC0VR, 0x00000001); /* Set Vect base=0,INT31 Highest * priority */ mtdcr (UIC0SR, 0x00000000); /* clear all interrupts */ mtdcr (UIC0SR, 0xffffffff); /* clear all interrupts */ mfsdr(SDR0_MFR, mfr); mfr |= SDR0_MFR_FIXD; /* Workaround for PCI/DMA */ mtsdr(SDR0_MFR, mfr); fpga_init(); return 0; }
void main() { config_init(); console_init(); printf("bootloader main()\r\n"); const int MAX_CONFIG_ATTEMPTS = 3; int attempt = 0; for (; !fpga_is_init_complete() && attempt < MAX_CONFIG_ATTEMPTS; attempt++) { fpga_init(); flash_init(); // if needed, blow away fpga image with golden one. } if (attempt >= MAX_CONFIG_ATTEMPTS) { printf("fpga will not configure. now i will go into infinite loop...\r\n"); while (1) { } // aaahhhhhhhhhhhhhhhhhhhhh } enet_init(); printf("bootloader! hello, world!\r\n"); __enable_irq(); fpga_spi_txrx(0x80, 1); // turn off fpga led // reset the PHY via hardware reset pin //printf("asserting PHY hardware reset\r\n"); fpga_spi_txrx(FPGA_SPI_REG_MDIO_CFG | FPGA_SPI_WRITE, 4); // assert PHY_RESET for (volatile int j = 0; j < 2000000; j++) { } // wait a while fpga_spi_txrx(FPGA_SPI_REG_MDIO_CFG | FPGA_SPI_WRITE, 0); // release PHY_RESET for (volatile int j = 0; j < 2000000; j++) { } // wait a longer while //printf("requesting PHY software reset\r\n"); // now do a software reset of the PHY fpga_spi_txrx(FPGA_SPI_REG_MDIO_WDATA | FPGA_SPI_WRITE, 0x9000); // set SW reset bit and auto-negotiate bit fpga_spi_txrx(FPGA_SPI_REG_MDIO_CFG | FPGA_SPI_WRITE, 0x0001); // start write of register zero for (volatile int j = 0; j < 2000000; j++) { } // wait a longer while SysTick_Config(F_CPU/1000); // set up 1 khz systick if ((*(uint32_t *)0x000088000) == 0) { printf("boot not possible; application vector table is undefined.\r\n"); boot_enabled = 0; // impossible to boot. don't time out. } printf("waiting until we have ARP to 10.10.1.1 ...\r\n"); // spin here until we have ARP, or until 20 seconds expire uint32_t start_time = systick_count; uint32_t dance_time = systick_count; for (uint32_t loop_count = 0; !enet_arp_valid(); loop_count++) { enet_idle(); if (systick_count != dance_time && systick_count % 50 == 0) { dance_time = systick_count; led_dance(); } if (systick_count - start_time >= 15000) break; // didn't hear back from ARP. sad. time to give up and move on. } printf("entering bootloader wait loop\r\n"); start_time = systick_count; for (uint32_t loop_count = 0; ; loop_count++) { enet_idle(); if (systick_count != dance_time && systick_count % 100 == 0) { dance_time = systick_count; led_dance(); } if ((systick_count - start_time >= 5000 && boot_enabled) || boot_requested) break; // hit timeout. boot. } printf("jumping to application. bye...\r\n"); typedef uint32_t (*app_fp)(); app_fp app = *((app_fp *)0x88004); // look up application start address app(); // and call it while (1) { } // shouldn't return, but if we do, hang out here. }
int main(void) { int itmp; //////////////////////////////////////////////////////////////// // Initialization main_init(); // while(1); while(power_fail) { printf("."); timer2_wait(1000); } fpga_init(); print_menu(0); /* fpga_put_eeprom_uint16(FPGA_COEFF_BASE, (uint16_t)(-12288)); fpga_put_eeprom_uint16(FPGA_COEFF_BASE+2, 4096); fpga_put_eeprom_uint16(FPGA_COEFF_BASE+4, 16384); fpga_put_eeprom_uint16(FPGA_COEFF_BASE+6, 0); fpga_put_eeprom_uint16(FPGA_COEFF_BASE+8, 8192); fpga_put_eeprom_uint16(FPGA_COEFF_BASE+10, 0); fpga_put_eeprom_uint16(FPGA_COEFF_BASE+12, -16384); fpga_put_eeprom_uint16(FPGA_COEFF_BASE+14, 0);*/ //////////////////////////////////////////////////////////////// // Main loop serial_set_echo(SERIAL_ECHO_OFF); /* while(1) { DDRG = 0xFF; PORTG = 0x00; PORTD |= (1<<PD7); timer2_wait(10000); PORTG = 0xFF; PORTD &= ~(1<<PD7); timer2_wait(10000); }*/ itmp = -1; // while(1) { while(power_fail==0) { itmp = serial_get(); if(fpga_check_cfg_done()==0) { printf("\r\nFPGA Configuring"); while(fpga_check_cfg_done()==0) { printf("."); timer2_wait(500); } itmp=0; } if(itmp != -1) { print_menu((unsigned char)(itmp)); } operation_power_check(); } // Main loop exited with power failure PORTD &= ~(1<<PD5); PORTB &= ~((1<<PB6)|(1<<PB7)); // Power off printf(COLOR_RED"Power failed while operating (Code %x)! Shut down and abort!"COLOR_OFF, power_fail); power_error(power_fail); while(1) { timer2_wait(500); printf("."); } // We should never get to this point return 0; }
int board_early_init_f (void) { unsigned long mfr; /*-------------------------------------------------------------------------+ | Initialize EBC CONFIG +-------------------------------------------------------------------------*/ mtebc(xbcfg, EBC_CFG_LE_UNLOCK | EBC_CFG_PTD_ENABLE | EBC_CFG_RTC_64PERCLK | EBC_CFG_ATC_PREVIOUS | EBC_CFG_DTC_PREVIOUS | EBC_CFG_CTC_PREVIOUS | EBC_CFG_EMC_NONDEFAULT | EBC_CFG_PME_DISABLE | EBC_CFG_PR_32); /*-------------------------------------------------------------------------+ | 1 MB FLASH / 1 MB SRAM. Initialize bank 0 with default values. +-------------------------------------------------------------------------*/ mtebc(pb0ap, EBC_BXAP_BME_DISABLED|EBC_BXAP_TWT_ENCODE(8)| EBC_BXAP_BCE_DISABLE| EBC_BXAP_CSN_ENCODE(1)|EBC_BXAP_OEN_ENCODE(1)| EBC_BXAP_WBN_ENCODE(1)|EBC_BXAP_WBF_ENCODE(1)| EBC_BXAP_TH_ENCODE(1)|EBC_BXAP_RE_DISABLED| EBC_BXAP_BEM_WRITEONLY| EBC_BXAP_PEN_DISABLED); mtebc(pb0cr, EBC_BXCR_BAS_ENCODE(0xFFE00000)| EBC_BXCR_BS_2MB|EBC_BXCR_BU_RW|EBC_BXCR_BW_8BIT); /*-------------------------------------------------------------------------+ | 8KB NVRAM/RTC. Initialize bank 1 with default values. +-------------------------------------------------------------------------*/ mtebc(pb1ap, EBC_BXAP_BME_DISABLED|EBC_BXAP_TWT_ENCODE(10)| EBC_BXAP_BCE_DISABLE| EBC_BXAP_CSN_ENCODE(1)|EBC_BXAP_OEN_ENCODE(1)| EBC_BXAP_WBN_ENCODE(1)|EBC_BXAP_WBF_ENCODE(1)| EBC_BXAP_TH_ENCODE(1)|EBC_BXAP_RE_DISABLED| EBC_BXAP_BEM_WRITEONLY| EBC_BXAP_PEN_DISABLED); mtebc(pb1cr, EBC_BXCR_BAS_ENCODE(0x48000000)| EBC_BXCR_BS_1MB|EBC_BXCR_BU_RW|EBC_BXCR_BW_8BIT); /*-------------------------------------------------------------------------+ | 4 MB FLASH. Initialize bank 2 with default values. +-------------------------------------------------------------------------*/ mtebc(pb2ap, EBC_BXAP_BME_DISABLED|EBC_BXAP_TWT_ENCODE(10)| EBC_BXAP_BCE_DISABLE| EBC_BXAP_CSN_ENCODE(1)|EBC_BXAP_OEN_ENCODE(1)| EBC_BXAP_WBN_ENCODE(1)|EBC_BXAP_WBF_ENCODE(1)| EBC_BXAP_TH_ENCODE(1)|EBC_BXAP_RE_DISABLED| EBC_BXAP_BEM_WRITEONLY| EBC_BXAP_PEN_DISABLED); mtebc(pb2cr, EBC_BXCR_BAS_ENCODE(0xFF800000)| EBC_BXCR_BS_4MB|EBC_BXCR_BU_RW|EBC_BXCR_BW_8BIT); /*-------------------------------------------------------------------------+ | FPGA. Initialize bank 7 with default values. +-------------------------------------------------------------------------*/ mtebc(pb7ap, EBC_BXAP_BME_DISABLED|EBC_BXAP_TWT_ENCODE(7)| EBC_BXAP_BCE_DISABLE| EBC_BXAP_CSN_ENCODE(1)|EBC_BXAP_OEN_ENCODE(1)| EBC_BXAP_WBN_ENCODE(1)|EBC_BXAP_WBF_ENCODE(1)| EBC_BXAP_TH_ENCODE(1)|EBC_BXAP_RE_DISABLED| EBC_BXAP_BEM_WRITEONLY| EBC_BXAP_PEN_DISABLED); mtebc(pb7cr, EBC_BXCR_BAS_ENCODE(0x48300000)| EBC_BXCR_BS_1MB|EBC_BXCR_BU_RW|EBC_BXCR_BW_8BIT); /*-------------------------------------------------------------------- * Setup the interrupt controller polarities, triggers, etc. *-------------------------------------------------------------------*/ mtdcr (uic0sr, 0xffffffff); /* clear all */ mtdcr (uic0er, 0x00000000); /* disable all */ mtdcr (uic0cr, 0x00000009); /* SMI & UIC1 crit are critical */ mtdcr (uic0pr, 0xfffffe13); /* per ref-board manual */ mtdcr (uic0tr, 0x01c00008); /* per ref-board manual */ mtdcr (uic0vr, 0x00000001); /* int31 highest, base=0x000 */ mtdcr (uic0sr, 0xffffffff); /* clear all */ mtdcr (uic1sr, 0xffffffff); /* clear all */ mtdcr (uic1er, 0x00000000); /* disable all */ mtdcr (uic1cr, 0x00000000); /* all non-critical */ mtdcr (uic1pr, 0xffffe0ff); /* per ref-board manual */ mtdcr (uic1tr, 0x00ffc000); /* per ref-board manual */ mtdcr (uic1vr, 0x00000001); /* int31 highest, base=0x000 */ mtdcr (uic1sr, 0xffffffff); /* clear all */ mtdcr (uic2sr, 0xffffffff); /* clear all */ mtdcr (uic2er, 0x00000000); /* disable all */ mtdcr (uic2cr, 0x00000000); /* all non-critical */ mtdcr (uic2pr, 0xffffffff); /* per ref-board manual */ mtdcr (uic2tr, 0x00ff8c0f); /* per ref-board manual */ mtdcr (uic2vr, 0x00000001); /* int31 highest, base=0x000 */ mtdcr (uic2sr, 0xffffffff); /* clear all */ mtdcr (uicb0sr, 0xfc000000); /* clear all */ mtdcr (uicb0er, 0x00000000); /* disable all */ mtdcr (uicb0cr, 0x00000000); /* all non-critical */ mtdcr (uicb0pr, 0xfc000000); /* */ mtdcr (uicb0tr, 0x00000000); /* */ mtdcr (uicb0vr, 0x00000001); /* */ mfsdr (sdr_mfr, mfr); mfr &= ~SDR0_MFR_ECS_MASK; /* mtsdr(sdr_mfr, mfr); */ fpga_init(); return 0; }
int main(int argc, char *argv[]) { int dev, ret_val; unsigned int reg_val; // find and init FPGA device ret_val = fpga_init(argc, argv, &dev); if (ret_val<0) return -1; double dt_c[N]; double dt_f[N]; printf("N_d is %d\n",N_d); printf("N_d is %d\n",N_d); printf("size is %d\n",(int)SIZE_DWORD); try{ x_1.resize(13); y_1.resize(13); t_1.resize(13); x_2.resize(13); y_2.resize(13); t_2.resize(13); for (int i = 0; i < 13; i++){ x_1[i].resize(N_d); y_1[i].resize(N_d); t_1[i].resize(N_d); x_2[i].resize(N_d); y_2[i].resize(N_d); t_2[i].resize(N_d); } } catch (const std::bad_alloc& ba){ std::cout << "bad_alloc caught: " << ba.what() << std::endl; } FILE *f_p, *f_p1; int error = 0; if (flag_compare==1){ f_p = fopen ("MT_coords_CPU.txt","w"); if (f_p==NULL) { printf("Error opening file!\n"); return -1; } } if (flag_file) f_p1 = fopen (out_file,"w"); else f_p1 = fopen ("MT_coords_FPGA.txt","w"); if (f_p1==NULL) { printf("Error opening file!\n"); return -1; } printf("TOTAL_STEPS = %d\nSTEPS_TO_WRITE = %d\n", TOTAL_STEPS, STEPS_TO_WRITE); // get golden results init_coords(x_1,y_1,t_1); init_coords(x_2,y_2,t_2); /* * в этом цикле проводим вычислени¤ и сравниваем результаты * * в данный момент чтобы проверить сравнение на каждом шаге вызываетс¤ функци¤ mt_cpu * с параметром load_coords = 1 (иначе состо¤ни¤ глобальных массивов координат будет все врем¤ мен¤тьс¤) * * огда вместо mt_cpu будет реализаци¤ на OpenCL, то надо делать по-другому: * перед циклом один раз вызываем mt_cpu (load_coords = 1), в цикле уменьшаем количество итераций на 1 и * вызываем mt_cpu (load_coords = 0) * */ error = 0; printf("\nFlag rand is SET, %d\n\n",flag_rand); if (flag_rand==1) { srand (time(NULL)); // set seed vals for (int i =0; i < NUM_SEEDS; i++){ #ifdef TEST_SEEDS seeds[i] = test_seeds[i]; #else seeds[i]=rand(); #endif unsigned int addr = SEED_REG + 4*i; RD_WriteDeviceReg32m(dev, CNTRL_BAR, addr, seeds[i]); } printf("\nFlag rand is SET\n\n"); RD_ReadDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); // deassert rand reset reg_val |= (1<<4); RD_WriteDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); // set rand_enable flag reg_val |= (1<<7); RD_WriteDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); // start rand core reg_val |= (1<<5); RD_WriteDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); } printf("\n\nhereerereerere\n\n"); for(int k=0; k<N; k++) { int err; struct timeval tt1, tt2; if (flag_compare==1){ get_time(&tt1); if (mt_cpu(STEPS_TO_WRITE,1, flag_rand, flag_seed, seeds, x_1,y_1,t_1,x_1,y_1, t_1)<0) { printf("Nan Error in cpu. Step is %d. Exitting....\n",k); break;} get_time(&tt2); calc_dt(&tt1,&tt2, &dt_c[k]); } get_time(&tt1); mt_fpga(dev,STEPS_TO_WRITE,1,x_2,y_2,t_2,x_2,y_2, t_2); get_time(&tt2); calc_dt(&tt1,&tt2, &dt_f[k]); flag_seed = 0; printf("Step %d\n\t CPU Time = %f\n\t FPGA Time = %f\n",k,dt_c[k],dt_f[k] ); if (flag_compare==1){ err = compare_results(x_1,y_1,t_1,x_2,y_2,t_2); if (err) { error += err; printf("Compare results failed at step = %d, errors = %d\n", k, error); } } if (flag_compare==1) print_coords(f_p, x_1, y_1, t_1); print_coords(f_p1, x_2, y_2, t_2); } if (flag_compare==1){ if (!error) printf("Test OK!\n"); } if (flag_compare==1) fclose(f_p); fclose(f_p1); RD_ReadDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); // assert rand reset reg_val &= ~(1<<4); RD_WriteDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); // reset rand_enable flag reg_val &= ~(1<<7); RD_WriteDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); free(wr_buf_free); free(rd_buf_free); RD_CloseDevice(pd_ptr); return 0; }
/* Main function */ int main(void) { sc_time_t my_timer; int32_t value; dint(); #if USE_WATCHDOG init_watchdog(); #else WDTCTL = WDTCTL_INIT; //Init watchdog timer #endif init_ports(); init_clock(); sc_init_timer(); scandal_init(); config_read(); {volatile int i; for(i=0; i<100; i++) ; } /* Below here, we assume we have a config */ /* Send out the error that we've reset -- it's not fatal obviously, but we want to know when it happens, and it really is an error, since something that's solar powered should be fairly constantly powered */ scandal_do_user_err(UNSWMPPTNG_ERROR_WATCHDOG_RESET); /* Make sure our variables are set up properly */ tracker_status = 0; /* Initialise FPGA (or, our case, CPLD) stuff */ fpga_init(); /* Starts the ADC and control loop interrupt */ control_init(); /* Initialise the PV tracking mechanism */ pv_track_init(); eint(); my_timer = sc_get_timer(); while (1) { sc_time_t timeval; timeval = sc_get_timer(); handle_scandal(); /* pv_track sends data when it feels like it */ pv_track_send_data(); /* Periodically send out the values recorded by the ADC */ if(timeval >= my_timer + TELEMETRY_UPDATE_PERIOD){ my_timer = timeval; toggle_yellow_led(); #if USE_WATCHDOG kick_watchdog(); #endif mpptng_do_errors(); pv_track_send_telemetry(); /* We send the Input current and voltage from within the pvtrack module */ /* scandal_send_scaled_channel(TELEM_LOW, UNSWMPPTNG_IN_VOLTAGE, sample_adc(MEAS_VIN1)); scandal_send_scaled_channel(TELEM_LOW, UNSWMPPTNG_IN_CURRENT, sample_adc(MEAS_IIN1));*/ scandal_send_scaled_channel(TELEM_LOW, UNSWMPPTNG_OUT_VOLTAGE, sample_adc(MEAS_VOUT)); scandal_send_scaled_channel(TELEM_LOW, UNSWMPPTNG_HEATSINK_TEMP, sample_adc(MEAS_THEATSINK)); scandal_send_scaled_channel(TELEM_LOW, UNSWMPPTNG_15V, sample_adc(MEAS_15V)); scandal_send_channel(TELEM_LOW, UNSWMPPTNG_STATUS, tracker_status); /* Pre-scale for the temperature */ { int32_t degC = sample_adc(MEAS_TAMBIENT); degC = (((degC - 1615)*704*1000)/4095); scandal_send_scaled_channel(TELEM_LOW, UNSWMPPTNG_AMBIENT_TEMP, degC); } #if DEBUG >= 1 scandal_send_channel(TELEM_LOW, 134, output); scandal_send_channel(TELEM_LOW, 136, fpga_nFS()); #endif } /* If we're not tracking, check to see that our start-up criteria are satisfied, and then initialise the control loops and restart tracking */ if((tracker_status & STATUS_TRACKING) == 0){ /* Check the input voltage */ value = sample_adc(MEAS_VIN1); scandal_get_scaled_value(UNSWMPPTNG_IN_VOLTAGE, &value); if(value < config.min_vin) continue; /* Check the output voltage */ value = sample_adc(MEAS_VOUT); scandal_get_scaled_value(UNSWMPPTNG_OUT_VOLTAGE, &value); if(value > config.max_vout) continue; tracker_status |= STATUS_TRACKING; /* Initialise the tracking algorithm */ // pv_track_init(); /* Reset the FPGA */ fs_reset(); /* Initialise the control loop */ control_start(); /* Enable the FPGA */ fpga_enable(FPGA_ON); } } }