mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-23 22:14:54 +00:00
driver/mxc_i2c: Move static data structure to global_data
This driver needs a data structure in SRAM before SDRAM is available. This is not alway the case using .data section. Moving this data structure to global_data guarantees it is writable. Signed-off-by: York Sun <yorksun@freescale.com> CC: Troy Kisky <troy.kisky@boundarydevices.com>
This commit is contained in:
parent
8854070784
commit
dec1861be9
2 changed files with 11 additions and 10 deletions
|
@ -22,6 +22,8 @@
|
||||||
#include <i2c.h>
|
#include <i2c.h>
|
||||||
#include <watchdog.h>
|
#include <watchdog.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
#ifdef I2C_QUIRK_REG
|
#ifdef I2C_QUIRK_REG
|
||||||
struct mxc_i2c_regs {
|
struct mxc_i2c_regs {
|
||||||
uint8_t iadr;
|
uint8_t iadr;
|
||||||
|
@ -411,12 +413,6 @@ struct sram_data {
|
||||||
struct i2c_parms i2c_data[3];
|
struct i2c_parms i2c_data[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* For SPL boot some boards need i2c before SDRAM is initialized so force
|
|
||||||
* variables to live in SRAM
|
|
||||||
*/
|
|
||||||
static struct sram_data __attribute__((section(".data"))) srdata;
|
|
||||||
|
|
||||||
static void * const i2c_bases[] = {
|
static void * const i2c_bases[] = {
|
||||||
#if defined(CONFIG_MX25)
|
#if defined(CONFIG_MX25)
|
||||||
(void *)IMX_I2C_BASE,
|
(void *)IMX_I2C_BASE,
|
||||||
|
@ -445,9 +441,10 @@ void *i2c_get_base(struct i2c_adapter *adap)
|
||||||
|
|
||||||
static struct i2c_parms *i2c_get_parms(void *base)
|
static struct i2c_parms *i2c_get_parms(void *base)
|
||||||
{
|
{
|
||||||
|
struct sram_data *srdata = (void *)gd->srdata;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
struct i2c_parms *p = srdata.i2c_data;
|
struct i2c_parms *p = srdata->i2c_data;
|
||||||
while (i < ARRAY_SIZE(srdata.i2c_data)) {
|
while (i < ARRAY_SIZE(srdata->i2c_data)) {
|
||||||
if (p->base == base)
|
if (p->base == base)
|
||||||
return p;
|
return p;
|
||||||
p++;
|
p++;
|
||||||
|
@ -490,8 +487,9 @@ static int mxc_i2c_probe(struct i2c_adapter *adap, uint8_t chip)
|
||||||
void bus_i2c_init(void *base, int speed, int unused,
|
void bus_i2c_init(void *base, int speed, int unused,
|
||||||
int (*idle_bus_fn)(void *p), void *idle_bus_data)
|
int (*idle_bus_fn)(void *p), void *idle_bus_data)
|
||||||
{
|
{
|
||||||
|
struct sram_data *srdata = (void *)gd->srdata;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
struct i2c_parms *p = srdata.i2c_data;
|
struct i2c_parms *p = srdata->i2c_data;
|
||||||
if (!base)
|
if (!base)
|
||||||
return;
|
return;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
@ -505,7 +503,7 @@ void bus_i2c_init(void *base, int speed, int unused,
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
i++;
|
i++;
|
||||||
if (i >= ARRAY_SIZE(srdata.i2c_data))
|
if (i >= ARRAY_SIZE(srdata->i2c_data))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bus_i2c_set_bus_speed(base, speed);
|
bus_i2c_set_bus_speed(base, speed);
|
||||||
|
|
|
@ -79,6 +79,9 @@ typedef struct global_data {
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_SYS_I2C)
|
#if defined(CONFIG_SYS_I2C)
|
||||||
int cur_i2c_bus; /* current used i2c bus */
|
int cur_i2c_bus; /* current used i2c bus */
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SYS_I2C_MXC
|
||||||
|
void *srdata[10];
|
||||||
#endif
|
#endif
|
||||||
unsigned long timebase_h;
|
unsigned long timebase_h;
|
||||||
unsigned long timebase_l;
|
unsigned long timebase_l;
|
||||||
|
|
Loading…
Add table
Reference in a new issue