18c2ecf20Sopenharmony_ciARM Broadcom STB platforms Device Tree Bindings
28c2ecf20Sopenharmony_ci-----------------------------------------------
38c2ecf20Sopenharmony_ciBoards with Broadcom Brahma15 ARM-based BCMxxxx (generally BCM7xxx variants)
48c2ecf20Sopenharmony_ciSoC shall have the following DT organization:
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ciRequired root node properties:
78c2ecf20Sopenharmony_ci    - compatible: "brcm,bcm<chip_id>", "brcm,brcmstb"
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ciexample:
108c2ecf20Sopenharmony_ci/ {
118c2ecf20Sopenharmony_ci    #address-cells = <2>;
128c2ecf20Sopenharmony_ci    #size-cells = <2>;
138c2ecf20Sopenharmony_ci    model = "Broadcom STB (bcm7445)";
148c2ecf20Sopenharmony_ci    compatible = "brcm,bcm7445", "brcm,brcmstb";
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ciFurther, syscon nodes that map platform-specific registers used for general
178c2ecf20Sopenharmony_cisystem control is required:
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci    - compatible: "brcm,bcm<chip_id>-sun-top-ctrl", "syscon"
208c2ecf20Sopenharmony_ci    - compatible: "brcm,bcm<chip_id>-cpu-biu-ctrl",
218c2ecf20Sopenharmony_ci		  "brcm,brcmstb-cpu-biu-ctrl",
228c2ecf20Sopenharmony_ci		  "syscon"
238c2ecf20Sopenharmony_ci    - compatible: "brcm,bcm<chip_id>-hif-continuation", "syscon"
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_cicpu-biu-ctrl node
268c2ecf20Sopenharmony_ci-------------------
278c2ecf20Sopenharmony_ciSoCs with Broadcom Brahma15 ARM-based and Brahma53 ARM64-based CPUs have a
288c2ecf20Sopenharmony_cispecific Bus Interface Unit (BIU) block which controls and interfaces the CPU
298c2ecf20Sopenharmony_cicomplex to the different Memory Controller Ports (MCP), one per memory
308c2ecf20Sopenharmony_cicontroller (MEMC). This BIU block offers a feature called Write Pairing which
318c2ecf20Sopenharmony_ciconsists in collapsing two adjacent cache lines into a single (bursted) write
328c2ecf20Sopenharmony_citransaction towards the memory controller (MEMC) to maximize write bandwidth.
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ciRequired properties:
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci    - compatible: must be "brcm,bcm7445-cpu-biu-ctrl", "brcm,brcmstb-cpu-biu-ctrl", "syscon"
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ciOptional properties:
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci    - brcm,write-pairing:
418c2ecf20Sopenharmony_ci	Boolean property, which when present indicates that the chip
428c2ecf20Sopenharmony_ci	supports write-pairing.
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ciexample:
458c2ecf20Sopenharmony_ci    rdb {
468c2ecf20Sopenharmony_ci        #address-cells = <1>;
478c2ecf20Sopenharmony_ci        #size-cells = <1>;
488c2ecf20Sopenharmony_ci        compatible = "simple-bus";
498c2ecf20Sopenharmony_ci        ranges = <0 0x00 0xf0000000 0x1000000>;
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci        sun_top_ctrl: syscon@404000 {
528c2ecf20Sopenharmony_ci            compatible = "brcm,bcm7445-sun-top-ctrl", "syscon";
538c2ecf20Sopenharmony_ci            reg = <0x404000 0x51c>;
548c2ecf20Sopenharmony_ci        };
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci        hif_cpubiuctrl: syscon@3e2400 {
578c2ecf20Sopenharmony_ci            compatible = "brcm,bcm7445-cpu-biu-ctrl", "brcm,brcmstb-cpu-biu-ctrl", "syscon";
588c2ecf20Sopenharmony_ci            reg = <0x3e2400 0x5b4>;
598c2ecf20Sopenharmony_ci            brcm,write-pairing;
608c2ecf20Sopenharmony_ci        };
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci        hif_continuation: syscon@452000 {
638c2ecf20Sopenharmony_ci            compatible = "brcm,bcm7445-hif-continuation", "syscon";
648c2ecf20Sopenharmony_ci            reg = <0x452000 0x100>;
658c2ecf20Sopenharmony_ci        };
668c2ecf20Sopenharmony_ci    };
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ciNodes that allow for support of SMP initialization and reboot are required:
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_cismpboot
718c2ecf20Sopenharmony_ci-------
728c2ecf20Sopenharmony_ciRequired properties:
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ci    - compatible
758c2ecf20Sopenharmony_ci        The string "brcm,brcmstb-smpboot".
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci    - syscon-cpu
788c2ecf20Sopenharmony_ci        A phandle / integer array property which lets the BSP know the location
798c2ecf20Sopenharmony_ci        of certain CPU power-on registers.
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci        The layout of the property is as follows:
828c2ecf20Sopenharmony_ci            o a phandle to the "hif_cpubiuctrl" syscon node
838c2ecf20Sopenharmony_ci            o offset to the base CPU power zone register
848c2ecf20Sopenharmony_ci            o offset to the base CPU reset register
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_ci    - syscon-cont
878c2ecf20Sopenharmony_ci        A phandle pointing to the syscon node which describes the CPU boot
888c2ecf20Sopenharmony_ci        continuation registers.
898c2ecf20Sopenharmony_ci            o a phandle to the "hif_continuation" syscon node
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ciexample:
928c2ecf20Sopenharmony_ci    smpboot {
938c2ecf20Sopenharmony_ci        compatible = "brcm,brcmstb-smpboot";
948c2ecf20Sopenharmony_ci        syscon-cpu = <&hif_cpubiuctrl 0x88 0x178>;
958c2ecf20Sopenharmony_ci        syscon-cont = <&hif_continuation>;
968c2ecf20Sopenharmony_ci    };
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_cireboot
998c2ecf20Sopenharmony_ci-------
1008c2ecf20Sopenharmony_ciRequired properties
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_ci    - compatible
1038c2ecf20Sopenharmony_ci        The string property "brcm,brcmstb-reboot" for 40nm/28nm chips with
1048c2ecf20Sopenharmony_ci        the new SYS_CTRL interface, or "brcm,bcm7038-reboot" for 65nm
1058c2ecf20Sopenharmony_ci        chips with the old SUN_TOP_CTRL interface.
1068c2ecf20Sopenharmony_ci
1078c2ecf20Sopenharmony_ci    - syscon
1088c2ecf20Sopenharmony_ci        A phandle / integer array that points to the syscon node which describes
1098c2ecf20Sopenharmony_ci        the general system reset registers.
1108c2ecf20Sopenharmony_ci            o a phandle to "sun_top_ctrl"
1118c2ecf20Sopenharmony_ci            o offset to the "reset source enable" register
1128c2ecf20Sopenharmony_ci            o offset to the "software master reset" register
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ciexample:
1158c2ecf20Sopenharmony_ci    reboot {
1168c2ecf20Sopenharmony_ci        compatible = "brcm,brcmstb-reboot";
1178c2ecf20Sopenharmony_ci        syscon = <&sun_top_ctrl 0x304 0x308>;
1188c2ecf20Sopenharmony_ci    };
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ci
1218c2ecf20Sopenharmony_ci
1228c2ecf20Sopenharmony_ciPower management
1238c2ecf20Sopenharmony_ci----------------
1248c2ecf20Sopenharmony_ci
1258c2ecf20Sopenharmony_ciFor power management (particularly, S2/S3/S5 system suspend), the following SoC
1268c2ecf20Sopenharmony_cicomponents are needed:
1278c2ecf20Sopenharmony_ci
1288c2ecf20Sopenharmony_ci= Always-On control block (AON CTRL)
1298c2ecf20Sopenharmony_ci
1308c2ecf20Sopenharmony_ciThis hardware provides control registers for the "always-on" (even in low-power
1318c2ecf20Sopenharmony_cimodes) hardware, such as the Power Management State Machine (PMSM).
1328c2ecf20Sopenharmony_ci
1338c2ecf20Sopenharmony_ciRequired properties:
1348c2ecf20Sopenharmony_ci- compatible     : should contain "brcm,brcmstb-aon-ctrl"
1358c2ecf20Sopenharmony_ci- reg            : the register start and length for the AON CTRL block
1368c2ecf20Sopenharmony_ci
1378c2ecf20Sopenharmony_ciExample:
1388c2ecf20Sopenharmony_ci
1398c2ecf20Sopenharmony_ciaon-ctrl@410000 {
1408c2ecf20Sopenharmony_ci	compatible = "brcm,brcmstb-aon-ctrl";
1418c2ecf20Sopenharmony_ci	reg = <0x410000 0x400>;
1428c2ecf20Sopenharmony_ci};
1438c2ecf20Sopenharmony_ci
1448c2ecf20Sopenharmony_ci= Memory controllers
1458c2ecf20Sopenharmony_ci
1468c2ecf20Sopenharmony_ciA Broadcom STB SoC typically has a number of independent memory controllers,
1478c2ecf20Sopenharmony_cieach of which may have several associated hardware blocks, which are versioned
1488c2ecf20Sopenharmony_ciindependently (control registers, DDR PHYs, etc.). One might consider
1498c2ecf20Sopenharmony_cidescribing these controllers as a parent "memory controllers" block, which
1508c2ecf20Sopenharmony_cicontains N sub-nodes (one for each controller in the system), each of which is
1518c2ecf20Sopenharmony_ciassociated with a number of hardware register resources (e.g., its PHY). See
1528c2ecf20Sopenharmony_cithe example device tree snippet below.
1538c2ecf20Sopenharmony_ci
1548c2ecf20Sopenharmony_ci== MEMC (MEMory Controller)
1558c2ecf20Sopenharmony_ci
1568c2ecf20Sopenharmony_ciRepresents a single memory controller instance.
1578c2ecf20Sopenharmony_ci
1588c2ecf20Sopenharmony_ciRequired properties:
1598c2ecf20Sopenharmony_ci- compatible     : should contain "brcm,brcmstb-memc" and "simple-bus"
1608c2ecf20Sopenharmony_ci
1618c2ecf20Sopenharmony_ciShould contain subnodes for any of the following relevant hardware resources:
1628c2ecf20Sopenharmony_ci
1638c2ecf20Sopenharmony_ci== DDR PHY control
1648c2ecf20Sopenharmony_ci
1658c2ecf20Sopenharmony_ciControl registers for this memory controller's DDR PHY.
1668c2ecf20Sopenharmony_ci
1678c2ecf20Sopenharmony_ciRequired properties:
1688c2ecf20Sopenharmony_ci- compatible     : should contain one of these
1698c2ecf20Sopenharmony_ci	"brcm,brcmstb-ddr-phy-v71.1"
1708c2ecf20Sopenharmony_ci	"brcm,brcmstb-ddr-phy-v72.0"
1718c2ecf20Sopenharmony_ci	"brcm,brcmstb-ddr-phy-v225.1"
1728c2ecf20Sopenharmony_ci	"brcm,brcmstb-ddr-phy-v240.1"
1738c2ecf20Sopenharmony_ci	"brcm,brcmstb-ddr-phy-v240.2"
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_ci- reg            : the DDR PHY register range
1768c2ecf20Sopenharmony_ci
1778c2ecf20Sopenharmony_ci== DDR SHIMPHY
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ciControl registers for this memory controller's DDR SHIMPHY.
1808c2ecf20Sopenharmony_ci
1818c2ecf20Sopenharmony_ciRequired properties:
1828c2ecf20Sopenharmony_ci- compatible     : should contain "brcm,brcmstb-ddr-shimphy-v1.0"
1838c2ecf20Sopenharmony_ci- reg            : the DDR SHIMPHY register range
1848c2ecf20Sopenharmony_ci
1858c2ecf20Sopenharmony_ci== MEMC DDR control
1868c2ecf20Sopenharmony_ci
1878c2ecf20Sopenharmony_ciSequencer DRAM parameters and control registers. Used for Self-Refresh
1888c2ecf20Sopenharmony_ciPower-Down (SRPD), among other things.
1898c2ecf20Sopenharmony_ci
1908c2ecf20Sopenharmony_ciRequired properties:
1918c2ecf20Sopenharmony_ci- compatible     : should contain one of these
1928c2ecf20Sopenharmony_ci	"brcm,brcmstb-memc-ddr-rev-b.2.1"
1938c2ecf20Sopenharmony_ci	"brcm,brcmstb-memc-ddr-rev-b.2.2"
1948c2ecf20Sopenharmony_ci	"brcm,brcmstb-memc-ddr-rev-b.2.3"
1958c2ecf20Sopenharmony_ci	"brcm,brcmstb-memc-ddr-rev-b.3.0"
1968c2ecf20Sopenharmony_ci	"brcm,brcmstb-memc-ddr-rev-b.3.1"
1978c2ecf20Sopenharmony_ci	"brcm,brcmstb-memc-ddr"
1988c2ecf20Sopenharmony_ci- reg            : the MEMC DDR register range
1998c2ecf20Sopenharmony_ci
2008c2ecf20Sopenharmony_ciExample:
2018c2ecf20Sopenharmony_ci
2028c2ecf20Sopenharmony_cimemory_controllers {
2038c2ecf20Sopenharmony_ci	ranges;
2048c2ecf20Sopenharmony_ci	compatible = "simple-bus";
2058c2ecf20Sopenharmony_ci
2068c2ecf20Sopenharmony_ci	memc@0 {
2078c2ecf20Sopenharmony_ci		compatible = "brcm,brcmstb-memc", "simple-bus";
2088c2ecf20Sopenharmony_ci		ranges;
2098c2ecf20Sopenharmony_ci
2108c2ecf20Sopenharmony_ci		ddr-phy@f1106000 {
2118c2ecf20Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-phy-v240.1";
2128c2ecf20Sopenharmony_ci			reg = <0xf1106000 0x21c>;
2138c2ecf20Sopenharmony_ci		};
2148c2ecf20Sopenharmony_ci
2158c2ecf20Sopenharmony_ci		shimphy@f1108000 {
2168c2ecf20Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-shimphy-v1.0";
2178c2ecf20Sopenharmony_ci			reg = <0xf1108000 0xe4>;
2188c2ecf20Sopenharmony_ci		};
2198c2ecf20Sopenharmony_ci
2208c2ecf20Sopenharmony_ci		memc-ddr@f1102000 {
2218c2ecf20Sopenharmony_ci			reg = <0xf1102000 0x800>;
2228c2ecf20Sopenharmony_ci			compatible = "brcm,brcmstb-memc-ddr";
2238c2ecf20Sopenharmony_ci		};
2248c2ecf20Sopenharmony_ci	};
2258c2ecf20Sopenharmony_ci
2268c2ecf20Sopenharmony_ci	memc@1 {
2278c2ecf20Sopenharmony_ci		compatible = "brcm,brcmstb-memc", "simple-bus";
2288c2ecf20Sopenharmony_ci		ranges;
2298c2ecf20Sopenharmony_ci
2308c2ecf20Sopenharmony_ci		ddr-phy@f1186000 {
2318c2ecf20Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-phy-v240.1";
2328c2ecf20Sopenharmony_ci			reg = <0xf1186000 0x21c>;
2338c2ecf20Sopenharmony_ci		};
2348c2ecf20Sopenharmony_ci
2358c2ecf20Sopenharmony_ci		shimphy@f1188000 {
2368c2ecf20Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-shimphy-v1.0";
2378c2ecf20Sopenharmony_ci			reg = <0xf1188000 0xe4>;
2388c2ecf20Sopenharmony_ci		};
2398c2ecf20Sopenharmony_ci
2408c2ecf20Sopenharmony_ci		memc-ddr@f1182000 {
2418c2ecf20Sopenharmony_ci			reg = <0xf1182000 0x800>;
2428c2ecf20Sopenharmony_ci			compatible = "brcm,brcmstb-memc-ddr";
2438c2ecf20Sopenharmony_ci		};
2448c2ecf20Sopenharmony_ci	};
2458c2ecf20Sopenharmony_ci
2468c2ecf20Sopenharmony_ci	memc@2 {
2478c2ecf20Sopenharmony_ci		compatible = "brcm,brcmstb-memc", "simple-bus";
2488c2ecf20Sopenharmony_ci		ranges;
2498c2ecf20Sopenharmony_ci
2508c2ecf20Sopenharmony_ci		ddr-phy@f1206000 {
2518c2ecf20Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-phy-v240.1";
2528c2ecf20Sopenharmony_ci			reg = <0xf1206000 0x21c>;
2538c2ecf20Sopenharmony_ci		};
2548c2ecf20Sopenharmony_ci
2558c2ecf20Sopenharmony_ci		shimphy@f1208000 {
2568c2ecf20Sopenharmony_ci			compatible = "brcm,brcmstb-ddr-shimphy-v1.0";
2578c2ecf20Sopenharmony_ci			reg = <0xf1208000 0xe4>;
2588c2ecf20Sopenharmony_ci		};
2598c2ecf20Sopenharmony_ci
2608c2ecf20Sopenharmony_ci		memc-ddr@f1202000 {
2618c2ecf20Sopenharmony_ci			reg = <0xf1202000 0x800>;
2628c2ecf20Sopenharmony_ci			compatible = "brcm,brcmstb-memc-ddr";
2638c2ecf20Sopenharmony_ci		};
2648c2ecf20Sopenharmony_ci	};
2658c2ecf20Sopenharmony_ci};
266