diff --git a/arch/arm/include/asm/arch-am33xx/ddr_defs.h b/arch/arm/include/asm/arch-am33xx/ddr_defs.h index 4d89952..2135ded 100644 --- a/arch/arm/include/asm/arch-am33xx/ddr_defs.h +++ b/arch/arm/include/asm/arch-am33xx/ddr_defs.h @@ -112,6 +112,38 @@ #define MT41K256M16HA125E_PHY_FIFO_WE 0x94 #define MT41K256M16HA125E_IOCTRL_VALUE 0x18B +/* Samsung K4B4G1646E-BYK0 */ +#define K4B4G1646EBYK0_EMIF_READ_LATENCY 0x100007 +#define K4B4G1646EBYK0_EMIF_TIM1 0x0AAAE51B +#define K4B4G1646EBYK0_EMIF_TIM2 0x267B7FDA +#define K4B4G1646EBYK0_EMIF_TIM3 0x501F877F +#define K4B4G1646EBYK0_EMIF_SDCFG 0x61C05332 +#define K4B4G1646EBYK0_EMIF_SDREF 0xC30 +#define K4B4G1646EBYK0_ZQ_CFG 0x50074BE4 +#define K4B4G1646EBYK0_RATIO 0x80 +#define K4B4G1646EBYK0_INVERT_CLKOUT 0x0 +#define K4B4G1646EBYK0_RD_DQS 0x3B +#define K4B4G1646EBYK0_WR_DQS 0x4A +#define K4B4G1646EBYK0_PHY_WR_DATA 0x83 +#define K4B4G1646EBYK0_PHY_FIFO_WE 0xA4 +#define K4B4G1646EBYK0_IOCTRL_VALUE 0x18B + +/* Micron MT41K256M16HA-125ITE */ +#define MT41K256M16HA125ITE_EMIF_READ_LATENCY 0x100007 +#define MT41K256M16HA125ITE_EMIF_TIM1 0x0AAAE51B +#define MT41K256M16HA125ITE_EMIF_TIM2 0x267B7FDA +#define MT41K256M16HA125ITE_EMIF_TIM3 0x501F877F +#define MT41K256M16HA125ITE_EMIF_SDCFG 0x61C05332 +#define MT41K256M16HA125ITE_EMIF_SDREF 0xC30 +#define MT41K256M16HA125ITE_ZQ_CFG 0x50074BE4 +#define MT41K256M16HA125ITE_RATIO 0x80 +#define MT41K256M16HA125ITE_INVERT_CLKOUT 0x0 +#define MT41K256M16HA125ITE_RD_DQS 0x3D +#define MT41K256M16HA125ITE_WR_DQS 0x4B +#define MT41K256M16HA125ITE_PHY_WR_DATA 0x7F +#define MT41K256M16HA125ITE_PHY_FIFO_WE 0x9D +#define MT41K256M16HA125ITE_IOCTRL_VALUE 0x18B + /* Micron MT41J512M8RH-125 on EVM v1.5 */ #define MT41J512M8RH125_EMIF_READ_LATENCY 0x100006 #define MT41J512M8RH125_EMIF_TIM1 0x0888A39B diff --git a/board/embedian/smarct335x/board.c b/board/embedian/smarct335x/board.c index 77bc3b7..5ab58f1 100644 --- a/board/embedian/smarct335x/board.c +++ b/board/embedian/smarct335x/board.c @@ -150,10 +150,17 @@ static const struct ddr_data ddr3_beagleblack_data = { }; static const struct ddr_data ddr3_smarct335x_data = { - .datardsratio0 = MT41K256M16HA125E_RD_DQS, - .datawdsratio0 = MT41K256M16HA125E_WR_DQS, - .datafwsratio0 = MT41K256M16HA125E_PHY_FIFO_WE, - .datawrsratio0 = MT41K256M16HA125E_PHY_WR_DATA, + .datardsratio0 = K4B4G1646EBYK0_RD_DQS, + .datawdsratio0 = K4B4G1646EBYK0_WR_DQS, + .datafwsratio0 = K4B4G1646EBYK0_PHY_FIFO_WE, + .datawrsratio0 = K4B4G1646EBYK0_PHY_WR_DATA, +}; + +static const struct ddr_data ddr3_smarct335x80_data = { + .datardsratio0 = MT41K256M16HA125ITE_RD_DQS, + .datawdsratio0 = MT41K256M16HA125ITE_WR_DQS, + .datafwsratio0 = MT41K256M16HA125ITE_PHY_FIFO_WE, + .datawrsratio0 = MT41K256M16HA125ITE_PHY_WR_DATA, }; static const struct ddr_data ddr3_evm_data = { @@ -186,14 +193,25 @@ static const struct cmd_control ddr3_beagleblack_cmd_ctrl_data = { }; static const struct cmd_control ddr3_smarct335x_cmd_ctrl_data = { - .cmd0csratio = MT41K256M16HA125E_RATIO, - .cmd0iclkout = MT41K256M16HA125E_INVERT_CLKOUT, + .cmd0csratio = K4B4G1646EBYK0_RATIO, + .cmd0iclkout = K4B4G1646EBYK0_INVERT_CLKOUT, + + .cmd1csratio = K4B4G1646EBYK0_RATIO, + .cmd1iclkout = K4B4G1646EBYK0_INVERT_CLKOUT, + + .cmd2csratio = K4B4G1646EBYK0_RATIO, + .cmd2iclkout = K4B4G1646EBYK0_INVERT_CLKOUT, +}; + +static const struct cmd_control ddr3_smarct335x80_cmd_ctrl_data = { + .cmd0csratio = MT41K256M16HA125ITE_RATIO, + .cmd0iclkout = MT41K256M16HA125ITE_INVERT_CLKOUT, - .cmd1csratio = MT41K256M16HA125E_RATIO, - .cmd1iclkout = MT41K256M16HA125E_INVERT_CLKOUT, + .cmd1csratio = MT41K256M16HA125ITE_RATIO, + .cmd1iclkout = MT41K256M16HA125ITE_INVERT_CLKOUT, - .cmd2csratio = MT41K256M16HA125E_RATIO, - .cmd2iclkout = MT41K256M16HA125E_INVERT_CLKOUT, + .cmd2csratio = MT41K256M16HA125ITE_RATIO, + .cmd2iclkout = MT41K256M16HA125ITE_INVERT_CLKOUT, }; static const struct cmd_control ddr3_evm_cmd_ctrl_data = { @@ -229,13 +247,23 @@ static struct emif_regs ddr3_beagleblack_emif_reg_data = { }; static struct emif_regs ddr3_smarct335x_emif_reg_data = { - .sdram_config = MT41K256M16HA125E_EMIF_SDCFG, - .ref_ctrl = MT41K256M16HA125E_EMIF_SDREF, - .sdram_tim1 = MT41K256M16HA125E_EMIF_TIM1, - .sdram_tim2 = MT41K256M16HA125E_EMIF_TIM2, - .sdram_tim3 = MT41K256M16HA125E_EMIF_TIM3, - .zq_config = MT41K256M16HA125E_ZQ_CFG, - .emif_ddr_phy_ctlr_1 = MT41K256M16HA125E_EMIF_READ_LATENCY, + .sdram_config = K4B4G1646EBYK0_EMIF_SDCFG, + .ref_ctrl = K4B4G1646EBYK0_EMIF_SDREF, + .sdram_tim1 = K4B4G1646EBYK0_EMIF_TIM1, + .sdram_tim2 = K4B4G1646EBYK0_EMIF_TIM2, + .sdram_tim3 = K4B4G1646EBYK0_EMIF_TIM3, + .zq_config = K4B4G1646EBYK0_ZQ_CFG, + .emif_ddr_phy_ctlr_1 = K4B4G1646EBYK0_EMIF_READ_LATENCY, +}; + +static struct emif_regs ddr3_smarct335x80_emif_reg_data = { + .sdram_config = MT41K256M16HA125ITE_EMIF_SDCFG, + .ref_ctrl = MT41K256M16HA125ITE_EMIF_SDREF, + .sdram_tim1 = MT41K256M16HA125ITE_EMIF_TIM1, + .sdram_tim2 = MT41K256M16HA125ITE_EMIF_TIM2, + .sdram_tim3 = MT41K256M16HA125ITE_EMIF_TIM3, + .zq_config = MT41K256M16HA125ITE_ZQ_CFG, + .emif_ddr_phy_ctlr_1 = MT41K256M16HA125ITE_EMIF_READ_LATENCY, }; static struct emif_regs ddr3_evm_emif_reg_data = { @@ -278,7 +306,7 @@ void am33xx_spl_board_init(void) /* Get the frequency */ dpll_mpu_opp100.m = am335x_get_efuse_mpu_max_freq(cdev); - if (board_is_bone(&header) || board_is_bone_lt(&header) || board_is_smarc_t335x(&header) || board_is_smarc_t335x_1g(&header)) { + if (board_is_bone(&header) || board_is_bone_lt(&header) || board_is_smarc_t335x(&header) || board_is_smarc_t335x_80(&header) || board_is_smarc_t335x_1g(&header)) { /* BeagleBone and SMARC T335X PMIC Code */ int usb_cur_lim; @@ -424,7 +452,7 @@ const struct dpll_params *get_dpll_ddr_params(void) return &dpll_ddr_evm_sk; else if (board_is_bone_lt(&header)) return &dpll_ddr_bone_black; - else if (board_is_smarc_t335x(&header) || board_is_smarc_t335x_1g(&header)) + else if (board_is_smarc_t335x(&header) || board_is_smarc_t335x_80(&header) || board_is_smarc_t335x_1g(&header)) return &dpll_ddr_smarc_t335x; else if (board_is_evm_15_or_later(&header)) return &dpll_ddr_evm_sk; @@ -481,11 +509,19 @@ const struct ctrl_ioregs ioregs_bonelt = { }; const struct ctrl_ioregs ioregs_smarct335x = { - .cm0ioctl = MT41K256M16HA125E_IOCTRL_VALUE, - .cm1ioctl = MT41K256M16HA125E_IOCTRL_VALUE, - .cm2ioctl = MT41K256M16HA125E_IOCTRL_VALUE, - .dt0ioctl = MT41K256M16HA125E_IOCTRL_VALUE, - .dt1ioctl = MT41K256M16HA125E_IOCTRL_VALUE, + .cm0ioctl = K4B4G1646EBYK0_IOCTRL_VALUE, + .cm1ioctl = K4B4G1646EBYK0_IOCTRL_VALUE, + .cm2ioctl = K4B4G1646EBYK0_IOCTRL_VALUE, + .dt0ioctl = K4B4G1646EBYK0_IOCTRL_VALUE, + .dt1ioctl = K4B4G1646EBYK0_IOCTRL_VALUE, +}; + +const struct ctrl_ioregs ioregs_smarct335x80 = { + .cm0ioctl = MT41K256M16HA125ITE_IOCTRL_VALUE, + .cm1ioctl = MT41K256M16HA125ITE_IOCTRL_VALUE, + .cm2ioctl = MT41K256M16HA125ITE_IOCTRL_VALUE, + .dt0ioctl = MT41K256M16HA125ITE_IOCTRL_VALUE, + .dt1ioctl = MT41K256M16HA125ITE_IOCTRL_VALUE, }; const struct ctrl_ioregs ioregs_evm15 = { @@ -541,8 +577,23 @@ void sdram_init(void) &ddr3_smarct335x_data, &ddr3_smarct335x_cmd_ctrl_data, &ddr3_smarct335x_emif_reg_data, 0); - puts("Set DDR3 to 800MHz.\n"); + udelay(1600); } + else if (board_is_smarc_t335x_80(&header)) { + /* + * SMARC T335X rev. 00B0 and later use gpio0_7 as LCD backlight PWM and gpio1_22 as LCD backlight enable. + * This is safe enough to do on older revs. + */ + gpio_request(GPIO_LCD_BKLT_EN, "lcd_bklt_en"); + gpio_direction_output(GPIO_LCD_BKLT_EN, 1); + gpio_request(GPIO_LCD_PWM_EN, "lcd_pwm_en"); + gpio_direction_output(GPIO_LCD_PWM_EN, 1); + config_ddr(400, &ioregs_smarct335x80, + &ddr3_smarct335x80_data, + &ddr3_smarct335x80_cmd_ctrl_data, + &ddr3_smarct335x80_emif_reg_data, 0); + udelay(1200); + } else if (board_is_evm_15_or_later(&header)) config_ddr(303, MT41J512M8RH125_IOCTRL_VALUE, &ddr3_evm_data, &ddr3_evm_cmd_ctrl_data, &ddr3_evm_emif_reg_data, 0); @@ -700,7 +751,7 @@ int board_eth_init(bd_t *bis) writel(MII_MODE_ENABLE, &cdev->miisel); cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if = PHY_INTERFACE_MODE_MII; - } else if (board_is_smarc_t335x(&header) || board_is_smarc_t335x_1g(&header)) { + } else if (board_is_smarc_t335x(&header) || board_is_smarc_t335x_80(&header) || board_is_smarc_t335x_1g(&header)) { writel((RMII_MODE_ENABLE | RMII_CHIPCKL_ENABLE), &cdev->miisel); cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if = PHY_INTERFACE_MODE_RMII; diff --git a/board/embedian/smarct335x/board.h b/board/embedian/smarct335x/board.h index 623d9a2..c89db78 100644 --- a/board/embedian/smarct335x/board.h +++ b/board/embedian/smarct335x/board.h @@ -44,6 +44,11 @@ static inline int board_is_smarc_t335x(struct am335x_baseboard_id *header) return !strncmp(header->name, "SMARCT33", HDR_NAME_LEN); } +static inline int board_is_smarc_t335x_80(struct am335x_baseboard_id *header) +{ + return !strncmp(header->name, "SMARCT80", HDR_NAME_LEN); +} + static inline int board_is_smarc_t335x_1g(struct am335x_baseboard_id *header) { return !strncmp(header->name, "SMARCT1G", HDR_NAME_LEN); diff --git a/board/embedian/smarct335x/mux.c b/board/embedian/smarct335x/mux.c index 8557a77..d17af13 100644 --- a/board/embedian/smarct335x/mux.c +++ b/board/embedian/smarct335x/mux.c @@ -475,6 +475,17 @@ void enable_board_pin_mux(struct am335x_baseboard_id *header) configure_module_pin_mux(smarc_gpio_pin_mux); configure_module_pin_mux(spi0_pin_mux); configure_module_pin_mux(lcdc_pin_mux); + } else if (!strncmp(header->name, "SMARCT80", HDR_NAME_LEN)) { + /* SMARC T335X 80 pinmux */ + configure_module_pin_mux(i2c1_pin_mux); + configure_module_pin_mux(mmc0_pin_mux); + configure_module_pin_mux(mmc1_pin_mux); + configure_module_pin_mux(uart3_pin_mux); + configure_module_pin_mux(rmii1_pin_mux); + configure_module_pin_mux(rmii2_pin_mux); + configure_module_pin_mux(smarc_gpio_pin_mux); + configure_module_pin_mux(spi0_pin_mux); + configure_module_pin_mux(lcdc_pin_mux); } else if (!strncmp(header->name, "SMARCT1G", HDR_NAME_LEN)) { /* SMARC T335X 1G pinmux */ configure_module_pin_mux(i2c1_pin_mux); diff --git a/include/configs/smarct335x_evm.h b/include/configs/smarct335x_evm.h index a82559c..419596d 100644 --- a/include/configs/smarct335x_evm.h +++ b/include/configs/smarct335x_evm.h @@ -179,6 +179,8 @@ "setenv fdtfile am335x-boneblack.dtb; setenv fdtbase am335x-boneblack; fi; " \ "if test $board_name = SMARCT33; then " \ "setenv fdtfile am335x-smarct335x.dtb; setenv fdtbase am335x-smarct335x.dtb; fi; " \ + "if test $board_name = SMARCT80; then " \ + "setenv fdtfile am335x-smarct335x.dtb; setenv fdtbase am335x-smarct335x.dtb; fi; " \ "if test $board_name = SMARCT1G; then " \ "setenv fdtfile am335x-smarct335x.dtb; setenv fdtbase am335x-smarct335x.dtb; fi; " \ "if test $board_name = A33515BB; then " \