1*a26f067fSSarah Walker /* SPDX-License-Identifier: GPL-2.0-only OR MIT */ 2*a26f067fSSarah Walker /* Copyright (c) 2023 Imagination Technologies Ltd. */ 3*a26f067fSSarah Walker 4*a26f067fSSarah Walker #ifndef PVR_ROGUE_FWIF_SHARED_CHECK_H 5*a26f067fSSarah Walker #define PVR_ROGUE_FWIF_SHARED_CHECK_H 6*a26f067fSSarah Walker 7*a26f067fSSarah Walker #include <linux/build_bug.h> 8*a26f067fSSarah Walker 9*a26f067fSSarah Walker #define OFFSET_CHECK(type, member, offset) \ 10*a26f067fSSarah Walker static_assert(offsetof(type, member) == (offset), \ 11*a26f067fSSarah Walker "offsetof(" #type ", " #member ") incorrect") 12*a26f067fSSarah Walker 13*a26f067fSSarah Walker #define SIZE_CHECK(type, size) \ 14*a26f067fSSarah Walker static_assert(sizeof(type) == (size), #type " is incorrect size") 15*a26f067fSSarah Walker 16*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_dma_addr, dev_addr, 0); 17*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_dma_addr, fw_addr, 8); 18*a26f067fSSarah Walker SIZE_CHECK(struct rogue_fwif_dma_addr, 16); 19*a26f067fSSarah Walker 20*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_ufo, addr, 0); 21*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_ufo, value, 4); 22*a26f067fSSarah Walker SIZE_CHECK(struct rogue_fwif_ufo, 8); 23*a26f067fSSarah Walker 24*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cleanup_ctl, submitted_commands, 0); 25*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cleanup_ctl, executed_commands, 4); 26*a26f067fSSarah Walker SIZE_CHECK(struct rogue_fwif_cleanup_ctl, 8); 27*a26f067fSSarah Walker 28*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cccb_ctl, write_offset, 0); 29*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cccb_ctl, read_offset, 4); 30*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cccb_ctl, dep_offset, 8); 31*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cccb_ctl, wrap_mask, 12); 32*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cccb_ctl, read_offset2, 16); 33*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cccb_ctl, read_offset3, 20); 34*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cccb_ctl, read_offset4, 24); 35*a26f067fSSarah Walker SIZE_CHECK(struct rogue_fwif_cccb_ctl, 32); 36*a26f067fSSarah Walker 37*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 38*a26f067fSSarah Walker geom_reg_vdm_context_state_base_addr, 0); 39*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 40*a26f067fSSarah Walker geom_reg_vdm_context_state_resume_addr, 8); 41*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 42*a26f067fSSarah Walker geom_reg_ta_context_state_base_addr, 16); 43*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 44*a26f067fSSarah Walker geom_state[0].geom_reg_vdm_context_store_task0, 24); 45*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 46*a26f067fSSarah Walker geom_state[0].geom_reg_vdm_context_store_task1, 32); 47*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 48*a26f067fSSarah Walker geom_state[0].geom_reg_vdm_context_store_task2, 40); 49*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 50*a26f067fSSarah Walker geom_state[0].geom_reg_vdm_context_resume_task0, 48); 51*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 52*a26f067fSSarah Walker geom_state[0].geom_reg_vdm_context_resume_task1, 56); 53*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 54*a26f067fSSarah Walker geom_state[0].geom_reg_vdm_context_resume_task2, 64); 55*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 56*a26f067fSSarah Walker geom_state[0].geom_reg_vdm_context_store_task3, 72); 57*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 58*a26f067fSSarah Walker geom_state[0].geom_reg_vdm_context_store_task4, 80); 59*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 60*a26f067fSSarah Walker geom_state[0].geom_reg_vdm_context_resume_task3, 88); 61*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 62*a26f067fSSarah Walker geom_state[0].geom_reg_vdm_context_resume_task4, 96); 63*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 64*a26f067fSSarah Walker geom_state[1].geom_reg_vdm_context_store_task0, 104); 65*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 66*a26f067fSSarah Walker geom_state[1].geom_reg_vdm_context_store_task1, 112); 67*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 68*a26f067fSSarah Walker geom_state[1].geom_reg_vdm_context_store_task2, 120); 69*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 70*a26f067fSSarah Walker geom_state[1].geom_reg_vdm_context_resume_task0, 128); 71*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 72*a26f067fSSarah Walker geom_state[1].geom_reg_vdm_context_resume_task1, 136); 73*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 74*a26f067fSSarah Walker geom_state[1].geom_reg_vdm_context_resume_task2, 144); 75*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 76*a26f067fSSarah Walker geom_state[1].geom_reg_vdm_context_store_task3, 152); 77*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 78*a26f067fSSarah Walker geom_state[1].geom_reg_vdm_context_store_task4, 160); 79*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 80*a26f067fSSarah Walker geom_state[1].geom_reg_vdm_context_resume_task3, 168); 81*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_geom_registers_caswitch, 82*a26f067fSSarah Walker geom_state[1].geom_reg_vdm_context_resume_task4, 176); 83*a26f067fSSarah Walker SIZE_CHECK(struct rogue_fwif_geom_registers_caswitch, 184); 84*a26f067fSSarah Walker 85*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_context_pds0, 0); 86*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_context_pds1, 8); 87*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_terminate_pds, 16); 88*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_terminate_pds1, 24); 89*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_resume_pds0, 32); 90*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_context_pds0_b, 40); 91*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_resume_pds0_b, 48); 92*a26f067fSSarah Walker SIZE_CHECK(struct rogue_fwif_cdm_registers_cswitch, 56); 93*a26f067fSSarah Walker 94*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_static_rendercontext_state, ctxswitch_regs, 0); 95*a26f067fSSarah Walker SIZE_CHECK(struct rogue_fwif_static_rendercontext_state, 368); 96*a26f067fSSarah Walker 97*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_static_computecontext_state, ctxswitch_regs, 0); 98*a26f067fSSarah Walker SIZE_CHECK(struct rogue_fwif_static_computecontext_state, 56); 99*a26f067fSSarah Walker 100*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cmd_common, frame_num, 0); 101*a26f067fSSarah Walker SIZE_CHECK(struct rogue_fwif_cmd_common, 4); 102*a26f067fSSarah Walker 103*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cmd_geom_frag_shared, cmn, 0); 104*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cmd_geom_frag_shared, hwrt_data_fw_addr, 4); 105*a26f067fSSarah Walker OFFSET_CHECK(struct rogue_fwif_cmd_geom_frag_shared, pr_buffer_fw_addr, 8); 106*a26f067fSSarah Walker SIZE_CHECK(struct rogue_fwif_cmd_geom_frag_shared, 16); 107*a26f067fSSarah Walker 108*a26f067fSSarah Walker #endif /* PVR_ROGUE_FWIF_SHARED_CHECK_H */ 109