pebble/platform/snowy/boot/src/flash_region.h
2025-01-27 11:38:16 -08:00

96 lines
3.7 KiB
C

/*
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#define SECTOR_SIZE_BYTES 0x20000
#define SECTOR_ADDR_MASK (~(SECTOR_SIZE_BYTES - 1))
#define SUBSECTOR_SIZE_BYTES 0x20000
#define SUBSECTOR_ADDR_MASK (~(SUBSECTOR_SIZE_BYTES - 1))
// Filesystem layout
///////////////////////////////////////
// Space for our flash logs
// NOTE: This range of memory is actually in the special "bottom boot" area of our flash chip
// where the erase sectors are smaller (32k instead of 128k everywhere else).
#define FLASH_REGION_DEBUG_DB_BEGIN 0x0
#define FLASH_REGION_DEBUG_DB_END 0x20000 // 128k
// Regions after this point are in standard, 128kb sized sectors.
// 768kb gap here. We should save some space for non-filesystem things. It also aligns the
// subsequent sectors nicely.
// 1 128kb sector for storing mfg info, see fw/mfg/snowy/mfg_info.c
#define FLASH_REGION_MFG_INFO_BEGIN 0x0e0000
#define FLASH_REGION_MFG_INFO_END 0x100000
// Scratch space for firmware images (normal and recovery).
#define FLASH_REGION_FIRMWARE_SCRATCH_BEGIN 0x100000
#define FLASH_REGION_FIRMWARE_SCRATCH_END 0x200000 // 1024k
#define FLASH_REGION_SAFE_FIRMWARE_BEGIN 0x200000
#define FLASH_REGION_SAFE_FIRMWARE_END 0x300000 // 1024k
#define FLASH_REGION_NEXT_SYSTEM_RESOURCES_BEGIN 0x300000
#define FLASH_REGION_NEXT_SYSTEM_RESOURCES_END 0x380000 // 512k
#define FLASH_REGION_SYSTEM_RESOURCES_BEGIN 0x380000
#define FLASH_REGION_SYSTEM_RESOURCES_END 0x400000 // 512k
// FIXME: The addresses below here are hacky work arounds and hopefully not the final place
// for these things. Hopefully many of them can move to the filesystem. Everything above here
// should be pretty stable.
#define REGISTRY_FLASH_BEGIN 0x400000 //
#define REGISTRY_FLASH_END 0x420000 // 128k
#define FACTORY_REGISTRY_FLASH_BEGIN 0x420000 //
#define FACTORY_REGISTRY_FLASH_END 0x440000 // 128k
#define FLASH_REGION_UNUSED0_BEGIN 0x440000
#define FLASH_REGION_UNUSED0_END 0x480000 // 256k
#define FLASH_REGION_FILESYSTEM_BEGIN 0x0480000
#define FLASH_REGION_FILESYSTEM_END 0x1000000 // 8mb+, aka the rest!
// Constants used for testing flash interface
// NOTE: This purposely overlaps the file system region since the flash test requires a non-critical
// region to operate on. Data in this region will get corrupted and will not get restored after the
// test runs. Any data in this region will have to be manually restored or reinitialized.
#define FLASH_TEST_ADDR_START 0x0800000 // 8MB
#define FLASH_TEST_ADDR_END 0x1000000 // 16MB
#define FLASH_TEST_ADDR_MSK 0x1FFFFFF // test all bits in the 16MB range
#if ((FLASH_REGION_FILESYSTEM_BEGIN > FLASH_TEST_ADDR_START) || (FLASH_REGION_FILESYSTEM_END < FLASH_TEST_ADDR_END))
#error "ERROR: Flash Test space not withing expected range"
#endif
// 0x1000000 is the end of the SPI flash address space.
// FIXME: These regions are used by code paths that are never executed on this flash part. Give
// them bogus values so things still compile
#define FLASH_REGION_APP_BEGIN 0x1000000
#define FLASH_REGION_APP_END 0x1020000
#define FLASH_REGION_APP_RESOURCES_BEGIN 0x1020000
#define FLASH_REGION_APP_RESOURCES_END 0x1040000
#define FLASH_REGION_MIGRATION_BEGIN 0x1040000
#define FLASH_REGION_MIGRATION_END 0x1060000