Decided to write an answer, because I was searching exactly where this conversion from physical to virtual is done:
Let me leave a link to Linus'es original post:
Translating address in Kernel Space
So you can find this file
#include <asm/io.h>
not in mm folder, that I was originally expected, the reason is because difference between architecture are too wider thus each architecture has way more differences to embed everything in mm folder.
So look at arch/x86/include/asm/io.h file particularly virt_to_phys
https://codebrowser.dev/linux/linux/arch/x86/include/asm/io.h.html#virt_to_phys
And according to Linus comment in x86 everything simpler because bus address are the same virtual address, the difference between bus address and virtual is that bus address is how non-CPU devices see memory layout.
And again because in x86 it is simpler and both terms(bus address and virtual address) are used interchaningly
Following define can prove my words
#define isa_bus_to_virt phys_to_virt
Assuming that isa/pci are the external (non-CPU) devices.
If we elaborate a little bit more we can see that
in the file linux/arch/powerpc/mm/ioremap_32.c which is related to other architecture (PowerPC) where memory layout for ISA devices are different
https://codebrowser.dev/linux/linux/arch/powerpc/mm/ioremap_32.c.html
and can see in the function
__ioremap_caller
such a comment:
/*
* If the address lies within the first 16 MB, assume it's in ISA
* memory space
*/
if (p < 16 * 1024 * 1024)
p += _ISA_MEM_BASE;
which actually confirms Linus'es word that in PowerPC it has a little bit different layout, considering that bus address and virtual addresses are different.