On Mon, 28 Jul 2025 19:22:02 +0530 "Aneesh Kumar K.V (Arm)" <aneesh.kumar@xxxxxxxxxx> wrote: > Writing 1 to 'tsm/lock' will initiate the TDISP lock sequence. > > Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar@xxxxxxxxxx> > --- > arch/arm64/include/asm/rsi_cmds.h | 32 +++++++++++++- > arch/arm64/include/asm/rsi_smc.h | 5 +++ > drivers/virt/coco/arm-cca-guest/Makefile | 2 +- > drivers/virt/coco/arm-cca-guest/arm-cca.c | 18 ++++++++ > drivers/virt/coco/arm-cca-guest/rsi-da.c | 52 +++++++++++++++++++++++ > drivers/virt/coco/arm-cca-guest/rsi-da.h | 3 +- > 6 files changed, 108 insertions(+), 4 deletions(-) > create mode 100644 drivers/virt/coco/arm-cca-guest/rsi-da.c > > diff --git a/arch/arm64/include/asm/rsi_cmds.h b/arch/arm64/include/asm/rsi_cmds.h > index d4834baeef1b..b9c4b8ff5631 100644 > --- a/arch/arm64/include/asm/rsi_cmds.h > +++ b/arch/arm64/include/asm/rsi_cmds.h > @@ -172,8 +172,36 @@ static inline int rsi_features(unsigned long index, unsigned long *out) > > arm_smccc_1_1_invoke(SMC_RSI_FEATURES, index, &res); > > - if (out) > - *out = res.a1; > + *out = res.a1; > + return res.a0; Seems unrelated change. > +} > + > diff --git a/drivers/virt/coco/arm-cca-guest/rsi-da.c b/drivers/virt/coco/arm-cca-guest/rsi-da.c > new file mode 100644 > index 000000000000..097cf52ee199 > --- /dev/null > +++ b/drivers/virt/coco/arm-cca-guest/rsi-da.c > @@ -0,0 +1,52 @@ > +int rsi_device_lock(struct pci_dev *pdev) > +{ > + unsigned long ret; > + struct cca_guest_dsc *dsm = to_cca_guest_dsc(pdev); > + int vdev_id = (pci_domain_nr(pdev->bus) << 16) | > + PCI_DEVID(pdev->bus->number, pdev->devfn); > + > + ret = rsi_rdev_get_instance_id(vdev_id, &dsm->instance_id); > + if (ret != RSI_SUCCESS) { > + pci_err(pdev, "failed to get the device instance id (%lu)\n", ret); > + return -EIO; > + } > + > + ret = rsi_rdev_lock(pdev, vdev_id, dsm->instance_id); > + if (ret != RSI_SUCCESS) { > + pci_err(pdev, "failed to lock the device (%lu)\n", ret); > + return -EIO; > + } > + > + return ret; return 0? You carefully overwrite other error codes. I assume RSI_SUCCESS == 0 but even better to just return 0 directly in the good path. > +} > diff --git a/drivers/virt/coco/arm-cca-guest/rsi-da.h b/drivers/virt/coco/arm-cca-guest/rsi-da.h > index 8a4d5f1b0263..f12430c7d792 100644 > --- a/drivers/virt/coco/arm-cca-guest/rsi-da.h > +++ b/drivers/virt/coco/arm-cca-guest/rsi-da.h > @@ -10,9 +10,9 @@ > #include <linux/pci-tsm.h> > #include <asm/rsi_smc.h> > > - Push back to earlier patch where I comment on this. > struct cca_guest_dsc { > struct pci_tsm_pf0 pci; > + unsigned long instance_id; > }; > > static inline struct cca_guest_dsc *to_cca_guest_dsc(struct pci_dev *pdev) > @@ -24,4 +24,5 @@ static inline struct cca_guest_dsc *to_cca_guest_dsc(struct pci_dev *pdev) > return container_of(tsm, struct cca_guest_dsc, pci.tsm); > } > > +int rsi_device_lock(struct pci_dev *pdev); > #endif