- Nov 01, 2017
-
-
Kever Yang authored
Init the CPU and its buses to speed up the boot time. Move rkclk_init() to a place after rk3399_configure_cpu has defined at the same time, or else there will be a warning. Signed-off-by:
Kever Yang <kever.yang@rock-chips.com> Reviewed-by:
Simon Glass <sjg@chromium.org> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Acked-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
- Oct 04, 2017
-
-
Masahiro Yamada authored
U-Boot widely uses error() as a bit noisier variant of printf(). This macro causes name conflict with the following line in include/linux/compiler-gcc.h: # define __compiletime_error(message) __attribute__((error(message))) This prevents us from using __compiletime_error(), and makes it difficult to fully sync BUILD_BUG macros with Linux. (Notice Linux's BUILD_BUG_ON_MSG is implemented by using compiletime_assert().) Let's convert error() into now treewide-available pr_err(). Done with the help of Coccinelle, excluing tools/ directory. The semantic patch I used is as follows: // <smpl> @@@@ -error +pr_err (...) // </smpl> Signed-off-by:
Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by:
Simon Glass <sjg@chromium.org> [trini: Re-run Coccinelle] Signed-off-by:
Tom Rini <trini@konsulko.com>
-
- Sep 30, 2017
-
-
Kever Yang authored
The pd_bus hclk/pclk source is pd_bus aclk, not the PLL. Signed-off-by:
Kever Yang <kever.yang@rock-chips.com> Acked-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
Kever Yang authored
Fix typo RK322X/RK3036 in rk322x clock driver. Signed-off-by:
Kever Yang <kever.yang@rock-chips.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Acked-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
David Wu authored
The clk_saradc is dividing from the 24M, clk_saradc=24MHz/(saradc_div_con+1). SARADC integer divider control register is 8-bits width. Signed-off-by:
David Wu <david.wu@rock-chips.com> Acked-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
David Wu authored
The clk_saradc is dividing from the 24M, clk_saradc=24MHz/(saradc_div_con+1). SARADC integer divider control register is 8-bits width. Signed-off-by:
David Wu <david.wu@rock-chips.com> Acked-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
David Wu authored
The clk_saradc is dividing from the 24M, clk_saradc=24MHz/(saradc_div_con+1). SARADC integer divider control register is 10-bits width. Signed-off-by:
David Wu <david.wu@rock-chips.com> Acked-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
David Wu authored
The clk_saradc is dividing from the 24M, clk_saradc=24MHz/(saradc_div_con+1). SARADC integer divider control register is 8-bits width. Signed-off-by:
David Wu <david.wu@rock-chips.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Acked-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
David Wu authored
The clk_saradc is dividing from the 24M, clk_saradc=24MHz/(saradc_div_con+1). SARADC integer divider control register is 10-bits width. Signed-off-by:
David Wu <david.wu@rock-chips.com> Acked-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
- Sep 18, 2017
-
-
Philipp Tomsich authored
Update the clock driver for the RK3399 to support a live device tree. Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
The generic ehci-driver (ehci-generic.c) will try to enable the clocks listed in the DTSI. If this fails (e.g. due to clk_enable not being implemented in a driver and -ENOSYS being returned by the clk-uclass), the driver will bail our and print an error message. This implements a minimal clk_enable for the RK3399 and supports the clocks mandatory for the EHCI controllers; as these are enabled by default we simply return success. Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
Update the clock driver for the RK3368 to support a live device tree. Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org> Acked-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Version-changes: 2 - use the dev_read_addr_ptr function in clk_rk3368.c
-
- Sep 15, 2017
-
-
Simon Glass authored
When using 32-bit addresses dtoc works correctly. For 64-bit addresses it does not since it ignores the #address-cells and #size-cells properties. Update the tool to use fdt64_t as the element type for reg properties when either the address or size is larger than one cell. Use the correct value so that C code can obtain the information from the device tree easily. Alos create a new type, fdt_val_t, which is defined to either fdt32_t or fdt64_t depending on the word size of the machine. This type corresponds to fdt_addr_t and fdt_size_t. Unfortunately we cannot just use those types since they are defined to phys_addr_t and phys_size_t which use 'unsigned long' in the 32-bit case, rather than 'unsigned int'. Add tests for the four combinations of address and size values (32/32, 64/64, 32/64, 64/32). Also update existing uses for rk3399 and rk3368 which now need to use the new fdt_val_t type. Signed-off-by:
Simon Glass <sjg@chromium.org> Suggested-by:
Heiko Stuebner <heiko@sntech.de> Reported-by:
Kever Yang <kever.yang@rock-chips.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Tested-by:
Kever Yang <kever.yang@rock-chips.com>
-
- Aug 13, 2017
-
-
Kever Yang authored
Use DIV_ROUND_UP instead RATE_TO_DIV for all Rockchip SoC clock driver. Add or fix the div-field overflow check at the same time. Signed-off-by:
Kever Yang <kever.yang@rock-chips.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Acked-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
Kever Yang authored
dwmmc controller has default internal divider by 2, and we always provide double of the clock rate request by dwmmc controller. Sync code for all Rockchip SoC with: 4055b46 rockchip: clk: rk3288: fix mmc clock setting Signed-off-by:
Kever Yang <kever.yang@rock-chips.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Acked-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> [fixup for 'missing DIV_ROUND_UP' conflict for clk_rk3288.c:] Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
Philipp Tomsich authored
As SPI support may be useful in the boot-flow, this adds support for configuring the SPI controller's clocks in the RK3368 clock driver. Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
With the clock support in rk3368_clk_set_rate() conditionalized on various feature definitions, 'priv' can remain unused (e.g. in the SPL build when only MMC is enabled). Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
To enable the GMAC on the RK3368, we need to set up the clocking appropriately to generate a tx_clk for the MAC. This adds an implementation that implements the use of the <&ext_gmac> clock (i.e. an external 125MHz clock for RGMII provided by the PHY). This is the clock setup used by the boards currently supported by U-Boot (i.e. Geekbox, Sheep and RK3368-uQ7). This includes the change from commit - rockchip: clk: rk3368: define GMAC_MUX_SEL_EXTCLK Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
As part of the DRAM initialisation process (running as part of the TPL stage) on the RK3368, we need to set up the DRAM PLL. This implements support for configuring the PLL to for 1200, 1332 or 1600 MHz (i.e. for DDR3-1200, DDR3-1333, DDR3-1600 operating modes). Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
The original clock support for MMC/SD cards on the RK3368 suffered from a tendency to select a divider less-or-equal to the the one giving the requested clock-rate: this can lead to higher-than-expected (or rather: higher than supported) clock rates for the MMC/SD communiction. This change rewrites the MMC/SD clock generation to: * always generate a clock less-than-or-equal to the requested clock * support reparenting among the CPLL, GPLL and OSC24M parents to generate the highest clock that does not exceed the requested rate In addition to this, the Linux DTS uses HCLK_MMC/HCLK_SDMMC instead of SCLK_MMC/SCLK_SDMMC: to match this (and to ensure that clock setup always works), we adjust the driver appropriately. This includes the changes from: - rockchip: clk: rk3368: convert MMC_PLL_SEL_* definitions to shifted-value form Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
To implement a TPL stage (incl. its DRAM controller setup) for the RK3368, we'll want to configure the DPLL (DRAM PLL). This commit implements setting the DPLL (CLK_DDR) and provides PLL configuration details for the common DRAM operating speeds found on RK3368 boards. Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
The RK3368 has a somewhat temperamental BootROM (which I learned the hard way) when it comes to reconfiguring the CPLL and GPLL (in fact, experiments show that changing the GPLL broke things for me, while changing the CPLL seems to be more benign). These should not be modified by the SPL stage, if we intend to return to the BootROM for chain booting the next stage. This commit changes the clock initialisation to not change CPLL/GPLL before returning to the BootROM (i.e. in TPL). As it's safe to change these settings if we no longer intend to return to U-Boot, we'll run the full PLL setup a little later (i.e. in SPL). Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
With the RK3368's limited TPL size, we'll want to use OF_PLATFDATA for the SPL stage. This implements support for OF_PLATDATA in the clock driver for the RK3368. Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
The RK3368 TRM recommends to configure the bandwith adjustment (CON2) for PLLs to NF/2. This implements this for all reconfigurations of PLLs and removes the 'has_bwadj' flag (as the RK3368 always has the bandwidth-adjustment feature according to its manual). Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
- Jul 27, 2017
-
-
Philipp Tomsich authored
The clk driver for the RK3368 picked the wrong data structure's size for its auto-alloc size: the size was calculated on the structure representing the CRU hardware block instead of the priv structure. As the CRU's register file is much larger than the driver's priv, this did not cause any pain (except wasting memory). Fix this by using the correct data structure's size. Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
- Jul 11, 2017
-
-
Kever Yang authored
Add clock driver init support for: - cpu, bus clock init; - emmc, sdmmc clock; - ddr clock; Signed-off-by:
Kever Yang <kever.yang@rock-chips.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Fixed format specified (%x -> %p) in clk_rk322x.c: Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
- Jun 23, 2017
-
-
Kever Yang authored
According to rk3036 TRM, pll_con1[12] should be set to '1' for the pll integer mode, while the '0' means the frac mode. Signed-off-by:
Kever Yang <kever.yang@rock-chips.com> Reviewed-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Acked-by:
Simon Glass <sjg@chromium.org> Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
Tom Rini authored
The variables gpll_init_cfg and apll_init_cfg are unused in this file, remove them. Cc: Simon Glass <sjg@chromium.org> Cc: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Signed-off-by:
Tom Rini <trini@konsulko.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
- Jun 09, 2017
-
-
Simon Glass authored
Detect with a previous boot loader has already set up the clocks and set them up again so that U-Boot gets what it expects. Signed-off-by:
Simon Glass <sjg@chromium.org>
-
Simon Glass authored
Shifted masks are the standard approach with rockchip since it allows use of the mask without shifting it each time. Update the definitions and the driver to match. Signed-off-by:
Simon Glass <sjg@chromium.org>
-
- Jun 07, 2017
-
-
Andy Yan authored
Add clock driver support for Rockchip rv1108 soc Signed-off-by:
Andy Yan <andy.yan@rock-chips.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Kever Yang authored
- hclk/pclk_div range should use '<=' instead of '<' - use GPLL for pd_bus clock source - pd_bus HCLK/PCLK clock rate should not bigger than ACLK Signed-off-by:
Kever Yang <kever.yang@rock-chips.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Kever Yang authored
Embeded the shift in mask MACRO definition in cru header file and clock driver. Signed-off-by:
Kever Yang <kever.yang@rock-chips.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Andy Yan authored
Add driver to setup the various PLLs and peripheral clocks on the RK3368. Signed-off-by:
Andy Yan <andy.yan@rock-chips.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
- Jun 01, 2017
-
-
Simon Glass authored
These support the flat device tree. We want to use the dev_read_..() prefix for functions that support both flat tree and live tree. So rename the existing functions to avoid confusion. In the end we will have: 1. dev_read_addr...() - works on devices, supports flat/live tree 2. devfdt_get_addr...() - current functions, flat tree only 3. of_get_address() etc. - new functions, live tree only All drivers will be written to use 1. That function will in turn call either 2 or 3 depending on whether the flat or live tree is in use. Note this involves changing some dead code - the imx_lpi2c.c file. Signed-off-by:
Simon Glass <sjg@chromium.org>
-
- May 10, 2017
-
-
Philipp Tomsich authored
This allows requests (via the DTS) for PCLK_HDMI_CTRL/PCLK_VIO_GRF, which are clock gates in the HDMI output path for the RK3399. As these are enabled by default (i.e. after reset), we don't implement any logic to actively open/close these clock gates and simply assume that their reset-default has not been changed. Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
The (non-secure) efuse node in the DTS requests PCLK_EFUSE1024NS. To allow us to add a efuse-driver (and more importantly, to allow probes of such a driver to succeed), we need need to accept requests for PCLK_EFUSE1024NS and return a non-error result. As PCLK_EFUSE1024NS is enabled by default (i.e. after reset), we don't implement any logic to manage this clock gate and simply assume that the reset-default has not been changed. Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Tested-by:
Klaus Goger <klaus.goger@theobroma-systems.com> Reviewed-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
The clocking of the designware MMC controller in the upstream (i.e. Linux) RK3399 has changed/does not match what the current DTS in U-Boot uses: the first clock entry now is HCLK_SDMMC instead of SCLK_SDMMC. With the simple clock driver used for the RK3399, this needs a change in the selector understood by the various case statements in the driver to ensure that the driver still loads successfully. Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Acked-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
For the RK3399, i2c_set_rate (and by extension: our spi_set_rate, which had been mindlessly following the template of the i2c_set_rate implementation) miscalculates the rate returned due to a off-by-one error resulting from the following sequence of events: 1. calculates 'src_div := src_freq / target_freq' 2. stores 'src_div - 1' into the register (the actual divider applied in hardware is biased by adding 1) 3. returns the result of the DIV_RATE(src_freq, src_div) macro, which expects the (decremented) divider from the hardware-register and implictly adds 1 (i.e. 'DIV_RATE(freq, div) := freq / (div + 1)') This can be observed with the SPI driver, which sets a rate of 99MHz based on the GPLL frequency of 594MHz: the hardware generates a clock of 99MHz (src_div is 6, the bitfield in the register correctly reads 5), but reports a frequency of 84MHz (594 / 7) on return. To fix, we have two options: * either we bias (i.e. "DIV_RATE(GPLL, src_div - 1)"), which doesn't make for a particularily nice read * we simply call the i2c/spi_get_rate function (introducing additional overhead for the additional register-read), which reads the divider from the register and then passes it through the DIV_RATE macro Given that this code is not time-critical, the more readable solution (i.e. calling the appropriate get_rate function) is implemented in this change. Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Tested-by:
Klaus Goger <klaus.goger@theobroma-systems.com> Acked-by:
Simon Glass <sjg@chromium.org>
-
Philipp Tomsich authored
This change adds support for configuring the module clocks for SPI1 and SPI5 from the 594MHz GPLL. Note that the driver (rk_spi.c) always sets this to 99MHz, but the implemented functionality is more general and will also support different clock configurations. X-AffectedPlatforms: RK3399-Q7 Signed-off-by:
Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Tested-by:
Jakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com> Tested-by:
Klaus Goger <klaus.goger@theobroma-systems.com> Acked-by:
Simon Glass <sjg@chromium.org>
-