diff options
| author | Tom Rini <[email protected]> | 2022-03-16 08:11:53 -0400 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2022-03-16 08:11:53 -0400 |
| commit | 469c1bc688a1f607dea477ad1e7b2a067166d268 (patch) | |
| tree | 8d8cfc505ed6dd347aa637c14e148a76c7e9e502 /drivers | |
| parent | 91e9f20768a316297cdc9acfdf4698aabb77761f (diff) | |
| parent | aa34e13346cf727197981c599f688b406005049a (diff) | |
Merge https://source.denx.de/u-boot/custodians/u-boot-riscv
- k210 updates
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/clk/Makefile | 2 | ||||
| -rw-r--r-- | drivers/clk/clk_k210.c (renamed from drivers/clk/clk_kendryte.c) | 4 | ||||
| -rw-r--r-- | drivers/pinctrl/Makefile | 2 | ||||
| -rw-r--r-- | drivers/pinctrl/pinctrl-k210.c (renamed from drivers/pinctrl/pinctrl-kendryte.c) | 25 | ||||
| -rw-r--r-- | drivers/spi/designware_spi.c | 20 |
5 files changed, 38 insertions, 15 deletions
diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index f922a7c323d..bb4eee5d99b 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -29,7 +29,7 @@ obj-$(CONFIG_CLK_BOSTON) += clk_boston.o obj-$(CONFIG_CLK_CDCE9XX) += clk-cdce9xx.o obj-$(CONFIG_CLK_EXYNOS) += exynos/ obj-$(CONFIG_CLK_HSDK) += clk-hsdk-cgu.o -obj-$(CONFIG_CLK_K210) += clk_kendryte.o +obj-$(CONFIG_CLK_K210) += clk_k210.o obj-$(CONFIG_CLK_MPC83XX) += mpc83xx_clk.o obj-$(CONFIG_CLK_MPFS) += microchip/ obj-$(CONFIG_CLK_MVEBU) += mvebu/ diff --git a/drivers/clk/clk_kendryte.c b/drivers/clk/clk_k210.c index 97efda5b6f0..1961efaa5e7 100644 --- a/drivers/clk/clk_kendryte.c +++ b/drivers/clk/clk_k210.c @@ -14,7 +14,7 @@ #include <serial.h> #include <dt-bindings/clock/k210-sysctl.h> #include <dt-bindings/mfd/k210-sysctl.h> -#include <kendryte/pll.h> +#include <k210/pll.h> #include <linux/bitfield.h> DECLARE_GLOBAL_DATA_PTR; @@ -1271,7 +1271,7 @@ static int k210_clk_probe(struct udevice *dev) } static const struct udevice_id k210_clk_ids[] = { - { .compatible = "kendryte,k210-clk" }, + { .compatible = "canaan,k210-clk" }, { }, }; diff --git a/drivers/pinctrl/Makefile b/drivers/pinctrl/Makefile index fd736a7f640..df37c32033f 100644 --- a/drivers/pinctrl/Makefile +++ b/drivers/pinctrl/Makefile @@ -18,7 +18,7 @@ obj-$(CONFIG_PINCTRL_SANDBOX) += pinctrl-sandbox.o obj-$(CONFIG_PINCTRL_UNIPHIER) += uniphier/ obj-$(CONFIG_PINCTRL_PIC32) += pinctrl_pic32.o obj-$(CONFIG_PINCTRL_EXYNOS) += exynos/ -obj-$(CONFIG_PINCTRL_K210) += pinctrl-kendryte.o +obj-$(CONFIG_PINCTRL_K210) += pinctrl-k210.o obj-$(CONFIG_PINCTRL_MESON) += meson/ obj-$(CONFIG_PINCTRL_MTK) += mediatek/ obj-$(CONFIG_PINCTRL_MSCC) += mscc/ diff --git a/drivers/pinctrl/pinctrl-kendryte.c b/drivers/pinctrl/pinctrl-k210.c index 09d51ca6769..13f0a342686 100644 --- a/drivers/pinctrl/pinctrl-kendryte.c +++ b/drivers/pinctrl/pinctrl-k210.c @@ -511,7 +511,7 @@ static int k210_pc_get_drive(unsigned max_strength_ua) { int i; - for (i = K210_PC_DRIVE_MAX; i; i--) + for (i = K210_PC_DRIVE_MAX; i >= 0; i--) if (k210_pc_drive_strength[i] < max_strength_ua) return i; @@ -536,7 +536,7 @@ static int k210_pc_pinconf_set(struct udevice *dev, unsigned pin_selector, break; case PIN_CONFIG_BIAS_PULL_UP: if (argument) - val |= K210_PC_PD; + val |= K210_PC_PU; else return -EINVAL; break; @@ -679,6 +679,7 @@ static int k210_pc_probe(struct udevice *dev) { int ret, i, j; struct k210_pc_priv *priv = dev_get_priv(dev); + struct ofnode_phandle_args args; priv->fpioa = dev_read_addr_ptr(dev); if (!priv->fpioa) @@ -692,15 +693,23 @@ static int k210_pc_probe(struct udevice *dev) if (ret && ret != -ENOSYS && ret != -ENOTSUPP) goto err; - priv->sysctl = syscon_regmap_lookup_by_phandle(dev, "kendryte,sysctl"); + ret = dev_read_phandle_with_args(dev, "canaan,k210-sysctl-power", + NULL, 1, 0, &args); + if (ret) + goto err; + + if (args.args_count != 1) { + ret = -EINVAL; + goto err; + } + + priv->sysctl = syscon_node_to_regmap(args.node); if (IS_ERR(priv->sysctl)) { - ret = -ENODEV; + ret = PTR_ERR(priv->sysctl); goto err; } - ret = dev_read_u32(dev, "kendryte,power-offset", &priv->power_offset); - if (ret) - goto err; + priv->power_offset = args.args[0]; debug("%s: fpioa = %p sysctl = %p power offset = %x\n", __func__, priv->fpioa, (void *)priv->sysctl->ranges[0].start, @@ -726,7 +735,7 @@ err: } static const struct udevice_id k210_pc_ids[] = { - { .compatible = "kendryte,k210-fpioa" }, + { .compatible = "canaan,k210-fpioa" }, { } }; diff --git a/drivers/spi/designware_spi.c b/drivers/spi/designware_spi.c index fc22f540fe6..47bea0b376a 100644 --- a/drivers/spi/designware_spi.c +++ b/drivers/spi/designware_spi.c @@ -194,6 +194,20 @@ static int dw_spi_apb_init(struct udevice *bus, struct dw_spi_priv *priv) return 0; } +static int dw_spi_apb_k210_init(struct udevice *bus, struct dw_spi_priv *priv) +{ + /* + * The Canaan Kendryte K210 SoC DW apb_ssi v4 spi controller is + * documented to have a 32 word deep TX and RX FIFO, which + * spi_hw_init() detects. However, when the RX FIFO is filled up to + * 32 entries (RXFLR = 32), an RX FIFO overrun error occurs. Avoid + * this problem by force setting fifo_len to 31. + */ + priv->fifo_len = 31; + + return dw_spi_apb_init(bus, priv); +} + static int dw_spi_dwc_init(struct udevice *bus, struct dw_spi_priv *priv) { priv->max_xfer = 32; @@ -252,7 +266,7 @@ static int dw_spi_of_to_plat(struct udevice *bus) static void spi_hw_init(struct udevice *bus, struct dw_spi_priv *priv) { dw_write(priv, DW_SPI_SSIENR, 0); - dw_write(priv, DW_SPI_IMR, 0xff); + dw_write(priv, DW_SPI_IMR, 0); dw_write(priv, DW_SPI_SSIENR, 1); /* @@ -758,8 +772,8 @@ static const struct udevice_id dw_spi_ids[] = { */ { .compatible = "altr,socfpga-spi", .data = (ulong)dw_spi_apb_init }, { .compatible = "altr,socfpga-arria10-spi", .data = (ulong)dw_spi_apb_init }, - { .compatible = "canaan,kendryte-k210-spi", .data = (ulong)dw_spi_apb_init }, - { .compatible = "canaan,kendryte-k210-ssi", .data = (ulong)dw_spi_dwc_init }, + { .compatible = "canaan,k210-spi", .data = (ulong)dw_spi_apb_k210_init}, + { .compatible = "canaan,k210-ssi", .data = (ulong)dw_spi_dwc_init }, { .compatible = "intel,stratix10-spi", .data = (ulong)dw_spi_apb_init }, { .compatible = "intel,agilex-spi", .data = (ulong)dw_spi_apb_init }, { .compatible = "mscc,ocelot-spi", .data = (ulong)dw_spi_apb_init }, |
