tree:   git://linuxtv.org/media_tree.git master
head:   59432be1c7fbf2a4f608850855ff649bee0f7b3b
commit: b240eacdd536bac23c9d48dfc3d527ed6870ddad [463/499] [media] drx-j: get 
rid of drx_driver.c
reproduce: make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

   drivers/media/dvb-frontends/drx39xyj/drxj.c:21196:1: sparse: no newline at 
end of file
   drivers/media/dvb-frontends/drx39xyj/drxj.c:611:6: sparse: symbol 
'drx_dap_drxj_module_name' was not declared. Should it be static?
   drivers/media/dvb-frontends/drx39xyj/drxj.c:612:6: sparse: symbol 
'drx_dap_drxj_version_text' was not declared. Should it be static?
   drivers/media/dvb-frontends/drx39xyj/drxj.c:614:20: sparse: symbol 
'drx_dap_drxj_version' was not declared. Should it be static?
   drivers/media/dvb-frontends/drx39xyj/drxj.c:998:21: sparse: symbol 
'drxj_default_aud_data_g' was not declared. Should it be static?
   drivers/media/dvb-frontends/drx39xyj/drxj.c:16591:68: sparse: dubious: x & !y
   drivers/media/dvb-frontends/drx39xyj/drxj.c:16609:68: sparse: dubious: x & !y
   drivers/media/dvb-frontends/drx39xyj/drxj.c:16628:68: sparse: dubious: x & !y
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20670:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20670:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20670:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20670:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20697:29: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20697:29: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20697:29: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20697:29: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20715:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20715:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20715:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20715:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20715:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20715:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20717:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20717:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20717:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20717:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20719:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20719:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20719:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20719:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20721:33: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20721:33: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20721:33: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20721:33: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20735:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20735:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20735:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20735:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20743:47: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20743:47: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20743:47: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20743:47: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20743:47: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20743:47: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20745:46: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20745:46: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20745:46: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20745:46: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20745:46: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20745:46: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20747:51: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20747:51: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20747:51: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20747:51: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20747:51: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20747:51: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20831:25: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20831:25: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20831:25: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20831:25: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20833:25: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20833:25: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20833:25: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20833:25: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20866:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20866:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20866:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20866:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20866:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20866:34: sparse: cast to 
>> restricted __be32
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20868:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20868:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20868:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20868:34: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20870:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20870:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20870:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20870:35: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20872:33: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20872:33: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20872:33: sparse: cast to 
>> restricted __be16
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:20872:33: sparse: cast to 
>> restricted __be16
   drivers/media/dvb-frontends/drx39xyj/drxj.c:13921:27: sparse: cast truncates 
bits from constant value (ffff00ff becomes ff)
   drivers/media/dvb-frontends/drx39xyj/drxj.c:13941:24: sparse: cast truncates 
bits from constant value (ffff3fff becomes 3fff)
   drivers/media/dvb-frontends/drx39xyj/drxj.c:14991:31: sparse: cast truncates 
bits from constant value (ffff00ff becomes ff)
   drivers/media/dvb-frontends/drx39xyj/drxj.c:15041:26: sparse: cast truncates 
bits from constant value (ffff0000 becomes 0)
   drivers/media/dvb-frontends/drx39xyj/drxj.c:15118:33: sparse: cast truncates 
bits from constant value (ffff7fff becomes 7fff)
   drivers/media/dvb-frontends/drx39xyj/drxj.c:15717:26: sparse: cast truncates 
bits from constant value (ffff7fff becomes 7fff)

vim +20670 drivers/media/dvb-frontends/drx39xyj/drxj.c

 20664          u16 i = 0;
 20665          u16 j = 0;
 20666          u32 crc_word = 0;
 20667          u32 carry = 0;
 20668  
 20669          while (i < nr_words) {
 20670                  crc_word |= (u32)be16_to_cpu(*(u32 *)(block_data));
 20671                  for (j = 0; j < 16; j++) {
 20672                          crc_word <<= 1;
 20673                          if (carry != 0)
 20674                                  crc_word ^= 0x80050000UL;
 20675                          carry = crc_word & 0x80000000UL;
 20676                  }
 20677                  i++;
 20678                  block_data += (sizeof(u16));
 20679          }
 20680          return (u16)(crc_word >> 16);
 20681  }
 20682  
 20683  /**
 20684   * drx_check_firmware - checks if the loaded firmware is valid
 20685   *
 20686   * @demod:      demod structure
 20687   * @mc_data:    pointer to the start of the firmware
 20688   * @size:       firmware size
 20689   */
 20690  static int drx_check_firmware(struct drx_demod_instance *demod, u8 
*mc_data,
 20691                            unsigned size)
 20692  {
 20693          struct drxu_code_block_hdr block_hdr;
 20694          int i;
 20695          unsigned count = 2 * sizeof(u16);
 20696          u32 mc_dev_type, mc_version, mc_base_version;
 20697          u16 mc_nr_of_blks = be16_to_cpu(*(u32 *)(mc_data + 
sizeof(u16)));
 20698  
 20699          /*
 20700           * Scan microcode blocks first for version info
 20701           * and firmware check
 20702           */
 20703  
 20704          /* Clear version block */
 20705          DRX_ATTR_MCRECORD(demod).aux_type = 0;
 20706          DRX_ATTR_MCRECORD(demod).mc_dev_type = 0;
 20707          DRX_ATTR_MCRECORD(demod).mc_version = 0;
 20708          DRX_ATTR_MCRECORD(demod).mc_base_version = 0;
 20709  
 20710          for (i = 0; i < mc_nr_of_blks; i++) {
 20711                  if (count + 3 * sizeof(u16) + sizeof(u32) > size)
 20712                          goto eof;
 20713  
 20714                  /* Process block header */
 20715                  block_hdr.addr = be32_to_cpu(*(u32 *)(mc_data + count));
 20716                  count += sizeof(u32);
 20717                  block_hdr.size = be16_to_cpu(*(u32 *)(mc_data + count));
 20718                  count += sizeof(u16);
 20719                  block_hdr.flags = be16_to_cpu(*(u32 *)(mc_data + 
count));
 20720                  count += sizeof(u16);
 20721                  block_hdr.CRC = be16_to_cpu(*(u32 *)(mc_data + count));
 20722                  count += sizeof(u16);
 20723  
 20724                  pr_debug("%u: addr %u, size %u, flags 0x%04x, CRC 
0x%04x\n",
 20725                          count, block_hdr.addr, block_hdr.size, 
block_hdr.flags,
 20726                          block_hdr.CRC);
 20727  
 20728                  if (block_hdr.flags & 0x8) {
 20729                          u8 *auxblk = ((void *)mc_data) + block_hdr.addr;
 20730                          u16 auxtype;
 20731  
 20732                          if (block_hdr.addr + sizeof(u16) > size)
 20733                                  goto eof;
 20734  
 20735                          auxtype = be16_to_cpu(*(u32 *)(auxblk));
 20736  
 20737                          /* Aux block. Check type */
 20738                          if (DRX_ISMCVERTYPE(auxtype)) {
 20739                                  if (block_hdr.addr + 2 * sizeof(u16) + 
2 * sizeof (u32) > size)
 20740                                          goto eof;
 20741  
 20742                                  auxblk += sizeof(u16);
 20743                                  mc_dev_type = be32_to_cpu(*(u32 
*)(auxblk));
 20744                                  auxblk += sizeof(u32);
 20745                                  mc_version = be32_to_cpu(*(u32 
*)(auxblk));
 20746                                  auxblk += sizeof(u32);
 20747                                  mc_base_version = be32_to_cpu(*(u32 
*)(auxblk));
 20748  
 20749                                  DRX_ATTR_MCRECORD(demod).aux_type = 
auxtype;
 20750                                  DRX_ATTR_MCRECORD(demod).mc_dev_type = 
mc_dev_type;
 20751                                  DRX_ATTR_MCRECORD(demod).mc_version = 
mc_version;
 20752                                  
DRX_ATTR_MCRECORD(demod).mc_base_version = mc_base_version;
 20753  
 20754                                  pr_info("Firmware dev %x, ver %x, base 
ver %x\n",
 20755                                          mc_dev_type, mc_version, 
mc_base_version);
 20756  
 20757                          }
 20758                  } else if (count + block_hdr.size * sizeof(u16) > size)
 20759                          goto eof;
 20760  
 20761                  count += block_hdr.size * sizeof(u16);
 20762          }
 20763          return 0;
 20764  eof:
 20765          pr_err("Firmware is truncated at pos %u/%u\n", count, size);
 20766          return -EINVAL;
 20767  }
 20768  
 20769  /**
 20770   * drx_ctrl_u_code - Handle microcode upload or verify.
 20771   * @dev_addr: Address of device.
 20772   * @mc_info:  Pointer to information about microcode data.
 20773   * @action:  Either UCODE_UPLOAD or UCODE_VERIFY
 20774   *
 20775   * This function returns:
 20776   *      0:
 20777   *              - In case of UCODE_UPLOAD: code is successfully 
uploaded.
 20778   *               - In case of UCODE_VERIFY: image on device is equal to
 20779   *                image provided to this control function.
 20780   *      -EIO:
 20781   *              - In case of UCODE_UPLOAD: I2C error.
 20782   *              - In case of UCODE_VERIFY: I2C error or image on device
 20783   *                is not equal to image provided to this control 
function.
 20784   *      -EINVAL:
 20785   *              - Invalid arguments.
 20786   *              - Provided image is corrupt
 20787   */
 20788  static int drx_ctrl_u_code(struct drx_demod_instance *demod,
 20789                         struct drxu_code_info *mc_info,
 20790                         enum drxu_code_action action)
 20791  {
 20792          struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr;
 20793          int rc;
 20794          u16 i = 0;
 20795          u16 mc_nr_of_blks = 0;
 20796          u16 mc_magic_word = 0;
 20797          const u8 *mc_data_init = NULL;
 20798          u8 *mc_data = NULL;
 20799          unsigned size;
 20800          char *mc_file = mc_info->mc_file;
 20801  
 20802          /* Check arguments */
 20803          if (!mc_info || !mc_file)
 20804                  return -EINVAL;
 20805  
 20806          if (!demod->firmware) {
 20807                  const struct firmware *fw = NULL;
 20808  
 20809                  rc = request_firmware(&fw, mc_file, 
demod->i2c->dev.parent);
 20810                  if (rc < 0) {
 20811                          pr_err("Couldn't read firmware %s\n", mc_file);
 20812                          return -ENOENT;
 20813                  }
 20814                  demod->firmware = fw;
 20815  
 20816                  if (demod->firmware->size < 2 * sizeof(u16)) {
 20817                          rc = -EINVAL;
 20818                          pr_err("Firmware is too short!\n");
 20819                          goto release;
 20820                  }
 20821  
 20822                  pr_info("Firmware %s, size %zu\n",
 20823                          mc_file, demod->firmware->size);
 20824          }
 20825  
 20826          mc_data_init = demod->firmware->data;
 20827          size = demod->firmware->size;
 20828  
 20829          mc_data = (void *)mc_data_init;
 20830          /* Check data */
 20831          mc_magic_word = be16_to_cpu(*(u32 *)(mc_data));
 20832          mc_data += sizeof(u16);
 20833          mc_nr_of_blks = be16_to_cpu(*(u32 *)(mc_data));
 20834          mc_data += sizeof(u16);
 20835  
 20836          if ((mc_magic_word != DRX_UCODE_MAGIC_WORD) || (mc_nr_of_blks 
== 0)) {
 20837                  rc = -EINVAL;
 20838                  pr_err("Firmware magic word doesn't match\n");
 20839                  goto release;
 20840          }
 20841  
 20842          if (action == UCODE_UPLOAD) {
 20843                  rc = drx_check_firmware(demod, (u8 *)mc_data_init, 
size);
 20844                  if (rc)
 20845                          goto release;
 20846  
 20847                  /* After scanning, validate the microcode.
 20848                     It is also valid if no validation control exists.
 20849                   */
 20850                  rc = drx_ctrl(demod, DRX_CTRL_VALIDATE_UCODE, NULL);
 20851                  if (rc != 0 && rc != -ENOTSUPP) {
 20852                          pr_err("Validate ucode not supported\n");
 20853                          return rc;
 20854                  }
 20855                  pr_info("Uploading firmware %s\n", mc_file);
 20856          } else if (action == UCODE_VERIFY) {
 20857                  pr_info("Verifying if firmware upload was ok.\n");
 20858          }
 20859  
 20860          /* Process microcode blocks */
 20861          for (i = 0; i < mc_nr_of_blks; i++) {
 20862                  struct drxu_code_block_hdr block_hdr;
 20863                  u16 mc_block_nr_bytes = 0;
 20864  
 20865                  /* Process block header */
 20866                  block_hdr.addr = be32_to_cpu(*(u32 *)(mc_data));
 20867                  mc_data += sizeof(u32);
 20868                  block_hdr.size = be16_to_cpu(*(u32 *)(mc_data));
 20869                  mc_data += sizeof(u16);
 20870                  block_hdr.flags = be16_to_cpu(*(u32 *)(mc_data));
 20871                  mc_data += sizeof(u16);

---
0-DAY kernel build testing backend              Open Source Technology Center
http://lists.01.org/mailman/listinfo/kbuild                 Intel Corporation
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to