114778585STony Li /*
214778585STony Li  * Copyright (C) 2007 Freescale Semiconductor, Inc.
314778585STony Li  *
414778585STony Li  * Tony Li <tony.li@freescale.com>
514778585STony Li  *
614778585STony Li  * This program is free software; you can redistribute it and/or modify it
714778585STony Li  * under the terms of the GNU General Public License version 2 as
814778585STony Li  * published by the Free Software Foundation;
914778585STony Li  */
1014778585STony Li 
1114778585STony Li #include <common.h>
1214778585STony Li #include <i2c.h>
1314778585STony Li #include <asm/io.h>
1414778585STony Li 
1514778585STony Li #include "pq-mds-pib.h"
1614778585STony Li 
pib_init(void)1714778585STony Li int pib_init(void)
1814778585STony Li {
1914778585STony Li 	u8 val8;
2014778585STony Li 	u8 orig_i2c_bus;
2114778585STony Li 
2214778585STony Li 	/* Switch temporarily to I2C bus #2 */
2314778585STony Li 	orig_i2c_bus = i2c_get_bus_num();
2414778585STony Li 	i2c_set_bus_num(1);
255aa4ad8dSKim Phillips 
265aa4ad8dSKim Phillips 	val8 = 0;
2714778585STony Li #if defined(CONFIG_PCI) && !defined(CONFIG_PCISLAVE)
2814778585STony Li 	/* Assign PIB PMC slot to desired PCI bus */
2914778585STony Li 	i2c_write(0x23, 0x6, 1, &val8, 1);
3014778585STony Li 	i2c_write(0x23, 0x7, 1, &val8, 1);
3114778585STony Li 	val8 = 0xff;
3214778585STony Li 	i2c_write(0x23, 0x2, 1, &val8, 1);
3314778585STony Li 	i2c_write(0x23, 0x3, 1, &val8, 1);
3414778585STony Li 
3514778585STony Li 	val8 = 0;
3614778585STony Li 	i2c_write(0x26, 0x6, 1, &val8, 1);
3714778585STony Li 	val8 = 0x34;
3814778585STony Li 	i2c_write(0x26, 0x7, 1, &val8, 1);
3914778585STony Li #if defined(CONFIG_MPC832XEMDS)
4014778585STony Li 	val8 = 0xf9;            /* PMC2, PMC3 slot to PCI bus */
4114778585STony Li #else
4214778585STony Li 	val8 = 0xf3;		/* PMC1, PMC2, PMC3 slot to PCI bus */
4314778585STony Li #endif
4414778585STony Li 	i2c_write(0x26, 0x2, 1, &val8, 1);
4514778585STony Li 	val8 = 0xff;
4614778585STony Li 	i2c_write(0x26, 0x3, 1, &val8, 1);
4714778585STony Li 
4814778585STony Li 	val8 = 0;
4914778585STony Li 	i2c_write(0x27, 0x6, 1, &val8, 1);
5014778585STony Li 	i2c_write(0x27, 0x7, 1, &val8, 1);
5114778585STony Li 	val8 = 0xff;
5214778585STony Li 	i2c_write(0x27, 0x2, 1, &val8, 1);
5314778585STony Li 	val8 = 0xef;
5414778585STony Li 	i2c_write(0x27, 0x3, 1, &val8, 1);
5514778585STony Li 
5614778585STony Li 	eieio();
5714778585STony Li 
5814778585STony Li #if defined(CONFIG_MPC832XEMDS)
5914778585STony Li 	printf("PCI 32bit bus on PMC2 &PMC3\n");
6014778585STony Li #else
6114778585STony Li 	printf("PCI 32bit bus on PMC1 & PMC2 &PMC3\n");
6214778585STony Li #endif
6314778585STony Li #endif
6414778585STony Li 
6514778585STony Li #if defined(CONFIG_PQ_MDS_PIB_ATM)
66*3759b5b6SYork Sun #if defined(CONFIG_TARGET_MPC8569MDS)
6714778585STony Li 	val8 = 0;
6814778585STony Li 	i2c_write(0x20, 0x6, 1, &val8, 1);
6914778585STony Li 	i2c_write(0x20, 0x7, 1, &val8, 1);
7014778585STony Li 
7114778585STony Li 	val8 = 0xdf;
7214778585STony Li 	i2c_write(0x20, 0x2, 1, &val8, 1);
7314778585STony Li 	val8 = 0xf7;
7414778585STony Li 	i2c_write(0x20, 0x3, 1, &val8, 1);
7514778585STony Li 
7614778585STony Li 	eieio();
7714778585STony Li 
7814778585STony Li 	printf("QOC3 ATM card on PMC0\n");
7914778585STony Li #elif defined(CONFIG_MPC832XEMDS)
80d2646554STony Li 	val8 = 0;
81d2646554STony Li 	i2c_write(0x26, 0x7, 1, &val8, 1);
82d2646554STony Li 	val8 = 0xf7;
83d2646554STony Li 	i2c_write(0x26, 0x3, 1, &val8, 1);
8414778585STony Li 
85d2646554STony Li 	val8 = 0;
86d2646554STony Li 	i2c_write(0x21, 0x6, 1, &val8, 1);
87d2646554STony Li 	i2c_write(0x21, 0x7, 1, &val8, 1);
8814778585STony Li 
89d2646554STony Li 	val8 = 0xdf;
90d2646554STony Li 	i2c_write(0x21, 0x2, 1, &val8, 1);
91d2646554STony Li 	val8 = 0xef;
92d2646554STony Li 	i2c_write(0x21, 0x3, 1, &val8, 1);
9314778585STony Li 
9414778585STony Li 	eieio();
9514778585STony Li 
9614778585STony Li 	printf("QOC3 ATM card on PMC1\n");
9714778585STony Li #endif
9814778585STony Li #endif
9914778585STony Li 	/* Reset to original I2C bus */
10014778585STony Li 	i2c_set_bus_num(orig_i2c_bus);
10114778585STony Li 	return 0;
10214778585STony Li }
103