The new flash.c file contains the logic to flash a new image on the adapter, through a hcall. It is an iterative process, with chunks of data of 1M at a time. There are also 2 phases: write and verify. The flash operation itself is driven from a user-land tool. Once flashing is successful, an rtas call is made to update the device tree with the new properties values for the adapter and the AFU(s) Add a new char device for the adapter, so that the flash tool can access the card, even if there is no valid AFU on it.
Showing the changes to include/uapi (1 of 8 files). Show all
Unified · Split
| @@ -55,11 +55,35 @@ struct cxl_afu_id { · 54 unmodified lines | ||
| 55 | 55 | __u64 reserved6; |
| 56 | 56 | }; |
| 57 | 57 | |
| 58 | +/* base adapter image header is included in the image */ | |
| 59 | +#define CXL_AI_NEED_HEADER 0x0000000000000001ULL | |
| 60 | +#define CXL_AI_ALL CXL_AI_NEED_HEADER | |
| 61 | + | |
| 62 | +#define CXL_AI_HEADER_SIZE 128 | |
| 63 | +#define CXL_AI_BUFFER_SIZE 4096 | |
| 64 | +#define CXL_AI_MAX_ENTRIES 256 | |
| 65 | +#define CXL_AI_MAX_CHUNK_SIZE (CXL_AI_BUFFER_SIZE * CXL_AI_MAX_ENTRIES) | |
| 66 | + | |
| 67 | +struct cxl_adapter_image { | |
| 68 | + __u64 flags; | |
| 69 | + __u64 data; | |
| 70 | + __u64 len_data; | |
| 71 | + __u64 len_image; | |
| 72 | + __u64 reserved1; | |
| 73 | + __u64 reserved2; | |
| 74 | + __u64 reserved3; | |
| 75 | + __u64 reserved4; | |
| 76 | +}; | |
| 77 | + | |
| 58 | 78 | /* ioctl numbers */ |
| 59 | 79 | #define CXL_MAGIC 0xCA |
| 80 | +/* AFU devices */ | |
| 60 | 81 | #define CXL_IOCTL_START_WORK _IOW(CXL_MAGIC, 0x00, struct cxl_ioctl_start_work) |
| 61 | 82 | #define CXL_IOCTL_GET_PROCESS_ELEMENT _IOR(CXL_MAGIC, 0x01, __u32) |
| 62 | 83 | #define CXL_IOCTL_GET_AFU_ID _IOR(CXL_MAGIC, 0x02, struct cxl_afu_id) |
| 84 | +/* adapter devices */ | |
| 85 | +#define CXL_IOCTL_DOWNLOAD_IMAGE _IOW(CXL_MAGIC, 0x0A, struct cxl_adapter_image) | |
| 86 | +#define CXL_IOCTL_VALIDATE_IMAGE _IOW(CXL_MAGIC, 0x0B, struct cxl_adapter_image) | |
| 63 | 87 | |
| 64 | 88 | #define CXL_READ_MIN_SIZE 0x1000 /* 4K */ |
| 65 | 89 | |