union __cvmx_l2c_tag {
        uint64_t u64;
        struct cvmx_l2c_tag_cn50xx {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved:40;
                uint64_t V:1;           /* Line valid */
                uint64_t D:1;           /* Line dirty */
                uint64_t L:1;           /* Line locked */
                uint64_t U:1;           /* Use, LRU eviction */
                uint64_t addr:20;       /* Phys mem addr (33..14) */
+#else
+               uint64_t addr:20;       /* Phys mem addr (33..14) */
+               uint64_t U:1;           /* Use, LRU eviction */
+               uint64_t L:1;           /* Line locked */
+               uint64_t D:1;           /* Line dirty */
+               uint64_t V:1;           /* Line valid */
+               uint64_t reserved:40;
+#endif
        } cn50xx;
        struct cvmx_l2c_tag_cn30xx {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved:41;
                uint64_t V:1;           /* Line valid */
                uint64_t D:1;           /* Line dirty */
                uint64_t L:1;           /* Line locked */
                uint64_t U:1;           /* Use, LRU eviction */
                uint64_t addr:19;       /* Phys mem addr (33..15) */
+#else
+               uint64_t addr:19;       /* Phys mem addr (33..15) */
+               uint64_t U:1;           /* Use, LRU eviction */
+               uint64_t L:1;           /* Line locked */
+               uint64_t D:1;           /* Line dirty */
+               uint64_t V:1;           /* Line valid */
+               uint64_t reserved:41;
+#endif
        } cn30xx;
        struct cvmx_l2c_tag_cn31xx {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved:42;
                uint64_t V:1;           /* Line valid */
                uint64_t D:1;           /* Line dirty */
                uint64_t L:1;           /* Line locked */
                uint64_t U:1;           /* Use, LRU eviction */
                uint64_t addr:18;       /* Phys mem addr (33..16) */
+#else
+               uint64_t addr:18;       /* Phys mem addr (33..16) */
+               uint64_t U:1;           /* Use, LRU eviction */
+               uint64_t L:1;           /* Line locked */
+               uint64_t D:1;           /* Line dirty */
+               uint64_t V:1;           /* Line valid */
+               uint64_t reserved:42;
+#endif
        } cn31xx;
        struct cvmx_l2c_tag_cn38xx {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved:43;
                uint64_t V:1;           /* Line valid */
                uint64_t D:1;           /* Line dirty */
                uint64_t L:1;           /* Line locked */
                uint64_t U:1;           /* Use, LRU eviction */
                uint64_t addr:17;       /* Phys mem addr (33..17) */
+#else
+               uint64_t addr:17;       /* Phys mem addr (33..17) */
+               uint64_t U:1;           /* Use, LRU eviction */
+               uint64_t L:1;           /* Line locked */
+               uint64_t D:1;           /* Line dirty */
+               uint64_t V:1;           /* Line valid */
+               uint64_t reserved:43;
+#endif
        } cn38xx;
        struct cvmx_l2c_tag_cn58xx {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved:44;
                uint64_t V:1;           /* Line valid */
                uint64_t D:1;           /* Line dirty */
                uint64_t L:1;           /* Line locked */
                uint64_t U:1;           /* Use, LRU eviction */
                uint64_t addr:16;       /* Phys mem addr (33..18) */
+#else
+               uint64_t addr:16;       /* Phys mem addr (33..18) */
+               uint64_t U:1;           /* Use, LRU eviction */
+               uint64_t L:1;           /* Line locked */
+               uint64_t D:1;           /* Line dirty */
+               uint64_t V:1;           /* Line valid */
+               uint64_t reserved:44;
+#endif
        } cn58xx;
        struct cvmx_l2c_tag_cn58xx cn56xx;      /* 2048 sets */
        struct cvmx_l2c_tag_cn31xx cn52xx;      /* 512 sets */
 
 typedef union {
        uint64_t u64;
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                /*
                 * Don't reschedule this entry. no_sched is used for
                 * CVMX_POW_TAG_OP_SWTAG_DESCH and
                 * CVMX_POW_TAG_OP_*_NSCHED
                 */
                uint64_t tag:32;
+#else
+               uint64_t tag:32;
+               uint64_t type:3;
+               uint64_t grp:4;
+               uint64_t qos:3;
+               uint64_t unused2:2;
+               cvmx_pow_tag_op_t op:4;
+               uint64_t index:13;
+               uint64_t unused:2;
+               uint64_t no_sched:1;
+#endif
        } s;
 } cvmx_pow_tag_req_t;
 
      * Address for new work request loads (did<2:0> == 0)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                /* Mips64 address region. Should be CVMX_IO_SEG */
                uint64_t mem_region:2;
                /* Must be zero */
                uint64_t wait:1;
                /* Must be zero */
                uint64_t reserved_0_2:3;
+#else
+               uint64_t reserved_0_2:3;
+               uint64_t wait:1;
+               uint64_t reserved_4_39:36;
+               uint64_t did:8;
+               uint64_t is_io:1;
+               uint64_t reserved_49_61:13;
+               uint64_t mem_region:2;
+#endif
        } swork;
 
     /**
      * Address for loads to get POW internal status
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                /* Mips64 address region. Should be CVMX_IO_SEG */
                uint64_t mem_region:2;
                /* Must be zero */
                uint64_t get_wqp:1;
                /* Must be zero */
                uint64_t reserved_0_2:3;
+#else
+               uint64_t reserved_0_2:3;
+               uint64_t get_wqp:1;
+               uint64_t get_cur:1;
+               uint64_t get_rev:1;
+               uint64_t coreid:4;
+               uint64_t reserved_10_39:30;
+               uint64_t did:8;
+               uint64_t is_io:1;
+               uint64_t reserved_49_61:13;
+               uint64_t mem_region:2;
+#endif
        } sstatus;
 
     /**
      * Address for memory loads to get POW internal state
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                /* Mips64 address region. Should be CVMX_IO_SEG */
                uint64_t mem_region:2;
                /* Must be zero */
                uint64_t get_wqp:1;
                /* Must be zero */
                uint64_t reserved_0_2:3;
+#else
+               uint64_t reserved_0_2:3;
+               uint64_t get_wqp:1;
+               uint64_t get_des:1;
+               uint64_t index:11;
+               uint64_t reserved_16_39:24;
+               uint64_t did:8;
+               uint64_t is_io:1;
+               uint64_t reserved_49_61:13;
+               uint64_t mem_region:2;
+#endif
        } smemload;
 
     /**
      * Address for index/pointer loads
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                /* Mips64 address region. Should be CVMX_IO_SEG */
                uint64_t mem_region:2;
                /* Must be zero */
                uint64_t get_rmt:1;
                /* Must be zero */
                uint64_t reserved_0_2:3;
+#else
+               uint64_t reserved_0_2:3;
+               uint64_t get_rmt:1;
+               uint64_t get_des_get_tail:1;
+               uint64_t qosgrp:4;
+               uint64_t reserved_9_39:31;
+               uint64_t did:8;
+               uint64_t is_io:1;
+               uint64_t reserved_49_61:13;
+               uint64_t mem_region:2;
+#endif
        } sindexload;
 
     /**
      * available.)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                /* Mips64 address region. Should be CVMX_IO_SEG */
                uint64_t mem_region:2;
                /* Must be zero */
                uint64_t did:8;
                /* Must be zero */
                uint64_t reserved_0_39:40;
+#else
+               uint64_t reserved_0_39:40;
+               uint64_t did:8;
+               uint64_t is_io:1;
+               uint64_t reserved_49_61:13;
+               uint64_t mem_region:2;
+#endif
        } snull_rd;
 } cvmx_pow_load_addr_t;
 
      * Response to new work request loads
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                /*
                 * Set when no new work queue entry was returned.  *
                 * If there was de-scheduled work, the HW will
                uint64_t reserved_40_62:23;
                /* 36 in O1 -- the work queue pointer */
                uint64_t addr:40;
+#else
+               uint64_t addr:40;
+               uint64_t reserved_40_62:23;
+               uint64_t no_work:1;
+#endif
        } s_work;
 
     /**
      * Result for a POW Status Load (when get_cur==0 and get_wqp==0)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_62_63:2;
                /* Set when there is a pending non-NULL SWTAG or
                 * SWTAG_FULL, and the POW entry has not left the list
                 *    AND pend_desched_switch) are set.
                 */
                uint64_t pend_tag:32;
+#else
+               uint64_t pend_tag:32;
+               uint64_t pend_type:2;
+               uint64_t reserved_34_35:2;
+               uint64_t pend_grp:4;
+               uint64_t pend_index:11;
+               uint64_t reserved_51:1;
+               uint64_t pend_nosched_clr:1;
+               uint64_t pend_null_rd:1;
+               uint64_t pend_new_work_wait:1;
+               uint64_t pend_new_work:1;
+               uint64_t pend_nosched:1;
+               uint64_t pend_desched_switch:1;
+               uint64_t pend_desched:1;
+               uint64_t pend_switch_null:1;
+               uint64_t pend_switch_full:1;
+               uint64_t pend_switch:1;
+               uint64_t reserved_62_63:2;
+#endif
        } s_sstatus0;
 
     /**
      * Result for a POW Status Load (when get_cur==0 and get_wqp==1)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_62_63:2;
                /*
                 * Set when there is a pending non-NULL SWTAG or
                uint64_t pend_grp:4;
                /* This is the wqp when pend_nosched_clr is set. */
                uint64_t pend_wqp:36;
+#else
+               uint64_t pend_wqp:36;
+               uint64_t pend_grp:4;
+               uint64_t pend_index:11;
+               uint64_t reserved_51:1;
+               uint64_t pend_nosched_clr:1;
+               uint64_t pend_null_rd:1;
+               uint64_t pend_new_work_wait:1;
+               uint64_t pend_new_work:1;
+               uint64_t pend_nosched:1;
+               uint64_t pend_desched_switch:1;
+               uint64_t pend_desched:1;
+               uint64_t pend_switch_null:1;
+               uint64_t pend_switch_full:1;
+               uint64_t pend_switch:1;
+               uint64_t reserved_62_63:2;
+#endif
        } s_sstatus1;
 
     /**
      * get_rev==0)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_62_63:2;
                /*
                 * Points to the next POW entry in the tag list when
                 * SWTAG_DESCHED).
                 */
                uint64_t tag:32;
+#else
+               uint64_t tag:32;
+               uint64_t tag_type:2;
+               uint64_t tail:1;
+               uint64_t head:1;
+               uint64_t grp:4;
+               uint64_t index:11;
+               uint64_t link_index:11;
+               uint64_t reserved_62_63:2;
+#endif
        } s_sstatus2;
 
     /**
      * Result for a POW Status Load (when get_cur==1, get_wqp==0, and get_rev==1)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_62_63:2;
                /*
                 * Points to the prior POW entry in the tag list when
                 * SWTAG_DESCHED).
                 */
                uint64_t tag:32;
+#else
+               uint64_t tag:32;
+               uint64_t tag_type:2;
+               uint64_t tail:1;
+               uint64_t head:1;
+               uint64_t grp:4;
+               uint64_t index:11;
+               uint64_t revlink_index:11;
+               uint64_t reserved_62_63:2;
+#endif
        } s_sstatus3;
 
     /**
      * get_rev==0)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_62_63:2;
                /*
                 * Points to the next POW entry in the tag list when
                 * list entered on SWTAG_FULL).
                 */
                uint64_t wqp:36;
+#else
+               uint64_t wqp:36;
+               uint64_t grp:4;
+               uint64_t index:11;
+               uint64_t link_index:11;
+               uint64_t reserved_62_63:2;
+#endif
        } s_sstatus4;
 
     /**
      * get_rev==1)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_62_63:2;
                /*
                 * Points to the prior POW entry in the tag list when
                 * list entered on SWTAG_FULL).
                 */
                uint64_t wqp:36;
+#else
+               uint64_t wqp:36;
+               uint64_t grp:4;
+               uint64_t index:11;
+               uint64_t revlink_index:11;
+               uint64_t reserved_62_63:2;
+#endif
        } s_sstatus5;
 
     /**
      * Result For POW Memory Load (get_des == 0 and get_wqp == 0)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_51_63:13;
                /*
                 * The next entry in the input, free, descheduled_head
                uint64_t tag_type:2;
                /* The tag of the POW entry. */
                uint64_t tag:32;
+#else
+               uint64_t tag:32;
+               uint64_t tag_type:2;
+               uint64_t tail:1;
+               uint64_t reserved_35:1;
+               uint64_t grp:4;
+               uint64_t next_index:11;
+               uint64_t reserved_51_63:13;
+#endif
        } s_smemload0;
 
     /**
      * Result For POW Memory Load (get_des == 0 and get_wqp == 1)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_51_63:13;
                /*
                 * The next entry in the input, free, descheduled_head
                uint64_t grp:4;
                /* The WQP held in the POW entry. */
                uint64_t wqp:36;
+#else
+               uint64_t wqp:36;
+               uint64_t grp:4;
+               uint64_t next_index:11;
+               uint64_t reserved_51_63:13;
+#endif
        } s_smemload1;
 
     /**
      * Result For POW Memory Load (get_des == 1)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_51_63:13;
                /*
                 * The next entry in the tag list connected to the
                 * is set.
                 */
                uint64_t pend_tag:32;
+#else
+               uint64_t pend_tag:32;
+               uint64_t pend_type:2;
+               uint64_t pend_switch:1;
+               uint64_t nosched:1;
+               uint64_t grp:4;
+               uint64_t fwd_index:11;
+               uint64_t reserved_51_63:13;
+#endif
        } s_smemload2;
 
     /**
      * Result For POW Index/Pointer Load (get_rmt == 0/get_des_get_tail == 0)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_52_63:12;
                /*
                 * set when there is one or more POW entries on the
                 * the input Q list selected by qosgrp.
                 */
                uint64_t loc_tail:11;
+#else
+               uint64_t loc_tail:11;
+               uint64_t reserved_11:1;
+               uint64_t loc_head:11;
+               uint64_t reserved_23:1;
+               uint64_t loc_one:1;
+               uint64_t loc_val:1;
+               uint64_t free_tail:11;
+               uint64_t reserved_37:1;
+               uint64_t free_head:11;
+               uint64_t reserved_49:1;
+               uint64_t free_one:1;
+               uint64_t free_val:1;
+               uint64_t reserved_52_63:12;
+#endif
        } sindexload0;
 
     /**
      * Result For POW Index/Pointer Load (get_rmt == 0/get_des_get_tail == 1)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_52_63:12;
                /*
                 * set when there is one or more POW entries on the
                 * head on the descheduled list selected by qosgrp.
                 */
                uint64_t des_tail:11;
+#else
+               uint64_t des_tail:11;
+               uint64_t reserved_11:1;
+               uint64_t des_head:11;
+               uint64_t reserved_23:1;
+               uint64_t des_one:1;
+               uint64_t des_val:1;
+               uint64_t nosched_tail:11;
+               uint64_t reserved_37:1;
+               uint64_t nosched_head:11;
+               uint64_t reserved_49:1;
+               uint64_t nosched_one:1;
+               uint64_t nosched_val:1;
+               uint64_t reserved_52_63:12;
+#endif
        } sindexload1;
 
     /**
      * Result For POW Index/Pointer Load (get_rmt == 1/get_des_get_tail == 0)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_39_63:25;
                /*
                 * Set when this DRAM list is the current head
                 * qosgrp.
                 */
                uint64_t rmt_head:36;
+#else
+               uint64_t rmt_head:36;
+               uint64_t rmt_one:1;
+               uint64_t rmt_val:1;
+               uint64_t rmt_is_head:1;
+               uint64_t reserved_39_63:25;
+#endif
        } sindexload2;
 
     /**
      * 1/get_des_get_tail == 1)
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t reserved_39_63:25;
                /*
                 * set when this DRAM list is the current head
                 * qosgrp.
                 */
                uint64_t rmt_tail:36;
+#else
+               uint64_t rmt_tail:36;
+               uint64_t rmt_one:1;
+               uint64_t rmt_val:1;
+               uint64_t rmt_is_head:1;
+               uint64_t reserved_39_63:25;
+#endif
        } sindexload3;
 
     /**
      * Response to NULL_RD request loads
      */
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                uint64_t unused:62;
                /* of type cvmx_pow_tag_type_t. state is one of the
                 * following:
                 * - CVMX_POW_TAG_TYPE_NULL_NULL
                 */
                uint64_t state:2;
+#else
+               uint64_t state:2;
+               uint64_t unused:62;
+#endif
        } s_null_rd;
 
 } cvmx_pow_tag_load_resp_t;
        uint64_t u64;
 
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                /* Memory region.  Should be CVMX_IO_SEG in most cases */
                uint64_t mem_reg:2;
                uint64_t reserved_49_61:13;     /* Must be zero */
                uint64_t reserved_36_39:4;      /* Must be zero */
                /* Address field. addr<2:0> must be zero */
                uint64_t addr:36;
+#else
+               uint64_t addr:36;
+               uint64_t reserved_36_39:4;
+               uint64_t did:8;
+               uint64_t is_io:1;
+               uint64_t reserved_49_61:13;
+               uint64_t mem_reg:2;
+#endif
        } stag;
 } cvmx_pow_tag_store_addr_t;
 
        uint64_t u64;
 
        struct {
+#ifdef __BIG_ENDIAN_BITFIELD
                /*
                 * the (64-bit word) location in scratchpad to write
                 * to (if len != 0)
                /* if set, don't return load response until work is available */
                uint64_t wait:1;
                uint64_t unused2:3;
+#else
+               uint64_t unused2:3;
+               uint64_t wait:1;
+               uint64_t unused:36;
+               uint64_t did:8;
+               uint64_t len:8;
+               uint64_t scraddr:8;
+#endif
        } s;
 
 } cvmx_pow_iobdma_store_t;