Merge tag 'armsoc-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC platform updates from Arnd Bergmann: "A couple of platforms change hands in the MAINTAINERS file: - Linus Walleij lists himself for the ARM Reference platforms: versatile, vexpress, integrator and realview. He has been the main contributor for these for a while, and makes it official now. - Vladimir Zapolskiy takes over the LPC18xx platform from Joachim Eastwood - Manivannan Sadhasivam becomes a secondary maintainer for the Actions Semi machines - Nicolas Ferre lists updates the MAINTAINER listing for the AT91 platform: Ludovic Desroches is now a co-maintainer for the platform, and several other people (Claudiu Beznea, Cristian Birsan, Eugen Hristev, Codrin Ciubotariu) take over individual device drivers. Thanks everyone for working on this, and welcome to the new maintainers! The "virt" platform on qemy or kvm can now be used in big-endian mode without additional tricks, thanks to Jason Donenfeld. Once again, we gain support for another NXP i.MX6 variant, this time it's the i.MX 6ULZ 32-bit single-core version. On arm64, we add support for two SoCs from Renesas: RZ/G2E (r8a774c0) and RZ/G2M (r8a774a1). These are described as microcontrollers on the manufacturer website, but appear to be rather powerful. The RZ/G2M is used on the reference board for the CIP Super Long Term Support (SLTS) Linux Kernels" * tag 'armsoc-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (54 commits) MAINTAINERS: Assign myself as a maintainer of ARM/LPC18XX architecture arm64: exynos: Enable generic power domain support MAINTAINERS: remove non-exsiting email address of Baoyou MAINTAINERS: fix pattern in ARM/Synaptics berlin SoC section MAINTAINERS: Drop dt-bindings/genpd/k2g.h ARM: samsung: Limit SAMSUNG_PM_CHECK config option to non-Exynos platforms arm64: actions: Enable PINCTRL in platforms Kconfig MAINTAINERS: Add entry for Actions Semi Owl SoCs DMA driver MAINTAINERS: Add entry for Actions Semiconductor Owl I2C driver MAINTAINERS: Update clock binding entry for Actions Semi Owl SoCs ARM: imx: add i.mx6ulz msl support ARM: Assume maintainership of ARM reference designs ARM: support big-endian for the virt architecture MAINTAINERS: sdhci: move the Microchip entry to proper location MAINTAINERS: move former ATMEL entries to proper MICROCHIP location MAINTAINERS: remove the / ATMEL string from MICROCHIP entries MAINTAINERS: iio: add co-maintainer to SAMA5D2-compatible ADC driver MAINTAINERS: pwm: add entry for Microchip pwm driver MAINTAINERS: dmaengine: add files to Microchip dma entry MAINTAINERS: USB: change maintainer for Microchip USBA gadget driver ...
This commit is contained in:
@@ -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
|
||||
@@ -78,6 +75,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>
|
||||
|
Reference in New Issue
Block a user