]>
git.ipfire.org Git - thirdparty/u-boot.git/blob - board/esd/dasa_sim/eeprom.c
3 * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
5 * SPDX-License-Identifier: GPL-2.0+
12 #define EEPROM_CAP 0x50000358
13 #define EEPROM_DATA 0x5000035c
16 unsigned int eepromReadLong(int offs
)
22 out_be16((void *)EEPROM_CAP
, offs
);
29 ret
= in_be16((void *)EEPROM_CAP
);
31 if ((ret
& 0x8000) != 0)
35 value
= in_be32((void *)EEPROM_DATA
);
41 unsigned char eepromReadByte(int offs
)
43 unsigned int valueLong
;
46 valueLong
= eepromReadLong(offs
& ~3);
47 ptr
= (unsigned char *)&valueLong
;
53 void eepromWriteLong(int offs
, unsigned int value
)
60 out_be32((void *)EEPROM_DATA
, value
);
61 out_be16((void *)EEPROM_CAP
, 0x8000 + offs
);
66 ret
= in_be16((void *)EEPROM_CAP
);
68 if ((ret
& 0x8000) == 0)
74 void eepromWriteByte(int offs
, unsigned char valueByte
)
76 unsigned int valueLong
;
79 valueLong
= eepromReadLong(offs
& ~3);
80 ptr
= (unsigned char *)&valueLong
;
82 ptr
[offs
& 3] = valueByte
;
84 eepromWriteLong(offs
& ~3, valueLong
);
88 void i2c_read (uchar
*addr
, int alen
, uchar
*buffer
, int len
)
93 /* printf("\naddr=%x alen=%x buffer=%x len=%x", addr[0], addr[1], *(short *)addr, alen, buffer, len); /###* test-only */
98 * Read till lword boundary
100 len2
= 4 - (*(short *)addr
& 0x0003);
101 for (i
=0; i
<len2
; i
++)
103 *buffer
++ = eepromReadByte(ptr
++);
109 len2
= (len
- len2
) >> 2;
110 for (i
=0; i
<len2
; i
++)
112 *(unsigned int *)buffer
= eepromReadLong(ptr
);
120 len2
= (*(short *)addr
+ len
) & 0x0003;
121 for (i
=0; i
<len2
; i
++)
123 *buffer
++ = eepromReadByte(ptr
++);
127 void i2c_write (uchar
*addr
, int alen
, uchar
*buffer
, int len
)
132 /* printf("\naddr=%x alen=%x buffer=%x len=%x", addr[0], addr[1], *(short *)addr, alen, buffer, len); /###* test-only */
134 ptr
= *(short *)addr
;
137 * Write till lword boundary
139 len2
= 4 - (*(short *)addr
& 0x0003);
140 for (i
=0; i
<len2
; i
++)
142 eepromWriteByte(ptr
++, *buffer
++);
148 len2
= (len
- len2
) >> 2;
149 for (i
=0; i
<len2
; i
++)
151 eepromWriteLong(ptr
, *(unsigned int *)buffer
);
159 len2
= (*(short *)addr
+ len
) & 0x0003;
160 for (i
=0; i
<len2
; i
++)
162 eepromWriteByte(ptr
++, *buffer
++);