/*
         * The switch and port to which the CPU is attached.
         */
-       s8                      cpu_switch;
+       struct dsa_switch       *cpu_switch;
        s8                      cpu_port;
 
        /*
 
 static inline bool dsa_is_cpu_port(struct dsa_switch *ds, int p)
 {
-       return !!(ds->index == ds->dst->cpu_switch && p == ds->dst->cpu_port);
+       return !!(ds == ds->dst->cpu_switch && p == ds->dst->cpu_port);
 }
 
 static inline bool dsa_is_dsa_port(struct dsa_switch *ds, int p)
         * Else return the (DSA) port number that connects to the
         * switch that is one hop closer to the cpu.
         */
-       if (dst->cpu_switch == ds->index)
+       if (dst->cpu_switch == ds)
                return dst->cpu_port;
        else
-               return ds->rtable[dst->cpu_switch];
+               return ds->rtable[dst->cpu_switch->index];
 }
 
 struct switchdev_trans;
 
                        continue;
 
                if (!strcmp(name, "cpu")) {
-                       if (dst->cpu_switch != -1) {
+                       if (!dst->cpu_switch) {
                                netdev_err(dst->master_netdev,
                                           "multiple cpu ports?!\n");
                                return -EINVAL;
                        }
-                       dst->cpu_switch = index;
+                       dst->cpu_switch = ds;
                        dst->cpu_port = i;
                        ds->cpu_port_mask |= 1 << i;
                } else if (!strcmp(name, "dsa")) {
         * tagging protocol to the preferred tagging format of this
         * switch.
         */
-       if (dst->cpu_switch == index) {
+       if (dst->cpu_switch == ds) {
                enum dsa_tag_protocol tag_protocol;
 
                tag_protocol = ops->get_tag_protocol(ds);
 
        dst->pd = pd;
        dst->master_netdev = dev;
-       dst->cpu_switch = -1;
        dst->cpu_port = -1;
 
        for (i = 0; i < pd->nr_chips; i++) {
 
        if (!dst)
                return NULL;
        dst->tree = tree;
-       dst->cpu_switch = -1;
        INIT_LIST_HEAD(&dst->list);
        list_add_tail(&dsa_switch_trees, &dst->list);
        kref_init(&dst->refcount);
        if (!dst->master_netdev)
                dst->master_netdev = ethernet_dev;
 
-       if (dst->cpu_switch == -1) {
-               dst->cpu_switch = ds->index;
+       if (!dst->cpu_switch) {
+               dst->cpu_switch = ds;
                dst->cpu_port = index;
        }