diff options
author | Aleksandr Rybalko <ray@FreeBSD.org> | 2013-03-18 15:18:55 +0000 |
---|---|---|
committer | Aleksandr Rybalko <ray@FreeBSD.org> | 2013-03-18 15:18:55 +0000 |
commit | 4117c1db9e4732cc9523afe6981160432ee21462 (patch) | |
tree | 859e57920ab8bdf55d6052da0e47a88967cdff53 /sys/dev | |
parent | da6b2089d515ec4096b49945538535e9a4e7f7ee (diff) | |
download | src-4117c1db9e4732cc9523afe6981160432ee21462.tar.gz src-4117c1db9e4732cc9523afe6981160432ee21462.zip |
o Switch to use physical addresses in rman for FDT.
o Remove vtophys used to translate virtual address to physical in case rman carry virtual.
Sponsored by: The FreeBSD Foundation
Notes
Notes:
svn path=/head/; revision=248467
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/fdt/fdt_common.c | 12 | ||||
-rw-r--r-- | sys/dev/fdt/fdtbus.c | 10 | ||||
-rw-r--r-- | sys/dev/fdt/simplebus.c | 3 |
3 files changed, 15 insertions, 10 deletions
diff --git a/sys/dev/fdt/fdt_common.c b/sys/dev/fdt/fdt_common.c index e1913c13145a..e953051ed492 100644 --- a/sys/dev/fdt/fdt_common.c +++ b/sys/dev/fdt/fdt_common.c @@ -421,12 +421,12 @@ fdt_regsize(phandle_t node, u_long *base, u_long *size) int fdt_reg_to_rl(phandle_t node, struct resource_list *rl) { - u_long start, end, count; + u_long count; pcell_t *reg, *regptr; pcell_t addr_cells, size_cells; int tuple_size, tuples; int i, rv; - bus_space_handle_t vaddr; + bus_space_handle_t start, end; long busaddr, bussize; if (fdt_addrsize_cells(OF_parent(node), &addr_cells, &size_cells) != 0) @@ -457,14 +457,12 @@ fdt_reg_to_rl(phandle_t node, struct resource_list *rl) /* Calculate address range relative to base. */ start += busaddr; - if (bus_space_map(fdtbus_bs_tag, start, count, 0, &vaddr) != 0) - panic("Couldn't map the device memory"); - end = vaddr + count - 1; + end = start + count - 1; - debugf("reg addr start = %lx, end = %lx, count = %lx\n", vaddr, + debugf("reg addr start = %lx, end = %lx, count = %lx\n", start, end, count); - resource_list_add(rl, SYS_RES_MEMORY, i, vaddr, end, + resource_list_add(rl, SYS_RES_MEMORY, i, start, end, count); } rv = 0; diff --git a/sys/dev/fdt/fdtbus.c b/sys/dev/fdt/fdtbus.c index 770c4c846c14..38f8a9a87819 100644 --- a/sys/dev/fdt/fdtbus.c +++ b/sys/dev/fdt/fdtbus.c @@ -617,6 +617,16 @@ static int fdtbus_activate_resource(device_t bus, device_t child, int type, int rid, struct resource *res) { + bus_space_handle_t p; + int error; + + if (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT) { + error = bus_space_map(rman_get_bustag(res), + rman_get_bushandle(res), rman_get_size(res), 0, &p); + if (error) + return (error); + rman_set_bushandle(res, p); + } return (rman_activate_resource(res)); } diff --git a/sys/dev/fdt/simplebus.c b/sys/dev/fdt/simplebus.c index db9ade01a909..0a4a4a1f2dbc 100644 --- a/sys/dev/fdt/simplebus.c +++ b/sys/dev/fdt/simplebus.c @@ -179,7 +179,6 @@ simplebus_attach(device_t dev) device_printf(dev, "%s: could not process 'reg' " "property\n", di->di_ofw.obd_name); - /* XXX should unmap */ ofw_bus_gen_destroy_devinfo(&di->di_ofw); free(di, M_SIMPLEBUS); continue; @@ -189,7 +188,6 @@ simplebus_attach(device_t dev) device_printf(dev, "%s: could not process " "'interrupts' property\n", di->di_ofw.obd_name); resource_list_free(&di->di_res); - /* XXX should unmap */ ofw_bus_gen_destroy_devinfo(&di->di_ofw); free(di, M_SIMPLEBUS); continue; @@ -201,7 +199,6 @@ simplebus_attach(device_t dev) device_printf(dev, "could not add child: %s\n", di->di_ofw.obd_name); resource_list_free(&di->di_res); - /* XXX should unmap */ ofw_bus_gen_destroy_devinfo(&di->di_ofw); free(di, M_SIMPLEBUS); continue; |