struct qca8k_priv *priv = (struct qca8k_priv *)ds->priv;
 
        qca8k_port_set_status(priv, port, 1);
-       priv->port_sts[port].enabled = 1;
+       priv->port_enabled_map |= BIT(port);
 
        if (dsa_is_user_port(ds, port))
                phy_support_asym_pause(phy);
        struct qca8k_priv *priv = (struct qca8k_priv *)ds->priv;
 
        qca8k_port_set_status(priv, port, 0);
-       priv->port_sts[port].enabled = 0;
+       priv->port_enabled_map &= ~BIT(port);
 }
 
 static int
 static void
 qca8k_set_pm(struct qca8k_priv *priv, int enable)
 {
-       int i;
+       int port;
 
-       for (i = 0; i < QCA8K_NUM_PORTS; i++) {
-               if (!priv->port_sts[i].enabled)
+       for (port = 0; port < QCA8K_NUM_PORTS; port++) {
+               /* Do not enable on resume if the port was
+                * disabled before.
+                */
+               if (!(priv->port_enabled_map & BIT(port)))
                        continue;
 
-               qca8k_port_set_status(priv, i, enable);
+               qca8k_port_set_status(priv, port, enable);
        }
 }
 
 
        QCA8K_MIB_CAST = 3,
 };
 
-struct ar8xxx_port_status {
-       int enabled;
-};
-
 struct qca8k_match_data {
        u8 id;
        bool reduced_package;
        u8 mirror_rx;
        u8 mirror_tx;
        u8 lag_hash_mode;
+       /* Each bit correspond to a port. This switch can support a max of 7 port.
+        * Bit 1: port enabled. Bit 0: port disabled.
+        */
+       u8 port_enabled_map;
        bool legacy_phy_port_mapping;
        struct qca8k_ports_config ports_config;
        struct regmap *regmap;
        struct mii_bus *bus;
-       struct ar8xxx_port_status port_sts[QCA8K_NUM_PORTS];
        struct dsa_switch *ds;
        struct mutex reg_mutex;
        struct device *dev;