162306a36Sopenharmony_ciARM Broadcom STB platforms Device Tree Bindings
262306a36Sopenharmony_ci-----------------------------------------------
362306a36Sopenharmony_ciBoards with Broadcom Brahma15 ARM-based BCMxxxx (generally BCM7xxx variants)
462306a36Sopenharmony_ciSoC shall have the following DT organization:
562306a36Sopenharmony_ci
662306a36Sopenharmony_ciRequired root node properties:
762306a36Sopenharmony_ci    - compatible: "brcm,bcm<chip_id>", "brcm,brcmstb"
862306a36Sopenharmony_ci
962306a36Sopenharmony_ciexample:
1062306a36Sopenharmony_ci/ {
1162306a36Sopenharmony_ci    #address-cells = <2>;
1262306a36Sopenharmony_ci    #size-cells = <2>;
1362306a36Sopenharmony_ci    model = "Broadcom STB (bcm7445)";
1462306a36Sopenharmony_ci    compatible = "brcm,bcm7445", "brcm,brcmstb";
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciFurther, syscon nodes that map platform-specific registers used for general
1762306a36Sopenharmony_cisystem control is required:
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci    - compatible: "brcm,bcm<chip_id>-sun-top-ctrl", "syscon"
2062306a36Sopenharmony_ci    - compatible: "brcm,bcm<chip_id>-cpu-biu-ctrl",
2162306a36Sopenharmony_ci		  "brcm,brcmstb-cpu-biu-ctrl",
2262306a36Sopenharmony_ci		  "syscon"
2362306a36Sopenharmony_ci    - compatible: "brcm,bcm<chip_id>-hif-continuation", "syscon"
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cicpu-biu-ctrl node
2662306a36Sopenharmony_ci-------------------
2762306a36Sopenharmony_ciSoCs with Broadcom Brahma15 ARM-based and Brahma53 ARM64-based CPUs have a
2862306a36Sopenharmony_cispecific Bus Interface Unit (BIU) block which controls and interfaces the CPU
2962306a36Sopenharmony_cicomplex to the different Memory Controller Ports (MCP), one per memory
3062306a36Sopenharmony_cicontroller (MEMC). This BIU block offers a feature called Write Pairing which
3162306a36Sopenharmony_ciconsists in collapsing two adjacent cache lines into a single (bursted) write
3262306a36Sopenharmony_citransaction towards the memory controller (MEMC) to maximize write bandwidth.
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ciRequired properties:
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci    - compatible: must be "brcm,bcm7445-cpu-biu-ctrl", "brcm,brcmstb-cpu-biu-ctrl", "syscon"
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciOptional properties:
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci    - brcm,write-pairing:
4162306a36Sopenharmony_ci	Boolean property, which when present indicates that the chip
4262306a36Sopenharmony_ci	supports write-pairing.
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ciexample:
4562306a36Sopenharmony_ci    rdb {
4662306a36Sopenharmony_ci        #address-cells = <1>;
4762306a36Sopenharmony_ci        #size-cells = <1>;
4862306a36Sopenharmony_ci        compatible = "simple-bus";
4962306a36Sopenharmony_ci        ranges = <0 0x00 0xf0000000 0x1000000>;
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci        sun_top_ctrl: syscon@404000 {
5262306a36Sopenharmony_ci            compatible = "brcm,bcm7445-sun-top-ctrl", "syscon";
5362306a36Sopenharmony_ci            reg = <0x404000 0x51c>;
5462306a36Sopenharmony_ci        };
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci        hif_cpubiuctrl: syscon@3e2400 {
5762306a36Sopenharmony_ci            compatible = "brcm,bcm7445-cpu-biu-ctrl", "brcm,brcmstb-cpu-biu-ctrl", "syscon";
5862306a36Sopenharmony_ci            reg = <0x3e2400 0x5b4>;
5962306a36Sopenharmony_ci            brcm,write-pairing;
6062306a36Sopenharmony_ci        };
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci        hif_continuation: syscon@452000 {
6362306a36Sopenharmony_ci            compatible = "brcm,bcm7445-hif-continuation", "syscon";
6462306a36Sopenharmony_ci            reg = <0x452000 0x100>;
6562306a36Sopenharmony_ci        };
6662306a36Sopenharmony_ci    };
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ciNodes that allow for support of SMP initialization and reboot are required:
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_cismpboot
7162306a36Sopenharmony_ci-------
7262306a36Sopenharmony_ciRequired properties:
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci    - compatible
7562306a36Sopenharmony_ci        The string "brcm,brcmstb-smpboot".
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci    - syscon-cpu
7862306a36Sopenharmony_ci        A phandle / integer array property which lets the BSP know the location
7962306a36Sopenharmony_ci        of certain CPU power-on registers.
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci        The layout of the property is as follows:
8262306a36Sopenharmony_ci            o a phandle to the "hif_cpubiuctrl" syscon node
8362306a36Sopenharmony_ci            o offset to the base CPU power zone register
8462306a36Sopenharmony_ci            o offset to the base CPU reset register
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci    - syscon-cont
8762306a36Sopenharmony_ci        A phandle pointing to the syscon node which describes the CPU boot
8862306a36Sopenharmony_ci        continuation registers.
8962306a36Sopenharmony_ci            o a phandle to the "hif_continuation" syscon node
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ciexample:
9262306a36Sopenharmony_ci    smpboot {
9362306a36Sopenharmony_ci        compatible = "brcm,brcmstb-smpboot";
9462306a36Sopenharmony_ci        syscon-cpu = <&hif_cpubiuctrl 0x88 0x178>;
9562306a36Sopenharmony_ci        syscon-cont = <&hif_continuation>;
9662306a36Sopenharmony_ci    };
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_cireboot
9962306a36Sopenharmony_ci-------
10062306a36Sopenharmony_ciRequired properties
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci    - compatible
10362306a36Sopenharmony_ci        The string property "brcm,brcmstb-reboot" for 40nm/28nm chips with
10462306a36Sopenharmony_ci        the new SYS_CTRL interface, or "brcm,bcm7038-reboot" for 65nm
10562306a36Sopenharmony_ci        chips with the old SUN_TOP_CTRL interface.
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci    - syscon
10862306a36Sopenharmony_ci        A phandle / integer array that points to the syscon node which describes
10962306a36Sopenharmony_ci        the general system reset registers.
11062306a36Sopenharmony_ci            o a phandle to "sun_top_ctrl"
11162306a36Sopenharmony_ci            o offset to the "reset source enable" register
11262306a36Sopenharmony_ci            o offset to the "software master reset" register
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ciexample:
11562306a36Sopenharmony_ci    reboot {
11662306a36Sopenharmony_ci        compatible = "brcm,brcmstb-reboot";
11762306a36Sopenharmony_ci        syscon = <&sun_top_ctrl 0x304 0x308>;
11862306a36Sopenharmony_ci    };
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ciPower management
12362306a36Sopenharmony_ci----------------
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ciFor power management (particularly, S2/S3/S5 system suspend), the following SoC
12662306a36Sopenharmony_cicomponents are needed:
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci= Always-On control block (AON CTRL)
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ciThis hardware provides control registers for the "always-on" (even in low-power
13162306a36Sopenharmony_cimodes) hardware, such as the Power Management State Machine (PMSM).
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ciRequired properties:
13462306a36Sopenharmony_ci- compatible     : should contain "brcm,brcmstb-aon-ctrl"
13562306a36Sopenharmony_ci- reg            : the register start and length for the AON CTRL block
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ciExample:
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ciaon-ctrl@410000 {
14062306a36Sopenharmony_ci	compatible = "brcm,brcmstb-aon-ctrl";
14162306a36Sopenharmony_ci	reg = <0x410000 0x400>;
14262306a36Sopenharmony_ci};
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci= Memory controllers
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ciA Broadcom STB SoC typically has a number of independent memory controllers,
14762306a36Sopenharmony_cieach of which may have several associated hardware blocks, which are versioned
14862306a36Sopenharmony_ciindependently (control registers, DDR PHYs, etc.). One might consider
14962306a36Sopenharmony_cidescribing these controllers as a parent "memory controllers" block, which
15062306a36Sopenharmony_cicontains N sub-nodes (one for each controller in the system), each of which is
15162306a36Sopenharmony_ciassociated with a number of hardware register resources (e.g., its PHY). See
15262306a36Sopenharmony_cithe example device tree snippet below.
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ci== MEMC (MEMory Controller)
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ciRepresents a single memory controller instance.
15762306a36Sopenharmony_ci
15862306a36Sopenharmony_ciRequired properties:
15962306a36Sopenharmony_ci- compatible     : should contain "brcm,brcmstb-memc" and "simple-bus"
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ciShould contain subnodes for any of the following relevant hardware resources:
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci== DDR PHY control
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ciControl registers for this memory controller's DDR PHY.
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ciRequired properties:
16862306a36Sopenharmony_ci- compatible     : should contain one of these
16962306a36Sopenharmony_ci	"brcm,brcmstb-ddr-phy-v71.1"
17062306a36Sopenharmony_ci	"brcm,brcmstb-ddr-phy-v72.0"
17162306a36Sopenharmony_ci	"brcm,brcmstb-ddr-phy-v225.1"
17262306a36Sopenharmony_ci	"brcm,brcmstb-ddr-phy-v240.1"
17362306a36Sopenharmony_ci	"brcm,brcmstb-ddr-phy-v240.2"
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci- reg            : the DDR PHY register range
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ci== DDR SHIMPHY
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ciControl registers for this memory controller's DDR SHIMPHY.
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ciRequired properties:
18262306a36Sopenharmony_ci- compatible     : should contain "brcm,brcmstb-ddr-shimphy-v1.0"
18362306a36Sopenharmony_ci- reg            : the DDR SHIMPHY register range
18462306a36Sopenharmony_ci
18562306a36Sopenharmony_ci== MEMC DDR control
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ciSequencer DRAM parameters and control registers. Used for Self-Refresh
18862306a36Sopenharmony_ciPower-Down (SRPD), among other things.
18962306a36Sopenharmony_ci
19062306a36Sopenharmony_ciSee Documentation/devicetree/bindings/memory-controllers/brcm,brcmstb-memc-ddr.yaml for a
19162306a36Sopenharmony_cifull list of supported compatible strings and properties.
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_ciExample:
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_cimemory_controllers {
19662306a36Sopenharmony_ci	ranges;
19762306a36Sopenharmony_ci	compatible = "simple-bus";
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ci	memc@0 {
20062306a36Sopenharmony_ci		compatible = "brcm,brcmstb-memc", "simple-bus";
20162306a36Sopenharmony_ci		ranges;
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_ci		ddr-phy@f1106000 {
20462306a36Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-phy-v240.1";
20562306a36Sopenharmony_ci			reg = <0xf1106000 0x21c>;
20662306a36Sopenharmony_ci		};
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci		shimphy@f1108000 {
20962306a36Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-shimphy-v1.0";
21062306a36Sopenharmony_ci			reg = <0xf1108000 0xe4>;
21162306a36Sopenharmony_ci		};
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ci		memc-ddr@f1102000 {
21462306a36Sopenharmony_ci			reg = <0xf1102000 0x800>;
21562306a36Sopenharmony_ci			compatible = "brcm,brcmstb-memc-ddr";
21662306a36Sopenharmony_ci		};
21762306a36Sopenharmony_ci	};
21862306a36Sopenharmony_ci
21962306a36Sopenharmony_ci	memc@1 {
22062306a36Sopenharmony_ci		compatible = "brcm,brcmstb-memc", "simple-bus";
22162306a36Sopenharmony_ci		ranges;
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_ci		ddr-phy@f1186000 {
22462306a36Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-phy-v240.1";
22562306a36Sopenharmony_ci			reg = <0xf1186000 0x21c>;
22662306a36Sopenharmony_ci		};
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_ci		shimphy@f1188000 {
22962306a36Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-shimphy-v1.0";
23062306a36Sopenharmony_ci			reg = <0xf1188000 0xe4>;
23162306a36Sopenharmony_ci		};
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ci		memc-ddr@f1182000 {
23462306a36Sopenharmony_ci			reg = <0xf1182000 0x800>;
23562306a36Sopenharmony_ci			compatible = "brcm,brcmstb-memc-ddr";
23662306a36Sopenharmony_ci		};
23762306a36Sopenharmony_ci	};
23862306a36Sopenharmony_ci
23962306a36Sopenharmony_ci	memc@2 {
24062306a36Sopenharmony_ci		compatible = "brcm,brcmstb-memc", "simple-bus";
24162306a36Sopenharmony_ci		ranges;
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ci		ddr-phy@f1206000 {
24462306a36Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-phy-v240.1";
24562306a36Sopenharmony_ci			reg = <0xf1206000 0x21c>;
24662306a36Sopenharmony_ci		};
24762306a36Sopenharmony_ci
24862306a36Sopenharmony_ci		shimphy@f1208000 {
24962306a36Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-shimphy-v1.0";
25062306a36Sopenharmony_ci			reg = <0xf1208000 0xe4>;
25162306a36Sopenharmony_ci		};
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_ci		memc-ddr@f1202000 {
25462306a36Sopenharmony_ci			reg = <0xf1202000 0x800>;
25562306a36Sopenharmony_ci			compatible = "brcm,brcmstb-memc-ddr";
25662306a36Sopenharmony_ci		};
25762306a36Sopenharmony_ci	};
25862306a36Sopenharmony_ci};
259