Loading drivers/soc/qcom/dcc.c +26 −7 Original line number Original line Diff line number Diff line Loading @@ -39,8 +39,6 @@ #define dcc_readl(drvdata, off) \ #define dcc_readl(drvdata, off) \ __raw_readl(drvdata->base + off) __raw_readl(drvdata->base + off) #define dcc_sram_writel(drvdata, val, off) \ __raw_writel((val), drvdata->ram_base + off) #define dcc_sram_readl(drvdata, off) \ #define dcc_sram_readl(drvdata, off) \ __raw_readl(drvdata->ram_base + off) __raw_readl(drvdata->ram_base + off) Loading Loading @@ -129,6 +127,16 @@ struct dcc_drvdata { uint64_t xpu_addr; uint64_t xpu_addr; uint32_t xpu_unlock_count; uint32_t xpu_unlock_count; }; }; static int dcc_sram_writel(struct dcc_drvdata *drvdata, uint32_t val, uint32_t off) { if (unlikely(off > (drvdata->ram_size - 4))) return -EINVAL; __raw_writel((val), drvdata->ram_base + off); return 0; } static int dcc_cfg_xpu(struct dcc_drvdata *drvdata, bool enable) static int dcc_cfg_xpu(struct dcc_drvdata *drvdata, bool enable) { { Loading Loading @@ -277,12 +285,17 @@ static int __dcc_ll_cfg(struct dcc_drvdata *drvdata) if (!prev_addr || prev_addr != addr || prev_off > off) { if (!prev_addr || prev_addr != addr || prev_off > off) { /* Check if we need to write link of prev entry */ /* Check if we need to write link of prev entry */ if (link) { if (link) { dcc_sram_writel(drvdata, link, sram_offset); ret = dcc_sram_writel(drvdata, link, sram_offset); if (ret) goto overstep; sram_offset += 4; sram_offset += 4; } } /* Write address */ /* Write address */ dcc_sram_writel(drvdata, addr, sram_offset); ret = dcc_sram_writel(drvdata, addr, sram_offset); if (ret) goto overstep; sram_offset += 4; sram_offset += 4; /* Reset link and prev_off */ /* Reset link and prev_off */ Loading Loading @@ -322,7 +335,9 @@ static int __dcc_ll_cfg(struct dcc_drvdata *drvdata) ((entry->len << 8) & BM(8, 14))) << pos; ((entry->len << 8) & BM(8, 14))) << pos; if (pos) { if (pos) { dcc_sram_writel(drvdata, link, sram_offset); ret = dcc_sram_writel(drvdata, link, sram_offset); if (ret) goto overstep; sram_offset += 4; sram_offset += 4; link = 0; link = 0; } } Loading @@ -332,12 +347,16 @@ static int __dcc_ll_cfg(struct dcc_drvdata *drvdata) } } if (link) { if (link) { dcc_sram_writel(drvdata, link, sram_offset); ret = dcc_sram_writel(drvdata, link, sram_offset); if (ret) goto overstep; sram_offset += 4; sram_offset += 4; } } /* Setting zero to indicate end of the list */ /* Setting zero to indicate end of the list */ dcc_sram_writel(drvdata, 0, sram_offset); ret = dcc_sram_writel(drvdata, 0, sram_offset); if (ret) goto overstep; sram_offset += 4; sram_offset += 4; /* check if the data will overstep */ /* check if the data will overstep */ Loading Loading
drivers/soc/qcom/dcc.c +26 −7 Original line number Original line Diff line number Diff line Loading @@ -39,8 +39,6 @@ #define dcc_readl(drvdata, off) \ #define dcc_readl(drvdata, off) \ __raw_readl(drvdata->base + off) __raw_readl(drvdata->base + off) #define dcc_sram_writel(drvdata, val, off) \ __raw_writel((val), drvdata->ram_base + off) #define dcc_sram_readl(drvdata, off) \ #define dcc_sram_readl(drvdata, off) \ __raw_readl(drvdata->ram_base + off) __raw_readl(drvdata->ram_base + off) Loading Loading @@ -129,6 +127,16 @@ struct dcc_drvdata { uint64_t xpu_addr; uint64_t xpu_addr; uint32_t xpu_unlock_count; uint32_t xpu_unlock_count; }; }; static int dcc_sram_writel(struct dcc_drvdata *drvdata, uint32_t val, uint32_t off) { if (unlikely(off > (drvdata->ram_size - 4))) return -EINVAL; __raw_writel((val), drvdata->ram_base + off); return 0; } static int dcc_cfg_xpu(struct dcc_drvdata *drvdata, bool enable) static int dcc_cfg_xpu(struct dcc_drvdata *drvdata, bool enable) { { Loading Loading @@ -277,12 +285,17 @@ static int __dcc_ll_cfg(struct dcc_drvdata *drvdata) if (!prev_addr || prev_addr != addr || prev_off > off) { if (!prev_addr || prev_addr != addr || prev_off > off) { /* Check if we need to write link of prev entry */ /* Check if we need to write link of prev entry */ if (link) { if (link) { dcc_sram_writel(drvdata, link, sram_offset); ret = dcc_sram_writel(drvdata, link, sram_offset); if (ret) goto overstep; sram_offset += 4; sram_offset += 4; } } /* Write address */ /* Write address */ dcc_sram_writel(drvdata, addr, sram_offset); ret = dcc_sram_writel(drvdata, addr, sram_offset); if (ret) goto overstep; sram_offset += 4; sram_offset += 4; /* Reset link and prev_off */ /* Reset link and prev_off */ Loading Loading @@ -322,7 +335,9 @@ static int __dcc_ll_cfg(struct dcc_drvdata *drvdata) ((entry->len << 8) & BM(8, 14))) << pos; ((entry->len << 8) & BM(8, 14))) << pos; if (pos) { if (pos) { dcc_sram_writel(drvdata, link, sram_offset); ret = dcc_sram_writel(drvdata, link, sram_offset); if (ret) goto overstep; sram_offset += 4; sram_offset += 4; link = 0; link = 0; } } Loading @@ -332,12 +347,16 @@ static int __dcc_ll_cfg(struct dcc_drvdata *drvdata) } } if (link) { if (link) { dcc_sram_writel(drvdata, link, sram_offset); ret = dcc_sram_writel(drvdata, link, sram_offset); if (ret) goto overstep; sram_offset += 4; sram_offset += 4; } } /* Setting zero to indicate end of the list */ /* Setting zero to indicate end of the list */ dcc_sram_writel(drvdata, 0, sram_offset); ret = dcc_sram_writel(drvdata, 0, sram_offset); if (ret) goto overstep; sram_offset += 4; sram_offset += 4; /* check if the data will overstep */ /* check if the data will overstep */ Loading