mlx5_esw_get_port_parent_id(dev, &ppid);
        memcpy(dl_port->attrs.switch_id.id, &ppid.id[0], ppid.id_len);
        dl_port->attrs.switch_id.id_len = ppid.id_len;
-       devlink_port_attrs_pci_sf_set(dl_port, 0, pfnum, sfnum);
+       devlink_port_attrs_pci_sf_set(dl_port, 0, pfnum, sfnum, false);
        devlink = priv_to_devlink(dev);
        dl_port_index = mlx5_esw_vport_to_devlink_port_index(dev, vport_num);
        err = devlink_port_register(devlink, dl_port, dl_port_index);
 
  * @controller: Associated controller number
  * @sf: Associated PCI SF for of the PCI PF for this port.
  * @pf: Associated PCI PF number for this port.
+ * @external: when set, indicates if a port is for an external controller
  */
 struct devlink_port_pci_sf_attrs {
        u32 controller;
        u32 sf;
        u16 pf;
+       u8 external:1;
 };
 
 /**
 void devlink_port_attrs_pci_vf_set(struct devlink_port *devlink_port, u32 controller,
                                   u16 pf, u16 vf, bool external);
 void devlink_port_attrs_pci_sf_set(struct devlink_port *devlink_port,
-                                  u32 controller, u16 pf, u32 sf);
+                                  u32 controller, u16 pf, u32 sf,
+                                  bool external);
 int devlink_sb_register(struct devlink *devlink, unsigned int sb_index,
                        u32 size, u16 ingress_pools_count,
                        u16 egress_pools_count, u16 ingress_tc_count,
 
  *     @controller: associated controller number for the devlink port instance
  *     @pf: associated PF for the devlink port instance
  *     @sf: associated SF of a PF for the devlink port instance
+ *     @external: indicates if the port is for an external controller
  */
 void devlink_port_attrs_pci_sf_set(struct devlink_port *devlink_port, u32 controller,
-                                  u16 pf, u32 sf)
+                                  u16 pf, u32 sf, bool external)
 {
        struct devlink_port_attrs *attrs = &devlink_port->attrs;
        int ret;
        attrs->pci_sf.controller = controller;
        attrs->pci_sf.pf = pf;
        attrs->pci_sf.sf = sf;
+       attrs->pci_sf.external = external;
 }
 EXPORT_SYMBOL_GPL(devlink_port_attrs_pci_sf_set);
 
                             attrs->pci_vf.pf, attrs->pci_vf.vf);
                break;
        case DEVLINK_PORT_FLAVOUR_PCI_SF:
+               if (attrs->pci_sf.external) {
+                       n = snprintf(name, len, "c%u", attrs->pci_sf.controller);
+                       if (n >= len)
+                               return -EINVAL;
+                       len -= n;
+                       name += n;
+               }
                n = snprintf(name, len, "pf%usf%u", attrs->pci_sf.pf,
                             attrs->pci_sf.sf);
                break;