return ism_move(smcd->priv, dmb_tok, idx, sf, offset, data, size);
 }
 
+static int smcd_supports_v2(void)
+{
+       return SYSTEM_EID.serial_number[0] != '0' ||
+               SYSTEM_EID.type[0] != '0';
+}
+
 static u64 smcd_get_local_gid(struct smcd_dev *smcd)
 {
        return ism_get_local_gid(smcd->priv);
        .reset_vlan_required = smcd_reset_vlan_required,
        .signal_event = smcd_signal_ieq,
        .move_data = smcd_move,
+       .supports_v2 = smcd_supports_v2,
        .get_system_eid = ism_get_seid,
        .get_local_gid = smcd_get_local_gid,
        .get_chid = smcd_get_chid,
 
        int (*move_data)(struct smcd_dev *dev, u64 dmb_tok, unsigned int idx,
                         bool sf, unsigned int offset, void *data,
                         unsigned int size);
+       int (*supports_v2)(void);
        u8* (*get_system_eid)(void);
        u64 (*get_local_gid)(struct smcd_dev *dev);
        u16 (*get_chid)(struct smcd_dev *dev);
 
                u8 *system_eid = NULL;
 
                system_eid = smcd->ops->get_system_eid();
-               if (system_eid[24] != '0' || system_eid[28] != '0') {
+               if (smcd->ops->supports_v2()) {
                        smc_ism_v2_capable = true;
                        memcpy(smc_ism_v2_system_eid, system_eid,
                               SMC_MAX_EID_LEN);