describe firewall controllers
describe which device is protected by which controller
describe a new ID space to configure the firewalls
describe domains-based firewall configurations in system device tree
based on the existing proposal by ST
it links to the firewall controller protecting accesses to the device MMIO regions
ctrl0: firewall@5c007000 {
compatible = "st,stm32-etzpc";
reg = <0x5c007000 0x400>;
#firewall-cells = <2>;
status = "okay";
};
/* ctrl0 protects accesses to foo */
foo: foo@0 {
firewall-names = "default", "setting1";
firewall = <&ctrl0 1 2>;
};
Bus mastering devices are identified by firewalls using IDs. Their transactions are marked with a device ID. These IDs are used to configure bus-firewalls.
We shall call these IDs "Bus Master IDs"
We shall advertise them on device tree using a new property: bus-master-id
bus-master-id = <&controller u32>
foo: foo@0 {
bus-master-id = <&ctrl0 0x12>;
amba_xppu: indirect-bus@1 {
compatible = "indirect-bus";
#address-cells = <0x2>;
#size-cells = <0x2>;
lpd_xppu: xppu@ff990000 {
compatible = "xlnx,xppu"
#firewall-cells = <0x0>;
reg = <0x0 0xff990000 0x0 0x1000>;
};
pmc_xppu: xppu@f1310000 {
compatible = "xlnx,xppu"
#firewall-cells = <0x0>;
reg = <0x0 0xf1310000 0x0 0x1000>;
};
};
cpus_r5: cpus-cluster@0 {
#address-cells = <0x1>;
#size-cells = <0x0>;
#cpus-mask-cells = <0x1>;
compatible = "cpus,cluster";
bus-master-id = <&lpd_xppu 0x0>, <&pmc_xppu 0x0>, <&lpd_xppu 0x1>, <&pmc_xppu 0x1>;
};
amba {
ethernet0: ethernet@ff0c0000 {
bus-master-id = <&lpd_xppu 0x234>, <&pmc_xppu 0x234>;
firewall = <&lpd_xppu>;
};
can0: can@ff060000 {
firewall = <&lpd_xppu>;
};
mmc0: sdhci@f1050000 {
bus-master-id = <&lpd_xppu 0x243>, <&pmc_xppu 0x243>;
firewall = <&pmc_xppu>;
};
serial0: serial@ff000000 {
firewall = <&lpd_xppu>;
};
};
smmu: smmu@fd800000 {
compatible = "arm,mmu-500";
reg = <0 0xfd800000 0 0x40000>;
stream-match-mask = <0x7c00>;
#iommu-cells = <1>;
};
gem0: ethernet@ff0c0000 {
reg = <0 0xff0d0000 0 0x1000>;
#stream-id-cells = <1>;
iommus = <&smmu 0x235>;
};
amba_xppu: indirect-bus@1 {
compatible = "indirect-bus";
#address-cells = <0x2>;
#size-cells = <0x2>;
lpd_xppu: xppu@ff990000 {
compatible = "xlnx,xppu"
#iommu-cells = <1>;
/* #firewall-cells = <0x0>; */
reg = <0x0 0xff990000 0x0 0x1000>;
};
pmc_xppu: xppu@f1310000 {
compatible = "xlnx,xppu"
#iommu-cells = <1>;
/* #firewall-cells = <0x0>; */
reg = <0x0 0xf1310000 0x0 0x1000>;
};
};
cpus_r5: cpus-cluster@0 {
#address-cells = <0x1>;
#size-cells = <0x0>;
#cpus-mask-cells = <0x1>;
compatible = "cpus,cluster";
iommus = <&lpd_xppu 0x0>, <&pmc_xppu 0x0>, <&lpd_xppu 0x1>, <&pmc_xppu 0x1>;
};
amba {
ethernet0: ethernet@ff0c0000 {
iommus = <&lpd_xppu 0x234>, <&pmc_xppu 0x234>;
/* firewall = <&lpd_xppu>; XXX */
};
can0: can@ff060000 {
/* firewall = <&lpd_xppu>; XXX */
};
mmc0: sdhci@f1050000 {
iommus = <&lpd_xppu 0x243>, <&pmc_xppu 0x243>;
/* firewall = <&pmc_xppu>; XXX */
};
serial0: serial@ff000000 {
/* firewall = <&lpd_xppu>; XXX */
};
};