Message ID | 20210818221920.3893-1-digetx@gmail.com |
---|---|
Headers | show |
Series | Support EFI partition on NVIDIA Tegra devices | expand |
Looks good,
Reviewed-by: Christoph Hellwig <hch@lst.de>
On Thu, Aug 19, 2021 at 01:19:17AM +0300, Dmitry Osipenko wrote: > Support looking up GPT at a non-standard location specified by a block > device driver. > > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Looks good, Reviewed-by: Christoph Hellwig <hch@lst.de>
On Thu, 19 Aug 2021, Dmitry Osipenko wrote: >Support looking up GPT at a non-standard location specified by a block >device driver. > >Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Acked-by: Davidlohr Bueso <dbueso@suse.de>
On Thu, 19 Aug 2021, Dmitry Osipenko wrote: > - Moved GPT calculation into MMC core and added MMC_CAP2_ALT_GPT_SECTOR > flag, like it was asked by Ulf Hansson. Me and Thierry have concerns > about whether it's better to have Tegra-specific function in a core > instead of Tegra driver, but it also works, so I decided to try that > variant. I think this is better as you had it in v5. This is specific to tegra and shouldn't be in generic code. Thanks, Davidlohr
19.08.2021 20:18, Davidlohr Bueso пишет: > On Thu, 19 Aug 2021, Dmitry Osipenko wrote: > >> - Moved GPT calculation into MMC core and added >> MMC_CAP2_ALT_GPT_SECTOR >> flag, like it was asked by Ulf Hansson. Me and Thierry have concerns >> about whether it's better to have Tegra-specific function in a core >> instead of Tegra driver, but it also works, so I decided to try that >> variant. > > I think this is better as you had it in v5. This is specific to tegra and > shouldn't be in generic code. Yeah, but Ulf wants it to be in core. On the other hand, MMC core already carries all kinds of quirks for hosts and cards, so it's not something extraordinary for the MMC.
On Thu, Aug 19, 2021 at 01:19:15AM +0300, Dmitry Osipenko wrote: > This series adds the most minimal EFI partition support for NVIDIA Tegra > consumer devices, like Android tablets and game consoles, making theirs > eMMC accessible out-of-the-box using downstream bootloader and mainline > Linux kernel. eMMC now works on Acer A500 tablet and Ouya game console > that are already well supported in mainline and internal storage is the > only biggest thing left to support. [...] Could we provide the GPT sector via DT? As I understand this is for non-removable eMMC storage. It would remove the need for a cap bit and hardcoded calculations instead just checking if DT node of the controller contains a magic entry with a number. Best Regards Michał Mirosław
On Thu, Aug 19, 2021 at 01:19:17AM +0300, Dmitry Osipenko wrote: > Support looking up GPT at a non-standard location specified by a block > device driver. > > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> > --- > block/partitions/efi.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/block/partitions/efi.c b/block/partitions/efi.c > index aaa3dc487cb5..7ca5c4c374d4 100644 > --- a/block/partitions/efi.c > +++ b/block/partitions/efi.c > @@ -585,6 +585,8 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt, > gpt_header *pgpt = NULL, *agpt = NULL; > gpt_entry *pptes = NULL, *aptes = NULL; > legacy_mbr *legacymbr; > + struct gendisk *disk = state->disk; > + const struct block_device_operations *fops = disk->fops; > sector_t total_sectors = get_capacity(state->disk); > u64 lastlba; > > @@ -619,6 +621,16 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt, > if (!good_agpt && force_gpt) > good_agpt = is_gpt_valid(state, lastlba, &agpt, &aptes); > > + if (!good_agpt && force_gpt && fops->alternative_gpt_sector) { > + sector_t agpt_sector; > + int err; > + > + err = fops->alternative_gpt_sector(disk, &agpt_sector); > + if (!err) > + good_agpt = is_gpt_valid(state, agpt_sector, > + &agpt, &aptes); > + } > + When alternative_gpt_sector is provided I would expect it to override the default, not be a fallback for it. But if someone tries to put a broken (decoy, garbage) GPT at a standard place, current ordering will prevent overriding it. Best Regards Michał Mirosław
21.08.2021 01:45, Michał Mirosław пишет: > On Thu, Aug 19, 2021 at 01:19:17AM +0300, Dmitry Osipenko wrote: >> Support looking up GPT at a non-standard location specified by a block >> device driver. >> >> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> >> --- >> block/partitions/efi.c | 12 ++++++++++++ >> 1 file changed, 12 insertions(+) >> >> diff --git a/block/partitions/efi.c b/block/partitions/efi.c >> index aaa3dc487cb5..7ca5c4c374d4 100644 >> --- a/block/partitions/efi.c >> +++ b/block/partitions/efi.c >> @@ -585,6 +585,8 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt, >> gpt_header *pgpt = NULL, *agpt = NULL; >> gpt_entry *pptes = NULL, *aptes = NULL; >> legacy_mbr *legacymbr; >> + struct gendisk *disk = state->disk; >> + const struct block_device_operations *fops = disk->fops; >> sector_t total_sectors = get_capacity(state->disk); >> u64 lastlba; >> >> @@ -619,6 +621,16 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt, >> if (!good_agpt && force_gpt) >> good_agpt = is_gpt_valid(state, lastlba, &agpt, &aptes); >> >> + if (!good_agpt && force_gpt && fops->alternative_gpt_sector) { >> + sector_t agpt_sector; >> + int err; >> + >> + err = fops->alternative_gpt_sector(disk, &agpt_sector); >> + if (!err) >> + good_agpt = is_gpt_valid(state, agpt_sector, >> + &agpt, &aptes); >> + } >> + > > When alternative_gpt_sector is provided I would expect it to override > the default, not be a fallback for it. But if someone tries to put > a broken (decoy, garbage) GPT at a standard place, current ordering > will prevent overriding it. This will break devices that have GPT at standard location. If someone tries to manipulate with GPT entries, then it's a problem of that someone.
21.08.2021 01:41, Michał Mirosław пишет: > On Thu, Aug 19, 2021 at 01:19:15AM +0300, Dmitry Osipenko wrote: >> This series adds the most minimal EFI partition support for NVIDIA Tegra >> consumer devices, like Android tablets and game consoles, making theirs >> eMMC accessible out-of-the-box using downstream bootloader and mainline >> Linux kernel. eMMC now works on Acer A500 tablet and Ouya game console >> that are already well supported in mainline and internal storage is the >> only biggest thing left to support. > [...] > > Could we provide the GPT sector via DT? As I understand this is for > non-removable eMMC storage. It would remove the need for a cap bit and > hardcoded calculations instead just checking if DT node of the controller > contains a magic entry with a number. The same device model usually comes in different flavors that have a different eMMC unit and size. So no, it can't be hardcoded in DT.
On Sat, Aug 21, 2021 at 08:27:15PM +0300, Dmitry Osipenko wrote: > 21.08.2021 01:41, Michał Mirosław пишет: > > On Thu, Aug 19, 2021 at 01:19:15AM +0300, Dmitry Osipenko wrote: > >> This series adds the most minimal EFI partition support for NVIDIA Tegra > >> consumer devices, like Android tablets and game consoles, making theirs > >> eMMC accessible out-of-the-box using downstream bootloader and mainline > >> Linux kernel. eMMC now works on Acer A500 tablet and Ouya game console > >> that are already well supported in mainline and internal storage is the > >> only biggest thing left to support. > > [...] > > > > Could we provide the GPT sector via DT? As I understand this is for > > non-removable eMMC storage. It would remove the need for a cap bit and > > hardcoded calculations instead just checking if DT node of the controller > > contains a magic entry with a number. > > The same device model usually comes in different flavors that have a > different eMMC unit and size. So no, it can't be hardcoded in DT. I see. I was thinking how to avoid of going the whole way and creating another controller capability (since this is going to be core code) - could this workaround be enabled just by a boolean DT property at controller's node instead? Or do we expect non-DT platforms to be similarly broken? Best Regards Michał Mirosław
On Tue, Aug 24, 2021 at 01:40:02AM +0200, Michał Mirosław wrote: > On Sat, Aug 21, 2021 at 08:27:15PM +0300, Dmitry Osipenko wrote: > > 21.08.2021 01:41, Michał Mirosław пишет: > > > On Thu, Aug 19, 2021 at 01:19:15AM +0300, Dmitry Osipenko wrote: > > >> This series adds the most minimal EFI partition support for NVIDIA Tegra > > >> consumer devices, like Android tablets and game consoles, making theirs > > >> eMMC accessible out-of-the-box using downstream bootloader and mainline > > >> Linux kernel. eMMC now works on Acer A500 tablet and Ouya game console > > >> that are already well supported in mainline and internal storage is the > > >> only biggest thing left to support. > > > [...] > > > > > > Could we provide the GPT sector via DT? As I understand this is for > > > non-removable eMMC storage. It would remove the need for a cap bit and > > > hardcoded calculations instead just checking if DT node of the controller > > > contains a magic entry with a number. > > > > The same device model usually comes in different flavors that have a > > different eMMC unit and size. So no, it can't be hardcoded in DT. > > I see. I was thinking how to avoid of going the whole way and creating > another controller capability (since this is going to be core code) - > could this workaround be enabled just by a boolean DT property at > controller's node instead? Or do we expect non-DT platforms to be > similarly broken? Rewording my concern: I believe that this is platform's and not a controller's misfeature, so the controller driver feels like wrong place fix. That's why I'd prefer that the enable came from the DT and not from driver's code. Best Regards Michał Mirosław
24.08.2021 13:38, Michał Mirosław пишет: > On Tue, Aug 24, 2021 at 01:40:02AM +0200, Michał Mirosław wrote: >> On Sat, Aug 21, 2021 at 08:27:15PM +0300, Dmitry Osipenko wrote: >>> 21.08.2021 01:41, Michał Mirosław пишет: >>>> On Thu, Aug 19, 2021 at 01:19:15AM +0300, Dmitry Osipenko wrote: >>>>> This series adds the most minimal EFI partition support for NVIDIA Tegra >>>>> consumer devices, like Android tablets and game consoles, making theirs >>>>> eMMC accessible out-of-the-box using downstream bootloader and mainline >>>>> Linux kernel. eMMC now works on Acer A500 tablet and Ouya game console >>>>> that are already well supported in mainline and internal storage is the >>>>> only biggest thing left to support. >>>> [...] >>>> >>>> Could we provide the GPT sector via DT? As I understand this is for >>>> non-removable eMMC storage. It would remove the need for a cap bit and >>>> hardcoded calculations instead just checking if DT node of the controller >>>> contains a magic entry with a number. >>> >>> The same device model usually comes in different flavors that have a >>> different eMMC unit and size. So no, it can't be hardcoded in DT. >> >> I see. I was thinking how to avoid of going the whole way and creating >> another controller capability (since this is going to be core code) - >> could this workaround be enabled just by a boolean DT property at >> controller's node instead? Or do we expect non-DT platforms to be >> similarly broken? > > Rewording my concern: I believe that this is platform's and not > a controller's misfeature, so the controller driver feels like wrong > place fix. That's why I'd prefer that the enable came from the DT > and not from driver's code. The alternative GPT entry requires user to add 'gpt' argument to kernel's cmdline. If board already uses proper alternative GPT entry at the last sector, then nothing changed for that board. The case where board uses 'gpt' cmdline + it had stale GPT entry at the special location used by Android devices and chance that now suddenly that GPT entry will pop up is close to zero. All old partition table entries should be erased on reparation. If it wasn't done, then it's not a kernel's problem, it's much more a user's problem. Even though kernel could help that poor user if will be really needed. There is no reason to over-engineer unless somebody will tell that it broke the very special board. Neither of currently supported boards should require more quirks. Hence, why bother?
On Tue, Aug 24, 2021 at 07:06:18PM +0300, Dmitry Osipenko wrote: > 24.08.2021 13:38, Michał Mirosław пишет: > > On Tue, Aug 24, 2021 at 01:40:02AM +0200, Michał Mirosław wrote: > >> On Sat, Aug 21, 2021 at 08:27:15PM +0300, Dmitry Osipenko wrote: > >>> 21.08.2021 01:41, Michał Mirosław пишет: > >>>> On Thu, Aug 19, 2021 at 01:19:15AM +0300, Dmitry Osipenko wrote: > >>>>> This series adds the most minimal EFI partition support for NVIDIA Tegra > >>>>> consumer devices, like Android tablets and game consoles, making theirs > >>>>> eMMC accessible out-of-the-box using downstream bootloader and mainline > >>>>> Linux kernel. eMMC now works on Acer A500 tablet and Ouya game console > >>>>> that are already well supported in mainline and internal storage is the > >>>>> only biggest thing left to support. > >>>> [...] > >>>> > >>>> Could we provide the GPT sector via DT? As I understand this is for > >>>> non-removable eMMC storage. It would remove the need for a cap bit and > >>>> hardcoded calculations instead just checking if DT node of the controller > >>>> contains a magic entry with a number. > >>> > >>> The same device model usually comes in different flavors that have a > >>> different eMMC unit and size. So no, it can't be hardcoded in DT. > >> > >> I see. I was thinking how to avoid of going the whole way and creating > >> another controller capability (since this is going to be core code) - > >> could this workaround be enabled just by a boolean DT property at > >> controller's node instead? Or do we expect non-DT platforms to be > >> similarly broken? > > > > Rewording my concern: I believe that this is platform's and not > > a controller's misfeature, so the controller driver feels like wrong > > place fix. That's why I'd prefer that the enable came from the DT > > and not from driver's code. > > The alternative GPT entry requires user to add 'gpt' argument to > kernel's cmdline. If board already uses proper alternative GPT entry at > the last sector, then nothing changed for that board. > > The case where board uses 'gpt' cmdline + it had stale GPT entry at the > special location used by Android devices and chance that now suddenly > that GPT entry will pop up is close to zero. > > All old partition table entries should be erased on reparation. If it > wasn't done, then it's not a kernel's problem, it's much more a user's > problem. Even though kernel could help that poor user if will be really > needed. > > There is no reason to over-engineer unless somebody will tell that it > broke the very special board. Neither of currently supported boards > should require more quirks. Hence, why bother? You could drop patch 4 from v7 if you checked DT boolean property instead of adding a capability in patch 3. (Patch 4 would be replaced by DT changes for relevant boards.) Best Regards Michał Mirosław