Commit ee3b1931 authored by Mark A. Greer's avatar Mark A. Greer Committed by Linus Torvalds

[PATCH] ppc32: mv64x60 updates

This patch briges the mv64x60 related code up to the latest that I have.

It:
- adds MPSC support to some ppc bootwrapper files
- adds an erratum workaround for the mv64460
- changes some platform_data related structure names
- cleans up a bunch of whitespace
Signed-off-by: default avatarMark A. Greer <mgreer@mvista.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 58b613dc
...@@ -59,7 +59,8 @@ void _vprintk(void(*putc)(const char), const char *fmt0, va_list ap); ...@@ -59,7 +59,8 @@ void _vprintk(void(*putc)(const char), const char *fmt0, va_list ap);
unsigned char *ISA_io = NULL; unsigned char *ISA_io = NULL;
#if defined(CONFIG_SERIAL_CPM_CONSOLE) || defined(CONFIG_SERIAL_8250_CONSOLE) \ #if defined(CONFIG_SERIAL_CPM_CONSOLE) || defined(CONFIG_SERIAL_8250_CONSOLE) \
|| defined(CONFIG_SERIAL_MPC52xx_CONSOLE) || defined(CONFIG_SERIAL_MPC52xx_CONSOLE) \
|| defined(CONFIG_SERIAL_MPSC_CONSOLE)
extern unsigned long com_port; extern unsigned long com_port;
extern int serial_tstc(unsigned long com_port); extern int serial_tstc(unsigned long com_port);
...@@ -81,7 +82,8 @@ void exit(void) ...@@ -81,7 +82,8 @@ void exit(void)
int tstc(void) int tstc(void)
{ {
#if defined(CONFIG_SERIAL_CPM_CONSOLE) || defined(CONFIG_SERIAL_8250_CONSOLE) \ #if defined(CONFIG_SERIAL_CPM_CONSOLE) || defined(CONFIG_SERIAL_8250_CONSOLE) \
|| defined(CONFIG_SERIAL_MPC52xx_CONSOLE) || defined(CONFIG_SERIAL_MPC52xx_CONSOLE) \
|| defined(CONFIG_SERIAL_MPSC_CONSOLE)
if(keyb_present) if(keyb_present)
return (CRT_tstc() || serial_tstc(com_port)); return (CRT_tstc() || serial_tstc(com_port));
else else
...@@ -95,7 +97,8 @@ int getc(void) ...@@ -95,7 +97,8 @@ int getc(void)
{ {
while (1) { while (1) {
#if defined(CONFIG_SERIAL_CPM_CONSOLE) || defined(CONFIG_SERIAL_8250_CONSOLE) \ #if defined(CONFIG_SERIAL_CPM_CONSOLE) || defined(CONFIG_SERIAL_8250_CONSOLE) \
|| defined(CONFIG_SERIAL_MPC52xx_CONSOLE) || defined(CONFIG_SERIAL_MPC52xx_CONSOLE) \
|| defined(CONFIG_SERIAL_MPSC_CONSOLE)
if (serial_tstc(com_port)) if (serial_tstc(com_port))
return (serial_getc(com_port)); return (serial_getc(com_port));
#endif /* serial console */ #endif /* serial console */
...@@ -111,7 +114,8 @@ putc(const char c) ...@@ -111,7 +114,8 @@ putc(const char c)
int x,y; int x,y;
#if defined(CONFIG_SERIAL_CPM_CONSOLE) || defined(CONFIG_SERIAL_8250_CONSOLE) \ #if defined(CONFIG_SERIAL_CPM_CONSOLE) || defined(CONFIG_SERIAL_8250_CONSOLE) \
|| defined(CONFIG_SERIAL_MPC52xx_CONSOLE) || defined(CONFIG_SERIAL_MPC52xx_CONSOLE) \
|| defined(CONFIG_SERIAL_MPSC_CONSOLE)
serial_putc(com_port, c); serial_putc(com_port, c);
if ( c == '\n' ) if ( c == '\n' )
serial_putc(com_port, '\r'); serial_putc(com_port, '\r');
...@@ -159,7 +163,8 @@ void puts(const char *s) ...@@ -159,7 +163,8 @@ void puts(const char *s)
while ( ( c = *s++ ) != '\0' ) { while ( ( c = *s++ ) != '\0' ) {
#if defined(CONFIG_SERIAL_CPM_CONSOLE) || defined(CONFIG_SERIAL_8250_CONSOLE) \ #if defined(CONFIG_SERIAL_CPM_CONSOLE) || defined(CONFIG_SERIAL_8250_CONSOLE) \
|| defined(CONFIG_SERIAL_MPC52xx_CONSOLE) || defined(CONFIG_SERIAL_MPC52xx_CONSOLE) \
|| defined(CONFIG_SERIAL_MPSC_CONSOLE)
serial_putc(com_port, c); serial_putc(com_port, c);
if ( c == '\n' ) serial_putc(com_port, '\r'); if ( c == '\n' ) serial_putc(com_port, '\r');
#endif /* serial console */ #endif /* serial console */
......
...@@ -50,7 +50,8 @@ ...@@ -50,7 +50,8 @@
*/ */
#if (defined(CONFIG_SERIAL_8250_CONSOLE) \ #if (defined(CONFIG_SERIAL_8250_CONSOLE) \
|| defined(CONFIG_VGA_CONSOLE) \ || defined(CONFIG_VGA_CONSOLE) \
|| defined(CONFIG_SERIAL_MPC52xx_CONSOLE)) \ || defined(CONFIG_SERIAL_MPC52xx_CONSOLE) \
|| defined(CONFIG_SERIAL_MPSC_CONSOLE)) \
&& !defined(CONFIG_GEMINI) && !defined(CONFIG_GEMINI)
#define INTERACTIVE_CONSOLE 1 #define INTERACTIVE_CONSOLE 1
#endif #endif
...@@ -98,7 +99,7 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum) ...@@ -98,7 +99,7 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum)
struct bi_record *rec; struct bi_record *rec;
unsigned long initrd_loc = 0, TotalMemory = 0; unsigned long initrd_loc = 0, TotalMemory = 0;
#ifdef CONFIG_SERIAL_8250_CONSOLE #if defined(CONFIG_SERIAL_8250_CONSOLE) || defined(CONFIG_SERIAL_MPSC_CONSOLE)
com_port = serial_init(0, NULL); com_port = serial_init(0, NULL);
#endif #endif
......
...@@ -6,12 +6,10 @@ ...@@ -6,12 +6,10 @@
* *
* Author: Mark A. Greer <mgreer@mvista.com> * Author: Mark A. Greer <mgreer@mvista.com>
* *
* Copyright 2001 MontaVista Software Inc. * 2001 (c) MontaVista Software, Inc. This file is licensed under
* * the terms of the GNU General Public License version 2. This program
* This program is free software; you can redistribute it and/or modify it * is licensed "as is" without any warranty of any kind, whether express
* under the terms of the GNU General Public License as published by the * or implied.
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*/ */
/* This code assumes that the data cache has been disabled (L1, L2, L3). */ /* This code assumes that the data cache has been disabled (L1, L2, L3). */
......
...@@ -369,7 +369,8 @@ mv64360_register_hdlrs(void) ...@@ -369,7 +369,8 @@ mv64360_register_hdlrs(void)
u32 mask; u32 mask;
int rc; int rc;
/* Register CPU interface error interrupt handler */ /* Clear old errors and register CPU interface error intr handler */
mv64x60_write(&bh, MV64x60_CPU_ERR_CAUSE, 0);
if ((rc = request_irq(MV64x60_IRQ_CPU_ERR, if ((rc = request_irq(MV64x60_IRQ_CPU_ERR,
mv64360_cpu_error_int_handler, SA_INTERRUPT, CPU_INTR_STR, 0))) mv64360_cpu_error_int_handler, SA_INTERRUPT, CPU_INTR_STR, 0)))
printk(KERN_WARNING "Can't register cpu error handler: %d", rc); printk(KERN_WARNING "Can't register cpu error handler: %d", rc);
...@@ -377,7 +378,8 @@ mv64360_register_hdlrs(void) ...@@ -377,7 +378,8 @@ mv64360_register_hdlrs(void)
mv64x60_write(&bh, MV64x60_CPU_ERR_MASK, 0); mv64x60_write(&bh, MV64x60_CPU_ERR_MASK, 0);
mv64x60_write(&bh, MV64x60_CPU_ERR_MASK, 0x000000ff); mv64x60_write(&bh, MV64x60_CPU_ERR_MASK, 0x000000ff);
/* Register internal SRAM error interrupt handler */ /* Clear old errors and register internal SRAM error intr handler */
mv64x60_write(&bh, MV64360_SRAM_ERR_CAUSE, 0);
if ((rc = request_irq(MV64360_IRQ_SRAM_PAR_ERR, if ((rc = request_irq(MV64360_IRQ_SRAM_PAR_ERR,
mv64360_sram_error_int_handler,SA_INTERRUPT,SRAM_INTR_STR, 0))) mv64360_sram_error_int_handler,SA_INTERRUPT,SRAM_INTR_STR, 0)))
printk(KERN_WARNING "Can't register SRAM error handler: %d",rc); printk(KERN_WARNING "Can't register SRAM error handler: %d",rc);
...@@ -393,7 +395,8 @@ mv64360_register_hdlrs(void) ...@@ -393,7 +395,8 @@ mv64360_register_hdlrs(void)
(mv64x60_get_bridge_rev() > 1)) (mv64x60_get_bridge_rev() > 1))
mask |= 0x1; /* enable DPErr on 64460 */ mask |= 0x1; /* enable DPErr on 64460 */
/* Register PCI 0 error interrupt handler */ /* Clear old errors and register PCI 0 error intr handler */
mv64x60_write(&bh, MV64x60_PCI0_ERR_CAUSE, 0);
if ((rc = request_irq(MV64360_IRQ_PCI0, mv64360_pci_error_int_handler, if ((rc = request_irq(MV64360_IRQ_PCI0, mv64360_pci_error_int_handler,
SA_INTERRUPT, PCI0_INTR_STR, (void *)0))) SA_INTERRUPT, PCI0_INTR_STR, (void *)0)))
printk(KERN_WARNING "Can't register pci 0 error handler: %d", printk(KERN_WARNING "Can't register pci 0 error handler: %d",
...@@ -402,7 +405,8 @@ mv64360_register_hdlrs(void) ...@@ -402,7 +405,8 @@ mv64360_register_hdlrs(void)
mv64x60_write(&bh, MV64x60_PCI0_ERR_MASK, 0); mv64x60_write(&bh, MV64x60_PCI0_ERR_MASK, 0);
mv64x60_write(&bh, MV64x60_PCI0_ERR_MASK, mask); mv64x60_write(&bh, MV64x60_PCI0_ERR_MASK, mask);
/* Register PCI 1 error interrupt handler */ /* Clear old errors and register PCI 1 error intr handler */
mv64x60_write(&bh, MV64x60_PCI1_ERR_CAUSE, 0);
if ((rc = request_irq(MV64360_IRQ_PCI1, mv64360_pci_error_int_handler, if ((rc = request_irq(MV64360_IRQ_PCI1, mv64360_pci_error_int_handler,
SA_INTERRUPT, PCI1_INTR_STR, (void *)1))) SA_INTERRUPT, PCI1_INTR_STR, (void *)1)))
printk(KERN_WARNING "Can't register pci 1 error handler: %d", printk(KERN_WARNING "Can't register pci 1 error handler: %d",
......
...@@ -34,8 +34,8 @@ ...@@ -34,8 +34,8 @@
u8 mv64x60_pci_exclude_bridge = 1; u8 mv64x60_pci_exclude_bridge = 1;
spinlock_t mv64x60_lock; /* Only really used by PIC code once init done */ spinlock_t mv64x60_lock; /* Only really used by PIC code once init done */
static u32 mv64x60_bridge_pbase = 0; static phys_addr_t mv64x60_bridge_pbase = 0;
static u32 mv64x60_bridge_vbase = 0; static void *mv64x60_bridge_vbase = 0;
static u32 mv64x60_bridge_type = MV64x60_TYPE_INVALID; static u32 mv64x60_bridge_type = MV64x60_TYPE_INVALID;
static u32 mv64x60_bridge_rev = 0; static u32 mv64x60_bridge_rev = 0;
...@@ -160,7 +160,7 @@ static struct mv64x60_chip_info mv64460_ci __initdata = { /* MV64460 */ ...@@ -160,7 +160,7 @@ static struct mv64x60_chip_info mv64460_ci __initdata = { /* MV64460 */
***************************************************************************** *****************************************************************************
*/ */
#ifdef CONFIG_SERIAL_MPSC #ifdef CONFIG_SERIAL_MPSC
static struct mpsc_shared_pd_dd mv64x60_mpsc_shared_pd_dd = { static struct mpsc_shared_pdata mv64x60_mpsc_shared_pdata = {
.mrr_val = 0x3ffffe38, .mrr_val = 0x3ffffe38,
.rcrr_val = 0, .rcrr_val = 0,
.tcrr_val = 0, .tcrr_val = 0,
...@@ -192,11 +192,11 @@ static struct platform_device mpsc_shared_device = { /* Shared device */ ...@@ -192,11 +192,11 @@ static struct platform_device mpsc_shared_device = { /* Shared device */
.num_resources = ARRAY_SIZE(mv64x60_mpsc_shared_resources), .num_resources = ARRAY_SIZE(mv64x60_mpsc_shared_resources),
.resource = mv64x60_mpsc_shared_resources, .resource = mv64x60_mpsc_shared_resources,
.dev = { .dev = {
.driver_data = &mv64x60_mpsc_shared_pd_dd, .platform_data = &mv64x60_mpsc_shared_pdata,
}, },
}; };
static struct mpsc_pd_dd mv64x60_mpsc0_pd_dd = { static struct mpsc_pdata mv64x60_mpsc0_pdata = {
.mirror_regs = 0, .mirror_regs = 0,
.cache_mgmt = 0, .cache_mgmt = 0,
.max_idle = 0, .max_idle = 0,
...@@ -248,11 +248,11 @@ static struct platform_device mpsc0_device = { ...@@ -248,11 +248,11 @@ static struct platform_device mpsc0_device = {
.num_resources = ARRAY_SIZE(mv64x60_mpsc0_resources), .num_resources = ARRAY_SIZE(mv64x60_mpsc0_resources),
.resource = mv64x60_mpsc0_resources, .resource = mv64x60_mpsc0_resources,
.dev = { .dev = {
.driver_data = &mv64x60_mpsc0_pd_dd, .platform_data = &mv64x60_mpsc0_pdata,
}, },
}; };
static struct mpsc_pd_dd mv64x60_mpsc1_pd_dd = { static struct mpsc_pdata mv64x60_mpsc1_pdata = {
.mirror_regs = 0, .mirror_regs = 0,
.cache_mgmt = 0, .cache_mgmt = 0,
.max_idle = 0, .max_idle = 0,
...@@ -305,7 +305,130 @@ static struct platform_device mpsc1_device = { ...@@ -305,7 +305,130 @@ static struct platform_device mpsc1_device = {
.num_resources = ARRAY_SIZE(mv64x60_mpsc1_resources), .num_resources = ARRAY_SIZE(mv64x60_mpsc1_resources),
.resource = mv64x60_mpsc1_resources, .resource = mv64x60_mpsc1_resources,
.dev = { .dev = {
.driver_data = &mv64x60_mpsc1_pd_dd, .platform_data = &mv64x60_mpsc1_pdata,
},
};
#endif
#ifdef CONFIG_MV643XX_ETH
static struct resource mv64x60_eth_shared_resources[] = {
[0] = {
.name = "ethernet shared base",
.start = MV64340_ETH_SHARED_REGS,
.end = MV64340_ETH_SHARED_REGS +
MV64340_ETH_SHARED_REGS_SIZE - 1,
.flags = IORESOURCE_MEM,
},
};
static struct platform_device mv64x60_eth_shared_device = {
.name = MV64XXX_ETH_SHARED_NAME,
.id = 0,
.num_resources = ARRAY_SIZE(mv64x60_eth_shared_resources),
.resource = mv64x60_eth_shared_resources,
};
#ifdef CONFIG_MV643XX_ETH_0
static struct resource mv64x60_eth0_resources[] = {
[0] = {
.name = "eth0 irq",
.start = MV64x60_IRQ_ETH_0,
.end = MV64x60_IRQ_ETH_0,
.flags = IORESOURCE_IRQ,
},
};
static struct mv64xxx_eth_platform_data eth0_pd;
static struct platform_device eth0_device = {
.name = MV64XXX_ETH_NAME,
.id = 0,
.num_resources = ARRAY_SIZE(mv64x60_eth0_resources),
.resource = mv64x60_eth0_resources,
.dev = {
.platform_data = &eth0_pd,
},
};
#endif
#ifdef CONFIG_MV643XX_ETH_1
static struct resource mv64x60_eth1_resources[] = {
[0] = {
.name = "eth1 irq",
.start = MV64x60_IRQ_ETH_1,
.end = MV64x60_IRQ_ETH_1,
.flags = IORESOURCE_IRQ,
},
};
static struct mv64xxx_eth_platform_data eth1_pd;
static struct platform_device eth1_device = {
.name = MV64XXX_ETH_NAME,
.id = 1,
.num_resources = ARRAY_SIZE(mv64x60_eth1_resources),
.resource = mv64x60_eth1_resources,
.dev = {
.platform_data = &eth1_pd,
},
};
#endif
#ifdef CONFIG_MV643XX_ETH_2
static struct resource mv64x60_eth2_resources[] = {
[0] = {
.name = "eth2 irq",
.start = MV64x60_IRQ_ETH_2,
.end = MV64x60_IRQ_ETH_2,
.flags = IORESOURCE_IRQ,
},
};
static struct mv64xxx_eth_platform_data eth2_pd;
static struct platform_device eth2_device = {
.name = MV64XXX_ETH_NAME,
.id = 2,
.num_resources = ARRAY_SIZE(mv64x60_eth2_resources),
.resource = mv64x60_eth2_resources,
.dev = {
.platform_data = &eth2_pd,
},
};
#endif
#endif
#ifdef CONFIG_I2C_MV64XXX
static struct mv64xxx_i2c_pdata mv64xxx_i2c_pdata = {
.freq_m = 8,
.freq_n = 3,
.timeout = 1000, /* Default timeout of 1 second */
.retries = 1,
};
static struct resource mv64xxx_i2c_resources[] = {
/* Do not change the order of the IORESOURCE_MEM resources */
[0] = {
.name = "mv64xxx i2c base",
.start = MV64XXX_I2C_OFFSET,
.end = MV64XXX_I2C_OFFSET + MV64XXX_I2C_REG_BLOCK_SIZE - 1,
.flags = IORESOURCE_MEM,
},
[1] = {
.name = "mv64xxx i2c irq",
.start = MV64x60_IRQ_I2C,
.end = MV64x60_IRQ_I2C,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device i2c_device = {
.name = MV64XXX_I2C_CTLR_NAME,
.id = 0,
.num_resources = ARRAY_SIZE(mv64xxx_i2c_resources),
.resource = mv64xxx_i2c_resources,
.dev = {
.platform_data = &mv64xxx_i2c_pdata,
}, },
}; };
#endif #endif
...@@ -316,6 +439,21 @@ static struct platform_device *mv64x60_pd_devs[] __initdata = { ...@@ -316,6 +439,21 @@ static struct platform_device *mv64x60_pd_devs[] __initdata = {
&mpsc0_device, &mpsc0_device,
&mpsc1_device, &mpsc1_device,
#endif #endif
#ifdef CONFIG_MV643XX_ETH
&mv64x60_eth_shared_device,
#endif
#ifdef CONFIG_MV643XX_ETH_0
&eth0_device,
#endif
#ifdef CONFIG_MV643XX_ETH_1
&eth1_device,
#endif
#ifdef CONFIG_MV643XX_ETH_2
&eth2_device,
#endif
#ifdef CONFIG_I2C_MV64XXX
&i2c_device,
#endif
}; };
/* /*
...@@ -344,7 +482,7 @@ mv64x60_init(struct mv64x60_handle *bh, struct mv64x60_setup_info *si) ...@@ -344,7 +482,7 @@ mv64x60_init(struct mv64x60_handle *bh, struct mv64x60_setup_info *si)
mv64x60_early_init(bh, si); mv64x60_early_init(bh, si);
if (mv64x60_get_type(bh) || mv64x60_setup_for_chip(bh)) { if (mv64x60_get_type(bh) || mv64x60_setup_for_chip(bh)) {
iounmap((void *)bh->v_base); iounmap(bh->v_base);
bh->v_base = 0; bh->v_base = 0;
if (ppc_md.progress) if (ppc_md.progress)
ppc_md.progress("mv64x60_init: Can't determine chip",0); ppc_md.progress("mv64x60_init: Can't determine chip",0);
...@@ -416,7 +554,7 @@ mv64x60_early_init(struct mv64x60_handle *bh, struct mv64x60_setup_info *si) ...@@ -416,7 +554,7 @@ mv64x60_early_init(struct mv64x60_handle *bh, struct mv64x60_setup_info *si)
memset(bh, 0, sizeof(*bh)); memset(bh, 0, sizeof(*bh));
bh->p_base = si->phys_reg_base; bh->p_base = si->phys_reg_base;
bh->v_base = (u32)ioremap(bh->p_base, MV64x60_INTERNAL_SPACE_SIZE); bh->v_base = ioremap(bh->p_base, MV64x60_INTERNAL_SPACE_SIZE);
mv64x60_bridge_pbase = bh->p_base; mv64x60_bridge_pbase = bh->p_base;
mv64x60_bridge_vbase = bh->v_base; mv64x60_bridge_vbase = bh->v_base;
...@@ -645,7 +783,7 @@ mv64x60_mask(u32 val, u32 num_bits) ...@@ -645,7 +783,7 @@ mv64x60_mask(u32 val, u32 num_bits)
} }
/* /*
* mv64x60_mask_shift_left() * mv64x60_shift_left()
* *
* Take the low-order 'num_bits' of 'val', shift left to align at bit 31 (MSB). * Take the low-order 'num_bits' of 'val', shift left to align at bit 31 (MSB).
*/ */
...@@ -702,7 +840,7 @@ mv64x60_get_type(struct mv64x60_handle *bh) ...@@ -702,7 +840,7 @@ mv64x60_get_type(struct mv64x60_handle *bh)
/* Get the revision of the chip */ /* Get the revision of the chip */
early_read_config_word(&hose, 0, PCI_DEVFN(0, 0), PCI_CLASS_REVISION, early_read_config_word(&hose, 0, PCI_DEVFN(0, 0), PCI_CLASS_REVISION,
&val); &val);
bh->rev = (u32) (val & 0xff); bh->rev = (u32)(val & 0xff);
/* Figure out the type of Marvell bridge it is */ /* Figure out the type of Marvell bridge it is */
early_read_config_word(&hose, 0, PCI_DEVFN(0, 0), PCI_DEVICE_ID, &val); early_read_config_word(&hose, 0, PCI_DEVFN(0, 0), PCI_DEVICE_ID, &val);
...@@ -790,7 +928,7 @@ mv64x60_setup_for_chip(struct mv64x60_handle *bh) ...@@ -790,7 +928,7 @@ mv64x60_setup_for_chip(struct mv64x60_handle *bh)
* *
* Return the virtual address of the bridge's registers. * Return the virtual address of the bridge's registers.
*/ */
u32 void *
mv64x60_get_bridge_vbase(void) mv64x60_get_bridge_vbase(void)
{ {
return mv64x60_bridge_vbase; return mv64x60_bridge_vbase;
...@@ -842,7 +980,7 @@ mv64x60_get_mem_size(u32 bridge_base, u32 chip_type) ...@@ -842,7 +980,7 @@ mv64x60_get_mem_size(u32 bridge_base, u32 chip_type)
memset(&bh, 0, sizeof(bh)); memset(&bh, 0, sizeof(bh));
bh.type = chip_type; bh.type = chip_type;
bh.v_base = bridge_base; bh.v_base = (void *)bridge_base;
if (!mv64x60_setup_for_chip(&bh)) { if (!mv64x60_setup_for_chip(&bh)) {
mv64x60_get_mem_windows(&bh, mem_windows); mv64x60_get_mem_windows(&bh, mem_windows);
...@@ -1117,7 +1255,7 @@ mv64x60_config_resources(struct pci_controller *hose, ...@@ -1117,7 +1255,7 @@ mv64x60_config_resources(struct pci_controller *hose,
IORESOURCE_IO, s[hose->index][0]); IORESOURCE_IO, s[hose->index][0]);
hose->io_space.start = pi->pci_io.pci_base_lo; hose->io_space.start = pi->pci_io.pci_base_lo;
hose->io_space.end = pi->pci_io.pci_base_lo + pi->pci_io.size-1; hose->io_space.end = pi->pci_io.pci_base_lo + pi->pci_io.size-1;
hose->io_base_phys = (ulong)pi->pci_io.cpu_base; hose->io_base_phys = pi->pci_io.cpu_base;
hose->io_base_virt = (void *)isa_io_base; hose->io_base_virt = (void *)isa_io_base;
} }
...@@ -1638,10 +1776,10 @@ gt64260a_chip_specific_init(struct mv64x60_handle *bh, ...@@ -1638,10 +1776,10 @@ gt64260a_chip_specific_init(struct mv64x60_handle *bh,
mv64x60_clr_bits(bh, 0xf2c0, (1<< 6) | (1<<14) | (1<<22) | (1<<30)); mv64x60_clr_bits(bh, 0xf2c0, (1<< 6) | (1<<14) | (1<<22) | (1<<30));
#ifdef CONFIG_SERIAL_MPSC #ifdef CONFIG_SERIAL_MPSC
mv64x60_mpsc0_pd_dd.mirror_regs = 1; mv64x60_mpsc0_pdata.mirror_regs = 1;
mv64x60_mpsc0_pd_dd.cache_mgmt = 1; mv64x60_mpsc0_pdata.cache_mgmt = 1;
mv64x60_mpsc1_pd_dd.mirror_regs = 1; mv64x60_mpsc1_pdata.mirror_regs = 1;
mv64x60_mpsc1_pd_dd.cache_mgmt = 1; mv64x60_mpsc1_pdata.cache_mgmt = 1;
if ((r = platform_get_resource(&mpsc1_device, IORESOURCE_IRQ, 0)) if ((r = platform_get_resource(&mpsc1_device, IORESOURCE_IRQ, 0))
!= NULL) { != NULL) {
...@@ -1720,8 +1858,8 @@ gt64260b_chip_specific_init(struct mv64x60_handle *bh, ...@@ -1720,8 +1858,8 @@ gt64260b_chip_specific_init(struct mv64x60_handle *bh,
* can't access cache coherent regions. However, testing has shown * can't access cache coherent regions. However, testing has shown
* that the MPSC, at least, still has this bug. * that the MPSC, at least, still has this bug.
*/ */
mv64x60_mpsc0_pd_dd.cache_mgmt = 1; mv64x60_mpsc0_pdata.cache_mgmt = 1;
mv64x60_mpsc1_pd_dd.cache_mgmt = 1; mv64x60_mpsc1_pdata.cache_mgmt = 1;
if ((r = platform_get_resource(&mpsc1_device, IORESOURCE_IRQ, 0)) if ((r = platform_get_resource(&mpsc1_device, IORESOURCE_IRQ, 0))
!= NULL) { != NULL) {
...@@ -2228,10 +2366,10 @@ mv64360_chip_specific_init(struct mv64x60_handle *bh, ...@@ -2228,10 +2366,10 @@ mv64360_chip_specific_init(struct mv64x60_handle *bh,
struct mv64x60_setup_info *si) struct mv64x60_setup_info *si)
{ {
#ifdef CONFIG_SERIAL_MPSC #ifdef CONFIG_SERIAL_MPSC
mv64x60_mpsc0_pd_dd.brg_can_tune = 1; mv64x60_mpsc0_pdata.brg_can_tune = 1;
mv64x60_mpsc0_pd_dd.cache_mgmt = 1; mv64x60_mpsc0_pdata.cache_mgmt = 1;
mv64x60_mpsc1_pd_dd.brg_can_tune = 1; mv64x60_mpsc1_pdata.brg_can_tune = 1;
mv64x60_mpsc1_pd_dd.cache_mgmt = 1; mv64x60_mpsc1_pdata.cache_mgmt = 1;
#endif #endif
return; return;
...@@ -2247,8 +2385,8 @@ mv64460_chip_specific_init(struct mv64x60_handle *bh, ...@@ -2247,8 +2385,8 @@ mv64460_chip_specific_init(struct mv64x60_handle *bh,
struct mv64x60_setup_info *si) struct mv64x60_setup_info *si)
{ {
#ifdef CONFIG_SERIAL_MPSC #ifdef CONFIG_SERIAL_MPSC
mv64x60_mpsc0_pd_dd.brg_can_tune = 1; mv64x60_mpsc0_pdata.brg_can_tune = 1;
mv64x60_mpsc1_pd_dd.brg_can_tune = 1; mv64x60_mpsc1_pdata.brg_can_tune = 1;
#endif #endif
return; return;
} }
...@@ -225,11 +225,11 @@ struct mv64x60_chip_info { ...@@ -225,11 +225,11 @@ struct mv64x60_chip_info {
struct mv64x60_handle { struct mv64x60_handle {
u32 type; /* type of bridge */ u32 type; /* type of bridge */
u32 rev; /* revision of bridge */ u32 rev; /* revision of bridge */
u32 v_base; /* virtual base addr of bridge regs */ void *v_base; /* virtual base addr of bridge regs */
u32 p_base; /* physical base addr of bridge regs */ phys_addr_t p_base; /* physical base addr of bridge regs */
u32 pci_mode_a; /* pci bus 0 mode: conventional pci, pci-x */ u32 pci_mode_a; /* pci 0 mode: conventional pci, pci-x*/
u32 pci_mode_b; /* pci bus 1 mode: conventional pci, pci-x */ u32 pci_mode_b; /* pci 1 mode: conventional pci, pci-x*/
u32 io_base_a; /* vaddr of pci 0's I/O space */ u32 io_base_a; /* vaddr of pci 0's I/O space */
u32 io_base_b; /* vaddr of pci 1's I/O space */ u32 io_base_b; /* vaddr of pci 1's I/O space */
...@@ -247,7 +247,7 @@ mv64x60_write(struct mv64x60_handle *bh, u32 offset, u32 val) { ...@@ -247,7 +247,7 @@ mv64x60_write(struct mv64x60_handle *bh, u32 offset, u32 val) {
ulong flags; ulong flags;
spin_lock_irqsave(&mv64x60_lock, flags); spin_lock_irqsave(&mv64x60_lock, flags);
out_le32((volatile u32 *)(bh->v_base + offset), val); out_le32(bh->v_base + offset, val);
spin_unlock_irqrestore(&mv64x60_lock, flags); spin_unlock_irqrestore(&mv64x60_lock, flags);
} }
...@@ -256,7 +256,7 @@ mv64x60_read(struct mv64x60_handle *bh, u32 offset) { ...@@ -256,7 +256,7 @@ mv64x60_read(struct mv64x60_handle *bh, u32 offset) {
ulong flags; ulong flags;
spin_lock_irqsave(&mv64x60_lock, flags); spin_lock_irqsave(&mv64x60_lock, flags);
return in_le32((volatile u32 *)(bh->v_base + offset)); return in_le32(bh->v_base + offset);
spin_unlock_irqrestore(&mv64x60_lock, flags); spin_unlock_irqrestore(&mv64x60_lock, flags);
} }
...@@ -282,11 +282,11 @@ int mv64x60_init(struct mv64x60_handle *bh, struct mv64x60_setup_info *si); ...@@ -282,11 +282,11 @@ int mv64x60_init(struct mv64x60_handle *bh, struct mv64x60_setup_info *si);
u32 mv64x60_get_mem_size(u32 bridge_base, u32 chip_type); u32 mv64x60_get_mem_size(u32 bridge_base, u32 chip_type);
void mv64x60_early_init(struct mv64x60_handle *bh, void mv64x60_early_init(struct mv64x60_handle *bh,
struct mv64x60_setup_info *si); struct mv64x60_setup_info *si);
void mv64x60_alloc_hose(struct mv64x60_handle *bh, u32 cfg_addr, u32 cfg_data, void mv64x60_alloc_hose(struct mv64x60_handle *bh, u32 cfg_addr,
struct pci_controller **hose); u32 cfg_data, struct pci_controller **hose);
int mv64x60_get_type(struct mv64x60_handle *bh); int mv64x60_get_type(struct mv64x60_handle *bh);
int mv64x60_setup_for_chip(struct mv64x60_handle *bh); int mv64x60_setup_for_chip(struct mv64x60_handle *bh);
u32 mv64x60_get_bridge_vbase(void); void *mv64x60_get_bridge_vbase(void);
u32 mv64x60_get_bridge_type(void); u32 mv64x60_get_bridge_type(void);
u32 mv64x60_get_bridge_rev(void); u32 mv64x60_get_bridge_rev(void);
void mv64x60_get_mem_windows(struct mv64x60_handle *bh, void mv64x60_get_mem_windows(struct mv64x60_handle *bh,
......
...@@ -1048,7 +1048,7 @@ extern void mv64340_irq_init(unsigned int base); ...@@ -1048,7 +1048,7 @@ extern void mv64340_irq_init(unsigned int base);
#define MPSC_ROUTING_REG_BLOCK_SIZE 0x000c #define MPSC_ROUTING_REG_BLOCK_SIZE 0x000c
#define MPSC_SDMA_INTR_REG_BLOCK_SIZE 0x0084 #define MPSC_SDMA_INTR_REG_BLOCK_SIZE 0x0084
struct mpsc_shared_pd_dd { struct mpsc_shared_pdata {
u32 mrr_val; u32 mrr_val;
u32 rcrr_val; u32 rcrr_val;
u32 tcrr_val; u32 tcrr_val;
...@@ -1067,7 +1067,7 @@ struct mpsc_shared_pd_dd { ...@@ -1067,7 +1067,7 @@ struct mpsc_shared_pd_dd {
#define MPSC_SDMA_REG_BLOCK_SIZE 0x0c18 #define MPSC_SDMA_REG_BLOCK_SIZE 0x0c18
#define MPSC_BRG_REG_BLOCK_SIZE 0x0008 #define MPSC_BRG_REG_BLOCK_SIZE 0x0008
struct mpsc_pd_dd { struct mpsc_pdata {
u8 mirror_regs; u8 mirror_regs;
u8 cache_mgmt; u8 cache_mgmt;
u8 max_idle; u8 max_idle;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment