zephyr/boards/x86/qemu_x86/qemu_x86.dts
Laczen JMS 232272cff8 drivers: eeprom: EEPROM emulation in flash memory
This driver emulates a EEPROM device in flash.

Reworked implementation with modified flash layout.

The emulation represents the EEPROM in flash as a region that is a
direct map of the eeprom data followed by a region where changes to
the eeprom data is stored. Changes are written as address-data
combinations. The size of such a combination is determined by the
flash write block size and the size of the eeprom (required address
space), with a minimum of 4 byte.
The eeprom page needs to be a multiple of the flash page. Multiple
eeprom pages is also so supported and increases the number of writes
that can be performed.

The eeprom size, pagesize and the flash partition used for the eeprom
are defined in the dts. The flash partition should allow at least two
eeprom pages. For fast read access a rambuffer can be enabled for the
eeprom (by setting the option rambuf in the dts).

Signed-off-by: Laczen JMS <laczenjms@gmail.com>
2021-02-19 14:06:15 +01:00

137 lines
2.4 KiB
Plaintext

/* SPDX-License-Identifier: Apache-2.0 */
/dts-v1/;
#include <mem.h>
#ifndef DT_DRAM_BASE
#define DT_DRAM_BASE 0
#endif
#ifndef DT_DRAM_SIZE
#define DT_DRAM_SIZE DT_SIZE_K(4096)
#endif
#define DT_FLASH_SIZE DT_SIZE_K(4096)
#include <ia32.dtsi>
/ {
model = "QEMU X86 emulator";
compatible = "qemu,x86_emulator";
flash0: flash@500000 {
compatible = "soc-nv-flash";
reg = <0x00500000 DT_FLASH_SIZE>;
};
aliases {
uart-0 = &uart0;
uart-1 = &uart1;
eeprom-0 = &eeprom0;
eeprom-1 = &eeprom1;
};
chosen {
zephyr,sram = &dram0;
zephyr,flash = &flash0;
zephyr,console = &uart0;
zephyr,shell-uart = &uart0;
zephyr,bt-uart = &uart1;
zephyr,uart-pipe = &uart1;
zephyr,bt-mon-uart = &uart1;
zephyr,code-partition = &slot0_partition;
zephyr,flash-controller = &sim_flash;
};
soc {
eth0: eth@febc0000 {
compatible = "intel,e1000";
reg = <0xfebc0000 0x100>;
label = "eth0";
interrupts = <11 IRQ_TYPE_LOWEST_EDGE_RISING 3>;
interrupt-parent = <&intc>;
status = "okay";
};
};
sim_flash: sim_flash {
compatible = "zephyr,sim-flash";
label = "FLASH_SIMULATOR";
#address-cells = <1>;
#size-cells = <1>;
erase-value = <0xff>;
flash_sim0: flash_sim@0 {
compatible = "soc-nv-flash";
reg = <0x00000000 DT_SIZE_K(1024)>;
erase-block-size = <1024>;
write-block-size = <4>;
};
};
eeprom1: eeprom1 {
status = "okay";
compatible = "zephyr,emu-eeprom";
label = "EEPROM_1";
size = <DT_SIZE_K(4)>;
pagesize = <DT_SIZE_K(8)>;
partition = <&eepromemu_partition>;
rambuf;
};
eeprom0: eeprom0 {
status = "okay";
compatible = "zephyr,sim-eeprom";
label = "EEPROM_0";
size = <DT_SIZE_K(4)>;
};
};
&uart0 {
status = "okay";
current-speed = <115200>;
};
&uart1 {
status = "okay";
current-speed = <115200>;
};
&hpet {
status = "okay";
};
&flash_sim0 {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
/*
* Storage partition will be used by FCB/LittleFS/NVS
* if enabled.
*/
storage_partition: partition@1000 {
label = "storage";
reg = <0x00001000 0x00010000>;
};
slot0_partition: partition@11000 {
label = "image-0";
reg = <0x00011000 0x00010000>;
};
slot1_partition: partition@21000 {
label = "image-1";
reg = <0x00021000 0x00010000>;
};
eepromemu_partition: partition@31000 {
label = "eeprom-emu";
reg = <0x00031000 0x00010000>;
};
};
};