Renesas driver updates for v5.4 (take two)
- Improve "always-on" PM Domain handling on SH/R-Mobile SoCs, - Automatic errata selection for Cortex-A7/A9, - Small fixes and improvements. -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQQ9qaHoIs/1I4cXmEiKwlD9ZEnxcAUCXV/SBwAKCRCKwlD9ZEnx cGNpAP0ck0BkVTdVsRRG17jo4su3i9Yhq2Weqw9z2s9JkygJvgEAvGsaJPxtq3Pk uhjkL67VVDq01sp/0WydkXqY3pErwgI= =cmiN -----END PGP SIGNATURE----- Merge tag 'renesas-drivers-for-v5.4-tag2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel into arm/drivers Renesas driver updates for v5.4 (take two) - Improve "always-on" PM Domain handling on SH/R-Mobile SoCs, - Automatic errata selection for Cortex-A7/A9, - Small fixes and improvements. * tag 'renesas-drivers-for-v5.4-tag2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel: soc: renesas: Enable ARM_ERRATA_754322 for affected Cortex-A9 soc: renesas: Enable ARM_ERRATA_814220 for affected Cortex-A7 soc: renesas: rmobile-sysc: Set GENPD_FLAG_ALWAYS_ON for always-on domain soc: renesas: rcar-sysc: Eliminate local variable gov soc: renesas: rcar-sysc: Add goto to of_node_put() before return Link: https://lore.kernel.org/r/20190823123643.18799-5-geert+renesas@glider.be Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
328790614d
|
@ -55,6 +55,7 @@ config ARCH_EMEV2
|
|||
|
||||
config ARCH_R7S72100
|
||||
bool "RZ/A1H (R7S72100)"
|
||||
select ARM_ERRATA_754322
|
||||
select PM
|
||||
select PM_GENERIC_DOMAINS
|
||||
select RENESAS_OSTM
|
||||
|
@ -72,12 +73,14 @@ config ARCH_R8A73A4
|
|||
bool "R-Mobile APE6 (R8A73A40)"
|
||||
select ARCH_RMOBILE
|
||||
select ARM_ERRATA_798181 if SMP
|
||||
select ARM_ERRATA_814220
|
||||
select HAVE_ARM_ARCH_TIMER
|
||||
select RENESAS_IRQC
|
||||
|
||||
config ARCH_R8A7740
|
||||
bool "R-Mobile A1 (R8A77400)"
|
||||
select ARCH_RMOBILE
|
||||
select ARM_ERRATA_754322
|
||||
select RENESAS_INTC_IRQPIN
|
||||
|
||||
config ARCH_R8A7743
|
||||
|
@ -95,20 +98,24 @@ config ARCH_R8A7744
|
|||
config ARCH_R8A7745
|
||||
bool "RZ/G1E (R8A77450)"
|
||||
select ARCH_RCAR_GEN2
|
||||
select ARM_ERRATA_814220
|
||||
select SYSC_R8A7745
|
||||
|
||||
config ARCH_R8A77470
|
||||
bool "RZ/G1C (R8A77470)"
|
||||
select ARCH_RCAR_GEN2
|
||||
select ARM_ERRATA_814220
|
||||
select SYSC_R8A77470
|
||||
|
||||
config ARCH_R8A7778
|
||||
bool "R-Car M1A (R8A77781)"
|
||||
select ARCH_RCAR_GEN1
|
||||
select ARM_ERRATA_754322
|
||||
|
||||
config ARCH_R8A7779
|
||||
bool "R-Car H1 (R8A77790)"
|
||||
select ARCH_RCAR_GEN1
|
||||
select ARM_ERRATA_754322
|
||||
select HAVE_ARM_SCU if SMP
|
||||
select HAVE_ARM_TWD if SMP
|
||||
select SYSC_R8A7779
|
||||
|
@ -117,6 +124,7 @@ config ARCH_R8A7790
|
|||
bool "R-Car H2 (R8A77900)"
|
||||
select ARCH_RCAR_GEN2
|
||||
select ARM_ERRATA_798181 if SMP
|
||||
select ARM_ERRATA_814220
|
||||
select I2C
|
||||
select SYSC_R8A7790
|
||||
|
||||
|
@ -143,15 +151,18 @@ config ARCH_R8A7793
|
|||
config ARCH_R8A7794
|
||||
bool "R-Car E2 (R8A77940)"
|
||||
select ARCH_RCAR_GEN2
|
||||
select ARM_ERRATA_814220
|
||||
select SYSC_R8A7794
|
||||
|
||||
config ARCH_R9A06G032
|
||||
bool "RZ/N1D (R9A06G032)"
|
||||
select ARCH_RZN1
|
||||
select ARM_ERRATA_814220
|
||||
|
||||
config ARCH_SH73A0
|
||||
bool "SH-Mobile AG5 (R8A73A00)"
|
||||
select ARCH_RMOBILE
|
||||
select ARM_ERRATA_754322
|
||||
select HAVE_ARM_SCU if SMP
|
||||
select HAVE_ARM_TWD if SMP
|
||||
select RENESAS_INTC_IRQPIN
|
||||
|
|
|
@ -200,7 +200,6 @@ static int __init rcar_sysc_pd_setup(struct rcar_sysc_pd *pd)
|
|||
{
|
||||
struct generic_pm_domain *genpd = &pd->genpd;
|
||||
const char *name = pd->genpd.name;
|
||||
struct dev_power_governor *gov = &simple_qos_governor;
|
||||
int error;
|
||||
|
||||
if (pd->flags & PD_CPU) {
|
||||
|
@ -254,7 +253,7 @@ static int __init rcar_sysc_pd_setup(struct rcar_sysc_pd *pd)
|
|||
rcar_sysc_power(&pd->ch, true);
|
||||
|
||||
finalize:
|
||||
error = pm_genpd_init(genpd, gov, false);
|
||||
error = pm_genpd_init(genpd, &simple_qos_governor, false);
|
||||
if (error)
|
||||
pr_err("Failed to init PM domain %s: %d\n", name, error);
|
||||
|
||||
|
@ -346,7 +345,7 @@ static int __init rcar_sysc_pd_init(void)
|
|||
if (info->init) {
|
||||
error = info->init();
|
||||
if (error)
|
||||
return error;
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
has_cpg_mstp = of_find_compatible_node(NULL, NULL,
|
||||
|
|
|
@ -48,12 +48,8 @@ struct rmobile_pm_domain *to_rmobile_pd(struct generic_pm_domain *d)
|
|||
static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
|
||||
{
|
||||
struct rmobile_pm_domain *rmobile_pd = to_rmobile_pd(genpd);
|
||||
unsigned int mask;
|
||||
unsigned int mask = BIT(rmobile_pd->bit_shift);
|
||||
|
||||
if (rmobile_pd->bit_shift == ~0)
|
||||
return -EBUSY;
|
||||
|
||||
mask = BIT(rmobile_pd->bit_shift);
|
||||
if (rmobile_pd->suspend) {
|
||||
int ret = rmobile_pd->suspend();
|
||||
|
||||
|
@ -80,14 +76,10 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
|
|||
|
||||
static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd)
|
||||
{
|
||||
unsigned int mask;
|
||||
unsigned int mask = BIT(rmobile_pd->bit_shift);
|
||||
unsigned int retry_count;
|
||||
int ret = 0;
|
||||
|
||||
if (rmobile_pd->bit_shift == ~0)
|
||||
return 0;
|
||||
|
||||
mask = BIT(rmobile_pd->bit_shift);
|
||||
if (__raw_readl(rmobile_pd->base + PSTR) & mask)
|
||||
return ret;
|
||||
|
||||
|
@ -122,11 +114,15 @@ static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
|
|||
struct dev_power_governor *gov = rmobile_pd->gov;
|
||||
|
||||
genpd->flags |= GENPD_FLAG_PM_CLK | GENPD_FLAG_ACTIVE_WAKEUP;
|
||||
genpd->power_off = rmobile_pd_power_down;
|
||||
genpd->power_on = rmobile_pd_power_up;
|
||||
genpd->attach_dev = cpg_mstp_attach_dev;
|
||||
genpd->detach_dev = cpg_mstp_detach_dev;
|
||||
__rmobile_pd_power_up(rmobile_pd);
|
||||
genpd->attach_dev = cpg_mstp_attach_dev;
|
||||
genpd->detach_dev = cpg_mstp_detach_dev;
|
||||
|
||||
if (!(genpd->flags & GENPD_FLAG_ALWAYS_ON)) {
|
||||
genpd->power_off = rmobile_pd_power_down;
|
||||
genpd->power_on = rmobile_pd_power_up;
|
||||
__rmobile_pd_power_up(rmobile_pd);
|
||||
}
|
||||
|
||||
pm_genpd_init(genpd, gov ? : &simple_qos_governor, false);
|
||||
}
|
||||
|
||||
|
@ -270,6 +266,11 @@ static void __init rmobile_setup_pm_domain(struct device_node *np,
|
|||
break;
|
||||
|
||||
case PD_NORMAL:
|
||||
if (pd->bit_shift == ~0) {
|
||||
/* Top-level always-on domain */
|
||||
pr_debug("PM domain %s is always-on domain\n", name);
|
||||
pd->genpd.flags |= GENPD_FLAG_ALWAYS_ON;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue