diff options
| author | Christophe Lombard <clombard@linux.vnet.ibm.com> | 2016-03-04 06:26:38 -0500 |
|---|---|---|
| committer | Michael Ellerman <mpe@ellerman.id.au> | 2016-03-09 07:39:56 -0500 |
| commit | 594ff7d067ca42676e27e2a7b5dcc0ff039d08ca (patch) | |
| tree | 45824c4fb92c9450b86bfbb9ff19a0dd17cd2c93 /include/uapi/misc | |
| parent | 4752876c71701b7663a5ded789058ab2c05f7d0f (diff) | |
cxl: Support to flash a new image on the adapter from a guest
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.
Co-authored-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Signed-off-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
Reviewed-by: Manoj Kumar <manoj@linux.vnet.ibm.com>
Acked-by: Ian Munsie <imunsie@au1.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'include/uapi/misc')
| -rw-r--r-- | include/uapi/misc/cxl.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/include/uapi/misc/cxl.h b/include/uapi/misc/cxl.h index 1e889aa8a36e..8cd334f99ddc 100644 --- a/include/uapi/misc/cxl.h +++ b/include/uapi/misc/cxl.h | |||
| @@ -55,11 +55,35 @@ struct cxl_afu_id { | |||
| 55 | __u64 reserved6; | 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 | /* ioctl numbers */ | 78 | /* ioctl numbers */ |
| 59 | #define CXL_MAGIC 0xCA | 79 | #define CXL_MAGIC 0xCA |
| 80 | /* AFU devices */ | ||
| 60 | #define CXL_IOCTL_START_WORK _IOW(CXL_MAGIC, 0x00, struct cxl_ioctl_start_work) | 81 | #define CXL_IOCTL_START_WORK _IOW(CXL_MAGIC, 0x00, struct cxl_ioctl_start_work) |
| 61 | #define CXL_IOCTL_GET_PROCESS_ELEMENT _IOR(CXL_MAGIC, 0x01, __u32) | 82 | #define CXL_IOCTL_GET_PROCESS_ELEMENT _IOR(CXL_MAGIC, 0x01, __u32) |
| 62 | #define CXL_IOCTL_GET_AFU_ID _IOR(CXL_MAGIC, 0x02, struct cxl_afu_id) | 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 | #define CXL_READ_MIN_SIZE 0x1000 /* 4K */ | 88 | #define CXL_READ_MIN_SIZE 0x1000 /* 4K */ |
| 65 | 89 | ||
