#uDRM - a portable Direct Rendering Manager

1 messages · Page 5 of 1

main crow
#

yes, that you do not need to make a large physically contignous memory area

livid sentinel
#

then we can still use map_device_memory and it would return not supported and the driver would then fallback to single page allocations and scatter gather

main crow
#

i mean i hardcode an 8 entry queue atm lol

livid sentinel
main crow
#

it also has difficulties with fragmentation

main crow
tawdry trench
#

what about fb memory?

#

that is easily more than a single page

main crow
#

not host memory

#

but hmm

tawdry trench
#

virtio_shm?

main crow
#

okay this sucks

#

making very large allocations is annoying for many designs

#

my allocator at least can deal with it, but its just bump allocating out of the memory map

#

and i wouldnt do that in a performance-targetting design

agile halo
#

just use scatter gather where ever its possible and if its not and you really need a big blob of memory then request a bigger block of memory from the kernel ig

agile halo
livid sentinel
main crow
#

gpus have page tables for a reason, though

tawdry trench
#

someone with more knowledge than me needs to decide this

main crow
#

i think its pretty simple though

#

allocations like that are very very hard to do

tawdry trench
#

then the kernel needs a way to signal capabilities to drivers

#

i wouldn't use large physical pages most of the time anyways

main crow
#

#if defined UAPI_KERNEL_HAS_FAST_LARGE_PHYS_ALLOC

livid sentinel
#

either also a iommu ifdef or both are combined and are abstracted behind a single function

main crow
#

iommus are not global

#

for example you may have an iommu for the normal gpu, but not the integrated gpu

livid sentinel
#

does such a plattform exists?

main crow
#

m1

livid sentinel
#

as this exact scenario soundy incredibly stupid design wise

main crow
#

i.e. yes

#

its not

#

iommus are expensive

#

and gotta go fast

#

the m1 has unified memory

#

and the GPU has its own page tables anyway

#

like for userspace mapping or something

livid sentinel
#

then ifdefs per driver?

main crow
#

its a runtime value

#

sometimes you just

#

dont have an iommu

#

so its a runtime per-device thing

livid sentinel
main crow
#

also it could if the user turns it off in the bios

#

also, GPUs are runtime hotplug which is fun

#

so yeah uh im glad im not the one designing this!

agile halo
main crow
agile halo
#

so yeah its not that uncommon

tawdry trench
#

drm will have a hotplug event

#

whatever linux drm can support

hexed flare
#

is it hard to support?
Also, there are PCs without that (?)

hexed flare
main crow
#

(2) yes

median yoke
#

I don't think I even own a PC with an iommu

livid sentinel
#

Afaik all x86_64 cpus that support virtualization have one

median yoke
#

3/3 of my computers with virtualization do not have an IOMMU

livid sentinel
#

Are they older?

median yoke
#

2013

#

They all have the acpi table for the IOMMU, but it's invalid

livid sentinel
#

Iommu is part of the virtualization extension but I don't know which gen

#

And maybe they only gave Server chips one

#

Maybe the mb doesn't support it

livid sentinel
median yoke
#

Wdym

livid sentinel
#

How do you know the acpi table for the iommu is invalid?

median yoke
#

It has 0 as the physical address

#

In the table

livid sentinel
#

Maybe it's disabled or broken firmware

#

Amd or Intel?

median yoke
#

Intel

median yoke
livid sentinel
#

Wikipedia lists the Core2 Quad Q9400 as one of the first supporting cpus (2007/08)

median yoke
#

Maybe my firmware is just stoobis

#

*stupid

livid sentinel
#

Maybe it's disabled in uefi?

main crow
#

you need iommus for thunderbolt

#

or secure thunderbolt anyway

#

so i think its gonna be a thing in all new stuff

errant onyx
#

i wonder if a thunderbolt device can do DMA without being limited by an iommu, if yes it could be used for cheats and probably a lot more stuff

main crow
#

otherwise lolnope

errant onyx
#

well yes I'm asking whether there are systems without an iommu for thunderbolt, I'd assume most do

#

because letting something do DMA on a USB port is probably a security hole so no sane design should let that happen?

livid sentinel
main crow
#

firewire:

robust abyss
#

Anything Skylake and newer usually comes with vtd enabled by default

median yoke
#

Bios doesn't have a setting

#

Iirc

livid sentinel
#

so apparently core i3s dont have a iommu so its possible for the user to combine a i3 with a thunderbolt mainboard
Insanity

livid sentinel
#

So from our discussions I think we need three different phys mem allocation paths:
-iommu mapping
-large continuous allocation
-"give me a list of pages"

#

The lowest one would be guaranteed to be supported, large allocations support with a define and iommu mapping with a define(to tell the driver that at least the kernel supports it) and fails with not_supported

robust abyss
#

Why do you even care if iommu is supported tho? The driver never really needs to touch physical memory directly so having every allocation just give a device address and virtual address is enough no?

robust abyss
livid sentinel
#

a iommu makes it very easy for the kernel and driver, the driver needs physical addresses for scatter gather lists, but tbh the iommu alloc and large alloc could be unified into one alloc function

#

a iommu means that no matter how fragmented your physical memory is you can always allocate memory for devices as long as you have sufficient total memory

robust abyss
#

I mean, technically yes but practically most allocations you need aren't that large

#

I agree that an API that makes it easy to have contig in virt and non-contig in device address can be nice

#

Linux basically just has dma_alloc_coherent, there are functions to map virtual memory to the device but they are highly discouraged from the ease of misuse

livid sentinel
robust abyss
#

Yeah that's pretty rare

#

Hardware vendors know that you need to keep minimal down to a page or two so they design the hardware with that in mind

#

Xhci segmented queues exists for a reason

agile halo
#

yeah most devices work with <= 4kb contiguous physical mem allocations and don't really benefit from larger ones that much

livid sentinel
#

so we want to artifically limit uAPI to those devices?

robust abyss
#

you could make larger queues with it, but nics for example usually cap at 512-1024 entries in a queue which even with 16 bytes per descriptor is only 8-16k which is really not that much

#

I say that no driver wants to have random defines around memory management just to know if it could happen to have a large allocation, or if it thinks it can benefit it could very much try to make the allocation and fallback

#

I think only one API is actually needed which is an alloc_sg, if the kernel can return it as a single contig device range so be it, otherwise it will segment it

livid sentinel
robust abyss
#

But why do you need any other one

#

And again the driver doesn't care for either

#

It could always just try and fail

#

You will have an if either way

#

And having random ifdefs around memory management is just error prone

agile halo
#

and for iommu it has to fallback anyway as its a runtime thing

robust abyss
#

And map_sg always succeeds, you can have a flag telling it it must be contig in device memory for the case you do care (which tbf there are, but the driver shouldn't spam it around if it supports both)

#

Like device address == physical address without iommu, but the driver literally doesn't care

#

For the driver it could be wherever

livid sentinel
#

so we could make it one single function that would return an array of {virt_addr,device_address,size}

#

with iommu or large alloc support it would be a single entry

robust abyss
#

It can always be contig in virt memory tho

#

Unless we want to support mmu-less drivers lel

agile halo
#

there is also a virtual map function already

#

couldn't it be like host phys addr + device phys addr + size?

robust abyss
#

Why do we need a virt map tho, in what case does a driver needs to map arbitrary physical address (ignoring uacpi completely)

livid sentinel
agile halo
#

or actually wait no that wouldn't work as the current map function just maps contiguous physical memory to some kernel-decided virt addr

#

ig returning an array of device addr + size and then a virt addr separately would work? though the driver doesn't always need the virt addr so ig there could be a flag for that

livid sentinel
#

in what scenario does the driver not need access to memory mapped for a device?

agile halo
#

scratch buffers only used by the device

#

xhci for an example has them

livid sentinel
#

we could add that as a flag parameter

agile halo
# agile halo xhci for an example has them

though I think those specifically also need to be saved/restored on suspend/wake so you'd need the virt addr to be able to do that but there might be cases when you don't need to do that

robust abyss
#

Pass null as the parameter to the out virt address

#

And it returns a handle you use to free

livid sentinel
#

that would make the function less readable

robust abyss
#

How so

#

Like you want to return a handle anyways, how else would you return the virt addr

livid sentinel
#

how would you differentiate a handle from a valid virt address

robust abyss
#

They are two different things

#

A handle is something pointer sized and opaque to the driver, only used for things operating on the mapping (in practice free)

#

Virt is the virtual address you are given back to access the memory

#

And we could have it optional

#

Like it's an out parameter

#

void**

livid sentinel
#

you currently want to pass both trou one parameter

robust abyss
#

No?

livid sentinel
#

if i understand correctly

robust abyss
#

uapi_handle_t thing(void** out_virt, ...)

livid sentinel
#

nevermind i understod you wrong

robust abyss
#

Technically we might want to return a status instead, but personally I think for memory allocation a null handle is enough to signify the allocation failed

livid sentinel
#

we should signal why it failed, if we add allocation constrains like force continuos or <4GB

#

so that the driver may handle it or just aborts

#

so uapi_mem_status thing(virtaddrhint, size, flags, handle)

hexed flare
livid sentinel
astral gate
#

It's debatable whether this would have any use, though. After all, it should be userspace that renders to the framebuffer, not the kernel

inner crater
#

virtually contiguous is not an allocator property, but a mapping thing

astral gate
#

I misread the message lol

#

I missed the "phys mem allocation" part

hexed flare
#

udrm disappeared from active threads nooo

tawdry trench
#

wtf

#

anyways, virtio memes shall continue today

hexed flare
#

How's uDRM doing? ultrameme

hexed flare
tawdry trench
#

no lol

tawdry trench
#

expect actual progress start of feb

#

i get 2 weeks off then

hexed flare
#

I'm asking because I'm in a mood for S3 sleep and it would be nice if it could do that

hexed flare
main crow
#

okay time to make a shkwve_modeset crate so i can beat you out meme

tawdry trench
#

go ahead meme

astral gate
#

marv needs that S5 sleep before he can work on uDRM trl

tawdry trench
#

FR

main crow
tawdry trench
#

real

#

im waiting for my ryzen to arrive so i can build a test station

main crow
#

because if you only do VMs is it really modesetting

tawdry trench
#

or in other words, my work laptop fucking sucks

#

so i'm building myself a work pc

#

work pc
9600X

tawdry trench
#

wbr

#

working on my setup at work is painful asf

hexed flare
#

And I have 2 PCs with COM ports

#

So I can test on physical hardware

median yoke
tawdry trench
#

troll

gleaming plume
north rock
#

vouch

maiden birch
gleaming plume
gleaming plume
maiden birch
#

You implemented a virtio GPU based opengl backend from scratch?

gleaming plume
#

Yeah

maiden birch
#

Damn

#

How many lines is it

gleaming plume
#

3k 4k if I remember it correctly

maiden birch
#

Where's the code for it?

unkempt hearth
gleaming plume
#

I think it's pushed on the repo

#

If not I need to upload it

maiden birch
#

Also lol found an old school os still with lai

gleaming plume
#

Yeah xD

#

A lai era OS

maiden birch
#

Was it on pause for a while?

gleaming plume
#

Yeah, I didn't have much time

#

Work consumes a lot of hours, but I'm having more time recently

maiden birch
gleaming plume
#

🤣🤣

maiden birch
#

What can the os do atm?

gleaming plume
#

Currently it can fully boot into a custom compositor based environment, it supports xhci mouse and keyboard, the compositor is really basic and doesn't have too much for now.

#

Nvme, etc

maiden birch
#

Thats cool

#

Is it posix

gleaming plume
#

Yeah

tawdry trench
maiden birch
#

Are you gonna make a progress thread?

gleaming plume
#

At least it tries to be

gleaming plume
maiden birch
#

Custom libc too?

maiden birch
#

Link?

gleaming plume
maiden birch
#

Ah

maiden birch
#

Ah

#

Cool

gleaming plume
#

The last progress I made was to implement the cursor thing on virtio

tawdry trench
#

looking through the code rn

#

you're relying a lot on HHDM

#

(not inherently a bad thing, but might cause issues)

gleaming plume
#

You mean using that on drivers?

#

It's not hard to port that to other types of mapping on the drivers

tawdry trench
#

cool

tawdry trench
#

lower 4G of phyiscal or the entire phys space?

gleaming plume
#

The kernel?

#

You mean what size I map or the address of that mapping?

tawdry trench
#

size yea

gleaming plume
#

lower 4G if I remember correctly

tawdry trench
#

that for example would crash on my PC meme

#

even in qemu

gleaming plume
#

False

#

I just map the addresses that exists

#

Based on the memory map

agile halo
#

above 4g too?

gleaming plume
#

If I remember correctly

gleaming plume
tawdry trench
#

i'm just mentioning this because it happened to me lol

gleaming plume
gleaming plume
gleaming plume
tawdry trench
#

nothing, just uDRM won't be able to use it at all

gleaming plume
#

Why?

tawdry trench
#

because uDRM also needs to work in user space

main crow
#

couldnt you make map return hhdm addresses?

#

ah

#

ah yeah

#

just hhdm map into userspace 4head

tawdry trench
gleaming plume
gleaming plume
main crow
#

kernel only tho

tawdry trench
main crow
#

and the userspace gpu driver is behind an SMMU

#

unless you search for "bypass the smmu" in the datasheet because there is a bit to bypass the smmu from the gpu side

inner crater
#

How's virtio going btw

tawdry trench
#

i can get it working today or tomorrow

inner crater
#

Based, happy to help today

#

I'm unavailable tomorrow tho

tawdry trench
#

i'll be off work at 4

inner crater
#

I'll be in VC at about 18:30 cet

median yoke
#

When uDRM

tired steppe
#

soon™️ is also gta vi

tawdry trench
#

i still need to find a way to test using an existing kernel

#

my own kernel is too bad

#

managarm is too phd for me

tired steppe
#

linux

median yoke
#

We got gta6 before udrm

hexed flare
#

Do you need mesa?

tawdry trench
#

yes

errant onyx
#

uDRMOS when

#

for testing uDRM

tawdry trench
#

lol

#

i could do it with linux

errant onyx
#

literally only does uDRM and nothing else

errant onyx
#

or a kernel module?

tawdry trench
#

userspace would be fucking based lol

errant onyx
#

yea userspace would be based af

tawdry trench
#

i mean udrm is meant to run on microkernels

errant onyx
#

do userspace then

tawdry trench
#

hm

errant onyx
#

it's easier for debugging too

errant onyx
tawdry trench
#

:3

errant onyx
#

without rebooting possibly

tawdry trench
#

good point

#

time to clone kernel

errant onyx
#

don't forget --depth 1

#

and do you need the kernel for doing it in userspace? does linux expose the needed stuff to userspace?

tawdry trench
#

uhhhhhh

errant onyx
#

e.g. can you map a device's pci configuration space to a process?

half forge
#

iirc for Linux userspace drivers you need a small kernel module that does hard irqs

errant onyx
#

that's finee

half forge
#

but all other stuff can be done in userspace

tawdry trench
#

yep

tawdry trench
#

you can read pci cfg space through sysfs

errant onyx
#

udrm through sysfs is diabolical

tawdry trench
#

i have not worked with linux userspace stuff before

errant onyx
#

time to learn then!

#

don't call the platform just linux imo

#

call it linux userspace or something

#

you might have a udrm in kernel space later

main crow
#

i literally told you this before already btw

tawdry trench
#

i have memory loss

main crow
#

i can tell

#

lol

#

vfio is the stuff you do for passthrough

#

so you pretend udrm is a """virtual machine"""

#

so that you can steal the gpu for testing stuff

#

and that works for modeset at least

agile halo
main crow
#

huh

#

on linux?

#

im guessing integrated gpus are weirder tho

agile halo
#

the south bridge registers that are used for stuff like display detection just don't properly work

main crow
#

ah

#

damn lol

inner crater
#

I've never tried anything behind coffee lake tho

agile halo
#

yeah, I also tried it with the igd stuff but no dice (for an example SHOTPLUG_CTL + SDEIIR just returns all zeros regardless if there is something connected or not iirc)

inner crater
#

That might be some kernel meme tho

#

Or

#

Is that supposed to even work on that gen

agile halo
#

it is supposed to work yeah, I tested it on bare metal boot and it worked just fine

inner crater
#

Idk how sriov relates to all of it too

#

Intel changed around how all of the virtualization modes work with tiger lake iirc

main crow
#

gpu moment

inner crater
#

It's almost like gpus are somewhat small computers of their own

tawdry trench
agile halo
#

especially when you start to consider all the render stuff too

#

EUs executing their own code and then communicating with the shared functions using message queues (well its not really exposed like that, its just a send() instruction to send a message to a specific target function)

#

(on intel)

unkempt hearth
#

Re-asking here, what's the status of uAPI?

hexed flare
#

How is uDRM going? meme

tawdry trench
#

i should have something working in the next few weeks

#

i have little to do until march

hexed flare
#

cool

tawdry trench
#

im using linux as a test kernel since that's the easiest for me to work with and is guaranteed to have everything i need

tawdry trench
#

okay linux is saying hello to udrm

#

@maiden birch this might be too late but uapi is really not a convenient name

maiden birch
#

got any better ideas?

#

right now seems like the perfect time to change it since nothing uses it

astral gate
shut sorrel
#

μapi

astral gate
#

µ

#

yes

#

require a system with a keybind for writing 'µ' for using uAPI

errant onyx
#

include/µapi

tawdry trench
astral gate
#

alright. a new name is needed

tawdry trench
#

udi

astral gate
#

uniform driver interface?

tawdry trench
#

yea

#

but that's already a thing

astral gate
tawdry trench
#

(although it sucks terribly)

astral gate
#

I think I read about something like that

tawdry trench
#

its just dead

median yoke
#

mudi

#

more unified driver interface

tawdry trench
#

unified udi

astral gate
#

my opinion is that we need no "uAPI"/common driver interface. the reason for this is that the kernel APIs required by eg. uDRM and uACPI differ substantially, to the point that the cost of maintaining a separate "uAPI" exceeds the benefit

tawdry trench
#

uHDA would also use it

median yoke
#

write the code for obos

tawdry trench
#

but you are right

median yoke
tawdry trench
#

do you have msix

median yoke
#

yes

#

(well I do after I fix the MSI-X code that broke once upon a time...)

tawdry trench
#

im not against it

astral gate
#

(this might be a bad example, I guess, because GPU drivers might want specific caching modes for certain things, and that cannot be done by uacpi_kernel_map as of today)

errant onyx
#

micro unified udi

#

uuudi

#

or maybe

astral gate
#

µuudi

errant onyx
#

advanced unified driver interface

#

audi

hexed flare
#

Just ultraAPI?

errant onyx
#

imagine ultraAPI in linux

hexed flare
#

but linux has their own drivers

#

(except uACPI eventually trl)

mortal harness
astral gate
#

(except ACPICA now)

mortal harness
#

i never saw a greater design by committee in my life

hexed flare
errant onyx
#

ultra advanced performance unified driver interface
UAPUDI

mortal harness
#

and i don't mind designs by committee but UDI is insane and the osdev wiki community sought to make it moreso by making it bytecode

mortal harness
astral gate
#

Let's not do that.

shut sorrel
#

I actually wanted to implement udi once
thankfully people here stopped me

astral gate
#

you can design something really well

#

and you can implement it really well

#

those are two separate things.

mortal harness
#

the website is down

#

1 second

astral gate
#

and I believe we should strive for the latter

#

iirc Torvalds said something along the lines of "Linux is good engineering, not good design."

#

and I agree with that to some extent

mortal harness
#
static udi_pio_trans_t cmos_trans_read[] = {
        /* R0 <- SCRATCH_ADDR {offset into scratch of address} */
        { UDI_PIO_LOAD_IMM+UDI_PIO_R0, UDI_PIO_2BYTE, SCRATCH_ADDR },
        /* R1 <- address */
        { UDI_PIO_LOAD+UDI_PIO_SCRATCH+UDI_PIO_R0,
                                UDI_PIO_1BYTE, UDI_PIO_R1 },
        /* R0 <- SCRATCH_COUNT {offset into scratch of count} */
        { UDI_PIO_LOAD_IMM+UDI_PIO_R0, UDI_PIO_2BYTE, SCRATCH_COUNT },
        /* R2 <- count */
        { UDI_PIO_LOAD+UDI_PIO_SCRATCH+UDI_PIO_R0,
                                UDI_PIO_1BYTE, UDI_PIO_R2 },
        /* R0 <- 0 {current buffer offset} */
        { UDI_PIO_LOAD_IMM+UDI_PIO_R0, UDI_PIO_2BYTE, 0 },
        /* begin main loop */
        { UDI_PIO_LABEL, 0, 1 },
        /* output address from R1 to address register */
        { UDI_PIO_OUT+UDI_PIO_DIRECT+UDI_PIO_R1,
                                UDI_PIO_1BYTE, CMOS_ADDR },
        /* input value from data register into next buffer location */
        { UDI_PIO_IN+UDI_PIO_BUF+UDI_PIO_R0,
                                UDI_PIO_1BYTE, CMOS_DATA },
        /* decrement count (in R2) */
        { UDI_PIO_ADD_IMM+UDI_PIO_R2, UDI_PIO_1BYTE, (udi_ubit8_t)-1 },
        /* if count is zero, we're done */
        { UDI_PIO_CSKIP+UDI_PIO_R2, UDI_PIO_1BYTE, UDI_PIO_NZ },
        { UDI_PIO_END_IMM, UDI_PIO_2BYTE, 0 },
        /* increment address and buffer offset */
        { UDI_PIO_ADD_IMM+UDI_PIO_R1, UDI_PIO_1BYTE, 1 },
        { UDI_PIO_ADD_IMM+UDI_PIO_R0, UDI_PIO_1BYTE, 1 },
        /* go back to main loop */
        { UDI_PIO_BRANCH, 0, 1 }
};
shut sorrel
median yoke
astral gate
#

ACPI is (often) bytecode, and UDI is apparently also (sometimes) bytecode... lui (lightweight UDI interpreter) or uUDI when?

maiden birch
mortal harness
#

what's worse udi (from the relatively superficial inspection i made of it) seems extremely static

#

things must be defined in advance in properties textfiles and it looks to be an interface fundamentally incompatible with treating modern day needs like multi-queue devices with core local queues + MSIs

errant onyx
#

IT'S BECOMING REAL

#

everything is being unified we're approaching singularity

#

all osdev projects will merge

astral gate
#

... and that is a bad thing

errant onyx
#

yep

#

but it's funny

mortal harness
#

and some, i assume, of UDI are good ideas

astral gate
#

if well over 90% of your code is just dealing with an interface instead of doing the work that it should be doing, that interface (UDI) is probably bad

#

or rather

#

it is a hint that a better interface is probably possible

maiden birch
#

No way this is real

tawdry trench
#

that's not fucking real

#

I refuse

astral gate
#

no. obviously fadanoid just wrote 5496 lines of actual code to make a joke

static prairie
#

surprising that they didn't at least invent some assembler for it so you don't have to fuss around with the arrays of structs by hand

mortal harness
tawdry trench
#

"""""simpler"""""

shut sorrel
#

lmao

tawdry trench
shut sorrel
#

definitely fewer lines

mortal harness
#

believe it or not there is allegedly a full USB stack that was implemented in this

tawdry trench
mortal harness
#

at least full by the standards of the late 90s

#

unfortunately it's sco so it's proprietary

maiden birch
#

and does anyone actually use them

tawdry trench
#

go figure

mortal harness
# maiden birch where do u get these

i have a copy of the UDI Implementor's Licensed Reference Implementation sitting on my hard drive from some time ago, probably 2023 when i last looked at udi

tawdry trench
#

i dont like this

maiden birch
#

Probably not a single soul does

mortal harness
#

amusing remark from there:

The complexity of ACPI makes people want to use ACPICA. The complexity of UDI should make people want to use Project UDI.

tawdry trench
#

lmao

tawdry trench
#

jfc

mortal harness
#
    // - Reset Sequence
    // > Power on
    LOAD_IMM.B R0, 0x00;
    OUT.B Regs::Config1 as _, R0;
    // > Reset and wait for the reset bit to clear
    LOAD_IMM.B R0, 0x10;
    OUT.B Regs::Cmd as _ ,R0;
    LABEL 1;
    IN.B R0, Regs::Cmd as _;
    AND_IMM.B R0, 0x10;
    CSKIP.B R0 Z;
    BRANCH 1;
    // > Reset complete
    // > Disable interrupts
    LOAD_IMM.S R0, 0x00;
    OUT.S Regs::Imr as _, R0;
maiden birch
#

Like wtf

#

What is this doing even why is it needed

tawdry trench
#

aml if it was even worse

maiden birch
mortal harness
static prairie
maiden birch
#

Or ya know

#

Int x = 0

tawdry trench
#

💀

#

iirc udi drivers were supposed to be arch independent?

#

like fully

half forge
#

well judging by the example drivers posted earlier that's a failure

#

they still need C sources

maiden birch
#

The c language is like fully arch independent lmfao

tawdry trench
#

on a binary level

half forge
#

and if you need C sources why have bytecode

tawdry trench
#

^

maiden birch
mortal harness
#

the official reason, if you are interested, is because they thought in the future drivers would be run mostly on special coprocessors, and only those coprocessors would have access to the register spaces of devices

half forge
#

...why did they think that?

maiden birch
#

What the hell

tawdry trench
#

that's fucking stupid

mortal harness
#

so udi drivers require all such accesses to happen by instructions to the udi pio subsystem, so they can add support for these coprocessors in the future

tawdry trench
#

they didn't think of hardware vendors not giving a singular shit lmfao

maiden birch
#

Was it designed in the 70s

tawdry trench
#

i mean, look at the risc-v hardware people

#

it's literally a "everyone does what they feel like" situation

maiden birch
#

I've never seen driver coprocessors

mortal harness
#

they had some in old mainframes

#

channel i/o controllers

maiden birch
#

How old is udi

mortal harness
#

the committee sat from 1995 and completed the specification in 2001

maiden birch
#

Damn

#

Seems like an outdated idea at that point

tawdry trench
#

tldr unified interfaces are bad a lot of the time

astral gate
tawdry trench
#

i wonder if it's feasible to make a linux abstraction layer for the drivers

inner crater
#

freebsd does that sometimes

tawdry trench
#

i know they do it for the drm drivers

#

maybe that makes more sense tbh

tawdry trench
#

uDRM - a portable Direct Rendering Manager

hexed flare
#

How's uDRM doing? meme

tawdry trench
#

still doing research on xe modeset

maiden birch
#

X E

tawdry trench
#

intel X E.

unreal pagoda
#

i already made this joke

#

thieves

livid sentinel
#

What will be the oldest Nvidia card supported? I have a few quadro fx 570s lying around

tawdry trench
#

I'm currently only going to do nvidia gpud with GSP

tawdry trench
#

i think gtx 1660 also works?

#

cc @inner crater

inner crater
#

iirc 1600 series has GSP too

livid sentinel
#

How hard would it be to write a driver for such an old card if one would have full documentation?

inner crater
#

do you have full documentation?

#

also what do you mean by such an old card

errant onyx
#

i think they mean quadro fx 750

inner crater
#

holy shit that's ancient

#

idk, probably best to look at nouveau to figure out what it takes

hexed flare
#

I have a PC with AMD iGPU which has documentation for it...

#

Idk the one that was before GCN

tawdry trench
#

for amd i only have Polaris, Vega and RDNA3 cards

hexed flare
tawdry trench
#

the code is open

#

that's my documentation

#

also, i have my sources

#

i also have access to the pci spec meme

#

legally

robust abyss
#

What an osdev way to flex about money :^)

tawdry trench
#

wdym money

#

i didn't buy them lol

#

my company is a pci sig partner

obtuse matrix
fiery sierra
unkempt hearth
tawdry trench
robust abyss
dusky current
tired steppe
#

Any progress?

maiden birch
#

the project has been cancelled

shut sorrel
#

I saw an unread udrm thread and I got excited for a moment smh my head

inner crater
#

lil might be seeing some work soon™️

tawdry trench
#

yep

fiery sierra
#

With the help of ChatGPT I am continuing the work on this project

tawdry trench
#

no

shut sorrel
#

no

maiden birch
#

Good luck

shut sorrel
#

even luck won't help him

fiery sierra
#

Guys... I'm getting an error
cd: udrm: No such file or directory

#

How to fix

tawdry trench
#

sudo rm /boot/init*

fiery sierra
#

Didn't work

frozen matrix
#

Try rebooting then, must be busted state trl

tired steppe
tired steppe
maiden birch
#

lil

errant onyx
#

big

shut sorrel
#

if true

tawdry trench
frigid island
#

Would anyone be able to give me the gh link lol

#

I won't bother scrolling up this conversation on phone

tawdry trench
#

it's dead

frigid island
#

rip

#

why

tawdry trench
#

lil exists

#

from the managarm project

maiden birch
tawdry trench
#

also yeah using lil + a small drm handler isn't very hard

ivory depot
tawdry trench
#

but it's designed to support anything

ivory depot
#

does it have like 3d acceleration?

maiden birch
#

no

ivory depot
#

ig its time to buy a intel igpu

maiden birch
#

for nvidia use nvidia-open

#

it has a very large api surface tho

tawdry trench
inner crater
tawdry trench
#

intel arcs are pretty good

ivory depot
maiden birch
#

yes

#

port it