| # 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. |