tizen 2.4 release
[kernel/u-boot-tm1.git] / board / matrix_vision / mvsmr / fpga.c
1 /*
2  * (C) Copyright 2002
3  * Rich Ireland, Enterasys Networks, rireland@enterasys.com.
4  * Keith Outwater, keith_outwater@mvis.com.
5  *
6  * (C) Copyright 2010
7  * Andre Schwarz, Matrix Vision GmbH, andre.schwarz@matrix-vision.de
8  *
9  * See file CREDITS for list of people who contributed to this
10  * project.
11  *
12  * This program is free software; you can redistribute it and/or
13  * modify it under the terms of the GNU General Public License as
14  * published by the Free Software Foundation; either version 2 of
15  * the License, or (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software
24  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
25  * MA 02111-1307 USA
26  *
27  */
28
29 #include <common.h>
30 #include <spartan3.h>
31 #include <command.h>
32 #include <asm/io.h>
33 #include "fpga.h"
34 #include "mvsmr.h"
35
36 Xilinx_Spartan3_Slave_Serial_fns fpga_fns = {
37         fpga_pre_config_fn,
38         fpga_pgm_fn,
39         fpga_clk_fn,
40         fpga_init_fn,
41         fpga_done_fn,
42         fpga_wr_fn,
43         0
44 };
45
46 Xilinx_desc spartan3 = {
47         Xilinx_Spartan2,
48         slave_serial,
49         XILINX_XC3S200_SIZE,
50         (void *) &fpga_fns,
51         0,
52 };
53
54 DECLARE_GLOBAL_DATA_PTR;
55
56 int mvsmr_init_fpga(void)
57 {
58         fpga_init();
59         fpga_add(fpga_xilinx, &spartan3);
60
61         return 1;
62 }
63
64 int fpga_init_fn(int cookie)
65 {
66         struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio *)MPC5XXX_GPIO;
67
68         if (in_be32(&gpio->simple_ival) & FPGA_CONFIG)
69                 return 0;
70
71         return 1;
72 }
73
74 int fpga_done_fn(int cookie)
75 {
76         struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio *)MPC5XXX_GPIO;
77         int result = 0;
78
79         udelay(10);
80         if (in_be32(&gpio->simple_ival) & FPGA_DONE)
81                 result = 1;
82
83         return result;
84 }
85
86 int fpga_pgm_fn(int assert, int flush, int cookie)
87 {
88         struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio *)MPC5XXX_GPIO;
89
90         if (!assert)
91                 setbits_8(&gpio->sint_dvo, FPGA_STATUS);
92         else
93                 clrbits_8(&gpio->sint_dvo, FPGA_STATUS);
94
95         return assert;
96 }
97
98 int fpga_clk_fn(int assert_clk, int flush, int cookie)
99 {
100         struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio *)MPC5XXX_GPIO;
101
102         if (assert_clk)
103                 setbits_be32(&gpio->simple_dvo, FPGA_CCLK);
104         else
105                 clrbits_be32(&gpio->simple_dvo, FPGA_CCLK);
106
107         return assert_clk;
108 }
109
110 int fpga_wr_fn(int assert_write, int flush, int cookie)
111 {
112         struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio *)MPC5XXX_GPIO;
113
114         if (assert_write)
115                 setbits_be32(&gpio->simple_dvo, FPGA_DIN);
116         else
117                 clrbits_be32(&gpio->simple_dvo, FPGA_DIN);
118
119         return assert_write;
120 }
121
122 int fpga_pre_config_fn(int cookie)
123 {
124         struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio *)MPC5XXX_GPIO;
125
126         setbits_8(&gpio->sint_dvo, FPGA_STATUS);
127
128         return 0;
129 }