* [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup
@ 2020-08-03 11:52 Robert Marko
2020-08-03 11:52 ` [PATCH 2/2] IPQ40xx: Add SMEM support Robert Marko
2020-08-03 14:39 ` [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup Tom Rini
0 siblings, 2 replies; 6+ messages in thread
From: Robert Marko @ 2020-08-03 11:52 UTC (permalink / raw)
To: u-boot
Fixup the Linux FDT with the detection of onboard DRAM as
provided by SBL (Secondary boot loader) by reading
the shared-memory region.
Imported from Snapdragon target.
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Cc: Luka Perkov <luka.perkov@sartura.hr>
---
arch/arm/mach-ipq40xx/Makefile | 1 +
arch/arm/mach-ipq40xx/dram.c | 99 +++++++++++++++++++++++
arch/arm/mach-ipq40xx/include/mach/dram.h | 12 +++
3 files changed, 112 insertions(+)
create mode 100644 arch/arm/mach-ipq40xx/dram.c
create mode 100644 arch/arm/mach-ipq40xx/include/mach/dram.h
diff --git a/arch/arm/mach-ipq40xx/Makefile b/arch/arm/mach-ipq40xx/Makefile
index 08a65b8854..97d72b1723 100644
--- a/arch/arm/mach-ipq40xx/Makefile
+++ b/arch/arm/mach-ipq40xx/Makefile
@@ -5,5 +5,6 @@
# Author: Robert Marko <robert.marko@sartura.hr>
obj-y += clock-ipq4019.o
+obj-y += dram.o
obj-y += pinctrl-snapdragon.o
obj-y += pinctrl-ipq4019.o
diff --git a/arch/arm/mach-ipq40xx/dram.c b/arch/arm/mach-ipq40xx/dram.c
new file mode 100644
index 0000000000..a0dadad85f
--- /dev/null
+++ b/arch/arm/mach-ipq40xx/dram.c
@@ -0,0 +1,99 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Onboard memory detection for Snapdragon boards
+ *
+ * (C) Copyright 2018 Ramon Fried <ramon.fried@gmail.com>
+ *
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <smem.h>
+#include <fdt_support.h>
+#include <log.h>
+#include <asm/arch/dram.h>
+
+#define SMEM_USABLE_RAM_PARTITION_TABLE 402
+#define RAM_PART_NAME_LENGTH 16
+#define RAM_NUM_PART_ENTRIES 32
+#define CATEGORY_SDRAM 0x0E
+#define TYPE_SYSMEM 0x01
+
+struct smem_ram_ptable_hdr {
+ u32 magic[2];
+ u32 version;
+ u32 reserved;
+ u32 len;
+} __attribute__ ((__packed__));
+
+struct smem_ram_ptn {
+ char name[RAM_PART_NAME_LENGTH];
+ u64 start;
+ u64 size;
+ u32 attr;
+ u32 category;
+ u32 domain;
+ u32 type;
+ u32 num_partitions;
+ u32 reserved[3];
+} __attribute__ ((__packed__));
+
+struct smem_ram_ptable {
+ struct smem_ram_ptable_hdr hdr;
+ u32 reserved; /* Added for 8 bytes alignment of header */
+ struct smem_ram_ptn parts[RAM_NUM_PART_ENTRIES];
+} __attribute__ ((__packed__));
+
+#ifndef MEMORY_BANKS_MAX
+#define MEMORY_BANKS_MAX 4
+#endif
+
+int msm_fixup_memory(void *blob)
+{
+ u64 bank_start[MEMORY_BANKS_MAX];
+ u64 bank_size[MEMORY_BANKS_MAX];
+ size_t size;
+ int i;
+ int count = 0;
+ struct udevice *smem;
+ int ret;
+ struct smem_ram_ptable *ram_ptable;
+ struct smem_ram_ptn *p;
+
+ ret = uclass_get_device_by_name(UCLASS_SMEM, "smem", &smem);
+ if (ret < 0) {
+ printf("Failed to find SMEM node. Check device tree\n");
+ return 0;
+ }
+
+ ram_ptable = smem_get(smem, -1, SMEM_USABLE_RAM_PARTITION_TABLE, &size);
+
+ if (!ram_ptable) {
+ printf("Failed to find SMEM partition.\n");
+ return -ENODEV;
+ }
+
+ /* Check validy of RAM */
+ for (i = 0; i < RAM_NUM_PART_ENTRIES; i++) {
+ p = &ram_ptable->parts[i];
+ if (p->category == CATEGORY_SDRAM && p->type == TYPE_SYSMEM) {
+ bank_start[count] = p->start;
+ bank_size[count] = p->size;
+ debug("Detected memory bank %u: start: 0x%llx size: 0x%llx\n",
+ count, p->start, p->size);
+ count++;
+ }
+ }
+
+ if (!count) {
+ printf("Failed to detect any memory bank\n");
+ return -ENODEV;
+ }
+
+ ret = fdt_fixup_memory_banks(blob, bank_start, bank_size, count);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
diff --git a/arch/arm/mach-ipq40xx/include/mach/dram.h b/arch/arm/mach-ipq40xx/include/mach/dram.h
new file mode 100644
index 0000000000..0a9eedda41
--- /dev/null
+++ b/arch/arm/mach-ipq40xx/include/mach/dram.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Snapdragon DRAM
+ * Copyright (C) 2018 Ramon Fried <ramon.fried@gmail.com>
+ */
+
+#ifndef DRAM_H
+#define DRAM_H
+
+int msm_fixup_memory(void *blob);
+
+#endif
--
2.26.2
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 2/2] IPQ40xx: Add SMEM support
2020-08-03 11:52 [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup Robert Marko
@ 2020-08-03 11:52 ` Robert Marko
2020-08-03 14:39 ` [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup Tom Rini
1 sibling, 0 replies; 6+ messages in thread
From: Robert Marko @ 2020-08-03 11:52 UTC (permalink / raw)
To: u-boot
There is already existing driver for SMEM so lets enable it for IPQ40xx as well.
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Cc: Luka Perkov <luka.perkov@sartura.hr>
---
arch/arm/Kconfig | 2 ++
arch/arm/dts/qcom-ipq4019.dtsi | 5 +++++
drivers/smem/Kconfig | 2 +-
3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 3e11ddfa9b..5ed893bc73 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -784,8 +784,10 @@ config ARCH_IPQ40XX
select DM
select DM_GPIO
select DM_SERIAL
+ select MSM_SMEM
select PINCTRL
select CLK
+ select SMEM
select OF_CONTROL
imply CMD_DM
diff --git a/arch/arm/dts/qcom-ipq4019.dtsi b/arch/arm/dts/qcom-ipq4019.dtsi
index 5f78bc5ab9..9d21b15bb3 100644
--- a/arch/arm/dts/qcom-ipq4019.dtsi
+++ b/arch/arm/dts/qcom-ipq4019.dtsi
@@ -38,6 +38,11 @@
};
};
+ smem {
+ compatible = "qcom,smem";
+ memory-region = <&smem_mem>;
+ };
+
soc: soc {
#address-cells = <1>;
#size-cells = <1>;
diff --git a/drivers/smem/Kconfig b/drivers/smem/Kconfig
index 7169d0f205..73d51b3a7a 100644
--- a/drivers/smem/Kconfig
+++ b/drivers/smem/Kconfig
@@ -15,7 +15,7 @@ config SANDBOX_SMEM
config MSM_SMEM
bool "Qualcomm Shared Memory Manager (SMEM)"
depends on DM
- depends on ARCH_SNAPDRAGON
+ depends on ARCH_SNAPDRAGON || ARCH_IPQ40XX
help
Enable support for the Qualcomm Shared Memory Manager.
The driver provides an interface to items in a heap shared among all
--
2.26.2
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup
2020-08-03 11:52 [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup Robert Marko
2020-08-03 11:52 ` [PATCH 2/2] IPQ40xx: Add SMEM support Robert Marko
@ 2020-08-03 14:39 ` Tom Rini
2020-08-04 11:20 ` Robert Marko
1 sibling, 1 reply; 6+ messages in thread
From: Tom Rini @ 2020-08-03 14:39 UTC (permalink / raw)
To: u-boot
On Mon, Aug 03, 2020 at 01:52:19PM +0200, Robert Marko wrote:
> Fixup the Linux FDT with the detection of onboard DRAM as
> provided by SBL (Secondary boot loader) by reading
> the shared-memory region.
>
> Imported from Snapdragon target.
>
> Signed-off-by: Robert Marko <robert.marko@sartura.hr>
> Cc: Luka Perkov <luka.perkov@sartura.hr>
> ---
> arch/arm/mach-ipq40xx/Makefile | 1 +
> arch/arm/mach-ipq40xx/dram.c | 99 +++++++++++++++++++++++
> arch/arm/mach-ipq40xx/include/mach/dram.h | 12 +++
> 3 files changed, 112 insertions(+)
> create mode 100644 arch/arm/mach-ipq40xx/dram.c
> create mode 100644 arch/arm/mach-ipq40xx/include/mach/dram.h
Is this as-is? If so, we need to figure out something or another to
make sharing the code, rather than copying, possible. How are these
both grouped in the kernel? Thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200803/8411dcc0/attachment.sig>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup
2020-08-03 14:39 ` [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup Tom Rini
@ 2020-08-04 11:20 ` Robert Marko
2020-08-04 13:44 ` Tom Rini
0 siblings, 1 reply; 6+ messages in thread
From: Robert Marko @ 2020-08-04 11:20 UTC (permalink / raw)
To: u-boot
On Mon, Aug 3, 2020 at 4:39 PM Tom Rini <trini@konsulko.com> wrote:
>
> On Mon, Aug 03, 2020 at 01:52:19PM +0200, Robert Marko wrote:
>
> > Fixup the Linux FDT with the detection of onboard DRAM as
> > provided by SBL (Secondary boot loader) by reading
> > the shared-memory region.
> >
> > Imported from Snapdragon target.
> >
> > Signed-off-by: Robert Marko <robert.marko@sartura.hr>
> > Cc: Luka Perkov <luka.perkov@sartura.hr>
> > ---
> > arch/arm/mach-ipq40xx/Makefile | 1 +
> > arch/arm/mach-ipq40xx/dram.c | 99 +++++++++++++++++++++++
> > arch/arm/mach-ipq40xx/include/mach/dram.h | 12 +++
> > 3 files changed, 112 insertions(+)
> > create mode 100644 arch/arm/mach-ipq40xx/dram.c
> > create mode 100644 arch/arm/mach-ipq40xx/include/mach/dram.h
>
> Is this as-is? If so, we need to figure out something or another to
> make sharing the code, rather than copying, possible. How are these
> both grouped in the kernel? Thanks!
Yes, the Snapdragon target uses the identical code.
The kernel does not have code for this but rather relies on the
bootloader to do it.
>
> --
> Tom
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup
2020-08-04 11:20 ` Robert Marko
@ 2020-08-04 13:44 ` Tom Rini
2020-08-07 11:35 ` Robert Marko
0 siblings, 1 reply; 6+ messages in thread
From: Tom Rini @ 2020-08-04 13:44 UTC (permalink / raw)
To: u-boot
On Tue, Aug 04, 2020 at 01:20:56PM +0200, Robert Marko wrote:
> On Mon, Aug 3, 2020 at 4:39 PM Tom Rini <trini@konsulko.com> wrote:
> >
> > On Mon, Aug 03, 2020 at 01:52:19PM +0200, Robert Marko wrote:
> >
> > > Fixup the Linux FDT with the detection of onboard DRAM as
> > > provided by SBL (Secondary boot loader) by reading
> > > the shared-memory region.
> > >
> > > Imported from Snapdragon target.
> > >
> > > Signed-off-by: Robert Marko <robert.marko@sartura.hr>
> > > Cc: Luka Perkov <luka.perkov@sartura.hr>
> > > ---
> > > arch/arm/mach-ipq40xx/Makefile | 1 +
> > > arch/arm/mach-ipq40xx/dram.c | 99 +++++++++++++++++++++++
> > > arch/arm/mach-ipq40xx/include/mach/dram.h | 12 +++
> > > 3 files changed, 112 insertions(+)
> > > create mode 100644 arch/arm/mach-ipq40xx/dram.c
> > > create mode 100644 arch/arm/mach-ipq40xx/include/mach/dram.h
> >
> > Is this as-is? If so, we need to figure out something or another to
> > make sharing the code, rather than copying, possible. How are these
> > both grouped in the kernel? Thanks!
>
> Yes, the Snapdragon target uses the identical code.
> The kernel does not have code for this but rather relies on the
> bootloader to do it.
Right, but I mean what does the kernel do to avoid copying identical
code between these two platforms? I guess the answer is that for
arch/arm64 everything has been pushed out of arch/arm64/. So in this
case, the dram code should get moved to our drivers/ddr/ or drivers/ram/
depending on which place "dram.c" really belongs best.
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200804/56217123/attachment.sig>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup
2020-08-04 13:44 ` Tom Rini
@ 2020-08-07 11:35 ` Robert Marko
0 siblings, 0 replies; 6+ messages in thread
From: Robert Marko @ 2020-08-07 11:35 UTC (permalink / raw)
To: u-boot
On Tue, Aug 4, 2020 at 3:45 PM Tom Rini <trini@konsulko.com> wrote:
>
> On Tue, Aug 04, 2020 at 01:20:56PM +0200, Robert Marko wrote:
> > On Mon, Aug 3, 2020 at 4:39 PM Tom Rini <trini@konsulko.com> wrote:
> > >
> > > On Mon, Aug 03, 2020 at 01:52:19PM +0200, Robert Marko wrote:
> > >
> > > > Fixup the Linux FDT with the detection of onboard DRAM as
> > > > provided by SBL (Secondary boot loader) by reading
> > > > the shared-memory region.
> > > >
> > > > Imported from Snapdragon target.
> > > >
> > > > Signed-off-by: Robert Marko <robert.marko@sartura.hr>
> > > > Cc: Luka Perkov <luka.perkov@sartura.hr>
> > > > ---
> > > > arch/arm/mach-ipq40xx/Makefile | 1 +
> > > > arch/arm/mach-ipq40xx/dram.c | 99 +++++++++++++++++++++++
> > > > arch/arm/mach-ipq40xx/include/mach/dram.h | 12 +++
> > > > 3 files changed, 112 insertions(+)
> > > > create mode 100644 arch/arm/mach-ipq40xx/dram.c
> > > > create mode 100644 arch/arm/mach-ipq40xx/include/mach/dram.h
> > >
> > > Is this as-is? If so, we need to figure out something or another to
> > > make sharing the code, rather than copying, possible. How are these
> > > both grouped in the kernel? Thanks!
> >
> > Yes, the Snapdragon target uses the identical code.
> > The kernel does not have code for this but rather relies on the
> > bootloader to do it.
>
> Right, but I mean what does the kernel do to avoid copying identical
> code between these two platforms? I guess the answer is that for
> arch/arm64 everything has been pushed out of arch/arm64/. So in this
> case, the dram code should get moved to our drivers/ddr/ or drivers/ram/
> depending on which place "dram.c" really belongs best.
Hi, I have been doing some further testing of the DRAM code on multiple boards.
Since it uses SMEM to detect DRAM configuration it's supposed to remove the need
to manually define DRAM size etc.
Unfortunately, what I experienced was that it's not uncommon for
boards to ship with
incorrect DRAM info in SMEM.
So, I have decided to drop this for now as it's not reliable and
manually config DRAM
start, size, etc.
Regards,
Robert
>
> --
> Tom
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-08-07 11:35 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-08-03 11:52 [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup Robert Marko
2020-08-03 11:52 ` [PATCH 2/2] IPQ40xx: Add SMEM support Robert Marko
2020-08-03 14:39 ` [PATCH 1/2] IPQ40xx: Add DRAM detection & FDT fixup Tom Rini
2020-08-04 11:20 ` Robert Marko
2020-08-04 13:44 ` Tom Rini
2020-08-07 11:35 ` Robert Marko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox