2. .write (may be called once or multiple times)
  3. .write_complete
 
-The .write_init function will prepare the FPGA to receive the image data.
+The .write_init function will prepare the FPGA to receive the image data.  The
+buffer passed into .write_init will be atmost .initial_header_size bytes long,
+if the whole bitstream is not immediately available then the core code will
+buffer up at least this much before starting.
 
 The .write function writes a buffer to the FPGA. The buffer may be contain the
 whole FPGA image or may be a smaller chunk of an FPGA image.  In the latter
 
        /*
         * Call the low level driver's write_init function.  This will do the
         * device-specific things to get the FPGA into the state where it is
-        * ready to receive an FPGA image.
+        * ready to receive an FPGA image. The low level driver only gets to
+        * see the first initial_header_size bytes in the buffer.
         */
        mgr->state = FPGA_MGR_STATE_WRITE_INIT;
-       ret = mgr->mops->write_init(mgr, info, buf, count);
+       ret = mgr->mops->write_init(mgr, info, buf,
+                                   min(mgr->mops->initial_header_size, count));
        if (ret) {
                dev_err(dev, "Error preparing FPGA for writing\n");
                mgr->state = FPGA_MGR_STATE_WRITE_INIT_ERR;
 
 }
 
 static const struct fpga_manager_ops socfpga_a10_fpga_mgr_ops = {
+       .initial_header_size = (RBF_DECOMPRESS_OFFSET + 1) * 4,
        .state = socfpga_a10_fpga_state,
        .write_init = socfpga_a10_fpga_write_init,
        .write = socfpga_a10_fpga_write,
 
 
 /**
  * struct fpga_manager_ops - ops for low level fpga manager drivers
+ * @initial_header_size: Maximum number of bytes that should be passed into write_init
  * @state: returns an enum value of the FPGA's state
  * @write_init: prepare the FPGA to receive confuration data
  * @write: write count bytes of configuration data to the FPGA
  * called, so leaving them out is fine.
  */
 struct fpga_manager_ops {
+       size_t initial_header_size;
        enum fpga_mgr_states (*state)(struct fpga_manager *mgr);
        int (*write_init)(struct fpga_manager *mgr,
                          struct fpga_image_info *info,