[RFC PATCH 1/4] Revert "nvme: Correct the prps per page calculation method"

Stefan Agner stefan at agner.ch
Fri Sep 24 01:20:32 CEST 2021


This reverts commit 859b33c948945f7904f60a2c12a3792d356d51ad.

If there is more than one PRP List the last entry is a pointer to
the next list. From the NVM Express specification:

"The last entry within a memory page, as indicated by the memory page
size in the CC.MPS field, shall be a PRP List pointer if there is more
than a single memory page of data to be transferred."

For the purpose of calculating the number of pages required for PRP
lists we should always assume that the last entry is required for
the next PRP list.

Signed-off-by: Stefan Agner <stefan at agner.ch>
Cc: Wesley Sheng <wesleyshenggit at sina.com>
---

 drivers/nvme/nvme.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/nvme/nvme.c b/drivers/nvme/nvme.c
index f6465ea7f4..1ae3001a90 100644
--- a/drivers/nvme/nvme.c
+++ b/drivers/nvme/nvme.c
@@ -81,7 +81,7 @@ static int nvme_setup_prps(struct nvme_dev *dev, u64 *prp2,
 	u64 *prp_pool;
 	int length = total_len;
 	int i, nprps;
-	u32 prps_per_page = page_size >> 3;
+	u32 prps_per_page = (page_size >> 3) - 1;
 	u32 num_pages;
 
 	length -= (page_size - offset);
-- 
2.33.0



More information about the U-Boot mailing list