r = EMAC_STACR_BASE(dev->opb_bus_freq);
        if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT))
                r |= EMAC_STACR_OC;
-       if (emac_has_feature(dev, EMAC_FTR_HAS_AXON_STACR))
+       if (emac_has_feature(dev, EMAC_FTR_HAS_NEW_STACR))
                r |= EMACX_STACR_STAC_READ;
        else
                r |= EMAC_STACR_STAC_READ;
                r = EMAC_STACR_BASE(dev->opb_bus_freq);
        if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT))
                r |= EMAC_STACR_OC;
-       if (emac_has_feature(dev, EMAC_FTR_HAS_AXON_STACR))
+       if (emac_has_feature(dev, EMAC_FTR_HAS_NEW_STACR))
                r |= EMACX_STACR_STAC_WRITE;
        else
                r |= EMAC_STACR_STAC_WRITE;
        /* Check EMAC version */
        if (of_device_is_compatible(np, "ibm,emac4"))
                dev->features |= EMAC_FTR_EMAC4;
-       if (of_device_is_compatible(np, "ibm,emac-axon")
-           || of_device_is_compatible(np, "ibm,emac-440epx"))
-               dev->features |= EMAC_FTR_HAS_AXON_STACR
-                       | EMAC_FTR_STACR_OC_INVERT;
-       if (of_device_is_compatible(np, "ibm,emac-440spe"))
+
+       /* Fixup some feature bits based on the device tree */
+       if (of_get_property(np, "has-inverted-stacr-oc", NULL))
                dev->features |= EMAC_FTR_STACR_OC_INVERT;
+       if (of_get_property(np, "has-new-stacr-staopc", NULL))
+               dev->features |= EMAC_FTR_HAS_NEW_STACR;
 
-       /* Fixup some feature bits based on the device tree and verify
-        * we have support for them compiled in
-        */
+       /* CAB lacks the appropriate properties */
+       if (of_device_is_compatible(np, "ibm,emac-axon"))
+               dev->features |= EMAC_FTR_HAS_NEW_STACR |
+                       EMAC_FTR_STACR_OC_INVERT;
+
+       /* Enable TAH/ZMII/RGMII features as found */
        if (dev->tah_ph != 0) {
 #ifdef CONFIG_IBM_NEW_EMAC_TAH
                dev->features |= EMAC_FTR_HAS_TAH;
 
  */
 #define EMAC_FTR_HAS_RGMII             0x00000020
 /*
- * Set if we have axon-type STACR
+ * Set if we have new type STACR with STAOPC
  */
-#define EMAC_FTR_HAS_AXON_STACR                0x00000040
+#define EMAC_FTR_HAS_NEW_STACR         0x00000040
 
 
 /* Right now, we don't quite handle the always/possible masks on the
 
        EMAC_FTRS_POSSIBLE      =
 #ifdef CONFIG_IBM_NEW_EMAC_EMAC4
-           EMAC_FTR_EMAC4      | EMAC_FTR_HAS_AXON_STACR       |
+           EMAC_FTR_EMAC4      | EMAC_FTR_HAS_NEW_STACR        |
            EMAC_FTR_STACR_OC_INVERT    |
 #endif
 #ifdef CONFIG_IBM_NEW_EMAC_TAH