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