mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-17 05:43:59 +00:00
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:
parent
da6b2089d5
commit
4117c1db9e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=248467
|
@ -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_ */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue