mirror of
https://github.com/torvalds/linux.git
synced 2026-09-26 01:52:03 +02:00
iommu/amd: Introduce PPR_TAG_LAST_PAGE() macro
The PPR tag field (PPRtag) encodes two distinct fields: the 9-bit tag value (bits 8-0) and the last-page indicator L bit (bit 9). Fix PPR_TAG() to mask only the 9-bit tag field and introduce PPR_TAG_LAST_PAGE to explicitly extract the L bit. This way it becomes easy to read. Cc: Wei Huang <wei.huang2@amd.com> Signed-off-by: Vasant Hegde <vasant.hegde@amd.com> Reviewed-by: Ankit Soni <Ankit.Soni@amd.com> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
This commit is contained in:
parent
5322e19fc5
commit
589f0cc1e0
|
|
@ -280,7 +280,8 @@
|
|||
#define PPR_REQ_TYPE(x) (((x) >> 60) & 0xfULL)
|
||||
#define PPR_FLAGS(x) (((x) >> 48) & 0xfffULL)
|
||||
#define PPR_DEVID(x) ((x) & 0xffffULL)
|
||||
#define PPR_TAG(x) (((x) >> 32) & 0x3ffULL)
|
||||
#define PPR_TAG(x) (((x) >> 32) & 0x1ffULL)
|
||||
#define PPR_TAG_LAST_PAGE(x) (((x) >> 32) & 0x200ULL)
|
||||
#define PPR_PASID1(x) (((x) >> 16) & 0xffffULL)
|
||||
#define PPR_PASID2(x) (((x) >> 42) & 0xfULL)
|
||||
#define PPR_PASID(x) ((PPR_PASID2(x) << 16) | PPR_PASID1(x))
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ static void iommu_call_iopf_notifier(struct amd_iommu *iommu, u64 *raw)
|
|||
event.fault.prm.perm = ppr_flag_to_fault_perm(PPR_FLAGS(raw[0]));
|
||||
event.fault.prm.addr = (u64)(raw[1] & PAGE_MASK);
|
||||
event.fault.prm.pasid = PPR_PASID(raw[0]);
|
||||
event.fault.prm.grpid = PPR_TAG(raw[0]) & 0x1FF;
|
||||
event.fault.prm.grpid = PPR_TAG(raw[0]);
|
||||
|
||||
/*
|
||||
* PASID zero is used for requests from the I/O device without
|
||||
|
|
@ -146,7 +146,7 @@ static void iommu_call_iopf_notifier(struct amd_iommu *iommu, u64 *raw)
|
|||
|
||||
event.fault.prm.flags |= IOMMU_FAULT_PAGE_RESPONSE_NEEDS_PASID;
|
||||
event.fault.prm.flags |= IOMMU_FAULT_PAGE_REQUEST_PASID_VALID;
|
||||
if (PPR_TAG(raw[0]) & 0x200)
|
||||
if (PPR_TAG_LAST_PAGE(raw[0]))
|
||||
event.fault.prm.flags |= IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE;
|
||||
|
||||
/* Submit event */
|
||||
|
|
@ -157,8 +157,7 @@ static void iommu_call_iopf_notifier(struct amd_iommu *iommu, u64 *raw)
|
|||
out:
|
||||
/* Nobody cared, abort */
|
||||
amd_iommu_complete_ppr(&pdev->dev, PPR_PASID(raw[0]),
|
||||
IOMMU_PAGE_RESP_FAILURE,
|
||||
PPR_TAG(raw[0]) & 0x1FF);
|
||||
IOMMU_PAGE_RESP_FAILURE, PPR_TAG(raw[0]));
|
||||
pci_dev_put(pdev);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user