All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC][PATCH] pstore: use DT reserved-memory bindings
@ 2016-07-30  1:16 ` Kees Cook
  0 siblings, 0 replies; 6+ messages in thread
From: Kees Cook @ 2016-07-30  1:16 UTC (permalink / raw)
  To: Rob Herring; +Cc: linux-kernel, devicetree, Greg Hackmann, Arnd Bergmann

Instead of a ramoops-specific node, use a child node of /reserved-memory.
This requires that of_platform_populate() be called for the node, though,
since it does not have its own "compatible" property.

Suggested-by: Rob Herring <robh@kernel.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
---
Here's what I've got for moving ramoops under /reserved-memory... still
feels like a bit of a hack.
---
 Documentation/devicetree/bindings/misc/ramoops.txt | 48 ----------------------
 .../bindings/reserved-memory/ramoops.txt           | 48 ++++++++++++++++++++++
 Documentation/ramoops.txt                          |  2 +-
 drivers/of/platform.c                              |  5 +++
 fs/pstore/ram.c                                    | 12 +-----
 5 files changed, 56 insertions(+), 59 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/misc/ramoops.txt
 create mode 100644 Documentation/devicetree/bindings/reserved-memory/ramoops.txt

diff --git a/Documentation/devicetree/bindings/misc/ramoops.txt b/Documentation/devicetree/bindings/misc/ramoops.txt
deleted file mode 100644
index cd02cec67d38..000000000000
--- a/Documentation/devicetree/bindings/misc/ramoops.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-Ramoops oops/panic logger
-=========================
-
-ramoops provides persistent RAM storage for oops and panics, so they can be
-recovered after a reboot. It is a backend to pstore, so this node is named
-"ramoops" after the backend, rather than "pstore" which is the subsystem.
-
-Parts of this storage may be set aside for other persistent log buffers, such
-as kernel log messages, or for optional ECC error-correction data.  The total
-size of these optional buffers must fit in the reserved region.
-
-Any remaining space will be used for a circular buffer of oops and panic
-records.  These records have a configurable size, with a size of 0 indicating
-that they should be disabled.
-
-At least one of "record-size", "console-size", "ftrace-size", or "pmsg-size"
-must be set non-zero, but are otherwise optional as listed below.
-
-
-Required properties:
-
-- compatible: must be "ramoops"
-
-- memory-region: phandle to a region of memory that is preserved between
-  reboots
-
-
-Optional properties:
-
-- ecc-size: enables ECC support and specifies ECC buffer size in bytes
-  (defaults to 0: no ECC)
-
-- record-size: maximum size in bytes of each dump done on oops/panic
-  (defaults to 0: disabled)
-
-- console-size: size in bytes of log buffer reserved for kernel messages
-  (defaults to 0: disabled)
-
-- ftrace-size: size in bytes of log buffer reserved for function tracing and
-  profiling (defaults to 0: disabled)
-
-- pmsg-size: size in bytes of log buffer reserved for userspace messages
-  (defaults to 0: disabled)
-
-- unbuffered: if present, use unbuffered mappings to map the reserved region
-  (defaults to buffered mappings)
-
-- no-dump-oops: if present, only dump panics (defaults to panics and oops)
diff --git a/Documentation/devicetree/bindings/reserved-memory/ramoops.txt b/Documentation/devicetree/bindings/reserved-memory/ramoops.txt
new file mode 100644
index 000000000000..e81f821a2135
--- /dev/null
+++ b/Documentation/devicetree/bindings/reserved-memory/ramoops.txt
@@ -0,0 +1,48 @@
+Ramoops oops/panic logger
+=========================
+
+ramoops provides persistent RAM storage for oops and panics, so they can be
+recovered after a reboot. This is a child-node of "/reserved-memory", and
+is named "ramoops" after the backend, rather than "pstore" which is the
+subsystem.
+
+Parts of this storage may be set aside for other persistent log buffers, such
+as kernel log messages, or for optional ECC error-correction data.  The total
+size of these optional buffers must fit in the reserved region.
+
+Any remaining space will be used for a circular buffer of oops and panic
+records.  These records have a configurable size, with a size of 0 indicating
+that they should be disabled.
+
+At least one of "record-size", "console-size", "ftrace-size", or "pmsg-size"
+must be set non-zero, but are otherwise optional as listed below.
+
+
+Required properties:
+
+- compatible: must be "ramoops"
+
+- reg: region of memory that is preserved between reboots
+
+
+Optional properties:
+
+- ecc-size: enables ECC support and specifies ECC buffer size in bytes
+  (defaults to 0: no ECC)
+
+- record-size: maximum size in bytes of each dump done on oops/panic
+  (defaults to 0: disabled)
+
+- console-size: size in bytes of log buffer reserved for kernel messages
+  (defaults to 0: disabled)
+
+- ftrace-size: size in bytes of log buffer reserved for function tracing and
+  profiling (defaults to 0: disabled)
+
+- pmsg-size: size in bytes of log buffer reserved for userspace messages
+  (defaults to 0: disabled)
+
+- unbuffered: if present, use unbuffered mappings to map the reserved region
+  (defaults to buffered mappings)
+
+- no-dump-oops: if present, only dump panics (defaults to panics and oops)
diff --git a/Documentation/ramoops.txt b/Documentation/ramoops.txt
index 9264bcab4099..deaf07cbf484 100644
--- a/Documentation/ramoops.txt
+++ b/Documentation/ramoops.txt
@@ -55,7 +55,7 @@ Setting the ramoops parameters can be done in 3 different manners:
  region at 128 MB boundary:
  "mem=128M ramoops.mem_address=0x8000000 ramoops.ecc=1"
  2. Use Device Tree bindings, as described in
- Documentation/device-tree/bindings/misc/ramoops.txt.
+ Documentation/device-tree/bindings/reserved-memory/ramoops.txt.
  3. Use a platform device and set the platform data. The parameters can then
  be set through that platform data. An example of doing that is:
 
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 16e8daffac06..c07adf72bb8e 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -356,6 +356,11 @@ static int of_platform_bus_create(struct device_node *bus,
 	void *platform_data = NULL;
 	int rc = 0;
 
+	/* Always populate reserved-memory nodes. */
+	if (strict && strcmp(bus->full_name, "/reserved-memory") == 0) {
+		return of_platform_populate(bus, matches, lookup, parent);
+	}
+
 	/* Make sure it has a compatible property */
 	if (strict && (!of_get_property(bus, "compatible", NULL))) {
 		pr_debug("%s() - skipping %s, no compatible prop\n",
diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
index 47516a794011..af5cee0c2156 100644
--- a/fs/pstore/ram.c
+++ b/fs/pstore/ram.c
@@ -486,24 +486,16 @@ static int ramoops_parse_dt(struct platform_device *pdev,
 			    struct ramoops_platform_data *pdata)
 {
 	struct device_node *of_node = pdev->dev.of_node;
-	struct device_node *mem_region;
 	struct resource res;
 	u32 value;
 	int ret;
 
 	dev_dbg(&pdev->dev, "using Device Tree\n");
 
-	mem_region = of_parse_phandle(of_node, "memory-region", 0);
-	if (!mem_region) {
-		dev_err(&pdev->dev, "no memory-region phandle\n");
-		return -ENODEV;
-	}
-
-	ret = of_address_to_resource(mem_region, 0, &res);
-	of_node_put(mem_region);
+	ret = of_address_to_resource(of_node, 0, &res);
 	if (ret) {
 		dev_err(&pdev->dev,
-			"failed to translate memory-region to resource: %d\n",
+			"failed to translate reserved-memory to resource: %d\n",
 			ret);
 		return ret;
 	}
-- 
2.7.4


-- 
Kees Cook
Brillo & Chrome OS Security

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

* [RFC][PATCH] pstore: use DT reserved-memory bindings
@ 2016-07-30  1:16 ` Kees Cook
  0 siblings, 0 replies; 6+ messages in thread
From: Kees Cook @ 2016-07-30  1:16 UTC (permalink / raw)
  To: Rob Herring
  Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Greg Hackmann, Arnd Bergmann

Instead of a ramoops-specific node, use a child node of /reserved-memory.
This requires that of_platform_populate() be called for the node, though,
since it does not have its own "compatible" property.

Suggested-by: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Signed-off-by: Kees Cook <keescook-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
---
Here's what I've got for moving ramoops under /reserved-memory... still
feels like a bit of a hack.
---
 Documentation/devicetree/bindings/misc/ramoops.txt | 48 ----------------------
 .../bindings/reserved-memory/ramoops.txt           | 48 ++++++++++++++++++++++
 Documentation/ramoops.txt                          |  2 +-
 drivers/of/platform.c                              |  5 +++
 fs/pstore/ram.c                                    | 12 +-----
 5 files changed, 56 insertions(+), 59 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/misc/ramoops.txt
 create mode 100644 Documentation/devicetree/bindings/reserved-memory/ramoops.txt

diff --git a/Documentation/devicetree/bindings/misc/ramoops.txt b/Documentation/devicetree/bindings/misc/ramoops.txt
deleted file mode 100644
index cd02cec67d38..000000000000
--- a/Documentation/devicetree/bindings/misc/ramoops.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-Ramoops oops/panic logger
-=========================
-
-ramoops provides persistent RAM storage for oops and panics, so they can be
-recovered after a reboot. It is a backend to pstore, so this node is named
-"ramoops" after the backend, rather than "pstore" which is the subsystem.
-
-Parts of this storage may be set aside for other persistent log buffers, such
-as kernel log messages, or for optional ECC error-correction data.  The total
-size of these optional buffers must fit in the reserved region.
-
-Any remaining space will be used for a circular buffer of oops and panic
-records.  These records have a configurable size, with a size of 0 indicating
-that they should be disabled.
-
-At least one of "record-size", "console-size", "ftrace-size", or "pmsg-size"
-must be set non-zero, but are otherwise optional as listed below.
-
-
-Required properties:
-
-- compatible: must be "ramoops"
-
-- memory-region: phandle to a region of memory that is preserved between
-  reboots
-
-
-Optional properties:
-
-- ecc-size: enables ECC support and specifies ECC buffer size in bytes
-  (defaults to 0: no ECC)
-
-- record-size: maximum size in bytes of each dump done on oops/panic
-  (defaults to 0: disabled)
-
-- console-size: size in bytes of log buffer reserved for kernel messages
-  (defaults to 0: disabled)
-
-- ftrace-size: size in bytes of log buffer reserved for function tracing and
-  profiling (defaults to 0: disabled)
-
-- pmsg-size: size in bytes of log buffer reserved for userspace messages
-  (defaults to 0: disabled)
-
-- unbuffered: if present, use unbuffered mappings to map the reserved region
-  (defaults to buffered mappings)
-
-- no-dump-oops: if present, only dump panics (defaults to panics and oops)
diff --git a/Documentation/devicetree/bindings/reserved-memory/ramoops.txt b/Documentation/devicetree/bindings/reserved-memory/ramoops.txt
new file mode 100644
index 000000000000..e81f821a2135
--- /dev/null
+++ b/Documentation/devicetree/bindings/reserved-memory/ramoops.txt
@@ -0,0 +1,48 @@
+Ramoops oops/panic logger
+=========================
+
+ramoops provides persistent RAM storage for oops and panics, so they can be
+recovered after a reboot. This is a child-node of "/reserved-memory", and
+is named "ramoops" after the backend, rather than "pstore" which is the
+subsystem.
+
+Parts of this storage may be set aside for other persistent log buffers, such
+as kernel log messages, or for optional ECC error-correction data.  The total
+size of these optional buffers must fit in the reserved region.
+
+Any remaining space will be used for a circular buffer of oops and panic
+records.  These records have a configurable size, with a size of 0 indicating
+that they should be disabled.
+
+At least one of "record-size", "console-size", "ftrace-size", or "pmsg-size"
+must be set non-zero, but are otherwise optional as listed below.
+
+
+Required properties:
+
+- compatible: must be "ramoops"
+
+- reg: region of memory that is preserved between reboots
+
+
+Optional properties:
+
+- ecc-size: enables ECC support and specifies ECC buffer size in bytes
+  (defaults to 0: no ECC)
+
+- record-size: maximum size in bytes of each dump done on oops/panic
+  (defaults to 0: disabled)
+
+- console-size: size in bytes of log buffer reserved for kernel messages
+  (defaults to 0: disabled)
+
+- ftrace-size: size in bytes of log buffer reserved for function tracing and
+  profiling (defaults to 0: disabled)
+
+- pmsg-size: size in bytes of log buffer reserved for userspace messages
+  (defaults to 0: disabled)
+
+- unbuffered: if present, use unbuffered mappings to map the reserved region
+  (defaults to buffered mappings)
+
+- no-dump-oops: if present, only dump panics (defaults to panics and oops)
diff --git a/Documentation/ramoops.txt b/Documentation/ramoops.txt
index 9264bcab4099..deaf07cbf484 100644
--- a/Documentation/ramoops.txt
+++ b/Documentation/ramoops.txt
@@ -55,7 +55,7 @@ Setting the ramoops parameters can be done in 3 different manners:
  region at 128 MB boundary:
  "mem=128M ramoops.mem_address=0x8000000 ramoops.ecc=1"
  2. Use Device Tree bindings, as described in
- Documentation/device-tree/bindings/misc/ramoops.txt.
+ Documentation/device-tree/bindings/reserved-memory/ramoops.txt.
  3. Use a platform device and set the platform data. The parameters can then
  be set through that platform data. An example of doing that is:
 
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 16e8daffac06..c07adf72bb8e 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -356,6 +356,11 @@ static int of_platform_bus_create(struct device_node *bus,
 	void *platform_data = NULL;
 	int rc = 0;
 
+	/* Always populate reserved-memory nodes. */
+	if (strict && strcmp(bus->full_name, "/reserved-memory") == 0) {
+		return of_platform_populate(bus, matches, lookup, parent);
+	}
+
 	/* Make sure it has a compatible property */
 	if (strict && (!of_get_property(bus, "compatible", NULL))) {
 		pr_debug("%s() - skipping %s, no compatible prop\n",
diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
index 47516a794011..af5cee0c2156 100644
--- a/fs/pstore/ram.c
+++ b/fs/pstore/ram.c
@@ -486,24 +486,16 @@ static int ramoops_parse_dt(struct platform_device *pdev,
 			    struct ramoops_platform_data *pdata)
 {
 	struct device_node *of_node = pdev->dev.of_node;
-	struct device_node *mem_region;
 	struct resource res;
 	u32 value;
 	int ret;
 
 	dev_dbg(&pdev->dev, "using Device Tree\n");
 
-	mem_region = of_parse_phandle(of_node, "memory-region", 0);
-	if (!mem_region) {
-		dev_err(&pdev->dev, "no memory-region phandle\n");
-		return -ENODEV;
-	}
-
-	ret = of_address_to_resource(mem_region, 0, &res);
-	of_node_put(mem_region);
+	ret = of_address_to_resource(of_node, 0, &res);
 	if (ret) {
 		dev_err(&pdev->dev,
-			"failed to translate memory-region to resource: %d\n",
+			"failed to translate reserved-memory to resource: %d\n",
 			ret);
 		return ret;
 	}
-- 
2.7.4


-- 
Kees Cook
Brillo & Chrome OS Security
--
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

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

* Re: [RFC][PATCH] pstore: use DT reserved-memory bindings
  2016-07-30  1:16 ` Kees Cook
  (?)
@ 2016-08-01 15:54 ` Rob Herring
  2016-08-01 19:02   ` Kees Cook
  -1 siblings, 1 reply; 6+ messages in thread
From: Rob Herring @ 2016-08-01 15:54 UTC (permalink / raw)
  To: Kees Cook; +Cc: linux-kernel, devicetree, Greg Hackmann, Arnd Bergmann

On Fri, Jul 29, 2016 at 8:16 PM, Kees Cook <keescook@chromium.org> wrote:
> Instead of a ramoops-specific node, use a child node of /reserved-memory.
> This requires that of_platform_populate() be called for the node, though,
> since it does not have its own "compatible" property.
>
> Suggested-by: Rob Herring <robh@kernel.org>
> Signed-off-by: Kees Cook <keescook@chromium.org>
> ---
> Here's what I've got for moving ramoops under /reserved-memory... still
> feels like a bit of a hack.
> ---
>  Documentation/devicetree/bindings/misc/ramoops.txt | 48 ----------------------
>  .../bindings/reserved-memory/ramoops.txt           | 48 ++++++++++++++++++++++

Use -M option or so you don't forget you can set in your git config:

[diff]
        renames = true

>  Documentation/ramoops.txt                          |  2 +-
>  drivers/of/platform.c                              |  5 +++
>  fs/pstore/ram.c                                    | 12 +-----
>  5 files changed, 56 insertions(+), 59 deletions(-)

[...]

> diff --git a/drivers/of/platform.c b/drivers/of/platform.c
> index 16e8daffac06..c07adf72bb8e 100644
> --- a/drivers/of/platform.c
> +++ b/drivers/of/platform.c
> @@ -356,6 +356,11 @@ static int of_platform_bus_create(struct device_node *bus,
>         void *platform_data = NULL;
>         int rc = 0;
>
> +       /* Always populate reserved-memory nodes. */
> +       if (strict && strcmp(bus->full_name, "/reserved-memory") == 0) {
> +               return of_platform_populate(bus, matches, lookup, parent);
> +       }
> +

This can be a lot cleaner now with the DT changes in 4.8. We could
make this more generic and call of_platform_populate with the
/reserved-memory node as the root, but that would :

diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 765390e..4c36e06 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -499,8 +499,15 @@ EXPORT_SYMBOL_GPL(of_platform_default_populate);

 static int __init of_platform_default_populate_init(void)
 {
-       if (of_have_populated_dt())
-               of_platform_default_populate(NULL, NULL, NULL);
+       struct device_node *node;
+
+       if (!of_have_populated_dt())
+               return -ENODEV;
+
+       node = of_find_compatible_node(NULL, NULL, "ramoops");
+       of_platform_device_create(node, NULL, NULL);
+
+       of_platform_default_populate(NULL, NULL, NULL);

        return 0;
 }


>         /* Make sure it has a compatible property */
>         if (strict && (!of_get_property(bus, "compatible", NULL))) {
>                 pr_debug("%s() - skipping %s, no compatible prop\n",
> diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
> index 47516a794011..af5cee0c2156 100644
> --- a/fs/pstore/ram.c
> +++ b/fs/pstore/ram.c
> @@ -486,24 +486,16 @@ static int ramoops_parse_dt(struct platform_device *pdev,
>                             struct ramoops_platform_data *pdata)
>  {
>         struct device_node *of_node = pdev->dev.of_node;
> -       struct device_node *mem_region;
>         struct resource res;
>         u32 value;
>         int ret;
>
>         dev_dbg(&pdev->dev, "using Device Tree\n");
>
> -       mem_region = of_parse_phandle(of_node, "memory-region", 0);
> -       if (!mem_region) {
> -               dev_err(&pdev->dev, "no memory-region phandle\n");
> -               return -ENODEV;
> -       }
> -
> -       ret = of_address_to_resource(mem_region, 0, &res);
> -       of_node_put(mem_region);
> +       ret = of_address_to_resource(of_node, 0, &res);

You can use the standard platform device resource functions now.

>         if (ret) {
>                 dev_err(&pdev->dev,
> -                       "failed to translate memory-region to resource: %d\n",
> +                       "failed to translate reserved-memory to resource: %d\n",
>                         ret);
>                 return ret;
>         }
> --
> 2.7.4
>
>
> --
> Kees Cook
> Brillo & Chrome OS Security

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

* Re: [RFC][PATCH] pstore: use DT reserved-memory bindings
  2016-08-01 15:54 ` Rob Herring
@ 2016-08-01 19:02   ` Kees Cook
  2016-08-01 19:50       ` Rob Herring
  0 siblings, 1 reply; 6+ messages in thread
From: Kees Cook @ 2016-08-01 19:02 UTC (permalink / raw)
  To: Rob Herring; +Cc: linux-kernel, devicetree, Greg Hackmann, Arnd Bergmann

On Mon, Aug 1, 2016 at 8:54 AM, Rob Herring <robh+dt@kernel.org> wrote:
> On Fri, Jul 29, 2016 at 8:16 PM, Kees Cook <keescook@chromium.org> wrote:
>> Instead of a ramoops-specific node, use a child node of /reserved-memory.
>> This requires that of_platform_populate() be called for the node, though,
>> since it does not have its own "compatible" property.
>>
>> Suggested-by: Rob Herring <robh@kernel.org>
>> Signed-off-by: Kees Cook <keescook@chromium.org>
>> ---
>> Here's what I've got for moving ramoops under /reserved-memory... still
>> feels like a bit of a hack.
>> ---
>>  Documentation/devicetree/bindings/misc/ramoops.txt | 48 ----------------------
>>  .../bindings/reserved-memory/ramoops.txt           | 48 ++++++++++++++++++++++
>
> Use -M option or so you don't forget you can set in your git config:
>
> [diff]
>         renames = true

Added, thanks.

>
>>  Documentation/ramoops.txt                          |  2 +-
>>  drivers/of/platform.c                              |  5 +++
>>  fs/pstore/ram.c                                    | 12 +-----
>>  5 files changed, 56 insertions(+), 59 deletions(-)
>
> [...]
>
>> diff --git a/drivers/of/platform.c b/drivers/of/platform.c
>> index 16e8daffac06..c07adf72bb8e 100644
>> --- a/drivers/of/platform.c
>> +++ b/drivers/of/platform.c
>> @@ -356,6 +356,11 @@ static int of_platform_bus_create(struct device_node *bus,
>>         void *platform_data = NULL;
>>         int rc = 0;
>>
>> +       /* Always populate reserved-memory nodes. */
>> +       if (strict && strcmp(bus->full_name, "/reserved-memory") == 0) {
>> +               return of_platform_populate(bus, matches, lookup, parent);
>> +       }
>> +
>
> This can be a lot cleaner now with the DT changes in 4.8. We could
> make this more generic and call of_platform_populate with the
> /reserved-memory node as the root, but that would :

Is there a word missing above? "...but that would [need]:" ?

> diff --git a/drivers/of/platform.c b/drivers/of/platform.c
> index 765390e..4c36e06 100644
> --- a/drivers/of/platform.c
> +++ b/drivers/of/platform.c
> @@ -499,8 +499,15 @@ EXPORT_SYMBOL_GPL(of_platform_default_populate);
>
>  static int __init of_platform_default_populate_init(void)
>  {
> -       if (of_have_populated_dt())
> -               of_platform_default_populate(NULL, NULL, NULL);
> +       struct device_node *node;
> +
> +       if (!of_have_populated_dt())
> +               return -ENODEV;
> +
> +       node = of_find_compatible_node(NULL, NULL, "ramoops");
> +       of_platform_device_create(node, NULL, NULL);

Does of_platform_device_create() DTRT if node is NULL here? (Looks
like "yes", but goes through a spin lock first: I think it'd be nicer
to check for a NULL node here.) Should this first look for
/reserved-memory, then ramoops?

Testing this as-is seems to work, though I'll send a version that
looks up /reserved-memory first before ramoops.

> +
> +       of_platform_default_populate(NULL, NULL, NULL);
>
>         return 0;
>  }
>
>
>>         /* Make sure it has a compatible property */
>>         if (strict && (!of_get_property(bus, "compatible", NULL))) {
>>                 pr_debug("%s() - skipping %s, no compatible prop\n",
>> diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
>> index 47516a794011..af5cee0c2156 100644
>> --- a/fs/pstore/ram.c
>> +++ b/fs/pstore/ram.c
>> @@ -486,24 +486,16 @@ static int ramoops_parse_dt(struct platform_device *pdev,
>>                             struct ramoops_platform_data *pdata)
>>  {
>>         struct device_node *of_node = pdev->dev.of_node;
>> -       struct device_node *mem_region;
>>         struct resource res;
>>         u32 value;
>>         int ret;
>>
>>         dev_dbg(&pdev->dev, "using Device Tree\n");
>>
>> -       mem_region = of_parse_phandle(of_node, "memory-region", 0);
>> -       if (!mem_region) {
>> -               dev_err(&pdev->dev, "no memory-region phandle\n");
>> -               return -ENODEV;
>> -       }
>> -
>> -       ret = of_address_to_resource(mem_region, 0, &res);
>> -       of_node_put(mem_region);
>> +       ret = of_address_to_resource(of_node, 0, &res);
>
> You can use the standard platform device resource functions now.

Okay, sounds good. I still have to parse the ramoops-specific stuff
off the of_node, so it doesn't really change things too much here, but
does look a little cleaner.

Thanks!

-Kees

>
>>         if (ret) {
>>                 dev_err(&pdev->dev,
>> -                       "failed to translate memory-region to resource: %d\n",
>> +                       "failed to translate reserved-memory to resource: %d\n",
>>                         ret);
>>                 return ret;
>>         }
>> --
>> 2.7.4
>>
>>
>> --
>> Kees Cook
>> Brillo & Chrome OS Security



-- 
Kees Cook
Chrome OS & Brillo Security

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

* Re: [RFC][PATCH] pstore: use DT reserved-memory bindings
@ 2016-08-01 19:50       ` Rob Herring
  0 siblings, 0 replies; 6+ messages in thread
From: Rob Herring @ 2016-08-01 19:50 UTC (permalink / raw)
  To: Kees Cook; +Cc: linux-kernel, devicetree, Greg Hackmann, Arnd Bergmann

On Mon, Aug 1, 2016 at 2:02 PM, Kees Cook <keescook@chromium.org> wrote:
> On Mon, Aug 1, 2016 at 8:54 AM, Rob Herring <robh+dt@kernel.org> wrote:
>> On Fri, Jul 29, 2016 at 8:16 PM, Kees Cook <keescook@chromium.org> wrote:
>>> Instead of a ramoops-specific node, use a child node of /reserved-memory.
>>> This requires that of_platform_populate() be called for the node, though,
>>> since it does not have its own "compatible" property.
>>>
>>> Suggested-by: Rob Herring <robh@kernel.org>
>>> Signed-off-by: Kees Cook <keescook@chromium.org>
>>> ---
>>> Here's what I've got for moving ramoops under /reserved-memory... still
>>> feels like a bit of a hack.
>>> ---
>>>  Documentation/devicetree/bindings/misc/ramoops.txt | 48 ----------------------
>>>  .../bindings/reserved-memory/ramoops.txt           | 48 ++++++++++++++++++++++
>>
>> Use -M option or so you don't forget you can set in your git config:
>>
>> [diff]
>>         renames = true
>
> Added, thanks.
>
>>
>>>  Documentation/ramoops.txt                          |  2 +-
>>>  drivers/of/platform.c                              |  5 +++
>>>  fs/pstore/ram.c                                    | 12 +-----
>>>  5 files changed, 56 insertions(+), 59 deletions(-)
>>
>> [...]
>>
>>> diff --git a/drivers/of/platform.c b/drivers/of/platform.c
>>> index 16e8daffac06..c07adf72bb8e 100644
>>> --- a/drivers/of/platform.c
>>> +++ b/drivers/of/platform.c
>>> @@ -356,6 +356,11 @@ static int of_platform_bus_create(struct device_node *bus,
>>>         void *platform_data = NULL;
>>>         int rc = 0;
>>>
>>> +       /* Always populate reserved-memory nodes. */
>>> +       if (strict && strcmp(bus->full_name, "/reserved-memory") == 0) {
>>> +               return of_platform_populate(bus, matches, lookup, parent);
>>> +       }
>>> +
>>
>> This can be a lot cleaner now with the DT changes in 4.8. We could
>> make this more generic and call of_platform_populate with the
>> /reserved-memory node as the root, but that would :
>
> Is there a word missing above? "...but that would [need]:" ?

Uh, didn't finish that. ...would create devices for other nodes with
compatible strings. That's not really a problem, but not necessary
either presently.

>> diff --git a/drivers/of/platform.c b/drivers/of/platform.c
>> index 765390e..4c36e06 100644
>> --- a/drivers/of/platform.c
>> +++ b/drivers/of/platform.c
>> @@ -499,8 +499,15 @@ EXPORT_SYMBOL_GPL(of_platform_default_populate);
>>
>>  static int __init of_platform_default_populate_init(void)
>>  {
>> -       if (of_have_populated_dt())
>> -               of_platform_default_populate(NULL, NULL, NULL);
>> +       struct device_node *node;
>> +
>> +       if (!of_have_populated_dt())
>> +               return -ENODEV;
>> +
>> +       node = of_find_compatible_node(NULL, NULL, "ramoops");
>> +       of_platform_device_create(node, NULL, NULL);
>
> Does of_platform_device_create() DTRT if node is NULL here? (Looks
> like "yes", but goes through a spin lock first: I think it'd be nicer
> to check for a NULL node here.)

It does, but either way is fine with me.

> Should this first look for
> /reserved-memory, then ramoops?

No, that's not necessary. It could match if located in other places,
but it's not really the kernel's job to be a DT validator beyond what
it requires.

Rob

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

* Re: [RFC][PATCH] pstore: use DT reserved-memory bindings
@ 2016-08-01 19:50       ` Rob Herring
  0 siblings, 0 replies; 6+ messages in thread
From: Rob Herring @ 2016-08-01 19:50 UTC (permalink / raw)
  To: Kees Cook
  Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Greg Hackmann, Arnd Bergmann

On Mon, Aug 1, 2016 at 2:02 PM, Kees Cook <keescook-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> wrote:
> On Mon, Aug 1, 2016 at 8:54 AM, Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote:
>> On Fri, Jul 29, 2016 at 8:16 PM, Kees Cook <keescook-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> wrote:
>>> Instead of a ramoops-specific node, use a child node of /reserved-memory.
>>> This requires that of_platform_populate() be called for the node, though,
>>> since it does not have its own "compatible" property.
>>>
>>> Suggested-by: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
>>> Signed-off-by: Kees Cook <keescook-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
>>> ---
>>> Here's what I've got for moving ramoops under /reserved-memory... still
>>> feels like a bit of a hack.
>>> ---
>>>  Documentation/devicetree/bindings/misc/ramoops.txt | 48 ----------------------
>>>  .../bindings/reserved-memory/ramoops.txt           | 48 ++++++++++++++++++++++
>>
>> Use -M option or so you don't forget you can set in your git config:
>>
>> [diff]
>>         renames = true
>
> Added, thanks.
>
>>
>>>  Documentation/ramoops.txt                          |  2 +-
>>>  drivers/of/platform.c                              |  5 +++
>>>  fs/pstore/ram.c                                    | 12 +-----
>>>  5 files changed, 56 insertions(+), 59 deletions(-)
>>
>> [...]
>>
>>> diff --git a/drivers/of/platform.c b/drivers/of/platform.c
>>> index 16e8daffac06..c07adf72bb8e 100644
>>> --- a/drivers/of/platform.c
>>> +++ b/drivers/of/platform.c
>>> @@ -356,6 +356,11 @@ static int of_platform_bus_create(struct device_node *bus,
>>>         void *platform_data = NULL;
>>>         int rc = 0;
>>>
>>> +       /* Always populate reserved-memory nodes. */
>>> +       if (strict && strcmp(bus->full_name, "/reserved-memory") == 0) {
>>> +               return of_platform_populate(bus, matches, lookup, parent);
>>> +       }
>>> +
>>
>> This can be a lot cleaner now with the DT changes in 4.8. We could
>> make this more generic and call of_platform_populate with the
>> /reserved-memory node as the root, but that would :
>
> Is there a word missing above? "...but that would [need]:" ?

Uh, didn't finish that. ...would create devices for other nodes with
compatible strings. That's not really a problem, but not necessary
either presently.

>> diff --git a/drivers/of/platform.c b/drivers/of/platform.c
>> index 765390e..4c36e06 100644
>> --- a/drivers/of/platform.c
>> +++ b/drivers/of/platform.c
>> @@ -499,8 +499,15 @@ EXPORT_SYMBOL_GPL(of_platform_default_populate);
>>
>>  static int __init of_platform_default_populate_init(void)
>>  {
>> -       if (of_have_populated_dt())
>> -               of_platform_default_populate(NULL, NULL, NULL);
>> +       struct device_node *node;
>> +
>> +       if (!of_have_populated_dt())
>> +               return -ENODEV;
>> +
>> +       node = of_find_compatible_node(NULL, NULL, "ramoops");
>> +       of_platform_device_create(node, NULL, NULL);
>
> Does of_platform_device_create() DTRT if node is NULL here? (Looks
> like "yes", but goes through a spin lock first: I think it'd be nicer
> to check for a NULL node here.)

It does, but either way is fine with me.

> Should this first look for
> /reserved-memory, then ramoops?

No, that's not necessary. It could match if located in other places,
but it's not really the kernel's job to be a DT validator beyond what
it requires.

Rob
--
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

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

end of thread, other threads:[~2016-08-01 19:52 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-30  1:16 [RFC][PATCH] pstore: use DT reserved-memory bindings Kees Cook
2016-07-30  1:16 ` Kees Cook
2016-08-01 15:54 ` Rob Herring
2016-08-01 19:02   ` Kees Cook
2016-08-01 19:50     ` Rob Herring
2016-08-01 19:50       ` Rob Herring

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.