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.