On Thu, 2005-05-26 at 18:08, Kumar Gala wrote: > Jon, > > Can you break the patch up into a few pieces, it will be easier to > review that way. Here are the following pieces that make sense to me: > > 0. New firmware interface (fw_bdt*, Kconfig, ...) > 1. board code changes (everything in arch/ppc/platforms/*) > 2. driver changes (things in *_io, ide, net, serial dirs -- try to give > a better list below) > 3. System changes (files in arch/ppc/syslib and include/asm-ppc)
And Part 3 of 4 is the Driver Bits: ppc/8260_io/enet.c | 9 ppc/8260_io/fcc_enet.c | 15 ppc/8xx_io/commproc.c | 3 ppc/8xx_io/enet.c | 10 ppc/8xx_io/fec.c | 8 ide/ppc/mpc8xx.c | 14 mtd/maps/tqm8xxl.c | 7 net/fec.c | 6 net/fec_8xx/fec_8xx-netta.c | 5 net/oaknet.c | 6 serial/68360serial.c | 3 serial/cpm_uart/cpm_uart_core.c | 8 serial/cpm_uart/cpm_uart_cpm1.c | 13 serial/cpm_uart/cpm_uart_cpm2.c | 13 serial/mpc52xx_uart.c | 11 Index: arch/ppc/8260_io/enet.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/arch/ppc/8260_io/enet.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/arch/ppc/8260_io/enet.c (mode:100644) @@ -47,6 +47,7 @@ #include <asm/uaccess.h> #include <asm/cpm2.h> #include <asm/irq.h> +#include <asm/firmware.h> /* * Theory of Operation @@ -614,9 +615,8 @@ struct scc_enet_private *cep; int i, j, err; uint dp_offset; - unsigned char *eap; + unsigned char *eap, *p_addr; unsigned long mem_addr; - bd_t *bd; volatile cbd_t *bdp; volatile cpm_cpm2_t *cp; volatile scc_t *sccp; @@ -629,8 +629,6 @@ immap = (cpm2_map_t *)CPM_MAP_ADDR; /* and to internal registers */ io = &immap->im_ioport; - bd = (bd_t *)__res; - /* Create an Ethernet device instance. */ dev = alloc_etherdev(sizeof(*cep)); @@ -735,9 +733,10 @@ * This is supplied in the board information structure, so we * copy that into the controller. */ + p_addr = fw_get_enetaddr(0); eap = (unsigned char *)&(ep->sen_paddrh); for (i=5; i>=0; i--) - *eap++ = dev->dev_addr[i] = bd->bi_enetaddr[i]; + *eap++ = dev->dev_addr[i] = p_addr[i]; ep->sen_pper = 0; /* 'cause the book says so */ ep->sen_taddrl = 0; /* temp address (LSB) */ Index: arch/ppc/8260_io/fcc_enet.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/arch/ppc/8260_io/fcc_enet.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/arch/ppc/8260_io/fcc_enet.c (mode:100644) @@ -47,6 +47,7 @@ #include <asm/irq.h> #include <asm/uaccess.h> #include <asm/signal.h> +#include <asm/firmware.h> /* We can't use the PHY interrupt if we aren't using MDIO. */ #if !defined(CONFIG_USE_MDIO) @@ -1866,9 +1867,8 @@ init_fcc_param(fcc_info_t *fip, struct net_device *dev, volatile cpm2_map_t *immap) { - unsigned char *eap; + unsigned char *eap, *p_addr; unsigned long mem_addr; - bd_t *bd; int i, j; struct fcc_enet_private *cep; volatile fcc_enet_t *ep; @@ -1879,8 +1879,6 @@ ep = cep->ep; cp = cpmp; - bd = (bd_t *)__res; - /* Zero the whole thing.....I must have missed some individually. * It works when I do this. */ @@ -1962,6 +1960,7 @@ * it unique by setting a few bits in the upper byte of the * non-static part of the address. */ + p_addr = fw_get_enetaddr(0); eap = (unsigned char *)&(ep->fen_paddrh); for (i=5; i>=0; i--) { @@ -1971,22 +1970,22 @@ */ #ifdef CONFIG_SBC82xx if (i == 5) { - /* bd->bi_enetaddr holds the SCC0 address; the FCC + /* p_addr holds the SCC0 address; the FCC devices count up from there */ - dev->dev_addr[i] = bd->bi_enetaddr[i] & ~3; + dev->dev_addr[i] = p_addr[i] & ~3; dev->dev_addr[i] += 1 + fip->fc_fccnum; *eap++ = dev->dev_addr[i]; } #else #ifndef CONFIG_RPX8260 if (i == 3) { - dev->dev_addr[i] = bd->bi_enetaddr[i]; + dev->dev_addr[i] = p_addr[i]; dev->dev_addr[i] |= (1 << (7 - fip->fc_fccnum)); *eap++ = dev->dev_addr[i]; } else #endif { - *eap++ = dev->dev_addr[i] = bd->bi_enetaddr[i]; + *eap++ = dev->dev_addr[i] = p_addr[i]; } #endif } Index: arch/ppc/8xx_io/commproc.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/arch/ppc/8xx_io/commproc.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/arch/ppc/8xx_io/commproc.c (mode:100644) @@ -38,6 +38,7 @@ #include <asm/io.h> #include <asm/tlbflush.h> #include <asm/rheap.h> +#include <asm/firmware.h> extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep); @@ -346,7 +347,7 @@ * The internal baud rate clock is the system clock divided by 16. * This assumes the baudrate is 16x oversampled by the uart. */ -#define BRG_INT_CLK (((bd_t *)__res)->bi_intfreq) +#define BRG_INT_CLK (fw_get_intfreq()) #define BRG_UART_CLK (BRG_INT_CLK/16) #define BRG_UART_CLK_DIV16 (BRG_UART_CLK/16) Index: arch/ppc/8xx_io/enet.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/arch/ppc/8xx_io/enet.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/arch/ppc/8xx_io/enet.c (mode:100644) @@ -46,6 +46,8 @@ #include <asm/mpc8xx.h> #include <asm/uaccess.h> #include <asm/commproc.h> +#include <asm/firmware.h> + /* * Theory of Operation @@ -646,9 +648,8 @@ struct scc_enet_private *cep; int i, j, k, err; uint dp_offset; - unsigned char *eap, *ba; + unsigned char *eap, *ba, *p_addr; dma_addr_t mem_addr; - bd_t *bd; volatile cbd_t *bdp; volatile cpm8xx_t *cp; volatile scc_t *sccp; @@ -659,8 +660,6 @@ immap = (immap_t *)(mfspr(SPRN_IMMR) & 0xFFFF0000); /* and to internal registers */ - bd = (bd_t *)__res; - dev = alloc_etherdev(sizeof(*cep)); if (!dev) return -ENOMEM; @@ -803,9 +802,10 @@ /* Set Ethernet station address. */ + p_addr = fw_get_enetaddr(0); eap = (unsigned char *)&(ep->sen_paddrh); for (i=5; i>=0; i--) - *eap++ = dev->dev_addr[i] = bd->bi_enetaddr[i]; + *eap++ = dev->dev_addr[i] = p_addr[i]; ep->sen_pper = 0; /* 'cause the book says so */ ep->sen_taddrl = 0; /* temp address (LSB) */ Index: arch/ppc/8xx_io/fec.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/arch/ppc/8xx_io/fec.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/arch/ppc/8xx_io/fec.c (mode:100644) @@ -55,6 +55,7 @@ #include <asm/irq.h> #include <asm/uaccess.h> #include <asm/commproc.h> +#include <asm/firmware.h> #ifdef CONFIG_USE_MDIO /* Forward declarations of some structures to support different PHYs @@ -1580,15 +1581,12 @@ cbd_t *cbd_base; volatile immap_t *immap; volatile fec_t *fecp; - bd_t *bd; #ifdef CONFIG_SCC_ENET unsigned char tmpaddr[6]; #endif immap = (immap_t *)IMAP_ADDR; /* pointer to internal registers */ - bd = (bd_t *)__res; - dev = alloc_etherdev(sizeof(*fep)); if (!dev) return -ENOMEM; @@ -1613,7 +1611,7 @@ * this needs some work to get unique addresses. */ eap = (unsigned char *)my_enet_addr; - iap = bd->bi_enetaddr; + iap = fw_get_enetaddr(0); #ifdef CONFIG_SCC_ENET /* @@ -1744,7 +1742,7 @@ /* Set MII speed to 2.5 MHz */ fecp->fec_mii_speed = fep->phy_speed = - (( (bd->bi_intfreq + 500000) / 2500000 / 2 ) & 0x3F ) << 1; + (( (fw_get_intfreq() + 500000) / 2500000 / 2 ) & 0x3F ) << 1; #else fecp->fec_mii_speed = 0; /* turn off MDIO */ #endif /* CONFIG_USE_MDIO */ Index: drivers/ide/ppc/mpc8xx.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/drivers/ide/ppc/mpc8xx.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/drivers/ide/ppc/mpc8xx.c (mode:100644) @@ -41,6 +41,7 @@ #include <asm/8xx_immap.h> #include <asm/machdep.h> #include <asm/irq.h> +#include <asm/firmware.h> static int identify (volatile u8 *p); static void print_fixed (volatile u8 *p); @@ -177,6 +178,7 @@ u32 pcmcia_phy_end; static unsigned long pcmcia_base = 0; unsigned long base; + unsigned int busfreq; *p = 0; if (irq) @@ -224,21 +226,19 @@ printk ("PCMCIA virt base: %08lx\n", pcmcia_base); #endif /* Compute clock cycles for PIO timings */ + busfreq = fw_get_busfreq(); for (i=0; i<6; ++i) { - bd_t *binfo = (bd_t *)__res; - hold_time[i] = - PCMCIA_MK_CLKS (hold_time[i], - binfo->bi_busfreq); + PCMCIA_MK_CLKS (hold_time[i], busfreq); ide_pio_clocks[i].setup_time = PCMCIA_MK_CLKS (ide_pio_timings[i].setup_time, - binfo->bi_busfreq); + busfreq); ide_pio_clocks[i].active_time = PCMCIA_MK_CLKS (ide_pio_timings[i].active_time, - binfo->bi_busfreq); + busfreq); ide_pio_clocks[i].cycle_time = PCMCIA_MK_CLKS (ide_pio_timings[i].cycle_time, - binfo->bi_busfreq); + busfreq); #if 0 printk ("PIO mode %d timings: %d/%d/%d => %d/%d/%d\n", i, Index: drivers/mtd/maps/tqm8xxl.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/drivers/mtd/maps/tqm8xxl.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/drivers/mtd/maps/tqm8xxl.c (mode:100644) @@ -33,6 +33,8 @@ #include <linux/mtd/map.h> #include <linux/mtd/partitions.h> +#include <asm/firmware.h> + #define FLASH_ADDR 0x40000000 #define FLASH_SIZE 0x00800000 #define FLASH_BANK_MAX 4 @@ -115,10 +117,9 @@ int idx = 0, ret = 0; unsigned long flash_addr, flash_size, mtd_size = 0; /* pointer to TQM8xxL board info data */ - bd_t *bd = (bd_t *)__res; - flash_addr = bd->bi_flashstart; - flash_size = bd->bi_flashsize; + flash_addr = fw_get_flashstart(); + flash_size = fw_get_flashsize(); //request maximum flash size address space start_scan_addr = ioremap(flash_addr, flash_size); Index: drivers/net/fec.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/drivers/net/fec.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/drivers/net/fec.c (mode:100644) @@ -1426,11 +1426,9 @@ { struct fec_enet_private *fep = netdev_priv(dev); unsigned char *iap, tmpaddr[6]; - bd_t *bd; int i; - iap = bd->bi_enetaddr; - bd = (bd_t *)__res; + iap = fw_get_enetaddr(0); #ifdef CONFIG_RPXCLASSIC /* The Embedded Planet boards have only one MAC address in @@ -1472,7 +1470,7 @@ /* Set MII speed to 2.5 MHz */ fecp->fec_mii_speed = fep->phy_speed = - ((bd->bi_busfreq * 1000000) / 2500000) & 0x7e; + ((fw_get_busfreq() * 1000000) / 2500000) & 0x7e; } static void __inline__ fec_enable_phy_intr(void) Index: drivers/net/fec_8xx/fec_8xx-netta.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/drivers/net/fec_8xx/fec_8xx-netta.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/drivers/net/fec_8xx/fec_8xx-netta.c (mode:100644) @@ -29,6 +29,7 @@ #include <asm/irq.h> #include <asm/uaccess.h> #include <asm/commproc.h> +#include <asm/firmware.h> #include "fec_8xx.h" @@ -76,7 +77,6 @@ int fec_8xx_platform_init(void) { immap_t *immap = (immap_t *)IMAP_ADDR; - bd_t *bd = (bd_t *) __res; const char *s; char *e; int i; @@ -116,8 +116,7 @@ setbits16(immap->im_ioport.iop_pcint, 0x0200); /* fill up */ - fec1_info.sys_clk = bd->bi_intfreq; - fec2_info.sys_clk = bd->bi_intfreq; + fec1_info.sys_clk = fec2_info.sys_clk = fw_get_intfreq(); s = __fw_getenv("ethaddr"); if (s != NULL) { Index: drivers/net/oaknet.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/drivers/net/oaknet.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/drivers/net/oaknet.c (mode:100644) @@ -23,6 +23,7 @@ #include <asm/board.h> #include <asm/io.h> +#include <asm/firmware.h> #include "8390.h" @@ -101,7 +102,7 @@ #else unsigned long ioaddr = ioremap(OAKNET_IO_BASE, OAKNET_IO_SIZE); #endif - bd_t *bip = (bd_t *)__res; + unsigned char *p_addr; if (!ioaddr) return -ENOMEM; @@ -170,9 +171,10 @@ /* Tell the world about what and where we've found. */ + p_addr = fw_get_enetaddr(0); printk("%s: %s at", dev->name, name); for (i = 0; i < ETHER_ADDR_LEN; ++i) { - dev->dev_addr[i] = bip->bi_enetaddr[i]; + dev->dev_addr[i] = p_addr[i]; printk("%c%.2x", (i ? ':' : ' '), dev->dev_addr[i]); } printk(", found at %#lx, using IRQ %d.\n", dev->base_addr, dev->irq); Index: drivers/serial/68360serial.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/drivers/serial/68360serial.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/drivers/serial/68360serial.c (mode:100644) @@ -2852,9 +2852,6 @@ /* mleslie TODO: * add something to the 68k bootloader to store a desired initial console baud rate */ -/* bd_t *bd; */ /* a board info struct used by EPPC-bug */ -/* bd = (bd_t *)__res; */ - for (bidx = 0; bidx < (sizeof(baud_table) / sizeof(int)); bidx++) /* if (bd->bi_baudrate == baud_table[bidx]) */ if (CONSOLE_BAUDRATE == baud_table[bidx]) Index: drivers/serial/cpm_uart/cpm_uart_core.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/drivers/serial/cpm_uart/cpm_uart_core.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/drivers/serial/cpm_uart/cpm_uart_core.c (mode:100644) @@ -44,6 +44,7 @@ #include <asm/io.h> #include <asm/irq.h> #include <asm/delay.h> +#include <asm/firmware.h> #if defined(CONFIG_SERIAL_CPM_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) #define SUPPORT_SYSRQ @@ -1051,10 +1052,9 @@ if (options) { uart_parse_options(options, &baud, &parity, &bits, &flow); } else { - bd_t *bd = (bd_t *) __res; - - if (bd->bi_baudrate) - baud = bd->bi_baudrate; + int rate = fw_get_baudrate(); + if (rate) + baud = rate; else baud = 9600; } Index: drivers/serial/cpm_uart/cpm_uart_cpm1.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/drivers/serial/cpm_uart/cpm_uart_cpm1.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/drivers/serial/cpm_uart/cpm_uart_cpm1.c (mode:100644) @@ -39,6 +39,7 @@ #include <asm/io.h> #include <asm/irq.h> +#include <asm/firmware.h> #include <linux/serial_core.h> #include <linux/kernel.h> @@ -215,7 +216,7 @@ (unsigned long)&cpmp->cp_smc[0]; cpm_uart_ports[UART_SMC1].smcp->smc_smcm |= (SMCM_RX | SMCM_TX); cpm_uart_ports[UART_SMC1].smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); - cpm_uart_ports[UART_SMC1].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SMC1].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SMC1; #endif @@ -227,7 +228,7 @@ (unsigned long)&cpmp->cp_smc[1]; cpm_uart_ports[UART_SMC2].smcp->smc_smcm |= (SMCM_RX | SMCM_TX); cpm_uart_ports[UART_SMC2].smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); - cpm_uart_ports[UART_SMC2].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SMC2].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SMC2; #endif @@ -241,7 +242,7 @@ ~(UART_SCCM_TX | UART_SCCM_RX); cpm_uart_ports[UART_SCC1].sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); - cpm_uart_ports[UART_SCC1].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SCC1].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SCC1; #endif @@ -255,7 +256,7 @@ ~(UART_SCCM_TX | UART_SCCM_RX); cpm_uart_ports[UART_SCC2].sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); - cpm_uart_ports[UART_SCC2].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SCC2].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SCC2; #endif @@ -269,7 +270,7 @@ ~(UART_SCCM_TX | UART_SCCM_RX); cpm_uart_ports[UART_SCC3].sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); - cpm_uart_ports[UART_SCC3].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SCC3].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SCC3; #endif @@ -283,7 +284,7 @@ ~(UART_SCCM_TX | UART_SCCM_RX); cpm_uart_ports[UART_SCC4].sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); - cpm_uart_ports[UART_SCC4].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SCC4].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SCC4; #endif return 0; Index: drivers/serial/cpm_uart/cpm_uart_cpm2.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/drivers/serial/cpm_uart/cpm_uart_cpm2.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/drivers/serial/cpm_uart/cpm_uart_cpm2.c (mode:100644) @@ -39,6 +39,7 @@ #include <asm/io.h> #include <asm/irq.h> +#include <asm/firmware.h> #include <linux/serial_core.h> #include <linux/kernel.h> @@ -252,7 +253,7 @@ (unsigned long)&cpm2_immr->im_smc[0]; cpm_uart_ports[UART_SMC1].smcp->smc_smcm |= (SMCM_RX | SMCM_TX); cpm_uart_ports[UART_SMC1].smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); - cpm_uart_ports[UART_SMC1].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SMC1].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SMC1; #endif @@ -264,7 +265,7 @@ (unsigned long)&cpm2_immr->im_smc[1]; cpm_uart_ports[UART_SMC2].smcp->smc_smcm |= (SMCM_RX | SMCM_TX); cpm_uart_ports[UART_SMC2].smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); - cpm_uart_ports[UART_SMC2].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SMC2].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SMC2; #endif @@ -278,7 +279,7 @@ ~(UART_SCCM_TX | UART_SCCM_RX); cpm_uart_ports[UART_SCC1].sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); - cpm_uart_ports[UART_SCC1].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SCC1].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SCC1; #endif @@ -292,7 +293,7 @@ ~(UART_SCCM_TX | UART_SCCM_RX); cpm_uart_ports[UART_SCC2].sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); - cpm_uart_ports[UART_SCC2].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SCC2].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SCC2; #endif @@ -306,7 +307,7 @@ ~(UART_SCCM_TX | UART_SCCM_RX); cpm_uart_ports[UART_SCC3].sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); - cpm_uart_ports[UART_SCC3].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SCC3].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SCC3; #endif @@ -320,7 +321,7 @@ ~(UART_SCCM_TX | UART_SCCM_RX); cpm_uart_ports[UART_SCC4].sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); - cpm_uart_ports[UART_SCC4].port.uartclk = (((bd_t *) __res)->bi_intfreq); + cpm_uart_ports[UART_SCC4].port.uartclk = fw_get_intfreq(); cpm_uart_port_map[cpm_uart_nr++] = UART_SCC4; #endif Index: drivers/serial/mpc52xx_uart.c =================================================================== --- c7d7a187a2125518e655dfeadffd38156239ffc3/drivers/serial/mpc52xx_uart.c (mode:100644) +++ eb4292a8874abcc926f536de90af0bdb001cf12e/drivers/serial/mpc52xx_uart.c (mode:100644) @@ -54,6 +54,7 @@ #include <asm/delay.h> #include <asm/io.h> +#include <asm/firmware.h> #include <asm/mpc52xx.h> #include <asm/mpc52xx_psc.h> @@ -572,14 +573,16 @@ { struct mpc52xx_psc __iomem *psc = PSC(port); unsigned char mr1; + unsigned int fw_baud; /* Read the mode registers */ out_8(&psc->command,MPC52xx_PSC_SEL_MODE_REG_1); mr1 = in_8(&psc->mode); /* CT{U,L}R are write-only ! */ - *baud = __res.bi_baudrate ? - __res.bi_baudrate : CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD; + fw_baud = fw_get_baudrate(); + *baud = fw_baud ? + fw_baud : CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD; /* Parse them */ switch (mr1 & MPC52xx_PSC_MODE_BITS_MASK) { @@ -649,7 +652,7 @@ /* Basic port init. Needed since we use some uart_??? func before * real init for early access */ spin_lock_init(&port->lock); - port->uartclk = __res.bi_ipbfreq / 2; /* Look at CTLR doc */ + port->uartclk = fw_get_ipbfreq() / 2; /* Look at CTLR doc */ port->ops = &mpc52xx_uart_ops; port->mapbase = MPC52xx_PA(MPC52xx_PSCx_OFFSET(co->index+1)); @@ -739,7 +742,7 @@ memset(port, 0x00, sizeof(struct uart_port)); spin_lock_init(&port->lock); - port->uartclk = __res.bi_ipbfreq / 2; /* Look at CTLR doc */ + port->uartclk = fw_get_ipbfreq() / 2; /* Look at CTLR doc */ port->fifosize = 255; /* Should be 512 ! But it can't be */ /* stored in a unsigned char */ port->iotype = UPIO_MEM;