hw/nvram/eeprom_at24c: Add init_rom field and at24c_eeprom_init_rom helper

Allows users to specify binary data to initialize an EEPROM, allowing users to
emulate data programmed at manufacturing time.

- Added init_rom and init_rom_size attributes to TYPE_AT24C_EE
- Added at24c_eeprom_init_rom helper function to initialize attributes
- If -drive property is provided, it overrides init_rom data

Signed-off-by: Peter Delevoryas <peter@pjd.dev>
Reviewed-by: Joel Stanley <joel@jms.id.au>
Reviewed-by: Corey Minyard <cminyard@mvista.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Tested-by: Ninad Palsule <ninadpalsule@us.ibm.com>
Link: https://lore.kernel.org/r/20230128060543.95582-4-peter@pjd.dev
Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
Peter Delevoryas 2023-02-07 09:02:04 +01:00 committed by Cédric Le Goater
parent 9077e09a13
commit 9f782e9e82
2 changed files with 47 additions and 5 deletions

View file

@ -20,4 +20,20 @@
*/
I2CSlave *at24c_eeprom_init(I2CBus *bus, uint8_t address, uint32_t rom_size);
/*
* Create and realize an AT24C EEPROM device on the heap with initial data.
* @bus: I2C bus to put it on
* @address: I2C address of the EEPROM slave when put on a bus
* @rom_size: size of the EEPROM
* @init_rom: Array of bytes to initialize EEPROM memory with
* @init_rom_size: Size of @init_rom, must be less than or equal to @rom_size
*
* Create the device state structure, initialize it, put it on the specified
* @bus, and drop the reference to it (the device is realized). Copies the data
* from @init_rom to the beginning of the EEPROM memory buffer.
*/
I2CSlave *at24c_eeprom_init_rom(I2CBus *bus, uint8_t address, uint32_t rom_size,
const uint8_t *init_rom, uint32_t init_rom_size);
#endif