tree:
https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux.git habanalabs-next
head: f3fad4c1da9034b716430407921cbd316d8c76dd
commit: 0724eea689c60f1f277a5e3273eed48339dfc196 [52/62] habanalabs/gaudi: fetch HBM ecc
info from FW
config: i386-randconfig-s001-20201118 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-123-g626c4742-dirty
#
https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux.git/commit/...
git remote add ogabbay
https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux.git
git fetch --no-tags ogabbay habanalabs-next
git checkout 0724eea689c60f1f277a5e3273eed48339dfc196
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
"sparse warnings: (new ones prefixed by >>)"
drivers/misc/habanalabs/gaudi/gaudi.c:3094:6: sparse: sparse: symbol
'gaudi_init_nic_qmans' was not declared. Should it be static?
> drivers/misc/habanalabs/gaudi/gaudi.c:6865:26: sparse: sparse:
cast to restricted __le32
> drivers/misc/habanalabs/gaudi/gaudi.c:6865:26: sparse: sparse: restricted __le32
degrades to integer
> drivers/misc/habanalabs/gaudi/gaudi.c:6865:26: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6867:26: sparse:
sparse: cast to restricted __le32
drivers/misc/habanalabs/gaudi/gaudi.c:6867:26: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6867:26: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6869:26: sparse: sparse: cast to restricted
__le32
drivers/misc/habanalabs/gaudi/gaudi.c:6869:26: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6869:26: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6871:24: sparse: sparse: cast to restricted
__le32
drivers/misc/habanalabs/gaudi/gaudi.c:6871:24: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6871:24: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6873:24: sparse: sparse: cast to restricted
__le32
drivers/misc/habanalabs/gaudi/gaudi.c:6873:24: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6873:24: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6875:24: sparse: sparse: cast to restricted
__le32
drivers/misc/habanalabs/gaudi/gaudi.c:6875:24: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6875:24: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6877:22: sparse: sparse: cast to restricted
__le32
drivers/misc/habanalabs/gaudi/gaudi.c:6877:22: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:6877:22: sparse: sparse: restricted __le32
degrades to integer
drivers/misc/habanalabs/gaudi/gaudi.c:7906:6: sparse: sparse: symbol
'gaudi_ctx_fini' was not declared. Should it be static?
drivers/misc/habanalabs/gaudi/gaudi.c:3660:27: sparse: sparse: cast truncates bits from
constant value (7ff0000000 becomes f0000000)
vim +6865 drivers/misc/habanalabs/gaudi/gaudi.c
6852
6853 static int gaudi_hbm_read_interrupts(struct hl_device *hdev, int device,
6854 struct hl_eq_hbm_ecc_data *hbm_ecc_data)
6855 {
6856 u32 base, val, val2, wr_par, rd_par, ca_par, derr, serr, type, ch;
6857 int err = 0;
6858
6859 if (!hdev->asic_prop.fw_security_disabled) {
6860 if (!hbm_ecc_data) {
6861 dev_err(hdev->dev, "No FW ECC data");
6862 return 0;
6863 }
6864
6865 wr_par = FIELD_GET(CPUCP_PKT_HBM_ECC_INFO_WR_PAR_MASK,
6866 hbm_ecc_data->hbm_ecc_info);
6867 rd_par = FIELD_GET(CPUCP_PKT_HBM_ECC_INFO_RD_PAR_MASK,
6868 hbm_ecc_data->hbm_ecc_info);
6869 ca_par = FIELD_GET(CPUCP_PKT_HBM_ECC_INFO_CA_PAR_MASK,
6870 hbm_ecc_data->hbm_ecc_info);
6871 derr = FIELD_GET(CPUCP_PKT_HBM_ECC_INFO_DERR_MASK,
6872 hbm_ecc_data->hbm_ecc_info);
6873 serr = FIELD_GET(CPUCP_PKT_HBM_ECC_INFO_SERR_MASK,
6874 hbm_ecc_data->hbm_ecc_info);
6875 type = FIELD_GET(CPUCP_PKT_HBM_ECC_INFO_TYPE_MASK,
6876 hbm_ecc_data->hbm_ecc_info);
6877 ch = FIELD_GET(CPUCP_PKT_HBM_ECC_INFO_HBM_CH_MASK,
6878 hbm_ecc_data->hbm_ecc_info);
6879
6880 dev_err(hdev->dev,
6881 "HBM%d pc%d interrupts info: WR_PAR=%d, RD_PAR=%d, CA_PAR=%d, SERR=%d,
DERR=%d\n",
6882 device, ch, wr_par, rd_par, ca_par, serr, derr);
6883
6884 err = 1;
6885
6886 return 0;
6887 }
6888
6889 base = GAUDI_HBM_CFG_BASE + device * GAUDI_HBM_CFG_OFFSET;
6890 for (ch = 0 ; ch < GAUDI_HBM_CHANNELS ; ch++) {
6891 val = RREG32_MASK(base + ch * 0x1000 + 0x06C, 0x0000FFFF);
6892 val = (val & 0xFF) | ((val >> 8) & 0xFF);
6893 if (val) {
6894 err = 1;
6895 dev_err(hdev->dev,
6896 "HBM%d pc%d interrupts info: WR_PAR=%d, RD_PAR=%d, CA_PAR=%d, SERR=%d,
DERR=%d\n",
6897 device, ch * 2, val & 0x1, (val >> 1) & 0x1,
6898 (val >> 2) & 0x1, (val >> 3) & 0x1,
6899 (val >> 4) & 0x1);
6900
6901 val2 = RREG32(base + ch * 0x1000 + 0x060);
6902 dev_err(hdev->dev,
6903 "HBM%d pc%d ECC info: 1ST_ERR_ADDR=0x%x, 1ST_ERR_TYPE=%d, SEC_CONT_CNT=%d,
SEC_CNT=%d, DEC_CNT=%d\n",
6904 device, ch * 2,
6905 RREG32(base + ch * 0x1000 + 0x064),
6906 (val2 & 0x200) >> 9, (val2 & 0xFC00) >> 10,
6907 (val2 & 0xFF0000) >> 16,
6908 (val2 & 0xFF000000) >> 24);
6909 }
6910
6911 val = RREG32_MASK(base + ch * 0x1000 + 0x07C, 0x0000FFFF);
6912 val = (val & 0xFF) | ((val >> 8) & 0xFF);
6913 if (val) {
6914 err = 1;
6915 dev_err(hdev->dev,
6916 "HBM%d pc%d interrupts info: WR_PAR=%d, RD_PAR=%d, CA_PAR=%d, SERR=%d,
DERR=%d\n",
6917 device, ch * 2 + 1, val & 0x1, (val >> 1) & 0x1,
6918 (val >> 2) & 0x1, (val >> 3) & 0x1,
6919 (val >> 4) & 0x1);
6920
6921 val2 = RREG32(base + ch * 0x1000 + 0x070);
6922 dev_err(hdev->dev,
6923 "HBM%d pc%d ECC info: 1ST_ERR_ADDR=0x%x, 1ST_ERR_TYPE=%d, SEC_CONT_CNT=%d,
SEC_CNT=%d, DEC_CNT=%d\n",
6924 device, ch * 2 + 1,
6925 RREG32(base + ch * 0x1000 + 0x074),
6926 (val2 & 0x200) >> 9, (val2 & 0xFC00) >> 10,
6927 (val2 & 0xFF0000) >> 16,
6928 (val2 & 0xFF000000) >> 24);
6929 }
6930
6931 /* Clear interrupts */
6932 RMWREG32(base + (ch * 0x1000) + 0x060, 0x1C8, 0x1FF);
6933 RMWREG32(base + (ch * 0x1000) + 0x070, 0x1C8, 0x1FF);
6934 WREG32(base + (ch * 0x1000) + 0x06C, 0x1F1F);
6935 WREG32(base + (ch * 0x1000) + 0x07C, 0x1F1F);
6936 RMWREG32(base + (ch * 0x1000) + 0x060, 0x0, 0xF);
6937 RMWREG32(base + (ch * 0x1000) + 0x070, 0x0, 0xF);
6938 }
6939
6940 val = RREG32(base + 0x8F30);
6941 val2 = RREG32(base + 0x8F34);
6942 if (val | val2) {
6943 err = 1;
6944 dev_err(hdev->dev,
6945 "HBM %d MC SRAM SERR info: Reg 0x8F30=0x%x, Reg 0x8F34=0x%x\n",
6946 device, val, val2);
6947 }
6948 val = RREG32(base + 0x8F40);
6949 val2 = RREG32(base + 0x8F44);
6950 if (val | val2) {
6951 err = 1;
6952 dev_err(hdev->dev,
6953 "HBM %d MC SRAM DERR info: Reg 0x8F40=0x%x, Reg 0x8F44=0x%x\n",
6954 device, val, val2);
6955 }
6956
6957 return err;
6958 }
6959
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org