* [Qemu-devel] [PATCH v3] sam460ex: Fix sam460ex device tree when booting the Linux kernel
@ 2018-06-23 14:36 Guenter Roeck
2018-06-23 20:44 ` BALATON Zoltan
0 siblings, 1 reply; 3+ messages in thread
From: Guenter Roeck @ 2018-06-23 14:36 UTC (permalink / raw)
To: David Gibson
Cc: Alexander Graf, qemu-ppc, qemu-devel, BALATON Zoltan,
Guenter Roeck
sam460ex (or at least this emulation) does not support the "ibm,cpm" power
management. As a result, Linux crashes when trying to access it. Remove
its device tree node. Also, if/when we boot the Linux kernel directly,
serial port clock frequencies in the device tree file will be unset, and
serial port initialization will fail. Add valid frequency values to
the serial ports to be able to use it. Also set valid values for the other
clock nodes otherwise set by u-boot.
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
v3: Fix style problems (ERROR: braces {} are necessary for all arms ...)
Use defines flor clock frequencies.
Use clock frequencies as reported by u-boot in real system.
Use more specific prefix in subject
Fi typos in description
v2: Initialize all serial nodes to match u-boot behavior more closely.
Use direct fdt API functions and ignore errors when clearing out
/cpm and for setting the serial port clocks.
hw/ppc/sam460ex.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c
index bdc53d2..3b90196 100644
--- a/hw/ppc/sam460ex.c
+++ b/hw/ppc/sam460ex.c
@@ -37,6 +37,8 @@
#include "hw/i2c/smbus.h"
#include "hw/usb/hcd-ehci.h"
+#include <libfdt.h>
+
#define BINARY_DEVICE_TREE_FILE "canyonlands.dtb"
#define UBOOT_FILENAME "u-boot-sam460-20100605.bin"
/* to extract the official U-Boot bin from the updater: */
@@ -67,6 +69,9 @@
*/
#define CPU_FREQ 1150000000
+#define PLB_FREQ 230000000
+#define OPB_FREQ 115000000
+#define EBC_FREQ 115000000
#define SDRAM_NR_BANKS 4
/* FIXME: See u-boot.git 8ac41e, also fix in ppc440_uc.c */
@@ -255,6 +260,7 @@ static int sam460ex_load_device_tree(hwaddr addr,
void *fdt;
uint32_t tb_freq = CPU_FREQ;
uint32_t clock_freq = CPU_FREQ;
+ int offset;
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BINARY_DEVICE_TREE_FILE);
if (!filename) {
@@ -308,6 +314,27 @@ static int sam460ex_load_device_tree(hwaddr addr,
qemu_fdt_setprop_cell(fdt, "/cpus/cpu@0", "timebase-frequency",
tb_freq);
+ /* Remove cpm node if it exists (it is not emulated) */
+ offset = fdt_path_offset(fdt, "/cpm");
+ if (offset >= 0) {
+ fdt_nop_node(fdt, offset);
+ }
+
+ /* set serial port clocks */
+ offset = fdt_node_offset_by_compatible(fdt, -1, "ns16550");
+ while (offset >= 0) {
+ fdt_setprop_cell(fdt, offset, "clock-frequency", PLB_FREQ);
+ offset = fdt_node_offset_by_compatible(fdt, offset, "ns16550");
+ }
+
+ /* some more clocks */
+ qemu_fdt_setprop_cell(fdt, "/plb", "clock-frequency",
+ PLB_FREQ);
+ qemu_fdt_setprop_cell(fdt, "/plb/opb", "clock-frequency",
+ OPB_FREQ);
+ qemu_fdt_setprop_cell(fdt, "/plb/opb/ebc", "clock-frequency",
+ EBC_FREQ);
+
rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr);
g_free(fdt);
ret = fdt_size;
--
2.7.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH v3] sam460ex: Fix sam460ex device tree when booting the Linux kernel
2018-06-23 14:36 [Qemu-devel] [PATCH v3] sam460ex: Fix sam460ex device tree when booting the Linux kernel Guenter Roeck
@ 2018-06-23 20:44 ` BALATON Zoltan
2018-06-23 20:54 ` Guenter Roeck
0 siblings, 1 reply; 3+ messages in thread
From: BALATON Zoltan @ 2018-06-23 20:44 UTC (permalink / raw)
To: Guenter Roeck; +Cc: David Gibson, Alexander Graf, qemu-ppc, qemu-devel
On Sat, 23 Jun 2018, Guenter Roeck wrote:
> sam460ex (or at least this emulation) does not support the "ibm,cpm" power
> management. As a result, Linux crashes when trying to access it. Remove
> its device tree node. Also, if/when we boot the Linux kernel directly,
> serial port clock frequencies in the device tree file will be unset, and
> serial port initialization will fail. Add valid frequency values to
> the serial ports to be able to use it. Also set valid values for the other
> clock nodes otherwise set by u-boot.
>
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> ---
> v3: Fix style problems (ERROR: braces {} are necessary for all arms ...)
> Use defines flor clock frequencies.
> Use clock frequencies as reported by u-boot in real system.
> Use more specific prefix in subject
> Fi typos in description
> v2: Initialize all serial nodes to match u-boot behavior more closely.
> Use direct fdt API functions and ignore errors when clearing out
> /cpm and for setting the serial port clocks.
>
> hw/ppc/sam460ex.c | 27 +++++++++++++++++++++++++++
> 1 file changed, 27 insertions(+)
>
> diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c
> index bdc53d2..3b90196 100644
> --- a/hw/ppc/sam460ex.c
> +++ b/hw/ppc/sam460ex.c
> @@ -37,6 +37,8 @@
> #include "hw/i2c/smbus.h"
> #include "hw/usb/hcd-ehci.h"
>
> +#include <libfdt.h>
> +
> #define BINARY_DEVICE_TREE_FILE "canyonlands.dtb"
> #define UBOOT_FILENAME "u-boot-sam460-20100605.bin"
> /* to extract the official U-Boot bin from the updater: */
> @@ -67,6 +69,9 @@
> */
>
> #define CPU_FREQ 1150000000
> +#define PLB_FREQ 230000000
> +#define OPB_FREQ 115000000
> +#define EBC_FREQ 115000000
> #define SDRAM_NR_BANKS 4
>
> /* FIXME: See u-boot.git 8ac41e, also fix in ppc440_uc.c */
> @@ -255,6 +260,7 @@ static int sam460ex_load_device_tree(hwaddr addr,
> void *fdt;
> uint32_t tb_freq = CPU_FREQ;
> uint32_t clock_freq = CPU_FREQ;
> + int offset;
>
> filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BINARY_DEVICE_TREE_FILE);
> if (!filename) {
> @@ -308,6 +314,27 @@ static int sam460ex_load_device_tree(hwaddr addr,
> qemu_fdt_setprop_cell(fdt, "/cpus/cpu@0", "timebase-frequency",
> tb_freq);
>
> + /* Remove cpm node if it exists (it is not emulated) */
> + offset = fdt_path_offset(fdt, "/cpm");
> + if (offset >= 0) {
> + fdt_nop_node(fdt, offset);
> + }
> +
> + /* set serial port clocks */
> + offset = fdt_node_offset_by_compatible(fdt, -1, "ns16550");
> + while (offset >= 0) {
> + fdt_setprop_cell(fdt, offset, "clock-frequency", PLB_FREQ);
Not sure if this is relevant, but the include/configs/Sam460ex.h in
the sam460ex u-boot seems to have:
#define CONFIG_SYS_EXT_SERIAL_CLOCK 11059200 /* use external 11.059MHz clk */
which may be used by u-boot to set uart_clk which is used to set this if
I've followed it correctly (but maybe I haven't, it's not easy with all
the #ifdefs). Otherwise:
Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
> + offset = fdt_node_offset_by_compatible(fdt, offset, "ns16550");
> + }
> +
> + /* some more clocks */
> + qemu_fdt_setprop_cell(fdt, "/plb", "clock-frequency",
> + PLB_FREQ);
> + qemu_fdt_setprop_cell(fdt, "/plb/opb", "clock-frequency",
> + OPB_FREQ);
> + qemu_fdt_setprop_cell(fdt, "/plb/opb/ebc", "clock-frequency",
> + EBC_FREQ);
> +
> rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr);
> g_free(fdt);
> ret = fdt_size;
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH v3] sam460ex: Fix sam460ex device tree when booting the Linux kernel
2018-06-23 20:44 ` BALATON Zoltan
@ 2018-06-23 20:54 ` Guenter Roeck
0 siblings, 0 replies; 3+ messages in thread
From: Guenter Roeck @ 2018-06-23 20:54 UTC (permalink / raw)
To: BALATON Zoltan; +Cc: David Gibson, Alexander Graf, qemu-ppc, qemu-devel
On 06/23/2018 01:44 PM, BALATON Zoltan wrote:
> On Sat, 23 Jun 2018, Guenter Roeck wrote:
>> sam460ex (or at least this emulation) does not support the "ibm,cpm" power
>> management. As a result, Linux crashes when trying to access it. Remove
>> its device tree node. Also, if/when we boot the Linux kernel directly,
>> serial port clock frequencies in the device tree file will be unset, and
>> serial port initialization will fail. Add valid frequency values to
>> the serial ports to be able to use it. Also set valid values for the other
>> clock nodes otherwise set by u-boot.
>>
>> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
>> ---
>> v3: Fix style problems (ERROR: braces {} are necessary for all arms ...)
>> Use defines flor clock frequencies.
>> Use clock frequencies as reported by u-boot in real system.
>> Use more specific prefix in subject
>> Fi typos in description
>> v2: Initialize all serial nodes to match u-boot behavior more closely.
>> Use direct fdt API functions and ignore errors when clearing out
>> /cpm and for setting the serial port clocks.
>>
>> hw/ppc/sam460ex.c | 27 +++++++++++++++++++++++++++
>> 1 file changed, 27 insertions(+)
>>
>> diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c
>> index bdc53d2..3b90196 100644
>> --- a/hw/ppc/sam460ex.c
>> +++ b/hw/ppc/sam460ex.c
>> @@ -37,6 +37,8 @@
>> #include "hw/i2c/smbus.h"
>> #include "hw/usb/hcd-ehci.h"
>>
>> +#include <libfdt.h>
>> +
>> #define BINARY_DEVICE_TREE_FILE "canyonlands.dtb"
>> #define UBOOT_FILENAME "u-boot-sam460-20100605.bin"
>> /* to extract the official U-Boot bin from the updater: */
>> @@ -67,6 +69,9 @@
>> */
>>
>> #define CPU_FREQ 1150000000
>> +#define PLB_FREQ 230000000
>> +#define OPB_FREQ 115000000
>> +#define EBC_FREQ 115000000
>> #define SDRAM_NR_BANKS 4
>>
>> /* FIXME: See u-boot.git 8ac41e, also fix in ppc440_uc.c */
>> @@ -255,6 +260,7 @@ static int sam460ex_load_device_tree(hwaddr addr,
>> void *fdt;
>> uint32_t tb_freq = CPU_FREQ;
>> uint32_t clock_freq = CPU_FREQ;
>> + int offset;
>>
>> filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BINARY_DEVICE_TREE_FILE);
>> if (!filename) {
>> @@ -308,6 +314,27 @@ static int sam460ex_load_device_tree(hwaddr addr,
>> qemu_fdt_setprop_cell(fdt, "/cpus/cpu@0", "timebase-frequency",
>> tb_freq);
>>
>> + /* Remove cpm node if it exists (it is not emulated) */
>> + offset = fdt_path_offset(fdt, "/cpm");
>> + if (offset >= 0) {
>> + fdt_nop_node(fdt, offset);
>> + }
>> +
>> + /* set serial port clocks */
>> + offset = fdt_node_offset_by_compatible(fdt, -1, "ns16550");
>> + while (offset >= 0) {
>> + fdt_setprop_cell(fdt, offset, "clock-frequency", PLB_FREQ);
>
> Not sure if this is relevant, but the include/configs/Sam460ex.h in the sam460ex u-boot seems to have:
>
> #define CONFIG_SYS_EXT_SERIAL_CLOCK 11059200 /* use external 11.059MHz clk */
>
> which may be used by u-boot to set uart_clk which is used to set this if I've followed it correctly (but maybe I haven't, it's not easy with all the #ifdefs). Otherwise:
>
Yes, you are correct. Sorry, I messed this up - I thought it was PLB_FREQ.
I'll send out v4.
Guenter
> Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
>
>> + offset = fdt_node_offset_by_compatible(fdt, offset, "ns16550");
>> + }
>> +
>> + /* some more clocks */
>> + qemu_fdt_setprop_cell(fdt, "/plb", "clock-frequency",
>> + PLB_FREQ);
>> + qemu_fdt_setprop_cell(fdt, "/plb/opb", "clock-frequency",
>> + OPB_FREQ);
>> + qemu_fdt_setprop_cell(fdt, "/plb/opb/ebc", "clock-frequency",
>> + EBC_FREQ);
>> +
>> rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr);
>> g_free(fdt);
>> ret = fdt_size;
>>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-06-23 20:54 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-23 14:36 [Qemu-devel] [PATCH v3] sam460ex: Fix sam460ex device tree when booting the Linux kernel Guenter Roeck
2018-06-23 20:44 ` BALATON Zoltan
2018-06-23 20:54 ` Guenter Roeck
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).