Date: Tue, 24 Jul 2012 22:48:12 +0000 (UTC) From: Jakub Wojciech Klama <jceel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r238757 - in user/jceel/soc2012_armv6/sys/arm: arm include Message-ID: <201207242248.q6OMmCoU082783@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jceel Date: Tue Jul 24 22:48:12 2012 New Revision: 238757 URL: http://svn.freebsd.org/changeset/base/238757 Log: Make arm_process_devmap() able to map FDT device nodes which are placed directly on root. Modified: user/jceel/soc2012_armv6/sys/arm/arm/machdep.c user/jceel/soc2012_armv6/sys/arm/include/pmap.h Modified: user/jceel/soc2012_armv6/sys/arm/arm/machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/arm/machdep.c Tue Jul 24 22:32:03 2012 (r238756) +++ user/jceel/soc2012_armv6/sys/arm/arm/machdep.c Tue Jul 24 22:48:12 2012 (r238757) @@ -928,26 +928,24 @@ arm_process_devmap(struct pmap_devmap *d if (node == -1) goto notfound; - + if ((parent = OF_parent(node)) <= 0) goto notfound; - + if (fdt_addrsize_cells(parent, &addr_cells, &size_cells)) goto notfound; + + fdt_regsize(node, &start, &size); if ((par_addr_cells = fdt_parent_addr_cells(parent)) > 2) - goto notfound; + goto noparent; nranges = fdt_read_ranges(parent, &rptr, addr_cells, par_addr_cells, size_cells); - if (nranges <= 0) - goto notfound; - - fdt_regsize(node, &start, &size); - - start += fdt_ranges_lookup(ranges, nranges, start, size); - + if (nranges > 0) + start += fdt_ranges_lookup(ranges, nranges, start, size); +noparent: entry->pd_pa = rounddown(start, PAGE_SIZE); entry->pd_size = roundup(size, PAGE_SIZE); Modified: user/jceel/soc2012_armv6/sys/arm/include/pmap.h ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/include/pmap.h Tue Jul 24 22:32:03 2012 (r238756) +++ user/jceel/soc2012_armv6/sys/arm/include/pmap.h Tue Jul 24 22:48:12 2012 (r238757) @@ -637,9 +637,12 @@ struct pmap_devmap { int pd_cache; /* cache attributes */ }; -#define DEVMAP_FDT(_name, _prot, _cache) {_name, 0, 0, 0, _prot, _cache} -#define DEVMAP_ENTRY(_pa, _size, _prot, _cache) {NULL, 0, _pa, _size, _prot, _cache} -#define DEVMAP_END {NULL, 0, 0, 0, 0, 0} +#define DEVMAP_FDT(_name, _prot, _cache) \ + {_name, 0, 0, 0, _prot, _cache} +#define DEVMAP_ENTRY(_pa, _size, _prot, _cache) \ + {NULL, 0, _pa, _size, _prot, _cache} +#define DEVMAP_END\ + {NULL, 0, 0, 0, 0, 0} const struct pmap_devmap *pmap_devmap_find_pa(vm_paddr_t, vm_size_t); const struct pmap_devmap *pmap_devmap_find_va(vm_offset_t, vm_size_t);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207242248.q6OMmCoU082783>