@samitouri / QOSamiQemu / commits / ae1a6a69c0

hw/arm/tegra241-cmdqv: Initialize register state on reset

Initialize the Tegra241 CMDQV register state in the reset handler. Signed-off-by: Nicolin Chen <nicolinc@nvidia.com> Reviewed-by: Eric Auger <eric.auger@redhat.com> Tested-by: Nicolin Chen <nicolinc@nvidia.com> Signed-off-by: Shameer Kolothum <skolothumtho@nvidia.com> Tested-by: Eric Auger <eric.auger@redhat.com> Message-id: 20260609112552.378999-25-skolothumtho@nvidia.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Nicolin Chen committed Jun 9, 2026 at 12:25 UTC ae1a6a69c002fc331861be505d641014198bc33e
3 files changed +42
hw/arm/tegra241-cmdqv.c
+38
@@ -863,6 +863,42 @@ free_viommu:
863 return false;
864 }
865
866 +static void tegra241_cmdqv_init_regs(SMMUv3State *s, Tegra241CMDQV *cmdqv)
867 +{
868 + int i;
869 +
870 + cmdqv->config = V_CONFIG_RESET;
871 + cmdqv->param = FIELD_DP32(0, PARAM, CMDQV_VER, CMDQV_VER);
872 + cmdqv->param = FIELD_DP32(cmdqv->param, PARAM, CMDQV_NUM_CMDQ_LOG2,
873 + CMDQV_NUM_CMDQ_LOG2);
874 + cmdqv->param = FIELD_DP32(cmdqv->param, PARAM, CMDQV_NUM_SID_PER_VI_LOG2,
875 + CMDQV_NUM_SID_PER_VI_LOG2);
876 + trace_tegra241_cmdqv_init_regs(cmdqv->param);
877 + cmdqv->status = R_STATUS_CMDQV_ENABLED_MASK;
878 +
879 + for (i = 0; i < 2; i++) {
880 + cmdqv->vi_err_map[i] = 0;
881 + cmdqv->vi_int_mask[i] = 0;
882 + }
883 + for (i = 0; i < 4; i++) {
884 + cmdqv->cmdq_err_map[i] = 0;
885 + cmdqv->vintf_cmdq_err_map[i] = 0;
886 + }
887 + cmdqv->vintf_config = 0;
888 + cmdqv->vintf_status = 0;
889 + for (i = 0; i < TEGRA241_CMDQV_MAX_CMDQ; i++) {
890 + cmdqv->cmdq_alloc_map[i] = 0;
891 + cmdqv->vcmdq_cons_indx[i] = 0;
892 + cmdqv->vcmdq_prod_indx[i] = 0;
893 + cmdqv->vcmdq_config[i] = 0;
894 + cmdqv->vcmdq_status[i] = 0;
895 + cmdqv->vcmdq_gerror[i] = 0;
896 + cmdqv->vcmdq_gerrorn[i] = 0;
897 + cmdqv->vcmdq_base[i] = 0;
898 + cmdqv->vcmdq_cons_indx_base[i] = 0;
899 + }
900 +}
901 +
902 static void tegra241_cmdqv_reset(SMMUv3State *s)
903 {
904 Tegra241CMDQV *cmdqv = s->s_accel->cmdqv;
@@ -873,6 +909,8 @@ static void tegra241_cmdqv_reset(SMMUv3State *s)
909
910 tegra241_cmdqv_guest_unmap_vintf_page0(cmdqv);
911 tegra241_cmdqv_free_all_vcmdq(cmdqv);
912 +
913 + tegra241_cmdqv_init_regs(s, cmdqv);
914 }
915
916 static const MemoryRegionOps mmio_cmdqv_ops = {
hw/arm/tegra241-cmdqv.h
+3
@@ -89,6 +89,9 @@ FIELD(CONFIG, CMDQ_MAX_CLK_BATCH, 4, 8)
89 FIELD(CONFIG, CMDQ_MAX_CMD_BATCH, 12, 8)
90 FIELD(CONFIG, CONS_DRAM_EN, 20, 1)
91
92 +/* CMDQV_EN=1, PER_CMD_OFFSET=16B, CLK_BATCH=256, CMD_BATCH=32. */
93 +#define V_CONFIG_RESET 0x00020083
94 +
95 REG32(PARAM, 0x4)
96 FIELD(PARAM, CMDQV_VER, 0, 4)
97 FIELD(PARAM, CMDQV_NUM_CMDQ_LOG2, 4, 4)
hw/arm/trace-events
+1
@@ -76,6 +76,7 @@ smmuv3_accel_install_ste(uint32_t vsid, const char * type, uint32_t hwpt_id) "vS
76 tegra241_cmdqv_read_mmio(uint64_t offset, uint64_t val, unsigned size) "offset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x"
77 tegra241_cmdqv_write_mmio(uint64_t offset, uint64_t val, unsigned size) "offset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x"
78 tegra241_cmdqv_err_map(uint32_t map3, uint32_t map2, uint32_t map1, uint32_t map0) "hw irq received. error (hex) maps: %04X:%04X:%04X:%04X"
79 +tegra241_cmdqv_init_regs(uint32_t param) "register init, param=0x%08X"
80 tegra241_cmdqv_read_vcmdq_page0(int index, const char *aperture, const char *backing, uint64_t offset0, uint64_t val) "vcmdq[%d] %s (%s) offset0: 0x%"PRIx64" val: 0x%"PRIx64
81 tegra241_cmdqv_read_vcmdq_page1(int index, const char *aperture, uint64_t offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64
82 tegra241_cmdqv_write_vcmdq_page0(int index, const char *aperture, const char *backing, uint64_t offset0, uint64_t val) "vcmdq[%d] %s (%s) offset0: 0x%"PRIx64" val: 0x%"PRIx64