* [PATCH 1/3] dt-bindings: Add EBDEE vendor prefix
[not found] <20261003194625.936288-1-2254650260@qq.com>
@ 2026-10-03 19:46 ` Pufan Jin
2026-10-03 21:14 ` Krzysztof Kozlowski
2026-10-03 19:46 ` [PATCH 2/3] dt-bindings: soc: xilinx: Add EBDEE EdgeBoard FZ3A Pufan Jin
2026-10-03 19:46 ` [PATCH 3/3] arm64: zynqmp: Add EBDEE EdgeBoard FZ3A development board Pufan Jin
2 siblings, 1 reply; 8+ messages in thread
From: Pufan Jin @ 2026-10-03 19:46 UTC (permalink / raw)
To: Conor Dooley, Krzysztof Kozlowski, Michal Simek, Rob Herring
Cc: devicetree, linux-arm-kernel, linux-kernel
Shanghai Xin'yI Electronics Technology Co., Ltd. (EBDEE) manufactures
the EdgeBoard series of embedded compute cards, including Zynq
UltraScale+ based designs.
Signed-off-by: Pufan Jin <2254650260@qq.com>
---
Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
index ba2002969..9c7375d4f 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -483,6 +483,8 @@ patternProperties:
description: Zhejiang Ebang Communication Co., Ltd
"^ebbg,.*":
description: EBBG
+ "^ebdee,.*":
+ description: Shanghai Xin'yi Electronics Technology Co., Ltd. (EBDEE)
"^ebs-systart,.*":
description: EBS-SYSTART GmbH
"^ebv,.*":
--
2.55.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3] dt-bindings: soc: xilinx: Add EBDEE EdgeBoard FZ3A
[not found] <20261003194625.936288-1-2254650260@qq.com>
2026-10-03 19:46 ` [PATCH 1/3] dt-bindings: Add EBDEE vendor prefix Pufan Jin
@ 2026-10-03 19:46 ` Pufan Jin
2026-10-03 19:46 ` [PATCH 3/3] arm64: zynqmp: Add EBDEE EdgeBoard FZ3A development board Pufan Jin
2 siblings, 0 replies; 8+ messages in thread
From: Pufan Jin @ 2026-10-03 19:46 UTC (permalink / raw)
To: Conor Dooley, Krzysztof Kozlowski, Michal Simek, Rob Herring
Cc: devicetree, linux-arm-kernel, linux-kernel
Document the EBDEE EdgeBoard FZ3A compatible for the ZynqMP board.
Signed-off-by: Pufan Jin <2254650260@qq.com>
---
Documentation/devicetree/bindings/soc/xilinx/xilinx.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/soc/xilinx/xilinx.yaml b/Documentation/devicetree/bindings/soc/xilinx/xilinx.yaml
index c9f99e0df..ead3a3c34 100644
--- a/Documentation/devicetree/bindings/soc/xilinx/xilinx.yaml
+++ b/Documentation/devicetree/bindings/soc/xilinx/xilinx.yaml
@@ -46,6 +46,7 @@ properties:
- items:
- enum:
+ - ebdee,edgeboard-fz3a
- xlnx,zynqmp-zc1751
- const: xlnx,zynqmp
--
2.55.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3] arm64: zynqmp: Add EBDEE EdgeBoard FZ3A development board
[not found] <20261003194625.936288-1-2254650260@qq.com>
2026-10-03 19:46 ` [PATCH 1/3] dt-bindings: Add EBDEE vendor prefix Pufan Jin
2026-10-03 19:46 ` [PATCH 2/3] dt-bindings: soc: xilinx: Add EBDEE EdgeBoard FZ3A Pufan Jin
@ 2026-10-03 19:46 ` Pufan Jin
2026-10-03 19:58 ` sashiko-bot
2026-10-04 21:25 ` Andrew Lunn
2 siblings, 2 replies; 8+ messages in thread
From: Pufan Jin @ 2026-10-03 19:46 UTC (permalink / raw)
To: Conor Dooley, Krzysztof Kozlowski, Michal Simek, Rob Herring
Cc: devicetree, linux-arm-kernel, linux-kernel
The EBDEE EdgeBoard FZ3A is a compute carrier board built around the
MYIR MYS-CZU3EG SoM with a Zynq UltraScale+ XCZU3EG.
Enable the board peripherals wired to the PS, including Ethernet, I2C,
storage, PCIe, USB, DisplayPort, UARTs, and AMS temperature sensing.
Signed-off-by: Pufan Jin <2254650260@qq.com>
---
arch/arm64/boot/dts/xilinx/Makefile | 1 +
.../xilinx/zynqmp-ebdee-edgeboard-fz3a.dts | 272 ++++++++++++++++++
2 files changed, 273 insertions(+)
create mode 100644 arch/arm64/boot/dts/xilinx/zynqmp-ebdee-edgeboard-fz3a.dts
diff --git a/arch/arm64/boot/dts/xilinx/Makefile b/arch/arm64/boot/dts/xilinx/Makefile
index 70fac0b27..e31d6ee2a 100644
--- a/arch/arm64/boot/dts/xilinx/Makefile
+++ b/arch/arm64/boot/dts/xilinx/Makefile
@@ -1,5 +1,6 @@
# SPDX-License-Identifier: GPL-2.0
dtb-$(CONFIG_ARCH_ZYNQMP) += avnet-ultra96-rev1.dtb
+dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-ebdee-edgeboard-fz3a.dtb
dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1232-revA.dtb
dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1254-revA.dtb
dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1751-xm015-dc1.dtb
diff --git a/arch/arm64/boot/dts/xilinx/zynqmp-ebdee-edgeboard-fz3a.dts b/arch/arm64/boot/dts/xilinx/zynqmp-ebdee-edgeboard-fz3a.dts
new file mode 100644
index 000000000..bbe9610e3
--- /dev/null
+++ b/arch/arm64/boot/dts/xilinx/zynqmp-ebdee-edgeboard-fz3a.dts
@@ -0,0 +1,272 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device tree for EBDEE EdgeBoard FZ3A carrier board
+ * populated with the MYIR MYS-CZU3EG SoM
+ * (Xilinx ZynqMP XCZU3EG, quad Cortex-A53 + PL, 2GB DDR4, 8GB eMMC).
+ *
+ * Copyright (c) 2026 Pufan Jin
+ */
+
+/dts-v1/;
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/phy/phy.h>
+#include <dt-bindings/pinctrl/pinctrl-zynqmp.h>
+#include "zynqmp.dtsi"
+#include "zynqmp-clk-ccf.dtsi"
+
+/ {
+ model = "EBDEE EdgeBoard FZ3A (MYIR MYS-CZU3EG SoM)";
+ compatible = "ebdee,edgeboard-fz3a", "xlnx,zynqmp";
+
+ aliases {
+ ethernet0 = &gem3;
+ i2c0 = &i2c0;
+ i2c1 = &i2c1;
+ mmc0 = &sdhci0;
+ mmc1 = &sdhci1;
+ serial0 = &uart1;
+ serial1 = &uart0;
+ spi0 = &qspi;
+ usb0 = &usb0;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ dpcon: connector {
+ compatible = "dp-connector";
+ label = "mini-DP";
+ type = "mini";
+
+ port {
+ dpcon_in: endpoint {
+ remote-endpoint = <&dpsub_dp_out>;
+ };
+ };
+ };
+
+ dp_aclk: clock-dp-aclk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <100000000>;
+ };
+
+ gtr_refclk0: clock-gtr-ref0 {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <100000000>;
+ };
+
+ gtr_refclk1: clock-gtr-ref1 {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <26000000>;
+ };
+
+ gtr_refclk2: clock-gtr-ref2 {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <27000000>;
+ };
+
+ /*
+ * The PM firmware on this ZU3EG does not report the LPD_LSBUS
+ * clock id as valid, so <&zynqmp_clk LPD_LSBUS> resolves to no
+ * clock at all and drivers that require their bus clock fail to
+ * probe.
+ */
+ lpd_lsbus: clock-lpd-lsbus {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <100000000>;
+ };
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x0 0x0 0x0 0x7ff00000>;
+ };
+
+ vcc_3v3_pcie: regulator-pcie {
+ compatible = "regulator-fixed";
+ regulator-name = "pcie-reset";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ gpios = <&gpio 37 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ regulator-always-on;
+ regulator-boot-on;
+ };
+
+ reserved_memory: reserved-memory {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ linux_cma: cma {
+ compatible = "shared-dma-pool";
+ reusable;
+ alloc-ranges = <0x0 0x0 0x0 0x80000000>;
+ size = <0x0 0x20000000>; /* 512MB */
+ linux,cma-default;
+ };
+ };
+};
+
+&ams_pl {
+ status = "okay";
+};
+
+&ams_ps {
+ status = "okay";
+};
+
+&dwc3_0 {
+ dr_mode = "host";
+ maximum-speed = "super-speed";
+ snps,dis_enblslpm_quirk;
+ snps,dis_u2_susphy_quirk;
+ snps,hsphy_interface = "ulpi";
+ snps,usb3_lpm_capable;
+ status = "okay";
+};
+
+&gem3 {
+ clocks = <&lpd_lsbus>, <&zynqmp_clk GEM3_REF>,
+ <&zynqmp_clk GEM3_TX>, <&zynqmp_clk GEM3_RX>,
+ <&zynqmp_clk GEM_TSU>;
+ phy-mode = "rgmii-id";
+ status = "okay";
+};
+
+&gpio {
+ status = "okay";
+};
+
+&i2c0 {
+ clock-frequency = <400000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c0_default>;
+ status = "okay";
+};
+
+&i2c1 {
+ clock-frequency = <400000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c1_default>;
+ status = "okay";
+};
+
+&out_dp {
+ dpsub_dp_out: endpoint {
+ remote-endpoint = <&dpcon_in>;
+ };
+};
+
+&pcie {
+ phys = <&psgtr 0 PHY_TYPE_PCIE 0 0>;
+
+ status = "okay";
+};
+
+&pinctrl0 {
+ status = "okay";
+
+ pinctrl_i2c0_default: i2c0-default {
+ conf {
+ bias-pull-up;
+ groups = "i2c0_8_grp";
+ };
+
+ mux {
+ function = "i2c0";
+ groups = "i2c0_8_grp";
+ };
+ };
+
+ pinctrl_i2c1_default: i2c1-default {
+ conf {
+ bias-pull-up;
+ groups = "i2c1_8_grp";
+ };
+
+ mux {
+ function = "i2c1";
+ groups = "i2c1_8_grp";
+ };
+ };
+
+ pinctrl_usb0_default: usb0-default {
+ mux {
+ function = "usb0";
+ groups = "usb0_0_grp";
+ };
+ };
+};
+
+&psgtr {
+ clocks = <>r_refclk0>, <>r_refclk1>, <>r_refclk2>;
+ clock-names = "ref0", "ref1", "ref2";
+
+ status = "okay";
+};
+
+&qspi {
+ num-cs = <1>;
+ status = "okay";
+
+ flash: flash@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "jedec,spi-nor";
+ reg = <0x0>;
+ spi-max-frequency = <50000000>;
+ spi-rx-bus-width = <4>;
+ spi-tx-bus-width = <1>;
+ };
+};
+
+&sdhci0 {
+ no-1-8-v;
+ status = "okay";
+};
+
+&sdhci1 {
+ disable-wp;
+ no-1-8-v;
+ status = "okay";
+};
+
+&uart0 {
+ status = "okay";
+};
+
+&uart1 {
+ status = "okay";
+};
+
+&usb0 {
+ phy-names = "usb3-phy";
+ phys = <&psgtr 1 PHY_TYPE_USB3 0 1>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_usb0_default>;
+ reset-gpios = <&gpio 44 GPIO_ACTIVE_LOW>;
+
+ status = "okay";
+};
+
+&zynqmp_dpdma {
+ status = "okay";
+};
+
+&zynqmp_dpsub {
+ clocks = <&dp_aclk>,
+ <&zynqmp_clk DP_AUDIO_REF>,
+ <&zynqmp_clk DP_VIDEO_REF>;
+ clock-names = "dp_apb_clk", "dp_aud_clk", "dp_vtc_pixel_clk_in";
+ phy-names = "dp-phy0", "dp-phy1";
+ phys = <&psgtr 3 PHY_TYPE_DP 0 2>,
+ <&psgtr 2 PHY_TYPE_DP 1 2>;
+ status = "okay";
+};
--
2.55.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] arm64: zynqmp: Add EBDEE EdgeBoard FZ3A development board
2026-10-03 19:46 ` [PATCH 3/3] arm64: zynqmp: Add EBDEE EdgeBoard FZ3A development board Pufan Jin
@ 2026-10-03 19:58 ` sashiko-bot
2026-10-04 21:25 ` Andrew Lunn
1 sibling, 0 replies; 8+ messages in thread
From: sashiko-bot @ 2026-10-03 19:58 UTC (permalink / raw)
To: Pufan Jin; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] dt: zynqmp: peripherals fail to probe due to missing LPD_LSBUS clock override
- [Medium] dt: zynqmp: missing non-removable and bus-width properties for eMMC
--
commit cf011196c14a8a65736d50052e13ac3e134bc620
Author: Pufan Jin <2254650260@qq.com>
Subject: arm64: zynqmp: Add EBDEE EdgeBoard FZ3A development board
This commit adds the device tree for the EBDEE EdgeBoard FZ3A carrier
board built around the MYIR MYS-CZU3EG SoM. It enables various board
peripherals including Ethernet, I2C, eMMC, PCIe, USB, DisplayPort,
and UARTs.
> diff --git a/arch/arm64/boot/dts/xilinx/zynqmp-ebdee-edgeboard-fz3a.dts b/arch/arm64/boot/dts/xilinx/zynqmp-ebdee-edgeboard-fz3a.dts
> new file mode 100644
> --- /dev/null
> +++ b/arch/arm64/boot/dts/xilinx/zynqmp-ebdee-edgeboard-fz3a.dts
[ ... ]
> + /*
> + * The PM firmware on this ZU3EG does not report the LPD_LSBUS
> + * clock id as valid, so <&zynqmp_clk LPD_LSBUS> resolves to no
> + * clock at all and drivers that require their bus clock fail to
> + * probe.
> + */
> + lpd_lsbus: clock-lpd-lsbus {
> + compatible = "fixed-clock";
> + #clock-cells = <0>;
> + clock-frequency = <100000000>;
> + };
[ ... ]
> +&gem3 {
> + clocks = <&lpd_lsbus>, <&zynqmp_clk GEM3_REF>,
> + <&zynqmp_clk GEM3_TX>, <&zynqmp_clk GEM3_RX>,
> + <&zynqmp_clk GEM_TSU>;
> + phy-mode = "rgmii-id";
> + status = "okay";
> +};
[ ... ]
> +&sdhci0 {
> + no-1-8-v;
> + status = "okay";
> +};
[Severity: High]
Since the PM firmware's LPD_LSBUS clock is broken as noted above, will sdhci0
fail to probe without a clock override? The base device tree maps LPD_LSBUS to
sdhci0, so it seems it will inherit the broken clock if not explicitly
overridden here like it was for gem3.
[Severity: Medium]
The commit message states this board has an 8GB eMMC. Should this node
include the non-removable and bus-width = <8>; properties? Without them,
does the MMC core treat this as a removable SD card and run at a degraded
1-bit or 4-bit bus width?
[ ... ]
> +&uart0 {
> + status = "okay";
> +};
[Severity: High]
Will this console UART also fail to probe without the lpd_lsbus clock
workaround? If it inherits the broken LPD_LSBUS clock from the base device
tree, does that result in no console output on boot?
--
Sashiko AI review · https://sashiko.dev/#/patchset/tencent_E21E2A584AF8EE0505C2C0809838621C8209@qq.com?part=3
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] dt-bindings: Add EBDEE vendor prefix
2026-10-03 19:46 ` [PATCH 1/3] dt-bindings: Add EBDEE vendor prefix Pufan Jin
@ 2026-10-03 21:14 ` Krzysztof Kozlowski
2026-10-05 15:59 ` Pufan Jin
0 siblings, 1 reply; 8+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-03 21:14 UTC (permalink / raw)
To: Pufan Jin, Conor Dooley, Krzysztof Kozlowski, Michal Simek,
Rob Herring
Cc: devicetree, linux-arm-kernel, linux-kernel
On 03/10/2026 21:46, Pufan Jin wrote:
> Shanghai Xin'yI Electronics Technology Co., Ltd. (EBDEE) manufactures
> the EdgeBoard series of embedded compute cards, including Zynq
> UltraScale+ based designs.
>
What does EBDEE mean? What is the company website?
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] arm64: zynqmp: Add EBDEE EdgeBoard FZ3A development board
2026-10-03 19:46 ` [PATCH 3/3] arm64: zynqmp: Add EBDEE EdgeBoard FZ3A development board Pufan Jin
2026-10-03 19:58 ` sashiko-bot
@ 2026-10-04 21:25 ` Andrew Lunn
2026-10-05 16:26 ` Pufan Jin
1 sibling, 1 reply; 8+ messages in thread
From: Andrew Lunn @ 2026-10-04 21:25 UTC (permalink / raw)
To: Pufan Jin
Cc: Conor Dooley, Krzysztof Kozlowski, Michal Simek, Rob Herring,
devicetree, linux-arm-kernel, linux-kernel
> +&gem3 {
> + clocks = <&lpd_lsbus>, <&zynqmp_clk GEM3_REF>,
> + <&zynqmp_clk GEM3_TX>, <&zynqmp_clk GEM3_RX>,
> + <&zynqmp_clk GEM_TSU>;
> + phy-mode = "rgmii-id";
> + status = "okay";
> +};
No MDIO bus? No phy-handle?
Andrew
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] dt-bindings: Add EBDEE vendor prefix
2026-10-03 21:14 ` Krzysztof Kozlowski
@ 2026-10-05 15:59 ` Pufan Jin
0 siblings, 0 replies; 8+ messages in thread
From: Pufan Jin @ 2026-10-05 15:59 UTC (permalink / raw)
To: Krzysztof Kozlowski, Conor Dooley, Michal Simek, Rob Herring
Cc: devicetree, linux-arm-kernel, linux-kernel
On 2026/10/4 05:14, Krzysztof Kozlowski wrote:
> On 03/10/2026 21:46, Pufan Jin wrote:
>> Shanghai Xin'yI Electronics Technology Co., Ltd. (EBDEE) manufactures
>> the EdgeBoard series of embedded compute cards, including Zynq
>> UltraScale+ based designs.
>>
> What does EBDEE mean? What is the company website?
>
> Best regards,
> Krzysztof
Hi Krzysztof,
Thank you for pointing this out. "EBDEE" was an improper local acronym
derived from "EdgeBoard Developer Edition".
The actual commercial brand and manufacturer of the board is ALINX
(Shanghai Xin'yi Electronics Technology Co., Ltd.). The official
company website is:
https://www.alinx.com/
I have dropped the "ebdee" prefix and replaced it with "alinx" in v2
to properly match the manufacturer and board schematics.
Best regards,
Pufan Jin
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] arm64: zynqmp: Add EBDEE EdgeBoard FZ3A development board
2026-10-04 21:25 ` Andrew Lunn
@ 2026-10-05 16:26 ` Pufan Jin
0 siblings, 0 replies; 8+ messages in thread
From: Pufan Jin @ 2026-10-05 16:26 UTC (permalink / raw)
To: Andrew Lunn
Cc: Conor Dooley, Krzysztof Kozlowski, Michal Simek, Rob Herring,
devicetree, linux-arm-kernel, linux-kernel
On 2026/10/5 05:25, Andrew Lunn wrote:
>> +&gem3 {
>> + clocks = <&lpd_lsbus>, <&zynqmp_clk GEM3_REF>,
>> + <&zynqmp_clk GEM3_TX>, <&zynqmp_clk GEM3_RX>,
>> + <&zynqmp_clk GEM_TSU>;
>> + phy-mode = "rgmii-id";
>> + status = "okay";
>> +};
> No MDIO bus? No phy-handle?
>
> Andrew
Hi Andrew,
Thanks for the review. In v1, the mdio node and phy-handle were omitted,
relying on the Cadence MACB driver's MDIO auto-probing, which was
incomplete.
According to the hardware schematics and live register readback, the board
has an on-board Micrel KSZ9031RNX Gigabit PHY strapped to MDIO address 1
(PHYAD[2:0] = 001b, PHY ID 0x00221620).
In v2, I have added an explicit mdio bus node with the PHY at reg = <1>:
```
mdio {
phy0: ethernet-phy@1 {
reg = <1>;
compatible = "ethernet-phy-id0022.1620";
};
};
```
and referenced it with phy-handle = <&phy0> under phy-mode = "rgmii-id".
This has been validated on physical hardware at 1000 Mbps Full Duplex
with zero CRC/frame errors.
Best regards,
Pufan Jin
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-10-05 16:26 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20261003194625.936288-1-2254650260@qq.com>
2026-10-03 19:46 ` [PATCH 1/3] dt-bindings: Add EBDEE vendor prefix Pufan Jin
2026-10-03 21:14 ` Krzysztof Kozlowski
2026-10-05 15:59 ` Pufan Jin
2026-10-03 19:46 ` [PATCH 2/3] dt-bindings: soc: xilinx: Add EBDEE EdgeBoard FZ3A Pufan Jin
2026-10-03 19:46 ` [PATCH 3/3] arm64: zynqmp: Add EBDEE EdgeBoard FZ3A development board Pufan Jin
2026-10-03 19:58 ` sashiko-bot
2026-10-04 21:25 ` Andrew Lunn
2026-10-05 16:26 ` Pufan Jin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox