On 06/03/24 14:18:49, Linus Walleij wrote:
On Wed, Mar 6, 2024 at 10:05 AM Jorge Ramirez-Ortiz, Foundries jorge@foundries.io wrote:
That looked strange as there should be support for 4 GP but this code kind of convinced me of the opposite.
if (idata->rpmb) { /* Support multiple RPMB partitions */ target_part = idata->rpmb->part_index; target_part |= EXT_CSD_PART_CONFIG_ACC_RPMB; }
So if we apply the fix that you propose, how are multiple RPMB partitions (ie, 4) going to be identified as RPMB? Unless there can't be more than 3?
As far as I can tell there can only be one RPMB partition per device.
that matches everything I have seen in the field too (and we have been supporting RPMB on many designs lately (# > 30).
The v5.1A spec says (section 6.2.1):
"Two Boot Area Partitions, (...)" "One RPMB Partition accessed through a trusted mechanism, (...)" "Four General Purpose Area Partitions (...)"
implying there can be only one RPMB.
Also I have never seen more than one in practice.
+1
so I think it is safe to conclude that my commit did indeed cause these regressions as it ignored the support for multiple GP. Sorry about it!.
I still cant grasp how "target_part = idata->rpmb->part_index" is helping in the design.
What happens when: 1) EXT_CSD_PART_CONFIG_ACC_MASK > part_index > EXT_CSD_PART_CONFIG_ACC_RPMB target_part now could be indicating a GP instead of an RPMB leading to failures.
2) part_index <= EXT_CSD_PART_CONFIG_ACC_RPMB loses the part_index value .
So part_index should be larger than EXT_CSD_PART_CONFIG_ACC_MASK even though the comment indicates it starts at 0?
/** * struct mmc_rpmb_data - special RPMB device type for these areas * @dev: the device for the RPMB area * @chrdev: character device for the RPMB area * @id: unique device ID number * @part_index: partition index (0 on first) <--------------------- * @md: parent MMC block device * @node: list item, so we can put this device on a list */ struct mmc_rpmb_data { struct device dev; struct cdev chrdev; int id;
is it just possible that "target_part = idata->rpmb->part_index" just needs to be shifted to avoid issues?
I think the fix to the regression I introduced could perhaps address this as well.