Re: [PATCH] mmc: part_switch: fixes switch on gp3 partition

From: Linus Walleij
Date: Wed Mar 06 2024 - 09:39:10 EST


On Wed, Mar 6, 2024 at 3:22 PM Jorge Ramirez-Ortiz, Foundries
<jorge@xxxxxxxxxxxx> wrote:

> 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.

I have no clue how the regression happened really ... heh.

We should probably rename it part_cfg because that is what we
store in it, it's assigned from card->part[idx].part_cfg.

Then the id field in mmc_rpmb_data should be deleted along
with all the IDA counter code etc and the partition name hardcoded
to be "0" as there will never be anything else.

Yours,
Linus Walleij