Hi Geert,

On 25.5.2025 15.05, Geert Uytterhoeven wrote:
On Thu, 22 May 2025 at 00:56, Eero Tamminen <o...@helsinkinet.fi> wrote:
On 21.5.2025 10.06, Geert Uytterhoeven wrote:
I do keep it up-to-date locally, so I could provide these changes,
if you are interested.

Yes, please!   (see below)

Sorry for taking so long:
https://web.git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git/log/?h=atari-drm-wip-rebasing

Thanks!

I did boot testing on Hatari emulator with a minimal kernel config having atari_drm enabled, atafb disabled, FB & boot logo enabled.

Under Falcon emulation:
- RGB/VGA => works fine
- Mono monitor => panic
  "Kernel panic - not syncing: can't set default video mode"

Under TT emulation:
- RGB/VGA => boots, but console is black[1] (palette issue?)
- Mono monitor => looks OKish[2], but has constant warnings:
-----------------------------------
WARNING: CPU: 0 PID: 1 at drivers/gpu/drm/drm_atomic_helper.c:1720 drm_atomic_helper_wait_for_vblanks+0x1a0/0x1ee
[CRTC:35:crtc-0] vblank wait timed out
-----------------------------------

Under 030 ST/STe emulation:
- RGB/VGA => boots, but console is black (palette issue?)
- Mono monitor => looks OK, but has constant slowpath warnings with:
  "[CRTC:35:crtc-0] vblank wait timed out"

=> Any advice on the issues?

[1] Black when booted with (Hatari) LILO, all white when booted with "bootstra.prg", meaning from TOS.

[2] Mono colors are black on white instead of vice verse, e.g. boot logo colors are obviously inversed.

Note: the functional differences between ST, STE, TT and Falcon are all accurately emulated in Hatari.


        - Eero

PS. I also profiled where most of time goes from "atari-drm" probing, until boot reaches user space. On a minimal -Os built kernel, running on (emulated) 32Mhz 030 Falcon, in the default 640x480@4 resolution:
----------------------------------------------------------------
Time spent in profile = 15.29712s.
...
Used cycles:
  22.37%  22.42%  25.35%   _transp
  19.15%  19.19%  46.82%   atari_drm_fb_blit_rect.isra.0
   8.09%   8.09%  13.80%   sys_copyarea
   3.94%   3.95%   6.23%   sys_imageblit
   3.69%   3.69%   3.69%   fb_copy_offset.isra.0
   2.12%   2.13%   2.41%   atari_scsi_falcon_reg_read
   2.03%   2.03%   2.03%   fb_address_forward
   1.85%   1.85%  17.98%   fbcon_redraw_blit.constprop.0
   1.81%   1.81%   2.04%   atari_keyb_init
   1.78%   1.78%   1.98%   fb_reverse_long
   1.58%   1.58%   1.90%   arch_cpu_idle
   1.05%                   memcpy
   0.95%                   memset
...
----------------------------------------------------------------

=> atari-drm blitting takes half the time during boot.

Building kernel with -O2, changes above rather radically, both time-wise, and where that time goes:
----------------------------------------------------------------
Time spent in profile = 6.54049s.
...
Used cycles:
  17.61%  17.61%  17.61%   sys_copyarea
  11.18%  11.18%  13.11%   arch_cpu_idle
   7.53%   7.55%   8.45%   atari_drm_fb_blit_rect.isra.0
   4.26%   4.27%   4.76%   atari_keyb_init
   2.70%   2.70%   2.93%   atari_scsi_falcon_reg_read
   2.45%   2.45%  23.81%   fbcon_redraw_blit.constprop.0
   2.35%   2.35%   2.48%   sys_imageblit
   2.12%   2.12%   5.89%   atari_floppy_init
   1.97%                   memset
   1.31%                   memcpy
...
Instruction cache misses:
  27.14%  27.14%  27.14%   sys_copyarea
   3.77%   3.77%   4.05%   atari_scsi_falcon_reg_read
...
Data cache hits:
  63.55%  63.55%  63.67%   atari_keyb_init
   7.61%   7.62%   7.84%   atari_drm_fb_blit_rect.isra.0
   3.86%   3.86%   3.86%   sys_copyarea <= not much hits for copying
...
----------------------------------------------------------------

However, -O2 build has the downside that the resulting kernel Oopses once it reaches user-space, if 030 data cache emulation is enabled:
----------------------------------------------------------------
Run /init as init process
...
Instruction fault at 0x0041a256
BAD KERNEL BUSERR
Oops: 00000000
PC: [<0041a256>] __generic_copy_from_user+0x1e/0x46
SR: 2200  SP: (ptrval)  a2: 011fe590
d0: 00000005    d1: 00000000    d2: 00000003    d3: 00000003
d4: 00000008    d5: 00000000    a0: eff70720    a1: 01225f9c
Process init (pid: 32, task=(ptrval))
Frame format=B ssw=5066 isc=5380 isb=66f6 daddr=eff7071c dobuf=00000000
baddr=eff7071c dibuf=eff7071c ver=0
Stack from 01225f78:
        ...
Call Trace: [<000409b0>] sys_rt_sigaction+0x32/0xc8
 [<00005062>] req_need_defer+0x2a/0x3a
 [<0000a4ca>] syscall+0x8/0xc

Code: 7403 c282 206e 000c 226e 0008 4a80 670a <0e98> 2000 22c2 5380 66f6 0801 0001 6706 0e58 2000 32c2 0801 0000 6706 0e18 2000
Disabling lock debugging due to kernel taint
Instruction fault at 0x00088ada
BAD KERNEL BUSERR
Oops: 00000000
PC: [<00088ada>] exit_robust_list+0x12/0xee
SR: 2200  SP: (ptrval)  a2: 011fe590
d0: 00000000    d1: 00000000    d2: 011fe94e    d3: 000000ff
d4: 00000000    d5: 00000000    a0: 011fe590    a1: 011e2b90
Process init (pid: 32, task=(ptrval))
Frame format=B ssw=5066 isc=660a isb=0eab daddr=801a206c dobuf=011fe94e
baddr=801a206c dibuf=801a206c ver=0
Stack from 01225dc8:
        ....
Call Trace: [<00003730>] _printk+0x0/0x16
 [<000896ce>] futex_exit_release+0x9e/0xb8
 [<00030186>] exit_mm_release+0x12/0x28
 [<00034612>] do_exit+0x178/0x96e
 [<00002200>] show_stack+0xce/0xf4
 [<000691da>] vprintk+0x12/0x16
 [<00034e84>] make_task_dead+0x7c/0x172
 [<00005066>] req_need_defer+0x2e/0x3a
 [<00003730>] _printk+0x0/0x16
 [<0000d514>] die_if_kernel+0x0/0x22
 [<0000d536>] trap_c+0x0/0x24c
 [<0000ddaa>] buserr_c+0x628/0x756
 [<0000a3f0>] buserr+0x20/0x28
 [<00005066>] req_need_defer+0x2e/0x3a
 [<0004097e>] sys_rt_sigaction+0x0/0xc8
 [<00020007>] _FP_CALL_TOP+0x48e5/0xd512
 [<00002000>] _start+0x0/0x6
 [<000409b0>] sys_rt_sigaction+0x32/0xc8
 [<00005062>] req_need_defer+0x2a/0x3a
 [<0000a4ca>] syscall+0x8/0xc
----------------------------------------------------------------

My GCC is 12.2 in Debian bookworm, and "/init" is shell script run with static Debian Busybox, to mount virtual file systems:
https://github.com/hatari/hatari/blob/main/tools/linux/init.sh

On an small system image built and used as documented here:
https://github.com/hatari/hatari/blob/main/doc/m68k-linux.txt

Reply via email to