From: chenfeng <puck.chen-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org>
To: xuyiping <xuyiping-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org>,
p.zabel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
pawel.moll-5wv7dgnIgG8@public.gmane.org,
xuwei5-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org,
haojian.zhuang-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
zhangfei.gao-H32Fclmsjq1BDgjK7y7TUQ@public.gmane.org
Cc: bintian.wang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
dan.zhao-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org,
suzhuangluan-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org,
w.f-hv44wF8Li93QT0dZR+AlfA@public.gmane.org
Subject: Re: [PATCH V2 3/3] reset: hi6220: Reset driver for hisilicon hi6220 SoC
Date: Mon, 14 Sep 2015 10:02:47 +0800 [thread overview]
Message-ID: <55F62AC7.7020804@hisilicon.com> (raw)
In-Reply-To: <55F3C0DB.5070800-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org>
On 2015/9/12 14:06, xuyiping wrote:
>
>
> On 2015/9/11 16:18, Chen Feng wrote:
>> Add reset driver for hi6220-hikey board,this driver supply deassert
>> of IP. on hi6220 SoC.
>>
>> Signed-off-by: Chen Feng <puck.chen-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org>
>> ---
>> drivers/reset/Kconfig | 1 +
>> drivers/reset/Makefile | 1 +
>> drivers/reset/hisilicon/Kconfig | 5 ++
>> drivers/reset/hisilicon/Makefile | 1 +
>> drivers/reset/hisilicon/hi6220_reset.c | 118 +++++++++++++++++++++++++++++++++
>> 5 files changed, 126 insertions(+)
>> create mode 100644 drivers/reset/hisilicon/Kconfig
>> create mode 100644 drivers/reset/hisilicon/Makefile
>> create mode 100644 drivers/reset/hisilicon/hi6220_reset.c
>>
>> diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
>> index 0615f50..df37212 100644
>> --- a/drivers/reset/Kconfig
>> +++ b/drivers/reset/Kconfig
>> @@ -13,3 +13,4 @@ menuconfig RESET_CONTROLLER
>> If unsure, say no.
>>
>> source "drivers/reset/sti/Kconfig"
>> +source "drivers/reset/hisilicon/Kconfig"
>> diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
>> index 157d421..331d7b2 100644
>> --- a/drivers/reset/Makefile
>> +++ b/drivers/reset/Makefile
>> @@ -3,3 +3,4 @@ obj-$(CONFIG_ARCH_SOCFPGA) += reset-socfpga.o
>> obj-$(CONFIG_ARCH_BERLIN) += reset-berlin.o
>> obj-$(CONFIG_ARCH_SUNXI) += reset-sunxi.o
>> obj-$(CONFIG_ARCH_STI) += sti/
>> +obj-$(CONFIG_ARCH_HISI) += hisilicon/
>> diff --git a/drivers/reset/hisilicon/Kconfig b/drivers/reset/hisilicon/Kconfig
>> new file mode 100644
>> index 0000000..26bf95a
>> --- /dev/null
>> +++ b/drivers/reset/hisilicon/Kconfig
>> @@ -0,0 +1,5 @@
>> +config COMMON_RESET_HI6220
>> + tristate "Hi6220 Reset Driver"
>> + depends on (ARCH_HISI && RESET_CONTROLLER)
>> + help
>> + Build the Hisilicon Hi6220 reset driver.
>> diff --git a/drivers/reset/hisilicon/Makefile b/drivers/reset/hisilicon/Makefile
>> new file mode 100644
>> index 0000000..c932f86
>> --- /dev/null
>> +++ b/drivers/reset/hisilicon/Makefile
>> @@ -0,0 +1 @@
>> +obj-$(CONFIG_COMMON_RESET_HI6220) += hi6220_reset.o
>> diff --git a/drivers/reset/hisilicon/hi6220_reset.c b/drivers/reset/hisilicon/hi6220_reset.c
>> new file mode 100644
>> index 0000000..097133d
>> --- /dev/null
>> +++ b/drivers/reset/hisilicon/hi6220_reset.c
>> @@ -0,0 +1,118 @@
>> +/*
>> + * Hisilicon Hi6220 reset controller driver
>> + *
>> + * Copyright (c) 2015 Hisilicon Limited.
>> + *
>> + * Author: Feng Chen <puck.chen-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org>
>> + *
>> + * 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/bitops.h>
>> +#include <linux/io.h>
>> +#include <linux/of.h>
>> +#include <linux/of_address.h>
>> +#include <linux/reset-controller.h>
>> +#include <linux/reset.h>
>> +#include <linux/sizes.h>
>> +#include <linux/slab.h>
>> +
>> +#define ASSET_OFFSET 0x300
>> +#define DEASSET_OFFSET 0x304
>> +
>> +struct hi6220_reset_data {
>> + spinlock_t reset_lock; /*device spin-lock*/
>> + void __iomem *src_base;
>> + void __iomem *asset_base;
>> + void __iomem *deasset_base;
>> + struct reset_controller_dev rc_dev;
>> +};
>> +
>> +static int hi6220_reset_assert(struct reset_controller_dev *rc_dev,
>> + unsigned long idx)
>> +{
>> + struct hi6220_reset_data *data = container_of(rc_dev,
>> + struct hi6220_reset_data,
>> + rc_dev);
>> +
>> + unsigned long flags;
>> + int bank = idx >> 8;
>> + int offset = idx & 0xff;
>> +
>> + spin_lock_irqsave(&data->reset_lock, flags);
>
> the spin_lock looks useless.
>
> it is not a "read and write" register.
>
>> + writel(BIT(offset), data->asset_base + (bank * 0x10));
>> +
>> + spin_unlock_irqrestore(&data->reset_lock, flags);
>> +
>> + return 0;
>> +}
>> +
>> +static int hi6220_reset_deassert(struct reset_controller_dev *rc_dev,
>> + unsigned long idx)
>> +{
>> + struct hi6220_reset_data *data = container_of(rc_dev,
>> + struct hi6220_reset_data,
>> + rc_dev);
>> +
>> + unsigned long flags;
>> + int bank = idx >> 8;
>> + int offset = idx & 0xff;
>
> no need to check the idx scope ?
>
Yes, I think this has already been checked at reset framework.
>> + spin_lock_irqsave(&data->reset_lock, flags);
>> +
>> + writel(BIT(offset), data->deasset_base + (bank * 0x10));
>> +
>> + spin_unlock_irqrestore(&data->reset_lock, flags);
>> +
>> + return 0;
>> +}
>> +
>> +static struct reset_control_ops hi6220_reset_ops = {
>> + .assert = hi6220_reset_assert,
>> + .deassert = hi6220_reset_deassert,
>> +};
>> +
>> +static int __init hi6220_reset_init(void)
>> +{
>> + int ret;
>> + struct device_node *np;
>> + struct hi6220_reset_data *data;
>> +
>> + data = kzalloc(sizeof(*data), GFP_KERNEL);
>> + if (!data)
>> + return -ENOMEM;
>> +
>> + np = of_find_compatible_node(NULL, NULL, "hisilicon,hi6220_reset_ctl");
>> + if (!np) {
>> + ret = -ENXIO;
>> + goto err_alloc;
>> + }
>> + spin_lock_init(&data->reset_lock);
>> + data->src_base = of_iomap(np, 0);
>> + if (!data->src_base) {
>> + ret = -ENOMEM;
>> + goto err_alloc;
>> + }
>> +
>> + data->asset_base = data->src_base + ASSET_OFFSET;
>> + data->deasset_base = data->src_base + DEASSET_OFFSET;
>> + data->rc_dev.owner = THIS_MODULE;
>> + data->rc_dev.nr_resets = SZ_4K;
>> + data->rc_dev.ops = &hi6220_reset_ops;
>> + data->rc_dev.of_node = np;
>> +
>> + if (IS_ENABLED(CONFIG_RESET_CONTROLLER))
>> + reset_controller_register(&data->rc_dev);
>> +
>> + return 0;
>> +
>> +err_alloc:
>
>
>
>> + kfree(data);
>> + return ret;
>> +}
>> +
>> +postcore_initcall(hi6220_reset_init);
>>
>
>
> .
>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: chenfeng <puck.chen@hisilicon.com>
To: xuyiping <xuyiping@hisilicon.com>, <p.zabel@pengutronix.de>,
<linux-kernel@vger.kernel.org>, <robh+dt@kernel.org>,
<pawel.moll@arm.com>, <xuwei5@hisilicon.com>,
<haojian.zhuang@linaro.org>, <zhangfei.gao@foxmail.com>
Cc: <bintian.wang@huawei.com>, <devicetree@vger.kernel.org>,
<dan.zhao@hisilicon.com>, <suzhuangluan@hisilicon.com>,
<w.f@huawei.com>
Subject: Re: [PATCH V2 3/3] reset: hi6220: Reset driver for hisilicon hi6220 SoC
Date: Mon, 14 Sep 2015 10:02:47 +0800 [thread overview]
Message-ID: <55F62AC7.7020804@hisilicon.com> (raw)
In-Reply-To: <55F3C0DB.5070800@hisilicon.com>
On 2015/9/12 14:06, xuyiping wrote:
>
>
> On 2015/9/11 16:18, Chen Feng wrote:
>> Add reset driver for hi6220-hikey board,this driver supply deassert
>> of IP. on hi6220 SoC.
>>
>> Signed-off-by: Chen Feng <puck.chen@hisilicon.com>
>> ---
>> drivers/reset/Kconfig | 1 +
>> drivers/reset/Makefile | 1 +
>> drivers/reset/hisilicon/Kconfig | 5 ++
>> drivers/reset/hisilicon/Makefile | 1 +
>> drivers/reset/hisilicon/hi6220_reset.c | 118 +++++++++++++++++++++++++++++++++
>> 5 files changed, 126 insertions(+)
>> create mode 100644 drivers/reset/hisilicon/Kconfig
>> create mode 100644 drivers/reset/hisilicon/Makefile
>> create mode 100644 drivers/reset/hisilicon/hi6220_reset.c
>>
>> diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
>> index 0615f50..df37212 100644
>> --- a/drivers/reset/Kconfig
>> +++ b/drivers/reset/Kconfig
>> @@ -13,3 +13,4 @@ menuconfig RESET_CONTROLLER
>> If unsure, say no.
>>
>> source "drivers/reset/sti/Kconfig"
>> +source "drivers/reset/hisilicon/Kconfig"
>> diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
>> index 157d421..331d7b2 100644
>> --- a/drivers/reset/Makefile
>> +++ b/drivers/reset/Makefile
>> @@ -3,3 +3,4 @@ obj-$(CONFIG_ARCH_SOCFPGA) += reset-socfpga.o
>> obj-$(CONFIG_ARCH_BERLIN) += reset-berlin.o
>> obj-$(CONFIG_ARCH_SUNXI) += reset-sunxi.o
>> obj-$(CONFIG_ARCH_STI) += sti/
>> +obj-$(CONFIG_ARCH_HISI) += hisilicon/
>> diff --git a/drivers/reset/hisilicon/Kconfig b/drivers/reset/hisilicon/Kconfig
>> new file mode 100644
>> index 0000000..26bf95a
>> --- /dev/null
>> +++ b/drivers/reset/hisilicon/Kconfig
>> @@ -0,0 +1,5 @@
>> +config COMMON_RESET_HI6220
>> + tristate "Hi6220 Reset Driver"
>> + depends on (ARCH_HISI && RESET_CONTROLLER)
>> + help
>> + Build the Hisilicon Hi6220 reset driver.
>> diff --git a/drivers/reset/hisilicon/Makefile b/drivers/reset/hisilicon/Makefile
>> new file mode 100644
>> index 0000000..c932f86
>> --- /dev/null
>> +++ b/drivers/reset/hisilicon/Makefile
>> @@ -0,0 +1 @@
>> +obj-$(CONFIG_COMMON_RESET_HI6220) += hi6220_reset.o
>> diff --git a/drivers/reset/hisilicon/hi6220_reset.c b/drivers/reset/hisilicon/hi6220_reset.c
>> new file mode 100644
>> index 0000000..097133d
>> --- /dev/null
>> +++ b/drivers/reset/hisilicon/hi6220_reset.c
>> @@ -0,0 +1,118 @@
>> +/*
>> + * Hisilicon Hi6220 reset controller driver
>> + *
>> + * Copyright (c) 2015 Hisilicon Limited.
>> + *
>> + * Author: Feng Chen <puck.chen@hisilicon.com>
>> + *
>> + * 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/bitops.h>
>> +#include <linux/io.h>
>> +#include <linux/of.h>
>> +#include <linux/of_address.h>
>> +#include <linux/reset-controller.h>
>> +#include <linux/reset.h>
>> +#include <linux/sizes.h>
>> +#include <linux/slab.h>
>> +
>> +#define ASSET_OFFSET 0x300
>> +#define DEASSET_OFFSET 0x304
>> +
>> +struct hi6220_reset_data {
>> + spinlock_t reset_lock; /*device spin-lock*/
>> + void __iomem *src_base;
>> + void __iomem *asset_base;
>> + void __iomem *deasset_base;
>> + struct reset_controller_dev rc_dev;
>> +};
>> +
>> +static int hi6220_reset_assert(struct reset_controller_dev *rc_dev,
>> + unsigned long idx)
>> +{
>> + struct hi6220_reset_data *data = container_of(rc_dev,
>> + struct hi6220_reset_data,
>> + rc_dev);
>> +
>> + unsigned long flags;
>> + int bank = idx >> 8;
>> + int offset = idx & 0xff;
>> +
>> + spin_lock_irqsave(&data->reset_lock, flags);
>
> the spin_lock looks useless.
>
> it is not a "read and write" register.
>
>> + writel(BIT(offset), data->asset_base + (bank * 0x10));
>> +
>> + spin_unlock_irqrestore(&data->reset_lock, flags);
>> +
>> + return 0;
>> +}
>> +
>> +static int hi6220_reset_deassert(struct reset_controller_dev *rc_dev,
>> + unsigned long idx)
>> +{
>> + struct hi6220_reset_data *data = container_of(rc_dev,
>> + struct hi6220_reset_data,
>> + rc_dev);
>> +
>> + unsigned long flags;
>> + int bank = idx >> 8;
>> + int offset = idx & 0xff;
>
> no need to check the idx scope ?
>
Yes, I think this has already been checked at reset framework.
>> + spin_lock_irqsave(&data->reset_lock, flags);
>> +
>> + writel(BIT(offset), data->deasset_base + (bank * 0x10));
>> +
>> + spin_unlock_irqrestore(&data->reset_lock, flags);
>> +
>> + return 0;
>> +}
>> +
>> +static struct reset_control_ops hi6220_reset_ops = {
>> + .assert = hi6220_reset_assert,
>> + .deassert = hi6220_reset_deassert,
>> +};
>> +
>> +static int __init hi6220_reset_init(void)
>> +{
>> + int ret;
>> + struct device_node *np;
>> + struct hi6220_reset_data *data;
>> +
>> + data = kzalloc(sizeof(*data), GFP_KERNEL);
>> + if (!data)
>> + return -ENOMEM;
>> +
>> + np = of_find_compatible_node(NULL, NULL, "hisilicon,hi6220_reset_ctl");
>> + if (!np) {
>> + ret = -ENXIO;
>> + goto err_alloc;
>> + }
>> + spin_lock_init(&data->reset_lock);
>> + data->src_base = of_iomap(np, 0);
>> + if (!data->src_base) {
>> + ret = -ENOMEM;
>> + goto err_alloc;
>> + }
>> +
>> + data->asset_base = data->src_base + ASSET_OFFSET;
>> + data->deasset_base = data->src_base + DEASSET_OFFSET;
>> + data->rc_dev.owner = THIS_MODULE;
>> + data->rc_dev.nr_resets = SZ_4K;
>> + data->rc_dev.ops = &hi6220_reset_ops;
>> + data->rc_dev.of_node = np;
>> +
>> + if (IS_ENABLED(CONFIG_RESET_CONTROLLER))
>> + reset_controller_register(&data->rc_dev);
>> +
>> + return 0;
>> +
>> +err_alloc:
>
>
>
>> + kfree(data);
>> + return ret;
>> +}
>> +
>> +postcore_initcall(hi6220_reset_init);
>>
>
>
> .
>
next prev parent reply other threads:[~2015-09-14 2:02 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-11 8:18 [PATCH V2 1/3] arm64: dts: Add reset dts config for Hisilicon Hi6220 SoC Chen Feng
2015-09-11 8:18 ` Chen Feng
2015-09-11 8:18 ` [PATCH V2 2/3] reset: hisilicon: document hisi-hi6220 reset controllers bindings Chen Feng
2015-09-11 8:18 ` Chen Feng
[not found] ` <1441959518-178696-1-git-send-email-puck.chen-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org>
2015-09-11 8:18 ` [PATCH V2 3/3] reset: hi6220: Reset driver for hisilicon hi6220 SoC Chen Feng
2015-09-11 8:18 ` Chen Feng
2015-09-11 8:41 ` Arnd Bergmann
2015-09-14 2:02 ` chenfeng
2015-09-14 2:02 ` chenfeng
2015-09-12 6:06 ` xuyiping
2015-09-12 6:06 ` xuyiping
[not found] ` <55F3C0DB.5070800-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org>
2015-09-14 2:02 ` chenfeng [this message]
2015-09-14 2:02 ` chenfeng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55F62AC7.7020804@hisilicon.com \
--to=puck.chen-c8/m+/jpzteamjb+lgu22q@public.gmane.org \
--cc=bintian.wang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=dan.zhao-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=haojian.zhuang-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=p.zabel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
--cc=pawel.moll-5wv7dgnIgG8@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=suzhuangluan-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org \
--cc=w.f-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=xuwei5-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org \
--cc=xuyiping-C8/M+/jPZTeaMJb+Lgu22Q@public.gmane.org \
--cc=zhangfei.gao-H32Fclmsjq1BDgjK7y7TUQ@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.