mpc85xx/portals: Add qman and bman ip_cfg field into portal info
authorHaiying Wang <Haiying.Wang@freescale.com>
Thu, 11 Oct 2012 07:13:38 +0000 (07:13 +0000)
committerAndy Fleming <afleming@freescale.com>
Mon, 22 Oct 2012 20:52:46 +0000 (15:52 -0500)
Because QMan3.0 and BMan2.1 used ip_cfg in ip_rev_2 register to differ the
total portal number, buffer pool number etc, we can use this info to limit
those resources in kernel driver.

Signed-off-by: Haiying Wang <Haiying.Wang@freescale.com>
Signed-off-by: Andy Fleming <afleming@freescale.com>
arch/powerpc/cpu/mpc85xx/portals.c

index 6199633541250e03ce4dd5e6ac1beac3c8f387bf..b59ef69f1f6c5aa123aae4ae80191fd926047461 100644 (file)
@@ -182,14 +182,18 @@ void fdt_fixup_qportals(void *blob)
 {
        int off, err;
        unsigned int maj, min;
+       unsigned int ip_cfg;
        u32 rev_1 = in_be32(&qman->ip_rev_1);
+       u32 rev_2 = in_be32(&qman->ip_rev_2);
        char compat[64];
        int compat_len;
 
        maj = (rev_1 >> 8) & 0xff;
        min = rev_1 & 0xff;
+       ip_cfg = rev_2 & 0xff;
 
-       compat_len = sprintf(compat, "fsl,qman-portal-%u.%u", maj, min) + 1;
+       compat_len = sprintf(compat, "fsl,qman-portal-%u.%u.%u",
+                                       maj, min, ip_cfg) + 1;
        compat_len += sprintf(compat + compat_len, "fsl,qman-portal") + 1;
 
        off = fdt_node_offset_by_compatible(blob, -1, "fsl,qman-portal");
@@ -267,14 +271,19 @@ void fdt_fixup_bportals(void *blob)
 {
        int off, err;
        unsigned int maj, min;
+       unsigned int ip_cfg;
        u32 rev_1 = in_be32(&bman->ip_rev_1);
+       u32 rev_2 = in_be32(&bman->ip_rev_2);
        char compat[64];
        int compat_len;
 
        maj = (rev_1 >> 8) & 0xff;
        min = rev_1 & 0xff;
 
-       compat_len = sprintf(compat, "fsl,bman-portal-%u.%u", maj, min) + 1;
+       ip_cfg = rev_2 & 0xff;
+
+       compat_len = sprintf(compat, "fsl,bman-portal-%u.%u.%u",
+                                maj, min, ip_cfg) + 1;
        compat_len += sprintf(compat + compat_len, "fsl,bman-portal") + 1;
 
        off = fdt_node_offset_by_compatible(blob, -1, "fsl,bman-portal");