hi Andre Przywara,

Thanks for your response.

According to this thread, the author who has worked on the H616 and H618 
dram codes including that '1.5G issue'
https://forum.openwrt.org/t/can-someone-make-a-build-for-orange-pi-zero-3/168930/38?u=ag1233

For DDR4 (chips, and I'm not sure if it is that chip or all chips), because 
address wraps around to some unknown address. Hence, it is not possible to 
make generic codes that possibly caters to some (other) combination of 
memory size.
And 'hacks' is about the only way.

I (we (in Armbian forums)) tried some stuff:

I did this hack
https://forum.armbian.com/topic/29202-orange-pi-zero-3/page/20/#comment-188328
static unsigned long mctl_calc_size(const struct dram_config *config)
{
        u8 width = config->bus_full_width ? 4 : 2;

        /* 8 banks */
        unsigned long long memsz = (1ULL << (config->cols + config->rows + 
3))
                * width * config->ranks;
        log_info("detected memsize %d M\n", (int)(memsz >> 20));
        /* 1.5 GB hardcoded */
        memsz = 2048UL * 1024UL * 1024UL * 3 / 4;
        return memsz;
}

1.5G is *hardcoded*, build a custom u-boot and we (in Armbian forums) 
ventured with some experiments:
in the same comment 
https://forum.armbian.com/topic/29202-orange-pi-zero-3/page/20/#comment-188328
Unhide the spoiler, for Armbian distribution built based on Debian bookwork 
and mainline Linux 6.7 kernel (possibly with a patched DTS as well, on top 
of that already there for Zero 3 and Zero 2W).

Currently that causes during linux boot:
[    2.144698] thermal thermal_zone0: gpu-thermal: critical temperature 
reached, shutting down
[    2.153147] reboot: HARDWARE PROTECTION shutdown (Temperature too high)
[    2.192185] reboot: Power down

if it is run with the mainline u-boot without this hack and the 'standard' 
boards e.g. 2G, 4G, it boots just fine. But that with the hack and on 1.5G 
Orange Pi Zero 3 board (I've only 1 of that) I get this gpu overheating 
goof on boot.

Someone else who had some issues detecting memory size with the Orange Pi 
vendor distributions (based on 6.1 kernels I think)
, tried the 1.5 G hacked u-boot replacing that in (patched into) Orange Pi 
vendor distributions.
https://forum.armbian.com/topic/29202-orange-pi-zero-3/?do=findComment&comment=188078
Unfortunately, it turns out that (Orange Pi's distributed) u-boot is 
customized / different and it 'crashes' when (this hacked mainline) u-boot 
tries to include/call /boot/boot.scr (or /boot/boot.cmd) scripts in the 
root filesystem.

This is currently the 'state of art' and I'm yet to figure out that 'gpu 
overheating' bug, which is obviously a bug (perhaps I've not considered 
some things)

On Monday, April 22, 2024 at 10:15:37 PM UTC+8 Andre Przywara wrote:

On Thu, 18 Apr 2024 22:40:59 -0700 (PDT) 
"'andrew g' via linux-sunxi" <linux...@googlegroups.com> wrote: 

Hi Andrew, 

> background: 
> 
> currently Armbian linux use the 'mainline u-boot' 
> https://source.denx.de/u-boot/u-boot 

Thanks for using mainline! 

> however, it has a '1.5GB' problem in that boards with 1.5GB DRAM is 
> detected incorrectly. 
> It detects 2GB instead possibly due to address wraparound, so the boot 
> crashes mid stream. 
> I'm trying to build a custom u-boot for a 'hack' i.e. to return 1.5GB 
dram 
> from the memory initialization and setup functions. in part to explore 
> solutions 

So yes, as you figured, the 1.5GB setup is not supported yet, mostly 
because no one with a board fixed that and sent a proper patch. 

There is this patch here - but please note that this is hack: 
https://lore.kernel.org/u-boot/20240413134352...@189.cn/T/#u 
<https://lore.kernel.org/u-boot/20240413134352.46495-1-da...@189.cn/T/#u> 

However in his reply Jernej gives some hints on what to do for a proper 
solution. 

So you might want to try this. Bonus points for trying to follow Jernej's 
hints and implementing that! 

Cheers, 
Andre 

P.S. Your build sequence below looks correct, and nice work on digging into 
the sequence. I sketched the U-Boot early code flow here: 
https://linux-sunxi.org/U-Boot/Boot_process 

> 
> what I tried and issues: 
> I'm building u-boot from 
> https://source.denx.de/u-boot/u-boot 
> basically following these instructions 
> https://docs.u-boot.org/en/latest/board/allwinner/sunxi.html 
> 
> my shell script ot build u-boot is like 
> #!/usr/bin/bash 
> export BL31=../arm-trusted-firmware/build/sun50i_h616/release/bl31.bin 
> make orangepi_zero3_defconfig 
> CROSS_COMPILE=aarch64-linux-gnu- make 
> 
> where the bl31 module from arm-trusted-firmware is in its own directory 
> build with 
> make CROSS_COMPILE=aarch64-linux-gnu- PLAT=sun50i_h616 
> 
> I did succeed with building u-boot and flashed the u-boot SPL into the sd 
> card 
> sudo dd if=u-boot-sunxi-with-spl.bin of=/de 
> v/sde bs=1024 seek=8 
> 
> and it actually boots, but : 
> U-Boot SPL 2024.04-00757-gbeac958153-dirty (Apr 19 2024 - 12:46:06 +0800) 
> DRAM: 0 MiB 
> Trying to boot from MMC1 
> NOTICE: BL31: v2.10.0(release):v2.10.0-729-gc8be7c08c 
> NOTICE: BL31: Built : 23:11:18, Apr 18 2024 
> NOTICE: BL31: Detected Allwinner H616 SoC (1823) 
> NOTICE: BL31: Found U-Boot DTB at 0x4a0be348, model: OrangePi Zero3 
> ERROR: RSB: set run-time address: 0x10003 
> U-Boot 2024.04-00757-gbeac958153-dirty (Apr 19 2024 - 12:46:06 +0800) 
> Allwinner Technology 
> 
> size=30, ptr=590, limit=2000: 26370 
> CPU: Allwinner H616 (SUN50I) 
> Model: OrangePi Zero3 
> DRAM: 0 Bytes 
> 
> So apparently the DRAM is not detected. I tried tracing flow execution by 
> placing 
> debug("tag"); or log_info("tag") in 
> board_init_f() 
> 
https://source.denx.de/u-boot/u-boot/-/blob/master/arch/arm/mach-sunxi/board.c?ref_type=heads#L457
 
> and 
> sunxi_dram_init() 
> 
https://source.denx.de/u-boot/u-boot/-/blob/master/arch/arm/mach-sunxi/dram_sun50i_h616.c?ref_type=heads#L1377
 
> 
> however, none of my tags are printed, which implies that the 
initialization 
> routines for both the board and sunxi_dram_init() are not called. 
> 
> I did configure logging to be pretty verbose in .config 
> # 
> # Logging 
> # 
> CONFIG_LOG=y 
> CONFIG_LOG_MAX_LEVEL=8 
> CONFIG_LOG_DEFAULT_LEVEL=8 
> CONFIG_LOG_CONSOLE=y 
> 
> I'm not sure what else could be wrong or how to go about it further. 
> 
> 

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/linux-sunxi/269f866e-7046-4eff-9c9b-b64788340cd3n%40googlegroups.com.

Reply via email to