viodev->name = of_node->name;
        viodev->dev.of_node = of_node_get(of_node);
 
-       if (firmware_has_feature(FW_FEATURE_CMO))
-               vio_cmo_set_dma_ops(viodev);
-       else
-               set_dma_ops(&viodev->dev, &dma_iommu_ops);
-       set_iommu_table_base(&viodev->dev, vio_build_iommu_table(viodev));
        set_dev_node(&viodev->dev, of_node_to_nid(of_node));
 
        /* init generic 'struct device' fields: */
        viodev->dev.parent = &vio_bus_device.dev;
        viodev->dev.bus = &vio_bus_type;
        viodev->dev.release = vio_dev_release;
-        /* needed to ensure proper operation of coherent allocations
-         * later, in case driver doesn't set it explicitly */
-        dma_set_mask(&viodev->dev, DMA_BIT_MASK(64));
-        dma_set_coherent_mask(&viodev->dev, DMA_BIT_MASK(64));
+
+       if (of_get_property(viodev->dev.of_node, "ibm,my-dma-window", NULL)) {
+               if (firmware_has_feature(FW_FEATURE_CMO))
+                       vio_cmo_set_dma_ops(viodev);
+               else
+                       set_dma_ops(&viodev->dev, &dma_iommu_ops);
+
+               set_iommu_table_base(&viodev->dev,
+                                    vio_build_iommu_table(viodev));
+
+               /* needed to ensure proper operation of coherent allocations
+                * later, in case driver doesn't set it explicitly */
+               dma_set_mask(&viodev->dev, DMA_BIT_MASK(64));
+               dma_set_coherent_mask(&viodev->dev, DMA_BIT_MASK(64));
+       }
 
        /* register with generic device framework */
        if (device_register(&viodev->dev)) {