CC: [email protected]
BCC: [email protected]
CC: [email protected]
TO: David Rhodes <[email protected]>
CC: Mark Brown <[email protected]>
CC: Charles Keepax <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   b2d229d4ddb17db541098b83524d901257e93845
commit: bae9e13fc55cbc5ae25409385b2f1ba9187082d0 ASoC: cs35l41: DSP Support
date:   5 months ago
:::::: branch date: 13 hours ago
:::::: commit date: 5 months ago
config: i386-randconfig-m021-20220418 
(https://download.01.org/0day-ci/archive/20220418/[email protected]/config)
compiler: gcc-11 (Debian 11.2.0-19) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

New smatch warnings:
drivers/firmware/cirrus/cs_dsp.c:1636 cs_dsp_create_regions() warn: passing a 
valid pointer to 'PTR_ERR'
drivers/firmware/cirrus/cs_dsp.c:1671 cs_dsp_adsp1_setup_algs() warn: passing a 
valid pointer to 'PTR_ERR'
drivers/firmware/cirrus/cs_dsp.c:1772 cs_dsp_adsp2_setup_algs() warn: passing a 
valid pointer to 'PTR_ERR'

Old smatch warnings:
drivers/firmware/cirrus/cs_dsp.c:1676 cs_dsp_adsp1_setup_algs() warn: passing a 
valid pointer to 'PTR_ERR'
drivers/firmware/cirrus/cs_dsp.c:1699 cs_dsp_adsp1_setup_algs() warn: passing a 
valid pointer to 'PTR_ERR'
drivers/firmware/cirrus/cs_dsp.c:1720 cs_dsp_adsp1_setup_algs() warn: passing a 
valid pointer to 'PTR_ERR'
drivers/firmware/cirrus/cs_dsp.c:1777 cs_dsp_adsp2_setup_algs() warn: passing a 
valid pointer to 'PTR_ERR'
drivers/firmware/cirrus/cs_dsp.c:1782 cs_dsp_adsp2_setup_algs() warn: passing a 
valid pointer to 'PTR_ERR'
drivers/firmware/cirrus/cs_dsp.c:1807 cs_dsp_adsp2_setup_algs() warn: passing a 
valid pointer to 'PTR_ERR'
drivers/firmware/cirrus/cs_dsp.c:1828 cs_dsp_adsp2_setup_algs() warn: passing a 
valid pointer to 'PTR_ERR'
drivers/firmware/cirrus/cs_dsp.c:1849 cs_dsp_adsp2_setup_algs() warn: passing a 
valid pointer to 'PTR_ERR'

vim +/PTR_ERR +1636 drivers/firmware/cirrus/cs_dsp.c

f6bc909e7673c3 Simon Trimmer 2021-09-13  1626  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1627  static int 
cs_dsp_create_regions(struct cs_dsp *dsp, __be32 id, int nregions,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1628                            const 
int *type, __be32 *base)
f6bc909e7673c3 Simon Trimmer 2021-09-13  1629  {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1630   struct cs_dsp_alg_region 
*alg_region;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1631   int i;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1632  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1633   for (i = 0; i < nregions; i++) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1634           alg_region = 
cs_dsp_create_region(dsp, type[i], id, base[i]);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1635           if (IS_ERR(alg_region))
f6bc909e7673c3 Simon Trimmer 2021-09-13 @1636                   return 
PTR_ERR(alg_region);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1637   }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1638  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1639   return 0;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1640  }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1641  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1642  static int 
cs_dsp_adsp1_setup_algs(struct cs_dsp *dsp)
f6bc909e7673c3 Simon Trimmer 2021-09-13  1643  {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1644   struct wmfw_adsp1_id_hdr 
adsp1_id;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1645   struct wmfw_adsp1_alg_hdr 
*adsp1_alg;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1646   struct cs_dsp_alg_region 
*alg_region;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1647   const struct cs_dsp_region *mem;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1648   unsigned int pos, len;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1649   size_t n_algs;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1650   int i, ret;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1651  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1652   mem = cs_dsp_find_region(dsp, 
WMFW_ADSP1_DM);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1653   if (WARN_ON(!mem))
f6bc909e7673c3 Simon Trimmer 2021-09-13  1654           return -EINVAL;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1655  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1656   ret = 
regmap_raw_read(dsp->regmap, mem->base, &adsp1_id,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1657                         
sizeof(adsp1_id));
f6bc909e7673c3 Simon Trimmer 2021-09-13  1658   if (ret != 0) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1659           cs_dsp_err(dsp, "Failed 
to read algorithm info: %d\n",
f6bc909e7673c3 Simon Trimmer 2021-09-13  1660                      ret);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1661           return ret;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1662   }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1663  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1664   n_algs = 
be32_to_cpu(adsp1_id.n_algs);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1665  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1666   
cs_dsp_parse_wmfw_id_header(dsp, &adsp1_id.fw, n_algs);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1667  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1668   alg_region = 
cs_dsp_create_region(dsp, WMFW_ADSP1_ZM,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1669                                   
  adsp1_id.fw.id, adsp1_id.zm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1670   if (IS_ERR(alg_region))
f6bc909e7673c3 Simon Trimmer 2021-09-13 @1671           return 
PTR_ERR(alg_region);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1672  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1673   alg_region = 
cs_dsp_create_region(dsp, WMFW_ADSP1_DM,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1674                                   
  adsp1_id.fw.id, adsp1_id.dm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1675   if (IS_ERR(alg_region))
f6bc909e7673c3 Simon Trimmer 2021-09-13  1676           return 
PTR_ERR(alg_region);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1677  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1678   /* Calculate offset and length 
in DSP words */
f6bc909e7673c3 Simon Trimmer 2021-09-13  1679   pos = sizeof(adsp1_id) / 
sizeof(u32);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1680   len = (sizeof(*adsp1_alg) * 
n_algs) / sizeof(u32);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1681  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1682   adsp1_alg = 
cs_dsp_read_algs(dsp, n_algs, mem, pos, len);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1683   if (IS_ERR(adsp1_alg))
f6bc909e7673c3 Simon Trimmer 2021-09-13  1684           return 
PTR_ERR(adsp1_alg);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1685  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1686   for (i = 0; i < n_algs; i++) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1687           cs_dsp_info(dsp, "%d: 
ID %x v%d.%d.%d DM@%x ZM@%x\n",
f6bc909e7673c3 Simon Trimmer 2021-09-13  1688                       i, 
be32_to_cpu(adsp1_alg[i].alg.id),
f6bc909e7673c3 Simon Trimmer 2021-09-13  1689                       
(be32_to_cpu(adsp1_alg[i].alg.ver) & 0xff0000) >> 16,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1690                       
(be32_to_cpu(adsp1_alg[i].alg.ver) & 0xff00) >> 8,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1691                       
be32_to_cpu(adsp1_alg[i].alg.ver) & 0xff,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1692                       
be32_to_cpu(adsp1_alg[i].dm),
f6bc909e7673c3 Simon Trimmer 2021-09-13  1693                       
be32_to_cpu(adsp1_alg[i].zm));
f6bc909e7673c3 Simon Trimmer 2021-09-13  1694  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1695           alg_region = 
cs_dsp_create_region(dsp, WMFW_ADSP1_DM,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1696                                   
          adsp1_alg[i].alg.id,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1697                                   
          adsp1_alg[i].dm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1698           if (IS_ERR(alg_region)) 
{
f6bc909e7673c3 Simon Trimmer 2021-09-13  1699                   ret = 
PTR_ERR(alg_region);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1700                   goto out;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1701           }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1702           if (dsp->fw_ver == 0) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1703                   if (i + 1 < 
n_algs) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1704                           len = 
be32_to_cpu(adsp1_alg[i + 1].dm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1705                           len -= 
be32_to_cpu(adsp1_alg[i].dm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1706                           len *= 
4;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1707                           
cs_dsp_create_control(dsp, alg_region, 0,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1708                                   
              len, NULL, 0, 0,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1709                                   
              WMFW_CTL_TYPE_BYTES);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1710                   } else {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1711                           
cs_dsp_warn(dsp, "Missing length info for region DM with ID %x\n",
f6bc909e7673c3 Simon Trimmer 2021-09-13  1712                                   
    be32_to_cpu(adsp1_alg[i].alg.id));
f6bc909e7673c3 Simon Trimmer 2021-09-13  1713                   }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1714           }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1715  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1716           alg_region = 
cs_dsp_create_region(dsp, WMFW_ADSP1_ZM,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1717                                   
          adsp1_alg[i].alg.id,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1718                                   
          adsp1_alg[i].zm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1719           if (IS_ERR(alg_region)) 
{
f6bc909e7673c3 Simon Trimmer 2021-09-13  1720                   ret = 
PTR_ERR(alg_region);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1721                   goto out;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1722           }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1723           if (dsp->fw_ver == 0) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1724                   if (i + 1 < 
n_algs) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1725                           len = 
be32_to_cpu(adsp1_alg[i + 1].zm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1726                           len -= 
be32_to_cpu(adsp1_alg[i].zm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1727                           len *= 
4;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1728                           
cs_dsp_create_control(dsp, alg_region, 0,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1729                                   
              len, NULL, 0, 0,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1730                                   
              WMFW_CTL_TYPE_BYTES);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1731                   } else {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1732                           
cs_dsp_warn(dsp, "Missing length info for region ZM with ID %x\n",
f6bc909e7673c3 Simon Trimmer 2021-09-13  1733                                   
    be32_to_cpu(adsp1_alg[i].alg.id));
f6bc909e7673c3 Simon Trimmer 2021-09-13  1734                   }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1735           }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1736   }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1737  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1738  out:
f6bc909e7673c3 Simon Trimmer 2021-09-13  1739   kfree(adsp1_alg);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1740   return ret;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1741  }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1742  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1743  static int 
cs_dsp_adsp2_setup_algs(struct cs_dsp *dsp)
f6bc909e7673c3 Simon Trimmer 2021-09-13  1744  {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1745   struct wmfw_adsp2_id_hdr 
adsp2_id;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1746   struct wmfw_adsp2_alg_hdr 
*adsp2_alg;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1747   struct cs_dsp_alg_region 
*alg_region;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1748   const struct cs_dsp_region *mem;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1749   unsigned int pos, len;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1750   size_t n_algs;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1751   int i, ret;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1752  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1753   mem = cs_dsp_find_region(dsp, 
WMFW_ADSP2_XM);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1754   if (WARN_ON(!mem))
f6bc909e7673c3 Simon Trimmer 2021-09-13  1755           return -EINVAL;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1756  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1757   ret = 
regmap_raw_read(dsp->regmap, mem->base, &adsp2_id,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1758                         
sizeof(adsp2_id));
f6bc909e7673c3 Simon Trimmer 2021-09-13  1759   if (ret != 0) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1760           cs_dsp_err(dsp, "Failed 
to read algorithm info: %d\n",
f6bc909e7673c3 Simon Trimmer 2021-09-13  1761                      ret);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1762           return ret;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1763   }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1764  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1765   n_algs = 
be32_to_cpu(adsp2_id.n_algs);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1766  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1767   
cs_dsp_parse_wmfw_id_header(dsp, &adsp2_id.fw, n_algs);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1768  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1769   alg_region = 
cs_dsp_create_region(dsp, WMFW_ADSP2_XM,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1770                                   
  adsp2_id.fw.id, adsp2_id.xm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1771   if (IS_ERR(alg_region))
f6bc909e7673c3 Simon Trimmer 2021-09-13 @1772           return 
PTR_ERR(alg_region);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1773  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1774   alg_region = 
cs_dsp_create_region(dsp, WMFW_ADSP2_YM,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1775                                   
  adsp2_id.fw.id, adsp2_id.ym);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1776   if (IS_ERR(alg_region))
f6bc909e7673c3 Simon Trimmer 2021-09-13  1777           return 
PTR_ERR(alg_region);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1778  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1779   alg_region = 
cs_dsp_create_region(dsp, WMFW_ADSP2_ZM,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1780                                   
  adsp2_id.fw.id, adsp2_id.zm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1781   if (IS_ERR(alg_region))
f6bc909e7673c3 Simon Trimmer 2021-09-13  1782           return 
PTR_ERR(alg_region);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1783  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1784   /* Calculate offset and length 
in DSP words */
f6bc909e7673c3 Simon Trimmer 2021-09-13  1785   pos = sizeof(adsp2_id) / 
sizeof(u32);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1786   len = (sizeof(*adsp2_alg) * 
n_algs) / sizeof(u32);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1787  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1788   adsp2_alg = 
cs_dsp_read_algs(dsp, n_algs, mem, pos, len);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1789   if (IS_ERR(adsp2_alg))
f6bc909e7673c3 Simon Trimmer 2021-09-13  1790           return 
PTR_ERR(adsp2_alg);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1791  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1792   for (i = 0; i < n_algs; i++) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1793           cs_dsp_info(dsp,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1794                       "%d: ID %x 
v%d.%d.%d XM@%x YM@%x ZM@%x\n",
f6bc909e7673c3 Simon Trimmer 2021-09-13  1795                       i, 
be32_to_cpu(adsp2_alg[i].alg.id),
f6bc909e7673c3 Simon Trimmer 2021-09-13  1796                       
(be32_to_cpu(adsp2_alg[i].alg.ver) & 0xff0000) >> 16,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1797                       
(be32_to_cpu(adsp2_alg[i].alg.ver) & 0xff00) >> 8,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1798                       
be32_to_cpu(adsp2_alg[i].alg.ver) & 0xff,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1799                       
be32_to_cpu(adsp2_alg[i].xm),
f6bc909e7673c3 Simon Trimmer 2021-09-13  1800                       
be32_to_cpu(adsp2_alg[i].ym),
f6bc909e7673c3 Simon Trimmer 2021-09-13  1801                       
be32_to_cpu(adsp2_alg[i].zm));
f6bc909e7673c3 Simon Trimmer 2021-09-13  1802  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1803           alg_region = 
cs_dsp_create_region(dsp, WMFW_ADSP2_XM,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1804                                   
          adsp2_alg[i].alg.id,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1805                                   
          adsp2_alg[i].xm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1806           if (IS_ERR(alg_region)) 
{
f6bc909e7673c3 Simon Trimmer 2021-09-13  1807                   ret = 
PTR_ERR(alg_region);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1808                   goto out;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1809           }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1810           if (dsp->fw_ver == 0) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1811                   if (i + 1 < 
n_algs) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1812                           len = 
be32_to_cpu(adsp2_alg[i + 1].xm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1813                           len -= 
be32_to_cpu(adsp2_alg[i].xm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1814                           len *= 
4;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1815                           
cs_dsp_create_control(dsp, alg_region, 0,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1816                                   
              len, NULL, 0, 0,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1817                                   
              WMFW_CTL_TYPE_BYTES);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1818                   } else {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1819                           
cs_dsp_warn(dsp, "Missing length info for region XM with ID %x\n",
f6bc909e7673c3 Simon Trimmer 2021-09-13  1820                                   
    be32_to_cpu(adsp2_alg[i].alg.id));
f6bc909e7673c3 Simon Trimmer 2021-09-13  1821                   }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1822           }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1823  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1824           alg_region = 
cs_dsp_create_region(dsp, WMFW_ADSP2_YM,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1825                                   
          adsp2_alg[i].alg.id,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1826                                   
          adsp2_alg[i].ym);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1827           if (IS_ERR(alg_region)) 
{
f6bc909e7673c3 Simon Trimmer 2021-09-13  1828                   ret = 
PTR_ERR(alg_region);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1829                   goto out;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1830           }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1831           if (dsp->fw_ver == 0) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1832                   if (i + 1 < 
n_algs) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1833                           len = 
be32_to_cpu(adsp2_alg[i + 1].ym);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1834                           len -= 
be32_to_cpu(adsp2_alg[i].ym);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1835                           len *= 
4;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1836                           
cs_dsp_create_control(dsp, alg_region, 0,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1837                                   
              len, NULL, 0, 0,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1838                                   
              WMFW_CTL_TYPE_BYTES);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1839                   } else {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1840                           
cs_dsp_warn(dsp, "Missing length info for region YM with ID %x\n",
f6bc909e7673c3 Simon Trimmer 2021-09-13  1841                                   
    be32_to_cpu(adsp2_alg[i].alg.id));
f6bc909e7673c3 Simon Trimmer 2021-09-13  1842                   }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1843           }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1844  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1845           alg_region = 
cs_dsp_create_region(dsp, WMFW_ADSP2_ZM,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1846                                   
          adsp2_alg[i].alg.id,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1847                                   
          adsp2_alg[i].zm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1848           if (IS_ERR(alg_region)) 
{
f6bc909e7673c3 Simon Trimmer 2021-09-13  1849                   ret = 
PTR_ERR(alg_region);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1850                   goto out;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1851           }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1852           if (dsp->fw_ver == 0) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1853                   if (i + 1 < 
n_algs) {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1854                           len = 
be32_to_cpu(adsp2_alg[i + 1].zm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1855                           len -= 
be32_to_cpu(adsp2_alg[i].zm);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1856                           len *= 
4;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1857                           
cs_dsp_create_control(dsp, alg_region, 0,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1858                                   
              len, NULL, 0, 0,
f6bc909e7673c3 Simon Trimmer 2021-09-13  1859                                   
              WMFW_CTL_TYPE_BYTES);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1860                   } else {
f6bc909e7673c3 Simon Trimmer 2021-09-13  1861                           
cs_dsp_warn(dsp, "Missing length info for region ZM with ID %x\n",
f6bc909e7673c3 Simon Trimmer 2021-09-13  1862                                   
    be32_to_cpu(adsp2_alg[i].alg.id));
f6bc909e7673c3 Simon Trimmer 2021-09-13  1863                   }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1864           }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1865   }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1866  
f6bc909e7673c3 Simon Trimmer 2021-09-13  1867  out:
f6bc909e7673c3 Simon Trimmer 2021-09-13  1868   kfree(adsp2_alg);
f6bc909e7673c3 Simon Trimmer 2021-09-13  1869   return ret;
f6bc909e7673c3 Simon Trimmer 2021-09-13  1870  }
f6bc909e7673c3 Simon Trimmer 2021-09-13  1871  

:::::: The code at line 1636 was first introduced by commit
:::::: f6bc909e7673c30abcbdb329e7d0aa2e83c103d7 firmware: cs_dsp: add driver to 
support firmware loading on Cirrus Logic DSPs

:::::: TO: Simon Trimmer <[email protected]>
:::::: CC: Mark Brown <[email protected]>

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to