Merge tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC driver updates from Olof Johansson: "Misc driver updates for platforms, many of them power related. - Rockchip adds power domain support for rk3066 and rk3188 - Amlogic adds a power measurement driver - Allwinner adds SRAM support for three platforms (F1C100, H5, A64 C1) - Wakeup and ti-sysc (platform bus) fixes for OMAP/DRA7 - Broadcom fixes suspend/resume with Thumb2 kernels, and improves stability of a handful of firmware/platform interfaces - PXA completes their conversion to dmaengine framework - Renesas does a bunch of PM cleanups across many platforms - Tegra adds support for suspend/resume on T186/T194, which includes some driver cleanups and addition of wake events - Tegra also adds a driver for memory controller (EMC) on Tegra2 - i.MX tweaks power domain bindings, and adds support for i.MX8MQ in GPC - Atmel adds identifiers and LPDDR2 support for a new SoC, SAM9X60 and misc cleanups across several platforms" * tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (73 commits) ARM: at91: add support in soc driver for new SAM9X60 ARM: at91: add support in soc driver for LPDDR2 SiP memory: omap-gpmc: Use of_node_name_eq for node name comparisons bus: ti-sysc: Check for no-reset and no-idle flags at the child level ARM: OMAP2+: Check also the first dts child for hwmod flags soc: amlogic: meson-clk-measure: Add missing REGMAP_MMIO dependency soc: imx: gpc: Increase GPC_CLK_MAX to 7 soc: renesas: rcar-sysc: Fix power domain control after system resume soc: renesas: rcar-sysc: Merge PM Domain registration and linking soc: renesas: rcar-sysc: Remove rcar_sysc_power_{down,up}() helpers soc: renesas: r8a77990-sysc: Fix initialization order of 3DG-{A,B} dt-bindings: sram: sunxi: Add compatible for the A64 SRAM C1 dt-bindings: sram: sunxi: Add bindings for the H5 with SRAM C1 dt-bindings: sram: Add Allwinner suniv F1C100s soc: sunxi: sram: Add support for the H5 SoC system control soc: sunxi: sram: Enable EMAC clock access for H3 variant soc: imx: gpcv2: add support for i.MX8MQ SoC soc: imx: gpcv2: move register access table to domain data soc: imx: gpcv2: prefix i.MX7 specific defines dmaengine: pxa: make the filter function internal ...
Este cometimento está contido em:
@@ -927,26 +927,6 @@ static int a6xx_gmu_memory_probe(struct a6xx_gmu *gmu)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Get the list of RPMh voltage levels from cmd-db */
|
||||
static int a6xx_gmu_rpmh_arc_cmds(const char *id, void *vals, int size)
|
||||
{
|
||||
u32 len = cmd_db_read_aux_data_len(id);
|
||||
|
||||
if (!len)
|
||||
return 0;
|
||||
|
||||
if (WARN_ON(len > size))
|
||||
return -EINVAL;
|
||||
|
||||
cmd_db_read_aux_data(id, vals, len);
|
||||
|
||||
/*
|
||||
* The data comes back as an array of unsigned shorts so adjust the
|
||||
* count accordingly
|
||||
*/
|
||||
return len >> 1;
|
||||
}
|
||||
|
||||
/* Return the 'arc-level' for the given frequency */
|
||||
static u32 a6xx_gmu_get_arc_level(struct device *dev, unsigned long freq)
|
||||
{
|
||||
@@ -974,11 +954,30 @@ static u32 a6xx_gmu_get_arc_level(struct device *dev, unsigned long freq)
|
||||
}
|
||||
|
||||
static int a6xx_gmu_rpmh_arc_votes_init(struct device *dev, u32 *votes,
|
||||
unsigned long *freqs, int freqs_count,
|
||||
u16 *pri, int pri_count,
|
||||
u16 *sec, int sec_count)
|
||||
unsigned long *freqs, int freqs_count, const char *id)
|
||||
{
|
||||
int i, j;
|
||||
const u16 *pri, *sec;
|
||||
size_t pri_count, sec_count;
|
||||
|
||||
pri = cmd_db_read_aux_data(id, &pri_count);
|
||||
if (IS_ERR(pri))
|
||||
return PTR_ERR(pri);
|
||||
/*
|
||||
* The data comes back as an array of unsigned shorts so adjust the
|
||||
* count accordingly
|
||||
*/
|
||||
pri_count >>= 1;
|
||||
if (!pri_count)
|
||||
return -EINVAL;
|
||||
|
||||
sec = cmd_db_read_aux_data("mx.lvl", &sec_count);
|
||||
if (IS_ERR(sec))
|
||||
return PTR_ERR(sec);
|
||||
|
||||
sec_count >>= 1;
|
||||
if (!sec_count)
|
||||
return -EINVAL;
|
||||
|
||||
/* Construct a vote for each frequency */
|
||||
for (i = 0; i < freqs_count; i++) {
|
||||
@@ -1037,25 +1036,15 @@ static int a6xx_gmu_rpmh_votes_init(struct a6xx_gmu *gmu)
|
||||
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
struct msm_gpu *gpu = &adreno_gpu->base;
|
||||
|
||||
u16 gx[16], cx[16], mx[16];
|
||||
u32 gxcount, cxcount, mxcount;
|
||||
int ret;
|
||||
|
||||
/* Get the list of available voltage levels for each component */
|
||||
gxcount = a6xx_gmu_rpmh_arc_cmds("gfx.lvl", gx, sizeof(gx));
|
||||
cxcount = a6xx_gmu_rpmh_arc_cmds("cx.lvl", cx, sizeof(cx));
|
||||
mxcount = a6xx_gmu_rpmh_arc_cmds("mx.lvl", mx, sizeof(mx));
|
||||
|
||||
/* Build the GX votes */
|
||||
ret = a6xx_gmu_rpmh_arc_votes_init(&gpu->pdev->dev, gmu->gx_arc_votes,
|
||||
gmu->gpu_freqs, gmu->nr_gpu_freqs,
|
||||
gx, gxcount, mx, mxcount);
|
||||
gmu->gpu_freqs, gmu->nr_gpu_freqs, "gfx.lvl");
|
||||
|
||||
/* Build the CX votes */
|
||||
ret |= a6xx_gmu_rpmh_arc_votes_init(gmu->dev, gmu->cx_arc_votes,
|
||||
gmu->gmu_freqs, gmu->nr_gmu_freqs,
|
||||
cx, cxcount, mx, mxcount);
|
||||
gmu->gmu_freqs, gmu->nr_gmu_freqs, "cx.lvl");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador