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
This commit is contained in:
Aleksandr Rybalko 2013-03-18 15:18:55 +00:00
parent da6b2089d5
commit 4117c1db9e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=248467
4 changed files with 16 additions and 11 deletions

View file

@ -731,6 +731,6 @@ bs_c_8_proto(f);
* designed. It also serves to mark the locations needing that fix.
*/
#define BUS_SPACE_PHYSADDR(res, offs) \
(vtophys(rman_get_start(res)+(offs)))
((u_int)(rman_get_start(res)+(offs)))
#endif /* _MACHINE_BUS_H_ */

View file

@ -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;

View file

@ -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));
}

View file

@ -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;