123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /*
- * Copyright 2008 Freescale Semiconductor, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * Version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
- #include <common.h>
- #include <addr_map.h>
- static struct {
- phys_addr_t paddr;
- phys_size_t size;
- unsigned long vaddr;
- } 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);
- }
- unsigned long addrmap_phys_to_virt(phys_addr_t paddr)
- {
- 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)paddr;
- base = (u64)(address_map[i].paddr);
- upper = (u64)(address_map[i].size) + base - 1;
- if (addr >= base && addr <= upper) {
- return paddr - address_map[i].paddr + address_map[i].vaddr;
- }
- }
- return (unsigned long)(~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;
- }
|