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>
This commit is contained in:

committed by
Michael Ellerman

parent
4752876c71
commit
594ff7d067
@@ -26,9 +26,7 @@
|
||||
#include "trace.h"
|
||||
|
||||
#define CXL_NUM_MINORS 256 /* Total to reserve */
|
||||
#define CXL_DEV_MINORS 13 /* 1 control + 4 AFUs * 3 (dedicated/master/shared) */
|
||||
|
||||
#define CXL_CARD_MINOR(adapter) (adapter->adapter_num * CXL_DEV_MINORS)
|
||||
#define CXL_AFU_MINOR_D(afu) (CXL_CARD_MINOR(afu->adapter) + 1 + (3 * afu->slice))
|
||||
#define CXL_AFU_MINOR_M(afu) (CXL_AFU_MINOR_D(afu) + 1)
|
||||
#define CXL_AFU_MINOR_S(afu) (CXL_AFU_MINOR_D(afu) + 2)
|
||||
@@ -36,7 +34,6 @@
|
||||
#define CXL_AFU_MKDEV_M(afu) MKDEV(MAJOR(cxl_dev), CXL_AFU_MINOR_M(afu))
|
||||
#define CXL_AFU_MKDEV_S(afu) MKDEV(MAJOR(cxl_dev), CXL_AFU_MINOR_S(afu))
|
||||
|
||||
#define CXL_DEVT_ADAPTER(dev) (MINOR(dev) / CXL_DEV_MINORS)
|
||||
#define CXL_DEVT_AFU(dev) ((MINOR(dev) % CXL_DEV_MINORS - 1) / 3)
|
||||
|
||||
#define CXL_DEVT_IS_CARD(dev) (MINOR(dev) % CXL_DEV_MINORS == 0)
|
||||
@@ -446,7 +443,8 @@ static const struct file_operations afu_master_fops = {
|
||||
|
||||
static char *cxl_devnode(struct device *dev, umode_t *mode)
|
||||
{
|
||||
if (CXL_DEVT_IS_CARD(dev->devt)) {
|
||||
if (cpu_has_feature(CPU_FTR_HVMODE) &&
|
||||
CXL_DEVT_IS_CARD(dev->devt)) {
|
||||
/*
|
||||
* These minor numbers will eventually be used to program the
|
||||
* PSL and AFUs once we have dynamic reprogramming support
|
||||
@@ -547,6 +545,11 @@ int cxl_register_adapter(struct cxl *adapter)
|
||||
return device_register(&adapter->dev);
|
||||
}
|
||||
|
||||
dev_t cxl_get_dev(void)
|
||||
{
|
||||
return cxl_dev;
|
||||
}
|
||||
|
||||
int __init cxl_file_init(void)
|
||||
{
|
||||
int rc;
|
||||
|
Reference in New Issue
Block a user