Coder Social home page Coder Social logo

Device tree population about linux HOT 62 CLOSED

raspberrypi avatar raspberrypi commented on May 18, 2024
Device tree population

from linux.

Comments (62)

nomis avatar nomis commented on May 18, 2024

Updated to use /system-serial instead of separate /system-serial-high and /system-serial-low (although I haven't changed the .dts/.dtb).

from linux.

nomis avatar nomis commented on May 18, 2024

Updated to move the mac address to /axi/usb/hub/ethernet/mac-address.

I've been advised that putting a mac-address at / is going to be a problem we don't want to re-open. Putting it at this location exactly matches the physical hardware devices.

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

You did earlier say: "Everything's be32 so it should be simple to overwrite default values as required. There's already a placeholder for the memory"

But I think the bootargs breaks that. Looks like I have to decompile then compile the dtb file. Unless I've missed something?

from linux.

nomis avatar nomis commented on May 18, 2024

I was sure I had seen padding in one of the .dts for this but I can't find one now, so you may need to do that. I'm not sure exactly how the format works but you might be able to append another string to the end.

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

What happens if you say:
chosen { bootargs = " "; };
(for a sufficiently large number of spaces)?

from linux.

nomis avatar nomis commented on May 18, 2024

Problem solved!

Put this in arch/arm/mach-bcm2708/Makefile.boot:
DTC_FLAGS ?= -p 4096

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Great. I'll start work on this issue.

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Okay, I've had a go at filling in the required device tree fields. Let me know if there are any problems:
https://dl.dropbox.com/u/3669512/start.elf

from linux.

bootc avatar bootc commented on May 18, 2024

Nearly. I haven't spent much time on this yet, but with disable_cmdline_tags=1 I get no command-line options in /chosen - or at least my kernel doesn't pick them up. With disable_cmdline_tags=0 it uses ATAGs I think, and the kernel doesn't boot because the device tree isn't there.

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Can you try making space in the:
chosen { bootargs = " "; };
in bcm2835.dtsi. I will only fill in up to the original length of the bootargs string.

from linux.

bootc avatar bootc commented on May 18, 2024

Oh it doesn't use the padding space left at the end of the dtb? I'll see if I can't give it a go in a few, but may not be able to until about 20:30.

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

From my limited understanding, the data in the bootargs is just contained inline with the devtree tags, so it's not possible to store that in the padding space without recompiling a new devtree.

It does seem to work if you store a string of, say, 1024 spaces in the bootargs, and I overwrite that with real command line (leaving length as 1024 and spaces intact).

I've updated the start.elf to not store the '\0' inside string, which I think is more correct (it makes is_printable_string return true).

P.S. I'm expecting you to define disable_cmdline_tags=1.

from linux.

bootc avatar bootc commented on May 18, 2024

Trouble with the big empty string full of spaces is I doubt we'd ever be able to get a device tree with that into mainline. How does fdtput do it? Is http://git.jdl.com/gitweb/?p=dtc.git any help?

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Looking at code, it won't
* TODO: add options to: * - expand fdt if value doesn't fit
and:
./fdtput -ts bcm2835.dtb /chosen bootargs "root=nfs" Error at 'bootargs': FDT_ERR_NOSPACE

If the big empty string is a blocker for upstreaming, then I'm sure we'll find a solution.
However it may be a temporary solution for the current developement.

from linux.

bootc avatar bootc commented on May 18, 2024

Right, with the extra padding that lp0 has added when generating the .dtb (DTC_FLAGS ?= -p 4096) those should never trigger. The padding is added specifically so that fdtput can add in the command-line args without having to expand the fdt. Consider my code for building the .dtb files manually, below:

dtc -O dtb -o bcm2835-rpi-b.dtb -p 128 ~/Projects/linux-lp0/arch/arm/boot/dts/bcm2835-rpi-b.dts
fdtput -t x bcm2835-rpi-b.dtb /memory reg 0 0e000000
fdtput bcm2835-rpi-b.dtb / system-rev 2
fdtput -t x bcm2835-rpi-b.dtb / system-serial 0 12345678
fdtput -t hhx bcm2835-rpi-b.dtb / mac-address 11 22 33 44 55 66
fdtput bcm2835-rpi-b.dtb /display width 656
fdtput bcm2835-rpi-b.dtb /display height 416
fdtput bcm2835-rpi-b.dtb /display depth 16
fdtput -t x bcm2835-rpi-b.dtb /axi/dma channels 3c
fdtput -t s bcm2835-rpi-b.dtb /chosen bootargs "console=ttyAMA0,115200 debug earlyprintk root=/dev/mmcblk0p2 rootwait"

This works, including the bootargs bit at the bottom, because of the added 128 bytes of padding when I called dtc.

from linux.

nomis avatar nomis commented on May 18, 2024

It works ok for me with the padding:
$ fdtput -t s arch/arm/boot/bcm2835-rpi-b.dtb /chosen bootargs "test"

Here's a sample .dtb with 4KB of padding: http://s85.org/EkRirRIb:raw

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Okay, I'll look more closely at how fdtput does it.

from linux.

nomis avatar nomis commented on May 18, 2024

The memory value should be changed to reserve the GPU's memory area instead of pretending it doesn't exist:

On 01/06/12 02:47, Stephen Warren wrote:

On 05/30/2012 07:25 PM, Stephen Warren wrote:

On 05/30/2012 05:12 AM, Simon Arlott wrote:

On Wed, May 30, 2012 04:45, Stephen Warren wrote:
...
These are not required. If not using the future bootloader, ftdput can be
used to set up those values. Memory is not fixed (256MB below is invalid as
the GPU requires some memory).

One thing I forgot to mention on the memory front. It's typical for the
memory property to represent the entire physical RAM on the board, even
if something else is using parts of it, so Linux can't touch it. You can
prevent Linux from using parts of the memory with the /memreserve/
syntax in the .dts file, which the bootloader should be able to add or
adjust as appropriate based on system configuration.

from linux.

nomis avatar nomis commented on May 18, 2024

libfdt has functions to delete and add reserved memory but fdtput has no functionality to use them.

128MB:
(echo -ne "\x00\x00\x00\x00\x08\x00\x00\x00"; echo -e "\x00\x00\x00\x00\x08\x00\x00\x00") | \ dd conv=notrunc bs=8 count=2 seek=5 of=arch/arm/boot/bcm2835-rpi-b.dtb

192MB:
(echo -ne "\x00\x00\x00\x00\x0c\x00\x00\x00"; echo -e "\x00\x00\x00\x00\x04\x00\x00\x00") | \ dd conv=notrunc bs=8 count=2 seek=5 of=arch/arm/boot/bcm2835-rpi-b.dtb

224MB:
(echo -ne "\x00\x00\x00\x00\x0e\x00\x00\x00"; echo -e "\x00\x00\x00\x00\x02\x00\x00\x00") | \ dd conv=notrunc bs=8 count=2 seek=5 of=arch/arm/boot/bcm2835-rpi-b.dtb

from linux.

nomis avatar nomis commented on May 18, 2024

Could you explain the purpose of the the DMA channels mask?

Channels 11 and 12 generate unexpected interrupts constantly.
Channels 13 and 14 haven't got interrupts.
Channel 15 never generates any interrupts (and it has an AXI ID of 0).

If I try to use channels 0-10 then 0-1 and 6 don't generate any interrupts but 2-5 and 7-10 work.
If I try to use channels 2-5 and 7-10 then only 2-5 work and 7-10 don't generate any interrupts.

from linux.

nomis avatar nomis commented on May 18, 2024

I've updated the location and name of the /system attributes, and the name of the /display and /axi/dma attributes to include "broadcom," prefixes.

from linux.

nomis avatar nomis commented on May 18, 2024

Channel 11 generates interrupts as normal
Channels 12-14 all generate interrupts on the IRQ for channels 11 and 12
Channel 15 isn't enabled and can't be enabled

Unless I try to use channel 6 (which never works), channels 7-10 don't work... channels 2-5 and 11-14 always work.

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Some info first. DMA is shared with GPU. This is typical usage:

DMA1: PWM audio
DMA2: ARM SDCARD
DMA6: GPU SDCARD
DMA15: GPU dma_memcpy

Once the ARM boots, DMA6 won't be used again by GPU (although I haven't tested what happens if interrupts go off - possibly something bad).

The DMA mask is the channels the GPU guarantees not to use. So 0x3c means GPU won't use 2,3,4,5.

So 2,3,4,5 should definitely work. Anything is not designed to be used by ARM, and possibly the GPU will also respond to interrupts, making behaviour undefined.

However as the GPU is never going to use more than a few DMA channels, it might be worth increasing the DMA mask to allow the ARM to make use of the channels, and see if the extra channels start working.

As background he's some info I discovered for teh-orph about burst sizes and lockups:

"If you do a big read burst then the DMA will ask for the required no
of beats but only consume 2 128 bit word. The DMA will then stall its
read bus, write out the data and then consume some more.
This runs the risk of a system wide lockup where the stalled read is
preventing the DMA write from completing due to some circular
dependency somewhere in the AXI system.

To make this safe, DMA0 and the VPU DMA (DMA15) have an 8 deep FIFO fitted to
the read data path. This adsorbs the extra read words and the read
bus then completes and becomes ready. The DMA then sucks the data out
of the fifo as it needs it.

You should be able to do read bursts of 9 with DMA0. 8 beats in the
fifo and 1 gets eaten by the DMA. 10 might also make it if the data
is aligned, else it gets stuck in the DMA arbiter which may stall all
the other channels until it clears.

However if he is managing 5 on a dma with no fifo then I assume that 2
in the DMA , and 1 in the DMA arbiter, and then 1 in the system
arbiter, 1 in the L2 or sdram arbiter and then you have a possible
system lock up so 6 would make sense."

from linux.

nomis avatar nomis commented on May 18, 2024

Could the GPU use one of the Lite channels for audio? Presumably this is related to audio/video playback by the GPU as the audio driver could do DMA itself.

It appears that the GPU is doing something odd with DMA6 causing DMA7-10 to stop working.

from linux.

nomis avatar nomis commented on May 18, 2024

Added /axi/sdhci/clock-frequency

from linux.

nomis avatar nomis commented on May 18, 2024

Added /axi/uart0/clock-frequency

The kernel has a subsystem to manage clock frequencies and enable/disable clocks so an interface to do that would be better than having to pass it through device tree.

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Can you check: raspberrypi/firmware#47

from linux.

nomis avatar nomis commented on May 18, 2024

It needs to work with "-p 4096" given to dtc (this is in my branch), instead of a command line with lots of spaces.

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

I'll see what I can do.

from linux.

nomis avatar nomis commented on May 18, 2024

It's also not clear if the reserved memory/dma channels/sdhci clock frequency has been added or not (I haven't tried using the latest firmware yet).

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

These appear to be currently supported:
"/memory/reg";
"/chosen/bootargs";
"/system-rev";
"/system-serial-low";
"/axi/usb/hub/ethernet/mac-address";
"/axi/dma/channels";
"/display/width";
"/display/height";
"/display/depth";

The clocks are available through the mailbox interface, but I can trivially add them here too if useful.

from linux.

nomis avatar nomis commented on May 18, 2024

/system-rev should now be /system/linux,revision
/system-serial-low should now be /system/linux,serial (u32 high followed by u32 low)
/axi/dma/channels should be /axi/dma/broadcom,channels
/display/width should be /display/broadcom,width
/display/height should be /display/broadcom,height
/display/depth should be /display/broadcom,depth

It would be useful if the sdhci and uart0 clocks were in device tree too - I still need to write the linux implementation for the mailbox clock interface

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

I've updated to these field names:

"/memory/reg";
"/chosen/bootargs";
"/system/linux,revision";
"/system/linux,serial";
"/axi/usb/hub/ethernet/mac-address";
"/axi/dma/broadcom,channels";
"/display/broadcom,width";
"/display/broadcom,height";
"/display/broadcom,depth";
"/axi/sdhci/clock-frequency";
"/axi/uart0/clock-frequency";

https://dl.dropbox.com/u/3669512/temp/start_devtree.elf

Does the example dtb have the updated field names?

from linux.

nomis avatar nomis commented on May 18, 2024

Sample dtb: http://s85.org/45uN9REW:raw
Modified dtb: http://s85.org/o1e1rXmO:raw
It's not booting beyond uncompressing the kernel

from linux.

nomis avatar nomis commented on May 18, 2024

It boots once I add an appropriate cmdline.txt, but it's missing the dma channels mask:

[   12.506201] calling  bcm2708_dma_driver_init+0x0/0xc @ 1
[   12.511623] bus: 'platform': add driver bcm2708_dma
[   12.516999] bus: 'platform': driver_probe_device: matched device 20007000.dma with driver bcm2708_dma
[   12.526360] bus: 'platform': really_probe: probing driver bcm2708_dma with device 20007000.dma
[   12.537637] bcm2708_dma 20007000.dma: no usable channels
[   12.544248] bcm2708_dma: probe of 20007000.dma rejects match -6
[   12.554396] initcall bcm2708_dma_driver_init+0x0/0xc returned 0 after 41747 usecs

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

I can't see what's wrong with dma channels. If I run with your "modified dtb", and dump the dt after modifiying it, I get:

MESS: 00:00:00.808067:0:          dma {
MESS: 00:00:00.808696:0:              compatible = [62 72 6f 61 64 63 6f 6d 2c 62 63 6d 32 38 33 35 2d 64 6d 61 00 62 72 6f 61 64 63 6f 6d 2c 62 63 6d 32 37 30 38 2d 64 6d 61 00];
MESS: 00:00:00.808779:0:              reg = <0x00007000 0x00001000 0x00e05000 0x00001000>;
MESS: 00:00:00.809730:0:              interrupts = <0x00000001 0x00000010 0x00000001 0x00000011 0x00000001 0x00000012 0x00000001 0x00000013 0x00000001 0x00000014 0x00000001 0x00000015 0x00000001 0x00000016 0x00000001 0x00000017 0x00000001 0x00000018 0x00000001 0x00000019 0x00000001 0x0000001a 0x00000001 0x0000001b 0x00000001 0x0000001b 0x00000001 0x0000001b 0x00000001 0x0000001b 0x00000001 0x0000001f>;
MESS: 00:00:00.809779:0:              broadcom,channels = <0x0000003c>;
MESS: 00:00:00.809794:0:          };

from linux.

nomis avatar nomis commented on May 18, 2024

Could you run "sample dtb" through your bootloader and send me the resulting dtb file?

I'm not sure I really ran it with your start.elf as that doesn't boot when I try it again.

from linux.

nomis avatar nomis commented on May 18, 2024

Forcing the kernel command line shows that you're removing the timer somehow:

Uncompressing Linux... done, booting the kernel.
[    0.000000] On node 0 totalpages: 49152
[    0.000000] free_area_init_node: node 0, pgdat c104e40c, node_mem_map c158f000
[    0.000000]   Normal zone: 384 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 48768 pages, LIFO batch:15
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 48768
[    0.000000] Kernel command line: console=ttyAMA0,115200 debug earlyprintk initcall_debug=1 sysrq_always_enabled dmatest.test_buf_size=131072 dmatest.threads_per_chan=1 dmatest.timeout=30000
[    0.000000] sysrq: sysrq always enabled.
[    0.000000] PID hash table entries: 1024 (order: 0, 4096 bytes)
[    0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
[    0.000000] Memory: 192MB = 192MB total
[    0.000000] Memory: 156328k/156328k available, 40280k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xcc800000 - 0xff000000   ( 808 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xcc000000   ( 192 MB)
[    0.000000]       .text : 0xc0008000 - 0xc0310660   (3106 kB)
[    0.000000]       .init : 0xc0311000 - 0xc102e000   (13428 kB)
[    0.000000]       .data : 0xc102e000 - 0xc104f060   ( 133 kB)
[    0.000000]        .bss : 0xc104f084 - 0xc158ed38   (5376 kB)
[    0.000000] SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] Kernel panic - not syncing: can't find system timer
[    0.000000] 
[    0.000000] [<c000deec>] (unwind_backtrace+0x0/0xe0) from [<c026b334>] (panic+0x80/0x1d0)
[    0.000000] [<c026b334>] (panic+0x80/0x1d0) from [<c03169cc>] (bcm2708_time_init+0x210/0x26c)
[    0.000000] [<c03169cc>] (bcm2708_time_init+0x210/0x26c) from [<c031650c>] (bcm2708_timer_init+0xb0/0xc4)
[    0.000000] [<c031650c>] (bcm2708_timer_init+0xb0/0xc4) from [<c03141c4>] (time_init+0x20/0x30)
[    0.000000] [<c03141c4>] (time_init+0x20/0x30) from [<c0311634>] (start_kernel+0x1a8/0x2f0)
[    0.000000] [<c0311634>] (start_kernel+0x1a8/0x2f0) from [<00008040>] (0x8040)
[    0.000000] ------------[ cut here ]------------
[    0.000000] WARNING: at kernel/lockdep.c:2585 panic+0x158/0x1d0()
[    0.000000] [<c000deec>] (unwind_backtrace+0x0/0xe0) from [<c0014a00>] (warn_slowpath_common+0x48/0x60)
[    0.000000] [<c0014a00>] (warn_slowpath_common+0x48/0x60) from [<c0014ad0>] (warn_slowpath_null+0x18/0x1c)
[    0.000000] [<c0014ad0>] (warn_slowpath_null+0x18/0x1c) from [<c026b40c>] (panic+0x158/0x1d0)
[    0.000000] [<c026b40c>] (panic+0x158/0x1d0) from [<c03169cc>] (bcm2708_time_init+0x210/0x26c)
[    0.000000] [<c03169cc>] (bcm2708_time_init+0x210/0x26c) from [<c031650c>] (bcm2708_timer_init+0xb0/0xc4)
[    0.000000] [<c031650c>] (bcm2708_timer_init+0xb0/0xc4) from [<c03141c4>] (time_init+0x20/0x30)
[    0.000000] [<c03141c4>] (time_init+0x20/0x30) from [<c0311634>] (start_kernel+0x1a8/0x2f0)
[    0.000000] [<c0311634>] (start_kernel+0x1a8/0x2f0) from [<00008040>] (0x8040)
[    0.000000] ---[ end trace 1b75b31a2719ed1c ]---

The memory should always be 256MB with memreserve configured to cover the memory used by the VideoCore.

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

This is my modded form of your sample dtb
https://dl.dropbox.com/u/3669512/temp/devtree.dat

The latest official firmware has the recent devtree mods in, so you could try this start.elf:
https://github.com/raspberrypi/firmware/blob/master/boot/start.elf

from linux.

nomis avatar nomis commented on May 18, 2024

The revision has the wrong endianness:

    system {
-       linux,revision = <0x0>;
-       linux,serial = <0x0 0x0>;
+       linux,revision = <0x1000000>;
+       linux,serial = <0x0 0xe>;
    };

Both clock-frequency values are being set to 0.

Is your serial definitely 14?

-                   mac-address = [00 00 00 00 00 00];
+                   mac-address = [b8 27 eb 00 00 0e];

I don't know why the kernel isn't finding the timer device. It works ok when the unmodified .dtb is put in place by the bootloader.

from linux.

nomis avatar nomis commented on May 18, 2024

I think this may be the problem:

-       bootargs = [00];
+       bootargs = [64];

The only change here is 0x00 to 0x64 and there's no command line string in the .dtb:

@@ -16 +16 @@
-0000240 00 00 00 01 00 00 00 2c 00 00 00 00 00 00 00 02
+0000240 00 00 00 01 00 00 00 2c 64 00 00 00 00 00 00 02

If I change that back to 00 it then boots a bit further, but fails because of:

[    0.000000] Memory: 384MB = 384MB total
[    0.000000] Memory: 220092k/220092k available, 173124k reserved, 0K highmem

You're specifying 384MB of RAM instead of 256MB:

    memory {
        device_type = "memory";
-       reg = <0x0 0x10000000>;
+       reg = <0x0 0x18000000>;
    };

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Yes my serial is 14.
The revision is correct. My board's not been through factory programming so doesn't have a board rev. It does have the overclock/overvolt bit set (bit 24)
The clocks are my fault. It will report them if they are specified in config.txt, but I forgot to report the default. Fixed in my source tree.

(start.elf dropbox link is updated, if you are able to boot).

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

I'm not putting the command line in as it won't fit, and I haven't implemented the devtree decompile/compile.
I think if you pad your "/chosen/bootargs" to, say 256 spaces, you will get a command line filled in.

The start.elf on github/dropbox will fill in the correct memory size.

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Okay, I've switched to using libfdt.
I was under the impression I needed dtc, which was under GPL, and so not suitable for linking with GPU code.
But I only actually needed libfdt, which seems usable with the BSD licence.
It seems to be working, and your command line text is filled in now.
I've moved back to a 128M memory split. The last one on dropbox was 192M,

These are updated:
https://dl.dropbox.com/u/3669512/temp/start_devtree.elf
https://dl.dropbox.com/u/3669512/temp/devtree.dat

from linux.

nomis avatar nomis commented on May 18, 2024

The memory size is still wrong, it should always be 256MB:
[ 0.000000] Memory: 128MB = 128MB total

I don't see why but it's still losing the system timer for me:
[ 0.000000] Kernel panic - not syncing: can't find system timer

Perhaps the boot args need to be null terminated?

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

If I always report 256M, how do you determine if the arm has 128M/192M/224M/240M?

from linux.

nomis avatar nomis commented on May 18, 2024

Because the memreserve value will reserve the range used by the VideoCore

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Okay, updated:
https://dl.dropbox.com/u/3669512/temp/start_devtree.elf
https://dl.dropbox.com/u/3669512/temp/devtree.dat

should have /memory/reg and /memreserve filled in as descibed, plus null on end of boot args.

from linux.

nomis avatar nomis commented on May 18, 2024

That sample device tree doesn't appear to be modified at all, but the start.elf is still giving me the same 128MB memory and kernel error.

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

My mistake. The files are updated again.

from linux.

nomis avatar nomis commented on May 18, 2024

They're still the same:

--2012-09-13 23:19:35--  http://dl.dropbox.com/u/3669512/temp/start_devtree.elf
Resolving dl.dropbox.com... 174.129.218.194, 107.20.142.191, 174.129.199.91, ...
Connecting to dl.dropbox.com|174.129.218.194|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2466672 (2.4M) [application/octet-stream]
Saving to: `start_devtree.elf'

     0K ........ ........ ........ ........ .....            100% 1.06M=2.2s

2012-09-13 23:19:38 (1.06 MB/s) - `start_devtree.elf' saved [2466672/2466672]
--2012-09-14 07:36:40--  http://dl.dropbox.com/u/3669512/temp/start_devtree.elf
Resolving dl.dropbox.com... 107.20.235.144, 23.23.134.47, 50.19.106.181, ...
Connecting to dl.dropbox.com|107.20.235.144|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2466672 (2.4M) [application/octet-stream]
Saving to: `start_devtree.elf'

     0K ........ ........ ........ ........ .....            100% 1.02M=2.3s

2012-09-14 07:36:44 (1.02 MB/s) - `start_devtree.elf' saved [2466672/2466672]

from linux.

popcornmix avatar popcornmix commented on May 18, 2024
 wget http://dl.dropbox.com/u/3669512/temp/devtree.dat
--2012-09-14 10:54:09--  http://dl.dropbox.com/u/3669512/temp/devtree.dat
Resolving dl.dropbox.com (dl.dropbox.com)... 107.20.138.135, 107.20.207.68, 107.20.235.144, ...
Connecting to dl.dropbox.com (dl.dropbox.com)|107.20.138.135|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12279 (12K) [application/x-ns-proxy-autoconfig]
Saving to: `devtree.dat'

100%[==============================================================================================>] 12,279      65.8K/s   in 0.2s

2012-09-14 10:54:09 (65.8 KB/s) - `devtree.dat' saved [12279/12279]
fdtdump.exe devtree.dat > /cygdrive/c/Users/dc4/Dropbox/Public/temp/devtree.txt

And this file:
https://dl.dropbox.com/u/3669512/temp/devtree.txt
contains:

    memreserve = <0x08000000 0x08000000>;
    chosen {
        bootargs = "dwc_otg.lpm_enable=0 dwc_otg.nak_holdoff_enable=1 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 nfsroot=10.177.65.90:/home/dc4/rootfs ip=dhcp rootwait";
    };
    memory {
        device_type = "memory";
        reg = <0x00000000 0x10000000>;
    };

from linux.

nomis avatar nomis commented on May 18, 2024

Ok, but the start.elf appears to be the same as it still reports the memory as 128MB.

$ sha1sum start_devtree.elf
3f505c4a0d4cab79cfdfc48fdb0224bf5ea817fe  start_devtree.elf

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Your sha1sum is correct. However I has just downloaded that dropbox elf file. Run it on my system. Extracted the modified devtree file, and it is binary identical with the modified devtree file I posted (with 128M of memory).
Sure you have renamed start_devtree.elf to start.elf?

from linux.

nomis avatar nomis commented on May 18, 2024

That dtb is now correct:

@@ -4,0 +5 @@
+   memreserve = <0x8000000 0x8000000>;
@@ -11 +12 @@
-       bootargs = [64 77 63 5f 6f 74 67 2e 6c 70 6d 5f 65 6e 61 62 6c 65 3d 30 20 64 77 63 5f 6f 74 67 2e 66 69 71 5f 66 69 78 5f 65 6e 61 62 6c 65 3d 31 20 63 6f 6e 73 6f 6c 65 3d 74 74 79 41 4d 41 30 2c 31 31 35 32 30 30 20 6b 67 64 62 6f 63 3d 74 74 79 41 4d 41 30 2c 31 31 35 32 30 30 20 63 6f 6e 73 6f 6c 65 3d 74 74 79 31 20 6e 66 73 72 6f 6f 74 3d 31 30 2e 31 37 37 2e 36 35 2e 39 30 3a 2f 68 6f 6d 65 2f 64 63 34 2f 72 6f 6f 74 66 73 20 69 70 3d 64 68 63 70 20 72 6f 6f 74 77 61 69 74];
+       bootargs = "dwc_otg.lpm_enable=0 dwc_otg.nak_holdoff_enable=1 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 nfsroot=10.177.65.90:/home/dc4/rootfs ip=dhcp rootwait";
@@ -19 +20 @@
-       reg = <0x0 0x8000000>;
+       reg = <0x0 0x10000000>;

I have your latest start.elf:

simon@redrum /media/disk $ ls -l
total 18076
-rw-r--r-- 1 simon root    12279 Sep 13 22:37 bcm2835.dtb
-rw-r--r-- 1 simon root    16528 Jun 15 21:15 bootcode.bin
-rw-r--r-- 1 simon root      165 Sep 13 22:36 cmdline.txt
-rw-r--r-- 1 simon root      171 Jun 15 21:18 config.txt
-rw-r--r-- 1 simon root 11181344 Sep 13 22:38 kernel.img
-rw-r--r-- 1 simon root   314691 Jun 15 21:15 loader.bin
-rw-r--r-- 1 simon root  2466672 Sep 14 17:26 start_devtree.elf
-rw-r--r-- 1 simon root  2466672 Sep 14 07:35 start.elf
-rw-r--r-- 1 simon root  2040328 Jun 15 21:15 start_normal.elf
simon@redrum /media/disk $ sha1sum start.elf 
3f505c4a0d4cab79cfdfc48fdb0224bf5ea817fe  start.elf

However, I'm still getting the old behaviour:

Uncompressing Linux... done, booting the kernel.
[    0.000000] On node 0 totalpages: 32768
[    0.000000] free_area_init_node: node 0, pgdat c104e40c, node_mem_map c158f000
[    0.000000]   Normal zone: 256 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 32512 pages, LIFO batch:7
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
[    0.000000] Kernel command line: console=ttyAMA0,115200 debug earlyprintk initcall_debug=1 sysrq_always_enabled dmatest.test_buf_size=131072 dmatest.threads_per_chan=1 dmatest.timeout=30000
[    0.000000] sysrq: sysrq always enabled.
[    0.000000] PID hash table entries: 512 (order: -1, 2048 bytes)
[    0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
[    0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.000000] Memory: 128MB = 128MB total
[    0.000000] Memory: 91408k/91408k available, 39664k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xc8800000 - 0xff000000   ( 872 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xc8000000   ( 128 MB)
[    0.000000]       .text : 0xc0008000 - 0xc0310660   (3106 kB)
[    0.000000]       .init : 0xc0311000 - 0xc102e000   (13428 kB)
[    0.000000]       .data : 0xc102e000 - 0xc104f060   ( 133 kB)
[    0.000000]        .bss : 0xc104f084 - 0xc158ed38   (5376 kB)
[    0.000000] SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] Kernel panic - not syncing: can't find system timer
[    0.000000] 
[    0.000000] [<c000deec>] (unwind_backtrace+0x0/0xe0) from [<c026b334>] (panic+0x80/0x1d0)
[    0.000000] [<c026b334>] (panic+0x80/0x1d0) from [<c03169cc>] (bcm2708_time_init+0x210/0x26c)
[    0.000000] [<c03169cc>] (bcm2708_time_init+0x210/0x26c) from [<c031650c>] (bcm2708_timer_init+0xb0/0xc4)
[    0.000000] [<c031650c>] (bcm2708_timer_init+0xb0/0xc4) from [<c03141c4>] (time_init+0x20/0x30)
[    0.000000] [<c03141c4>] (time_init+0x20/0x30) from [<c0311634>] (start_kernel+0x1a8/0x2f0)
[    0.000000] [<c0311634>] (start_kernel+0x1a8/0x2f0) from [<00008040>] (0x8040)
[    0.000000] ------------[ cut here ]------------
[    0.000000] WARNING: at kernel/lockdep.c:2585 panic+0x158/0x1d0()
[    0.000000] [<c000deec>] (unwind_backtrace+0x0/0xe0) from [<c0014a00>] (warn_slowpath_common+0x48/0x60)
[    0.000000] [<c0014a00>] (warn_slowpath_common+0x48/0x60) from [<c0014ad0>] (warn_slowpath_null+0x18/0x1c)
[    0.000000] [<c0014ad0>] (warn_slowpath_null+0x18/0x1c) from [<c026b40c>] (panic+0x158/0x1d0)
[    0.000000] [<c026b40c>] (panic+0x158/0x1d0) from [<c03169cc>] (bcm2708_time_init+0x210/0x26c)
[    0.000000] [<c03169cc>] (bcm2708_time_init+0x210/0x26c) from [<c031650c>] (bcm2708_timer_init+0xb0/0xc4)
[    0.000000] [<c031650c>] (bcm2708_timer_init+0xb0/0xc4) from [<c03141c4>] (time_init+0x20/0x30)
[    0.000000] [<c03141c4>] (time_init+0x20/0x30) from [<c0311634>] (start_kernel+0x1a8/0x2f0)
[    0.000000] [<c0311634>] (start_kernel+0x1a8/0x2f0) from [<00008040>] (0x8040)
[    0.000000] ---[ end trace 1b75b31a2719ed1c ]---

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

Can you send me a kernel that has the problem?

from linux.

nomis avatar nomis commented on May 18, 2024

http://redrum.lp0.eu/rpi-zImage

This currently has the following forced command line: "console=ttyAMA0,115200 debug earlyprintk initcall_debug=1 sysrq_always_enabled dmatest.test_buf_size=131072 dmatest.threads_per_chan=1 dmatest.timeout=30000"

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

And can you confirm what you want displayed here:
[ 0.000000] Memory: 128MB = 128MB total

if there is a 192M split for ARM (64M for GPU) and a total of 256M?

from linux.

nomis avatar nomis commented on May 18, 2024

It should look like this:

[    0.000000] Memory: 256MB = 256MB total
[    0.000000] Memory: 155784k/155784k available, 106360k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xd0800000 - 0xff000000   ( 744 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xd0000000   ( 256 MB)
[    0.000000]       .text : 0xc0008000 - 0xc0310660   (3106 kB)
[    0.000000]       .init : 0xc0311000 - 0xc102e000   (13428 kB)
[    0.000000]       .data : 0xc102e000 - 0xc104f060   ( 133 kB)
[    0.000000]        .bss : 0xc104f084 - 0xc158ed38   (5376 kB)
# head /sys/kernel/debug/memblock/*
==> /sys/kernel/debug/memblock/memory <==
   0: 0x00000000..0x0fffffff

==> /sys/kernel/debug/memblock/reserved <==
   0: 0x00000100..0x000030f6
   1: 0x00004000..0x00007fff
   2: 0x00008200..0x0158ed37
   3: 0x0aff1000..0x0affefff
   4: 0x0affffc0..0x0fffffff

from linux.

popcornmix avatar popcornmix commented on May 18, 2024

I'm a bit confused. Your kernel doesn't seem to use the device tree for this:
[ 0.000000] Memory: 128MB = 128MB total
That value comes from the ATAGS. Was that intended?
Con you confirm if you are running with:
disable_cmdline_tags=1

from linux.

nomis avatar nomis commented on May 18, 2024

I have "disable_commandline_tags=1" but it still says 128MB even after changing that to "disable_cmdline_tags=1".

from linux.

ghollingworth avatar ghollingworth commented on May 18, 2024

This looks a bit off topic and old now!

from linux.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.