40 lines
878 B
C
Raw Normal View History

2026-01-21 18:59:54 +08:00
// SPDX-License-Identifier: GPL-2.0
#include <linux/mmdebug.h>
#include <linux/module.h>
2026-01-29 22:25:33 +08:00
#include <linux/mm.h>
2026-01-21 18:59:54 +08:00
#include <asm/page.h>
2026-01-29 22:25:33 +08:00
unsigned long __phys_addr(unsigned long addr)
2026-01-21 18:59:54 +08:00
{
2026-01-29 22:25:33 +08:00
VIRTUAL_BUG_ON(addr < PAGE_OFFSET);
addr &= ~PAGE_OFFSET;
VIRTUAL_BUG_ON(!phys_addr_valid(addr));
return addr;
2026-01-21 18:59:54 +08:00
}
EXPORT_SYMBOL(__phys_addr);
2026-01-29 22:25:33 +08:00
bool __virt_addr_valid(unsigned long addr)
2026-01-21 18:59:54 +08:00
{
2026-01-29 22:25:33 +08:00
if (addr < PAGE_OFFSET)
return false;
addr &= ~PAGE_OFFSET;
return pfn_valid(addr >> PAGE_SHIFT);
}
EXPORT_SYMBOL(__virt_addr_valid);
2026-01-21 18:59:54 +08:00
2026-01-29 22:25:33 +08:00
#ifdef CONFIG_SUBARCH_C3B
#define LEGACY_BOOT_VA 0xffffffff80000000
unsigned long __boot_phys_addr(unsigned long addr)
{
if (addr >= LEGACY_BOOT_VA) {
addr &= ~LEGACY_BOOT_VA;
VIRTUAL_BUG_ON(addr >= KERNEL_IMAGE_SIZE);
2026-01-21 18:59:54 +08:00
} else {
2026-01-29 22:25:33 +08:00
VIRTUAL_BUG_ON(addr < PAGE_OFFSET);
addr &= ~PAGE_OFFSET;
VIRTUAL_BUG_ON(!phys_addr_valid(addr));
2026-01-21 18:59:54 +08:00
}
2026-01-29 22:25:33 +08:00
return addr;
2026-01-21 18:59:54 +08:00
}
2026-01-29 22:25:33 +08:00
#endif