{
        struct switchdev_attr attr = {
                .orig_dev = p->dev,
-               .id = SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS_SUPPORT,
+               .id = SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS,
+               .u.brport_flags = mask,
        };
        int err;
 
        if (mask & ~BR_PORT_FLAGS_HW_OFFLOAD)
                return 0;
 
-       err = switchdev_port_attr_get(p->dev, &attr);
+       err = switchdev_port_attr_set(p->dev, &attr);
        if (err == -EOPNOTSUPP)
                return 0;
-       if (err)
-               return err;
 
-       /* Check if specific bridge flag attribute offload is supported */
-       if (!(attr.u.brport_flags_support & mask)) {
+       if (err) {
                br_warn(p->br, "bridge flag offload is not supported %u(%s)\n",
                        (unsigned int)p->port_no, p->dev->name);
                return -EOPNOTSUPP;
        attr.id = SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS;
        attr.flags = SWITCHDEV_F_DEFER;
        attr.u.brport_flags = flags;
+
        err = switchdev_port_attr_set(p->dev, &attr);
        if (err) {
                br_warn(p->br, "error setting offload flag on port %u(%s)\n",