| Embedded Memory Controller |
| |
| Properties: |
| - name : Should be emc |
| - #address-cells : Should be 1 |
| - #size-cells : Should be 0 |
| - compatible : Should contain "nvidia,tegra20-emc". |
| - reg : Offset and length of the register set for the device |
| - nvidia,use-ram-code : If present, the sub-nodes will be addressed |
| and chosen using the ramcode board selector. If omitted, only one |
| set of tables can be present and said tables will be used |
| irrespective of ram-code configuration. |
| |
| Child device nodes describe the memory settings for different configurations and clock rates. |
| |
| Example: |
| |
| memory-controller@7000f400 { |
| #address-cells = < 1 >; |
| #size-cells = < 0 >; |
| compatible = "nvidia,tegra20-emc"; |
| reg = <0x7000f4000 0x200>; |
| } |
| |
| |
| Embedded Memory Controller ram-code table |
| |
| If the emc node has the nvidia,use-ram-code property present, then the |
| next level of nodes below the emc table are used to specify which settings |
| apply for which ram-code settings. |
| |
| If the emc node lacks the nvidia,use-ram-code property, this level is omitted |
| and the tables are stored directly under the emc node (see below). |
| |
| Properties: |
| |
| - name : Should be emc-tables |
| - nvidia,ram-code : the binary representation of the ram-code board strappings |
| for which this node (and children) are valid. |
| |
| |
| |
| Embedded Memory Controller configuration table |
| |
| This is a table containing the EMC register settings for the various |
| operating speeds of the memory controller. They are always located as |
| subnodes of the emc controller node. |
| |
| There are two ways of specifying which tables to use: |
| |
| * The simplest is if there is just one set of tables in the device tree, |
| and they will always be used (based on which frequency is used). |
| This is the preferred method, especially when firmware can fill in |
| this information based on the specific system information and just |
| pass it on to the kernel. |
| |
| * The slightly more complex one is when more than one memory configuration |
| might exist on the system. The Tegra20 platform handles this during |
| early boot by selecting one out of possible 4 memory settings based |
| on a 2-pin "ram code" bootstrap setting on the board. The values of |
| these strappings can be read through a register in the SoC, and thus |
| used to select which tables to use. |
| |
| Properties: |
| - name : Should be emc-table |
| - compatible : Should contain "nvidia,tegra20-emc-table". |
| - reg : either an opaque enumerator to tell different tables apart, or |
| the valid frequency for which the table should be used (in kHz). |
| - clock-frequency : the clock frequency for the EMC at which this |
| table should be used (in kHz). |
| - nvidia,emc-registers : a 46 word array of EMC registers to be programmed |
| for operation at the 'clock-frequency' setting. |
| The order and contents of the registers are: |
| RC, RFC, RAS, RP, R2W, W2R, R2P, W2P, RD_RCD, WR_RCD, RRD, REXT, |
| WDV, QUSE, QRST, QSAFE, RDV, REFRESH, BURST_REFRESH_NUM, PDEX2WR, |
| PDEX2RD, PCHG2PDEN, ACT2PDEN, AR2PDEN, RW2PDEN, TXSR, TCKE, TFAW, |
| TRPAB, TCLKSTABLE, TCLKSTOP, TREFBW, QUSE_EXTRA, FBIO_CFG6, ODT_WRITE, |
| ODT_READ, FBIO_CFG5, CFG_DIG_DLL, DLL_XFORM_DQS, DLL_XFORM_QUSE, |
| ZCAL_REF_CNT, ZCAL_WAIT_CNT, AUTO_CAL_INTERVAL, CFG_CLKTRIM_0, |
| CFG_CLKTRIM_1, CFG_CLKTRIM_2 |
| |
| emc-table@166000 { |
| reg = <166000>; |
| compatible = "nvidia,tegra20-emc-table"; |
| clock-frequency = < 166000 >; |
| nvidia,emc-registers = < 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 >; |
| }; |
| |
| emc-table@333000 { |
| reg = <333000>; |
| compatible = "nvidia,tegra20-emc-table"; |
| clock-frequency = < 333000 >; |
| nvidia,emc-registers = < 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 >; |
| }; |