[prim] documentation update for flash
Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/ip/prim/doc/prim_flash.md b/hw/ip/prim/doc/prim_flash.md
index eab83ef..cee5bda 100644
--- a/hw/ip/prim/doc/prim_flash.md
+++ b/hw/ip/prim/doc/prim_flash.md
@@ -48,21 +48,24 @@
### Flash Request/Response Signals
-Name | In/Out | Description
--------------|--------|---------------------------------
-rd | input | read request
-prog | input | program request
-prog_last | input | last program beat
-prog_type | input | type of program requested: currently there are only two types, program normal and program repair
-pg_erase | input | page erase request
-bk_erase | output | bank erase request
-addr | input | requested transaction address
-part | input | requested transaction partition
-info_sel | input | if requested transaction is information partition, the type of information partition accessed
-he | output | high endurance enable for requested address
-prog_data | input | program data
-ack | output | transction acknowledgement
-rd_data | output | transaction done
+Name | In/Out | Description
+-------------------|--------|---------------------------------
+rd | input | read request
+prog | input | program request
+prog_last | input | last program beat
+prog_type | input | type of program requested: currently there are only two types, program normal and program repair
+pg_erase | input | page erase request
+bk_erase | output | bank erase request
+erase_suspend | input | erase suspend request
+addr | input | requested transaction address
+part | input | requested transaction partition
+info_sel | input | if requested transaction is information partition, the type of information partition accessed
+he | output | high endurance enable for requested address
+prog_data | input | program data
+ack | output | transction acknowledge
+rd_data | output | transaction read data
+done | output | transaction done
+erase_suspend_done | output | erase suspend done
# Theory of Operations
@@ -79,7 +82,42 @@
Whereas a program or erase may have a gap extending up to uS or even mS.
It is the flash wrapper's decision on how many outstanding transaction to accept.
-The following diagram is one such example:
+The following are examples for read, program and erase transactions.
+
+### Read
+{{< wavejson >}}
+{signal: [
+ {name: 'clk_i', wave: 'p................'},
+ {name: 'rd_i', wave: '011..0.1..0......'},
+ {name: 'addr_i', wave: 'x22..x.2..x......'},
+ {name: 'ack_o', wave: '1.0.10...10......'},
+ {name: 'done_o', wave: '0...10...10....10'},
+ {name: 'rd_data_o', wave: 'x...2x...2x....2x'},
+]}
+{{< /wavejson >}}
+
+### Program
+{{< wavejson >}}
+{signal: [
+ {name: 'clk_i', wave: 'p................'},
+ {name: 'prog_i', wave: '011...0.1....0...'},
+ {name: 'prog_type_i', wave: 'x22...x.2....x...'},
+ {name: 'prog_data_i', wave: 'x22...x.2....x...'},
+ {name: 'prog_last_i', wave: '0.......1....0...'},
+ {name: 'ack_o', wave: '010..10.....10...'},
+ {name: 'done_o', wave: '0..............10'},
+]}
+{{< /wavejson >}}
+
+### Erase
+{{< wavejson >}}
+{signal: [
+ {name: 'clk_i', wave: 'p................'},
+ {name: '*_erase_i', wave: '01.0.........1.0.'},
+ {name: 'ack_o', wave: '0.10..........10.'},
+ {name: 'done_o', wave: '0.....10.........'},
+]}
+{{< /wavejson >}}
## Initlialization
@@ -100,3 +138,20 @@
## Program Type
The `prog_type` input informs the flash wrapper what type of program operation it should perform.
A program type not supported by the wrapper, indicated through `prog_type_avail` shall never be issued to the flash wrapper.
+
+## Erase Suspend
+Since erase operations can take a significant amount of time, sometimes it is necessary for software or other components to suspend the operation.
+The suspend operation follows a similar request (`erase_suspend_req` and done (`erase_suspend_done`) interface.
+When the erase suspend completes, the flash wrapper circuitry also asserts `done` for the ongoing erase transaction to ensure all hardware gracefully completes.
+
+The following is an example diagram
+{{< wavejson >}}
+{signal: [
+ {name: 'clk_i', wave: 'p................'},
+ {name: 'pg_erase_i', wave: '01............0..'},
+ {name: 'ack_o', wave: '1.0..............'},
+ {name: 'erase_suspend_i', wave: '0.....1.......0..'},
+ {name: 'done_o', wave: '0............10..'},
+ {name: 'erase_suspend_done_o', wave: '0............10..'},
+]}
+{{< /wavejson >}}