All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mikhail Zolotaryov <lebon@lebon.org.ua>
To: Mike Nuss <mike@terascala.com>
Cc: linuxppc-dev@lists.ozlabs.org
Subject: Re: Regression detecting memory size on PPC440EPx
Date: Mon, 05 Oct 2009 19:05:30 +0300	[thread overview]
Message-ID: <4ACA194A.6070907@lebon.org.ua> (raw)
In-Reply-To: <2C7DE72B9BD00F44BAECA5B0CBB873955CADF3@hermes.terascala.com>

Hi Mike,

you wrote:
"Row address bits : 13
DDR0_02 = 0x020C0E01
DDR0_42 = 0x00000006"

Register values above define that memory has 14 row address bits. The 
correct setting is (for CAS Latency = 3):
DDR0_42 = 0x01000006

Best regards,
Mikhail Zolotaryov


Mike Nuss wrote:
> (top-posting corrected)
>
> Mikhail Zolotaryov wrote:
>   
>> Mike Nuss wrote:
>>     
>>> There was a fix a while back called "Correct memory size calculation
>>> for Denali based boards" that corrected the data width detection in
>>> the 4xx bootwrapper. 
>>>
>>> This seems to have had the unintended consequence of exposing another
>>> bug in the same code.  I have a board very similar to Sequoia, except
>>> that it uses a DDR2 DIMM module.  It uses a single 256MB DIMM.  After
>>> upgrading to the latest kernel, which includes the previously
>>> mentioned fix, U-Boot works fine, but the kernel detects 512MB
>>> instead, and of course, the kernel panics. 
>>>
>>> The error seems to be in the calculation of row bits.  U-Boot's SPD
>>> detection says that the DIMM uses 13 bits, but I added some
>>> printf()s to the bootwrapper, and it is setting row to 14 instead. 
>>> I'm not too clear on how this code works; it calculates the row bits
>>> by subtracting the row from max_row, and maybe max_row is wrong?
>>>       
>> Hi Mike,
>>
>> Address width calculation is based on the DDR-controller configuration
>> set by the bootloader. It would be helpful for further discussion if
>> you could send DDR0_00..DDR0_44 register values and memory
>> configuration used (no of banks, bank size, I/O width) to check
>> calculations. Thanks. 
>>
>> P.S. Sequoia board also has DDR2 SDRAM from Micron.
>>
>> Best regards,
>> Mikhail Zolotaryov
>>     
>
> Thanks for your reply.
>
> Here is the dump from U-Boot during intialization with DEBUG turned on
> in the denali code:
>
>   Register Dump:
>         DDR0_00 = 0x0000190A        DDR0_01 = 0x010000FF
>         DDR0_02 = 0x020C0E00        DDR0_03 = 0x02030602
>         DDR0_04 = 0x0A020200        DDR0_05 = 0x02020308
>         DDR0_06 = 0x0102C812        DDR0_07 = 0x000D0100
>         DDR0_08 = 0x02C80001        DDR0_09 = 0x00011D5F
>         DDR0_10 = 0x00000100        DDR0_11 = 0x0022C800
>         DDR0_12 = 0x00000003        DDR0_14 = 0x00000000
>         DDR0_17 = 0x19000000        DDR0_18 = 0x19191919
>         DDR0_19 = 0x19191919        DDR0_20 = 0x0B0B0B0B
>         DDR0_21 = 0x0B0B0B0B        DDR0_22 = 0x00267F0B
>         DDR0_23 = 0x00000000        DDR0_24 = 0x01020001
>         DDR0_25 = 0x20410000        DDR0_26 = 0x2DB40514
>         DDR0_27 = 0x00008236        DDR0_28 = 0x00000000
>         DDR0_31 = 0x00000000        DDR0_32 = 0x00000000
>         DDR0_33 = 0x00000000        DDR0_34 = 0x00000000
>         DDR0_35 = 0x00000000        DDR0_36 = 0x00000000
>         DDR0_37 = 0x00000000        DDR0_38 = 0x00000000
>         DDR0_39 = 0x00000000        DDR0_40 = 0x00000000
>         DDR0_41 = 0x00000000        DDR0_42 = 0x00000006
>         DDR0_43 = 0x030A0200        DDR0_44 = 0x00000003
> dram_size = 268435456
>
>   Register Dump:
>         DDR0_00 = 0x00C0190A        DDR0_01 = 0x010000FF
>         DDR0_02 = 0x020C0E01        DDR0_03 = 0x02030602
>         DDR0_04 = 0x0A020200        DDR0_05 = 0x02020308
>         DDR0_06 = 0x0102C812        DDR0_07 = 0x000D0100
>         DDR0_08 = 0x02C80001        DDR0_09 = 0x00011D5E
>         DDR0_10 = 0x00000100        DDR0_11 = 0x0022C800
>         DDR0_12 = 0x00000003        DDR0_14 = 0x00000000
>         DDR0_17 = 0x1E014800        DDR0_18 = 0x1E1E1E1E
>         DDR0_19 = 0x1E1E1E1E        DDR0_20 = 0x0B0B0B0B
>         DDR0_21 = 0x0B0B0B0B        DDR0_22 = 0x00267E0B
>         DDR0_23 = 0x00000000        DDR0_24 = 0x01020001
>         DDR0_25 = 0x20410000        DDR0_26 = 0x2DB40514
>         DDR0_27 = 0x00008236        DDR0_28 = 0x00000000
>         DDR0_31 = 0x00000000        DDR0_32 = 0x00000000
>         DDR0_33 = 0x00000000        DDR0_34 = 0x00000000
>         DDR0_35 = 0x00000000        DDR0_36 = 0x00000000
>         DDR0_37 = 0x00000000        DDR0_38 = 0x00000000
>         DDR0_39 = 0x00000000        DDR0_40 = 0x00000000
>         DDR0_41 = 0x00000000        DDR0_42 = 0x00000006
>         DDR0_43 = 0x030A0200        DDR0_44 = 0x00000003
> Zeroing SDRAM...Completed
> 256 MB (ECC not enabled, 333 MHz, CL3)
>
>
> Here is the memory configuration:
> SPD data revision            1.2
> Bytes used                   0x80
> Serial memory size           0x100
> Memory type                  DDR2
> Row address bits             13
> Column address bits          10
> Number of ranks              1
> Module data width            64 bits
> Interface signal levels      SSTL 1.8 V
> SDRAM cycle time             3.0 ns
> SDRAM access time            0.45 ns
> EDC configuration            None
> Self refresh, rate           7.8 us
> SDRAM width (primary)        16
> Burst length(s)              8 4
> Number of banks              4
> CAS latency(s)               5 4 3
> Module attributes:
>   0 PLLs on DIMM
>   Supports 50 ohm ODT
>   Supports weak driver
> SDRAM cycle time (2nd highest CAS latency)        3.75 ns
> SDRAM access from clock (2nd highest CAS latency) 0.45 ns
> SDRAM cycle time (3rd highest CAS latency)        5.0 ns
> SDRAM access from clock (3rd highest CAS latency) 0.45 ns
> Minimum row precharge        15.00 ns
> Row active to row active min 10.00 ns
> RAS to CAS delay min         15.00 ns
> Minimum RAS pulse width      45 ns
> Density of each row          256 MiB
> Command and Address setup    0.20 ns
> Command and Address hold     0.27 ns
> Data signal input setup      0.10 ns
> Data signal input hold       0.17 ns
> Manufacturer's JEDEC ID      2C 00 00 00 00 00 00 00
> Manufacturing Location       08
> Manufacturer's Part Number   34 48 54 46 33 32 36 34 48 59 2D 36 36 37
> 44 33 20 20
> Revision Code                03 00
> Manufacturing Date           07 32
> Assembly Serial Number       D3 23 09 9E
>
>
> Here is the bootwrapper output on startup (everything except the last
> line is from printf()s added by me):
>
> real_cs:1
> cs:1
> dpath bytes:8
> row:14
> col:10
> banks:4
> memsize:536870912
> memsize (errata):536866816
> Memory <- <0x0 0x0 0x1ffff000> (511MB)
>
> Note 511MB is obviously wrong. "row" differs from "Row address bits"
> from U-Boot, which is where I guess the problem lies.
>
> Thanks,
> Mike
>   

  reply	other threads:[~2009-10-05 16:05 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-05 14:57 Regression detecting memory size on PPC440EPx Mike Nuss
2009-10-05 15:38 ` Mikhail Zolotaryov
2009-10-05 15:44   ` Mike Nuss
2009-10-05 16:05     ` Mikhail Zolotaryov [this message]
2009-10-05 16:23       ` Mike Nuss
2009-10-05 15:44   ` Valentine
2009-10-05 15:49     ` Mike Nuss
2009-10-09  8:19       ` Benjamin Herrenschmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4ACA194A.6070907@lebon.org.ua \
    --to=lebon@lebon.org.ua \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mike@terascala.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.