--- /dev/null
+From 00d3c54c611143f57b632e4cd3b42b0a94d82307 Mon Sep 17 00:00:00 2001
+From: Robert Marko <robimarko@gmail.com>
+Date: Sun, 25 Jun 2023 11:24:09 +0200
+Subject: [PATCH 3/3] SSDK: set OF node for the SFP PHY
+
+Currently, SSDK is creating a fake SFP PHY which has no OF node populated,
+thus making it impossible to pass it to NSS-DP so port can actually work.
+
+We eliminated QCA-s connecting of the PHY by manually creating a string
+and then matching by name and instead only support passing the PHY as
+phandle via phy-handle.
+
+So, lets just use the switch port node to which the SFP is connected to
+anyway and set it as the PHY device OF node so we can pass it to NSS-DP.
+
+Signed-off-by: Robert Marko <robimarko@gmail.com>
+---
+ include/hsl/phy/hsl_phy.h | 6 ++++++
+ src/hsl/phy/hsl_phy.c | 14 ++++++++++++++
+ src/hsl/phy/sfp_phy.c | 7 +++++++
+ src/init/ssdk_dts.c | 7 +++++++
+ 4 files changed, 34 insertions(+)
+
+--- a/include/hsl/phy/hsl_phy.h
++++ b/include/hsl/phy/hsl_phy.h
+@@ -584,6 +584,7 @@ typedef struct {
+ a_bool_t port_link_status[SW_MAX_NR_PORT];
+ a_uint32_t port_mode[SW_MAX_NR_PORT];
+ a_uint32_t combo_phy_type[SW_MAX_NR_PORT];
++ struct device_node *port_node[SW_MAX_NR_PORT];
+ } phy_info_t;
+ /*qca808x_end*/
+ #define MALIBU5PORT_PHY 0x004DD0B1
+@@ -1038,3 +1039,8 @@ hsl_phydev_eee_update(a_uint32_t dev_id,
+ #endif /* __cplusplus */
+ #endif /* _HSL_PHY_H_ */
+ /*qca808x_end*/
++
++struct device_node*
++hsl_port_node_get(a_uint32_t dev_id, a_uint32_t port_id);
++void
++hsl_port_node_set(a_uint32_t dev_id, a_uint32_t port_id, struct device_node *port_node);
+--- a/src/hsl/phy/hsl_phy.c
++++ b/src/hsl/phy/hsl_phy.c
+@@ -3433,3 +3433,17 @@ hsl_phy_modify_debug(a_uint32_t dev_id,
+ return rv;
+ }
+ /*qca808x_end*/
++
++struct device_node*
++hsl_port_node_get(a_uint32_t dev_id, a_uint32_t port_id)
++{
++ return phy_info[dev_id]->port_node[port_id];
++}
++
++void
++hsl_port_node_set(a_uint32_t dev_id, a_uint32_t port_id, struct device_node *port_node)
++{
++ phy_info[dev_id]->port_node[port_id] = port_node;
++
++ return;
++}
+--- a/src/hsl/phy/sfp_phy.c
++++ b/src/hsl/phy/sfp_phy.c
+@@ -335,6 +335,13 @@ int sfp_phy_device_setup(a_uint32_t dev_
+ phy_device_register(phydev);
+
+ phydev->priv = priv;
++ /*
++ * Set the PHY OF node in order to be able to later connect the
++ * fake SFP PHY by passing it as a phandle in phy-handle.
++ */
++ phydev->mdio.dev.of_node = hsl_port_node_get(dev_id, port);
++ if (!phydev->mdio.dev.of_node)
++ return SW_NOT_FOUND;
+ #if defined(IN_PHY_I2C_MODE)
+ if (hsl_port_phy_access_type_get(dev_id, port) == PHY_I2C_ACCESS) {
+ if(phydev->drv)
+--- a/src/init/ssdk_dts.c
++++ b/src/init/ssdk_dts.c
+@@ -784,6 +784,13 @@ static sw_error_t ssdk_dt_parse_phy_info
+ }
+ }
+ hsl_port_feature_set(dev_id, port_id, phy_features | PHY_F_INIT);
++
++ /*
++ * Save the port node so it can be passed as the
++ * fake SFP PHY OF node in order to be able to
++ * pass the SFP phy via phy-handle
++ */
++ hsl_port_node_set(dev_id, port_id, port_node);
+ }
+
+ return rv;