+static void zynqimage_parse_initparams(struct zynq_header *zynqhdr,
+ const char *filename)
+{
+ FILE *fp;
+ struct zynq_reginit reginit;
+ unsigned int reg_count = 0;
+ int r, err;
+ struct stat path_stat;
+
+ /* Expect a table of register-value pairs, e.g. "0x12345678 0x4321" */
+ fp = fopen(filename, "r");
+ if (!fp) {
+ fprintf(stderr, "Cannot open initparams file: %s\n", filename);
+ exit(1);
+ }
+
+ err = fstat(fileno(fp), &path_stat);
+ if (err) {
+ fclose(fp);
+ return;
+ }
+
+ if (!S_ISREG(path_stat.st_mode)) {
+ fclose(fp);
+ return;
+ }
+
+ do {
+ r = fscanf(fp, "%x %x", ®init.address, ®init.data);
+ if (r == 2) {
+ zynqhdr->register_init[reg_count] = reginit;
+ ++reg_count;
+ }
+ r = fscanf(fp, "%*[^\n]\n"); /* Skip to next line */
+ } while ((r != EOF) && (reg_count < HEADER_REGINITS));
+ fclose(fp);
+}
+