mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
Merge branch 'master' of git://www.denx.de/git/u-boot-imx
This commit is contained in:
@@ -581,8 +581,16 @@ void bus_i2c_init(int index, int speed, int unused,
|
||||
return;
|
||||
}
|
||||
|
||||
mxc_i2c_buses[index].idle_bus_fn = idle_bus_fn;
|
||||
mxc_i2c_buses[index].idle_bus_data = idle_bus_data;
|
||||
/*
|
||||
* Warning: Be careful to allow the assignment to a static
|
||||
* variable here. This function could be called while U-Boot is
|
||||
* still running in flash memory. So such assignment is equal
|
||||
* to write data to flash without erasing.
|
||||
*/
|
||||
if (idle_bus_fn)
|
||||
mxc_i2c_buses[index].idle_bus_fn = idle_bus_fn;
|
||||
if (idle_bus_data)
|
||||
mxc_i2c_buses[index].idle_bus_data = idle_bus_data;
|
||||
|
||||
ret = enable_i2c_clk(1, index);
|
||||
if (ret < 0) {
|
||||
|
||||
@@ -502,15 +502,22 @@ static void set_sysctl(struct mmc *mmc, uint clock)
|
||||
|
||||
clk = (pre_div << 8) | (div << 4);
|
||||
|
||||
#ifdef CONFIG_FSL_USDHC
|
||||
esdhc_setbits32(®s->sysctl, SYSCTL_RSTA);
|
||||
#else
|
||||
esdhc_clrbits32(®s->sysctl, SYSCTL_CKEN);
|
||||
#endif
|
||||
|
||||
esdhc_clrsetbits32(®s->sysctl, SYSCTL_CLOCK_MASK, clk);
|
||||
|
||||
udelay(10000);
|
||||
|
||||
clk = SYSCTL_PEREN | SYSCTL_CKEN;
|
||||
#ifdef CONFIG_FSL_USDHC
|
||||
esdhc_clrbits32(®s->sysctl, SYSCTL_RSTA);
|
||||
#else
|
||||
esdhc_setbits32(®s->sysctl, SYSCTL_PEREN | SYSCTL_CKEN);
|
||||
#endif
|
||||
|
||||
esdhc_setbits32(®s->sysctl, clk);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
@@ -585,7 +592,9 @@ static int esdhc_init(struct mmc *mmc)
|
||||
esdhc_write32(®s->scr, 0x00000040);
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_FSL_USDHC
|
||||
esdhc_setbits32(®s->sysctl, SYSCTL_HCKEN | SYSCTL_IPGEN);
|
||||
#endif
|
||||
|
||||
/* Set the initial clock speed */
|
||||
mmc_set_clock(mmc, 400000);
|
||||
@@ -657,8 +666,10 @@ int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg)
|
||||
/* First reset the eSDHC controller */
|
||||
esdhc_reset(regs);
|
||||
|
||||
#ifndef CONFIG_FSL_USDHC
|
||||
esdhc_setbits32(®s->sysctl, SYSCTL_PEREN | SYSCTL_HCKEN
|
||||
| SYSCTL_IPGEN | SYSCTL_CKEN);
|
||||
#endif
|
||||
|
||||
writel(SDHCI_IRQ_EN_BITS, ®s->irqstaten);
|
||||
memset(&cfg->cfg, 0, sizeof(cfg->cfg));
|
||||
|
||||
@@ -131,13 +131,25 @@ static void fec_mii_setspeed(struct ethernet_regs *eth)
|
||||
/*
|
||||
* Set MII_SPEED = (1/(mii_speed * 2)) * System Clock
|
||||
* and do not drop the Preamble.
|
||||
*
|
||||
* The i.MX28 and i.MX6 types have another field in the MSCR (aka
|
||||
* MII_SPEED) register that defines the MDIO output hold time. Earlier
|
||||
* versions are RAZ there, so just ignore the difference and write the
|
||||
* register always.
|
||||
* The minimal hold time according to IEE802.3 (clause 22) is 10 ns.
|
||||
* HOLDTIME + 1 is the number of clk cycles the fec is holding the
|
||||
* output.
|
||||
* The HOLDTIME bitfield takes values between 0 and 7 (inclusive).
|
||||
* Given that ceil(clkrate / 5000000) <= 64, the calculation for
|
||||
* holdtime cannot result in a value greater than 3.
|
||||
*/
|
||||
register u32 speed = DIV_ROUND_UP(imx_get_fecclk(), 5000000);
|
||||
u32 pclk = imx_get_fecclk();
|
||||
u32 speed = DIV_ROUND_UP(pclk, 5000000);
|
||||
u32 hold = DIV_ROUND_UP(pclk, 100000000) - 1;
|
||||
#ifdef FEC_QUIRK_ENET_MAC
|
||||
speed--;
|
||||
#endif
|
||||
speed <<= 1;
|
||||
writel(speed, ð->mii_speed);
|
||||
writel(speed << 1 | hold << 8, ð->mii_speed);
|
||||
debug("%s: mii_speed %08x\n", __func__, readl(ð->mii_speed));
|
||||
}
|
||||
|
||||
@@ -1097,6 +1109,7 @@ int fecmxc_initialize_multi(bd_t *bd, int dev_id, int phy_id, uint32_t addr)
|
||||
#ifdef CONFIG_PHYLIB
|
||||
phydev = phy_find_by_mask(bus, 1 << phy_id, PHY_INTERFACE_MODE_RGMII);
|
||||
if (!phydev) {
|
||||
mdio_unregister(bus);
|
||||
free(bus);
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -1108,6 +1121,7 @@ int fecmxc_initialize_multi(bd_t *bd, int dev_id, int phy_id, uint32_t addr)
|
||||
#ifdef CONFIG_PHYLIB
|
||||
free(phydev);
|
||||
#endif
|
||||
mdio_unregister(bus);
|
||||
free(bus);
|
||||
}
|
||||
return ret;
|
||||
|
||||
@@ -75,6 +75,7 @@
|
||||
#define UCR4_DREN (1<<0) /* Recv data ready interrupt enable */
|
||||
#define UFCR_RXTL_SHF 0 /* Receiver trigger level shift */
|
||||
#define UFCR_RFDIV (7<<7) /* Reference freq divider mask */
|
||||
#define UFCR_RFDIV_SHF 7 /* Reference freq divider shift */
|
||||
#define UFCR_TXTL_SHF 10 /* Transmitter trigger level shift */
|
||||
#define USR1_PARITYERR (1<<15) /* Parity error interrupt flag */
|
||||
#define USR1_RTSS (1<<14) /* RTS pin status */
|
||||
@@ -135,6 +136,10 @@
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#define TXTL 2 /* reset default */
|
||||
#define RXTL 1 /* reset default */
|
||||
#define RFDIV 4 /* divide input clock by 2 */
|
||||
|
||||
static void mxc_serial_setbrg(void)
|
||||
{
|
||||
u32 clk = imx_get_uartclk();
|
||||
@@ -142,7 +147,9 @@ static void mxc_serial_setbrg(void)
|
||||
if (!gd->baudrate)
|
||||
gd->baudrate = CONFIG_BAUDRATE;
|
||||
|
||||
__REG(UART_PHYS + UFCR) = 4 << 7; /* divide input clock by 2 */
|
||||
__REG(UART_PHYS + UFCR) = (RFDIV << UFCR_RFDIV_SHF)
|
||||
| (TXTL << UFCR_TXTL_SHF)
|
||||
| (RXTL << UFCR_RXTL_SHF);
|
||||
__REG(UART_PHYS + UBIR) = 0xf;
|
||||
__REG(UART_PHYS + UBMR) = clk / (2 * gd->baudrate);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user