public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Devarsh Thakkar <devarsht@ti.com>
To: Simon Glass <sjg@chromium.org>
Cc: "U-Boot Mailing List" <u-boot@lists.denx.de>,
	"Bin Meng" <bmeng.cn@gmail.com>,
	"Michal Suchanek" <msuchanek@suse.de>,
	"Nikhil M Jain" <n-jain1@ti.com>,
	"Ovidiu Panait" <ovpanait@gmail.com>,
	"Pali Rohár" <pali@kernel.org>,
	"Rasmus Villemoes" <rasmus.villemoes@prevas.dk>,
	"Stefan Roese" <sr@denx.de>,
	"Raghavendra, Vignesh" <vigneshr@ti.com>,
	"Luthra, Jai" <j-luthra@ti.com>,
	"Bhatia, Aradhya" <a-bhatia1@ti.com>
Subject: Re: [PATCH 5/9] board_f: Fix corruption of relocaddr
Date: Wed, 26 Jul 2023 16:38:53 +0530	[thread overview]
Message-ID: <aed953c9-4cbb-4ea1-e95e-75c311ced9ec@ti.com> (raw)
In-Reply-To: <CAPnjgZ0iruacxtef=x0uASw6-O-_qJhbh-hUuHBaYNYtt_rrVg@mail.gmail.com>

Hi Simon,

On 26/07/23 02:58, Simon Glass wrote:
> Hi Devarsh,
> 
> On Tue, 25 Jul 2023 at 03:21, Devarsh Thakkar <devarsht@ti.com> wrote:
>>
>> Hi Simon,
>>
>> On 24/07/23 20:22, Simon Glass wrote:
>>> When the video framebuffer comes from the bloblist, we should not change
>>> relocaddr to this address, since it interfers with the normal memory
>>> allocation.
>>>
>>> This fixes a boot loop in qemu-x86_64
>>>
>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>> Fixes: 5bc610a7d9d ("common: board_f: Pass frame buffer info from SPL to u-boot")
>>> ---
>>>
>>>  common/board_f.c | 1 -
>>>  1 file changed, 1 deletion(-)
>>>
>>> diff --git a/common/board_f.c b/common/board_f.c
>>> index 7d2c380e91e2..5c8646b22283 100644
>>> --- a/common/board_f.c
>>> +++ b/common/board_f.c
>>> @@ -419,7 +419,6 @@ static int reserve_video(void)
>>>               if (!ho)
>>>                       return log_msg_ret("blf", -ENOENT);
>>>               video_reserve_from_bloblist(ho);
>>> -             gd->relocaddr = ho->fb;
>>
>> I think this change was done as relocaddr pointer was required to be updated
>> to move after frame-buffer reserved area to ensure that any further memory
>> reservations done using gd->relocaddr (for e.g. in reserve_trace/uboot/malloc)
>> don't overlap with frame-buffer reserved area passed from blob, so I think
>> removing this line may cause further memory reservations to overlap with
>> reserved framebuffer.
>>
>> Could you please confirm?
> 
> SPL and U-Boot have different memory layouts. The current code is
> interrupting U-Boot's careful building up of chunks of memory used for
> different purposes.
> 

But it is possible they could be using similar memory layout for some
components like framebuffer.
For e.g. in our case we are using same video_reserve func in A53 SPL too
and which allocates framebuffer from gd->relocaddr as seen here:

https://source.denx.de/u-boot/u-boot/-/blob/v2023.10-rc1/common/board_f.c?ref_type=tags#L427

> The video memory has already been allocated by SPL, so we don't need
> to insert a new one here, as your code demonstrates.
> 

Agreed.

> But also we have no way of knowing if it is legal to relocate U-Boot
> (and various other things) just below the frame buffer chosen by SPL.
> 

Yes, so i suppose your case is that framebuffer address which is being passed
by SPL is totally disjoint and too far away from gd->relocaddr, for e.g. it is
at the start (or bottom of DDR) and doesn't interfere with gd->relocaddr in
any manner since relocaddr points to ramtop (i.e. near to end address of DDR).

In that case I agree it doesn't make sense to move relocaddr to ho->fb.

But for the scenario where gd->relocaddr and ho->fb are nearby there is every
possibility that gd->relocaddr may overlap with framebuffer, also the code in
reserve_trace, reserve_uboot doesn't have any intelligence or check that it is
overlapping with framebuffer area or not.

I think one thing that can probably be done here is to have a check that if
passed framebuffer area falls within current relocaddr region, then update the
relocaddr else don't touch relocaddr :

if (ho->fb <= gd->relocaddr - ho->size)
  //It means framebuffer are is overlapping with current relocaddr so update
relocaddr
    gd->relocaddr = ho->fb
else
  //don't update gd->relocaddr since ho->fb is disjoint to gd->relocaddr

Could you please share your opinion on this and if above logic suffice your
case too ?

Regards
Devarsh

> The SPL frame buffer needs to be considered pre-allocated. It makes no
> sense to set relocaddr to this value. It will break all sorts of
> things. E.g. qemu-x86_64 crashes with this.
> 
>>
>>
>> Regards
>> Devarsh
>>
>>>       } else if (CONFIG_IS_ENABLED(VIDEO)) {
>>>               ulong addr;
>>>               int ret;
> 
> Regards,
> Simon

  reply	other threads:[~2023-07-26 16:29 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-24 14:51 [PATCH 0/9] x86: Fixes for distro booting Simon Glass
2023-07-24 14:51 ` [PATCH 1/9] x86: spl: Drop unwanted debug() Simon Glass
2023-07-28 15:46   ` Bin Meng
2023-07-24 14:51 ` [PATCH 2/9] video: Tidy up Makefile rule for video Simon Glass
2023-07-25  6:14   ` [EXTERNAL] " Nikhil M Jain
2023-07-28 15:46   ` Bin Meng
2023-07-28 17:32     ` Simon Glass
2023-07-24 14:51 ` [PATCH 3/9] x86: Run QEMU machine setup in SPL Simon Glass
2023-07-28 15:46   ` Bin Meng
2023-07-24 14:52 ` [PATCH 4/9] Revert "x86: Switch QEMU over to use the bochs driver" Simon Glass
2023-07-28 15:46   ` Bin Meng
2023-07-28 17:32     ` Simon Glass
2023-07-31 14:32       ` Bin Meng
2023-07-31 14:37         ` Simon Glass
2023-07-31 14:46           ` Bin Meng
2023-07-31 17:07             ` Simon Glass
2023-08-04  3:42               ` Simon Glass
2023-08-03 10:44   ` Bin Meng
2023-07-24 14:52 ` [PATCH 5/9] board_f: Fix corruption of relocaddr Simon Glass
2023-07-25  9:21   ` Devarsh Thakkar
2023-07-25 21:28     ` Simon Glass
2023-07-26 11:08       ` Devarsh Thakkar [this message]
2023-07-27  0:53         ` Simon Glass
2023-07-27  5:22           ` Nikhil M Jain
2023-07-27 18:01             ` Simon Glass
2023-07-28  8:35               ` Nikhil M Jain
2023-07-28  8:38                 ` Nikhil M Jain
2023-07-28 17:39                 ` Simon Glass
2023-07-24 14:52 ` [PATCH 6/9] x86: Correct copying of BIOS mode information Simon Glass
2023-07-28 16:12   ` Bin Meng
2023-07-24 14:52 ` [PATCH 7/9] video: Add a Kconfig option for SPL video handoff Simon Glass
2023-07-24 14:52 ` [PATCH 8/9] x86: Enable useful options for qemu-86 Simon Glass
2023-07-24 14:52 ` [PATCH 9/9] x86: Update qemu documentation Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aed953c9-4cbb-4ea1-e95e-75c311ced9ec@ti.com \
    --to=devarsht@ti.com \
    --cc=a-bhatia1@ti.com \
    --cc=bmeng.cn@gmail.com \
    --cc=j-luthra@ti.com \
    --cc=msuchanek@suse.de \
    --cc=n-jain1@ti.com \
    --cc=ovpanait@gmail.com \
    --cc=pali@kernel.org \
    --cc=rasmus.villemoes@prevas.dk \
    --cc=sjg@chromium.org \
    --cc=sr@denx.de \
    --cc=u-boot@lists.denx.de \
    --cc=vigneshr@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox