Compare commits
11 Commits
v2017.05-r
...
v2017.05
| Author | SHA1 | Date | |
|---|---|---|---|
| 64c4ffa9fa | |||
| 169b50efe2 | |||
| f59a3b21f6 | |||
| d27e35f256 | |||
| 05d887b461 | |||
| 1275a44e2f | |||
| cc93834dee | |||
| 27a198768e | |||
| 2f54205829 | |||
| ac6991fb5f | |||
| 61a77ce1d5 |
2
Makefile
2
Makefile
@ -5,7 +5,7 @@
|
||||
VERSION = 2017
|
||||
PATCHLEVEL = 05
|
||||
SUBLEVEL =
|
||||
EXTRAVERSION = -rc3
|
||||
EXTRAVERSION =
|
||||
NAME =
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
||||
@ -94,7 +94,7 @@ int dram_init_banksize(void)
|
||||
|
||||
ac = fdt_address_cells(fdt, 0);
|
||||
sc = fdt_size_cells(fdt, 0);
|
||||
if (ac < 1 || sc > 2 || sc < 1 || sc > 2) {
|
||||
if (ac < 1 || ac > 2 || sc < 1 || sc > 2) {
|
||||
printf("invalid address/size cells\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
@ -264,13 +264,13 @@ static int load_devicetree(void)
|
||||
#else
|
||||
char *dtbname = getenv("dtb");
|
||||
char *dtbdev = getenv("dtbdev");
|
||||
char *dtppart = getenv("dtbpart");
|
||||
if (!dtbdev || !dtbdev || !dtbname) {
|
||||
char *dtbpart = getenv("dtbpart");
|
||||
if (!dtbdev || !dtbpart || !dtbname) {
|
||||
printf("%s: <dtbdev>/<dtbpart>/<dtb> missing.\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (fs_set_blk_dev(dtbdev, dtppart, FS_TYPE_EXT)) {
|
||||
if (fs_set_blk_dev(dtbdev, dtbpart, FS_TYPE_EXT)) {
|
||||
puts("load_devicetree: set_blk_dev failed.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -296,6 +296,9 @@ static void atmel_spi_cs_activate(struct udevice *dev)
|
||||
struct dm_spi_slave_platdata *slave_plat = dev_get_parent_platdata(dev);
|
||||
u32 cs = slave_plat->cs;
|
||||
|
||||
if (!dm_gpio_is_valid(&priv->cs_gpios[cs]))
|
||||
return;
|
||||
|
||||
dm_gpio_set_value(&priv->cs_gpios[cs], 0);
|
||||
}
|
||||
|
||||
@ -306,6 +309,9 @@ static void atmel_spi_cs_deactivate(struct udevice *dev)
|
||||
struct dm_spi_slave_platdata *slave_plat = dev_get_parent_platdata(dev);
|
||||
u32 cs = slave_plat->cs;
|
||||
|
||||
if (!dm_gpio_is_valid(&priv->cs_gpios[cs]))
|
||||
return;
|
||||
|
||||
dm_gpio_set_value(&priv->cs_gpios[cs], 1);
|
||||
}
|
||||
|
||||
@ -473,6 +479,9 @@ static int atmel_spi_probe(struct udevice *bus)
|
||||
}
|
||||
|
||||
for(i = 0; i < ARRAY_SIZE(priv->cs_gpios); i++) {
|
||||
if (!dm_gpio_is_valid(&priv->cs_gpios[i]))
|
||||
continue;
|
||||
|
||||
dm_gpio_set_dir_flags(&priv->cs_gpios[i],
|
||||
GPIOD_IS_OUT | GPIOD_IS_OUT_ACTIVE);
|
||||
}
|
||||
|
||||
@ -692,6 +692,5 @@ U_BOOT_DRIVER(omap3_spi) = {
|
||||
.probe = omap3_spi_probe,
|
||||
.ops = &omap3_spi_ops,
|
||||
.priv_auto_alloc_size = sizeof(struct omap3_spi_priv),
|
||||
.probe = omap3_spi_probe,
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -56,6 +56,8 @@ struct zynq_spi_platdata {
|
||||
struct zynq_spi_regs *regs;
|
||||
u32 frequency; /* input frequency */
|
||||
u32 speed_hz;
|
||||
uint deactivate_delay_us; /* Delay to wait after deactivate */
|
||||
uint activate_delay_us; /* Delay to wait after activate */
|
||||
};
|
||||
|
||||
/* zynq spi priv */
|
||||
@ -63,6 +65,7 @@ struct zynq_spi_priv {
|
||||
struct zynq_spi_regs *regs;
|
||||
u8 cs;
|
||||
u8 mode;
|
||||
ulong last_transaction_us; /* Time of last transaction end */
|
||||
u8 fifo_depth;
|
||||
u32 freq; /* required frequency */
|
||||
};
|
||||
@ -78,6 +81,10 @@ static int zynq_spi_ofdata_to_platdata(struct udevice *bus)
|
||||
/* FIXME: Use 250MHz as a suitable default */
|
||||
plat->frequency = fdtdec_get_int(blob, node, "spi-max-frequency",
|
||||
250000000);
|
||||
plat->deactivate_delay_us = fdtdec_get_int(blob, node,
|
||||
"spi-deactivate-delay", 0);
|
||||
plat->activate_delay_us = fdtdec_get_int(blob, node,
|
||||
"spi-activate-delay", 0);
|
||||
plat->speed_hz = plat->frequency / 2;
|
||||
|
||||
debug("%s: regs=%p max-frequency=%d\n", __func__,
|
||||
@ -133,10 +140,19 @@ static int zynq_spi_probe(struct udevice *bus)
|
||||
static void spi_cs_activate(struct udevice *dev)
|
||||
{
|
||||
struct udevice *bus = dev->parent;
|
||||
struct zynq_spi_platdata *plat = bus->platdata;
|
||||
struct zynq_spi_priv *priv = dev_get_priv(bus);
|
||||
struct zynq_spi_regs *regs = priv->regs;
|
||||
u32 cr;
|
||||
|
||||
/* If it's too soon to do another transaction, wait */
|
||||
if (plat->deactivate_delay_us && priv->last_transaction_us) {
|
||||
ulong delay_us; /* The delay completed so far */
|
||||
delay_us = timer_get_us() - priv->last_transaction_us;
|
||||
if (delay_us < plat->deactivate_delay_us)
|
||||
udelay(plat->deactivate_delay_us - delay_us);
|
||||
}
|
||||
|
||||
clrbits_le32(®s->cr, ZYNQ_SPI_CR_CS_MASK);
|
||||
cr = readl(®s->cr);
|
||||
/*
|
||||
@ -147,15 +163,23 @@ static void spi_cs_activate(struct udevice *dev)
|
||||
*/
|
||||
cr |= (~(1 << priv->cs) << ZYNQ_SPI_CR_SS_SHIFT) & ZYNQ_SPI_CR_CS_MASK;
|
||||
writel(cr, ®s->cr);
|
||||
|
||||
if (plat->activate_delay_us)
|
||||
udelay(plat->activate_delay_us);
|
||||
}
|
||||
|
||||
static void spi_cs_deactivate(struct udevice *dev)
|
||||
{
|
||||
struct udevice *bus = dev->parent;
|
||||
struct zynq_spi_platdata *plat = bus->platdata;
|
||||
struct zynq_spi_priv *priv = dev_get_priv(bus);
|
||||
struct zynq_spi_regs *regs = priv->regs;
|
||||
|
||||
setbits_le32(®s->cr, ZYNQ_SPI_CR_CS_MASK);
|
||||
|
||||
/* Remember time of this transaction so we can honour the bus delay */
|
||||
if (plat->deactivate_delay_us)
|
||||
priv->last_transaction_us = timer_get_us();
|
||||
}
|
||||
|
||||
static int zynq_spi_claim_bus(struct udevice *dev)
|
||||
|
||||
@ -55,4 +55,6 @@
|
||||
MESON_FDTFILE_SETTING \
|
||||
BOOTENV
|
||||
|
||||
#define CONFIG_SYS_BOOTM_LEN (64 << 20) /* 64 MiB */
|
||||
|
||||
#endif /* __MESON_GXBB_COMMON_CONFIG_H */
|
||||
|
||||
@ -41,11 +41,13 @@ int buf_free (circbuf_t * buf)
|
||||
int buf_pop (circbuf_t * buf, char *dest, unsigned int len)
|
||||
{
|
||||
unsigned int i;
|
||||
char *p = buf->top;
|
||||
char *p;
|
||||
|
||||
assert (buf != NULL);
|
||||
assert (dest != NULL);
|
||||
|
||||
p = buf->top;
|
||||
|
||||
/* Cap to number of bytes in buffer */
|
||||
if (len > buf->size)
|
||||
len = buf->size;
|
||||
@ -69,11 +71,13 @@ int buf_push (circbuf_t * buf, const char *src, unsigned int len)
|
||||
{
|
||||
/* NOTE: this function allows push to overwrite old data. */
|
||||
unsigned int i;
|
||||
char *p = buf->tail;
|
||||
char *p;
|
||||
|
||||
assert (buf != NULL);
|
||||
assert (src != NULL);
|
||||
|
||||
p = buf->tail;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
*p++ = src[i];
|
||||
if (p == buf->end) {
|
||||
|
||||
@ -27,9 +27,11 @@ static void debug(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
va_start(args, fmt);
|
||||
if (debug_en)
|
||||
if (debug_en) {
|
||||
va_start(args, fmt);
|
||||
vprintf(fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
}
|
||||
|
||||
static bool supported_rela(Elf64_Rela *rela)
|
||||
|
||||
@ -433,7 +433,7 @@ int main(int argc, char **argv)
|
||||
break;
|
||||
case 'c':
|
||||
info.ecc_strength = strtol(optarg, &endptr, 0);
|
||||
if (endptr || *endptr == '/')
|
||||
if (*endptr == '/')
|
||||
info.ecc_step_size = strtol(endptr + 1, NULL, 0);
|
||||
break;
|
||||
case 'p':
|
||||
|
||||
Reference in New Issue
Block a user