All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] bsp: add SoC driver to brcmstb
@ 2016-03-11 18:39 Justin Chen
  2016-03-11 18:55   ` Joe Perches
  0 siblings, 1 reply; 5+ messages in thread
From: Justin Chen @ 2016-03-11 18:39 UTC (permalink / raw)
  To: linux-kernel
  Cc: bcm-kernel-feedback-list, f.fainelli, linux-arm-kernel, arnd,
	Justin Chen

From: Justin Chen <justin.chen@broadcom.com>

Value of soc_dev_attributes:
family = chip family id
soc_id = product id
revision = product revision

Signed-off-by: Justin Chen <justin.chen@broadcom.com>
---
 arch/arm/mach-bcm/Kconfig    |    1 +
 drivers/soc/brcmstb/common.c |   58 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
index 7ef1214..b95ea11 100644
--- a/arch/arm/mach-bcm/Kconfig
+++ b/arch/arm/mach-bcm/Kconfig
@@ -179,6 +179,7 @@ config ARCH_BRCMSTB
 	select ARCH_DMA_ADDR_T_64BIT if ARM_LPAE
 	select ARCH_WANT_OPTIONAL_GPIOLIB
 	select SOC_BRCMSTB
+	select SOC_BUS
 	help
 	  Say Y if you intend to run the kernel on a Broadcom ARM-based STB
 	  chipset.
diff --git a/drivers/soc/brcmstb/common.c b/drivers/soc/brcmstb/common.c
index c262c02..dc394c0 100644
--- a/drivers/soc/brcmstb/common.c
+++ b/drivers/soc/brcmstb/common.c
@@ -12,10 +12,18 @@
  * GNU General Public License for more details.
  */
 
+#include <linux/io.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/slab.h>
+#include <linux/soc/brcmstb/brcmstb.h>
+#include <linux/sys_soc.h>
 
 #include <soc/brcmstb/common.h>
 
+static u32 family_id;
+static u32 product_id;
+
 static const struct of_device_id brcmstb_machine_match[] = {
 	{ .compatible = "brcm,brcmstb", },
 	{ }
@@ -31,3 +39,53 @@ bool soc_is_brcmstb(void)
 
 	return of_match_node(brcmstb_machine_match, root) != NULL;
 }
+
+static const struct of_device_id sun_top_ctrl_match[] = {
+	{ .compatible = "brcm,brcmstb-sun-top-ctrl", },
+	{ }
+};
+
+static int __init brcmstb_soc_device_init(void)
+{
+	struct soc_device_attribute *soc_dev_attr;
+	struct soc_device *soc_dev;
+	struct device_node *sun_top_ctrl;
+	void __iomem *sun_top_ctrl_base;
+
+	sun_top_ctrl = of_find_matching_node(NULL, sun_top_ctrl_match);
+	if (!sun_top_ctrl)
+		return -ENODEV;
+
+	sun_top_ctrl_base = of_iomap(sun_top_ctrl, 0);
+	if (!sun_top_ctrl_base)
+		return -ENODEV;
+
+	family_id = readl(sun_top_ctrl_base);
+	product_id = readl(sun_top_ctrl_base + 0x4);
+
+	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	if (!soc_dev_attr)
+		return -ENOMEM;
+
+	soc_dev_attr->family = kasprintf(GFP_KERNEL, "%x",
+					family_id >> 28 ?
+					family_id >> 16 : family_id >> 8);
+	soc_dev_attr->soc_id = kasprintf(GFP_KERNEL, "%x",
+					product_id >> 28 ?
+					product_id >> 16 : product_id >> 8);
+	soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c%d",
+				    (char)(((product_id & 0xff) >> 4) + 65),
+				     product_id & 0xf);
+
+	soc_dev = soc_device_register(soc_dev_attr);
+	if (IS_ERR(soc_dev)) {
+		kfree(soc_dev_attr->family);
+		kfree(soc_dev_attr->soc_id);
+		kfree(soc_dev_attr->revision);
+		kfree(soc_dev_attr);
+		return -1;
+	}
+
+	return 0;
+}
+arch_initcall(brcmstb_soc_device_init);
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] bsp: add SoC driver to brcmstb
  2016-03-11 18:39 [PATCH v2] bsp: add SoC driver to brcmstb Justin Chen
@ 2016-03-11 18:55   ` Joe Perches
  0 siblings, 0 replies; 5+ messages in thread
From: Joe Perches @ 2016-03-11 18:55 UTC (permalink / raw)
  To: Justin Chen, linux-kernel
  Cc: bcm-kernel-feedback-list, f.fainelli, linux-arm-kernel, arnd,
	Justin Chen

On Fri, 2016-03-11 at 10:39 -0800, Justin Chen wrote:
> From: Justin Chen <justin.chen@broadcom.com>
> 
> Value of soc_dev_attributes:
> family = chip family id
> soc_id = product id
> revision = product revision
[]
> diff --git a/drivers/soc/brcmstb/common.c b/drivers/soc/brcmstb/common.c
[]
> +static int __init brcmstb_soc_device_init(void)
> +{
> +	struct soc_device_attribute *soc_dev_attr;
> +	struct soc_device *soc_dev;
> +	struct device_node *sun_top_ctrl;
> +	void __iomem *sun_top_ctrl_base;
> +
> +	sun_top_ctrl = of_find_matching_node(NULL, sun_top_ctrl_match);
> +	if (!sun_top_ctrl)
> +		return -ENODEV;
> +
> +	sun_top_ctrl_base = of_iomap(sun_top_ctrl, 0);
> +	if (!sun_top_ctrl_base)
> +		return -ENODEV;
> +
> +	family_id = readl(sun_top_ctrl_base);
> +	product_id = readl(sun_top_ctrl_base + 0x4);
> +
> +	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
> +	if (!soc_dev_attr)
> +		return -ENOMEM;
> +
> +	soc_dev_attr->family = kasprintf(GFP_KERNEL, "%x",
> +					family_id >> 28 ?
> +					family_id >> 16 : family_id >> 8);
> +	soc_dev_attr->soc_id = kasprintf(GFP_KERNEL, "%x",
> +					product_id >> 28 ?
> +					product_id >> 16 : product_id >> 8);
> +	soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c%d",
> +				    (char)(((product_id & 0xff) >> 4) + 65),
> +				     product_id & 0xf);

This might be easier to read as:

	soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c%d"
					   ((product_id & 0xf0) >> 4) + 'A',
					   product_id & 0xf);
> +
> +	soc_dev = soc_device_register(soc_dev_attr);
> +	if (IS_ERR(soc_dev)) {
> +		kfree(soc_dev_attr->family);
> +		kfree(soc_dev_attr->soc_id);
> +		kfree(soc_dev_attr->revision);
> +		kfree(soc_dev_attr);
> +		return -1;

Mixing GENERIC_ERRNO types and fixed values seems odd.
Is -EPERM the correct return here?  Maybe -ENODEV?

> +	}
> +
> +	return 0;
> +}
> +arch_initcall(brcmstb_soc_device_init);

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2] bsp: add SoC driver to brcmstb
@ 2016-03-11 18:55   ` Joe Perches
  0 siblings, 0 replies; 5+ messages in thread
From: Joe Perches @ 2016-03-11 18:55 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, 2016-03-11 at 10:39 -0800, Justin Chen wrote:
> From: Justin Chen <justin.chen@broadcom.com>
> 
> Value of soc_dev_attributes:
> family = chip family id
> soc_id = product id
> revision = product revision
[]
> diff --git a/drivers/soc/brcmstb/common.c b/drivers/soc/brcmstb/common.c
[]
> +static int __init brcmstb_soc_device_init(void)
> +{
> +	struct soc_device_attribute *soc_dev_attr;
> +	struct soc_device *soc_dev;
> +	struct device_node *sun_top_ctrl;
> +	void __iomem *sun_top_ctrl_base;
> +
> +	sun_top_ctrl = of_find_matching_node(NULL, sun_top_ctrl_match);
> +	if (!sun_top_ctrl)
> +		return -ENODEV;
> +
> +	sun_top_ctrl_base = of_iomap(sun_top_ctrl, 0);
> +	if (!sun_top_ctrl_base)
> +		return -ENODEV;
> +
> +	family_id = readl(sun_top_ctrl_base);
> +	product_id = readl(sun_top_ctrl_base + 0x4);
> +
> +	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
> +	if (!soc_dev_attr)
> +		return -ENOMEM;
> +
> +	soc_dev_attr->family = kasprintf(GFP_KERNEL, "%x",
> +					family_id >> 28 ?
> +					family_id >> 16 : family_id >> 8);
> +	soc_dev_attr->soc_id = kasprintf(GFP_KERNEL, "%x",
> +					product_id >> 28 ?
> +					product_id >> 16 : product_id >> 8);
> +	soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c%d",
> +				????(char)(((product_id & 0xff) >> 4) + 65),
> +				?????product_id & 0xf);

This might be easier to read as:

	soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c%d"
					   ((product_id & 0xf0) >> 4) + 'A',
					   product_id & 0xf);
> +
> +	soc_dev = soc_device_register(soc_dev_attr);
> +	if (IS_ERR(soc_dev)) {
> +		kfree(soc_dev_attr->family);
> +		kfree(soc_dev_attr->soc_id);
> +		kfree(soc_dev_attr->revision);
> +		kfree(soc_dev_attr);
> +		return -1;

Mixing GENERIC_ERRNO types and fixed values seems odd.
Is -EPERM the correct return here?  Maybe -ENODEV?

> +	}
> +
> +	return 0;
> +}
> +arch_initcall(brcmstb_soc_device_init);

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2] bsp: add SoC driver to brcmstb
@ 2016-03-04 23:00 ` Justin Chen
  0 siblings, 0 replies; 5+ messages in thread
From: Justin Chen @ 2016-03-04 23:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: bcm-kernel-feedback-list, f.fainelli, linux-arm-kernel, rjui,
	sbranden, computersforpeace, gregory.0xf0, Justin Chen

From: Justin Chen <justin.chen@broadcom.com>

Value of soc_dev_attributes:
family = chip family id
soc_id = product id
revision = product revision

Signed-off-by: Justin Chen <justin.chen@broadcom.com>
---
 arch/arm/mach-bcm/Kconfig    |    1 +
 drivers/soc/brcmstb/common.c |   58 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
index 7ef1214..b95ea11 100644
--- a/arch/arm/mach-bcm/Kconfig
+++ b/arch/arm/mach-bcm/Kconfig
@@ -179,6 +179,7 @@ config ARCH_BRCMSTB
 	select ARCH_DMA_ADDR_T_64BIT if ARM_LPAE
 	select ARCH_WANT_OPTIONAL_GPIOLIB
 	select SOC_BRCMSTB
+	select SOC_BUS
 	help
 	  Say Y if you intend to run the kernel on a Broadcom ARM-based STB
 	  chipset.
diff --git a/drivers/soc/brcmstb/common.c b/drivers/soc/brcmstb/common.c
index c262c02..dc394c0 100644
--- a/drivers/soc/brcmstb/common.c
+++ b/drivers/soc/brcmstb/common.c
@@ -12,10 +12,18 @@
  * GNU General Public License for more details.
  */
 
+#include <linux/io.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/slab.h>
+#include <linux/soc/brcmstb/brcmstb.h>
+#include <linux/sys_soc.h>
 
 #include <soc/brcmstb/common.h>
 
+static u32 family_id;
+static u32 product_id;
+
 static const struct of_device_id brcmstb_machine_match[] = {
 	{ .compatible = "brcm,brcmstb", },
 	{ }
@@ -31,3 +39,53 @@ bool soc_is_brcmstb(void)
 
 	return of_match_node(brcmstb_machine_match, root) != NULL;
 }
+
+static const struct of_device_id sun_top_ctrl_match[] = {
+	{ .compatible = "brcm,brcmstb-sun-top-ctrl", },
+	{ }
+};
+
+static int __init brcmstb_soc_device_init(void)
+{
+	struct soc_device_attribute *soc_dev_attr;
+	struct soc_device *soc_dev;
+	struct device_node *sun_top_ctrl;
+	void __iomem *sun_top_ctrl_base;
+
+	sun_top_ctrl = of_find_matching_node(NULL, sun_top_ctrl_match);
+	if (!sun_top_ctrl)
+		return -ENODEV;
+
+	sun_top_ctrl_base = of_iomap(sun_top_ctrl, 0);
+	if (!sun_top_ctrl_base)
+		return -ENODEV;
+
+	family_id = readl(sun_top_ctrl_base);
+	product_id = readl(sun_top_ctrl_base + 0x4);
+
+	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	if (!soc_dev_attr)
+		return -ENOMEM;
+
+	soc_dev_attr->family = kasprintf(GFP_KERNEL, "%x",
+					family_id >> 28 ?
+					family_id >> 16 : family_id >> 8);
+	soc_dev_attr->soc_id = kasprintf(GFP_KERNEL, "%x",
+					product_id >> 28 ?
+					product_id >> 16 : product_id >> 8);
+	soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c%d",
+				    (char)(((product_id & 0xff) >> 4) + 65),
+				     product_id & 0xf);
+
+	soc_dev = soc_device_register(soc_dev_attr);
+	if (IS_ERR(soc_dev)) {
+		kfree(soc_dev_attr->family);
+		kfree(soc_dev_attr->soc_id);
+		kfree(soc_dev_attr->revision);
+		kfree(soc_dev_attr);
+		return -1;
+	}
+
+	return 0;
+}
+arch_initcall(brcmstb_soc_device_init);
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2] bsp: add SoC driver to brcmstb
@ 2016-03-04 23:00 ` Justin Chen
  0 siblings, 0 replies; 5+ messages in thread
From: Justin Chen @ 2016-03-04 23:00 UTC (permalink / raw)
  To: linux-arm-kernel

From: Justin Chen <justin.chen@broadcom.com>

Value of soc_dev_attributes:
family = chip family id
soc_id = product id
revision = product revision

Signed-off-by: Justin Chen <justin.chen@broadcom.com>
---
 arch/arm/mach-bcm/Kconfig    |    1 +
 drivers/soc/brcmstb/common.c |   58 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
index 7ef1214..b95ea11 100644
--- a/arch/arm/mach-bcm/Kconfig
+++ b/arch/arm/mach-bcm/Kconfig
@@ -179,6 +179,7 @@ config ARCH_BRCMSTB
 	select ARCH_DMA_ADDR_T_64BIT if ARM_LPAE
 	select ARCH_WANT_OPTIONAL_GPIOLIB
 	select SOC_BRCMSTB
+	select SOC_BUS
 	help
 	  Say Y if you intend to run the kernel on a Broadcom ARM-based STB
 	  chipset.
diff --git a/drivers/soc/brcmstb/common.c b/drivers/soc/brcmstb/common.c
index c262c02..dc394c0 100644
--- a/drivers/soc/brcmstb/common.c
+++ b/drivers/soc/brcmstb/common.c
@@ -12,10 +12,18 @@
  * GNU General Public License for more details.
  */
 
+#include <linux/io.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/slab.h>
+#include <linux/soc/brcmstb/brcmstb.h>
+#include <linux/sys_soc.h>
 
 #include <soc/brcmstb/common.h>
 
+static u32 family_id;
+static u32 product_id;
+
 static const struct of_device_id brcmstb_machine_match[] = {
 	{ .compatible = "brcm,brcmstb", },
 	{ }
@@ -31,3 +39,53 @@ bool soc_is_brcmstb(void)
 
 	return of_match_node(brcmstb_machine_match, root) != NULL;
 }
+
+static const struct of_device_id sun_top_ctrl_match[] = {
+	{ .compatible = "brcm,brcmstb-sun-top-ctrl", },
+	{ }
+};
+
+static int __init brcmstb_soc_device_init(void)
+{
+	struct soc_device_attribute *soc_dev_attr;
+	struct soc_device *soc_dev;
+	struct device_node *sun_top_ctrl;
+	void __iomem *sun_top_ctrl_base;
+
+	sun_top_ctrl = of_find_matching_node(NULL, sun_top_ctrl_match);
+	if (!sun_top_ctrl)
+		return -ENODEV;
+
+	sun_top_ctrl_base = of_iomap(sun_top_ctrl, 0);
+	if (!sun_top_ctrl_base)
+		return -ENODEV;
+
+	family_id = readl(sun_top_ctrl_base);
+	product_id = readl(sun_top_ctrl_base + 0x4);
+
+	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	if (!soc_dev_attr)
+		return -ENOMEM;
+
+	soc_dev_attr->family = kasprintf(GFP_KERNEL, "%x",
+					family_id >> 28 ?
+					family_id >> 16 : family_id >> 8);
+	soc_dev_attr->soc_id = kasprintf(GFP_KERNEL, "%x",
+					product_id >> 28 ?
+					product_id >> 16 : product_id >> 8);
+	soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c%d",
+				    (char)(((product_id & 0xff) >> 4) + 65),
+				     product_id & 0xf);
+
+	soc_dev = soc_device_register(soc_dev_attr);
+	if (IS_ERR(soc_dev)) {
+		kfree(soc_dev_attr->family);
+		kfree(soc_dev_attr->soc_id);
+		kfree(soc_dev_attr->revision);
+		kfree(soc_dev_attr);
+		return -1;
+	}
+
+	return 0;
+}
+arch_initcall(brcmstb_soc_device_init);
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-03-11 18:55 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-11 18:39 [PATCH v2] bsp: add SoC driver to brcmstb Justin Chen
2016-03-11 18:55 ` Joe Perches
2016-03-11 18:55   ` Joe Perches
  -- strict thread matches above, loose matches on Subject: below --
2016-03-04 23:00 Justin Chen
2016-03-04 23:00 ` Justin Chen

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.