blob: 86192ff4da628d29b340487c42394db79a724c20 [file] [log] [blame]
Sughosh Ganu18f513d2018-05-16 17:22:35 +05301/*
Rohit Mathewa0dd3072024-02-03 17:22:54 +00002 * Copyright (c) 2018-2024, Arm Limited and Contributors. All rights reserved.
Sughosh Ganu18f513d2018-05-16 17:22:35 +05303 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
Rohit Mathewa0dd3072024-02-03 17:22:54 +00007#ifndef NRD_RAS_H
8#define NRD_RAS_H
Sughosh Ganu18f513d2018-05-16 17:22:35 +05309
Omkar Anand Kulkarniaa8abf02023-05-31 11:29:17 +053010#include <lib/extensions/ras.h>
11#include <plat/common/platform.h>
12
13/*
14 * Interrupt type supported.
15 * - SGI_RAS_INTR_TYPE_SPI: Denotes a SPI interrupt
16 * - SGI_RAS_INTR_TYPE_PPI: Denotes a PPI interrupt
17 */
18#define SGI_RAS_INTR_TYPE_SPI 0
19#define SGI_RAS_INTR_TYPE_PPI 1
20
Sughosh Ganu18f513d2018-05-16 17:22:35 +053021/*
Omkar Anand Kulkarniaa8abf02023-05-31 11:29:17 +053022 * MM Communicate information structure. Required to generate MM Communicate
23 * payload to be shared with Standalone MM.
Sughosh Ganu18f513d2018-05-16 17:22:35 +053024 */
Omkar Anand Kulkarniaa8abf02023-05-31 11:29:17 +053025typedef struct mm_communicate_header {
26 struct efi_guid header_guid;
27 size_t message_len;
28 uint8_t data[1];
29} mm_communicate_header_t;
30
31/* RAS error info data structure. */
Rohit Mathew0ec6ed92024-02-03 18:39:10 +000032struct nrd_ras_ev_map {
Sughosh Ganu18f513d2018-05-16 17:22:35 +053033 int sdei_ev_num; /* SDEI Event number */
34 int intr; /* Physical intr number */
Omkar Anand Kulkarniaa8abf02023-05-31 11:29:17 +053035 int intr_type; /* Interrupt Type (SPI or PPI)*/
36};
37
38/* RAS config data structure. Must be defined by each platform. */
Rohit Mathew0ec6ed92024-02-03 18:39:10 +000039struct plat_nrd_ras_config {
40 struct nrd_ras_ev_map *ev_map;
Omkar Anand Kulkarniaa8abf02023-05-31 11:29:17 +053041 int ev_map_size;
Sughosh Ganu18f513d2018-05-16 17:22:35 +053042};
43
Omkar Anand Kulkarniaa8abf02023-05-31 11:29:17 +053044/*
45 * Find event map for a given interrupt number. On success, returns pointer
46 * to the event map. On error, returns NULL.
47 */
Rohit Mathew0ec6ed92024-02-03 18:39:10 +000048struct nrd_ras_ev_map *nrd_find_ras_event_map_by_intr(uint32_t intr_num);
Omkar Anand Kulkarniaa8abf02023-05-31 11:29:17 +053049
50/*
51 * Initialization function for the framework.
52 *
53 * Registers RAS config provided by the platform and then configures and
54 * enables interrupt for each registered error. On success, return 0.
55 */
Rohit Mathew0ec6ed92024-02-03 18:39:10 +000056int nrd_ras_platform_setup(struct plat_nrd_ras_config *config);
Sughosh Ganu18f513d2018-05-16 17:22:35 +053057
Omkar Anand Kulkarni43525c42023-05-31 12:14:10 +053058/* Base element RAM RAS interrupt handler function. */
Rohit Mathew0ec6ed92024-02-03 18:39:10 +000059int nrd_ras_sram_intr_handler(const struct err_record_info *err_rec,
Omkar Anand Kulkarni43525c42023-05-31 12:14:10 +053060 int probe_data,
61 const struct err_handler_data *const data);
62
Omkar Anand Kulkarni1ab5c602023-06-27 16:32:47 +053063/* CPU RAS interrupt handler */
Rohit Mathew0ec6ed92024-02-03 18:39:10 +000064int nrd_ras_cpu_intr_handler(const struct err_record_info *err_rec,
Omkar Anand Kulkarni1ab5c602023-06-27 16:32:47 +053065 int probe_data,
66 const struct err_handler_data *const data);
67
Rohit Mathewa0dd3072024-02-03 17:22:54 +000068#endif /* NRD_RAS_H */