// SPDX-License-Identifier: GPL-2.0-only
 /* Copyright(c) 2022 Intel Corporation. All rights reserved. */
-#include <linux/io-64-nonatomic-hi-lo.h>
 #include <linux/seq_file.h>
 #include <linux/device.h>
 #include <linux/delay.h>
                            int *target_map, void __iomem *hdm, int which,
                            u64 *dpa_base, struct cxl_endpoint_dvsec_info *info)
 {
+       u64 size, base, skip, dpa_size, lo, hi;
        struct cxl_endpoint_decoder *cxled;
-       u64 size, base, skip, dpa_size;
        bool committed;
        u32 remainder;
        int i, rc;
                                                        which, info);
 
        ctrl = readl(hdm + CXL_HDM_DECODER0_CTRL_OFFSET(which));
-       base = ioread64_hi_lo(hdm + CXL_HDM_DECODER0_BASE_LOW_OFFSET(which));
-       size = ioread64_hi_lo(hdm + CXL_HDM_DECODER0_SIZE_LOW_OFFSET(which));
+       lo = readl(hdm + CXL_HDM_DECODER0_BASE_LOW_OFFSET(which));
+       hi = readl(hdm + CXL_HDM_DECODER0_BASE_HIGH_OFFSET(which));
+       base = (hi << 32) + lo;
+       lo = readl(hdm + CXL_HDM_DECODER0_SIZE_LOW_OFFSET(which));
+       hi = readl(hdm + CXL_HDM_DECODER0_SIZE_HIGH_OFFSET(which));
+       size = (hi << 32) + lo;
        committed = !!(ctrl & CXL_HDM_DECODER0_CTRL_COMMITTED);
        cxld->commit = cxl_decoder_commit;
        cxld->reset = cxl_decoder_reset;
                return rc;
 
        if (!info) {
-               target_list.value =
-                       ioread64_hi_lo(hdm + CXL_HDM_DECODER0_TL_LOW(which));
+               lo = readl(hdm + CXL_HDM_DECODER0_TL_LOW(which));
+               hi = readl(hdm + CXL_HDM_DECODER0_TL_HIGH(which));
+               target_list.value = (hi << 32) + lo;
                for (i = 0; i < cxld->interleave_ways; i++)
                        target_map[i] = target_list.target_id[i];
 
                        port->id, cxld->id, size, cxld->interleave_ways);
                return -ENXIO;
        }
-       skip = ioread64_hi_lo(hdm + CXL_HDM_DECODER0_SKIP_LOW(which));
+       lo = readl(hdm + CXL_HDM_DECODER0_SKIP_LOW(which));
+       hi = readl(hdm + CXL_HDM_DECODER0_SKIP_HIGH(which));
+       skip = (hi << 32) + lo;
        cxled = to_cxl_endpoint_decoder(&cxld->dev);
        rc = devm_cxl_dpa_reserve(cxled, *dpa_base + skip, dpa_size, skip);
        if (rc) {