int fpga_done_fn(int cookie) { struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio*)MPC5XXX_GPIO; int result = 0; udelay(10); fpga_debug("CONF_DONE check ... "); if (gpio->simple_ival & FPGA_CONF_DONE) { fpga_debug("high\n"); result = 1; } else fpga_debug("low\n"); return result; }
int fpga_status_fn(int cookie) { volatile immap_t *im = (volatile immap_t *)CFG_IMMR; volatile gpio83xx_t *gpio = (volatile gpio83xx_t *)&im->gpio[0]; int result = 0; fpga_debug("STATUS check ... "); if (gpio->dat & FPGA_STATUS) { fpga_debug("high\n"); result = 1; } else fpga_debug("low\n"); return result; }
int fpga_done_fn(int cookie) { volatile immap_t *im = (volatile immap_t *)CONFIG_SYS_IMMR; volatile gpio83xx_t *gpio = (volatile gpio83xx_t *)&im->gpio[0]; int result = 0; udelay(10); fpga_debug("CONF_DONE check ... "); if (gpio->dat & FPGA_CONF_DONE) { fpga_debug("high\n"); result = 1; } else fpga_debug("low\n"); return result; }
int fpga_status_fn(int cookie) { int result = 0; fpga_debug("STATUS check ... "); result = gpio_get_value(GPIO_nSTATUS); if (result < 0) fpga_debug("error\n"); else if (result > 0) fpga_debug("high\n"); else fpga_debug("low\n"); return result; }
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 fpga_config_fn(int assert, int flush, int cookie) { fpga_debug("SET config : %s=%d\n", assert ? "low" : "high", assert); if (flush) { gpio_set_value(GPIO_nCONFIG, !assert); udelay(1); gpio_set_value(GPIO_nCONFIG, assert); } return assert; }
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; }
int fpga_done_fn(int cookie) { int result = 0; /* since revA of BLX, we will not get this signal. */ udelay(10); #ifdef CONFIG_SYS_FPGA_DONT_USE_CONF_DONE fpga_debug("not waiting for CONF_DONE."); result = 1; #else fpga_debug("CONF_DONE check ... "); if (gpio_get_value(GPIO_CONF_DONE)) { fpga_debug("high\n"); result = 1; } else fpga_debug("low\n"); gpio_free(GPIO_CONF_DONE); #endif return result; }
/* 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 fpga_wr_fn(const void *buf, size_t len, int flush, int cookie) { unsigned char *data = (unsigned char *) buf; int i; int headerlen = len - cyclone2.size; if (headerlen < 0) return FPGA_FAIL; else if (headerlen == sizeof(uint32_t)) { const unsigned int fpgavers_len = 11; /* '0x' + 8 hex digits + \0 */ char fpgavers_str[fpgavers_len]; snprintf(fpgavers_str, fpgavers_len, "0x%08x", be32_to_cpup((uint32_t*)data)); setenv("fpgavers", fpgavers_str); } fpga_debug("fpga_wr: buf %p / size %d\n", buf, len); for (i = headerlen; i < len; i++) _write_fpga(data[i]); fpga_debug("-%s\n", __func__); return FPGA_SUCCESS; }
int fpga_config_fn(int assert, int flush, int cookie) { struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio*)MPC5XXX_GPIO; u32 dvo = gpio->simple_dvo; fpga_debug("SET config : %s\n", assert ? "low" : "high"); if (assert) dvo |= FPGA_CONFIG; else dvo &= ~FPGA_CONFIG; if (flush) gpio->simple_dvo = dvo; return assert; }
int fpga_clk_fn(int assert_clk, int flush, int cookie) { struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio*)MPC5XXX_GPIO; u32 dvo = gpio->simple_dvo; fpga_debug("CLOCK %s\n", assert_clk ? "high" : "low"); if (assert_clk) dvo |= FPGA_CCLK; else dvo &= ~FPGA_CCLK; if (flush) gpio->simple_dvo = dvo; return assert_clk; }
int fpga_clk_fn(int assert_clk, int flush, int cookie) { volatile immap_t *im = (volatile immap_t *)CONFIG_SYS_IMMR; volatile gpio83xx_t *gpio = (volatile gpio83xx_t *)&im->gpio[0]; u32 dvo = gpio->dat; fpga_debug("CLOCK %s\n", assert_clk ? "high" : "low"); if (assert_clk) dvo |= FPGA_CCLK; else dvo &= ~FPGA_CCLK; if (flush) gpio->dat = dvo; return assert_clk; }
int fpga_config_fn(int assert, int flush, int cookie) { volatile immap_t *im = (volatile immap_t *)CONFIG_SYS_IMMR; volatile gpio83xx_t *gpio = (volatile gpio83xx_t *)&im->gpio[0]; u32 dvo = gpio->dat; fpga_debug("SET config : %s\n", assert ? "low" : "high"); if (assert) dvo |= FPGA_CONFIG; else dvo &= ~FPGA_CONFIG; if (flush) gpio->dat = dvo; return assert; }