Merge git://git.denx.de/u-boot-dm
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "skeleton.dtsi"
|
||||
#include <dt-bindings/gpio/tegra-gpio.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/mailbox/tegra-hsp.h>
|
||||
|
||||
/ {
|
||||
compatible = "nvidia,tegra186";
|
||||
@@ -40,6 +41,18 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
hsp: hsp@3c00000 {
|
||||
compatible = "nvidia,tegra186-hsp";
|
||||
reg = <0x0 0x03c00000 0x0 0xa0000>;
|
||||
interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
|
||||
nvidia,num-SM = <0x8>;
|
||||
nvidia,num-AS = <0x2>;
|
||||
nvidia,num-SS = <0x2>;
|
||||
nvidia,num-DB = <0x7>;
|
||||
nvidia,num-SI = <0x8>;
|
||||
#mbox-cells = <1>;
|
||||
};
|
||||
|
||||
gpio@c2f0000 {
|
||||
compatible = "nvidia,tegra186-gpio-aon";
|
||||
reg-names = "security", "gpio";
|
||||
|
||||
@@ -62,18 +62,6 @@ static inline u32 clk_get_divisor(ulong input_rate, uint output_rate)
|
||||
*/
|
||||
void *rockchip_get_cru(void);
|
||||
|
||||
/**
|
||||
* rkclk_get_clk() - get a pointer to a given clock
|
||||
*
|
||||
* This is an internal function - use outside the clock subsystem indicates
|
||||
* that work is needed!
|
||||
*
|
||||
* @clk_id: Clock requested
|
||||
* @devp: Returns a pointer to that clock
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int rkclk_get_clk(enum rk_clk_id clk_id, struct udevice **devp);
|
||||
|
||||
struct rk3288_cru;
|
||||
struct rk3288_grf;
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <dm.h>
|
||||
#include <ram.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/clock.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
@@ -54,15 +55,43 @@ void lowlevel_init(void)
|
||||
static int do_clock(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||
char * const argv[])
|
||||
{
|
||||
static const struct {
|
||||
char *name;
|
||||
int id;
|
||||
} clks[] = {
|
||||
{ "osc", CLK_OSC },
|
||||
{ "apll", CLK_ARM },
|
||||
{ "dpll", CLK_DDR },
|
||||
{ "cpll", CLK_CODEC },
|
||||
{ "gpll", CLK_GENERAL },
|
||||
#ifdef CONFIG_ROCKCHIP_RK3036
|
||||
{ "mpll", CLK_NEW },
|
||||
#else
|
||||
{ "npll", CLK_NEW },
|
||||
#endif
|
||||
};
|
||||
int ret, i;
|
||||
struct udevice *dev;
|
||||
|
||||
for (uclass_first_device(UCLASS_CLK, &dev);
|
||||
dev;
|
||||
uclass_next_device(&dev)) {
|
||||
ret = uclass_get_device(UCLASS_CLK, 0, &dev);
|
||||
if (ret) {
|
||||
printf("clk-uclass not found\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(clks); i++) {
|
||||
struct clk clk;
|
||||
ulong rate;
|
||||
|
||||
rate = clk_get_rate(dev);
|
||||
printf("%s: %lu\n", dev->name, rate);
|
||||
clk.id = clks[i].id;
|
||||
ret = clk_request(dev, &clk);
|
||||
if (ret < 0)
|
||||
continue;
|
||||
|
||||
rate = clk_get_rate(&clk);
|
||||
printf("%s: %lu\n", clks[i].name, rate);
|
||||
|
||||
clk_free(&clk);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -36,7 +36,7 @@ struct chan_info {
|
||||
struct dram_info {
|
||||
struct chan_info chan[2];
|
||||
struct ram_info info;
|
||||
struct udevice *ddr_clk;
|
||||
struct clk ddr_clk;
|
||||
struct rk3288_cru *cru;
|
||||
struct rk3288_grf *grf;
|
||||
struct rk3288_sgrf *sgrf;
|
||||
@@ -576,7 +576,7 @@ static void dram_all_config(const struct dram_info *dram,
|
||||
rk_clrsetreg(&dram->sgrf->soc_con2, 0x1f, sdram_params->base.stride);
|
||||
}
|
||||
|
||||
static int sdram_init(const struct dram_info *dram,
|
||||
static int sdram_init(struct dram_info *dram,
|
||||
const struct rk3288_sdram_params *sdram_params)
|
||||
{
|
||||
int channel;
|
||||
@@ -592,8 +592,8 @@ static int sdram_init(const struct dram_info *dram,
|
||||
return -E2BIG;
|
||||
}
|
||||
|
||||
debug("ddr clk %s\n", dram->ddr_clk->name);
|
||||
ret = clk_set_rate(dram->ddr_clk, sdram_params->base.ddr_freq);
|
||||
debug("ddr clk dpll\n");
|
||||
ret = clk_set_rate(&dram->ddr_clk, sdram_params->base.ddr_freq);
|
||||
debug("ret=%d\n", ret);
|
||||
if (ret) {
|
||||
debug("Could not set DDR clock\n");
|
||||
@@ -836,6 +836,7 @@ static int rk3288_dmc_probe(struct udevice *dev)
|
||||
struct dram_info *priv = dev_get_priv(dev);
|
||||
struct regmap *map;
|
||||
int ret;
|
||||
struct udevice *dev_clk;
|
||||
|
||||
map = syscon_get_regmap_by_driver_data(ROCKCHIP_SYSCON_NOC);
|
||||
if (IS_ERR(map))
|
||||
@@ -856,7 +857,11 @@ static int rk3288_dmc_probe(struct udevice *dev)
|
||||
priv->chan[1].pctl = regmap_get_range(map, 2);
|
||||
priv->chan[1].publ = regmap_get_range(map, 3);
|
||||
|
||||
ret = uclass_get_device(UCLASS_CLK, CLK_DDR, &priv->ddr_clk);
|
||||
ret = uclass_get_device(UCLASS_CLK, 0, &dev_clk);
|
||||
if (ret)
|
||||
return ret;
|
||||
priv->ddr_clk.id = CLK_DDR;
|
||||
ret = clk_request(dev_clk, &priv->ddr_clk);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <clk.h>
|
||||
#include <clk-uclass.h>
|
||||
#include <dm.h>
|
||||
#include <errno.h>
|
||||
#include <asm/io.h>
|
||||
@@ -212,11 +212,11 @@ static int clk_init_uart(struct msm_clk_priv *priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
ulong msm_set_periph_rate(struct udevice *dev, int periph, ulong rate)
|
||||
ulong msm_set_rate(struct clk *clk, ulong rate)
|
||||
{
|
||||
struct msm_clk_priv *priv = dev_get_priv(dev);
|
||||
struct msm_clk_priv *priv = dev_get_priv(clk->dev);
|
||||
|
||||
switch (periph) {
|
||||
switch (clk->id) {
|
||||
case 0: /* SDC1 */
|
||||
return clk_init_sdc(priv, 0, rate);
|
||||
break;
|
||||
@@ -243,7 +243,7 @@ static int msm_clk_probe(struct udevice *dev)
|
||||
}
|
||||
|
||||
static struct clk_ops msm_clk_ops = {
|
||||
.set_periph_rate = msm_set_periph_rate,
|
||||
.set_rate = msm_set_rate,
|
||||
};
|
||||
|
||||
static const struct udevice_id msm_clk_ids[] = {
|
||||
|
||||
@@ -56,8 +56,10 @@ config TEGRA210
|
||||
|
||||
config TEGRA186
|
||||
bool "Tegra186 family"
|
||||
select DM_MAILBOX
|
||||
select TEGRA186_GPIO
|
||||
select TEGRA_ARMV8_COMMON
|
||||
select TEGRA_HSP
|
||||
|
||||
endchoice
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <errno.h>
|
||||
#include <clk.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/arch/clk.h>
|
||||
|
||||
@@ -23,18 +23,34 @@
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
static ulong clk_get_cpu_rate(void)
|
||||
static ulong rate(int id)
|
||||
{
|
||||
int ret;
|
||||
struct udevice *dev;
|
||||
struct clk clk;
|
||||
ulong rate;
|
||||
|
||||
ret = uclass_get_device(UCLASS_CLK, 0, &dev);
|
||||
if (ret) {
|
||||
panic("uclass-clk: device not found\n");
|
||||
printf("clk-uclass not found\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return clk_get_rate(dev);
|
||||
clk.id = id;
|
||||
ret = clk_request(dev, &clk);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
rate = clk_get_rate(&clk);
|
||||
|
||||
clk_free(&clk);
|
||||
|
||||
return rate;
|
||||
}
|
||||
|
||||
static ulong clk_get_cpu_rate(void)
|
||||
{
|
||||
return rate(PB7CLK);
|
||||
}
|
||||
|
||||
/* initialize prefetch module related to cpu_clk */
|
||||
@@ -127,30 +143,25 @@ const char *get_core_name(void)
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_CMD_CLK
|
||||
|
||||
int soc_clk_dump(void)
|
||||
{
|
||||
int i, ret;
|
||||
struct udevice *dev;
|
||||
|
||||
ret = uclass_get_device(UCLASS_CLK, 0, &dev);
|
||||
if (ret) {
|
||||
printf("clk-uclass not found\n");
|
||||
return ret;
|
||||
}
|
||||
int i;
|
||||
|
||||
printf("PLL Speed: %lu MHz\n",
|
||||
CLK_MHZ(clk_get_periph_rate(dev, PLLCLK)));
|
||||
printf("CPU Speed: %lu MHz\n", CLK_MHZ(clk_get_rate(dev)));
|
||||
printf("MPLL Speed: %lu MHz\n",
|
||||
CLK_MHZ(clk_get_periph_rate(dev, MPLL)));
|
||||
CLK_MHZ(rate(PLLCLK)));
|
||||
|
||||
printf("CPU Speed: %lu MHz\n", CLK_MHZ(rate(PB7CLK)));
|
||||
|
||||
printf("MPLL Speed: %lu MHz\n", CLK_MHZ(rate(MPLL)));
|
||||
|
||||
for (i = PB1CLK; i <= PB7CLK; i++)
|
||||
printf("PB%d Clock Speed: %lu MHz\n", i - PB1CLK + 1,
|
||||
CLK_MHZ(clk_get_periph_rate(dev, i)));
|
||||
CLK_MHZ(rate(i)));
|
||||
|
||||
for (i = REF1CLK; i <= REF5CLK; i++)
|
||||
printf("REFO%d Clock Speed: %lu MHz\n", i - REF1CLK + 1,
|
||||
CLK_MHZ(clk_get_periph_rate(dev, i)));
|
||||
CLK_MHZ(rate(i)));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -108,8 +108,23 @@
|
||||
compatible = "denx,u-boot-fdt-test";
|
||||
};
|
||||
|
||||
clk@0 {
|
||||
clk_fixed: clk-fixed {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <1234>;
|
||||
};
|
||||
|
||||
clk_sandbox: clk-sbox {
|
||||
compatible = "sandbox,clk";
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
clk-test {
|
||||
compatible = "sandbox,clk-test";
|
||||
clocks = <&clk_fixed>,
|
||||
<&clk_sandbox 1>,
|
||||
<&clk_sandbox 0>;
|
||||
clock-names = "fixed", "i2c", "spi";
|
||||
};
|
||||
|
||||
eth@10002000 {
|
||||
@@ -259,6 +274,17 @@
|
||||
compatible = "sandbox,reset";
|
||||
};
|
||||
|
||||
resetc: reset-ctl {
|
||||
compatible = "sandbox,reset-ctl";
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
reset-ctl-test {
|
||||
compatible = "sandbox,reset-ctl-test";
|
||||
resets = <&resetc 100>, <&resetc 2>;
|
||||
reset-names = "other", "test";
|
||||
};
|
||||
|
||||
rproc_1: rproc@1 {
|
||||
compatible = "sandbox,test-processor";
|
||||
remoteproc-name = "remoteproc-test-dev1";
|
||||
|
||||
111
arch/sandbox/include/asm/clk.h
Normal file
111
arch/sandbox/include/asm/clk.h
Normal file
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright (c) 2016, NVIDIA CORPORATION.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0
|
||||
*/
|
||||
|
||||
#ifndef __SANDBOX_CLK_H
|
||||
#define __SANDBOX_CLK_H
|
||||
|
||||
#include <common.h>
|
||||
|
||||
struct udevice;
|
||||
|
||||
/**
|
||||
* enum sandbox_clk_id - Identity of clocks implemented by the sandbox clock
|
||||
* provider.
|
||||
*
|
||||
* These IDs are within/relative-to the clock provider.
|
||||
*/
|
||||
enum sandbox_clk_id {
|
||||
SANDBOX_CLK_ID_SPI,
|
||||
SANDBOX_CLK_ID_I2C,
|
||||
|
||||
SANDBOX_CLK_ID_COUNT,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum sandbox_clk_test_id - Identity of the clocks consumed by the sandbox
|
||||
* clock test device.
|
||||
*
|
||||
* These are the IDs the clock consumer knows the clocks as.
|
||||
*/
|
||||
enum sandbox_clk_test_id {
|
||||
SANDBOX_CLK_TEST_ID_FIXED,
|
||||
SANDBOX_CLK_TEST_ID_SPI,
|
||||
SANDBOX_CLK_TEST_ID_I2C,
|
||||
|
||||
SANDBOX_CLK_TEST_ID_COUNT,
|
||||
};
|
||||
|
||||
/**
|
||||
* sandbox_clk_query_rate - Query the current rate of a sandbox clock.
|
||||
*
|
||||
* @dev: The sandbox clock provider device.
|
||||
* @id: The clock to query.
|
||||
* @return: The rate of the clock.
|
||||
*/
|
||||
ulong sandbox_clk_query_rate(struct udevice *dev, int id);
|
||||
/**
|
||||
* sandbox_clk_query_enable - Query the enable state of a sandbox clock.
|
||||
*
|
||||
* @dev: The sandbox clock provider device.
|
||||
* @id: The clock to query.
|
||||
* @return: The rate of the clock.
|
||||
*/
|
||||
int sandbox_clk_query_enable(struct udevice *dev, int id);
|
||||
|
||||
/**
|
||||
* sandbox_clk_test_get - Ask the sandbox clock test device to request its
|
||||
* clocks.
|
||||
*
|
||||
* @dev: The sandbox clock test (client) devivce.
|
||||
* @return: 0 if OK, or a negative error code.
|
||||
*/
|
||||
int sandbox_clk_test_get(struct udevice *dev);
|
||||
/**
|
||||
* sandbox_clk_test_get_rate - Ask the sandbox clock test device to query a
|
||||
* clock's rate.
|
||||
*
|
||||
* @dev: The sandbox clock test (client) devivce.
|
||||
* @id: The test device's clock ID to query.
|
||||
* @return: The rate of the clock.
|
||||
*/
|
||||
ulong sandbox_clk_test_get_rate(struct udevice *dev, int id);
|
||||
/**
|
||||
* sandbox_clk_test_set_rate - Ask the sandbox clock test device to set a
|
||||
* clock's rate.
|
||||
*
|
||||
* @dev: The sandbox clock test (client) devivce.
|
||||
* @id: The test device's clock ID to configure.
|
||||
* @return: The new rate of the clock.
|
||||
*/
|
||||
ulong sandbox_clk_test_set_rate(struct udevice *dev, int id, ulong rate);
|
||||
/**
|
||||
* sandbox_clk_test_enable - Ask the sandbox clock test device to enable a
|
||||
* clock.
|
||||
*
|
||||
* @dev: The sandbox clock test (client) devivce.
|
||||
* @id: The test device's clock ID to configure.
|
||||
* @return: 0 if OK, or a negative error code.
|
||||
*/
|
||||
int sandbox_clk_test_enable(struct udevice *dev, int id);
|
||||
/**
|
||||
* sandbox_clk_test_disable - Ask the sandbox clock test device to disable a
|
||||
* clock.
|
||||
*
|
||||
* @dev: The sandbox clock test (client) devivce.
|
||||
* @id: The test device's clock ID to configure.
|
||||
* @return: 0 if OK, or a negative error code.
|
||||
*/
|
||||
int sandbox_clk_test_disable(struct udevice *dev, int id);
|
||||
/**
|
||||
* sandbox_clk_test_free - Ask the sandbox clock test device to free its
|
||||
* clocks.
|
||||
*
|
||||
* @dev: The sandbox clock test (client) devivce.
|
||||
* @return: 0 if OK, or a negative error code.
|
||||
*/
|
||||
int sandbox_clk_test_free(struct udevice *dev);
|
||||
|
||||
#endif
|
||||
@@ -26,7 +26,8 @@
|
||||
/**
|
||||
* Return the simulated value of a GPIO (used only in sandbox test code)
|
||||
*
|
||||
* @param gp GPIO number
|
||||
* @param dev device to use
|
||||
* @param offset GPIO offset within bank
|
||||
* @return -1 on error, 0 if GPIO is low, >0 if high
|
||||
*/
|
||||
int sandbox_gpio_get_value(struct udevice *dev, unsigned int offset);
|
||||
@@ -34,8 +35,9 @@ int sandbox_gpio_get_value(struct udevice *dev, unsigned int offset);
|
||||
/**
|
||||
* Set the simulated value of a GPIO (used only in sandbox test code)
|
||||
*
|
||||
* @param gp GPIO number
|
||||
* @param value value to set (0 for low, non-zero for high)
|
||||
* @param dev device to use
|
||||
* @param offset GPIO offset within bank
|
||||
* @param value value to set (0 for low, non-zero for high)
|
||||
* @return -1 on error, 0 if ok
|
||||
*/
|
||||
int sandbox_gpio_set_value(struct udevice *dev, unsigned int offset, int value);
|
||||
@@ -63,7 +65,8 @@ int sandbox_gpio_get_open_drain(struct udevice *dev, unsigned offset);
|
||||
/**
|
||||
* Return the simulated direction of a GPIO (used only in sandbox test code)
|
||||
*
|
||||
* @param gp GPIO number
|
||||
* @param dev device to use
|
||||
* @param offset GPIO offset within bank
|
||||
* @return -1 on error, 0 if GPIO is input, >0 if output
|
||||
*/
|
||||
int sandbox_gpio_get_direction(struct udevice *dev, unsigned int offset);
|
||||
@@ -71,8 +74,9 @@ int sandbox_gpio_get_direction(struct udevice *dev, unsigned int offset);
|
||||
/**
|
||||
* Set the simulated direction of a GPIO (used only in sandbox test code)
|
||||
*
|
||||
* @param gp GPIO number
|
||||
* @param output 0 to set as input, 1 to set as output
|
||||
* @param dev device to use
|
||||
* @param offset GPIO offset within bank
|
||||
* @param output 0 to set as input, 1 to set as output
|
||||
* @return -1 on error, 0 if ok
|
||||
*/
|
||||
int sandbox_gpio_set_direction(struct udevice *dev, unsigned int offset,
|
||||
|
||||
21
arch/sandbox/include/asm/reset.h
Normal file
21
arch/sandbox/include/asm/reset.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (c) 2016, NVIDIA CORPORATION.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0
|
||||
*/
|
||||
|
||||
#ifndef __SANDBOX_RESET_H
|
||||
#define __SANDBOX_RESET_H
|
||||
|
||||
#include <common.h>
|
||||
|
||||
struct udevice;
|
||||
|
||||
int sandbox_reset_query(struct udevice *dev, unsigned long id);
|
||||
|
||||
int sandbox_reset_test_get(struct udevice *dev);
|
||||
int sandbox_reset_test_assert(struct udevice *dev);
|
||||
int sandbox_reset_test_deassert(struct udevice *dev);
|
||||
int sandbox_reset_test_free(struct udevice *dev);
|
||||
|
||||
#endif
|
||||
@@ -19,15 +19,6 @@
|
||||
|
||||
#define SANDBOX_CLK_RATE 32768
|
||||
|
||||
enum {
|
||||
PERIPH_ID_FIRST = 0,
|
||||
PERIPH_ID_SPI = PERIPH_ID_FIRST,
|
||||
PERIPH_ID_I2C,
|
||||
PERIPH_ID_PCI,
|
||||
|
||||
PERIPH_ID_COUNT,
|
||||
};
|
||||
|
||||
/* System controller driver data */
|
||||
enum {
|
||||
SYSCON0 = 32,
|
||||
|
||||
Reference in New Issue
Block a user