chipattach
- coreunit = call si_coreunit() (this returns the core-type instantiation # of the current core) (see: brcm/shared/siutils.c)
- if the core rev is 0x80000000 (GMAC_4706B0_CORE_REV) we also need the core 0x5dc (GMAC_COMMON_4706_CORE_ID)
get ethernet address from "et<coreunit>macaddr" field in nvram
get phy address from "et<coreunit>phyaddr" field in nvram
- mask phyaddr with 0x1f (phy mask)
- fail if phy addrs is 31 (no phy present at all)
call si_pci_setup() coremask= 1 << <coreindex> (does nothing on SoCs) (see: brcm/shared/siutils.c)
call chipreset()
dma resources allocation
call dma_attach(osh, "et<coreunit>", ch->sih, dmaregs[0].dmaxmt, dmaregs[0].dmarcv, 128, 512,2048 - 256, -1, 320, 30, 0) (see: brcm/shared/hnddma.c:)
call dma_attach(osh, "et<coreunit>", ch->sih, dmaregs[1].dmaxmt, NULL, 128, 0,0, -1, 0, 0, 0)
call dma_attach(osh, "et<coreunit>", ch->sih, dmaregs[2].dmaxmt, NULL, 128, 0,0, -1, 0, 0, 0)
call dma_attach(osh, "et<coreunit>", ch->sih, dmaregs[3].dmaxmt, NULL, 128, 0,0, -1, 0, 0, 0)
if "et<coreunit>_no_txint" is set
intmask = DEF_INTMASK & ~(I_XI0 | I_XI1 | I_XI2 | I_XI3);
- else
- intmask = DEF_INTMASK
- TODO: reset the external phy
- TODO: Broadcom Robo ethernet switch.
- TODO: ADMtek ethernet switch.