[U-Boot] oddity(?) in selection of FCC Ethernet index in 2014 version of u-boot

at the moment, i'm trying to get a minimal u-boot running on an MPC8280-based target board (please, no jokes), and for the sake of expediency, i just used git to check out a version of u-boot just before it removed the definition of a target board (MPC8260ads) that seems moderately close to what i'm after. so i checked out git commit 373a9788f05dfab47e01badc046459dead163104, which is dated May of 2014 to see what I could do with that, and I found the following oddity(?).
I actually selected the (8280-based) PQ2FADS board:
$ make PQ2FADS_config
and started tweaking until i got to configuring Ethernet support on FCC. the board definition file MPC8260ADS.h contains the following snippet for selecting Ethernet on FCC:
#ifdef CONFIG_ETHER_ON_FCC
#define CONFIG_ETHER_INDEX 2 /* which SCC/FCC channel for ethernet */
#if CONFIG_ETHER_INDEX == 1
# define CONFIG_SYS_PHY_ADDR 0 # define CONFIG_SYS_CMXFCR_VALUE1 (CMXFCR_RF1CS_CLK11 | CMXFCR_TF1CS_CLK10) # define CONFIG_SYS_CMXFCR_MASK1 (CMXFCR_FC1 | CMXFCR_RF1CS_MSK | CMXFCR_TF1CS_MSK)
#elif CONFIG_ETHER_INDEX == 2
#if CONFIG_ADSTYPE == CONFIG_SYS_8272ADS /* RxCLK is CLK15, TxCLK is CLK16 */ # define CONFIG_SYS_PHY_ADDR 3 # define CONFIG_SYS_CMXFCR_VALUE2 (CMXFCR_RF2CS_CLK15 | CMXFCR_TF2CS_CLK16) #else /* RxCLK is CLK13, TxCLK is CLK14 */ # define CONFIG_SYS_PHY_ADDR 0 # define CONFIG_SYS_CMXFCR_VALUE2 (CMXFCR_RF2CS_CLK13 | CMXFCR_TF2CS_CLK14) #endif /* CONFIG_ADSTYPE == CONFIG_SYS_8272ADS */
# define CONFIG_SYS_CMXFCR_MASK2 (CMXFCR_FC2 | CMXFCR_RF2CS_MSK | CMXFCR_TF2CS_MSK)
#endif /* CONFIG_ETHER_INDEX */
fair enough ... the above clearly implies that Ethernet on FCC will be defined by the values of the two variables:
CONFIG_ETHER_ON_FCC CONFIG_ETHER_INDEX
but here's the puzzler -- this appears to be implemented by the source file arch/powerpc/cpu/mpc8260/ether_fcc.c (it is in fact compiled), but that file contains the snippet:
#if defined(CONFIG_ETHER_ON_FCC) && defined(CONFIG_CMD_NET)
static struct ether_fcc_info_s { int ether_index; int proff_enet; ulong cpm_cr_enet_sblock; ulong cpm_cr_enet_page; ulong cmxfcr_mask; ulong cmxfcr_value; } ether_fcc_info[] = { #ifdef CONFIG_ETHER_ON_FCC1 { 0, PROFF_FCC1, CPM_CR_FCC1_SBLOCK, CPM_CR_FCC1_PAGE, CONFIG_SYS_CMXFCR_MASK1, CONFIG_SYS_CMXFCR_VALUE1 }, #endif
#ifdef CONFIG_ETHER_ON_FCC2 ... snip ...
note that the board header file sets CONFIG_ETHER_INDEX to identify the channel, but that source file checks the variables CONFIG_ETHER_ON_FCC1, CONFIG_ETHER_ON_FCC2 and so on, which are not set in the board definition file.
i took a look and, back then, some boards defined CONFIG_ETHER_ON_FCCn, while others set CONFIG_ETHER_INDEX. it seems that doing it that second way could not possibly have worked. i'm just writing this off to bit-rot in that nobody really looked at those old boards for a long time. but am i right in concluding that using CONFIG_ETHER_INDEX to select the FCC channel could not possibly have worked? or am i missing something?
rday
p.s. to be more precise about the target board, a group of us are porting linux to the Mitel 3300 AX Controller. so if you've been down that or a similar road, i'd love to hear from you.
participants (1)
-
Robert P. J. Day