18 lines
1.3 KiB
Markdown
18 lines
1.3 KiB
Markdown
|
|
There are (at least) two different kinds of clocks defined in the ADT:
|
|
|
|
* `clock-gates` or `power-gates` which index into the `devices` array of the `pmgr` ADT node
|
|
* `clock-ids` which represent clocks with a frequency and index into the `clock-frequencies` array of the `arm-io` node
|
|
|
|
## clock-gates / power-gates
|
|
|
|
Gated clocks are used to remove the clock signal to certain peripherals when they are not used. The ids for a specific ADT node usually need to be turned on before the MMIO region of that device can be accessed.
|
|
|
|
There is probably also some topology involved in these clocks since e.g. `SIO`, `UART_P` and `UART0` seem to be required to access the UART MMIO region even though the UART node only requests `UART0`.
|
|
|
|
## clock-ids
|
|
|
|
These clocks are likely preconfigured by iBoot and never touched by XNU itself. Their frequencies are passed as nodes in the ADT. Low indexes (<0x100, but probably only 6 or so) are clocks given in the `cpu0` node (e.g. `bus-frequency`) and for now all seem to be set to 24 MHz.
|
|
Indexes above 0x100 map to the `clock-frequencies` array of the `arm-io` node. These are usually used as reference clocks for e.g. the UART or the I2C bus.
|
|
|
|
There is also the `clock-frequencies-regs` property but it's unknown how exactly the registers in there map to the above mentioned clocks. That property also seems to be completely unused by XNU. |