| Supported Features |
| ================== |
| |
| In addition to the standard architecture devices (HPET, local and I/O APICs, |
| etc.), Zephyr supports the following Apollo Lake-specific SoC devices: |
| |
| * HSUART |
| |
| * GPIO |
| |
| * I2C |
| |
| HSUART High-Speed Serial Port Support |
| ------------------------------------- |
| |
| The Apollo Lake UARTs are NS16550-compatible, with "high-speed" capability. |
| |
| Baud rates beyond 115.2kbps (up to 3.6864Mbps) are supported, with additional |
| configuration. The UARTs are fed a master clock which is fed into a PLL which |
| in turn outputs the baud master clock. The PLL is controlled by a per-UART |
| 32-bit register called ``PRV_CLOCK_PARAMS`` (aka the ``PCP``), the format of |
| which is: |
| |
| +--------+---------+--------+--------+ |
| | [31] | [30:16] | [15:1] | [0] | |
| +========+=========+========+========+ |
| | enable | ``m`` | ``n`` | toggle | |
| +--------+---------+--------+--------+ |
| |
| The resulting baud master clock frequency is ``(n/m)`` * master. |
| |
| Typically, the master clock is 100MHz, and the firmware by default sets |
| the ``PCP`` to ``0x3d090240``, i.e., ``n = 288``, ``m = 15625``, which |
| results in the de-facto standard 1.8432MHz master clock and a max baud rate |
| of 115.2k. Higher baud rates are enabled by changing the PCP and telling |
| Zephyr what the resulting master clock is. |
| |
| Use devicetree to set the value of the ``PRV_CLOCK_PARAMS`` register in |
| the UART block of interest. Typically a devicetree overlay file would be |
| present in the application directory (specific to the board, such as |
| ``up_squared.overlay``), with contents like this: |
| |
| .. code-block:: console |
| |
| / { |
| soc { |
| uart@0 { |
| pcp = <0x3d090900>; |
| clock-frequency = <7372800>; |
| current-speed = <230400>; |
| }; |
| }; |
| }; |
| |
| The relevant variables are ``pcp`` (the value to use for ``PRV_CLOCK_PARAMS``), |
| and ``clock-frequency`` (the resulting baud master clock). The meaning of |
| ``current-speed`` is unchanged, and as usual indicates the initial baud rate. |