@@ -0,0 +1,38 @@+Command DB+---------++Command DB is a database that provides a mapping between resource key and the+resource address for a system resource managed by a remote processor. The data+is stored in a shared memory region and is loaded by the remote processor.++Some of the Qualcomm Technologies Inc SoC's have hardware accelerators for+controlling shared resources. Depending on the board configuration the shared+resource properties may change. These properties are dynamically probed by the+remote processor and made available in the shared memory.++The bindings for Command DB is specified in the reserved-memory section in+devicetree. The devicetree representation of the command DB driver should be:++Properties:+- compatible:+ Usage: required+ Value type: <string>+ Definition: Should be "qcom,cmd-db"++- reg:+ Usage: required+ Value type: <prop encoded array>+ Definition: The register address that points to the location of the+ Command DB in memory. Additionally, specify the address+ and size of the actual lacation in memory.++Example:++ reserved-memory {+ [...]+ qcom,cmd-db@c3f000c {+ reg = <0x0 0xc3f000c 0x0 0x8>,+ <0x0 0x85fe0000 0x0 0x20000>;+ compatible = "qcom,cmd-db";+ };+ };
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
I'm still concerned about the use of the redirection mapping here,
the relocation at 0xc3f000c is used a convenience thing so that the
command db can be relocated, but because of how Linux will consume any
non-reserved memory the dts would still need to be manually updated.
As such I think you should just describe only the 0x85fe0000 + 0x20000
region here and to support the dynamic aspect of this from a system
point of view you can have the boot loader read the information at
0xc3f000c and adjust the reserved memory. (Or just keep the step of
manually update the dts without caring about the indirection)
Regards,
Bjorn
@@ -0,0 +1,38 @@+Command DB+---------++Command DB is a database that provides a mapping between resource key and the
s/between/between the/
+resource address for a system resource managed by a remote processor. The data
+is stored in a shared memory region and is loaded by the remote processor.
+
+Some of the Qualcomm Technologies Inc SoC's have hardware accelerators for
s/SoC's/SoCs/
+controlling shared resources. Depending on the board configuration the shared
+resource properties may change. These properties are dynamically probed by the
+remote processor and made available in the shared memory.
+
+The bindings for Command DB is specified in the reserved-memory section in
s/bindings/node/
maybe?
+devicetree. The devicetree representation of the command DB driver should be:
Maybe drop this last sentence entirely.
+
+Properties:
+- compatible:
+ Usage: required
+ Value type: <string>
+ Definition: Should be "qcom,cmd-db"
+
+- reg:
+ Usage: required
+ Value type: <prop encoded array>
+ Definition: The register address that points to the location of the
+ Command DB in memory. Additionally, specify the address
+ and size of the actual lacation in memory.
I'm still concerned about the use of the redirection mapping here,
the relocation at 0xc3f000c is used a convenience thing so that the
command db can be relocated, but because of how Linux will consume any
non-reserved memory the dts would still need to be manually updated.
This location is fixed and it is not expected to change between
different boards. OEMs may change the actual address of the command db
location, but would not change the dictionary location.
As such I think you should just describe only the 0x85fe0000 + 0x20000
region here and to support the dynamic aspect of this from a system
point of view you can have the boot loader read the information at
0xc3f000c and adjust the reserved memory. (Or just keep the step of
manually update the dts without caring about the indirection)
It would be incorrect and very board specific to just use the 0x85fe000
as the address. It is not how the SoC defines the location. Upon request
earlier, this memory location was added in DT and the location is
typical reference platform usage only.
Thanks,
Lina
@@ -0,0 +1,38 @@+Command DB+---------++Command DB is a database that provides a mapping between resource key and the
s/between/between the/
quoted
+resource address for a system resource managed by a remote processor. The data
+is stored in a shared memory region and is loaded by the remote processor.
+
+Some of the Qualcomm Technologies Inc SoC's have hardware accelerators for
s/SoC's/SoCs/
quoted
+controlling shared resources. Depending on the board configuration the shared
+resource properties may change. These properties are dynamically probed by the
+remote processor and made available in the shared memory.
+
+The bindings for Command DB is specified in the reserved-memory section in
s/bindings/node/
maybe?
quoted
+devicetree. The devicetree representation of the command DB driver should be:
Maybe drop this last sentence entirely.
quoted
+
+Properties:
+- compatible:
+ Usage: required
+ Value type: <string>
+ Definition: Should be "qcom,cmd-db"
+
+- reg:
+ Usage: required
+ Value type: <prop encoded array>
+ Definition: The register address that points to the location of the
+ Command DB in memory. Additionally, specify the address
+ and size of the actual lacation in memory.
I'm still concerned about the use of the redirection mapping here,
the relocation at 0xc3f000c is used a convenience thing so that the
command db can be relocated, but because of how Linux will consume any
non-reserved memory the dts would still need to be manually updated.
This location is fixed and it is not expected to change between
different boards. OEMs may change the actual address of the command db
location, but would not change the dictionary location.
Right, dictionary location is fixed. So to pick another range for
command db one would update the numbers that goes into the dictionary
and expect all software in the system to use this new range.
quoted
As such I think you should just describe only the 0x85fe0000 + 0x20000
region here and to support the dynamic aspect of this from a system
point of view you can have the boot loader read the information at
0xc3f000c and adjust the reserved memory. (Or just keep the step of
manually update the dts without caring about the indirection)
It would be incorrect and very board specific to just use the 0x85fe000
as the address. It is not how the SoC defines the location. Upon request
earlier, this memory location was added in DT and the location is
typical reference platform usage only.
The problem is that as the db resides in a chunk of memory in the middle
of what Linux considers System RAM the DTS must specify this region as
reserved. Which means that as you, like described above, update the
dictionary something (in your scheme a person) has to update the
reserved-memory region as well.
That's why I'm proposing that the appropriate implementation for this
is to have the boot loader to the dictionary part of this and Linux only
care about the actual reserved-memory region. This way you would still
implement the dictionary lookup on a system level, but the Linux
part no longer depend on a human updating the DTS to match the values of
the dictionary.
But if we stick with the approach of describing both these and hoping
that the values in the first region matches the second (or should we add
a sanity check in probe?). The memory reserve defined as 0xc3f000c + 8
looks strange, is this system ram as well and what other things resides
in that same page?
Regards,
Bjorn
From: Stephen Boyd <sboyd@kernel.org> Date: 2018-03-16 18:26:52
Quoting Bjorn Andersson (2018-03-07 11:02:49)
On Tue 06 Mar 07:57 PST 2018, Lina Iyer wrote:
quoted
On Mon, Mar 05 2018 at 16:15 -0700, Bjorn Andersson wrote:
quoted
On Mon 26 Feb 09:58 PST 2018, Lina Iyer wrote:
quoted
quoted
As such I think you should just describe only the 0x85fe0000 + 0x20000
region here and to support the dynamic aspect of this from a system
point of view you can have the boot loader read the information at
0xc3f000c and adjust the reserved memory. (Or just keep the step of
manually update the dts without caring about the indirection)
It would be incorrect and very board specific to just use the 0x85fe000
as the address. It is not how the SoC defines the location. Upon request
earlier, this memory location was added in DT and the location is
typical reference platform usage only.
The problem is that as the db resides in a chunk of memory in the middle
of what Linux considers System RAM the DTS must specify this region as
reserved. Which means that as you, like described above, update the
dictionary something (in your scheme a person) has to update the
reserved-memory region as well.
That's why I'm proposing that the appropriate implementation for this
is to have the boot loader to the dictionary part of this and Linux only
care about the actual reserved-memory region. This way you would still
implement the dictionary lookup on a system level, but the Linux
part no longer depend on a human updating the DTS to match the values of
the dictionary.
Agreed. I thought SMEM had a similar design of a cookie in IMEM to
indicate location and size because coordinating changes across all the
various software images is a hard problem. But coordinating between
linux and the linux bootloader shouldn't be as hard.
But if we stick with the approach of describing both these and hoping
that the values in the first region matches the second (or should we add
a sanity check in probe?). The memory reserve defined as 0xc3f000c + 8
looks strange, is this system ram as well and what other things resides
in that same page?
Doesn't look like it could be RAM, the address is not very close to the
other one so I would guess it's something like IMEM. And there are two
32-bit numbers to describe address and size?
On Mon, Mar 05 2018 at 16:15 -0700, Bjorn Andersson wrote:
quoted
On Mon 26 Feb 09:58 PST 2018, Lina Iyer wrote:
quoted
quoted
As such I think you should just describe only the 0x85fe0000 + 0x20000
region here and to support the dynamic aspect of this from a system
point of view you can have the boot loader read the information at
0xc3f000c and adjust the reserved memory. (Or just keep the step of
manually update the dts without caring about the indirection)
It would be incorrect and very board specific to just use the 0x85fe000
as the address. It is not how the SoC defines the location. Upon request
earlier, this memory location was added in DT and the location is
typical reference platform usage only.
The problem is that as the db resides in a chunk of memory in the middle
of what Linux considers System RAM the DTS must specify this region as
reserved. Which means that as you, like described above, update the
dictionary something (in your scheme a person) has to update the
reserved-memory region as well.
That's why I'm proposing that the appropriate implementation for this
is to have the boot loader to the dictionary part of this and Linux only
care about the actual reserved-memory region. This way you would still
implement the dictionary lookup on a system level, but the Linux
part no longer depend on a human updating the DTS to match the values of
the dictionary.
Agreed. I thought SMEM had a similar design of a cookie in IMEM to
indicate location and size because coordinating changes across all the
various software images is a hard problem. But coordinating between
linux and the linux bootloader shouldn't be as hard.
Correct, SMEM has exactly the same mechanism.
I get that the coordinating of these addresses between all involved
images can be a tricky thing, but the only way to make this automatic on
the application CPU is to split this between boot and Linux; as any
all-Linux solution requires a human to update the reserved-memory node
to match the values in the indirection.
So for SMEM we agreed that we implement this as "someone needs to tell
Linux where SMEM is" and that can be a human or the boot loader.
Regards,
Bjorn