Renesas ARM Based SoC Updates for v4.20
* Rework the PMIC IRQ line quirk to use DT rather than hard coded topology * Convert to SPDX identifiers * Convert to using %pOFn instead of device_node.name * Remove the no longer needed ARCH_SHMOBILE Kconfig symbol * RZ/G1N (r8a7744) SoC: Add basic SoC and debug-ll support * R-Car H1 (r8a7779) SoC: remove unused includes -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE4nzZofWswv9L/nKF189kaWo3T74FAlut6KwACgkQ189kaWo3 T75p1w//X2WSkdZH5nwHGlVWFMSMbwYdcLMe9yjMPa5Sb8ErkXKAy9VoQszbJxn/ lOsZzt8sFXegErCLfLevlWR1g0OM0OTdLKqCAGOSOapV1u3iwcqqU6r4ThaPjGkf uWj8gDYPdYrUhVR00Un6SlsH1f7yiGRoj/MNIW9zffMdOnqua/uLhFS8LdtedJKW 6gDvyDEwqA1+yJljmdH7xyX9/X6UwLN40Opq6OBuwKbKgqgySmng0amaF1lLcc6L DqvZ8kaKHIXmBuFrHOJkSIrcRrUL2DilGGDxXaeV7p3nkICMVWENv6aTeGFF7epX lka7rBLgEmFfz2OU/D/jDddMLaF4+MgRC4p9tIjN8cAC6QflX0OOjKjvITKrjR+u jnNr2+f8HwuWg23LpNyYpbSfKM3/jVAc5kTCnvk4EUdcKtkoD/sxgmWnZXgDcjWv bM3c97ahew12f16TLU0fb2sz2OL1eouKwuy90mfQVXCJY4PneK1wXKVQ2FNjRInM vcZ9bQedkLqrp2vP39EzkDxBi0wN1OD6ejDx5vW527KFHltyBd3MN0t36g5bUVrq Rg1nj2QHn2ZN7PhELKj1Asv2rIVKkby7i/lwchuVI8iogV7zIzOQy0145iUCm5az cup1QHleF1cKkLlz5x3kIKYiT2QX4sHsSgn1wGA2TV3MbqfaVLQ= =S7TZ -----END PGP SIGNATURE----- Merge tag 'renesas-arm-soc-for-v4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/soc Renesas ARM Based SoC Updates for v4.20 * Rework the PMIC IRQ line quirk to use DT rather than hard coded topology * Convert to SPDX identifiers * Convert to using %pOFn instead of device_node.name * Remove the no longer needed ARCH_SHMOBILE Kconfig symbol * RZ/G1N (r8a7744) SoC: Add basic SoC and debug-ll support * R-Car H1 (r8a7779) SoC: remove unused includes * tag 'renesas-arm-soc-for-v4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas: ARM: shmobile: Rework the PMIC IRQ line quirk ARM: debug-ll: Add support for r8a7744 ARM: shmobile: r8a7744: Basic SoC support ARM: shmobile: convert to SPDX identifiers ARM: shmobile: Convert to using %pOFn instead of device_node.name ARM: shmobile: Remove the ARCH_SHMOBILE Kconfig symbol ARM: shmobile: r8a7779: Remove unused includes Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
4561a42636
|
@ -940,12 +940,13 @@ choice
|
|||
|
||||
config DEBUG_RCAR_GEN2_SCIF0
|
||||
bool "Kernel low-level debugging messages via SCIF0 on R-Car Gen2 and RZ/G1"
|
||||
depends on ARCH_R8A7743 || ARCH_R8A7790 || ARCH_R8A7791 || \
|
||||
ARCH_R8A7792 || ARCH_R8A7793
|
||||
depends on ARCH_R8A7743 || ARCH_R8A7744 || ARCH_R8A7790 || \
|
||||
ARCH_R8A7791 || ARCH_R8A7792 || ARCH_R8A7793
|
||||
help
|
||||
Say Y here if you want kernel low-level debugging support
|
||||
via SCIF0 on Renesas RZ/G1M (R8A7743), R-Car H2 (R8A7790),
|
||||
M2-W (R8A7791), V2H (R8A7792), or M2-N (R8A7793).
|
||||
via SCIF0 on Renesas RZ/G1M (R8A7743), RZ/G1N (R8A7744),
|
||||
R-Car H2 (R8A7790), M2-W (R8A7791), V2H (R8A7792), or
|
||||
M2-N (R8A7793).
|
||||
|
||||
config DEBUG_RCAR_GEN2_SCIF1
|
||||
bool "Kernel low-level debugging messages via SCIF1 on R8A77470"
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
config ARCH_SHMOBILE
|
||||
bool
|
||||
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
config PM_RMOBILE
|
||||
bool
|
||||
select PM
|
||||
|
@ -30,7 +28,6 @@ config ARCH_RMOBILE
|
|||
menuconfig ARCH_RENESAS
|
||||
bool "Renesas ARM SoCs"
|
||||
depends on ARCH_MULTI_V7 && MMU
|
||||
select ARCH_SHMOBILE
|
||||
select ARM_GIC
|
||||
select GPIOLIB
|
||||
select HAVE_ARM_SCU if SMP
|
||||
|
@ -72,6 +69,11 @@ config ARCH_R8A7743
|
|||
select ARCH_RCAR_GEN2
|
||||
select ARM_ERRATA_798181 if SMP
|
||||
|
||||
config ARCH_R8A7744
|
||||
bool "RZ/G1N (R8A77440)"
|
||||
select ARCH_RCAR_GEN2
|
||||
select ARM_ERRATA_798181 if SMP
|
||||
|
||||
config ARCH_R8A7745
|
||||
bool "RZ/G1E (R8A77450)"
|
||||
select ARCH_RCAR_GEN2
|
||||
|
|
|
@ -1,17 +1,8 @@
|
|||
/*
|
||||
/* SPDX-License-Identifier: GPL-2.0+
|
||||
*
|
||||
* Shared SCU setup for mach-shmobile
|
||||
*
|
||||
* Copyright (C) 2012 Bastian Hecht
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR /PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
/*
|
||||
/* SPDX-License-Identifier: GPL-2.0
|
||||
*
|
||||
* SMP support for R-Mobile / SH-Mobile
|
||||
*
|
||||
* Copyright (C) 2010 Magnus Damm
|
||||
* Copyright (C) 2010 Takashi Yoshii
|
||||
*
|
||||
* Based on vexpress, Copyright (c) 2003 ARM Limited, All Rights Reserved
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/linkage.h>
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* SMP support for SoCs with SCU covered by mach-shmobile
|
||||
*
|
||||
* Copyright (C) 2013 Magnus Damm
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/delay.h>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* SMP support for R-Mobile / SH-Mobile
|
||||
*
|
||||
|
@ -5,10 +6,6 @@
|
|||
* Copyright (C) 2011 Paul Mundt
|
||||
*
|
||||
* Based on vexpress, Copyright (C) 2002 ARM Ltd, All Rights Reserved
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <asm/cacheflush.h>
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* R-Car Generation 2 Power management support
|
||||
*
|
||||
* Copyright (C) 2013 - 2015 Renesas Electronics Corporation
|
||||
* Copyright (C) 2011 Renesas Solutions Corp.
|
||||
* Copyright (C) 2011 Magnus Damm
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* rmobile power management support
|
||||
*
|
||||
|
@ -7,10 +8,6 @@
|
|||
*
|
||||
* based on pm-sh7372.c
|
||||
* Copyright (C) 2011 Magnus Damm
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
#include <linux/clk/renesas.h>
|
||||
#include <linux/console.h>
|
||||
|
@ -189,7 +186,7 @@ static void __init add_special_pd(struct device_node *np, enum pd_types type)
|
|||
return;
|
||||
}
|
||||
|
||||
pr_debug("Special PM domain %s type %d for %pOF\n", pd->name, type, np);
|
||||
pr_debug("Special PM domain %pOFn type %d for %pOF\n", pd, type, np);
|
||||
|
||||
special_pds[num_special_pds].pd = pd;
|
||||
special_pds[num_special_pds].type = type;
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
/*
|
||||
/* SPDX-License-Identifier: GPL-2.0
|
||||
*
|
||||
* Copyright (C) 2012 Renesas Solutions Corp.
|
||||
*
|
||||
* Kuninori Morimoto <morimoto.kuninori@renesas.com>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
#ifndef PM_RMOBILE_H
|
||||
#define PM_RMOBILE_H
|
||||
|
|
|
@ -23,11 +23,12 @@
|
|||
#include <linux/i2c.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/mfd/da9063/registers.h>
|
||||
|
||||
|
||||
#define IRQC_BASE 0xe61c0000
|
||||
#define IRQC_MONITOR 0x104 /* IRQn Signal Level Monitor Register */
|
||||
|
||||
|
@ -36,34 +37,45 @@
|
|||
/* start of DA9210 System Control and Event Registers */
|
||||
#define DA9210_REG_MASK_A 0x54
|
||||
|
||||
struct regulator_quirk {
|
||||
struct list_head list;
|
||||
const struct of_device_id *id;
|
||||
struct of_phandle_args irq_args;
|
||||
struct i2c_msg i2c_msg;
|
||||
bool shared; /* IRQ line is shared */
|
||||
};
|
||||
|
||||
static LIST_HEAD(quirk_list);
|
||||
static void __iomem *irqc;
|
||||
|
||||
/* first byte sets the memory pointer, following are consecutive reg values */
|
||||
static u8 da9063_irq_clr[] = { DA9063_REG_IRQ_MASK_A, 0xff, 0xff, 0xff, 0xff };
|
||||
static u8 da9210_irq_clr[] = { DA9210_REG_MASK_A, 0xff, 0xff };
|
||||
|
||||
static struct i2c_msg da9xxx_msgs[3] = {
|
||||
{
|
||||
.addr = 0x58,
|
||||
.len = ARRAY_SIZE(da9063_irq_clr),
|
||||
.buf = da9063_irq_clr,
|
||||
}, {
|
||||
.addr = 0x68,
|
||||
.len = ARRAY_SIZE(da9210_irq_clr),
|
||||
.buf = da9210_irq_clr,
|
||||
}, {
|
||||
.addr = 0x70,
|
||||
.len = ARRAY_SIZE(da9210_irq_clr),
|
||||
.buf = da9210_irq_clr,
|
||||
},
|
||||
static struct i2c_msg da9063_msg = {
|
||||
.len = ARRAY_SIZE(da9063_irq_clr),
|
||||
.buf = da9063_irq_clr,
|
||||
};
|
||||
|
||||
static struct i2c_msg da9210_msg = {
|
||||
.len = ARRAY_SIZE(da9210_irq_clr),
|
||||
.buf = da9210_irq_clr,
|
||||
};
|
||||
|
||||
static const struct of_device_id rcar_gen2_quirk_match[] = {
|
||||
{ .compatible = "dlg,da9063", .data = &da9063_msg },
|
||||
{ .compatible = "dlg,da9210", .data = &da9210_msg },
|
||||
{},
|
||||
};
|
||||
|
||||
static int regulator_quirk_notify(struct notifier_block *nb,
|
||||
unsigned long action, void *data)
|
||||
{
|
||||
struct regulator_quirk *pos, *tmp;
|
||||
struct device *dev = data;
|
||||
struct i2c_client *client;
|
||||
static bool done;
|
||||
int ret;
|
||||
u32 mon;
|
||||
|
||||
if (done)
|
||||
|
@ -80,17 +92,20 @@ static int regulator_quirk_notify(struct notifier_block *nb,
|
|||
client = to_i2c_client(dev);
|
||||
dev_dbg(dev, "Detected %s\n", client->name);
|
||||
|
||||
if ((client->addr == 0x58 && !strcmp(client->name, "da9063")) ||
|
||||
(client->addr == 0x68 && !strcmp(client->name, "da9210")) ||
|
||||
(client->addr == 0x70 && !strcmp(client->name, "da9210"))) {
|
||||
int ret, len;
|
||||
/*
|
||||
* Send message to all PMICs that share an IRQ line to deassert it.
|
||||
*
|
||||
* WARNING: This works only if all the PMICs are on the same I2C bus.
|
||||
*/
|
||||
list_for_each_entry(pos, &quirk_list, list) {
|
||||
if (!pos->shared)
|
||||
continue;
|
||||
|
||||
/* There are two DA9210 on Stout, one on the other boards. */
|
||||
len = of_machine_is_compatible("renesas,stout") ? 3 : 2;
|
||||
dev_info(&client->dev, "clearing %s@0x%02x interrupts\n",
|
||||
pos->id->compatible, pos->i2c_msg.addr);
|
||||
|
||||
dev_info(&client->dev, "clearing da9063/da9210 interrupts\n");
|
||||
ret = i2c_transfer(client->adapter, da9xxx_msgs, len);
|
||||
if (ret != len)
|
||||
ret = i2c_transfer(client->adapter, &pos->i2c_msg, 1);
|
||||
if (ret != 1)
|
||||
dev_err(&client->dev, "i2c error %d\n", ret);
|
||||
}
|
||||
|
||||
|
@ -103,6 +118,11 @@ static int regulator_quirk_notify(struct notifier_block *nb,
|
|||
remove:
|
||||
dev_info(dev, "IRQ2 is not asserted, removing quirk\n");
|
||||
|
||||
list_for_each_entry_safe(pos, tmp, &quirk_list, list) {
|
||||
list_del(&pos->list);
|
||||
kfree(pos);
|
||||
}
|
||||
|
||||
done = true;
|
||||
iounmap(irqc);
|
||||
return 0;
|
||||
|
@ -114,7 +134,12 @@ static struct notifier_block regulator_quirk_nb = {
|
|||
|
||||
static int __init rcar_gen2_regulator_quirk(void)
|
||||
{
|
||||
u32 mon;
|
||||
struct regulator_quirk *quirk, *pos, *tmp;
|
||||
struct of_phandle_args *argsa, *argsb;
|
||||
const struct of_device_id *id;
|
||||
struct device_node *np;
|
||||
u32 mon, addr;
|
||||
int ret;
|
||||
|
||||
if (!of_machine_is_compatible("renesas,koelsch") &&
|
||||
!of_machine_is_compatible("renesas,lager") &&
|
||||
|
@ -122,22 +147,78 @@ static int __init rcar_gen2_regulator_quirk(void)
|
|||
!of_machine_is_compatible("renesas,gose"))
|
||||
return -ENODEV;
|
||||
|
||||
for_each_matching_node_and_match(np, rcar_gen2_quirk_match, &id) {
|
||||
if (!of_device_is_available(np))
|
||||
break;
|
||||
|
||||
ret = of_property_read_u32(np, "reg", &addr);
|
||||
if (ret) /* Skip invalid entry and continue */
|
||||
continue;
|
||||
|
||||
quirk = kzalloc(sizeof(*quirk), GFP_KERNEL);
|
||||
if (!quirk) {
|
||||
ret = -ENOMEM;
|
||||
goto err_mem;
|
||||
}
|
||||
|
||||
argsa = &quirk->irq_args;
|
||||
memcpy(&quirk->i2c_msg, id->data, sizeof(quirk->i2c_msg));
|
||||
|
||||
quirk->id = id;
|
||||
quirk->i2c_msg.addr = addr;
|
||||
|
||||
ret = of_irq_parse_one(np, 0, argsa);
|
||||
if (ret) { /* Skip invalid entry and continue */
|
||||
kfree(quirk);
|
||||
continue;
|
||||
}
|
||||
|
||||
list_for_each_entry(pos, &quirk_list, list) {
|
||||
argsb = &pos->irq_args;
|
||||
|
||||
if (argsa->args_count != argsb->args_count)
|
||||
continue;
|
||||
|
||||
ret = memcmp(argsa->args, argsb->args,
|
||||
argsa->args_count *
|
||||
sizeof(argsa->args[0]));
|
||||
if (!ret) {
|
||||
pos->shared = true;
|
||||
quirk->shared = true;
|
||||
}
|
||||
}
|
||||
|
||||
list_add_tail(&quirk->list, &quirk_list);
|
||||
}
|
||||
|
||||
irqc = ioremap(IRQC_BASE, PAGE_SIZE);
|
||||
if (!irqc)
|
||||
return -ENOMEM;
|
||||
if (!irqc) {
|
||||
ret = -ENOMEM;
|
||||
goto err_mem;
|
||||
}
|
||||
|
||||
mon = ioread32(irqc + IRQC_MONITOR);
|
||||
if (mon & REGULATOR_IRQ_MASK) {
|
||||
pr_debug("%s: IRQ2 is not asserted, not installing quirk\n",
|
||||
__func__);
|
||||
iounmap(irqc);
|
||||
return 0;
|
||||
ret = 0;
|
||||
goto err_free;
|
||||
}
|
||||
|
||||
pr_info("IRQ2 is asserted, installing da9063/da9210 regulator quirk\n");
|
||||
|
||||
bus_register_notifier(&i2c_bus_type, ®ulator_quirk_nb);
|
||||
return 0;
|
||||
|
||||
err_free:
|
||||
iounmap(irqc);
|
||||
err_mem:
|
||||
list_for_each_entry_safe(pos, tmp, &quirk_list, list) {
|
||||
list_del(&pos->list);
|
||||
kfree(pos);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
arch_initcall(rcar_gen2_regulator_quirk);
|
||||
|
|
|
@ -7,9 +7,7 @@
|
|||
* Copyright (C) 2013 Cogent Embedded, Inc.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/irqchip.h>
|
||||
#include <linux/irqchip/arm-gic.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
static const struct of_device_id cpg_matches[] __initconst = {
|
||||
{ .compatible = "renesas,rcar-gen2-cpg-clocks", },
|
||||
{ .compatible = "renesas,r8a7743-cpg-mssr", .data = "extal" },
|
||||
{ .compatible = "renesas,r8a7744-cpg-mssr", .data = "extal" },
|
||||
{ .compatible = "renesas,r8a7790-cpg-mssr", .data = "extal" },
|
||||
{ .compatible = "renesas,r8a7791-cpg-mssr", .data = "extal" },
|
||||
{ .compatible = "renesas,r8a7793-cpg-mssr", .data = "extal" },
|
||||
|
@ -193,6 +194,7 @@ MACHINE_END
|
|||
|
||||
static const char * const rz_g1_boards_compat_dt[] __initconst = {
|
||||
"renesas,r8a7743",
|
||||
"renesas,r8a7744",
|
||||
"renesas,r8a7745",
|
||||
"renesas,r8a77470",
|
||||
NULL,
|
||||
|
|
|
@ -1,17 +1,9 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* SMP support for R-Mobile / SH-Mobile - sh73a0 portion
|
||||
*
|
||||
* Copyright (C) 2010 Magnus Damm
|
||||
* Copyright (C) 2010 Takashi Yoshii
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Suspend-to-RAM support code for SH-Mobile ARM
|
||||
*
|
||||
* Copyright (C) 2011 Magnus Damm
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/pm.h>
|
||||
|
|
|
@ -1,17 +1,9 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* SH-Mobile Timer
|
||||
*
|
||||
* Copyright (C) 2010 Magnus Damm
|
||||
* Copyright (C) 2002 - 2009 Paul Mundt
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/clocksource.h>
|
||||
|
|
Loading…
Reference in New Issue