| # Copyright (c) 2023 Bjarki Arge Andreasen | 
 | # SPDX-License-Identifier: Apache-2.0 | 
 |  | 
 | description: | | 
 |   This binding describes the Atmel SAM flash area layout. | 
 |  | 
 |   The Atmel SAM flash area varies in write-block-size, memory area, | 
 |   and the layout of erase-blocks. | 
 |  | 
 |   E.g. the flash area layout of the ATSAM4E16C: | 
 |  | 
 |     |--------------------| | 
 |     | 8 Kbytes           |  erase block size = 2048 | 
 |     |--------------------| | 
 |     | 8 Kbytes           |  erase block size = 2048 | 
 |     |--------------------| | 
 |     | 48 Kbytes          |  erase block size = 4096 | 
 |     |--------------------| | 
 |     | 64 Kbytes          |  erase block size = 4096 | 
 |     |--------------------| | 
 |     | ...                | | 
 |  | 
 |   The ATSAM4E16C has a flash area which is 1000Kbytes | 
 |   (1024 * 1024 bytes) with a write-block-size of 8 bytes. The first | 
 |   16 Kbytes can be erased in blocks of 2048 bytes | 
 |   (8 blocks of 2048 bytes), the remaining flash area is erasable | 
 |   in blocks of 4096 bytes (252 blocks of 4096 bytes). | 
 |  | 
 |   This flash area layout would described as: | 
 |  | 
 |     / { | 
 |       soc { | 
 |         eefc: flash-controller@400e0a00 { | 
 |         compatible = "atmel,sam-flash-controller"; | 
 |         reg = <0x400e0a00 0x200>; | 
 |         clocks = <&pmc PMC_TYPE_PERIPHERAL 6>; | 
 |         status = "okay"; | 
 |  | 
 |         #address-cells = <1>; | 
 |         #size-cells = <1>; | 
 |         #erase-block-cells = <2>; | 
 |  | 
 |         flash0: flash@400000 { | 
 |           compatible = "atmel,sam-flash", "soc-nv-flash"; | 
 |           reg = <0x400000 0x100000>; | 
 |           write-block-size = <8>; | 
 |           erase-block-size = <4096>; | 
 |           erase-blocks = <&eefc 8 2048>, <&eefc 252 4096>; | 
 |         }; | 
 |       }; | 
 |     }; | 
 |  | 
 |   Notes: | 
 |     The flash area layout node flash0 should have both this | 
 |     compatible, "atmel,sam-flash", and the "soc-nv-flash" | 
 |     compatible. The latter is used from mcuboot and other | 
 |     modules to identify the flash area. | 
 |  | 
 |     If partitions are used, remember that their addresses are | 
 |     offsets relative to the flash area address.  E.g. using | 
 |     mcuboot and a allocating a storage partition: | 
 |  | 
 |       &flash0 { | 
 |         partitions { | 
 |           compatible = "fixed-partitions"; | 
 |           #address-cells = <1>; | 
 |           #size-cells = <1>; | 
 |  | 
 |           boot_partition: partition@0 { | 
 |             label = "mcuboot"; | 
 |             reg = <0x0 0x10000>; | 
 |           }; | 
 |  | 
 |           slot0_partition: partition@10000 { | 
 |             label = "slot0"; | 
 |             reg = <0x10000 0x70000>; | 
 |           }; | 
 |  | 
 |           slot1_partition: partition@80000 { | 
 |             label = "slot1"; | 
 |             reg = <0x80000 0x70000>; | 
 |           }; | 
 |  | 
 |           storage_partition: partition@f0000 { | 
 |             label = "storage"; | 
 |             reg = <0xf0000 0x100000>; | 
 |           }; | 
 |         }; | 
 |       }; | 
 |  | 
 | compatible: "atmel,sam-flash" | 
 |  | 
 | include: base.yaml | 
 |  | 
 | properties: | 
 |   write-block-size: | 
 |     type: int | 
 |     description: | | 
 |       The flash controller is limited by hardware to writing blocks of | 
 |       this size, aligned to this size, in bytes, to previously erased | 
 |       flash, within the flash memory area. | 
 |  | 
 |   erase-block-size: | 
 |     type: int | 
 |     description: | | 
 |       The flash controller is limited by hardware to erase whole | 
 |       blocks of flash at a time. This property describes the largest | 
 |       erase block size in erase-blocks. | 
 |  | 
 |   erase-blocks: | 
 |     type: phandle-array | 
 |     required: true | 
 |     description: | | 
 |       The flash controller is limited by hardware to erase whole | 
 |       blocks of flash at a time. This property describes the layout of | 
 |       the erase-blocks, which can vary in size within the flash memory | 
 |       area. |