|  | .. SPDX-License-Identifier: GPL-2.0 OR GFDL-1.2-no-invariants-or-later | 
|  |  | 
|  | ================= | 
|  | EDAC/RAS features | 
|  | ================= | 
|  |  | 
|  | Copyright (c) 2024-2025 HiSilicon Limited. | 
|  |  | 
|  | :Author:   Shiju Jose <shiju.jose@huawei.com> | 
|  | :License:  The GNU Free Documentation License, Version 1.2 without | 
|  | Invariant Sections, Front-Cover Texts nor Back-Cover Texts. | 
|  | (dual licensed under the GPL v2) | 
|  |  | 
|  | - Written for: 6.15 | 
|  |  | 
|  | Introduction | 
|  | ------------ | 
|  |  | 
|  | EDAC/RAS components plugging and high-level design: | 
|  |  | 
|  | 1. Scrub control | 
|  |  | 
|  | 2. Error Check Scrub (ECS) control | 
|  |  | 
|  | 3. ACPI RAS2 features | 
|  |  | 
|  | 4. Post Package Repair (PPR) control | 
|  |  | 
|  | 5. Memory Sparing Repair control | 
|  |  | 
|  | High level design is illustrated in the following diagram:: | 
|  |  | 
|  | +-----------------------------------------------+ | 
|  | |   Userspace - Rasdaemon                       | | 
|  | | +-------------+                               | | 
|  | | | RAS CXL mem |     +---------------+         | | 
|  | | |error handler|---->|               |         | | 
|  | | +-------------+     | RAS dynamic   |         | | 
|  | | +-------------+     | scrub, memory |         | | 
|  | | | RAS memory  |---->| repair control|         | | 
|  | | |error handler|     +----|----------+         | | 
|  | | +-------------+          |                    | | 
|  | +--------------------------|--------------------+ | 
|  | | | 
|  | | | 
|  | +-------------------------------|------------------------------+ | 
|  | |     Kernel EDAC extension for | controlling RAS Features     | | 
|  | |+------------------------------|----------------------------+ | | 
|  | || EDAC Core          Sysfs EDAC| Bus                        | | | 
|  | ||   +--------------------------|---------------------------+| | | 
|  | ||   |/sys/bus/edac/devices/<dev>/scrubX/ |   | EDAC device || | | 
|  | ||   |/sys/bus/edac/devices/<dev>/ecsX/   |<->| EDAC MC     || | | 
|  | ||   |/sys/bus/edac/devices/<dev>/repairX |   | EDAC sysfs  || | | 
|  | ||   +---------------------------|--------------------------+| | | 
|  | ||                           EDAC|Bus                        | | | 
|  | ||                               |                           | | | 
|  | ||   +----------+ Get feature    |      Get feature          | | | 
|  | ||   |          | desc +---------|------+ desc +----------+  | | | 
|  | ||   |EDAC scrub|<-----| EDAC device    |      |          |  | | | 
|  | ||   +----------+      | driver- RAS    |----->| EDAC mem |  | | | 
|  | ||   +----------+      | feature control|      | repair   |  | | | 
|  | ||   |          |<-----|                |      +----------+  | | | 
|  | ||   |EDAC ECS  |      +---------|------+                    | | | 
|  | ||   +----------+    Register RAS|features                   | | | 
|  | ||         ______________________|_____________              | | | 
|  | |+---------|---------------|------------------|--------------+ | | 
|  | |  +-------|----+  +-------|-------+     +----|----------+     | | 
|  | |  |            |  | CXL mem driver|     | Client driver |     | | 
|  | |  | ACPI RAS2  |  | scrub, ECS,   |     | memory repair |     | | 
|  | |  | driver     |  | sparing, PPR  |     | features      |     | | 
|  | |  +-----|------+  +-------|-------+     +------|--------+     | | 
|  | |        |                 |                    |              | | 
|  | +--------|-----------------|--------------------|--------------+ | 
|  | |                 |                    | | 
|  | +--------|-----------------|--------------------|--------------+ | 
|  | |    +---|-----------------|--------------------|-------+      | | 
|  | |    |                                                  |      | | 
|  | |    |            Platform HW and Firmware              |      | | 
|  | |    +--------------------------------------------------+      | | 
|  | +--------------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | 1. EDAC Features components - Create feature-specific descriptors. For | 
|  | example: scrub, ECS, memory repair in the above diagram. | 
|  |  | 
|  | 2. EDAC device driver for controlling RAS Features - Get feature's attribute | 
|  | descriptors from EDAC RAS feature component and registers device's RAS | 
|  | features with EDAC bus and expose the features control attributes via | 
|  | sysfs. For example, /sys/bus/edac/devices/<dev-name>/<feature>X/ | 
|  |  | 
|  | 3. RAS dynamic feature controller - Userspace sample modules in rasdaemon for | 
|  | dynamic scrub/repair control to issue scrubbing/repair when excess number | 
|  | of corrected memory errors are reported in a short span of time. | 
|  |  | 
|  | RAS features | 
|  | ------------ | 
|  | 1. Memory Scrub | 
|  |  | 
|  | Memory scrub features are documented in `Documentation/edac/scrub.rst`. | 
|  |  | 
|  | 2. Memory Repair | 
|  |  | 
|  | Memory repair features are documented in `Documentation/edac/memory_repair.rst`. |