On Thu, Feb 06, 2025 at 05:09:41PM -0700, Simon Glass wrote: > Hi Raymond, > > On Thu, 6 Feb 2025 at 15:35, Raymond Mao <raymond....@linaro.org> wrote: > > > > Hi Simon, > > > > On Thu, 6 Feb 2025 at 10:41, Simon Glass <s...@chromium.org> wrote: > > > > > > Hi Raymond, > > > > > > On Wed, 5 Feb 2025 at 08:25, Raymond Mao <raymond....@linaro.org> wrote: > > > > > > > > +CC Ilias, > > > > > > > > Hi Simon, > > > > > > > > On Tue, 4 Feb 2025 at 20:57, Simon Glass <s...@chromium.org> wrote: > > > > > > > > > > The logic of this has become too confusing. > > > > > > > > > > The primary issue with the patch is that U-Boot needs to set up a > > > > > bloblist in the first phase where BLOBLIST is enabled. Subsequent > > > > > phases can then use that bloblist. > > > > > > > > > > But the first phase of U-Boot cannot assume that one exists. > > > > > > > > > > Reverting this commit seems like a better starting point for getting > > > > > things working for all use-cases. > > > > > > > > > > This reverts commit 66131310d8ff1ba228f989b41bd8812f43be41c3. > > > > > > > > > > https://lore.kernel.org/u-boot/CAPnjgZ3hMHtiH=f5zkxnniofv_-vfryq1gn7qz5hku8wjo8...@mail.gmail.com/ > > > > > Signed-off-by: Simon Glass <s...@chromium.org> > > > > > --- > > > > > > > > > > > > > If my understanding is correct, you want to add some logic to control > > > > when the U-Boot should or should not get the bloblist from the > > > > existing register argument. > > > > But xferlist_from_boot_arg() should be called when a valid register > > > > argument is there, I didn't see this in your patch. > > > > Maybe you plan to do this with other patch series, but simply > > > > reverting this results in a breaking of handoff policy and the > > > > firmware handoff won't work. > > > > > > Yes, I certainly did not want to revert it, but the current code is > > > too hard to understand and I did not look at it at the time it went > > > in. I've had three tries at working with what you have here, but each > > > turns to spaghetti. > > > > > > > Still not very clear on what concerns you have and what is the way you > > want to go. > > The logic is straight forward, when U-Boot has a previous loader and > > the registers pass in valid arguments - It indicates handoff should be > > done using the transfer list. > > Other kconfig options decide whether to use the passed in address > > directly or copy to a predefined address. > > But in either way, xferlist_from_boot_arg() is doing the right thing > > to get the transfer list from the register if it exists and is valid. > > I don't see a reason for removing it. > > Here is the initial code: > >>>> > bool from_addr = fixed && !xpl_is_first_phase(); > /* > * If U-Boot is in the first phase that an arch custom routine should > * install the bloblist passed from previous loader to this fixed > * address. > */ > bool from_boot_arg = fixed && xpl_is_first_phase(); > > if (xpl_prev_phase() == PHASE_TPL && !IS_ENABLED(CONFIG_TPL_BLOBLIST)) > from_addr = false; > <<<< > > and by the way, that is my tree. In -next it is even worse: > >>>> > /* > * If U-Boot is not in the first phase, an existing bloblist must be > * at a fixed address. > */ > bool from_addr = fixed && !xpl_is_first_phase(); > /* > * If U-Boot is in the first phase that an arch custom routine should > * install the bloblist passed from previous loader to this fixed > * address. > */ > bool from_boot_arg = fixed && xpl_is_first_phase(); > > if (xpl_prev_phase() == PHASE_TPL && !IS_ENABLED(CONFIG_TPL_BLOBLIST)) > from_addr = false; > if (fixed) > addr = IF_ENABLED_INT(CONFIG_BLOBLIST_FIXED, > CONFIG_BLOBLIST_ADDR); > size = CONFIG_BLOBLIST_SIZE; > > if (from_boot_arg) > ret = xferlist_from_boot_arg(addr, size); > else if (from_addr) > ret = bloblist_check(addr, size); > <<<< > > I want to update it so that TPL creates a bloblist and passes it > through the following phases, ending up at U-Boot. > > To my mind, if CONFIG_IS_ENABLED(BLOBLIST), then we should check the > registers and always accept standard passage. If not, we should > either: > - create a bloblist (if this *is* the first phase with > CONFIG_IS_ENABLED(BLOBLIST)) > - use an existing bloblistl, which must exist (if not) > > I just don't think the existing logic is a good starting point as it > is too confusing. > > Perhaps, putting it another way, what do you like about the current > code (either version)?
We need to untie the check for and create logic. And we need to add code so that U-Boot can pass from one phase to the next without a fixed address. That should help simplify this logic and move towards being able to just drop the fixed case entirely. -- Tom
signature.asc
Description: PGP signature