tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 6b5f04b6cf8ebab9a65d9c0026c650bb2538fd0f commit: cc78eb22885bba64445cde438ba098de0104920f drm/radeon: properly byte swap vce firmware setup date: 8 weeks ago reproduce: # apt-get install sparse git checkout cc78eb22885bba64445cde438ba098de0104920f make ARCH=x86_64 allmodconfig make C=1 CF=-D__CHECK_ENDIAN__
sparse warnings: (new ones prefixed by >>) >> drivers/gpu/drm/radeon/vce_v1_0.c:181:25: sparse: cast to restricted __le32 drivers/gpu/drm/radeon/vce_v1_0.c:182:21: sparse: cast to restricted __le32 drivers/gpu/drm/radeon/vce_v1_0.c:186:18: sparse: cast to restricted __le32 drivers/gpu/drm/radeon/vce_v1_0.c:194:19: sparse: cast to restricted __le32 >> drivers/gpu/drm/radeon/vce_v1_0.c:194:17: sparse: incorrect type in >> assignment (different base types) drivers/gpu/drm/radeon/vce_v1_0.c:194:17: expected unsigned int [unsigned] [usertype] <noident> drivers/gpu/drm/radeon/vce_v1_0.c:194:17: got restricted __le32 [usertype] <noident> drivers/gpu/drm/radeon/vce_v1_0.c:199:17: sparse: cast to restricted __le32 drivers/gpu/drm/radeon/vce_v1_0.c:205:31: sparse: cast to restricted __le32 vim +181 drivers/gpu/drm/radeon/vce_v1_0.c 96 if (ring->idx == TN_RING_TYPE_VCE1_INDEX) 97 WREG32(VCE_RB_WPTR, ring->wptr); 98 else 99 WREG32(VCE_RB_WPTR2, ring->wptr); 100 } 101 > 102 void vce_v1_0_enable_mgcg(struct radeon_device *rdev, bool enable) 103 { 104 u32 tmp; 105 106 if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_VCE_MGCG)) { 107 tmp = RREG32(VCE_CLOCK_GATING_A); 108 tmp |= CGC_DYN_CLOCK_MODE; 109 WREG32(VCE_CLOCK_GATING_A, tmp); 110 111 tmp = RREG32(VCE_UENC_CLOCK_GATING); 112 tmp &= ~0x1ff000; 113 tmp |= 0xff800000; 114 WREG32(VCE_UENC_CLOCK_GATING, tmp); 115 116 tmp = RREG32(VCE_UENC_REG_CLOCK_GATING); 117 tmp &= ~0x3ff; 118 WREG32(VCE_UENC_REG_CLOCK_GATING, tmp); 119 } else { 120 tmp = RREG32(VCE_CLOCK_GATING_A); 121 tmp &= ~CGC_DYN_CLOCK_MODE; 122 WREG32(VCE_CLOCK_GATING_A, tmp); 123 124 tmp = RREG32(VCE_UENC_CLOCK_GATING); 125 tmp |= 0x1ff000; 126 tmp &= ~0xff800000; 127 WREG32(VCE_UENC_CLOCK_GATING, tmp); 128 129 tmp = RREG32(VCE_UENC_REG_CLOCK_GATING); 130 tmp |= 0x3ff; 131 WREG32(VCE_UENC_REG_CLOCK_GATING, tmp); 132 } 133 } 134 135 static void vce_v1_0_init_cg(struct radeon_device *rdev) 136 { 137 u32 tmp; 138 139 tmp = RREG32(VCE_CLOCK_GATING_A); 140 tmp |= CGC_DYN_CLOCK_MODE; 141 WREG32(VCE_CLOCK_GATING_A, tmp); 142 143 tmp = RREG32(VCE_CLOCK_GATING_B); 144 tmp |= 0x1e; 145 tmp &= ~0xe100e1; 146 WREG32(VCE_CLOCK_GATING_B, tmp); 147 148 tmp = RREG32(VCE_UENC_CLOCK_GATING); 149 tmp &= ~0xff9ff000; 150 WREG32(VCE_UENC_CLOCK_GATING, tmp); 151 152 tmp = RREG32(VCE_UENC_REG_CLOCK_GATING); 153 tmp &= ~0x3ff; 154 WREG32(VCE_UENC_REG_CLOCK_GATING, tmp); 155 } 156 157 int vce_v1_0_load_fw(struct radeon_device *rdev, uint32_t *data) 158 { 159 struct vce_v1_0_fw_signature *sign = (void*)rdev->vce_fw->data; 160 uint32_t chip_id; 161 int i; 162 163 switch (rdev->family) { 164 case CHIP_TAHITI: 165 chip_id = 0x01000014; 166 break; 167 case CHIP_VERDE: 168 chip_id = 0x01000015; 169 break; 170 case CHIP_PITCAIRN: 171 case CHIP_OLAND: 172 chip_id = 0x01000016; 173 break; 174 case CHIP_ARUBA: 175 chip_id = 0x01000017; 176 break; 177 default: 178 return -EINVAL; 179 } 180 > 181 for (i = 0; i < le32_to_cpu(sign->num); ++i) { 182 if (le32_to_cpu(sign->val[i].chip_id) == chip_id) 183 break; 184 } 185 186 if (i == le32_to_cpu(sign->num)) 187 return -EINVAL; 188 189 data += (256 - 64) / 4; 190 data[0] = sign->val[i].nonce[0]; 191 data[1] = sign->val[i].nonce[1]; 192 data[2] = sign->val[i].nonce[2]; 193 data[3] = sign->val[i].nonce[3]; > 194 data[4] = cpu_to_le32(le32_to_cpu(sign->len) + 64); 195 196 memset(&data[5], 0, 44); 197 memcpy(&data[16], &sign[1], rdev->vce_fw->size - sizeof(*sign)); --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation