On 2009/05/17 08:14, Brad wrote:
> The following diff adds support for newer Broadcom bge(4)
> chipsets based on the BCM5761/BCM5784/BCM5785 and BCM57780
> ASIC cores. Tested with a handful of older chipsets and
> with the BCM5764/BCM5784 chipsets by some users.
This is working fine with BCM5704C B0 for me and I've been running
an earlier version of the diff on that for a couple of weeks.
bge0 at pci2 dev 3 function 0 "Broadcom BCM5704C" rev 0x10, BCM5704 B0
(0x2100): apic 2 int 8 (irq 5), address 00:30:48:58:86:40
brgphy0 at bge0 phy 1: BCM5704 10/100/1000baseT PHY, rev. 0
>
> Index: pci/if_bge.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_bge.c,v
> retrieving revision 1.262
> diff -u -p -r1.262 if_bge.c
> --- pci/if_bge.c 23 Apr 2009 19:15:07 -0000 1.262
> +++ pci/if_bge.c 17 May 2009 11:58:14 -0000
> @@ -240,6 +240,7 @@ const struct pci_matchid bge_devices[] =
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5720 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5721 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5722 },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5723 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5750 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5750M },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5751 },
> @@ -255,10 +256,17 @@ const struct pci_matchid bge_devices[] =
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5755 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5755M },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5756 },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5761 },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5761E },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5761S },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5761SE },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5764 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5780 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5780S },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5781 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5782 },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5784 },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5785 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5786 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5787 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5787F },
> @@ -270,6 +278,10 @@ const struct pci_matchid bge_devices[] =
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5903M },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5906 },
> { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5906M },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM57720 },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM57760 },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM57780 },
> + { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM57790 },
>
> { PCI_VENDOR_FUJITSU, PCI_PRODUCT_FUJITSU_PW008GE4 },
> { PCI_VENDOR_FUJITSU, PCI_PRODUCT_FUJITSU_PW008GE5 },
> @@ -288,8 +300,12 @@ const struct pci_matchid bge_devices[] =
> BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5714 || \
> BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5752 || \
> BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5755 || \
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761 || \
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784 || \
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785 || \
> BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787 || \
> - BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906)
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906 || \
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780)
>
> #define BGE_IS_575X_PLUS(sc) \
> (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5750 || \
> @@ -298,8 +314,12 @@ const struct pci_matchid bge_devices[] =
> BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5714 || \
> BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5752 || \
> BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5755 || \
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761 || \
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784 || \
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785 || \
> BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787 || \
> - BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906)
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906 || \
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780)
>
> #define BGE_IS_5714_FAMILY(sc) \
> (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5714_A0 || \
> @@ -364,6 +384,10 @@ static const struct bge_revision {
> { BGE_CHIPID_BCM5755_A1, "BCM5755 A1" },
> { BGE_CHIPID_BCM5755_A2, "BCM5755 A2" },
> { BGE_CHIPID_BCM5755_C0, "BCM5755 C0" },
> + { BGE_CHIPID_BCM5761_A0, "BCM5761 A0" },
> + { BGE_CHIPID_BCM5761_A1, "BCM5761 A1" },
> + { BGE_CHIPID_BCM5784_A0, "BCM5784 A0" },
> + { BGE_CHIPID_BCM5784_A1, "BCM5784 A1" },
> /* the 5754 and 5787 share the same ASIC ID */
> { BGE_CHIPID_BCM5787_A0, "BCM5754/5787 A0" },
> { BGE_CHIPID_BCM5787_A1, "BCM5754/5787 A1" },
> @@ -391,9 +415,13 @@ static const struct bge_revision bge_maj
> { BGE_ASICREV_BCM5780, "unknown BCM5780" },
> { BGE_ASICREV_BCM5714, "unknown BCM5714" },
> { BGE_ASICREV_BCM5755, "unknown BCM5755" },
> + { BGE_ASICREV_BCM5761, "unknown BCM5761" },
> + { BGE_ASICREV_BCM5784, "unknown BCM5784" },
> + { BGE_ASICREV_BCM5785, "unknown BCM5785" },
> /* 5754 and 5787 share the same ASIC ID */
> { BGE_ASICREV_BCM5787, "unknown BCM5754/5787" },
> { BGE_ASICREV_BCM5906, "unknown BCM5906" },
> + { BGE_ASICREV_BCM57780, "unknown BCM57780" },
>
> { 0, NULL }
> };
> @@ -1638,7 +1666,11 @@ bge_blockinit(struct bge_softc *sc)
>
> /* Enable host coalescing bug fix. */
> if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5755 ||
> - BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787)
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780)
> val |= (1 << 29);
>
> /* Turn on write DMA state machine */
> @@ -1646,6 +1678,13 @@ bge_blockinit(struct bge_softc *sc)
>
> val = BGE_RDMAMODE_ENABLE|BGE_RDMAMODE_ALL_ATTNS;
>
> + if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780)
> + val |= BGE_RDMAMODE_BD_SBD_CRPT_ATTN |
> + BGE_RDMAMODE_MBUF_RBD_CRPT_ATTN |
> + BGE_RDMAMODE_MBUF_SBD_CRPT_ATTN;
> +
> if (sc->bge_flags & BGE_PCIE)
> val |= BGE_RDMAMODE_FIFO_LONG_BURST;
>
> @@ -1668,8 +1707,13 @@ bge_blockinit(struct bge_softc *sc)
> /* Turn on send BD completion state machine */
> CSR_WRITE_4(sc, BGE_SBDC_MODE, BGE_SBDCMODE_ENABLE);
>
> + val = BGE_SDCMODE_ENABLE;
> +
> + if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761)
> + val |= BGE_SDCMODE_CDELAY;
> +
> /* Turn on send data completion state machine */
> - CSR_WRITE_4(sc, BGE_SDC_MODE, BGE_SDCMODE_ENABLE);
> + CSR_WRITE_4(sc, BGE_SDC_MODE, val);
>
> /* Turn on send data initiator state machine */
> CSR_WRITE_4(sc, BGE_SDI_MODE, BGE_SDIMODE_ENABLE);
> @@ -1813,17 +1857,21 @@ bge_attach(struct device *parent, struct
> /*
> * Save ASIC rev.
> */
> -
> sc->bge_chipid =
> - pci_conf_read(pc, pa->pa_tag, BGE_PCI_MISC_CTL) &
> - BGE_PCIMISCCTL_ASICREV;
> + (pci_conf_read(pc, pa->pa_tag, BGE_PCI_MISC_CTL)
> + >> BGE_PCIMISCCTL_ASICREV_SHIFT);
> +
> + if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_USE_PRODID_REG) {
> + sc->bge_chipid = pci_conf_read(pc, pa->pa_tag,
> + BGE_PCI_PRODID_ASICREV);
> + }
>
> printf(", ");
> br = bge_lookup_rev(sc->bge_chipid);
> if (br == NULL)
> - printf("unknown ASIC (0x%04x)", sc->bge_chipid >> 16);
> + printf("unknown ASIC (0x%x)", sc->bge_chipid);
> else
> - printf("%s (0x%04x)", br->br_name, sc->bge_chipid >> 16);
> + printf("%s (0x%x)", br->br_name, sc->bge_chipid);
>
> /*
> * PCI Express check.
> @@ -1895,6 +1943,7 @@ bge_attach(struct device *parent, struct
> (PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_BROADCOM_BCM5751F ||
> PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_BROADCOM_BCM5753F ||
> PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_BROADCOM_BCM5787F)) ||
> + PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_BROADCOM_BCM57790 ||
> BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906)
> sc->bge_flags |= BGE_10_100_ONLY;
>
> @@ -1914,15 +1963,20 @@ bge_attach(struct device *parent, struct
> if (sc->bge_chipid == BGE_CHIPID_BCM5704_A0)
> sc->bge_flags |= BGE_PHY_5704_A0_BUG;
>
> - if (BGE_IS_5705_OR_BEYOND(sc)) {
> + if ((BGE_IS_5705_OR_BEYOND(sc)) &&
> + BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5906 &&
> + BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5785 &&
> + BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM57780) {
> if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5755 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784 ||
> BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787) {
> if (PCI_PRODUCT(pa->pa_id) !=
> PCI_PRODUCT_BROADCOM_BCM5722 &&
> PCI_PRODUCT(pa->pa_id) !=
> PCI_PRODUCT_BROADCOM_BCM5756)
> sc->bge_flags |= BGE_PHY_JITTER_BUG;
> if (PCI_PRODUCT(pa->pa_id) ==
> PCI_PRODUCT_BROADCOM_BCM5755M)
> sc->bge_flags |= BGE_PHY_ADJUST_TRIM;
> - } else if (BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5906)
> + } else
> sc->bge_flags |= BGE_PHY_BER_BUG;
> }
>
> @@ -2199,7 +2253,11 @@ bge_reset(struct bge_softc *sc)
> /* Disable fastboot on controllers that support it. */
> if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5752 ||
> BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5755 ||
> - BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787)
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787 ||
> + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780)
> CSR_WRITE_4(sc, BGE_FASTBOOT_PC, 0);
>
> reset = BGE_MISCCFG_RESET_CORE_CLOCKS|(65<<1);
> Index: pci/if_bgereg.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_bgereg.h,v
> retrieving revision 1.91
> diff -u -p -r1.91 if_bgereg.h
> --- pci/if_bgereg.h 23 Apr 2009 19:15:07 -0000 1.91
> +++ pci/if_bgereg.h 17 May 2009 12:00:40 -0000
> @@ -199,6 +199,7 @@
> #define BGE_PCI_UNDI_TX_BD_PRODIDX_LO 0xAC
> #define BGE_PCI_ISR_MBX_HI 0xB0
> #define BGE_PCI_ISR_MBX_LO 0xB4
> +#define BGE_PCI_PRODID_ASICREV 0xBC
>
> /* XXX:
> * Used in PCI-Express code for 575x chips.
> @@ -219,6 +220,7 @@
> #define BGE_PCIMISCCTL_REG_WORDSWAP 0x00000040
> #define BGE_PCIMISCCTL_INDIRECT_ACCESS 0x00000080
> #define BGE_PCIMISCCTL_ASICREV 0xFFFF0000
> +#define BGE_PCIMISCCTL_ASICREV_SHIFT 16
>
> #if BYTE_ORDER == LITTLE_ENDIAN
> #define BGE_DMA_SWAP_OPTIONS \
> @@ -234,61 +236,65 @@
> (BGE_PCIMISCCTL_ENDIAN_WORDSWAP|BGE_PCIMISCCTL_CLEAR_INTA| \
> BGE_PCIMISCCTL_MASK_PCI_INTR|BGE_PCIMISCCTL_INDIRECT_ACCESS)
>
> -#define BGE_CHIPID_BCM5700_A0 0x70000000
> -#define BGE_CHIPID_BCM5700_A1 0x70010000
> -#define BGE_CHIPID_BCM5700_B0 0x71000000
> -#define BGE_CHIPID_BCM5700_B1 0x71010000
> -#define BGE_CHIPID_BCM5700_B2 0x71020000
> -#define BGE_CHIPID_BCM5700_B3 0x71030000
> -#define BGE_CHIPID_BCM5700_ALTIMA 0x71040000
> -#define BGE_CHIPID_BCM5700_C0 0x72000000
> -#define BGE_CHIPID_BCM5701_A0 0x00000000 /* grrrr */
> -#define BGE_CHIPID_BCM5701_B0 0x01000000
> -#define BGE_CHIPID_BCM5701_B2 0x01020000
> -#define BGE_CHIPID_BCM5701_B5 0x01050000
> -#define BGE_CHIPID_BCM5703_A0 0x10000000
> -#define BGE_CHIPID_BCM5703_A1 0x10010000
> -#define BGE_CHIPID_BCM5703_A2 0x10020000
> -#define BGE_CHIPID_BCM5703_A3 0x10030000
> -#define BGE_CHIPID_BCM5703_B0 0x11000000
> -#define BGE_CHIPID_BCM5704_A0 0x20000000
> -#define BGE_CHIPID_BCM5704_A1 0x20010000
> -#define BGE_CHIPID_BCM5704_A2 0x20020000
> -#define BGE_CHIPID_BCM5704_A3 0x20030000
> -#define BGE_CHIPID_BCM5704_B0 0x21000000
> -#define BGE_CHIPID_BCM5705_A0 0x30000000
> -#define BGE_CHIPID_BCM5705_A1 0x30010000
> -#define BGE_CHIPID_BCM5705_A2 0x30020000
> -#define BGE_CHIPID_BCM5705_A3 0x30030000
> -#define BGE_CHIPID_BCM5750_A0 0x40000000
> -#define BGE_CHIPID_BCM5750_A1 0x40010000
> -#define BGE_CHIPID_BCM5750_A3 0x40030000
> -#define BGE_CHIPID_BCM5750_B0 0x40100000
> -#define BGE_CHIPID_BCM5750_B1 0x41010000
> -#define BGE_CHIPID_BCM5750_C0 0x42000000
> -#define BGE_CHIPID_BCM5750_C1 0x42010000
> -#define BGE_CHIPID_BCM5750_C2 0x42020000
> -#define BGE_CHIPID_BCM5714_A0 0x50000000
> -#define BGE_CHIPID_BCM5752_A0 0x60000000
> -#define BGE_CHIPID_BCM5752_A1 0x60010000
> -#define BGE_CHIPID_BCM5752_A2 0x60020000
> -#define BGE_CHIPID_BCM5714_B0 0x80000000
> -#define BGE_CHIPID_BCM5714_B3 0x80030000
> -#define BGE_CHIPID_BCM5715_A0 0x90000000
> -#define BGE_CHIPID_BCM5715_A1 0x90010000
> -#define BGE_CHIPID_BCM5715_A3 0x90030000
> -#define BGE_CHIPID_BCM5755_A0 0xa0000000
> -#define BGE_CHIPID_BCM5755_A1 0xa0010000
> -#define BGE_CHIPID_BCM5755_A2 0xa0020000
> -#define BGE_CHIPID_BCM5755_C0 0xa2000000
> -#define BGE_CHIPID_BCM5787_A0 0xb0000000
> -#define BGE_CHIPID_BCM5787_A1 0xb0010000
> -#define BGE_CHIPID_BCM5787_A2 0xb0020000
> -#define BGE_CHIPID_BCM5906_A1 0xc0010000
> -#define BGE_CHIPID_BCM5906_A2 0xc0020000
> +#define BGE_CHIPID_BCM5700_A0 0x7000
> +#define BGE_CHIPID_BCM5700_A1 0x7001
> +#define BGE_CHIPID_BCM5700_B0 0x7100
> +#define BGE_CHIPID_BCM5700_B1 0x7101
> +#define BGE_CHIPID_BCM5700_B2 0x7102
> +#define BGE_CHIPID_BCM5700_B3 0x7103
> +#define BGE_CHIPID_BCM5700_ALTIMA 0x7104
> +#define BGE_CHIPID_BCM5700_C0 0x7200
> +#define BGE_CHIPID_BCM5701_A0 0x0000 /* grrrr */
> +#define BGE_CHIPID_BCM5701_B0 0x0100
> +#define BGE_CHIPID_BCM5701_B2 0x0102
> +#define BGE_CHIPID_BCM5701_B5 0x0105
> +#define BGE_CHIPID_BCM5703_A0 0x1000
> +#define BGE_CHIPID_BCM5703_A1 0x1001
> +#define BGE_CHIPID_BCM5703_A2 0x1002
> +#define BGE_CHIPID_BCM5703_A3 0x1003
> +#define BGE_CHIPID_BCM5703_B0 0x1100
> +#define BGE_CHIPID_BCM5704_A0 0x2000
> +#define BGE_CHIPID_BCM5704_A1 0x2001
> +#define BGE_CHIPID_BCM5704_A2 0x2002
> +#define BGE_CHIPID_BCM5704_A3 0x2003
> +#define BGE_CHIPID_BCM5704_B0 0x2100
> +#define BGE_CHIPID_BCM5705_A0 0x3000
> +#define BGE_CHIPID_BCM5705_A1 0x3001
> +#define BGE_CHIPID_BCM5705_A2 0x3002
> +#define BGE_CHIPID_BCM5705_A3 0x3003
> +#define BGE_CHIPID_BCM5750_A0 0x4000
> +#define BGE_CHIPID_BCM5750_A1 0x4001
> +#define BGE_CHIPID_BCM5750_A3 0x4003
> +#define BGE_CHIPID_BCM5750_B0 0x4010
> +#define BGE_CHIPID_BCM5750_B1 0x4101
> +#define BGE_CHIPID_BCM5750_C0 0x4200
> +#define BGE_CHIPID_BCM5750_C1 0x4201
> +#define BGE_CHIPID_BCM5750_C2 0x4202
> +#define BGE_CHIPID_BCM5714_A0 0x5000
> +#define BGE_CHIPID_BCM5761_A0 0x5761000
> +#define BGE_CHIPID_BCM5761_A1 0x5761100
> +#define BGE_CHIPID_BCM5784_A0 0x5784000
> +#define BGE_CHIPID_BCM5784_A1 0x5784100
> +#define BGE_CHIPID_BCM5752_A0 0x6000
> +#define BGE_CHIPID_BCM5752_A1 0x6001
> +#define BGE_CHIPID_BCM5752_A2 0x6002
> +#define BGE_CHIPID_BCM5714_B0 0x8000
> +#define BGE_CHIPID_BCM5714_B3 0x8003
> +#define BGE_CHIPID_BCM5715_A0 0x9000
> +#define BGE_CHIPID_BCM5715_A1 0x9001
> +#define BGE_CHIPID_BCM5715_A3 0x9003
> +#define BGE_CHIPID_BCM5755_A0 0xa000
> +#define BGE_CHIPID_BCM5755_A1 0xa001
> +#define BGE_CHIPID_BCM5755_A2 0xa002
> +#define BGE_CHIPID_BCM5755_C0 0xa200
> +#define BGE_CHIPID_BCM5787_A0 0xb000
> +#define BGE_CHIPID_BCM5787_A1 0xb001
> +#define BGE_CHIPID_BCM5787_A2 0xb002
> +#define BGE_CHIPID_BCM5906_A1 0xc001
> +#define BGE_CHIPID_BCM5906_A2 0xc002
>
> /* shorthand one */
> -#define BGE_ASICREV(x) ((x) >> 28)
> +#define BGE_ASICREV(x) ((x) >> 12)
> #define BGE_ASICREV_BCM5700 0x07
> #define BGE_ASICREV_BCM5701 0x00
> #define BGE_ASICREV_BCM5703 0x01
> @@ -302,9 +308,14 @@
> #define BGE_ASICREV_BCM5755 0x0a
> #define BGE_ASICREV_BCM5787 0x0b
> #define BGE_ASICREV_BCM5906 0x0c
> +#define BGE_ASICREV_USE_PRODID_REG 0x0f
> +#define BGE_ASICREV_BCM5761 0x5761
> +#define BGE_ASICREV_BCM5784 0x5784
> +#define BGE_ASICREV_BCM5785 0x5785
> +#define BGE_ASICREV_BCM57780 0x57780
>
> /* chip revisions */
> -#define BGE_CHIPREV(x) ((x) >> 24)
> +#define BGE_CHIPREV(x) ((x) >> 8)
> #define BGE_CHIPREV_5700_AX 0x70
> #define BGE_CHIPREV_5700_BX 0x71
> #define BGE_CHIPREV_5700_CX 0x72
> @@ -314,6 +325,8 @@
> #define BGE_CHIPREV_5704_BX 0x21
> #define BGE_CHIPREV_5750_AX 0x40
> #define BGE_CHIPREV_5750_BX 0x41
> +#define BGE_CHIPREV_5761_AX 0x57611
> +#define BGE_CHIPREV_5784_AX 0x57841
>
> /* PCI DMA Read/Write Control register */
> #define BGE_PCIDMARWCTL_MINDMA 0x000000FF
> @@ -784,8 +797,9 @@
>
> #define BGE_MIMODE_SHORTPREAMBLE 0x00000002
> #define BGE_MIMODE_AUTOPOLL 0x00000010
> +#define BGE_MIMODE_500KHZ_CONST 0x00008000
> #define BGE_MIMODE_CLKCNT 0x001F0000
> -
> +#define BGE_MIMODE_BASE 0x000C0000
>
> /*
> * Send data initiator control registers.
> @@ -845,6 +859,7 @@
> #define BGE_SDCMODE_RESET 0x00000001
> #define BGE_SDCMODE_ENABLE 0x00000002
> #define BGE_SDCMODE_ATTN 0x00000004
> +#define BGE_SDCMODE_CDELAY 0x00000010
>
> /* Send Data completion status register */
> #define BGE_SDCSTAT_ATTN 0x00000004
> @@ -1362,6 +1377,9 @@
> #define BGE_RDMAMODE_PCI_FIFOOREAD_ATTN 0x00000100
> #define BGE_RDMAMODE_LOCWRITE_TOOBIG 0x00000200
> #define BGE_RDMAMODE_ALL_ATTNS 0x000003FC
> +#define BGE_RDMAMODE_BD_SBD_CRPT_ATTN 0x00000800
> +#define BGE_RDMAMODE_MBUF_RBD_CRPT_ATTN 0x00001000
> +#define BGE_RDMAMODE_MBUF_SBD_CRPT_ATTN 0x00002000
> #define BGE_RDMAMODE_FIFO_SIZE_128 0x00020000
> #define BGE_RDMAMODE_FIFO_LONG_BURST 0x00030000
>
> Index: mii/brgphy.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/mii/brgphy.c,v
> retrieving revision 1.84
> diff -u -p -r1.84 brgphy.c
> --- mii/brgphy.c 8 Nov 2008 03:03:50 -0000 1.84
> +++ mii/brgphy.c 10 May 2009 01:46:26 -0000
> @@ -140,6 +140,8 @@ static const struct mii_phydesc brgphys[
> MII_STR_xxBROADCOM2_BCM5722 },
> { MII_OUI_xxBROADCOM2, MII_MODEL_xxBROADCOM2_BCM5755,
> MII_STR_xxBROADCOM2_BCM5755 },
> + { MII_OUI_xxBROADCOM2, MII_MODEL_xxBROADCOM2_BCM5784,
> + MII_STR_xxBROADCOM2_BCM5784 },
> { MII_OUI_xxBROADCOM2, MII_MODEL_xxBROADCOM2_BCM5787,
> MII_STR_xxBROADCOM2_BCM5787 },
> { MII_OUI_xxBROADCOM, MII_MODEL_xxBROADCOM_BCM5706,
> Index: mii/miidevs
> ===================================================================
> RCS file: /cvs/src/sys/dev/mii/miidevs,v
> retrieving revision 1.105
> diff -u -p -r1.105 miidevs
> --- mii/miidevs 25 Oct 2008 00:23:11 -0000 1.105
> +++ mii/miidevs 10 May 2009 01:46:26 -0000
> @@ -145,6 +145,7 @@ model xxBROADCOM2 BCM5755 0x000c BCM5755
> model xxBROADCOM2 BCM5787 0x000e BCM5787 10/100/1000baseT PHY
> model xxBROADCOM2 BCM5708S 0x0015 BCM5708S 1000/2500baseSX PHY
> model xxBROADCOM2 BCM5722 0x002d BCM5722 10/100/1000baseT PHY
> +model xxBROADCOM2 BCM5784 0x003a BCM5784 10/100/1000baseT PHY
> model BROADCOM BCM5400 0x0004 BCM5400 1000baseT PHY
> model BROADCOM BCM5401 0x0005 BCM5401 1000baseT PHY
> model BROADCOM BCM5411 0x0007 BCM5411 1000baseT PHY
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.