15932d194SAntonio Nino Diaz /* 2*8d1a04bdSTamas Ban * Copyright (c) 2017-2024, Arm Limited and Contributors. All rights reserved. 35932d194SAntonio Nino Diaz * 45932d194SAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause 55932d194SAntonio Nino Diaz */ 65932d194SAntonio Nino Diaz 75932d194SAntonio Nino Diaz #ifndef SDS_H 85932d194SAntonio Nino Diaz #define SDS_H 95932d194SAntonio Nino Diaz 105932d194SAntonio Nino Diaz /* SDS Structure Identifier defines */ 115932d194SAntonio Nino Diaz /* AP CPU INFO defines */ 125932d194SAntonio Nino Diaz #define SDS_AP_CPU_INFO_STRUCT_ID 1 135932d194SAntonio Nino Diaz #define SDS_AP_CPU_INFO_PRIMARY_CPUID_OFFSET 0x0 145932d194SAntonio Nino Diaz #define SDS_AP_CPU_INFO_PRIMARY_CPUID_SIZE 0x4 155932d194SAntonio Nino Diaz 165932d194SAntonio Nino Diaz /* ROM Firmware Version defines */ 175932d194SAntonio Nino Diaz #define SDS_ROM_VERSION_STRUCT_ID 2 185932d194SAntonio Nino Diaz #define SDS_ROM_VERSION_OFFSET 0x0 195932d194SAntonio Nino Diaz #define SDS_ROM_VERSION_SIZE 0x4 205932d194SAntonio Nino Diaz 215932d194SAntonio Nino Diaz /* RAM Firmware version defines */ 225932d194SAntonio Nino Diaz #define SDS_RAM_VERSION_STRUCT_ID 3 235932d194SAntonio Nino Diaz #define SDS_RAM_VERSION_OFFSET 0x0 245932d194SAntonio Nino Diaz #define SDS_RAM_VERSION_SIZE 0x4 255932d194SAntonio Nino Diaz 265932d194SAntonio Nino Diaz /* Platform Identity defines */ 275932d194SAntonio Nino Diaz #define SDS_PLATFORM_IDENTITY_STRUCT_ID 4 285932d194SAntonio Nino Diaz #define SDS_PLATFORM_IDENTITY_ID_OFFSET 0x0 295932d194SAntonio Nino Diaz #define SDS_PLATFORM_IDENTITY_ID_SIZE 0x4 305932d194SAntonio Nino Diaz #define SDS_PLATFORM_IDENTITY_ID_CONFIG_SHIFT 28 315932d194SAntonio Nino Diaz #define SDS_PLATFORM_IDENTITY_ID_CONFIG_WIDTH 4 325932d194SAntonio Nino Diaz #define SDS_PLATFORM_IDENTITY_ID_CONFIG_MASK \ 335932d194SAntonio Nino Diaz ((1 << SDS_PLATFORM_IDENTITY_ID_CONFIG_WIDTH) - 1) 345932d194SAntonio Nino Diaz 355932d194SAntonio Nino Diaz #define SDS_PLATFORM_IDENTITY_PLAT_TYPE_OFFSET 0x4 365932d194SAntonio Nino Diaz #define SDS_PLATFORM_IDENTITY_PLAT_TYPE_SIZE 0x4 375932d194SAntonio Nino Diaz 385932d194SAntonio Nino Diaz /* Reset Syndrome defines */ 395932d194SAntonio Nino Diaz #define SDS_RESET_SYNDROME_STRUCT_ID 5 405932d194SAntonio Nino Diaz #define SDS_RESET_SYNDROME_OFFSET 0 415932d194SAntonio Nino Diaz #define SDS_RESET_SYNDROME_SIZE 4 425932d194SAntonio Nino Diaz #define SDS_RESET_SYNDROME_POW_ON_RESET_BIT (1 << 0) 435932d194SAntonio Nino Diaz #define SDS_RESET_SYNDROME_SCP_WD_RESET_BIT (1 << 1) 445932d194SAntonio Nino Diaz #define SDS_RESET_SYNDROME_AP_WD_RESET_BIT (1 << 2) 455932d194SAntonio Nino Diaz #define SDS_RESET_SYNDROME_SYS_RESET_REQ_BIT (1 << 3) 465932d194SAntonio Nino Diaz #define SDS_RESET_SYNDROME_M3_LOCKUP_BIT (1 << 4) 475932d194SAntonio Nino Diaz 485932d194SAntonio Nino Diaz /* SCP Firmware Feature Availability defines */ 495932d194SAntonio Nino Diaz #define SDS_FEATURE_AVAIL_STRUCT_ID 6 505932d194SAntonio Nino Diaz #define SDS_FEATURE_AVAIL_OFFSET 0 515932d194SAntonio Nino Diaz #define SDS_FEATURE_AVAIL_SIZE 4 525932d194SAntonio Nino Diaz #define SDS_FEATURE_AVAIL_SCP_RAM_READY_BIT (1 << 0) 535932d194SAntonio Nino Diaz #define SDS_FEATURE_AVAIL_DMC_READY_BIT (1 << 1) 545932d194SAntonio Nino Diaz #define SDS_FEATURE_AVAIL_MSG_IF_READY_BIT (1 << 2) 555932d194SAntonio Nino Diaz 565932d194SAntonio Nino Diaz /* SCP BL2 Image Metadata defines */ 575932d194SAntonio Nino Diaz #define SDS_SCP_IMG_STRUCT_ID 9 585932d194SAntonio Nino Diaz #define SDS_SCP_IMG_FLAG_OFFSET 0 595932d194SAntonio Nino Diaz #define SDS_SCP_IMG_FLAG_SIZE 4 605932d194SAntonio Nino Diaz #define SDS_SCP_IMG_VALID_FLAG_BIT (1 << 0) 615932d194SAntonio Nino Diaz #define SDS_SCP_IMG_ADDR_OFFSET 4 625932d194SAntonio Nino Diaz #define SDS_SCP_IMG_ADDR_SIZE 4 635932d194SAntonio Nino Diaz #define SDS_SCP_IMG_SIZE_OFFSET 8 645932d194SAntonio Nino Diaz #define SDS_SCP_IMG_SIZE_SIZE 4 655932d194SAntonio Nino Diaz 665932d194SAntonio Nino Diaz /* SDS Driver Error Codes */ 675932d194SAntonio Nino Diaz #define SDS_OK 0 685932d194SAntonio Nino Diaz #define SDS_ERR_FAIL -1 695932d194SAntonio Nino Diaz #define SDS_ERR_INVALID_PARAMS -2 705932d194SAntonio Nino Diaz #define SDS_ERR_STRUCT_NOT_FOUND -3 715932d194SAntonio Nino Diaz #define SDS_ERR_STRUCT_NOT_FINALIZED -4 725932d194SAntonio Nino Diaz 73d5dfdeb6SJulius Werner #ifndef __ASSEMBLER__ 745932d194SAntonio Nino Diaz #include <stddef.h> 755932d194SAntonio Nino Diaz #include <stdint.h> 765932d194SAntonio Nino Diaz 775932d194SAntonio Nino Diaz typedef enum { 785932d194SAntonio Nino Diaz SDS_ACCESS_MODE_NON_CACHED, 795932d194SAntonio Nino Diaz SDS_ACCESS_MODE_CACHED, 805932d194SAntonio Nino Diaz } sds_access_mode_t; 815932d194SAntonio Nino Diaz 82*8d1a04bdSTamas Ban /* 83*8d1a04bdSTamas Ban * The following structure describes a SDS memory region. Its items are used 84*8d1a04bdSTamas Ban * to track and maintain the state of the memory region reserved for usage 85*8d1a04bdSTamas Ban * by the SDS framework. 86*8d1a04bdSTamas Ban * 87*8d1a04bdSTamas Ban * The base address of the SDS memory region is platform specific. The 88*8d1a04bdSTamas Ban * SDS description structure must already contain the address when it is 89*8d1a04bdSTamas Ban * returned by the plat_sds_get_regions() platform API during SDS region 90*8d1a04bdSTamas Ban * initialization. 91*8d1a04bdSTamas Ban * The size of the SDS memory region is dynamically discovered during the 92*8d1a04bdSTamas Ban * initialization of the region and written into the 'size' item of the 93*8d1a04bdSTamas Ban * SDS description structure. 94*8d1a04bdSTamas Ban */ 95*8d1a04bdSTamas Ban typedef struct { 96*8d1a04bdSTamas Ban uintptr_t base; /* Pointer to the base of the SDS memory region */ 97*8d1a04bdSTamas Ban size_t size; /* Size of the SDS memory region in bytes */ 98*8d1a04bdSTamas Ban } sds_region_desc_t; 99*8d1a04bdSTamas Ban 100*8d1a04bdSTamas Ban /* API to get the platform specific SDS region description(s) */ 101*8d1a04bdSTamas Ban sds_region_desc_t *plat_sds_get_regions(unsigned int *region_count); 102*8d1a04bdSTamas Ban 103*8d1a04bdSTamas Ban int sds_init(unsigned int region_id); 104*8d1a04bdSTamas Ban int sds_struct_exists(unsigned int region_id, unsigned int structure_id); 105*8d1a04bdSTamas Ban int sds_struct_read(unsigned int region_id, uint32_t structure_id, 106*8d1a04bdSTamas Ban unsigned int fld_off, void *data, size_t size, sds_access_mode_t mode); 107*8d1a04bdSTamas Ban int sds_struct_write(unsigned int region_id, uint32_t structure_id, 108*8d1a04bdSTamas Ban unsigned int fld_off, void *data, size_t size, sds_access_mode_t mode); 109d5dfdeb6SJulius Werner #endif /*__ASSEMBLER__ */ 1105932d194SAntonio Nino Diaz 1115932d194SAntonio Nino Diaz #endif /* SDS_H */ 112