Add device-tree binding for NVIDIA Tegra30 External Memory Controller.
The binding is based on the Tegra124 EMC binding since hardware is
similar, although there are couple significant differences.

Signed-off-by: Dmitry Osipenko <dig...@gmail.com>
---
 .../memory-controllers/nvidia,tegra30-emc.txt | 257 ++++++++++++++++++
 1 file changed, 257 insertions(+)
 create mode 100644 
Documentation/devicetree/bindings/memory-controllers/nvidia,tegra30-emc.txt

diff --git 
a/Documentation/devicetree/bindings/memory-controllers/nvidia,tegra30-emc.txt 
b/Documentation/devicetree/bindings/memory-controllers/nvidia,tegra30-emc.txt
new file mode 100644
index 000000000000..dffe396c5d79
--- /dev/null
+++ 
b/Documentation/devicetree/bindings/memory-controllers/nvidia,tegra30-emc.txt
@@ -0,0 +1,257 @@
+NVIDIA Tegra30 SoC EMC (external memory controller)
+====================================================
+
+Required properties :
+- compatible : Should be "nvidia,tegra30-emc".
+- reg : physical base address and length of the controller's registers.
+- #address-cells : Should be 1
+- #size-cells : Should be 0
+- interrupts : Should contain EMC General interrupt.
+- clocks : Should contain EMC clock.
+- nvidia,memory-controller : phandle of the MC driver.
+
+The node should contain a "emc-timings" subnode for each supported RAM type
+(see field RAM_CODE in register PMC_STRAPPING_OPT_A), with its unit address
+being its RAM_CODE.
+
+Required properties for "emc-timings" nodes :
+- nvidia,ram-code : Should contain the value of RAM_CODE this timing set is
+used for.
+
+Each "emc-timings" node should contain a "timing" subnode for every supported
+EMC clock rate. The "timing" subnodes should have the clock rate in Hz as
+their unit address.
+
+Required properties for "timing" nodes :
+- clock-frequency : Should contain the memory clock rate in Hz.
+- The following properties contain EMC timing characterization values
+(specified in the board documentation) :
+  - nvidia,emc-auto-cal-interval : EMC_AUTO_CAL_INTERVAL
+  - nvidia,emc-mode-1 : Mode Register 1
+  - nvidia,emc-mode-2 : Mode Register 2
+  - nvidia,emc-mode-reset : Mode Register 0
+  - nvidia,emc-zcal-cnt-long : EMC_ZCAL_WAIT_CNT after clock change
+  - nvidia,emc-cfg-dyn-self-ref : dynamic self-refresh enabled
+  - nvidia,emc-cfg-periodic-qrst : FBIO "read" FIFO periodic resetting enabled
+- nvidia,emc-configuration : EMC timing characterization data. These are the
+registers (see section "18.13.2 EMC Registers" in the TRM) whose values need to
+be specified, according to the board documentation:
+
+       EMC_RC
+       EMC_RFC
+       EMC_RAS
+       EMC_RP
+       EMC_R2W
+       EMC_W2R
+       EMC_R2P
+       EMC_W2P
+       EMC_RD_RCD
+       EMC_WR_RCD
+       EMC_RRD
+       EMC_REXT
+       EMC_WEXT
+       EMC_WDV
+       EMC_QUSE
+       EMC_QRST
+       EMC_QSAFE
+       EMC_RDV
+       EMC_REFRESH
+       EMC_BURST_REFRESH_NUM
+       EMC_PRE_REFRESH_REQ_CNT
+       EMC_PDEX2WR
+       EMC_PDEX2RD
+       EMC_PCHG2PDEN
+       EMC_ACT2PDEN
+       EMC_AR2PDEN
+       EMC_RW2PDEN
+       EMC_TXSR
+       EMC_TXSRDLL
+       EMC_TCKE
+       EMC_TFAW
+       EMC_TRPAB
+       EMC_TCLKSTABLE
+       EMC_TCLKSTOP
+       EMC_TREFBW
+       EMC_QUSE_EXTRA
+       EMC_FBIO_CFG6
+       EMC_ODT_WRITE
+       EMC_ODT_READ
+       EMC_FBIO_CFG5
+       EMC_CFG_DIG_DLL
+       EMC_CFG_DIG_DLL_PERIOD
+       EMC_DLL_XFORM_DQS0
+       EMC_DLL_XFORM_DQS1
+       EMC_DLL_XFORM_DQS2
+       EMC_DLL_XFORM_DQS3
+       EMC_DLL_XFORM_DQS4
+       EMC_DLL_XFORM_DQS5
+       EMC_DLL_XFORM_DQS6
+       EMC_DLL_XFORM_DQS7
+       EMC_DLL_XFORM_QUSE0
+       EMC_DLL_XFORM_QUSE1
+       EMC_DLL_XFORM_QUSE2
+       EMC_DLL_XFORM_QUSE3
+       EMC_DLL_XFORM_QUSE4
+       EMC_DLL_XFORM_QUSE5
+       EMC_DLL_XFORM_QUSE6
+       EMC_DLL_XFORM_QUSE7
+       EMC_DLI_TRIM_TXDQS0
+       EMC_DLI_TRIM_TXDQS1
+       EMC_DLI_TRIM_TXDQS2
+       EMC_DLI_TRIM_TXDQS3
+       EMC_DLI_TRIM_TXDQS4
+       EMC_DLI_TRIM_TXDQS5
+       EMC_DLI_TRIM_TXDQS6
+       EMC_DLI_TRIM_TXDQS7
+       EMC_DLL_XFORM_DQ0
+       EMC_DLL_XFORM_DQ1
+       EMC_DLL_XFORM_DQ2
+       EMC_DLL_XFORM_DQ3
+       EMC_XM2CMDPADCTRL
+       EMC_XM2DQSPADCTRL2
+       EMC_XM2DQPADCTRL2
+       EMC_XM2CLKPADCTRL
+       EMC_XM2COMPPADCTRL
+       EMC_XM2VTTGENPADCTRL
+       EMC_XM2VTTGENPADCTRL2
+       EMC_XM2QUSEPADCTRL
+       EMC_XM2DQSPADCTRL3
+       EMC_CTT_TERM_CTRL
+       EMC_ZCAL_INTERVAL
+       EMC_ZCAL_WAIT_CNT
+       EMC_MRS_WAIT_CNT
+       EMC_AUTO_CAL_CONFIG
+       EMC_CTT
+       EMC_CTT_DURATION
+       EMC_DYN_SELF_REF_CONTROL
+       EMC_FBIO_SPARE
+       EMC_CFG_RSV
+
+Example SoC include file:
+
+/ {
+       emc@7000f400 {
+               compatible = "nvidia,tegra30-emc";
+               reg = <0x7000f400 0x400>;
+               interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&tegra_car TEGRA30_CLK_EMC>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               nvidia,memory-controller = <&mc>;
+       };
+};
+
+Example board file:
+
+/ {
+       emc@7000f400 {
+               emc-timings-1 {
+                       nvidia,ram-code = <1>;
+
+                       timing-667000000 {
+                               clock-frequency = <667000000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100002>;
+                               nvidia,emc-mode-2 = <0x80200018>;
+                               nvidia,emc-mode-reset = <0x80000b71>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-dyn-self-ref = <0x00000000>;
+                               nvidia,emc-cfg-periodic-qrst = <0x00000001>;
+
+                               nvidia,emc-configuration = <
+                                       0x00000020 /* EMC_RC */
+                                       0x0000006a /* EMC_RFC */
+                                       0x00000017 /* EMC_RAS */
+                                       0x00000007 /* EMC_RP */
+                                       0x00000005 /* EMC_R2W */
+                                       0x0000000c /* EMC_W2R */
+                                       0x00000003 /* EMC_R2P */
+                                       0x00000011 /* EMC_W2P */
+                                       0x00000007 /* EMC_RD_RCD */
+                                       0x00000007 /* EMC_WR_RCD */
+                                       0x00000002 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000007 /* EMC_WDV */
+                                       0x0000000a /* EMC_QUSE */
+                                       0x00000009 /* EMC_QRST */
+                                       0x0000000b /* EMC_QSAFE */
+                                       0x00000011 /* EMC_RDV */
+                                       0x00001412 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x00000504 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x0000000e /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x0000000c /* EMC_AR2PDEN */
+                                       0x00000016 /* EMC_RW2PDEN */
+                                       0x00000072 /* EMC_TXSR */
+                                       0x00000200 /* EMC_TXSRDLL */
+                                       0x00000005 /* EMC_TCKE */
+                                       0x00000015 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000006 /* EMC_TCLKSTABLE */
+                                       0x00000007 /* EMC_TCLKSTOP */
+                                       0x00001453 /* EMC_TREFBW */
+                                       0x0000000b /* EMC_QUSE_EXTRA */
+                                       0x00000006 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00005088 /* EMC_FBIO_CFG5 */
+                                       0xf00b0191 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS0 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS1 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS2 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS3 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS4 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS5 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS6 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS7 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQ0 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQ1 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQ2 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800013d /* EMC_XM2DQSPADCTRL2 */
+                                       0x22220000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f501 /* EMC_XM2COMPPADCTRL */
+                                       0x07077404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000000 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x080001e8 /* EMC_XM2QUSEPADCTRL */
+                                       0x0c000021 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00020000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000100 /* EMC_ZCAL_WAIT_CNT */
+                                       0x0155000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x800028a5 /* EMC_DYN_SELF_REF_CONTROL 
*/
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff49 /* EMC_CFG_RSV */
+                               >;
+                       };
+               };
+       };
+};
-- 
2.21.0

Reply via email to