Commit ee7dad0b authored by Arnd Bergmann's avatar Arnd Bergmann

Merge tag 'riscv-dt-for-v6.9' of...

Merge tag 'riscv-dt-for-v6.9' of https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux into soc/late

RISC-V Devicetrees for v6.9

Microchip:
Missing bus clocks for the CAN controllers spotted during the creation
of a driver for the controllers and a specific compatible for the SiFive
PDMA block on PolarFire SoC.

Starfive:
PWM nodes for the jh7100 and jh7110. Camera subsystem support for the
latter. Most notably however is the addition of ethernet support for the
jh7110 which finally allows people to use the network on the OG VisionFive
and on the Beagle-V Starlight board. This was made possible by the
non-standard cache management operations support added for the RZ/Five
which could be extended to the ccache present on the jh7100.

bindings:
Additional clarification for what the reg property represents for cpus
and two opencores PWM binding changes - the original addition and an
added compatible. The latter is here as the driver patch was not ready
but the PWM maintainer told me to go ahead and merge it.
Signed-off-by: default avatarConor Dooley <conor.dooley@microchip.com>

* tag 'riscv-dt-for-v6.9' of https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux:
  riscv: dts: starfive: jh7110: Add camera subsystem nodes
  dt-bindings: pwm: opencores: Add compatible for StarFive JH8100
  dt-bindings: riscv: cpus: reg matches hart ID
  riscv: dts: microchip: add specific compatible for mpfs pdma
  riscv: dts: microchip: add missing CAN bus clocks
  riscv: dts: starfive: beaglev-starlight: Setup phy reset gpio
  riscv: dts: starfive: visionfive-v1: Setup ethernet phy
  riscv: dts: starfive: jh7100-common: Setup pinmux and enable gmac
  riscv: dts: starfive: jh7100: Add sysmain and gmac DT nodes
  riscv: dts: starfive: jh7110: Add PWM node and pins configuration
  riscv: dts: starfive: jh7100: Add PWM node and pins configuration
  dt-bindings: pwm: Add bindings for OpenCores PWM Controller

Link: https://lore.kernel.org/r/20240305-iodine-moneywise-53797ae9bf6e@spudSigned-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents 724ad89f 28ecaaa5
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/pwm/opencores,pwm.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: OpenCores PWM controller
maintainers:
- William Qiu <william.qiu@starfivetech.com>
description:
The OpenCores PTC ip core contains a PWM controller. When operating in PWM
mode, the PTC core generates binary signal with user-programmable low and
high periods. All PTC counters and registers are 32-bit.
allOf:
- $ref: pwm.yaml#
properties:
compatible:
items:
- enum:
- starfive,jh7100-pwm
- starfive,jh7110-pwm
- starfive,jh8100-pwm
- const: opencores,pwm-v1
reg:
maxItems: 1
clocks:
maxItems: 1
resets:
maxItems: 1
"#pwm-cells":
const: 3
required:
- compatible
- reg
- clocks
additionalProperties: false
examples:
- |
pwm@12490000 {
compatible = "starfive,jh7110-pwm", "opencores,pwm-v1";
reg = <0x12490000 0x10000>;
clocks = <&clkgen 181>;
resets = <&rstgen 109>;
#pwm-cells = <3>;
};
...@@ -75,6 +75,10 @@ properties: ...@@ -75,6 +75,10 @@ properties:
- riscv,sv57 - riscv,sv57
- riscv,none - riscv,none
reg:
description:
The hart ID of this CPU node.
riscv,cbom-block-size: riscv,cbom-block-size:
$ref: /schemas/types.yaml#/definitions/uint32 $ref: /schemas/types.yaml#/definitions/uint32
description: description:
......
...@@ -243,7 +243,7 @@ plic: interrupt-controller@c000000 { ...@@ -243,7 +243,7 @@ plic: interrupt-controller@c000000 {
}; };
pdma: dma-controller@3000000 { pdma: dma-controller@3000000 {
compatible = "sifive,fu540-c000-pdma", "sifive,pdma0"; compatible = "microchip,mpfs-pdma", "sifive,pdma0";
reg = <0x0 0x3000000 0x0 0x8000>; reg = <0x0 0x3000000 0x0 0x8000>;
interrupt-parent = <&plic>; interrupt-parent = <&plic>;
interrupts = <5 6>, <7 8>, <9 10>, <11 12>; interrupts = <5 6>, <7 8>, <9 10>, <11 12>;
...@@ -422,7 +422,7 @@ i2c1: i2c@2010b000 { ...@@ -422,7 +422,7 @@ i2c1: i2c@2010b000 {
can0: can@2010c000 { can0: can@2010c000 {
compatible = "microchip,mpfs-can"; compatible = "microchip,mpfs-can";
reg = <0x0 0x2010c000 0x0 0x1000>; reg = <0x0 0x2010c000 0x0 0x1000>;
clocks = <&clkcfg CLK_CAN0>; clocks = <&clkcfg CLK_CAN0>, <&clkcfg CLK_MSSPLL3>;
interrupt-parent = <&plic>; interrupt-parent = <&plic>;
interrupts = <56>; interrupts = <56>;
status = "disabled"; status = "disabled";
...@@ -431,7 +431,7 @@ can0: can@2010c000 { ...@@ -431,7 +431,7 @@ can0: can@2010c000 {
can1: can@2010d000 { can1: can@2010d000 {
compatible = "microchip,mpfs-can"; compatible = "microchip,mpfs-can";
reg = <0x0 0x2010d000 0x0 0x1000>; reg = <0x0 0x2010d000 0x0 0x1000>;
clocks = <&clkcfg CLK_CAN1>; clocks = <&clkcfg CLK_CAN1>, <&clkcfg CLK_MSSPLL3>;
interrupt-parent = <&plic>; interrupt-parent = <&plic>;
interrupts = <57>; interrupts = <57>;
status = "disabled"; status = "disabled";
......
...@@ -11,3 +11,14 @@ / { ...@@ -11,3 +11,14 @@ / {
model = "BeagleV Starlight Beta"; model = "BeagleV Starlight Beta";
compatible = "beagle,beaglev-starlight-jh7100-r0", "starfive,jh7100"; compatible = "beagle,beaglev-starlight-jh7100-r0", "starfive,jh7100";
}; };
&gmac {
phy-handle = <&phy>;
};
&mdio {
phy: ethernet-phy@7 {
reg = <7>;
reset-gpios = <&gpio 63 GPIO_ACTIVE_LOW>;
};
};
...@@ -72,7 +72,91 @@ wifi_pwrseq: wifi-pwrseq { ...@@ -72,7 +72,91 @@ wifi_pwrseq: wifi-pwrseq {
}; };
}; };
&gmac {
pinctrl-names = "default";
pinctrl-0 = <&gmac_pins>;
phy-mode = "rgmii-id";
status = "okay";
mdio: mdio {
#address-cells = <1>;
#size-cells = <0>;
compatible = "snps,dwmac-mdio";
};
};
&gpio { &gpio {
gmac_pins: gmac-0 {
gtxclk-pins {
pins = <PAD_FUNC_SHARE(115)>;
bias-pull-up;
drive-strength = <35>;
input-enable;
input-schmitt-enable;
slew-rate = <0>;
};
miitxclk-pins {
pins = <PAD_FUNC_SHARE(116)>;
bias-pull-up;
drive-strength = <14>;
input-enable;
input-schmitt-disable;
slew-rate = <0>;
};
tx-pins {
pins = <PAD_FUNC_SHARE(117)>,
<PAD_FUNC_SHARE(119)>,
<PAD_FUNC_SHARE(120)>,
<PAD_FUNC_SHARE(121)>,
<PAD_FUNC_SHARE(122)>,
<PAD_FUNC_SHARE(123)>,
<PAD_FUNC_SHARE(124)>,
<PAD_FUNC_SHARE(125)>,
<PAD_FUNC_SHARE(126)>;
bias-pull-up;
drive-strength = <35>;
input-disable;
input-schmitt-disable;
slew-rate = <0>;
};
rxclk-pins {
pins = <PAD_FUNC_SHARE(127)>;
bias-pull-up;
drive-strength = <14>;
input-enable;
input-schmitt-disable;
slew-rate = <6>;
};
rxer-pins {
pins = <PAD_FUNC_SHARE(129)>;
bias-pull-up;
drive-strength = <14>;
input-enable;
input-schmitt-disable;
slew-rate = <0>;
};
rx-pins {
pins = <PAD_FUNC_SHARE(128)>,
<PAD_FUNC_SHARE(130)>,
<PAD_FUNC_SHARE(131)>,
<PAD_FUNC_SHARE(132)>,
<PAD_FUNC_SHARE(133)>,
<PAD_FUNC_SHARE(134)>,
<PAD_FUNC_SHARE(135)>,
<PAD_FUNC_SHARE(136)>,
<PAD_FUNC_SHARE(137)>,
<PAD_FUNC_SHARE(138)>,
<PAD_FUNC_SHARE(139)>,
<PAD_FUNC_SHARE(140)>,
<PAD_FUNC_SHARE(141)>;
bias-pull-up;
drive-strength = <14>;
input-enable;
input-schmitt-enable;
slew-rate = <0>;
};
};
i2c0_pins: i2c0-0 { i2c0_pins: i2c0-0 {
i2c-pins { i2c-pins {
pinmux = <GPIOMUX(62, GPO_LOW, pinmux = <GPIOMUX(62, GPO_LOW,
...@@ -115,6 +199,24 @@ GPO_I2C2_PAD_SDA_OEN, ...@@ -115,6 +199,24 @@ GPO_I2C2_PAD_SDA_OEN,
}; };
}; };
pwm_pins: pwm-0 {
pwm-pins {
pinmux = <GPIOMUX(7,
GPO_PWM_PAD_OUT_BIT0,
GPO_PWM_PAD_OE_N_BIT0,
GPI_NONE)>,
<GPIOMUX(5,
GPO_PWM_PAD_OUT_BIT1,
GPO_PWM_PAD_OE_N_BIT1,
GPI_NONE)>;
bias-disable;
drive-strength = <35>;
input-disable;
input-schmitt-disable;
slew-rate = <0>;
};
};
sdio0_pins: sdio0-0 { sdio0_pins: sdio0-0 {
clk-pins { clk-pins {
pinmux = <GPIOMUX(54, GPO_SDIO0_PAD_CCLK_OUT, pinmux = <GPIOMUX(54, GPO_SDIO0_PAD_CCLK_OUT,
...@@ -257,6 +359,12 @@ &osc_aud { ...@@ -257,6 +359,12 @@ &osc_aud {
clock-frequency = <27000000>; clock-frequency = <27000000>;
}; };
&pwm {
pinctrl-names = "default";
pinctrl-0 = <&pwm_pins>;
status = "okay";
};
&sdio0 { &sdio0 {
broken-cd; broken-cd;
bus-width = <4>; bus-width = <4>;
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
/dts-v1/; /dts-v1/;
#include "jh7100-common.dtsi" #include "jh7100-common.dtsi"
#include <dt-bindings/gpio/gpio.h>
/ { / {
model = "StarFive VisionFive V1"; model = "StarFive VisionFive V1";
...@@ -18,3 +17,24 @@ gpio-restart { ...@@ -18,3 +17,24 @@ gpio-restart {
priority = <224>; priority = <224>;
}; };
}; };
&gmac {
phy-handle = <&phy>;
};
/*
* The board uses a Motorcomm YT8521 PHY supporting RGMII-ID, but requires
* manual adjustment of the RX internal delay to work properly. The default
* RX delay provided by the driver (1.95ns) is too high, but applying a 50%
* reduction seems to mitigate the issue.
*
* It is worth noting the adjustment is not necessary on BeagleV Starlight SBC,
* which uses a Microchip PHY. Hence, most likely the Motorcomm PHY is the one
* responsible for the misbehaviour, not the GMAC.
*/
&mdio {
phy: ethernet-phy@0 {
reg = <0>;
rx-internal-delay-ps = <900>;
};
};
...@@ -204,6 +204,37 @@ sdio1: mmc@10010000 { ...@@ -204,6 +204,37 @@ sdio1: mmc@10010000 {
status = "disabled"; status = "disabled";
}; };
gmac: ethernet@10020000 {
compatible = "starfive,jh7100-dwmac", "snps,dwmac";
reg = <0x0 0x10020000 0x0 0x10000>;
clocks = <&clkgen JH7100_CLK_GMAC_ROOT_DIV>,
<&clkgen JH7100_CLK_GMAC_AHB>,
<&clkgen JH7100_CLK_GMAC_PTP_REF>,
<&clkgen JH7100_CLK_GMAC_TX_INV>,
<&clkgen JH7100_CLK_GMAC_GTX>;
clock-names = "stmmaceth", "pclk", "ptp_ref", "tx", "gtx";
resets = <&rstgen JH7100_RSTN_GMAC_AHB>;
reset-names = "ahb";
interrupts = <6>, <7>;
interrupt-names = "macirq", "eth_wake_irq";
max-frame-size = <9000>;
snps,multicast-filter-bins = <32>;
snps,perfect-filter-entries = <128>;
starfive,syscon = <&sysmain 0x70 0>;
rx-fifo-depth = <32768>;
tx-fifo-depth = <16384>;
snps,axi-config = <&stmmac_axi_setup>;
snps,fixed-burst;
snps,force_thresh_dma_mode;
status = "disabled";
stmmac_axi_setup: stmmac-axi-config {
snps,wr_osr_lmt = <16>;
snps,rd_osr_lmt = <16>;
snps,blen = <256 128 64 32 0 0 0>;
};
};
clkgen: clock-controller@11800000 { clkgen: clock-controller@11800000 {
compatible = "starfive,jh7100-clkgen"; compatible = "starfive,jh7100-clkgen";
reg = <0x0 0x11800000 0x0 0x10000>; reg = <0x0 0x11800000 0x0 0x10000>;
...@@ -218,6 +249,11 @@ rstgen: reset-controller@11840000 { ...@@ -218,6 +249,11 @@ rstgen: reset-controller@11840000 {
#reset-cells = <1>; #reset-cells = <1>;
}; };
sysmain: syscon@11850000 {
compatible = "starfive,jh7100-sysmain", "syscon";
reg = <0x0 0x11850000 0x0 0x10000>;
};
i2c0: i2c@118b0000 { i2c0: i2c@118b0000 {
compatible = "snps,designware-i2c"; compatible = "snps,designware-i2c";
reg = <0x0 0x118b0000 0x0 0x10000>; reg = <0x0 0x118b0000 0x0 0x10000>;
...@@ -320,6 +356,15 @@ watchdog@12480000 { ...@@ -320,6 +356,15 @@ watchdog@12480000 {
<&rstgen JH7100_RSTN_WDT>; <&rstgen JH7100_RSTN_WDT>;
}; };
pwm: pwm@12490000 {
compatible = "starfive,jh7100-pwm", "opencores,pwm-v1";
reg = <0x0 0x12490000 0x0 0x10000>;
clocks = <&clkgen JH7100_CLK_PWM_APB>;
resets = <&rstgen JH7100_RSTN_PWM_APB>;
#pwm-cells = <3>;
status = "disabled";
};
sfctemp: temperature-sensor@124a0000 { sfctemp: temperature-sensor@124a0000 {
compatible = "starfive,jh7100-temp"; compatible = "starfive,jh7100-temp";
reg = <0x0 0x124a0000 0x0 0x10000>; reg = <0x0 0x124a0000 0x0 0x10000>;
......
...@@ -125,6 +125,55 @@ &tdm_ext { ...@@ -125,6 +125,55 @@ &tdm_ext {
clock-frequency = <49152000>; clock-frequency = <49152000>;
}; };
&camss {
assigned-clocks = <&ispcrg JH7110_ISPCLK_DOM4_APB_FUNC>,
<&ispcrg JH7110_ISPCLK_MIPI_RX0_PXL>;
assigned-clock-rates = <49500000>, <198000000>;
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
};
port@1 {
reg = <1>;
camss_from_csi2rx: endpoint {
remote-endpoint = <&csi2rx_to_camss>;
};
};
};
};
&csi2rx {
assigned-clocks = <&ispcrg JH7110_ISPCLK_VIN_SYS>;
assigned-clock-rates = <297000000>;
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
/* remote MIPI sensor endpoint */
};
port@1 {
reg = <1>;
csi2rx_to_camss: endpoint {
remote-endpoint = <&camss_from_csi2rx>;
};
};
};
};
&gmac0 { &gmac0 {
phy-handle = <&phy0>; phy-handle = <&phy0>;
phy-mode = "rgmii-id"; phy-mode = "rgmii-id";
...@@ -323,6 +372,12 @@ reserved-data@600000 { ...@@ -323,6 +372,12 @@ reserved-data@600000 {
}; };
}; };
&pwm {
pinctrl-names = "default";
pinctrl-0 = <&pwm_pins>;
status = "okay";
};
&spi0 { &spi0 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&spi0_pins>; pinctrl-0 = <&spi0_pins>;
...@@ -513,6 +568,22 @@ GPOEN_ENABLE, ...@@ -513,6 +568,22 @@ GPOEN_ENABLE,
}; };
}; };
pwm_pins: pwm-0 {
pwm-pins {
pinmux = <GPIOMUX(46, GPOUT_SYS_PWM_CHANNEL0,
GPOEN_SYS_PWM0_CHANNEL0,
GPI_NONE)>,
<GPIOMUX(59, GPOUT_SYS_PWM_CHANNEL1,
GPOEN_SYS_PWM0_CHANNEL1,
GPI_NONE)>;
bias-disable;
drive-strength = <12>;
input-disable;
input-schmitt-disable;
slew-rate = <0>;
};
};
spi0_pins: spi0-0 { spi0_pins: spi0-0 {
mosi-pins { mosi-pins {
pinmux = <GPIOMUX(52, GPOUT_SYS_SPI0_TXD, pinmux = <GPIOMUX(52, GPOUT_SYS_SPI0_TXD,
......
...@@ -829,6 +829,15 @@ i2stx1: i2s@120c0000 { ...@@ -829,6 +829,15 @@ i2stx1: i2s@120c0000 {
status = "disabled"; status = "disabled";
}; };
pwm: pwm@120d0000 {
compatible = "starfive,jh7110-pwm", "opencores,pwm-v1";
reg = <0x0 0x120d0000 0x0 0x10000>;
clocks = <&syscrg JH7110_SYSCLK_PWM_APB>;
resets = <&syscrg JH7110_SYSRST_PWM_APB>;
#pwm-cells = <3>;
status = "disabled";
};
sfctemp: temperature-sensor@120e0000 { sfctemp: temperature-sensor@120e0000 {
compatible = "starfive,jh7110-temp"; compatible = "starfive,jh7110-temp";
reg = <0x0 0x120e0000 0x0 0x10000>; reg = <0x0 0x120e0000 0x0 0x10000>;
...@@ -1104,6 +1113,32 @@ pwrc: power-controller@17030000 { ...@@ -1104,6 +1113,32 @@ pwrc: power-controller@17030000 {
#power-domain-cells = <1>; #power-domain-cells = <1>;
}; };
csi2rx: csi@19800000 {
compatible = "starfive,jh7110-csi2rx", "cdns,csi2rx";
reg = <0x0 0x19800000 0x0 0x10000>;
clocks = <&ispcrg JH7110_ISPCLK_VIN_SYS>,
<&ispcrg JH7110_ISPCLK_VIN_APB>,
<&ispcrg JH7110_ISPCLK_VIN_PIXEL_IF0>,
<&ispcrg JH7110_ISPCLK_VIN_PIXEL_IF1>,
<&ispcrg JH7110_ISPCLK_VIN_PIXEL_IF2>,
<&ispcrg JH7110_ISPCLK_VIN_PIXEL_IF3>;
clock-names = "sys_clk", "p_clk",
"pixel_if0_clk", "pixel_if1_clk",
"pixel_if2_clk", "pixel_if3_clk";
resets = <&ispcrg JH7110_ISPRST_VIN_SYS>,
<&ispcrg JH7110_ISPRST_VIN_APB>,
<&ispcrg JH7110_ISPRST_VIN_PIXEL_IF0>,
<&ispcrg JH7110_ISPRST_VIN_PIXEL_IF1>,
<&ispcrg JH7110_ISPRST_VIN_PIXEL_IF2>,
<&ispcrg JH7110_ISPRST_VIN_PIXEL_IF3>;
reset-names = "sys", "reg_bank",
"pixel_if0", "pixel_if1",
"pixel_if2", "pixel_if3";
phys = <&csi_phy>;
phy-names = "dphy";
status = "disabled";
};
ispcrg: clock-controller@19810000 { ispcrg: clock-controller@19810000 {
compatible = "starfive,jh7110-ispcrg"; compatible = "starfive,jh7110-ispcrg";
reg = <0x0 0x19810000 0x0 0x10000>; reg = <0x0 0x19810000 0x0 0x10000>;
...@@ -1121,6 +1156,47 @@ ispcrg: clock-controller@19810000 { ...@@ -1121,6 +1156,47 @@ ispcrg: clock-controller@19810000 {
power-domains = <&pwrc JH7110_PD_ISP>; power-domains = <&pwrc JH7110_PD_ISP>;
}; };
csi_phy: phy@19820000 {
compatible = "starfive,jh7110-dphy-rx";
reg = <0x0 0x19820000 0x0 0x10000>;
clocks = <&ispcrg JH7110_ISPCLK_M31DPHY_CFG_IN>,
<&ispcrg JH7110_ISPCLK_M31DPHY_REF_IN>,
<&ispcrg JH7110_ISPCLK_M31DPHY_TX_ESC_LAN0>;
clock-names = "cfg", "ref", "tx";
resets = <&ispcrg JH7110_ISPRST_M31DPHY_HW>,
<&ispcrg JH7110_ISPRST_M31DPHY_B09_AON>;
power-domains = <&aon_syscon JH7110_AON_PD_DPHY_RX>;
#phy-cells = <0>;
};
camss: isp@19840000 {
compatible = "starfive,jh7110-camss";
reg = <0x0 0x19840000 0x0 0x10000>,
<0x0 0x19870000 0x0 0x30000>;
reg-names = "syscon", "isp";
clocks = <&ispcrg JH7110_ISPCLK_DOM4_APB_FUNC>,
<&ispcrg JH7110_ISPCLK_ISPV2_TOP_WRAPPER_C>,
<&ispcrg JH7110_ISPCLK_DVP_INV>,
<&ispcrg JH7110_ISPCLK_VIN_P_AXI_WR>,
<&ispcrg JH7110_ISPCLK_MIPI_RX0_PXL>,
<&syscrg JH7110_SYSCLK_ISP_TOP_CORE>,
<&syscrg JH7110_SYSCLK_ISP_TOP_AXI>;
clock-names = "apb_func", "wrapper_clk_c", "dvp_inv",
"axiwr", "mipi_rx0_pxl", "ispcore_2x",
"isp_axi";
resets = <&ispcrg JH7110_ISPRST_ISPV2_TOP_WRAPPER_P>,
<&ispcrg JH7110_ISPRST_ISPV2_TOP_WRAPPER_C>,
<&ispcrg JH7110_ISPRST_VIN_P_AXI_RD>,
<&ispcrg JH7110_ISPRST_VIN_P_AXI_WR>,
<&syscrg JH7110_SYSRST_ISP_TOP>,
<&syscrg JH7110_SYSRST_ISP_TOP_AXI>;
reset-names = "wrapper_p", "wrapper_c", "axird",
"axiwr", "isp_top_n", "isp_top_axi";
power-domains = <&pwrc JH7110_PD_ISP>;
interrupts = <92>, <87>, <90>, <88>;
status = "disabled";
};
voutcrg: clock-controller@295c0000 { voutcrg: clock-controller@295c0000 {
compatible = "starfive,jh7110-voutcrg"; compatible = "starfive,jh7110-voutcrg";
reg = <0x0 0x295c0000 0x0 0x10000>; reg = <0x0 0x295c0000 0x0 0x10000>;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment