Add M28F parallel flash driver

Add just enough code to erase & write STMicro M28F chips. Similar
chip series that should be compatible include CAT28F and TK28F.

Probing should be fully compatible to the already supported Intel
28F series (82802AB probing).

Datasheets used:
https://www.mouser.com/catalog/specsheets/STMicroelectronics_M28F256.pdf
https://tekmos.com/docmandocuments/products/flash-memory/100-tk28f010
https://www.onsemi.com/download/data-sheet/pdf/cat28f010-d.pdf

Change-Id: Iab4860558a8ddc48b529bb3d8392d48473191769
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/521
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
diff --git a/include/chipdrivers/memory_bus.h b/include/chipdrivers/memory_bus.h
index 6ffa367..b4eede4 100644
--- a/include/chipdrivers/memory_bus.h
+++ b/include/chipdrivers/memory_bus.h
@@ -53,6 +53,10 @@
 int printlock_regspace2_block_eraser_0(struct flashprog_flashctx *);
 int printlock_regspace2_block_eraser_1(struct flashprog_flashctx *);
 
+/* m28f.c */
+int write_m28f(struct flashprog_flashctx *, const uint8_t *src, unsigned int pos, unsigned int len);
+int erase_m28f(struct flashprog_flashctx *, unsigned int addr, unsigned int blocksize);
+
 /* sst28sf040.c */
 int erase_chip_28sf040(struct flashprog_flashctx *, unsigned int addr, unsigned int blocklen);
 int erase_sector_28sf040(struct flashprog_flashctx *, unsigned int address, unsigned int sector_size);