diff options
| -rw-r--r-- | common/spartan2.c | 18 | ||||
| -rw-r--r-- | common/spartan3.c | 18 | ||||
| -rw-r--r-- | include/spartan2.h | 1 | ||||
| -rw-r--r-- | include/spartan3.h | 1 | 
4 files changed, 34 insertions, 4 deletions
| diff --git a/common/spartan2.c b/common/spartan2.c index 457009f85..ef107bcbc 100644 --- a/common/spartan2.c +++ b/common/spartan2.c @@ -561,6 +561,13 @@ static int Spartan2_ss_load (Xilinx_desc * desc, void *buf, size_t bsize)  		}  		putc ('\n');			/* terminate the dotted line */ +		/* +		 * Run the post configuration function if there is one. +		 */ +		if (*fn->post) { +			(*fn->post) (cookie); +		} +  #ifdef CFG_FPGA_PROG_FEEDBACK  		if (ret_val == FPGA_SUCCESS) {  			puts ("Done.\n"); @@ -615,8 +622,10 @@ static int Spartan2_ss_reloc (Xilinx_desc * desc, ulong reloc_offset)  			PRINTF ("%s: Relocating descriptor at 0x%p\n", __FUNCTION__,  					desc); -			addr = (ulong) (fn->pre) + reloc_offset; -			fn_r->pre = (Xilinx_pre_fn) addr; +			if (fn->pre) { +				addr = (ulong) (fn->pre) + reloc_offset; +				fn_r->pre = (Xilinx_pre_fn) addr; +			}  			addr = (ulong) (fn->pgm) + reloc_offset;  			fn_r->pgm = (Xilinx_pgm_fn) addr; @@ -633,6 +642,11 @@ static int Spartan2_ss_reloc (Xilinx_desc * desc, ulong reloc_offset)  			addr = (ulong) (fn->wr) + reloc_offset;  			fn_r->wr = (Xilinx_wr_fn) addr; +			if (fn->post) { +				addr = (ulong) (fn->post) + reloc_offset; +				fn_r->post = (Xilinx_post_fn) addr; +			} +  			fn_r->relocated = TRUE;  		} else { diff --git a/common/spartan3.c b/common/spartan3.c index 17379eb8b..56a172e0b 100644 --- a/common/spartan3.c +++ b/common/spartan3.c @@ -566,6 +566,13 @@ static int Spartan3_ss_load (Xilinx_desc * desc, void *buf, size_t bsize)  		}  		putc ('\n');			/* terminate the dotted line */ +		/* +		 * Run the post configuration function if there is one. +		 */ +		if (*fn->post) { +			(*fn->post) (cookie); +		} +  #ifdef CFG_FPGA_PROG_FEEDBACK  		if (ret_val == FPGA_SUCCESS) {  			puts ("Done.\n"); @@ -620,8 +627,10 @@ static int Spartan3_ss_reloc (Xilinx_desc * desc, ulong reloc_offset)  			PRINTF ("%s: Relocating descriptor at 0x%p\n", __FUNCTION__,  					desc); -			addr = (ulong) (fn->pre) + reloc_offset; -			fn_r->pre = (Xilinx_pre_fn) addr; +			if (fn->pre) { +				addr = (ulong) (fn->pre) + reloc_offset; +				fn_r->pre = (Xilinx_pre_fn) addr; +			}  			addr = (ulong) (fn->pgm) + reloc_offset;  			fn_r->pgm = (Xilinx_pgm_fn) addr; @@ -638,6 +647,11 @@ static int Spartan3_ss_reloc (Xilinx_desc * desc, ulong reloc_offset)  			addr = (ulong) (fn->wr) + reloc_offset;  			fn_r->wr = (Xilinx_wr_fn) addr; +			if (fn->post) { +				addr = (ulong) (fn->post) + reloc_offset; +				fn_r->post = (Xilinx_post_fn) addr; +			} +  			fn_r->relocated = TRUE;  		} else { diff --git a/include/spartan2.h b/include/spartan2.h index d2e81e38a..f3cde688f 100644 --- a/include/spartan2.h +++ b/include/spartan2.h @@ -58,6 +58,7 @@ typedef struct {  	Xilinx_init_fn	init;  	Xilinx_done_fn	done;  	Xilinx_wr_fn	wr; +	Xilinx_post_fn	post;  	int           	relocated;  } Xilinx_Spartan2_Slave_Serial_fns; diff --git a/include/spartan3.h b/include/spartan3.h index 65a3f5a4d..529aade65 100644 --- a/include/spartan3.h +++ b/include/spartan3.h @@ -58,6 +58,7 @@ typedef struct {  	Xilinx_init_fn	init;  	Xilinx_done_fn	done;  	Xilinx_wr_fn	wr; +	Xilinx_post_fn	post;  	int           	relocated;  } Xilinx_Spartan3_Slave_Serial_fns; |