12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // SPDX-License-Identifier: GPL-2.0
- /*
- * Copyright 2008 Freescale Semiconductor, Inc.
- */
- #include <common.h>
- #include <addr_map.h>
- struct addrmap address_map[CONFIG_SYS_NUM_ADDR_MAP];
- phys_addr_t addrmap_virt_to_phys(void * vaddr)
- {
- int i;
- for (i = 0; i < CONFIG_SYS_NUM_ADDR_MAP; i++) {
- u64 base, upper, addr;
- if (address_map[i].size == 0)
- continue;
- addr = (u64)((u32)vaddr);
- base = (u64)(address_map[i].vaddr);
- upper = (u64)(address_map[i].size) + base - 1;
- if (addr >= base && addr <= upper) {
- return addr - address_map[i].vaddr + address_map[i].paddr;
- }
- }
- return (phys_addr_t)(~0);
- }
- void *addrmap_phys_to_virt(phys_addr_t paddr)
- {
- int i;
- for (i = 0; i < CONFIG_SYS_NUM_ADDR_MAP; i++) {
- phys_addr_t base, upper;
- if (address_map[i].size == 0)
- continue;
- base = address_map[i].paddr;
- upper = address_map[i].size + base - 1;
- if (paddr >= base && paddr <= upper) {
- phys_addr_t offset;
- offset = address_map[i].paddr - address_map[i].vaddr;
- return (void *)(unsigned long)(paddr - offset);
- }
- }
- return (void *)(~0);
- }
- void addrmap_set_entry(unsigned long vaddr, phys_addr_t paddr,
- phys_size_t size, int idx)
- {
- if (idx > CONFIG_SYS_NUM_ADDR_MAP)
- return;
- address_map[idx].vaddr = vaddr;
- address_map[idx].paddr = paddr;
- address_map[idx].size = size;
- }
|