On 10/09/2017 09:28 PM, Stefano Babic wrote:
> Hi Marek,

Hi,

clip please ...

[...]

>> +static int setup_dhcom_mac_from_fuse(void)
>> +{
>> +    unsigned char enetaddr[6];
>> +    u32 fuseval[2];
>> +    int ret;
>> +
>> +    ret = eth_env_get_enetaddr("ethaddr", enetaddr);
>> +    if (ret)        /* ethaddr is already set */
>> +            return 0;
>> +
>> +    ret = fuse_read(4, 2, &fuseval[0]);
>> +    if (ret) {
>> +            printf("Error reading the eFUSE0 with MAC address\n");
>> +            return ret;
>> +    }
>> +
>> +    ret = fuse_read(4, 3, &fuseval[1]);
>> +    if (ret) {
>> +            printf("Error reading the eFUSE1 with MAC address\n");
>> +            return ret;
>> +    }
>> +
>> +    enetaddr[0] = fuseval[1] >> 8;
>> +    enetaddr[1] = fuseval[1] >> 0;
>> +    enetaddr[2] = fuseval[0] >> 24;
>> +    enetaddr[3] = fuseval[0] >> 16;
>> +    enetaddr[4] = fuseval[0] >> 8;
>> +    enetaddr[5] = fuseval[0] >> 0;
>> +
> 
> 
> Is the first part different as imx_get_mac_from_fuse() ?  It looks like
> to me that MAC is stored as usually in bank 4, address 2.
> 
> If yes, you can call the function instead reading yourself from fuses.

Cool, that's what I was looking for, thanks.

>> +    if (is_valid_ethaddr(enetaddr)) {
>> +            eth_env_set_enetaddr("ethaddr", enetaddr);
>> +            return 0;
>> +    }
>> +
>> +    ret = i2c_set_bus_num(2);
>> +    if (ret) {
>> +            printf("Error switching I2C bus!\n");
>> +            return ret;
>> +    }
>> +
>> +    ret = i2c_read(EEPROM_I2C_ADDRESS, 0xfa, 0x1, enetaddr, 0x6);
>> +    if (ret) {
>> +            printf("Error reading configuration EEPROM!\n");
>> +            return ret;
>> +    }
>> +
>> +    if (is_valid_ethaddr(enetaddr))
>> +            eth_env_set_enetaddr("ethaddr", enetaddr);
>> +
>> +    return 0;
>> +}
>> +
>> +int board_early_init_f(void)
>> +{
>> +#ifdef CONFIG_USB_EHCI_MX6
>> +    setup_usb();
>> +#endif
>> +
>> +    return 0;
>> +}
>> +
>> +#ifdef CONFIG_MXC_SPI
>> +int board_spi_cs_gpio(unsigned bus, unsigned cs)
>> +{
>> +    if (bus == 0 && cs == 0)
>> +            return IMX_GPIO_NR(2, 30);
>> +    else
>> +            return -1;
>> +}
>> +#endif
>> +
>> +int board_init(void)
>> +{
>> +    struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
>> +
>> +    /* address of boot parameters */
>> +    gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
>> +
>> +    /* Enable eim_slow clocks */
>> +    setbits_le32(&mxc_ccm->CCGR6, 0x1 << MXC_CCM_CCGR6_EMI_SLOW_OFFSET);
>> +
>> +#ifdef CONFIG_SYS_I2C_MXC
>> +    if (is_mx6dq()) {
>> +            setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &dh6dq_i2c_pad_info0);
>> +            setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &dh6dq_i2c_pad_info1);
>> +            setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &dh6dq_i2c_pad_info2);
>> +    } else {
>> +            setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &dh6sdl_i2c_pad_info0);
>> +            setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &dh6sdl_i2c_pad_info1);
>> +            setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &dh6sdl_i2c_pad_info2);
>> +    }
>> +#endif
>> +
>> +#ifdef CONFIG_SATA
>> +    setup_sata();
>> +#endif
>> +
>> +    setup_dhcom_mac_from_fuse();
>> +
>> +    return 0;
>> +}
>> +
>> +#ifdef CONFIG_CMD_BMODE
>> +static const struct boot_mode board_boot_modes[] = {
>> +    /* 4 bit bus width */
>> +    {"sd2",  MAKE_CFGVAL(0x40, 0x28, 0x00, 0x00)},
>> +    {"sd3",  MAKE_CFGVAL(0x40, 0x30, 0x00, 0x00)},
>> +    /* 8 bit bus width */
>> +    {"emmc", MAKE_CFGVAL(0x40, 0x38, 0x00, 0x00)},
>> +    {NULL,   0},
>> +};
>> +#endif
>> +
>> +#define HW_CODE_BIT_0       IMX_GPIO_NR(2, 19)
>> +#define HW_CODE_BIT_1       IMX_GPIO_NR(6, 6)
>> +#define HW_CODE_BIT_2       IMX_GPIO_NR(2, 16)
>> +
>> +static int board_get_hwcode(void)
>> +{
>> +    int hw_code;
>> +
>> +    gpio_direction_input(HW_CODE_BIT_0);
>> +    gpio_direction_input(HW_CODE_BIT_1);
>> +    gpio_direction_input(HW_CODE_BIT_2);
>> +
>> +    /* HW 100 + HW 200 = 00b; HW 300 = 01b */
>> +    hw_code = ((gpio_get_value(HW_CODE_BIT_2) << 2) |
>> +               (gpio_get_value(HW_CODE_BIT_1) << 1) |
>> +                gpio_get_value(HW_CODE_BIT_0)) + 2;
>> +
>> +    return hw_code;
>> +}
>> +
>> +int board_late_init(void)
>> +{
>> +    u32 hw_code, cpu_rev;
>> +    char buf[16];
>> +
>> +    cpu_rev = get_cpu_rev();
>> +    hw_code = board_get_hwcode();
>> +
>> +    switch (cpu_rev >> 12) {
> 
> Nitpick: there is a macro for it, get_cpu_type()

Fixed

>> +    case MXC_CPU_MX6SOLO:
>> +            snprintf(buf, sizeof(buf), "imx6s-dhcom%1d", hw_code);
>> +            break;
>> +    case MXC_CPU_MX6DL:
>> +            snprintf(buf, sizeof(buf), "imx6dl-dhcom%1d", hw_code);
>> +            break;
>> +    case MXC_CPU_MX6D:
>> +            snprintf(buf, sizeof(buf), "imx6d-dhcom%1d", hw_code);
>> +            break;
>> +    case MXC_CPU_MX6Q:
>> +            snprintf(buf, sizeof(buf), "imx6q-dhcom%1d", hw_code);
>> +            break;
>> +    default:
>> +            snprintf(buf, sizeof(buf), "UNKNOWN%1d", hw_code);
>> +            break;
>> +    }
>> +
>> +    env_set("dhcom", buf);
>> +
>> +#ifdef CONFIG_CMD_BMODE
>> +    add_board_boot_modes(board_boot_modes);
>> +#endif
>> +    return 0;
>> +}

[...]
-- 
Best regards,
Marek Vasut
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to