Changeset 31397


Ignore:
Timestamp:
Feb 14, 2017, 11:35:47 PM (4 months ago)
Author:
brainslayer
Message:

update

Location:
src/linux/universal/linux-4.4
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-4.4/arch/mips/cavium-octeon/octeon-platform.c

    r28606 r31397  
    606606}
    607607
     608void __init ubnt_dt_set_mac(void)
     609{
     610        int i, aliases, pip, iface, eth;
     611        const char *pip_path;
     612        u64 mac_addr_base;
     613        char nbuf[20];
     614
     615        if ((aliases = fdt_path_offset(initial_boot_params, "/aliases")) < 0)
     616                return;
     617
     618        if (!(pip_path = fdt_getprop(initial_boot_params, aliases, "pip",
     619                                     NULL)))
     620                return;
     621
     622        if ((pip = fdt_path_offset(initial_boot_params, pip_path)) < 0)
     623                return;
     624
     625        if ((iface = fdt_subnode_offset(initial_boot_params, pip,
     626                                        "interface@0")) < 0)
     627                return;
     628
     629        mac_addr_base =
     630                ((octeon_bootinfo->mac_addr_base[0] & 0xffull)) << 40 |
     631                ((octeon_bootinfo->mac_addr_base[1] & 0xffull)) << 32 |
     632                ((octeon_bootinfo->mac_addr_base[2] & 0xffull)) << 24 |
     633                ((octeon_bootinfo->mac_addr_base[3] & 0xffull)) << 16 |
     634                ((octeon_bootinfo->mac_addr_base[4] & 0xffull)) << 8 |
     635                (octeon_bootinfo->mac_addr_base[5] & 0xffull);
     636
     637        for (i = 0; i < 4; i++) {
     638                snprintf(nbuf, sizeof(nbuf), "ethernet@%x", i);
     639                eth = fdt_subnode_offset(initial_boot_params, iface, nbuf);
     640                if (eth < 0)
     641                        break;
     642                octeon_fdt_set_mac_addr(eth, &mac_addr_base);
     643        }
     644}
     645
    608646int __init octeon_prune_device_tree(void)
    609647{
  • src/linux/universal/linux-4.4/arch/mips/cavium-octeon/setup.c

    r31395 r31397  
    10931093extern const char __appended_dtb;
    10941094extern const char __dtb_octeon_3xxx_begin;
     1095extern const char __dtb_octeon_3xxx_end;
    10951096extern const char __dtb_octeon_68xx_begin;
     1097extern const char __dtb_octeon_68xx_end;
    10961098extern const char __dtb_ubnt_e100_begin;
    10971099extern const char __dtb_ubnt_e100_end;
     
    11001102void __init device_tree_init(void)
    11011103{
    1102         const void *fdt;
     1104        void *fdt;
    11031105        bool do_prune;
    11041106        bool do_set_mac = false;
     1107        int dt_size;
    11051108
    11061109#ifdef CONFIG_MIPS_ELF_APPENDED_DTB
     
    11161119                        panic("Corrupt Device Tree passed to kernel.");
    11171120                do_prune = false;
     1121                dt_size = fdt_totalsize(fdt);
    11181122                pr_info("Using passed Device Tree.\n");
    11191123        } else if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
    1120                 fdt = &__dtb_octeon_68xx_begin;
     1124                fdt = (void*)&__dtb_octeon_68xx_begin;
     1125                dt_size = &__dtb_octeon_68xx_end - &__dtb_octeon_68xx_begin;
    11211126                do_prune = true;
    11221127        } else if (octeon_bootinfo->board_type == CVMX_BOARD_TYPE_UBNT_E100) {
     
    11381143                do_set_mac = true;
    11391144        } else if (octeon_bootinfo->board_type == CVMX_BOARD_TYPE_UBNT_E120) {
    1140                 fdt = (struct boot_param_header *)
     1145                fdt = (void*)
    11411146                        &__dtb_ubnt_e100_begin;
    11421147                dt_size = &__dtb_ubnt_e100_end
     
    11451150                do_set_mac = true;
    11461151        } else {
    1147                 fdt = &__dtb_octeon_3xxx_begin;
     1152                fdt = (void*)&__dtb_octeon_3xxx_begin;
     1153                dt_size = &__dtb_octeon_3xxx_end - &__dtb_octeon_3xxx_begin;
    11481154                do_prune = true;
    11491155        }
    11501156
    1151         initial_boot_params = (void *)fdt;
     1157        initial_boot_params = early_init_dt_alloc_memory_arch(dt_size, 8);
     1158        if (initial_boot_params == NULL)
     1159                panic("Could not allocate initial_boot_params\n");
     1160        memcpy(initial_boot_params, fdt, dt_size);
    11521161
    11531162        if (do_prune) {
     
    11571166        if (do_set_mac)
    11581167                ubnt_dt_set_mac();
    1159         unflatten_and_copy_device_tree();
     1168        unflatten_device_tree();
    11601169}
    11611170
  • src/linux/universal/linux-4.4/drivers/i2c/busses/i2c-octeon.c

    r28606 r31397  
    213213static int octeon_i2c_wait(struct octeon_i2c *i2c)
    214214{
    215         long result;
     215        int result;
    216216
    217217        if (i2c->broken_irq_mode) {
     
    237237        octeon_i2c_int_disable(i2c);
    238238
    239         if (result == 0) {
     239
     240        if (result <= 0 && octeon_i2c_test_iflg(i2c)) {
     241                dev_err(i2c->dev, "broken irq connection detected, switching to polling mode.\n");
     242                i2c->broken_irq_mode = 1;
     243                return 0;
     244        }
     245
     246        if (result < 0) {
     247                dev_dbg(i2c->dev, "%s: wait interrupted\n", __func__);
     248                return result;
     249        } else if (result == 0) {
    240250                dev_dbg(i2c->dev, "%s: timeout\n", __func__);
    241251                return -ETIMEDOUT;
Note: See TracChangeset for help on using the changeset viewer.