Thread (17 messages) 17 messages, 5 authors, 2020-03-06

Re: [PATCH v1 3/3] partitions: Introduce NVIDIA Tegra Partition Table

From: Dmitry Osipenko <digetx@gmail.com>
Date: 2020-03-04 17:09:21
Also in: linux-mmc, linux-tegra, lkml

04.03.2020 19:36, Ulf Hansson пишет:
On Tue, 25 Feb 2020 at 01:20, Stephen Warren [off-list ref] wrote:
quoted
On 2/24/20 4:18 PM, Dmitry Osipenko wrote:
quoted
All NVIDIA Tegra devices use a special partition table format for the
internal storage partitioning. Most of Tegra devices have GPT partition
in addition to TegraPT, but some older Android consumer-grade devices do
not or GPT is placed in a wrong sector, and thus, the TegraPT is needed
in order to support these devices properly in the upstream kernel. This
patch adds support for NVIDIA Tegra Partition Table format that is used
at least by all NVIDIA Tegra20 and Tegra30 devices.
quoted
diff --git a/arch/arm/mach-tegra/tegra.c b/arch/arm/mach-tegra/tegra.c
quoted
+static void __init tegra_boot_config_table_init(void)
+{
+     void __iomem *bct_base;
+     u16 pt_addr, pt_size;
+
+     bct_base = IO_ADDRESS(TEGRA_IRAM_BASE) + TEGRA_IRAM_BCT_OFFSET;
This shouldn't be hard-coded. IIRC, the boot ROM writes a BIT (Boot
Information Table) to a fixed location in IRAM, and there's some value
in the BIT that points to where the BCT is in IRAM. In practice, it
might work out that the BCT is always at the same place in IRAM, but
this certainly isn't guaranteed. I think there's code in U-Boot which
extracts the BCT location from the BIT? Yes, see
arch/arm/mach-tegra/ap.c:get_odmdata().
So, have you considered using the command line partition option,
rather than adding yet another partition scheme to the kernel?

In principle, you would let the boot loader scan for the partitions,
likely from machine specific code in U-boot. Then you append these to
the kernel command line and let block/partitions/cmdline.c scan for
it.
The bootloader is usually locked-down on a consumer Tegra machines (it's
signed / encrypted).

Technically, it should be possible to chain-load some custom secondary
bootloader instead of a kernel image, but this is not very practical
because now:

1. There is a need to make a custom bootloader and it is quite a lot of
work.

2. You'll have to tell everybody that a custom booloader may need to be
used in order to get a working eMMC.

3. NVIDIA's bootloader already passes a command line parameter to kernel
for locating GPT entry, but this hack is not acceptable for the upstream
kernel.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help