Make dpaa work with only slightly modified Linux device trees.

Linux has a slightly different device tree definition for DPAA than originally
done in the FreeBSD driver.  This changes the driver to be mostly compatible
with the Linux device tree definitions.  Currently the differences are:

bman-portals: compatible = "fsl,bman-portals" (Linux is "simple-bus")
qman-portals: compatible = "fsl,qman-portals" (Linux is "simple-bus")
fman: compatible = "fsl,fman" (Linux is "simple-bus")

The Linux device tree doesn't specify anything for rgmii in the mdio.  This
change still requires the device tree to specify the phy-handle, and doesn't yet
support tbi.
This commit is contained in:
Justin Hibbits 2016-11-12 20:45:03 +00:00
parent fbc19213d5
commit 3e7ddf02dc
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=308584
15 changed files with 215 additions and 435 deletions

View File

@ -442,47 +442,6 @@
};
};
fsl,dpaa {
compatible = "fsl,p2041-dpaa", "fsl,dpaa";
ethernet@0 {
compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet0>;
status = "okay";
};
ethernet@1 {
compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet1>;
status = "okay";
};
ethernet@2 {
compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet2>;
status = "okay";
};
ethernet@3 {
compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet3>;
status = "okay";
};
ethernet@4 {
compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet4>;
status = "okay";
};
ethernet@5 {
compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet5>;
status = "okay";
};
};
chosen {
stdin = "serial0";
stdout = "serial0";

View File

@ -208,7 +208,7 @@
bman-portals@ff4000000 {
#address-cells = <0x1>;
#size-cells = <0x1>;
compatible = "bman-portals";
compatible = "fsl,bman-portals";
ranges = <0x0 0xf 0xfde00000 0x200000>;
bman-portal@0 {
cell-index = <0x0>;
@ -281,7 +281,7 @@
qman-portals@ff4200000 {
#address-cells = <0x1>;
#size-cells = <0x1>;
compatible = "qman-portals";
compatible = "fsl,qman-portals";
ranges = <0x0 0xf 0xfdc00000 0x200000>;
qportal0: qman-portal@0 {
cell-index = <0x0>;
@ -913,8 +913,8 @@
pme: pme@316000 {
compatible = "fsl,pme";
reg = <0x316000 0x10000>;
/* fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
/* fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
/* "fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
/* "fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
interrupts = <16 2 1 5>;
};
@ -923,16 +923,16 @@
reg = <0x318000 0x1000>;
interrupts = <16 2 1 3>;
/* Commented out, use default allocation */
/* fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
/* fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
/* "fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
/* "fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
};
bman: bman@31a000 {
compatible = "fsl,p2041-bman", "fsl,bman";
reg = <0x31a000 0x1000>;
interrupts = <16 2 1 2>;
/* Same as fsl,qman-*, use default allocation */
/* fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
/* Same as "fsl,qman-*, use default allocation */
/* "fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
};
fman0: fman@400000 {
@ -983,27 +983,27 @@
fman0_rx0: port@88000 {
cell-index = <0>;
compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x88000 0x1000>;
};
fman0_rx1: port@89000 {
cell-index = <1>;
compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x89000 0x1000>;
};
fman0_rx2: port@8a000 {
cell-index = <2>;
compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x8a000 0x1000>;
};
fman0_rx3: port@8b000 {
cell-index = <3>;
compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x8b000 0x1000>;
};
fman0_rx4: port@8c000 {
cell-index = <4>;
compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x8c000 0x1000>;
};
fman0_rx5: port@90000 {
@ -1020,31 +1020,31 @@
};
fman0_tx0: port@a8000 {
cell-index = <0>;
compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xa8000 0x1000>;
fsl,qman-channel-id = <0x41>;
};
fman0_tx1: port@a9000 {
cell-index = <1>;
compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xa9000 0x1000>;
fsl,qman-channel-id = <0x42>;
};
fman0_tx2: port@aa000 {
cell-index = <2>;
compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xaa000 0x1000>;
fsl,qman-channel-id = <0x43>;
};
fman0_tx3: port@ab000 {
cell-index = <3>;
compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xab000 0x1000>;
fsl,qman-channel-id = <0x44>;
};
fman0_tx4: port@ac000 {
cell-index = <4>;
compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xac000 0x1000>;
fsl,qman-channel-id = <0x45>;
};
@ -1093,7 +1093,7 @@
enet0: ethernet@e0000 {
cell-index = <0>;
compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe0000 0x1000>;
fsl,port-handles = <&fman0_rx0 &fman0_tx0>;
};
@ -1108,7 +1108,7 @@
enet1: ethernet@e2000 {
cell-index = <1>;
compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe2000 0x1000>;
fsl,port-handles = <&fman0_rx1 &fman0_tx1>;
};
@ -1123,7 +1123,7 @@
enet2: ethernet@e4000 {
cell-index = <2>;
compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe4000 0x1000>;
fsl,port-handles = <&fman0_rx2 &fman0_tx2>;
};
@ -1138,7 +1138,7 @@
enet3: ethernet@e6000 {
cell-index = <3>;
compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe6000 0x1000>;
fsl,port-handles = <&fman0_rx3 &fman0_tx3>;
};
@ -1153,7 +1153,7 @@
enet4: ethernet@e8000 {
cell-index = <4>;
compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe8000 0x1000>;
fsl,port-handles = <&fman0_rx4 &fman0_tx4>;
};
@ -1168,7 +1168,7 @@
enet5: ethernet@f0000 {
cell-index = <0>;
compatible = "fsl,p2041-fman-10g-mac", "fsl,fman-10g-mac";
compatible = "fsl,p2041-fman-10g-mac", "fsl,fman-10g-mac", "fsl,fman-xgec";
reg = <0xf0000 0x1000>;
fsl,port-handles = <&fman0_rx5 &fman0_tx5>;
};

View File

@ -539,47 +539,6 @@
};
};
fsl,dpaa {
compatible = "fsl,p3041-dpaa", "fsl,dpaa";
ethernet@0 {
compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet0>;
status="okay";
};
ethernet@1 {
compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet1>;
status = "disabled";
};
ethernet@2 {
compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet2>;
status = "disabled";
};
ethernet@3 {
compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet3>;
status = "disabled";
};
ethernet@4 {
compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet4>;
status = "okay";
};
ethernet@5 {
compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet5>;
status = "disabled";
};
};
chosen {
stdin = "serial0";
stdout = "serial0";

View File

@ -209,7 +209,7 @@
bman-portals@ff4000000 {
#address-cells = <0x1>;
#size-cells = <0x1>;
compatible = "bman-portals";
compatible = "fsl,bman-portals";
ranges = <0x0 0xf 0xfde00000 0x200000>;
bman-portal@0 {
cell-index = <0x0>;
@ -282,7 +282,7 @@
qman-portals@ff4200000 {
#address-cells = <0x1>;
#size-cells = <0x1>;
compatible = "qman-portals";
compatible = "fsl,qman-portals";
ranges = <0x0 0xf 0xfdc00000 0x200000>;
qportal0: qman-portal@0 {
cell-index = <0x0>;
@ -915,8 +915,8 @@
pme: pme@316000 {
compatible = "fsl,pme";
reg = <0x316000 0x10000>;
/* fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
/* fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
/* "fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
/* "fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
interrupts = <16 2 1 5>;
};
@ -925,16 +925,16 @@
reg = <0x318000 0x1000>;
interrupts = <16 2 1 3>;
/* Commented out, use default allocation */
/* fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
/* fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
/* "fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
/* "fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
};
bman: bman@31a000 {
compatible = "fsl,p3041-bman", "fsl,bman";
reg = <0x31a000 0x1000>;
interrupts = <16 2 1 2>;
/* Same as fsl,qman-*, use default allocation */
/* fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
/* Same as "fsl,qman-*, use default allocation */
/* "fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
};
fman0: fman@400000 {
@ -985,27 +985,27 @@
fman0_rx0: port@88000 {
cell-index = <0>;
compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x88000 0x1000>;
};
fman0_rx1: port@89000 {
cell-index = <1>;
compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x89000 0x1000>;
};
fman0_rx2: port@8a000 {
cell-index = <2>;
compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x8a000 0x1000>;
};
fman0_rx3: port@8b000 {
cell-index = <3>;
compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x8b000 0x1000>;
};
fman0_rx4: port@8c000 {
cell-index = <4>;
compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x8c000 0x1000>;
};
fman0_rx5: port@90000 {
@ -1022,31 +1022,31 @@
};
fman0_tx0: port@a8000 {
cell-index = <0>;
compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xa8000 0x1000>;
fsl,qman-channel-id = <0x41>;
};
fman0_tx1: port@a9000 {
cell-index = <1>;
compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xa9000 0x1000>;
fsl,qman-channel-id = <0x42>;
};
fman0_tx2: port@aa000 {
cell-index = <2>;
compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xaa000 0x1000>;
fsl,qman-channel-id = <0x43>;
};
fman0_tx3: port@ab000 {
cell-index = <3>;
compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xab000 0x1000>;
fsl,qman-channel-id = <0x44>;
};
fman0_tx4: port@ac000 {
cell-index = <4>;
compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xac000 0x1000>;
fsl,qman-channel-id = <0x45>;
};
@ -1095,7 +1095,8 @@
enet0: ethernet@e0000 {
cell-index = <0>;
compatible = "fsl,p3041-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p3041-fman-1g-mac",
"fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe0000 0x1000>;
fsl,port-handles = <&fman0_rx0 &fman0_tx0>;
ptimer-handle = <&ptp_timer0>;
@ -1111,7 +1112,8 @@
enet1: ethernet@e2000 {
cell-index = <1>;
compatible = "fsl,p3041-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p3041-fman-1g-mac",
"fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe2000 0x1000>;
fsl,port-handles = <&fman0_rx1 &fman0_tx1>;
ptimer-handle = <&ptp_timer0>;
@ -1127,7 +1129,8 @@
enet2: ethernet@e4000 {
cell-index = <2>;
compatible = "fsl,p3041-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p3041-fman-1g-mac",
"fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe4000 0x1000>;
fsl,port-handles = <&fman0_rx2 &fman0_tx2>;
ptimer-handle = <&ptp_timer0>;
@ -1143,7 +1146,8 @@
enet3: ethernet@e6000 {
cell-index = <3>;
compatible = "fsl,p3041-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p3041-fman-1g-mac",
"fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe6000 0x1000>;
fsl,port-handles = <&fman0_rx3 &fman0_tx3>;
};
@ -1158,7 +1162,8 @@
enet4: ethernet@e8000 {
cell-index = <4>;
compatible = "fsl,p3041-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p3041-fman-1g-mac",
"fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe8000 0x1000>;
fsl,port-handles = <&fman0_rx4 &fman0_tx4>;
ptimer-handle = <&ptp_timer0>;
@ -1174,7 +1179,8 @@
enet5: ethernet@f0000 {
cell-index = <0>;
compatible = "fsl,p3041-fman-10g-mac", "fsl,fman-10g-mac";
compatible = "fsl,p3041-fman-10g-mac",
"fsl,fman-10g-mac", "fsl,fman-xgec";
reg = <0xf0000 0x1000>;
fsl,port-handles = <&fman0_rx5 &fman0_tx5>;
};

View File

@ -535,47 +535,6 @@
};
};
fsl,dpaa {
compatible = "fsl,p5020-dpaa", "fsl,dpaa";
ethernet@0 {
compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet0>;
status = "okay";
};
ethernet@1 {
compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet1>;
status = "disabled";
};
ethernet@2 {
compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet2>;
status = "disabled";
};
ethernet@3 {
compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet3>;
status = "disabled";
};
ethernet@4 {
compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet4>;
status = "okay";
};
ethernet@5 {
compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
fsl,qman-channel = <&qpool1>;
fsl,fman-mac = <&enet5>;
status = "disabled";
};
};
chosen {
stdin = "serial0";
stdout = "serial0";

View File

@ -194,7 +194,7 @@
bman-portals@ff4000000 {
#address-cells = <0x1>;
#size-cells = <0x1>;
compatible = "bman-portals";
compatible = "fsl,bman-portals";
ranges = <0x0 0xf 0xfde00000 0x200000>;
bman-portal@0 {
cell-index = <0x0>;
@ -267,7 +267,7 @@
qman-portals@ff4200000 {
#address-cells = <0x1>;
#size-cells = <0x1>;
compatible = "qman-portals";
compatible = "fsl,qman-portals";
ranges = <0x0 0xf 0xfdc00000 0x200000>;
qportal0: qman-portal@0 {
cell-index = <0x0>;
@ -960,8 +960,8 @@
pme: pme@316000 {
compatible = "fsl,pme";
reg = <0x316000 0x10000>;
/* fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
/* fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
/* "fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
/* "fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
interrupts = <16 2 1 5>;
};
@ -970,16 +970,16 @@
reg = <0x318000 0x1000>;
interrupts = <16 2 1 3>;
/* Commented out, use default allocation */
/* fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
/* fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
/* "fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
/* "fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
};
bman: bman@31a000 {
compatible = "fsl,p5020-bman", "fsl,bman";
reg = <0x31a000 0x1000>;
interrupts = <16 2 1 2>;
/* Same as fsl,qman-*, use default allocation */
/* fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
/* Same as "fsl,qman-*, use default allocation */
/* "fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
};
fman0: fman@400000 {
@ -1030,27 +1030,27 @@
fman0_rx0: port@88000 {
cell-index = <0>;
compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x88000 0x1000>;
};
fman0_rx1: port@89000 {
cell-index = <1>;
compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x89000 0x1000>;
};
fman0_rx2: port@8a000 {
cell-index = <2>;
compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x8a000 0x1000>;
};
fman0_rx3: port@8b000 {
cell-index = <3>;
compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x8b000 0x1000>;
};
fman0_rx4: port@8c000 {
cell-index = <4>;
compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx";
compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx", "fsl,fman-v2-port-rx";
reg = <0x8c000 0x1000>;
};
fman0_rx5: port@90000 {
@ -1067,31 +1067,31 @@
};
fman0_tx0: port@a8000 {
cell-index = <0>;
compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xa8000 0x1000>;
fsl,qman-channel-id = <0x41>;
};
fman0_tx1: port@a9000 {
cell-index = <1>;
compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xa9000 0x1000>;
fsl,qman-channel-id = <0x42>;
};
fman0_tx2: port@aa000 {
cell-index = <2>;
compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xaa000 0x1000>;
fsl,qman-channel-id = <0x43>;
};
fman0_tx3: port@ab000 {
cell-index = <3>;
compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xab000 0x1000>;
fsl,qman-channel-id = <0x44>;
};
fman0_tx4: port@ac000 {
cell-index = <4>;
compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx";
compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx", "fsl,fman-v2-port-tx";
reg = <0xac000 0x1000>;
fsl,qman-channel-id = <0x45>;
};
@ -1140,7 +1140,7 @@
enet0: ethernet@e0000 {
cell-index = <0>;
compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe0000 0x1000>;
fsl,port-handles = <&fman0_rx0 &fman0_tx0>;
ptimer-handle = <&ptp_timer0>;
@ -1156,7 +1156,7 @@
enet1: ethernet@e2000 {
cell-index = <1>;
compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe2000 0x1000>;
fsl,port-handles = <&fman0_rx1 &fman0_tx1>;
ptimer-handle = <&ptp_timer0>;
@ -1172,7 +1172,7 @@
enet2: ethernet@e4000 {
cell-index = <2>;
compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe4000 0x1000>;
fsl,port-handles = <&fman0_rx2 &fman0_tx2>;
ptimer-handle = <&ptp_timer0>;
@ -1188,7 +1188,7 @@
enet3: ethernet@e6000 {
cell-index = <3>;
compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe6000 0x1000>;
fsl,port-handles = <&fman0_rx3 &fman0_tx3>;
ptimer-handle = <&ptp_timer0>;
@ -1204,7 +1204,7 @@
enet4: ethernet@e8000 {
cell-index = <4>;
compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac";
compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac", "fsl,fman-dtsec";
reg = <0xe8000 0x1000>;
fsl,port-handles = <&fman0_rx4 &fman0_tx4>;
ptimer-handle = <&ptp_timer0>;
@ -1220,7 +1220,7 @@
enet5: ethernet@f0000 {
cell-index = <0>;
compatible = "fsl,p5020-fman-10g-mac", "fsl,fman-10g-mac";
compatible = "fsl,p5020-fman-10g-mac", "fsl,fman-10g-mac", "fsl,fman-xgec";
reg = <0xf0000 0x1000>;
fsl,port-handles = <&fman0_rx5 &fman0_tx5>;
};

View File

@ -33,6 +33,7 @@ __FBSDID("$FreeBSD$");
#include <sys/kernel.h>
#include <sys/bus.h>
#include <sys/module.h>
#include <sys/smp.h>
#include <machine/bus.h>
@ -105,7 +106,8 @@ static driver_t bm_portals_driver = {
};
static devclass_t bm_portals_devclass;
DRIVER_MODULE(bman_portals, ofwbus, bm_portals_driver, bm_portals_devclass, 0, 0);
EARLY_DRIVER_MODULE(bman_portals, ofwbus, bm_portals_driver,
bm_portals_devclass, 0, 0, BUS_PASS_BUS);
static void
get_addr_props(phandle_t node, uint32_t *addrp, uint32_t *sizep)
@ -121,7 +123,7 @@ static int
bman_portals_fdt_probe(device_t dev)
{
if (!ofw_bus_is_compatible(dev, "bman-portals"))
if (!ofw_bus_is_compatible(dev, "fsl,bman-portals"))
return (ENXIO);
device_set_desc(dev, BMAN_PORT_DEVSTR);
@ -129,6 +131,25 @@ bman_portals_fdt_probe(device_t dev)
return (BUS_PROBE_DEFAULT);
}
static phandle_t
bman_portal_find_cpu(int cpu)
{
phandle_t node;
pcell_t reg;
node = OF_finddevice("/cpus");
if (node == -1)
return (node);
for (node = OF_child(node); node != 0; node = OF_peer(node)) {
if (OF_getprop(node, "reg", &reg, sizeof(reg)) <= 0)
continue;
if (reg == cpu)
return (node);
}
return (-1);
}
static int
bman_portals_fdt_attach(device_t dev)
{
@ -152,13 +173,17 @@ bman_portals_fdt_attach(device_t dev)
/* Find portals tied to CPUs */
for (child = OF_child(node); child != 0; child = OF_peer(child)) {
if (cpus >= mp_ncpus)
break;
if (!ofw_bus_node_is_compatible(child, "fsl,bman-portal")) {
continue;
}
/* Checkout related cpu */
if (OF_getprop(child, "cpu-handle", (void *)&cpu,
sizeof(cpu)) <= 0) {
continue;
cpu = bman_portal_find_cpu(cpus);
if (cpu <= 0)
continue;
}
/* Acquire cpu number */
cpu_node = OF_instance_to_package(cpu);
@ -169,9 +194,6 @@ bman_portals_fdt_attach(device_t dev)
cpus++;
if (cpus > MAXCPU)
break;
if (ofw_bus_gen_setup_devinfo(&ofw_di, child) != 0) {
device_printf(dev, "could not set up devinfo\n");
continue;

View File

@ -1,184 +0,0 @@
/*-
* Copyright (c) 2012 Semihalf.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/ktr.h>
#include <sys/kernel.h>
#include <sys/module.h>
#include <sys/bus.h>
#include <sys/rman.h>
#include <sys/malloc.h>
#include <dev/fdt/fdt_common.h>
#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/ofw_bus_subr.h>
#include <dev/ofw/openfirm.h>
#include "opt_platform.h"
static MALLOC_DEFINE(M_DPAA, "dpaa", "dpaa devices information");
static int dpaa_probe(device_t dev);
static int dpaa_attach(device_t dev);
static const struct ofw_bus_devinfo *dpaa_get_devinfo(device_t bus,
device_t child);
struct dpaa_softc {
};
struct dpaa_devinfo {
struct ofw_bus_devinfo di_ofw;
};
static device_method_t dpaa_methods[] = {
/* Device interface */
DEVMETHOD(device_probe, dpaa_probe),
DEVMETHOD(device_attach, dpaa_attach),
DEVMETHOD(device_detach, bus_generic_detach),
DEVMETHOD(device_shutdown, bus_generic_shutdown),
DEVMETHOD(device_suspend, bus_generic_suspend),
DEVMETHOD(device_resume, bus_generic_resume),
/* OFW bus interface */
DEVMETHOD(ofw_bus_get_devinfo, dpaa_get_devinfo),
DEVMETHOD(ofw_bus_get_compat, ofw_bus_gen_get_compat),
DEVMETHOD(ofw_bus_get_model, ofw_bus_gen_get_model),
DEVMETHOD(ofw_bus_get_name, ofw_bus_gen_get_name),
DEVMETHOD(ofw_bus_get_node, ofw_bus_gen_get_node),
DEVMETHOD(ofw_bus_get_type, ofw_bus_gen_get_type),
{0, 0}
};
static driver_t dpaa_driver = {
"dpaa",
dpaa_methods,
sizeof(struct dpaa_softc),
};
static devclass_t dpaa_devclass;
DRIVER_MODULE_ORDERED(dpaa, ofwbus, dpaa_driver, dpaa_devclass, 0, 0,
SI_ORDER_ANY);
static int
dpaa_probe(device_t dev)
{
if (!ofw_bus_is_compatible(dev, "fsl,dpaa"))
return (ENXIO);
device_set_desc(dev, "Freescale Data Path Acceleration Architecture");
return (BUS_PROBE_DEFAULT);
}
static int
dpaa_attach(device_t dev)
{
device_t dev_child;
phandle_t dt_node, dt_child, enet_node;
struct dpaa_devinfo *di;
pcell_t cell_index;
cell_index = 0;
/*
* Walk dpaa and add direct subordinates as our children.
*/
dt_node = ofw_bus_get_node(dev);
dt_child = OF_child(dt_node);
for (; dt_child != 0; dt_child = OF_peer(dt_child)) {
/* Check and process 'status' property. */
if (!(fdt_is_enabled(dt_child)))
continue;
di = (struct dpaa_devinfo *)malloc(sizeof(*di), M_DPAA,
M_WAITOK | M_ZERO);
if (ofw_bus_gen_setup_devinfo(&di->di_ofw, dt_child) != 0) {
free(di, M_DPAA);
device_printf(dev, "could not set up devinfo\n");
continue;
}
/*
* dTSEC number from SoC is equal to number get from
* dts file.
*/
if (OF_getprop(dt_child, "fsl,fman-mac",
(void *)&enet_node, sizeof(enet_node)) == -1) {
device_printf(dev, "Could not get fsl,fman-mac "
"from dts\n");
continue;
}
if ((enet_node = OF_instance_to_package(enet_node)) == -1) {
device_printf(dev, "Could not get enet node\n");
continue;
}
if (OF_getprop(enet_node, "cell-index",
(void *)&cell_index, sizeof(cell_index)) == -1) {
device_printf(dev, "Could not get cell-index from enet "
"node\n");
continue;
}
/* Add newbus device for this FDT node */
dev_child = device_add_child(dev, "dtsec", (int)cell_index);
if (dev_child == NULL) {
device_printf(dev, "could not add child: %s\n",
di->di_ofw.obd_name);
ofw_bus_gen_destroy_devinfo(&di->di_ofw);
free(di, M_DPAA);
continue;
}
#ifdef DEBUG
device_printf(dev, "added child: %s\n\n", di->di_ofw.obd_name);
#endif
device_set_ivars(dev_child, di);
}
return (bus_generic_attach(dev));
}
static const struct ofw_bus_devinfo *
dpaa_get_devinfo(device_t bus, device_t child)
{
struct dpaa_devinfo *di;
di = device_get_ivars(child);
return (&di->di_ofw);
}

View File

@ -35,7 +35,6 @@ __FBSDID("$FreeBSD$");
#include <sys/rman.h>
#include <sys/malloc.h>
#include <dev/fdt/fdt_common.h>
#include <dev/fdt/simplebus.h>
#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/ofw_bus_subr.h>
@ -50,6 +49,8 @@ __FBSDID("$FreeBSD$");
#include "fman.h"
static MALLOC_DEFINE(M_FMAN, "fman", "fman devices information");
/**
* @group FMan private defines.
* @{
@ -259,6 +260,8 @@ fman_attach(device_t dev)
{
struct fman_softc *sc;
struct fman_config cfg;
pcell_t qchan_range[2];
phandle_t node;
sc = device_get_softc(dev);
sc->sc_base.dev = dev;
@ -272,6 +275,14 @@ fman_attach(device_t dev)
XX_TrackInit();
node = ofw_bus_get_node(dev);
if (OF_getencprop(node, "fsl,qman-channel-range", qchan_range,
sizeof(qchan_range)) <= 0) {
device_printf(dev, "Missing QMan channel range property!\n");
return (ENXIO);
}
sc->qman_chan_base = qchan_range[0];
sc->qman_chan_count = qchan_range[1];
sc->mem_rid = 0;
sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->mem_rid,
RF_ACTIVE | RF_SHAREABLE);
@ -379,4 +390,21 @@ fman_shutdown(device_t dev)
return (0);
}
int
fman_qman_channel_id(device_t dev, int port)
{
struct fman_softc *sc;
int qman_port_id[] = {0x31, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e,
0x2f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
int i;
sc = device_get_softc(dev);
for (i = 0; i < sc->qman_chan_count; i++) {
if (qman_port_id[i] == port)
return (sc->qman_chan_base + i);
}
return (0);
}
/** @} */

View File

@ -42,6 +42,8 @@ struct fman_softc {
int mem_rid;
int irq_rid;
int err_irq_rid;
int qman_chan_base;
int qman_chan_count;
t_Handle fm_handle;
t_Handle muram_handle;
@ -59,6 +61,7 @@ int fman_resume(device_t dev);
int fman_shutdown(device_t dev);
int fman_read_ivar(device_t dev, device_t child, int index,
uintptr_t *result);
int fman_qman_channel_id(device_t, int);
/** @} */
uint32_t fman_get_clock(struct fman_softc *sc);

View File

@ -49,8 +49,6 @@ __FBSDID("$FreeBSD$");
#include <net/if_types.h>
#include <net/if_arp.h>
#include <dev/fdt/fdt_common.h>
#include <dev/fdt/simplebus.h>
#include <dev/mii/mii.h>
#include <dev/mii/miivar.h>
#include <dev/ofw/ofw_bus.h>

View File

@ -87,7 +87,7 @@ static driver_t dtsec_driver = {
};
static devclass_t dtsec_devclass;
DRIVER_MODULE(dtsec, dpaa, dtsec_driver, dtsec_devclass, 0, 0);
DRIVER_MODULE(dtsec, fman, dtsec_driver, dtsec_devclass, 0, 0);
DRIVER_MODULE(miibus, dtsec, miibus_driver, miibus_devclass, 0, 0);
MODULE_DEPEND(dtsec, ether, 1, 1, 1);
MODULE_DEPEND(dtsec, miibus, 1, 1, 1);
@ -96,7 +96,8 @@ static int
dtsec_fdt_probe(device_t dev)
{
if (!ofw_bus_is_compatible(dev, "fsl,dpa-ethernet"))
if (!ofw_bus_is_compatible(dev, "fsl,fman-dtsec") &&
!ofw_bus_is_compatible(dev, "fsl,fman-xgec"))
return (ENXIO);
device_set_desc(dev, "Freescale Data Path Triple Speed Ethernet "
@ -119,9 +120,7 @@ find_mdio(phandle_t phy_node, device_t mac, device_t *mdio_dev)
if (phy_node <= 0)
return (ENOENT);
if (fman_get_dev(&bus) < 0)
return (ENOENT);
bus = device_get_parent(mac);
*mdio_dev = ofw_bus_find_child_device_by_phandle(bus, phy_node);
return (0);
@ -131,21 +130,13 @@ static int
dtsec_fdt_attach(device_t dev)
{
struct dtsec_softc *sc;
phandle_t node, enet_node, phy_node;
phandle_t enet_node, phy_node;
phandle_t fman_rxtx_node[2];
char phy_type[6];
pcell_t fman_tx_cell;
sc = device_get_softc(dev);
node = ofw_bus_get_node(dev);
if (OF_getprop(node, "fsl,fman-mac", (void *)&enet_node,
sizeof(enet_node)) == -1) {
device_printf(dev, "Could not load fsl,fman-mac property "
"from DTS\n");
return (ENXIO);
}
enet_node = OF_instance_to_package(enet_node);
enet_node = ofw_bus_get_node(dev);
if (OF_getprop(enet_node, "local-mac-address",
(void *)sc->sc_mac_addr, 6) == -1) {
@ -155,9 +146,9 @@ dtsec_fdt_attach(device_t dev)
}
/* Get link speed */
if (ofw_bus_node_is_compatible(enet_node, "fsl,fman-1g-mac") != 0)
if (ofw_bus_is_compatible(dev, "fsl,fman-dtsec") != 0)
sc->sc_eth_dev_type = ETH_DTSEC;
else if (ofw_bus_node_is_compatible(enet_node, "fsl,fman-10g-mac") != 0)
else if (ofw_bus_is_compatible(dev, "fsl,fman-xgec") != 0)
sc->sc_eth_dev_type = ETH_10GSEC;
else
return(ENXIO);
@ -197,7 +188,7 @@ dtsec_fdt_attach(device_t dev)
return (ENXIO);
/* Get RX/TX port handles */
if (OF_getprop(enet_node, "fsl,port-handles", (void *)fman_rxtx_node,
if (OF_getprop(enet_node, "fsl,fman-ports", (void *)fman_rxtx_node,
sizeof(fman_rxtx_node)) <= 0)
return (ENXIO);
@ -211,11 +202,11 @@ dtsec_fdt_attach(device_t dev)
fman_rxtx_node[1] = OF_instance_to_package(fman_rxtx_node[1]);
if (ofw_bus_node_is_compatible(fman_rxtx_node[0],
"fsl,fman-port-1g-rx") == 0)
"fsl,fman-v2-port-rx") == 0)
return (ENXIO);
if (ofw_bus_node_is_compatible(fman_rxtx_node[1],
"fsl,fman-port-1g-tx") == 0)
"fsl,fman-v2-port-tx") == 0)
return (ENXIO);
/* Get RX port HW id */
@ -228,11 +219,12 @@ dtsec_fdt_attach(device_t dev)
sizeof(sc->sc_port_tx_hw_id)) <= 0)
return (ENXIO);
/* Get QMan channel */
if (OF_getprop(fman_rxtx_node[1], "fsl,qman-channel-id",
(void *)&sc->sc_port_tx_qman_chan,
sizeof(sc->sc_port_tx_qman_chan)) <= 0)
if (OF_getprop(fman_rxtx_node[1], "cell-index", &fman_tx_cell,
sizeof(fman_tx_cell)) <= 0)
return (ENXIO);
/* Get QMan channel */
sc->sc_port_tx_qman_chan = fman_qman_channel_id(device_get_parent(dev),
fman_tx_cell);
return (dtsec_attach(dev));
}

View File

@ -323,6 +323,7 @@ dtsec_rm_pool_rx_init(struct dtsec_softc *sc)
DTSEC_RM_POOL_RX_HIGH_MARK, 0, 0, dtsec_rm_pool_rx_depleted, sc, NULL,
NULL);
if (sc->sc_rx_pool == NULL) {
device_printf(sc->sc_dev, "NULL rx pool somehow\n");
dtsec_rm_pool_rx_free(sc);
return (EIO);
}

View File

@ -33,6 +33,7 @@ __FBSDID("$FreeBSD$");
#include <sys/kernel.h>
#include <sys/bus.h>
#include <sys/module.h>
#include <sys/smp.h>
#include <machine/bus.h>
@ -105,7 +106,8 @@ static driver_t qm_portals_driver = {
};
static devclass_t qm_portals_devclass;
DRIVER_MODULE(qman_portals, ofwbus, qm_portals_driver, qm_portals_devclass, 0, 0);
EARLY_DRIVER_MODULE(qman_portals, ofwbus, qm_portals_driver,
qm_portals_devclass, 0, 0, BUS_PASS_BUS);
static void
get_addr_props(phandle_t node, uint32_t *addrp, uint32_t *sizep)
@ -121,7 +123,7 @@ static int
qman_portals_fdt_probe(device_t dev)
{
if (!ofw_bus_is_compatible(dev, "qman-portals"))
if (!ofw_bus_is_compatible(dev, "fsl,qman-portals"))
return (ENXIO);
device_set_desc(dev, BMAN_PORT_DEVSTR);
@ -129,36 +131,87 @@ qman_portals_fdt_probe(device_t dev)
return (BUS_PROBE_DEFAULT);
}
static phandle_t
qman_portal_find_cpu(int cpu)
{
phandle_t node;
pcell_t reg;
node = OF_finddevice("/cpus");
if (node == -1)
return (-1);
for (node = OF_child(node); node != 0; node = OF_peer(node)) {
if (OF_getprop(node, "reg", &reg, sizeof(reg)) <= 0)
continue;
if (reg == cpu)
return (node);
}
return (-1);
}
static int
qman_portals_fdt_attach(device_t dev)
{
struct dpaa_portals_softc *sc;
struct resource_list_entry *rle;
phandle_t node, child, cpu_node;
vm_paddr_t portal_pa;
vm_paddr_t portal_pa, portal_par_pa;
vm_size_t portal_size;
uint32_t addr, size;
uint32_t addr, paddr, size;
ihandle_t cpu;
int cpu_num, cpus, intr_rid;
struct dpaa_portals_devinfo di;
struct ofw_bus_devinfo ofw_di = {};
cell_t *range;
int nrange;
int i;
cpus = 0;
sc = device_get_softc(dev);
sc->sc_dev = dev;
node = ofw_bus_get_node(dev);
/* Get this node's range */
get_addr_props(ofw_bus_get_node(device_get_parent(dev)), &paddr, &size);
get_addr_props(node, &addr, &size);
nrange = OF_getencprop_alloc(node, "ranges",
sizeof(*range), (void **)&range);
if (nrange < addr + paddr + size)
return (ENXIO);
portal_pa = portal_par_pa = 0;
portal_size = 0;
for (i = 0; i < addr; i++) {
portal_pa <<= 32;
portal_pa |= range[i];
}
for (; i < paddr + addr; i++) {
portal_par_pa <<= 32;
portal_par_pa |= range[i];
}
portal_pa += portal_par_pa;
for (; i < size + paddr + addr; i++) {
portal_size = (uintmax_t)portal_size << 32;
portal_size |= range[i];
}
OF_prop_free(range);
sc->sc_dp_size = portal_size;
sc->sc_dp_pa = portal_pa;
/* Find portals tied to CPUs */
for (child = OF_child(node); child != 0; child = OF_peer(child)) {
if (cpus >= mp_ncpus)
break;
if (!ofw_bus_node_is_compatible(child, "fsl,qman-portal")) {
continue;
}
/* Checkout related cpu */
if (OF_getprop(child, "cpu-handle", (void *)&cpu,
sizeof(cpu)) <= 0) {
continue;
cpu = qman_portal_find_cpu(cpus);
if (cpu <= 0)
continue;
}
/* Acquire cpu number */
cpu_node = OF_instance_to_package(cpu);
@ -169,9 +222,6 @@ qman_portals_fdt_attach(device_t dev)
cpus++;
if (cpus > MAXCPU)
break;
if (ofw_bus_gen_setup_devinfo(&ofw_di, child) != 0) {
device_printf(dev, "could not set up devinfo\n");
continue;
@ -192,17 +242,6 @@ qman_portals_fdt_attach(device_t dev)
continue;
}
di.di_intr_rid = intr_rid;
ofw_reg_to_paddr(child, 0, &portal_pa, &portal_size, NULL);
rle = resource_list_find(&di.di_res, SYS_RES_MEMORY, 0);
if (sc->sc_dp_pa == 0)
sc->sc_dp_pa = portal_pa - rle->start;
portal_size = rle->end + 1;
rle = resource_list_find(&di.di_res, SYS_RES_MEMORY, 1);
portal_size = ulmax(rle->end + 1, portal_size);
sc->sc_dp_size = ulmax(sc->sc_dp_size, portal_size);
if (dpaa_portal_alloc_res(dev, &di, cpu_num))
goto err;

View File

@ -69,8 +69,6 @@ contrib/ncsw/user/env/core.c optional dpaa \
no-depend compile-with "${DPAA_COMPILE_CMD}"
# FreeBSD Wrappers
dev/dpaa/dpaa.c optional dpaa fdt \
no-depend compile-with "${DPAA_COMPILE_CMD}"
dev/dpaa/portals_common.c optional dpaa \
no-depend compile-with "${DPAA_COMPILE_CMD}"
dev/dpaa/bman_portals.c optional dpaa fdt \