Changeset View
Changeset View
Standalone View
Standalone View
sys/arm/amlogic/aml8726/aml8726_clkmsr.c
Show First 20 Lines • Show All 238 Lines • ▼ Show 20 Lines | |||||
EARLY_DRIVER_MODULE(clkmsr, simplebus, aml8726_clkmsr_driver, | EARLY_DRIVER_MODULE(clkmsr, simplebus, aml8726_clkmsr_driver, | ||||
aml8726_clkmsr_devclass, 0, 0, BUS_PASS_CPU + BUS_PASS_ORDER_EARLY); | aml8726_clkmsr_devclass, 0, 0, BUS_PASS_CPU + BUS_PASS_ORDER_EARLY); | ||||
int | int | ||||
aml8726_clkmsr_bus_frequency() | aml8726_clkmsr_bus_frequency() | ||||
{ | { | ||||
struct resource mem; | struct resource mem; | ||||
struct aml8726_clkmsr_softc sc; | struct aml8726_clkmsr_softc sc; | ||||
bus_size_t size; | |||||
phandle_t node; | phandle_t node; | ||||
u_long pbase, psize; | |||||
u_long start, size; | |||||
int freq; | int freq; | ||||
KASSERT(aml8726_soc_hw_rev != AML_SOC_HW_REV_UNKNOWN, | KASSERT(aml8726_soc_hw_rev != AML_SOC_HW_REV_UNKNOWN, | ||||
("aml8726_soc_hw_rev isn't initialized")); | ("aml8726_soc_hw_rev isn't initialized")); | ||||
/* | /* | ||||
* Try to access the clkmsr node directly i.e. through /aliases/. | * Try to access the clkmsr node directly i.e. through /aliases/. | ||||
*/ | */ | ||||
if ((node = OF_finddevice("clkmsr")) != 0) | if ((node = OF_finddevice("clkmsr")) != 0) | ||||
if (fdt_is_compatible_strict(node, "amlogic,aml8726-clkmsr")) | if (fdt_is_compatible_strict(node, "amlogic,aml8726-clkmsr")) | ||||
goto moveon; | goto moveon; | ||||
/* | /* | ||||
* Find the node the long way. | * Find the node the long way. | ||||
*/ | */ | ||||
if ((node = OF_finddevice("/soc")) == 0) | if ((node = OF_finddevice("/soc")) == 0) | ||||
return (0); | return (0); | ||||
if ((node = fdt_find_compatible(node, | if ((node = fdt_find_compatible(node, | ||||
"amlogic,aml8726-clkmsr", 1)) == 0) | "amlogic,aml8726-clkmsr", 1)) == 0) | ||||
return (0); | return (0); | ||||
moveon: | moveon: | ||||
if (fdt_get_range(OF_parent(node), 0, &pbase, &psize) != 0 | |||||
|| fdt_regsize(node, &start, &size) != 0) | |||||
return (0); | |||||
start += pbase; | |||||
memset(&mem, 0, sizeof(mem)); | memset(&mem, 0, sizeof(mem)); | ||||
mem.r_bustag = fdtbus_bs_tag; | if (OF_decode_addr(node, 0, &mem.r_bustag, &mem.r_bushandle, &size) !=0) | ||||
if (bus_space_map(mem.r_bustag, start, size, 0, &mem.r_bushandle) != 0) | |||||
return (0); | return (0); | ||||
/* | /* | ||||
* Build an incomplete (however sufficient for the purpose | * Build an incomplete (however sufficient for the purpose | ||||
* of calling aml8726_clkmsr_clock_frequency) softc. | * of calling aml8726_clkmsr_clock_frequency) softc. | ||||
*/ | */ | ||||
memset(&sc, 0, sizeof(sc)); | memset(&sc, 0, sizeof(sc)); | ||||
Show All 9 Lines |