forked from luck/tmp_suning_uos_patched
Reset controller updates for v5.9
This tag moves the reset-simple header out of drivers/reset for use by drivers outside of drivers/reset, adds a .reset() callback to reset-simple, converts i.MX reset bindings to json-schema, fixes a compile warning in the reset-intel-gw driver, and replaces some HTTP links with HTTPS ones in comments. -----BEGIN PGP SIGNATURE----- iI0EABYIADUWIQRRO6F6WdpH1R0vGibVhaclGDdiwAUCXxWSARcccC56YWJlbEBw ZW5ndXRyb25peC5kZQAKCRDVhaclGDdiwAP6AP4ld+W8CqwjEw+tkTVoCcGpE3v4 rmeEao1MtXtttiG9bAEAl2y794/zu0cXI0UEYqbhuqDYG/z8uXoBRvTGEP7UqQc= =tScp -----END PGP SIGNATURE----- Merge tag 'reset-for-v5.9' of git://git.pengutronix.de/pza/linux into arm/drivers Reset controller updates for v5.9 This tag moves the reset-simple header out of drivers/reset for use by drivers outside of drivers/reset, adds a .reset() callback to reset-simple, converts i.MX reset bindings to json-schema, fixes a compile warning in the reset-intel-gw driver, and replaces some HTTP links with HTTPS ones in comments. * tag 'reset-for-v5.9' of git://git.pengutronix.de/pza/linux: reset: Replace HTTP links with HTTPS ones reset: intel: fix a compile warning about REG_OFFSET redefined dt-bindings: reset: Convert i.MX7 reset to json-schema dt-bindings: reset: Convert i.MX reset to json-schema reset: simple: Add reset callback reset: Move reset-simple header out of drivers/reset Link: https://lore.kernel.org/r/b718f052e38abbaac599d80645376b75e54aa5bd.camel@pengutronix.de Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
9e586c8431
|
@ -1,49 +0,0 @@
|
|||
Freescale i.MX System Reset Controller
|
||||
======================================
|
||||
|
||||
Please also refer to reset.txt in this directory for common reset
|
||||
controller binding usage.
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be "fsl,<chip>-src"
|
||||
- reg: should be register base and length as documented in the
|
||||
datasheet
|
||||
- interrupts: Should contain SRC interrupt and CPU WDOG interrupt,
|
||||
in this order.
|
||||
- #reset-cells: 1, see below
|
||||
|
||||
example:
|
||||
|
||||
src: src@20d8000 {
|
||||
compatible = "fsl,imx6q-src";
|
||||
reg = <0x020d8000 0x4000>;
|
||||
interrupts = <0 91 0x04 0 96 0x04>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
Specifying reset lines connected to IP modules
|
||||
==============================================
|
||||
|
||||
The system reset controller can be used to reset the GPU, VPU,
|
||||
IPU, and OpenVG IP modules on i.MX5 and i.MX6 ICs. Those device
|
||||
nodes should specify the reset line on the SRC in their resets
|
||||
property, containing a phandle to the SRC device node and a
|
||||
RESET_INDEX specifying which module to reset, as described in
|
||||
reset.txt
|
||||
|
||||
example:
|
||||
|
||||
ipu1: ipu@2400000 {
|
||||
resets = <&src 2>;
|
||||
};
|
||||
ipu2: ipu@2800000 {
|
||||
resets = <&src 4>;
|
||||
};
|
||||
|
||||
The following RESET_INDEX values are valid for i.MX5:
|
||||
GPU_RESET 0
|
||||
VPU_RESET 1
|
||||
IPU1_RESET 2
|
||||
OPEN_VG_RESET 3
|
||||
The following additional RESET_INDEX value is valid for i.MX6:
|
||||
IPU2_RESET 4
|
82
Documentation/devicetree/bindings/reset/fsl,imx-src.yaml
Normal file
82
Documentation/devicetree/bindings/reset/fsl,imx-src.yaml
Normal file
|
@ -0,0 +1,82 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/reset/fsl,imx-src.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Freescale i.MX System Reset Controller
|
||||
|
||||
maintainers:
|
||||
- Philipp Zabel <p.zabel@pengutronix.de>
|
||||
|
||||
description: |
|
||||
The system reset controller can be used to reset the GPU, VPU,
|
||||
IPU, and OpenVG IP modules on i.MX5 and i.MX6 ICs. Those device
|
||||
nodes should specify the reset line on the SRC in their resets
|
||||
property, containing a phandle to the SRC device node and a
|
||||
RESET_INDEX specifying which module to reset, as described in
|
||||
reset.txt
|
||||
|
||||
The following RESET_INDEX values are valid for i.MX5:
|
||||
GPU_RESET 0
|
||||
VPU_RESET 1
|
||||
IPU1_RESET 2
|
||||
OPEN_VG_RESET 3
|
||||
The following additional RESET_INDEX value is valid for i.MX6:
|
||||
IPU2_RESET 4
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
- const: "fsl,imx51-src"
|
||||
- items:
|
||||
- const: "fsl,imx50-src"
|
||||
- const: "fsl,imx51-src"
|
||||
- items:
|
||||
- const: "fsl,imx53-src"
|
||||
- const: "fsl,imx51-src"
|
||||
- items:
|
||||
- const: "fsl,imx6q-src"
|
||||
- const: "fsl,imx51-src"
|
||||
- items:
|
||||
- const: "fsl,imx6sx-src"
|
||||
- const: "fsl,imx51-src"
|
||||
- items:
|
||||
- const: "fsl,imx6sl-src"
|
||||
- const: "fsl,imx51-src"
|
||||
- items:
|
||||
- const: "fsl,imx6ul-src"
|
||||
- const: "fsl,imx51-src"
|
||||
- items:
|
||||
- const: "fsl,imx6sll-src"
|
||||
- const: "fsl,imx51-src"
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
items:
|
||||
- description: SRC interrupt
|
||||
- description: CPU WDOG interrupts out of SRC
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
|
||||
'#reset-cells':
|
||||
const: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- '#reset-cells'
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
reset-controller@73fd0000 {
|
||||
compatible = "fsl,imx51-src";
|
||||
reg = <0x73fd0000 0x4000>;
|
||||
interrupts = <75>;
|
||||
#reset-cells = <1>;
|
||||
};
|
|
@ -1,56 +0,0 @@
|
|||
Freescale i.MX7 System Reset Controller
|
||||
======================================
|
||||
|
||||
Please also refer to reset.txt in this directory for common reset
|
||||
controller binding usage.
|
||||
|
||||
Required properties:
|
||||
- compatible:
|
||||
- For i.MX7 SoCs should be "fsl,imx7d-src", "syscon"
|
||||
- For i.MX8MQ SoCs should be "fsl,imx8mq-src", "syscon"
|
||||
- For i.MX8MM SoCs should be "fsl,imx8mm-src", "fsl,imx8mq-src", "syscon"
|
||||
- For i.MX8MN SoCs should be "fsl,imx8mn-src", "fsl,imx8mq-src", "syscon"
|
||||
- For i.MX8MP SoCs should be "fsl,imx8mp-src", "syscon"
|
||||
- reg: should be register base and length as documented in the
|
||||
datasheet
|
||||
- interrupts: Should contain SRC interrupt
|
||||
- #reset-cells: 1, see below
|
||||
|
||||
example:
|
||||
|
||||
src: reset-controller@30390000 {
|
||||
compatible = "fsl,imx7d-src", "syscon";
|
||||
reg = <0x30390000 0x2000>;
|
||||
interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
|
||||
Specifying reset lines connected to IP modules
|
||||
==============================================
|
||||
|
||||
The system reset controller can be used to reset various set of
|
||||
peripherals. Device nodes that need access to reset lines should
|
||||
specify them as a reset phandle in their corresponding node as
|
||||
specified in reset.txt.
|
||||
|
||||
Example:
|
||||
|
||||
pcie: pcie@33800000 {
|
||||
|
||||
...
|
||||
|
||||
resets = <&src IMX7_RESET_PCIEPHY>,
|
||||
<&src IMX7_RESET_PCIE_CTRL_APPS_EN>;
|
||||
reset-names = "pciephy", "apps";
|
||||
|
||||
...
|
||||
};
|
||||
|
||||
|
||||
For list of all valid reset indices see
|
||||
<dt-bindings/reset/imx7-reset.h> for i.MX7,
|
||||
<dt-bindings/reset/imx8mq-reset.h> for i.MX8MQ and
|
||||
<dt-bindings/reset/imx8mq-reset.h> for i.MX8MM and
|
||||
<dt-bindings/reset/imx8mq-reset.h> for i.MX8MN and
|
||||
<dt-bindings/reset/imx8mp-reset.h> for i.MX8MP
|
58
Documentation/devicetree/bindings/reset/fsl,imx7-src.yaml
Normal file
58
Documentation/devicetree/bindings/reset/fsl,imx7-src.yaml
Normal file
|
@ -0,0 +1,58 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/reset/fsl,imx7-src.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Freescale i.MX7 System Reset Controller
|
||||
|
||||
maintainers:
|
||||
- Andrey Smirnov <andrew.smirnov@gmail.com>
|
||||
|
||||
description: |
|
||||
The system reset controller can be used to reset various set of
|
||||
peripherals. Device nodes that need access to reset lines should
|
||||
specify them as a reset phandle in their corresponding node as
|
||||
specified in reset.txt.
|
||||
|
||||
For list of all valid reset indices see
|
||||
<dt-bindings/reset/imx7-reset.h> for i.MX7,
|
||||
<dt-bindings/reset/imx8mq-reset.h> for i.MX8MQ, i.MX8MM and i.MX8MN,
|
||||
<dt-bindings/reset/imx8mp-reset.h> for i.MX8MP.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
items:
|
||||
- enum:
|
||||
- fsl,imx7d-src
|
||||
- fsl,imx8mq-src
|
||||
- fsl,imx8mp-src
|
||||
- const: syscon
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
'#reset-cells':
|
||||
const: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- '#reset-cells'
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
reset-controller@30390000 {
|
||||
compatible = "fsl,imx7d-src", "syscon";
|
||||
reg = <0x30390000 0x2000>;
|
||||
interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#reset-cells = <1>;
|
||||
};
|
|
@ -15,9 +15,9 @@
|
|||
#define RCU_RST_STAT 0x0024
|
||||
#define RCU_RST_REQ 0x0048
|
||||
|
||||
#define REG_OFFSET GENMASK(31, 16)
|
||||
#define BIT_OFFSET GENMASK(15, 8)
|
||||
#define STAT_BIT_OFFSET GENMASK(7, 0)
|
||||
#define REG_OFFSET_MASK GENMASK(31, 16)
|
||||
#define BIT_OFFSET_MASK GENMASK(15, 8)
|
||||
#define STAT_BIT_OFFSET_MASK GENMASK(7, 0)
|
||||
|
||||
#define to_reset_data(x) container_of(x, struct intel_reset_data, rcdev)
|
||||
|
||||
|
@ -51,11 +51,11 @@ static u32 id_to_reg_and_bit_offsets(struct intel_reset_data *data,
|
|||
unsigned long id, u32 *rst_req,
|
||||
u32 *req_bit, u32 *stat_bit)
|
||||
{
|
||||
*rst_req = FIELD_GET(REG_OFFSET, id);
|
||||
*req_bit = FIELD_GET(BIT_OFFSET, id);
|
||||
*rst_req = FIELD_GET(REG_OFFSET_MASK, id);
|
||||
*req_bit = FIELD_GET(BIT_OFFSET_MASK, id);
|
||||
|
||||
if (data->soc_data->legacy)
|
||||
*stat_bit = FIELD_GET(STAT_BIT_OFFSET, id);
|
||||
*stat_bit = FIELD_GET(STAT_BIT_OFFSET_MASK, id);
|
||||
else
|
||||
*stat_bit = *req_bit;
|
||||
|
||||
|
@ -141,14 +141,14 @@ static int intel_reset_xlate(struct reset_controller_dev *rcdev,
|
|||
if (spec->args[1] > 31)
|
||||
return -EINVAL;
|
||||
|
||||
id = FIELD_PREP(REG_OFFSET, spec->args[0]);
|
||||
id |= FIELD_PREP(BIT_OFFSET, spec->args[1]);
|
||||
id = FIELD_PREP(REG_OFFSET_MASK, spec->args[0]);
|
||||
id |= FIELD_PREP(BIT_OFFSET_MASK, spec->args[1]);
|
||||
|
||||
if (data->soc_data->legacy) {
|
||||
if (spec->args[2] > 31)
|
||||
return -EINVAL;
|
||||
|
||||
id |= FIELD_PREP(STAT_BIT_OFFSET, spec->args[2]);
|
||||
id |= FIELD_PREP(STAT_BIT_OFFSET_MASK, spec->args[2]);
|
||||
}
|
||||
|
||||
return id;
|
||||
|
@ -210,11 +210,11 @@ static int intel_reset_probe(struct platform_device *pdev)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
data->reboot_id = FIELD_PREP(REG_OFFSET, rb_id[0]);
|
||||
data->reboot_id |= FIELD_PREP(BIT_OFFSET, rb_id[1]);
|
||||
data->reboot_id = FIELD_PREP(REG_OFFSET_MASK, rb_id[0]);
|
||||
data->reboot_id |= FIELD_PREP(BIT_OFFSET_MASK, rb_id[1]);
|
||||
|
||||
if (data->soc_data->legacy)
|
||||
data->reboot_id |= FIELD_PREP(STAT_BIT_OFFSET, rb_id[2]);
|
||||
data->reboot_id |= FIELD_PREP(STAT_BIT_OFFSET_MASK, rb_id[2]);
|
||||
|
||||
data->restart_nb.notifier_call = intel_reset_restart_handler;
|
||||
data->restart_nb.priority = 128;
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
* Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
@ -18,10 +19,9 @@
|
|||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/reset-controller.h>
|
||||
#include <linux/reset/reset-simple.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include "reset-simple.h"
|
||||
|
||||
static inline struct reset_simple_data *
|
||||
to_reset_simple_data(struct reset_controller_dev *rcdev)
|
||||
{
|
||||
|
@ -64,6 +64,24 @@ static int reset_simple_deassert(struct reset_controller_dev *rcdev,
|
|||
return reset_simple_update(rcdev, id, false);
|
||||
}
|
||||
|
||||
static int reset_simple_reset(struct reset_controller_dev *rcdev,
|
||||
unsigned long id)
|
||||
{
|
||||
struct reset_simple_data *data = to_reset_simple_data(rcdev);
|
||||
int ret;
|
||||
|
||||
if (!data->reset_us)
|
||||
return -ENOTSUPP;
|
||||
|
||||
ret = reset_simple_assert(rcdev, id);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
usleep_range(data->reset_us, data->reset_us * 2);
|
||||
|
||||
return reset_simple_deassert(rcdev, id);
|
||||
}
|
||||
|
||||
static int reset_simple_status(struct reset_controller_dev *rcdev,
|
||||
unsigned long id)
|
||||
{
|
||||
|
@ -81,6 +99,7 @@ static int reset_simple_status(struct reset_controller_dev *rcdev,
|
|||
const struct reset_control_ops reset_simple_ops = {
|
||||
.assert = reset_simple_assert,
|
||||
.deassert = reset_simple_deassert,
|
||||
.reset = reset_simple_reset,
|
||||
.status = reset_simple_status,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(reset_simple_ops);
|
||||
|
|
|
@ -11,13 +11,12 @@
|
|||
#include <linux/of_address.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/reset-controller.h>
|
||||
#include <linux/reset/reset-simple.h>
|
||||
#include <linux/reset/socfpga.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include "reset-simple.h"
|
||||
|
||||
#define SOCFPGA_NR_BANKS 8
|
||||
|
||||
static int a10_reset_init(struct device_node *np)
|
||||
|
|
|
@ -14,13 +14,12 @@
|
|||
#include <linux/of_address.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/reset-controller.h>
|
||||
#include <linux/reset/reset-simple.h>
|
||||
#include <linux/reset/sunxi.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include "reset-simple.h"
|
||||
|
||||
static int sunxi_reset_init(struct device_node *np)
|
||||
{
|
||||
struct reset_simple_data *data;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* TI SYSCON regmap reset driver
|
||||
*
|
||||
* Copyright (C) 2015-2016 Texas Instruments Incorporated - http://www.ti.com/
|
||||
* Copyright (C) 2015-2016 Texas Instruments Incorporated - https://www.ti.com/
|
||||
* Andrew F. Davis <afd@ti.com>
|
||||
* Suman Anna <afd@ti.com>
|
||||
*
|
||||
|
|
|
@ -9,8 +9,7 @@
|
|||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/reset.h>
|
||||
|
||||
#include "reset-simple.h"
|
||||
#include <linux/reset/reset-simple.h>
|
||||
|
||||
#define MAX_CLKS 2
|
||||
#define MAX_RSTS 2
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
/*
|
||||
* TI Syscon Reset definitions
|
||||
*
|
||||
* Copyright (C) 2015-2016 Texas Instruments Incorporated - http://www.ti.com/
|
||||
* Copyright (C) 2015-2016 Texas Instruments Incorporated - https://www.ti.com/
|
||||
*/
|
||||
|
||||
#ifndef __DT_BINDINGS_RESET_TI_SYSCON_H__
|
||||
|
|
|
@ -27,6 +27,12 @@
|
|||
* @status_active_low: if true, bits read back as cleared while the reset is
|
||||
* asserted. Otherwise, bits read back as set while the
|
||||
* reset is asserted.
|
||||
* @reset_us: Minimum delay in microseconds needed that needs to be
|
||||
* waited for between an assert and a deassert to reset the
|
||||
* device. If multiple consumers with different delay
|
||||
* requirements are connected to this controller, it must
|
||||
* be the largest minimum delay. 0 means that such a delay is
|
||||
* unknown and the reset operation is unsupported.
|
||||
*/
|
||||
struct reset_simple_data {
|
||||
spinlock_t lock;
|
||||
|
@ -34,6 +40,7 @@ struct reset_simple_data {
|
|||
struct reset_controller_dev rcdev;
|
||||
bool active_low;
|
||||
bool status_active_low;
|
||||
unsigned int reset_us;
|
||||
};
|
||||
|
||||
extern const struct reset_control_ops reset_simple_ops;
|
Loading…
Reference in New Issue
Block a user